File Manager - Version 5.1.1

Version Description

(22 February, 2019)= * Minor Bug fixed.

Download this release

Release Info

Developer aihimel
Plugin Icon 128x128 File Manager
Version 5.1.1
Comparing to
See all releases

Code changes from version 5.0.2 to 5.1.1

Files changed (50) hide show
  1. BootStart/BootStart.php +52 -47
  2. changelog.txt +0 -13
  3. css/admin-style.css +0 -556
  4. css/style.css +321 -0
  5. css/style.min.css +1 -0
  6. elFinder/LICENSE.md +1 -1
  7. elFinder/README.md +0 -209
  8. elFinder/css/elfinder.full.css +3950 -1764
  9. elFinder/css/elfinder.min.css +3 -3
  10. elFinder/css/theme.css +310 -26
  11. elFinder/img/arrows-active.png +0 -0
  12. elFinder/img/arrows-normal.png +0 -0
  13. elFinder/img/crop.gif +0 -0
  14. elFinder/img/dialogs.png +0 -0
  15. elFinder/img/editor-icons.png +0 -0
  16. elFinder/img/icons-big.png +0 -0
  17. elFinder/img/icons-big.svg +1 -0
  18. elFinder/img/icons-small.png +0 -0
  19. elFinder/img/logo.png +0 -0
  20. elFinder/img/progress.gif +0 -0
  21. elFinder/img/quicklook-bg.png +0 -0
  22. elFinder/img/quicklook-icons.png +0 -0
  23. elFinder/img/spinner-mini.gif +0 -0
  24. elFinder/img/toolbar.png +0 -0
  25. elFinder/img/trashmesh.png +0 -0
  26. elFinder/img/tui-icon-a.svg +235 -0
  27. elFinder/img/tui-icon-b.svg +224 -0
  28. elFinder/img/tui-icon-c.svg +224 -0
  29. elFinder/img/tui-icon-d.svg +224 -0
  30. elFinder/img/ui-icons_ffffff_256x240.png +0 -0
  31. elFinder/img/volume_icon_box.svg +1 -0
  32. elFinder/img/volume_icon_dropbox.png +0 -0
  33. elFinder/img/volume_icon_dropbox.svg +1 -0
  34. elFinder/img/volume_icon_ftp.png +0 -0
  35. elFinder/img/volume_icon_ftp.svg +1 -0
  36. elFinder/img/volume_icon_googledrive.png +0 -0
  37. elFinder/img/volume_icon_googledrive.svg +1 -0
  38. elFinder/img/volume_icon_local.png +0 -0
  39. elFinder/img/volume_icon_local.svg +1 -0
  40. elFinder/img/volume_icon_network.png +0 -0
  41. elFinder/img/volume_icon_network.svg +1 -0
  42. elFinder/img/volume_icon_onedrive.png +0 -0
  43. elFinder/img/volume_icon_onedrive.svg +1 -0
  44. elFinder/img/volume_icon_sql.png +0 -0
  45. elFinder/img/volume_icon_sql.svg +1 -0
  46. elFinder/img/volume_icon_trash.png +0 -0
  47. elFinder/img/volume_icon_trash.svg +1 -0
  48. elFinder/img/volume_icon_zip.png +0 -0
  49. elFinder/img/volume_icon_zip.svg +1 -0
  50. elFinder/js/elfinder.full.js +9077 -5369
BootStart/BootStart.php CHANGED
@@ -5,10 +5,10 @@ defined('ABSPATH') or die();
5
 
6
  // Directory Seperator
7
  if( !defined( 'DS' ) ){
8
-
9
  PHP_OS == "Windows" || PHP_OS == "WINNT" ? define("DS", "\\") : define("DS", "/");
10
-
11
- }
12
 
13
  /**
14
  *
@@ -71,7 +71,7 @@ abstract class FM_BootStart{
71
  *
72
  * */
73
  public $upload_path;
74
-
75
  /**
76
  *
77
  * @var string $upload_url :: This variable holds the url of the default upload folder
@@ -85,7 +85,7 @@ abstract class FM_BootStart{
85
  *
86
  * */
87
  protected $menu_data;
88
-
89
  /**
90
  *
91
  * Constructor function
@@ -128,7 +128,11 @@ abstract class FM_BootStart{
128
  if(empty($this->options)) $this->options = array( // Setting up default values
129
  'file_manager_settings' => array(
130
  'show_url_path' => 'show',
131
- 'language' => array('code' => 'LANG'),
 
 
 
 
132
  'size' => array(
133
  'width' => 'auto',
134
  'height' => 600
@@ -136,15 +140,15 @@ abstract class FM_BootStart{
136
  ),
137
  );
138
  register_shutdown_function(array(&$this, 'save_options'));
139
-
140
  //auto:: $this->options = new FM_OptionsManager($this->name);
141
-
142
  // Creating upload folder.
143
  $this->upload_folder();
144
-
145
  // Frontend asset loading
146
  add_action('wp_enqueue_scripts', array(&$this, 'assets') );
147
-
148
  // Dashboard asset loading
149
  add_action('admin_enqueue_scripts', array(&$this, 'admin_assets') );
150
 
@@ -153,7 +157,7 @@ abstract class FM_BootStart{
153
 
154
  // Shortcode hook
155
  add_action( 'init', array(&$this, 'shortcode') );
156
-
157
  }
158
 
159
  /**
@@ -167,10 +171,10 @@ abstract class FM_BootStart{
167
 
168
  // This should have a standard variable list.
169
  /**
170
- *
171
  * ## Increase file upload limit
172
  * ## Turn on error if of php if debugging variable is defined and set to true.
173
- *
174
  * */
175
  ini_set('post_max_size', '128M');
176
  ini_set('upload_max_filesize', '128M');
@@ -182,15 +186,15 @@ abstract class FM_BootStart{
182
  *
183
  * */
184
  public function assets(){
185
-
186
  $this->elfinder_assets(); // Loads all the assets necessary for elFinder
187
-
188
  // Including front-style.css
189
  wp_register_style('fm-front-style', $this->url('css/front-style.css'), false);
190
 
191
  // Including front-script.js
192
  wp_register_script('fm-front-script', $this->url('js/front-script.js'), array(), '1.0.0', true );
193
-
194
  }
195
 
196
  /*
@@ -199,40 +203,41 @@ abstract class FM_BootStart{
199
  *
200
  * */
201
  public function admin_assets(){
202
-
203
  $this->elfinder_assets(); // Loads all the assets necessary for elFinder
204
-
205
  // Including admin-style.css
206
- wp_register_style( 'fmp-admin-style', $this->url('css/admin-style.css') );
207
 
208
  // Including admin-script.js
209
  wp_register_script( 'fmp-admin-script', $this->url('js/admin-script.js'), array('jquery') );
210
 
211
  }
212
-
213
  /**
214
- *
215
  * @function elfinder_assets
216
  * @description Registers all the elfinder assets
217
- *
218
  * */
219
  public function elfinder_assets(){
220
-
221
  $jquery_ui_url = $this->url('jquery-ui-1.11.4/jquery-ui.min.css');
222
  $jquery_ui_url = apply_filters('fm_jquery_ui_theme_hook', $jquery_ui_url);
223
-
224
  // Jquery UI CSS
225
  wp_register_style( 'fmp-jquery-ui-css', $jquery_ui_url);
226
-
227
  // elFinder CSS
228
- wp_register_style( 'fmp-elfinder-css', $this->url('elFinder/css/elfinder.min.css'), array('fmp-jquery-ui-css') );
229
-
230
  // elFinder theme CSS
231
  if($this->url('jquery-ui-1.11.4/jquery-ui.min.css') == $jquery_ui_url ) wp_register_style( 'fmp-elfinder-theme-css', $this->url('elFinder/css/theme.css'), array('fmp-elfinder-css') );
232
-
233
  // elFinder Scripts depends on jQuery UI core, selectable, draggable, droppable, resizable, dialog and slider.
234
  wp_register_script( 'fmp-elfinder-script', $this->url('elFinder/js/elfinder.full.js'), array('jquery', 'jquery-ui-core', 'jquery-ui-selectable', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-resizable', 'jquery-ui-dialog', 'jquery-ui-slider', 'jquery-ui-tabs') );
235
-
 
236
  }
237
 
238
  /**
@@ -245,27 +250,27 @@ abstract class FM_BootStart{
245
  if( empty( $this->menu_data ) ) return;
246
 
247
  if($this->menu_data['type'] == 'menu'){
248
-
249
  $capabilities = 'administrator';
250
  $capabilities = apply_filters('fm_capabilities', $capabilities);
251
-
252
  // Main Menu
253
  add_menu_page( $this->name, $this->name, $capabilities, $this->prefix, array(&$this, 'admin_panel'), $this->url('img/icon-24x24.png'), 7 );
254
-
255
  // Settings Page
256
  add_submenu_page( $this->prefix, 'File Manager Settings', 'Settings', 'manage_options', $this->zip( 'File Manager Settings' ), array( &$this, 'settings' ) );
257
 
258
  if(!defined('FILE_MANAGER_PREMIUM')){
259
- add_submenu_page(
260
  'file-manager', // Parent Slug
261
  'File Manager Permission System(pro)', // Page title
262
  'Permission System', // Menu title
263
  'manage_options', // User capabilities
264
  'file-manager-permission-system', // Menu Slug
265
- create_function( '', 'include plugin_dir_path( __FILE__ ) . ".." . DS . "views" . DS . "admin" . DS . "permission_system.php";' )
266
  );
267
  }
268
-
269
  }
270
 
271
  }
@@ -280,17 +285,17 @@ abstract class FM_BootStart{
280
  $this->render('', 'admin' . DS . 'index');
281
 
282
  }
283
-
284
  /**
285
  * Adds a settings page
286
- *
287
  * */
288
  public function settings(){
289
-
290
  if(!current_user_can('manage_options')) die( $this->render('', 'access-denied') );
291
 
292
  $this->render('', 'admin' . DS . 'settings');
293
-
294
  }
295
 
296
  /**
@@ -411,25 +416,25 @@ abstract class FM_BootStart{
411
  if( !is_dir($this->upload_path ) ) mkdir( $this->upload_path , 0777 );
412
 
413
  }
414
-
415
  /**
416
- *
417
  * string compression function
418
- *
419
  * */
420
  public function zip($string){
421
-
422
  $string = trim($string);
423
  $string = str_replace(' ', '-', $string);
424
  $string = strtolower($string);
425
  return $string;
426
-
427
  }
428
-
429
  /**
430
- *
431
  * @function save_options
432
- *
433
  * */
434
  public function save_options(){
435
  update_option($this->prefix, $this->options);
5
 
6
  // Directory Seperator
7
  if( !defined( 'DS' ) ){
8
+
9
  PHP_OS == "Windows" || PHP_OS == "WINNT" ? define("DS", "\\") : define("DS", "/");
10
+
11
+ }
12
 
13
  /**
14
  *
71
  *
72
  * */
73
  public $upload_path;
74
+
75
  /**
76
  *
77
  * @var string $upload_url :: This variable holds the url of the default upload folder
85
  *
86
  * */
87
  protected $menu_data;
88
+
89
  /**
90
  *
91
  * Constructor function
128
  if(empty($this->options)) $this->options = array( // Setting up default values
129
  'file_manager_settings' => array(
130
  'show_url_path' => 'show',
131
+ 'language' => array(
132
+ 'code' => 'LANG',
133
+ 'name' => 'Default',
134
+ 'file-url' => plugins_url( '../elFinder/js/i18n/elfinder.LANG.js', __FILE__ ),
135
+ ),
136
  'size' => array(
137
  'width' => 'auto',
138
  'height' => 600
140
  ),
141
  );
142
  register_shutdown_function(array(&$this, 'save_options'));
143
+
144
  //auto:: $this->options = new FM_OptionsManager($this->name);
145
+
146
  // Creating upload folder.
147
  $this->upload_folder();
148
+
149
  // Frontend asset loading
150
  add_action('wp_enqueue_scripts', array(&$this, 'assets') );
151
+
152
  // Dashboard asset loading
153
  add_action('admin_enqueue_scripts', array(&$this, 'admin_assets') );
154
 
157
 
158
  // Shortcode hook
159
  add_action( 'init', array(&$this, 'shortcode') );
160
+
161
  }
162
 
163
  /**
171
 
172
  // This should have a standard variable list.
173
  /**
174
+ *
175
  * ## Increase file upload limit
176
  * ## Turn on error if of php if debugging variable is defined and set to true.
177
+ *
178
  * */
179
  ini_set('post_max_size', '128M');
180
  ini_set('upload_max_filesize', '128M');
186
  *
187
  * */
188
  public function assets(){
189
+
190
  $this->elfinder_assets(); // Loads all the assets necessary for elFinder
191
+
192
  // Including front-style.css
193
  wp_register_style('fm-front-style', $this->url('css/front-style.css'), false);
194
 
195
  // Including front-script.js
196
  wp_register_script('fm-front-script', $this->url('js/front-script.js'), array(), '1.0.0', true );
197
+
198
  }
199
 
200
  /*
203
  *
204
  * */
205
  public function admin_assets(){
206
+
207
  $this->elfinder_assets(); // Loads all the assets necessary for elFinder
208
+
209
  // Including admin-style.css
210
+ wp_register_style( 'fmp-admin-style', $this->url('css/style.min.css') );
211
 
212
  // Including admin-script.js
213
  wp_register_script( 'fmp-admin-script', $this->url('js/admin-script.js'), array('jquery') );
214
 
215
  }
216
+
217
  /**
218
+ *
219
  * @function elfinder_assets
220
  * @description Registers all the elfinder assets
221
+ *
222
  * */
223
  public function elfinder_assets(){
224
+
225
  $jquery_ui_url = $this->url('jquery-ui-1.11.4/jquery-ui.min.css');
226
  $jquery_ui_url = apply_filters('fm_jquery_ui_theme_hook', $jquery_ui_url);
227
+
228
  // Jquery UI CSS
229
  wp_register_style( 'fmp-jquery-ui-css', $jquery_ui_url);
230
+
231
  // elFinder CSS
232
+ wp_register_style( 'fmp-elfinder-css', $this->url('elFinder/css/elfinder.full.css'), array('fmp-jquery-ui-css') );
233
+
234
  // elFinder theme CSS
235
  if($this->url('jquery-ui-1.11.4/jquery-ui.min.css') == $jquery_ui_url ) wp_register_style( 'fmp-elfinder-theme-css', $this->url('elFinder/css/theme.css'), array('fmp-elfinder-css') );
236
+
237
  // elFinder Scripts depends on jQuery UI core, selectable, draggable, droppable, resizable, dialog and slider.
238
  wp_register_script( 'fmp-elfinder-script', $this->url('elFinder/js/elfinder.full.js'), array('jquery', 'jquery-ui-core', 'jquery-ui-selectable', 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-resizable', 'jquery-ui-dialog', 'jquery-ui-slider', 'jquery-ui-tabs') );
239
+ wp_register_script( 'fmp-elfinder-editor-script', $this->url('elFinder/js/extras/editors.default.js'), array('fmp-elfinder-script') );
240
+
241
  }
242
 
243
  /**
250
  if( empty( $this->menu_data ) ) return;
251
 
252
  if($this->menu_data['type'] == 'menu'){
253
+
254
  $capabilities = 'administrator';
255
  $capabilities = apply_filters('fm_capabilities', $capabilities);
256
+
257
  // Main Menu
258
  add_menu_page( $this->name, $this->name, $capabilities, $this->prefix, array(&$this, 'admin_panel'), $this->url('img/icon-24x24.png'), 7 );
259
+
260
  // Settings Page
261
  add_submenu_page( $this->prefix, 'File Manager Settings', 'Settings', 'manage_options', $this->zip( 'File Manager Settings' ), array( &$this, 'settings' ) );
262
 
263
  if(!defined('FILE_MANAGER_PREMIUM')){
264
+ add_submenu_page(
265
  'file-manager', // Parent Slug
266
  'File Manager Permission System(pro)', // Page title
267
  'Permission System', // Menu title
268
  'manage_options', // User capabilities
269
  'file-manager-permission-system', // Menu Slug
270
+ function(){include plugin_dir_path( __FILE__ ) . ".." . DS . "views" . DS . "admin" . DS . "permission_system.php";}
271
  );
272
  }
273
+
274
  }
275
 
276
  }
285
  $this->render('', 'admin' . DS . 'index');
286
 
287
  }
288
+
289
  /**
290
  * Adds a settings page
291
+ *
292
  * */
293
  public function settings(){
294
+
295
  if(!current_user_can('manage_options')) die( $this->render('', 'access-denied') );
296
 
297
  $this->render('', 'admin' . DS . 'settings');
298
+
299
  }
300
 
301
  /**
416
  if( !is_dir($this->upload_path ) ) mkdir( $this->upload_path , 0777 );
417
 
418
  }
419
+
420
  /**
421
+ *
422
  * string compression function
423
+ *
424
  * */
425
  public function zip($string){
426
+
427
  $string = trim($string);
428
  $string = str_replace(' ', '-', $string);
429
  $string = strtolower($string);
430
  return $string;
431
+
432
  }
433
+
434
  /**
435
+ *
436
  * @function save_options
437
+ *
438
  * */
439
  public function save_options(){
440
  update_option($this->prefix, $this->options);
changelog.txt DELETED
@@ -1,13 +0,0 @@
1
- Version 2.2.1
2
- - BootStart/HL7.php
3
- - BootStart/FTP.php
4
- - BootStart/REST.php
5
- - BootStart/Debug.php
6
- - BootStart/ChacheEngine.php
7
- - views/admin/settings.php
8
- - views/404.php
9
- - views/access-denied.php
10
- - views/shortcode_name_view.php
11
-
12
- Version 2.2.2
13
- - BootStart/CSV.php
 
 
 
 
 
 
 
 
 
 
 
 
 
css/admin-style.css DELETED
@@ -1,556 +0,0 @@
1
- .bootstart-admin-container{
2
- float: unset;
3
- margin: 0px auto;
4
- margin-right: 12px;
5
- padding: 0px;
6
- }
7
-
8
- .bootstart-admin-header{
9
- font-size: 1.8em;
10
- text-align: center;
11
- }
12
-
13
- .bootstart-admin-header h2{
14
- color: #43EBCC;
15
- }
16
-
17
- .bootstart-admin-navigation{
18
- text-align: center;
19
- }
20
-
21
- .bootstart-admin-navigation ul li{
22
- display: inline-block;
23
- font-size: 1.2em;
24
- margin: 5px;
25
- padding:10px;
26
- }
27
-
28
- .bootstart-admin-navigation ul li:hover{
29
- border-bottom: 2px solid #43EBCC;
30
- }
31
-
32
- .bootstart-admin-active-page{
33
- border-bottom: 2px solid #43EBCC;
34
- }
35
-
36
- .bootstart-admin-navigation ul li a{
37
- text-decoration: none;
38
- }
39
-
40
- .bootstart-admin-footer{
41
- text-align: center;
42
- font-size: 130%;
43
- padding: 5px;
44
- margin: 5px;
45
- }
46
-
47
- .bootstart-admin-content{
48
- margin: 10px;
49
- padding: 10px;
50
- }
51
-
52
- .bootstart-admin-content input{
53
- display: inline;
54
- }
55
-
56
- .bootstart-admin-content label{
57
- font-size: 120%;
58
- font-weight: bold;
59
- margin-right: 10px;
60
- }
61
-
62
- .form-blokc{
63
- display: block;
64
- margin: 10px;
65
- padding: 10px;
66
- }
67
-
68
- .form-blokc small{
69
- color: gray;
70
- }
71
-
72
- .bootstart-admin-content input[type='submit']{
73
- padding: 10px;
74
- border-radius: 10px;
75
- font-size: 120%;
76
- background-color: #31A6CB;
77
- color: white;
78
- font-weight: bold;
79
- box-shadow: unset;
80
- }
81
-
82
- .bootstart-admin-footer{
83
- border-top: 2px solid gray;
84
- margin-top: 20px;
85
- padding: 10px;
86
- padding-top: 20px;
87
- }
88
-
89
- .bootstart-admin-footer span a{
90
- text-decoration: none;
91
- color: white;
92
- }
93
-
94
- .file-manager-shortcode-table{
95
- margin: 10px;
96
- padding: 10px;
97
- }
98
-
99
- .file-manager-shortcode-table td{
100
- margin: 5px;
101
- padding: 5px;
102
- }
103
-
104
- .file-manager-shortcode-table-shortcode{
105
- font-weight: bold;
106
- font-size: 120%;
107
- }
108
-
109
- .bootstart-admin-footer ul li{
110
- display: inline-block;
111
- margin: 5px;
112
- padding: 15px;
113
- }
114
-
115
- .bootstart-admin-footer ul li a{
116
- text-decoration: none;
117
- }
118
-
119
- .fmp_extend{
120
- background-color: #31A6CB;
121
- color: white;
122
- }
123
-
124
- .fmp_extend a{
125
- color: white;
126
- }
127
-
128
- .fm_permission_system_advert img{
129
- width: 25%;
130
- border: 2px solid cyan;
131
- display: inline-block;
132
- margin: 5px;
133
- padding: 5px;
134
- margin-bottom: 0px;
135
- display: block;
136
- margin-left: auto;
137
- margin-right: auto;
138
- }
139
-
140
- .fm_permission_system_advert span{
141
- width: 100%;
142
- display: inline-block;
143
- margin: 10px;
144
- padding: 10px;
145
- text-align: center;
146
- }
147
-
148
- input[type=checkbox]
149
- {
150
- -webkit-appearance:checkbox !important;
151
- }
152
-
153
- input[type=radio]
154
- {
155
- -webkit-appearance:radio !important;
156
- }
157
-
158
- .footer-sticky-button{
159
- background: none;
160
- margin: 0;
161
- position: fixed;
162
- bottom: 0;
163
- right: 0;
164
- z-index: 100;
165
- background-color: #B10C0C;
166
- padding: 10px;
167
- border-radius: 5px;
168
- }
169
-
170
- .footer-sticky-button a{
171
- text-decoration: none;
172
- color: white;
173
- font-size: 1.1em;
174
- }
175
-
176
- /**
177
- *
178
- * Donation Style
179
- *
180
- * */
181
- .fm-donate{
182
- text-align: center;
183
- margin: 10px;
184
- }
185
-
186
- .fm-donate > form {
187
- padding-bottom: 20px;
188
- }
189
-
190
- .fm-donate > p {
191
- text-align: justify;
192
- }
193
-
194
- .fm-donate > h2{
195
- color: #0073AA;
196
- padding-top: 20px;
197
- }
198
-
199
- /*Editor Font Re-fix*/
200
- .ui-widget textarea {
201
- font-family: Verdana,Arial,sans-serif,Trebuchet MS,Tahoma;
202
- font-size: 1.3em;
203
- background-color: #f0f0f0;
204
- padding:10px;
205
- text-align:left;
206
- }
207
- /*Editor Font Re-fix*/
208
-
209
- .bootstart-admin-content{
210
- max-width: 73%;
211
- min-width: 73%;
212
- margin-right: 2%;
213
- float: left;
214
- display: inline-block;
215
- }
216
-
217
- .bootstart-admin-sidebar{
218
- max-width: 22%;
219
- min-width: 22%;
220
- display: inline-block;
221
- min-height: 480px;
222
- padding-top: 18px;
223
- }
224
-
225
- .sidebar-highlight{
226
- text-align: center;
227
- color: #B10C0C;
228
- padding: 10px 0px 10px 0px;
229
- font-size: 1.2em;
230
- border-bottom: 2px solid #B10C0C;
231
- }
232
-
233
- .sidebar-highlight ul li{
234
- border-bottom: 1px solid #B10C0C;
235
- }
236
-
237
- .badge-pro{
238
- position: relative;
239
- }
240
-
241
- .badge-pro[data-badge]:after {
242
- content:attr(data-badge);
243
- position:absolute;
244
- top:-10px;
245
- right:-10px;
246
- font-size: 1em;
247
- background:#B10C0C;
248
- color:white;
249
- width:24px;
250
- height:24px;
251
- text-align:center;
252
- line-height:24px;
253
- border-radius:50%;
254
- box-shadow:0 0 1px #333;
255
- }
256
-
257
- .badge-free{
258
- position: relative;
259
- }
260
-
261
- .badge-free[data-badge]:after {
262
- content:attr(data-badge);
263
- position:absolute;
264
- top:-10px;
265
- right:-10px;
266
- font-size: 1em;
267
- background: white;
268
- color: black;
269
- width:24px;
270
- height:24px;
271
- text-align:center;
272
- line-height:24px;
273
- border-radius:50%;
274
- box-shadow:0 0 1px #333;
275
- }
276
-
277
-
278
- /**
279
- *
280
- * Style Rework
281
- *
282
- * */
283
-
284
- /**
285
- *
286
- * Header Style
287
- *
288
- * */
289
- .fm-header{
290
- box-shadow: 0 1px 0;
291
- padding-left: 50px;
292
- width: 94%;
293
- }
294
-
295
- .fm-header > h1 {
296
- color: #0073AA;
297
- display: inline-block;
298
- }
299
-
300
- .fm-header > ul {
301
- display: inline-block;
302
- float: right;
303
- }
304
-
305
- .fm-header > ul > li {
306
- display: inline-block;
307
- margin: 5px;
308
- padding: 5px;
309
- }
310
-
311
- /**
312
- *
313
- * Main Content Style
314
- *
315
- * */
316
- .fm-container{
317
- width: 98%;
318
- min-height: 500px;
319
- /*
320
- border: 2px solid black;
321
- */
322
- margin-top: 20px;
323
- }
324
-
325
- .col-main{
326
- width: 69.6%;
327
- min-height: 200px;
328
- /*
329
- border: 2px solid red;
330
- */
331
- float: left;
332
- }
333
-
334
- .col-sidebar{
335
- width: 29.6%;
336
- min-height: 200px;
337
- /*
338
- border: 2px solid red;
339
- */
340
- float: right;
341
- }
342
-
343
- .gb-fm-row{
344
- width: 98%;
345
- background-color: white;
346
- min-height: 100px;
347
- margin: 5px;
348
- margin-bottom: 20px;
349
- }
350
-
351
-
352
- /**
353
- *
354
- * File manager Style
355
- *
356
- * */
357
- #file-manager{
358
- }
359
-
360
-
361
- /**
362
- *
363
- * Marketing Style
364
- *
365
- * */
366
- .fm-marketing > a{
367
- color: white;
368
- text-decoration: none;
369
- font-size: 120%;
370
- padding: 5px;
371
- padding-left: 10px;
372
- padding-right: 10px;
373
- background-color: #D92519;
374
- }
375
-
376
-
377
- /**
378
- *
379
- * Extension sidebar module
380
- *
381
- * */
382
- .fm-extensions{
383
- margin: 10px;
384
- }
385
-
386
- .fm-extensions > h2 {
387
- color: #0073AA;
388
- padding-top: 20px;
389
- text-align: center;
390
- }
391
-
392
- /**
393
- *
394
- * Data
395
- *
396
- * */
397
- .fm-data{
398
- border-left: 5px solid #0073AA;
399
- }
400
-
401
- .fm-data > table{
402
- margin-left: auto;
403
- margin-right: auto;
404
- }
405
-
406
- .fm-data > table > tr > td{
407
- padding: 5px;
408
- }
409
-
410
- .fm-call-toaction{
411
- color: white;
412
- background-color: #D92519;
413
- font-size: 120%;
414
- padding: 10px;
415
- margin: 20px;
416
- }
417
-
418
- .fm-call-toaction:hover{
419
- color: white;
420
- }
421
-
422
- /**
423
- *
424
- * Footer Style
425
- *
426
- * */
427
- .fm-footer{
428
- width: 98%;
429
- /*
430
- border: 2px solid black;
431
- */
432
- float: left;
433
- background-color: #DDDDDD;
434
- text-align: center;
435
- }
436
-
437
- .fm-footer > ul > li {
438
- display: inline-block;
439
- margin-left: 10px;
440
- }
441
-
442
- /**
443
- * Settings Page form styling
444
- * */
445
- .fmp-settings h2{
446
- text-align: center;
447
- padding-top: 20px;
448
- padding-bottom: 20px;
449
- font-weight: bold;
450
- }
451
-
452
- .fmp-settings > form > h4{
453
- display: inline-block;
454
- margin-left: 20px;
455
- }
456
-
457
- .fmp-settings table{
458
- padding: 10px;
459
- padding-left: 20px;
460
- }
461
-
462
- .fmp-settings table td {
463
- padding: 10px;
464
- }
465
-
466
- .fmp-settings input[type=submit]{
467
- padding: 10px 20px 10px 20px;
468
- color: white;
469
- font-size: 120%;
470
- border-radius: 4px;
471
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
472
- background: rgb(28, 184, 65);
473
- cursor: pointer;
474
- }
475
-
476
- /**
477
- * File edit full screen
478
- * */
479
- div.ui-dialog:nth-child(7){
480
- width: 760px !important;
481
- top: 10px !important;
482
- left: 10px !important;
483
- }
484
-
485
- .elfinder-file-edit{
486
- height: 475px;
487
- }
488
- /**--------------------------------------------------**/
489
-
490
- /**
491
- * File preview fullscreen problem fix
492
- **/
493
-
494
- div.ui-helper-reset:nth-child(9){
495
- position: absolute !important;
496
- width: 760px !important;
497
- height: auto !important;
498
- top: 150px !important;
499
- left: 190px !important;
500
- }
501
-
502
- .elfinder-quicklook-preview{
503
- height: 510px;
504
- }
505
-
506
- div.elfinder-quicklook-navbar-icon:nth-child(2){
507
- display: none;
508
- }
509
- /**------------------------------------**/
510
-
511
- /**
512
- *
513
- * Designing Logo
514
- *
515
- * */
516
- .fm-logo{
517
- width: 50px;
518
- height: auto;
519
- position: relative;
520
- top: 15px;
521
- left: -15px;
522
- }
523
-
524
- /**
525
- *
526
- * File manager main view cross button hidden
527
- *
528
- * */
529
- span.ui-icon:nth-child(4){
530
- display: none !important;
531
- }
532
-
533
-
534
- /**
535
- *
536
- * Themepack style
537
- *
538
- * */
539
- .fmtp_theme_screenshot{
540
- max-width: 100px;
541
- }
542
-
543
- .fmtp_theme_wrapper{
544
- display: inline-block;
545
- width: 19%;
546
- }
547
-
548
- /**
549
- *
550
- * Notification
551
- *
552
- * */
553
- .fm-error{
554
- border-left: 4px solid red;
555
- display: block;
556
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/style.css ADDED
@@ -0,0 +1,321 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ input[type=checkbox] {
2
+ -webkit-appearance: checkbox !important; }
3
+
4
+ input[type=radio] {
5
+ -webkit-appearance: radio !important; }
6
+
7
+ .fm-header {
8
+ -webkit-box-shadow: 0px 1px 0px;
9
+ box-shadow: 0px 1px 0px;
10
+ padding-left: 50px;
11
+ width: 94%; }
12
+ .fm-header > h1 {
13
+ color: #0073AA;
14
+ display: inline-block; }
15
+ .fm-header > ul {
16
+ display: inline-block;
17
+ float: right; }
18
+ .fm-header > ul > li {
19
+ display: inline-block;
20
+ margin: 5px;
21
+ padding: 5px; }
22
+ .fm-header .fm-logo {
23
+ width: 50px;
24
+ height: auto;
25
+ position: relative;
26
+ top: 15px;
27
+ left: -15px; }
28
+ .fm-header .top-right-menu {
29
+ position: relative;
30
+ top: 25px; }
31
+
32
+ .fm-container .col-main .fm-data {
33
+ border-left: 5px solid #0073AA;
34
+ padding: 24px 0px 24px 0px; }
35
+ .fm-container .col-main .fm-data > table {
36
+ margin-left: auto;
37
+ margin-right: auto; }
38
+ .fm-container .col-main .fm-data > table > tr > tr {
39
+ padding: 5px; }
40
+
41
+ .fm-container .col-sidebar {
42
+ width: 30%; }
43
+ .fm-container .col-sidebar .fm-extensions {
44
+ margin: 10px; }
45
+ .fm-container .col-sidebar .fm-extensions > h2 {
46
+ color: #0073AA;
47
+ padding-top: 20px;
48
+ text-align: center; }
49
+
50
+ .fm-container {
51
+ width: 98%;
52
+ min-height: 500px;
53
+ margin-top: 20px; }
54
+ .fm-container .col-main {
55
+ width: 69.6%;
56
+ min-height: 200px;
57
+ float: left; }
58
+ .fm-container .col-sidebar {
59
+ min-width: 29.6;
60
+ min-height: 200px;
61
+ float: right; }
62
+ .fm-container .gb-fm-row {
63
+ width: 98%;
64
+ background-color: white;
65
+ min-height: 100px;
66
+ margin: 5px;
67
+ margin-bottom: 20px; }
68
+
69
+ .fm-marketing a {
70
+ color: white;
71
+ text-decoration: none;
72
+ font-size: 120%;
73
+ padding: 5px;
74
+ padding-left: 10px;
75
+ padding-right: 10px;
76
+ background-color: #D92519; }
77
+
78
+ .fm-call-toaction {
79
+ color: white;
80
+ background-color: #D92519;
81
+ font-size: 120%;
82
+ padding: 10px;
83
+ margin: 20px; }
84
+ .fm-call-toaction:hover {
85
+ color: white; }
86
+
87
+ .fm-footer {
88
+ width: 98%;
89
+ float: left;
90
+ background-color: #DDDDDD;
91
+ text-align: center; }
92
+ .fm-footer ul li {
93
+ display: inline-block;
94
+ margin-left: 10px; }
95
+
96
+ .fmp-settings h2 {
97
+ text-align: center;
98
+ padding-top: 20px;
99
+ padding-bottom: 20px;
100
+ font-weight: bold; }
101
+
102
+ .fmp-settings > form > h4 {
103
+ display: inline-block;
104
+ margin-left: 20px; }
105
+
106
+ .fmp-settings table {
107
+ padding: 10px;
108
+ padding-left: 20px; }
109
+ .fmp-settings table tr td {
110
+ padding: 10px; }
111
+
112
+ .fmp-settings input[type=submit] {
113
+ padding: 10px 20px 10px 20px;
114
+ color: white;
115
+ font-size: 120%;
116
+ border-radius: 4px;
117
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
118
+ background: #1cb841;
119
+ cursor: pointer; }
120
+
121
+ .fmtp_theme_wrapper {
122
+ display: inline-block;
123
+ width: 19%; }
124
+
125
+ .fmtp_theme_screenshot {
126
+ max-width: 100px; }
127
+
128
+ .file-manager-shortcode-table {
129
+ margin: 10px;
130
+ padding: 10px; }
131
+ .file-manager-shortcode-table td {
132
+ margin: 5px;
133
+ padding: 5px; }
134
+
135
+ .file-manager-shortcode-table-shortcode {
136
+ font-weight: bold;
137
+ font-size: 120%; }
138
+
139
+ .fmp_extend {
140
+ background-color: #31A6CB;
141
+ color: white; }
142
+ .fmp_extend a {
143
+ color: white; }
144
+
145
+ .fm_permission_system_advert img {
146
+ width: 25%;
147
+ border: 2px solid cyan;
148
+ display: inline-block;
149
+ margin: 5px;
150
+ padding: 5px;
151
+ margin-bottom: 5px;
152
+ display: block;
153
+ margin-left: auto;
154
+ margin-right: auto; }
155
+
156
+ .fm_permission_system_advert span {
157
+ width: 100%;
158
+ display: inline-block;
159
+ margin: 10px;
160
+ padding: 10px;
161
+ text-align: center; }
162
+
163
+ .footer-sticky-button {
164
+ background: none;
165
+ margin: 0px;
166
+ position: fixed;
167
+ bottom: 0px;
168
+ right: 0px;
169
+ z-index: 100;
170
+ background-color: #B10C0C;
171
+ padding: 10px;
172
+ border-radius: 5px; }
173
+ .footer-sticky-button a {
174
+ text-decoration: none;
175
+ color: white;
176
+ font-size: 1.1em; }
177
+
178
+ .badge-pro {
179
+ position: relative; }
180
+
181
+ .badge-pro[data-badge]:after {
182
+ content: attr(data-badge);
183
+ position: absolute;
184
+ top: -10px;
185
+ right: -10px;
186
+ font-size: 1em;
187
+ background: #B10C0C;
188
+ color: white;
189
+ width: 24px;
190
+ height: 24px;
191
+ text-align: center;
192
+ line-height: 24px;
193
+ border-radius: 50%;
194
+ -webkit-box-shadow: 0 0 1px #333;
195
+ box-shadow: 0 0 1px #333; }
196
+
197
+ .badge-free {
198
+ position: relative; }
199
+
200
+ .badge-free[data-badge]:after {
201
+ content: attr(data-badge);
202
+ position: absolute;
203
+ top: -10px;
204
+ right: -10px;
205
+ font-size: 1em;
206
+ background: white;
207
+ color: black;
208
+ width: 24px;
209
+ height: 24px;
210
+ text-align: center;
211
+ line-height: 24px;
212
+ border-radius: 50%;
213
+ -webkit-box-shadow: 0 0 1px #333;
214
+ box-shadow: 0 0 1px #333; }
215
+
216
+ .fm-error {
217
+ border-left: 4px solid red;
218
+ display: block; }
219
+
220
+ .fm-donation {
221
+ text-align: center;
222
+ margin: 10px; }
223
+ .fm-donation > form {
224
+ padding-bottom: 20px; }
225
+ .fm-donation > p {
226
+ text-align: justify; }
227
+ .fm-donation > h2 {
228
+ color: #0073AA;
229
+ padding-top: 20px; }
230
+
231
+ .ui-widget textarea {
232
+ font-family: Verdana,Arial,sans-serif,Trebuchet MS,Tahoma;
233
+ font-size: 1.3em;
234
+ background-color: #f0f0f0;
235
+ padding: 10px;
236
+ text-align: left; }
237
+
238
+ .ui-dialog:nth-child(7) {
239
+ width: 760px !important;
240
+ top: 10px !important;
241
+ left: 10px !important; }
242
+
243
+ .elfinder-file-edit {
244
+ height: 475px; }
245
+
246
+ .ui-helper-reset:nth-child(9) {
247
+ position: absolute !important;
248
+ width: 760px !important;
249
+ height: auto !important;
250
+ top: 150px !important;
251
+ left: 190px !important; }
252
+
253
+ .elfinder-quicklook-preview {
254
+ height: 510px; }
255
+
256
+ .elfinder-quicklook-navbar-icon:nth-child(2) {
257
+ display: none; }
258
+
259
+ .ui-icon:nth-child(4) {
260
+ display: none !important; }
261
+
262
+ .sudo-permission-system .col-main {
263
+ width: 100%; }
264
+ .sudo-permission-system .col-main .gb-fm-row img {
265
+ width: 100%; }
266
+ .sudo-permission-system .col-main .fmp-demo-notice {
267
+ width: 98%;
268
+ padding-left: 5px;
269
+ text-align: center;
270
+ padding-top: 20px;
271
+ padding-bottom: 20px; }
272
+ .sudo-permission-system .col-main .fmp-demo-notice button {
273
+ padding: 15px;
274
+ border-radius: 0px;
275
+ color: white;
276
+ background-color: #1CB841;
277
+ font-weight: bold;
278
+ border: 0px; }
279
+ .sudo-permission-system .col-main .fmp-demo-notice button:hover {
280
+ color: #1CB841;
281
+ padding: 14px;
282
+ background-color: #F1F1F1;
283
+ border: 1px solid #1CB841;
284
+ cursor: pointer; }
285
+
286
+ .review-block {
287
+ padding-top: 24px;
288
+ padding-bottom: 24px;
289
+ text-align: center;
290
+ font-size: 1.2em;
291
+ border: 1px dashed #0d5ed9;
292
+ border-radius: 10px; }
293
+ .review-block .message {
294
+ margin: 16px;
295
+ margin-top: 8px; }
296
+ .review-block .actions {
297
+ margin-top: 24px; }
298
+ .review-block .actions a {
299
+ padding: 5px 10px 5px 10px;
300
+ text-decoration: none;
301
+ border: 1px solid #0d5ed9; }
302
+ .review-block .actions .btn {
303
+ border-radius: 5px; }
304
+ .review-block .actions .btn-review {
305
+ background-color: #0d5ed9;
306
+ color: white;
307
+ font-weight: 700;
308
+ border-radius: 5px;
309
+ -webkit-transition-duration: 0.6s;
310
+ transition-duration: 0.6s; }
311
+ .review-block .actions .btn-review:hover {
312
+ -webkit-transition-duration: 0.6s;
313
+ transition-duration: 0.6s;
314
+ color: #0d5ed9;
315
+ background-color: white;
316
+ border: 2px solid #0d5ed9; }
317
+ .review-block .actions .btn-not-interested {
318
+ color: gray;
319
+ font-weight: 400;
320
+ border: 0px;
321
+ font-size: 1em; }
css/style.min.css ADDED
@@ -0,0 +1 @@
 
1
+ input[type=checkbox]{-webkit-appearance:checkbox!important}input[type=radio]{-webkit-appearance:radio!important}.fm-header{-webkit-box-shadow:0 1px 0;box-shadow:0 1px 0;padding-left:50px;width:94%}.fm-header>h1{color:#0073aa;display:inline-block}.fm-header>ul{display:inline-block;float:right}.fm-header>ul>li{display:inline-block;margin:5px;padding:5px}.fm-header .fm-logo{width:50px;height:auto;position:relative;top:15px;left:-15px}.fm-header .top-right-menu{position:relative;top:25px}.fm-container .col-main .fm-data{border-left:5px solid #0073aa;padding:24px 0}.fm-container .col-main .fm-data>table{margin-left:auto;margin-right:auto}.fm-container .col-main .fm-data>table>tr>tr{padding:5px}.fm-container .col-sidebar{width:30%}.fm-container .col-sidebar .fm-extensions{margin:10px}.fm-container .col-sidebar .fm-extensions>h2{color:#0073aa;padding-top:20px;text-align:center}.fm-container{width:98%;min-height:500px;margin-top:20px}.fm-container .col-main{width:69.6%;min-height:200px;float:left}.fm-container .col-sidebar{min-width:29.6;min-height:200px;float:right}.fm-container .gb-fm-row{width:98%;background-color:#fff;min-height:100px;margin:5px 5px 20px}.fm-call-toaction,.fm-marketing a{color:#fff;background-color:#d92519;font-size:120%}.fm-marketing a{text-decoration:none;padding:5px 10px}.fm-call-toaction{padding:10px;margin:20px}.fm-call-toaction:hover,.fmp_extend a{color:#fff}.fm-footer{width:98%;float:left;background-color:#ddd;text-align:center}.fm-footer ul li{display:inline-block;margin-left:10px}.fmp-settings h2{text-align:center;padding-top:20px;font-weight:700}.fmp-settings>form>h4{display:inline-block;margin-left:20px}.fmp-settings table{padding:10px 10px 10px 20px}.fmp-settings table tr td{padding:10px}.fmp-settings input[type=submit]{padding:10px 20px;color:#fff;font-size:120%;border-radius:4px;text-shadow:0 1px 1px rgba(0,0,0,.2);background:#1cb841;cursor:pointer}.fmtp_theme_wrapper{display:inline-block;width:19%}.fmtp_theme_screenshot{max-width:100px}.file-manager-shortcode-table{margin:10px;padding:10px}.file-manager-shortcode-table td{margin:5px;padding:5px}.file-manager-shortcode-table-shortcode{font-weight:700;font-size:120%}.fmp_extend{background-color:#31a6cb;color:#fff}.fm_permission_system_advert img{width:25%;border:2px solid #0ff;padding:5px;display:block;margin:5px auto}.fm_permission_system_advert span{width:100%;display:inline-block;margin:10px;padding:10px;text-align:center}.footer-sticky-button{background:0 0;margin:0;position:fixed;bottom:0;right:0;z-index:100;background-color:#b10c0c;padding:10px;border-radius:5px}.footer-sticky-button a{text-decoration:none;color:#fff;font-size:1.1em}.badge-free,.badge-pro{position:relative}.badge-free[data-badge]:after,.badge-pro[data-badge]:after{content:attr(data-badge);position:absolute;top:-10px;right:-10px;font-size:1em;width:24px;height:24px;text-align:center;line-height:24px;border-radius:50%;-webkit-box-shadow:0 0 1px #333;box-shadow:0 0 1px #333}.badge-pro[data-badge]:after{background:#b10c0c;color:#fff}.badge-free[data-badge]:after{background:#fff;color:#000}.fm-error{border-left:4px solid red;display:block}.fm-donation{text-align:center;margin:10px}.fm-donation>form,.fmp-settings h2{padding-bottom:20px}.fm-donation>p{text-align:justify}.fm-donation>h2{color:#0073aa;padding-top:20px}.ui-widget textarea{font-family:Verdana,Arial,sans-serif,Trebuchet MS,Tahoma;font-size:1.3em;background-color:#f0f0f0;padding:10px;text-align:left}.ui-dialog:nth-child(7){width:760px!important;top:10px!important;left:10px!important}.elfinder-file-edit{height:475px}.ui-helper-reset:nth-child(9){position:absolute!important;width:760px!important;height:auto!important;top:150px!important;left:190px!important}.elfinder-quicklook-preview{height:510px}.elfinder-quicklook-navbar-icon:nth-child(2){display:none}.ui-icon:nth-child(4){display:none!important}.sudo-permission-system .col-main,.sudo-permission-system .col-main .gb-fm-row img{width:100%}.sudo-permission-system .col-main .fmp-demo-notice{width:98%;padding-left:5px;text-align:center;padding-top:20px;padding-bottom:20px}.sudo-permission-system .col-main .fmp-demo-notice button{padding:15px;border-radius:0;color:#fff;background-color:#1cb841;font-weight:700;border:0}.sudo-permission-system .col-main .fmp-demo-notice button:hover{color:#1cb841;padding:14px;background-color:#f1f1f1;border:1px solid #1cb841;cursor:pointer}.review-block{padding-top:24px;padding-bottom:24px;text-align:center;font-size:1.2em;border:1px dashed #0d5ed9;border-radius:10px}.review-block .message{margin:8px 16px 16px}.review-block .actions{margin-top:24px}.review-block .actions a{padding:5px 10px;text-decoration:none;border:1px solid #0d5ed9}.review-block .actions .btn{border-radius:5px}.review-block .actions .btn-review{background-color:#0d5ed9;color:#fff;font-weight:700;border-radius:5px;-webkit-transition-duration:.6s;transition-duration:.6s}.review-block .actions .btn-review:hover{-webkit-transition-duration:.6s;transition-duration:.6s;color:#0d5ed9;background-color:#fff;border:2px solid #0d5ed9}.review-block .actions .btn-not-interested{color:gray;font-weight:400;border:0;font-size:1em}
elFinder/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
  elFinder is issued under a 3-clauses BSD license.
2
 
3
- Copyright (c) 2009-2016, Studio 42
4
  All rights reserved.
5
 
6
  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1
  elFinder is issued under a 3-clauses BSD license.
2
 
3
+ Copyright (c) 2009-2018, Studio 42
4
  All rights reserved.
5
 
6
  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
elFinder/README.md DELETED
@@ -1,209 +0,0 @@
1
- elFinder
2
- ========
3
- <pre>
4
- _ ______ _ _
5
- | | ____(_) | |
6
- ___| | |__ _ _ __ __| | ___ _ __
7
- / _ \ | __| | | '_ \ / _` |/ _ \ '__|
8
- | __/ | | | | | | | (_| | __/ |
9
- \___|_|_| |_|_| |_|\__,_|\___|_|
10
- </pre>
11
-
12
- elFinder is an open-source file manager for web, written in JavaScript using
13
- jQuery UI. Creation is inspired by simplicity and convenience of Finder program
14
- used in Mac OS X operating system.
15
-
16
- [![Download now!](http://studio-42.github.io/elFinder/images/download-icon.png)](https://github.com/Studio-42/elFinder/releases/latest)
17
- [![Packagist License](https://poser.pugx.org/studio-42/elfinder/license.png)](http://choosealicense.com/licenses/bsd-3-clause/)
18
- [![Latest Stable Version](https://poser.pugx.org/studio-42/elfinder/version.png)](https://packagist.org/packages/studio-42/elfinder)
19
- [![Total Downloads](https://poser.pugx.org/studio-42/elfinder/d/total.png)](https://packagist.org/packages/studio-42/elfinder)
20
-
21
- Contents
22
- --------
23
- * [Branches](#branches)
24
- * [Features](#features)
25
- * [Requirements](#requirements)
26
- * [Installation](#installation)
27
- * [Downloads](#downloads)
28
- * [Demo Sites](#demo-sites)
29
- * [FAQs](#faqs)
30
- * [3rd Party Connectors](#3rd-party-connectors)
31
- * [3rd Party Volume Drivers](#3rd-party-volume-drivers)
32
- * [3rd Party Themes](#3rd-party-themes)
33
- * [Support](#support)
34
- * [Authors](#authors)
35
- * [License](#license)
36
-
37
- Branches
38
- --------
39
- - [master](https://github.com/Studio-42/elFinder/tree/master) - Main development branch
40
- - [2.1-src](https://github.com/Studio-42/elFinder/tree/2.1-src) - 2.1 development branch, auto build to 2.1 on commit
41
- - [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
42
- - [2.1](https://github.com/Studio-42/elFinder/tree/2.1) - 2.1 nightly build branch
43
- - [2.0](https://github.com/Studio-42/elFinder/tree/2.0) - 2.0 nightly build branch
44
-
45
- Features
46
- --------
47
- **2.0.x**
48
- * All operations with files and folders on a remote server (copy, move,
49
- upload, create folder/file, rename, etc.)
50
- * High performance server backend and light client UI
51
- * Multi-root support
52
- * Local file system, MySQL, FTP volume storage drivers
53
- * Background file upload with Drag & Drop HTML5 support
54
- * List and Icons view
55
- * Keyboard shortcuts
56
- * Standard methods of file/group selection using mouse or keyboard
57
- * Move/Copy files with Drag & Drop
58
- * Archives create/extract (zip, rar, 7z, tar, gzip, bzip2)
59
- * Rich context menu and toolbar
60
- * Quicklook, preview for common file types
61
- * Edit text files and images
62
- * "Places" for your favorites
63
- * Calculate directory sizes
64
- * Thumbnails for image files
65
- * Easy to integrate with web editors (elRTE, CKEditor, TinyMCE)
66
- * Flexible configuration of access rights, upload file types, user interface
67
- and other
68
- * Extensibility
69
- * Simple client-server API based on JSON
70
-
71
- **2.1.x**
72
- * More High performance server backend and light client UI
73
- * Connector plugin
74
- * [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.
75
- * [AutoResize](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/AutoResize/plugin.php) : Auto resize on file upload.
76
- * [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.
77
- * [Sanitizer](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/Sanitizer/plugin.php) : Sanitizer of file-name and file-path etc.
78
- * [Watermark](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/Watermark/plugin.php) : Print watermark on file upload.
79
- * Folder upload with Chrome, Firefox and Edge
80
- * Chunked file upload
81
- * Upload directly to the folder
82
- * Upload form URL (or list)
83
- * Creating the archive by specifying the file name
84
- * Direct extraction to the current working directory (you do not want to create a folder)
85
- * Supports Dropbox.com&copy; (Configurable & As network volume)
86
- * Supports custom information in info dialog
87
- * Configuable columns of list view
88
- * Supports custom CSS class function of tree view
89
- * For more details, see the [Changelog](https://github.com/Studio-42/elFinder/blob/master/Changelog)
90
-
91
- Requirements
92
- ------------
93
- ### jQuery / jQuery UI
94
- * jQuery 1.8.0+
95
- * jQuery UI 1.9.0+
96
-
97
- **However, we recommend newest version.**
98
-
99
- ### Client
100
- * Modern browser. elFinder was tested in Firefox 12, Internet Explorer 8+,
101
- Safari 6, Opera 12 and Chrome 19
102
-
103
- ### Server
104
- * Any web server
105
- * PHP 5.2+ (Recommend PHP 5.4 or higher) And for thumbnails - GD / Imagick module / convert(imagemagick) require
106
-
107
- Installation
108
- ------------
109
- ### Builds (compressed)
110
- 1. Download and unzip one of the [builds](#downloads) below to your PHP server
111
- 2. Rename `/php/connector.minimal.php-dist` to `/php/connector.minimal.php`
112
- 3. Load `/elfinder.html` in your browser to run elFinder
113
-
114
- ### Source (uncompressed)
115
- 1. Clone this repository to your PHP server
116
-
117
- ```
118
- $ git clone https://github.com/Studio-42/elFinder.git
119
- ```
120
-
121
- 2. Rename `/php/connector.minimal.php-dist` to `/php/connector.minimal.php`
122
- 3. Load `/elfinder.src.html` in your browser to run elFinder
123
-
124
- ### Installer
125
- - [Setup elFinder 2.1.x nightly with Composer](https://github.com/Studio-42/elFinder/tree/gh-pages/tools/installer/setup_with_composer)
126
-
127
- Downloads
128
- ------------
129
- **Stable releases** ([Changelog](https://github.com/Studio-42/elFinder/blob/master/Changelog))
130
- + [elFinder 2.1.18](https://github.com/Studio-42/elFinder/archive/2.1.18.zip)
131
- + [elFinder 2.0.7](https://github.com/Studio-42/elFinder/archive/2.0.7.zip)
132
-
133
- **Nightly builds**
134
- + [elFinder 2.1.x (Nightly)](https://github.com/Studio-42/elFinder/archive/2.1.zip)
135
- + [elFinder 2.0.x (Nightly)](https://github.com/Studio-42/elFinder/archive/2.0.zip)
136
-
137
- Demo sites
138
- ------------
139
- **2.1.x Nightly**
140
- + https://studio-42.github.io/elFinder/ (with CORS)
141
- + https://hypweb.net/elFinder-nightly/demo/2.1/
142
-
143
- FAQs
144
- ------------
145
- ### Which version of elFinder should I use?
146
- * **2.0.x** if you do not need 2.1 of the advanced features.
147
-
148
- * **2.1.x** if you want to try the experimental (*bleeding edge, but API 2.1 connector is PHP only*). It is also available from the connector on the API 1.x and 2.0.
149
-
150
- ### Should I use elFinder builds (compressed) or source (uncompressed)?
151
-
152
- For debugging and development, use the [source](#source-uncompressed). For production, use [builds](#builds-compressed).
153
-
154
- ### How do I integrate elFinder with CKEditor/TinyMCE/elRTE/etc...?
155
- Check out the [wiki](https://github.com/studio-42/elFinder/wiki#howtos) for individual instructions.
156
-
157
- ### The procedure of language files created or modified?
158
-
159
- You can create or modify the language file to use translation tool. Please refer to the pull request the results to the respective branch.
160
- * [2.1 branch translation tool](http://studio-42.github.io/elFinder/tools/langman/#2.1)
161
- * [2.0 branch translation tool](http://studio-42.github.io/elFinder/tools/langman/#2.0)
162
-
163
-
164
- 3rd party connectors
165
- --------------------
166
- * [ASP.NET](https://github.com/leniel/elFinder.Net)
167
- * [Java Servlet](https://github.com/trustsystems/elfinder-java-connector)
168
- * [Python](https://github.com/Studio-42/elfinder-python)
169
- * [Ruby/Rails](https://github.com/phallstrom/el_finder)
170
- * [Django](https://github.com/mikery/django-elfinder)
171
- * [Laravel](https://github.com/barryvdh/laravel-elfinder)
172
-
173
- 3rd party Volume Drivers
174
- --------------------
175
- * [League\Flysystem (PHP)](https://github.com/barryvdh/elfinder-flysystem-driver) (for elFinder 2.1+)
176
-
177
- 3rd party Themes
178
- --------------------
179
- * [lokothodida/elfinder-theme-moono](https://github.com/lokothodida/elfinder-theme-moono)
180
- * [lokothodida/elfinder-theme-windows-10](https://github.com/lokothodida/elfinder-theme-windows-10)
181
- * [StudioJunkyard/elfinder-boostrap-theme](https://github.com/StudioJunkyard/LibreICONS/tree/master/themes/elFinder)
182
- * [RobiNN1/elFinder-Material-Theme](https://github.com/RobiNN1/elFinder-Material-Theme)
183
-
184
- Support
185
- -------
186
-
187
- * [Homepage](http://elfinder.org)
188
- * [Wiki](https://github.com/Studio-42/elFinder/wiki)
189
- * [Issues](https://github.com/Studio-42/elFinder/issues)
190
- * <dev@std42.ru>
191
-
192
-
193
- Authors
194
- -------
195
-
196
- * Chief developer: Dmitry "dio" Levashov <dio@std42.ru>
197
- * Maintainer: Troex Nevelin <troex@fury.scancode.ru>
198
- * Developers: Alexey Sukhotin <strogg@yandex.ru>, Naoki Sawada <hypweb@gmail.com>
199
- * Icons: [PixelMixer](http://pixelmixer.ru), [Yusuke Kamiyamane](http://p.yusukekamiyamane.com)
200
-
201
- We hope our tools will be helpful for you.
202
-
203
-
204
- License
205
- -------
206
-
207
- elFinder is issued under a 3-clauses BSD license.
208
-
209
- * [License terms](https://github.com/Studio-42/elFinder/blob/master/LICENSE.md)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
elFinder/css/elfinder.full.css CHANGED
@@ -1,9 +1,9 @@
1
  /*!
2
  * elFinder - file manager for web
3
- * Version 2.1.18 (2016-11-21)
4
  * http://elfinder.org
5
  *
6
- * Copyright 2009-2016, Studio 42
7
  * Licensed under a 3-clauses BSD license
8
  */
9
 
@@ -13,453 +13,927 @@
13
  /******************************************************************/
14
 
15
  /********************** COMMAND "RESIZE" ****************************/
16
- .elfinder-dialog-resize { margin-top:.3em; }
17
- .elfinder-resize-type { float:left; margin-bottom: .4em; }
18
- .elfinder-resize-control { float: left; }
19
- .elfinder-resize-control input[type=text] {
20
- border:1px solid #aaa;
21
- text-align: right;
22
- width: 4em;
23
- }
24
- .elfinder-resize-control input.elfinder-resize-bg {
25
- text-align: center;
26
- width: 5em;
27
- direction: ltr;
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  .elfinder-dialog-resize .elfinder-resize-imgrotate,
30
  .elfinder-dialog-resize .elfinder-resize-pallet {
31
- cursor: pointer;
32
  }
 
33
  .elfinder-dialog-resize .elfinder-resize-picking {
34
- cursor: crosshair;
35
  }
 
36
  .elfinder-dialog-resize .elfinder-resize-grid8 + button {
37
- padding-top: 2px;
38
- padding-bottom: 2px;
39
  }
 
40
  .elfinder-resize-preview {
41
- width:400px;
42
- height:400px;
43
- padding:10px;
44
- background:#fff;
45
- border:1px solid #aaa;
46
- float:right;
47
- position:relative;
48
- overflow:hidden;
49
- text-align: left;
50
- direction: ltr;
51
  }
52
 
53
- .elfinder-resize-handle { position:relative;}
 
 
54
 
55
  .elfinder-resize-handle-hline,
56
  .elfinder-resize-handle-vline {
57
- position:absolute;
58
- background-image:url("../img/crop.gif");
59
  }
60
 
61
  .elfinder-resize-handle-hline {
62
- width:100%;
63
- height:1px !important;
64
- background-repeat:repeat-x;
65
  }
 
66
  .elfinder-resize-handle-vline {
67
- width:1px !important;
68
- height:100%;
69
- background-repeat:repeat-y;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
 
72
- .elfinder-resize-handle-hline-top { top:0; left:0; }
73
- .elfinder-resize-handle-hline-bottom { bottom:0; left:0; }
74
- .elfinder-resize-handle-vline-left { top:0; left:0; }
75
- .elfinder-resize-handle-vline-right { top:0; right:0; }
76
 
77
  .elfinder-resize-handle-point {
78
- position:absolute;
79
- width:8px;
80
- height:8px;
81
- border:1px solid #777;
82
- background:transparent;
83
  }
84
 
85
- .elfinder-resize-handle-point-n {
86
- top:0;
87
- left:50%;
88
- margin-top:-5px;
89
- margin-left:-5px;
90
  }
 
91
  .elfinder-resize-handle-point-ne {
92
- top:0;
93
- right:0;
94
- margin-top:-5px;
95
- margin-right:-5px;
96
- }
97
- .elfinder-resize-handle-point-e {
98
- top:50%;
99
- right:0;
100
- margin-top:-5px;
101
- margin-right:-5px;
102
- }
103
- .elfinder-resize-handle-point-se {
104
- bottom:0;
105
- right:0;
106
- margin-bottom:-5px;
107
- margin-right:-5px;
108
- }
109
- .elfinder-resize-handle-point-s {
110
- bottom:0;
111
- left:50%;
112
- margin-bottom:-5px;
113
- margin-left:-5px;
 
 
 
114
  }
 
115
  .elfinder-resize-handle-point-sw {
116
- bottom:0;
117
- left:0;
118
- margin-bottom:-5px;
119
- margin-left:-5px;
120
  }
121
- .elfinder-resize-handle-point-w {
122
- top:50%;
123
- left:0;
124
- margin-top:-5px;
125
- margin-left:-5px;
 
126
  }
 
127
  .elfinder-resize-handle-point-nw {
128
- top:0;
129
- left:0;
130
- margin-top:-5px;
131
- margin-left:-5px;
132
- }
133
-
134
- .elfinder-resize-spinner {
135
- position:absolute;
136
- width:200px;
137
- height:30px;
138
- top:50%;
139
- margin-top:-25px;
140
- left:50%;
141
- margin-left:-100px;
142
- text-align:center;
143
- background:url(../img/progress.gif) center bottom repeat-x;
144
- }
145
-
146
- .elfinder-resize-row { margin-bottom:9px; position:relative;}
147
-
148
- .elfinder-resize-label { float:left; width:80px; padding-top: 3px; }
149
-
150
- .elfinder-resize-checkbox-label { border: 1px solid transparent; }
151
-
152
- .elfinder-dialog .elfinder-dialog-resize .elfinder-resize-whctrls {
153
- margin: -20px 5px 0 5px;
154
- }
155
- .elfinder-ltr .elfinder-dialog .elfinder-dialog-resize .elfinder-resize-whctrls {
156
- float: right;
157
- }
158
- .elfinder-rtl .elfinder-dialog .elfinder-dialog-resize .elfinder-resize-whctrls {
159
- float: left;
160
- }
161
-
162
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-e,
163
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-w {
164
- height:100%;
165
- width:10px;
166
- }
167
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-s,
168
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-n {
169
- width:100%;
170
- height:10px;
171
- }
172
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-e { margin-right: -7px; }
173
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-w { margin-left: -7px; }
174
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-s { margin-bottom: -7px; }
175
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-n { margin-top: -7px; }
176
-
177
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-se,
178
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-sw,
179
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-ne,
180
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-nw {
181
- width: 10px;
182
- height: 10px;
183
- }
184
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-se {
185
- background:transparent;
186
- bottom:0;
187
- right:0;
188
- margin-right:-7px;
189
- margin-bottom:-7px;
190
- }
191
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-sw {
192
- margin-left: -7px;
193
- margin-bottom: -7px;
194
- }
195
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-ne {
196
- margin-right:-7px;
197
- margin-top:-7px;
198
- }
199
- .elfinder-dialog .elfinder-dialog-resize .ui-resizable-nw {
200
- margin-left: -7px;
201
- margin-top: -7px;
202
- }
203
-
204
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-s,
205
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-n {
206
- height: 20px;
207
- }
208
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-e,
209
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-w {
210
- width: 20px;
211
- }
212
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-se,
213
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-sw,
214
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-ne,
215
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-nw {
216
- width: 30px;
217
- height: 30px;
218
- }
219
- .elfinder-touch .elfinder-dialog .elfinder-dialog-resize .elfinder-resize-preview .ui-resizable-se {
220
- width: 30px;
221
- height: 30px;
222
- zoom: 1;
223
- margin: 0;
224
- }
225
- .elfinder-dialog-resize .ui-icon-grip-solid-vertical {
226
- position:absolute;
227
- top:50%;
228
- right:0;
229
- margin-top:-8px;
230
- margin-right:-11px;
231
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  .elfinder-dialog-resize .ui-icon-grip-solid-horizontal {
233
- position:absolute;
234
- left:50%;
235
- bottom:0;
236
- margin-left:-8px;
237
- margin-bottom:-11px;;
238
  }
239
 
240
  .elfinder-dialog-resize .elfinder-resize-row .ui-buttonset {
241
- float:right;
242
  }
243
 
244
  .elfinder-dialog-resize .elfinder-resize-degree input,
245
- .elfinder-dialog-resize .elfinder-resize-quality input {
246
- width: 2.5em;
 
 
 
 
 
247
  }
 
248
  .elfinder-dialog-resize .elfinder-resize-degree button.ui-button {
249
- padding: 6px 8px;
250
  }
 
251
  .elfinder-dialog-resize button.ui-button span {
252
- padding: 0;
 
 
 
 
253
  }
254
 
255
- .ui-widget-content .elfinder-dialog-resize .elfinder-resize-rotate-slider {
256
- width: 195px;
257
- margin: 10px 7px;
258
- background-color: #fafafa;
259
  }
260
 
261
  .elfinder-dialog-resize .elfinder-resize-type span.ui-checkboxradio-icon {
262
- display: none;
 
 
 
 
 
263
  }
264
 
265
  /********************** COMMAND "EDIT" ****************************/
266
  /* edit text file textarea */
267
  .elfinder-file-edit {
268
- width:100%;
269
- height:99%;
270
- margin:0;
271
- padding:2px;
272
- border:1px solid #ccc;
273
- box-sizing: border-box;
 
274
  }
 
275
  .elfinder-touch .elfinder-file-edit {
276
- font-size: 16px;
277
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  /* bottom margen for softkeyboard on fullscreen mode */
279
  .elfinder-touch.elfinder-fullscreen-native textarea.elfinder-file-edit {
280
- padding-bottom: 20em;
281
- margin-bottom: -20em;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  }
283
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
 
285
  /********************** COMMAND "SORT" ****************************/
286
  /* for list table header sort triangle icon */
287
  div.elfinder-cwd-wrapper-list tr.ui-state-default td {
288
- position: relative;
289
  }
 
290
  div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
291
- position: absolute;
292
- top: 4px;
293
- left: 0;
294
- right: 0;
295
- margin: auto 0px auto auto;
296
  }
 
297
  .elfinder-touch div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
298
- top: 7px;
299
  }
 
300
  .elfinder-rtl div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
301
- margin: auto auto auto 0px;
302
  }
 
303
  /********************** COMMAND "HELP" ****************************/
304
  /* help dialog */
305
- .elfinder-help { margin-bottom:.5em; }
 
 
 
306
 
307
  /* fix tabs */
308
- .elfinder-help .ui-tabs-panel { padding:.5em; }
309
- .elfinder-dialog .ui-tabs .ui-tabs-nav li a { padding:.2em 1em;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
 
311
  .elfinder-help-shortcuts {
312
- height:300px;
313
- padding:1em;
314
- margin:.5em 0;
315
- overflow:auto;
 
 
 
 
 
316
  }
317
- .elfinder-help-shortcut { white-space:nowrap; clear:both;}
318
 
319
- .elfinder-help-shortcut-pattern { float:left; width:160px;}
 
 
 
320
 
321
  .elfinder-help-logo {
322
- width:100px;
323
- height:96px;
324
- float:left;
325
- margin-right:1em;
326
- background:url('../img/logo.png') center center no-repeat;
327
  }
328
 
329
- .elfinder-help h3 { font-size:1.5em; margin:.2em 0 .3em 0; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
 
331
- .elfinder-help-separator { clear:both; padding:.5em; }
 
 
 
332
 
333
- .elfinder-help-link { padding:2px; }
 
 
334
 
335
- .elfinder-help .ui-priority-secondary { font-size:.9em;}
 
 
336
 
337
- .elfinder-help .ui-priority-primary { margin-bottom:7px;}
 
 
 
 
 
 
338
 
339
- .elfinder-help-team {
340
- clear: both;
341
- text-align:right;
342
- border-bottom:1px solid #ccc;
343
- margin:.5em 0;
344
- font-size:.9em;
345
  }
346
 
347
- .elfinder-help-team div { float:left; }
348
- .elfinder-help-license { font-size:.9em;}
 
349
 
350
  .elfinder-help-disabled {
351
- font-weight:bold;
352
- text-align:center;
353
- margin:90px 0;
354
  }
355
 
356
  .elfinder-help .elfinder-dont-panic {
357
- display:block;
358
- border:1px solid transparent;
359
- width:200px;
360
- height:200px;
361
- margin:30px auto;
362
- text-decoration:none;
363
- text-align:center;
364
- position:relative;
365
- background:#d90004;
366
- -moz-box-shadow: 5px 5px 9px #111;
367
- -webkit-box-shadow: 5px 5px 9px #111;
368
- box-shadow: 5px 5px 9px #111;
369
- background: -moz-radial-gradient(80px 80px, circle farthest-corner, #d90004 35%, #960004 100%);
370
- background: -webkit-gradient(radial, 80 80, 60, 80 80, 120, from(#d90004), to(#960004));
371
- -moz-border-radius: 100px;
372
- -webkit-border-radius: 100px;
373
- border-radius: 100px;
374
- outline:none;
375
  }
376
 
377
  .elfinder-help .elfinder-dont-panic span {
378
- font-size:3em;
379
- font-weight:bold;
380
- text-align:center;
381
- color:#fff;
382
- position:absolute;
383
- left:0;
384
- top:45px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
385
  }
386
 
387
  .elfinder-help-debug {
388
- height:auto;
389
- padding:0;
390
- margin:0;
391
- overflow:none;
392
- border: none;
393
  }
394
 
395
  .elfinder-help-debug .ui-tabs-panel {
396
- height:310px;
397
- padding: 0;
398
- margin: 0;
399
- overflow:auto;
400
  }
401
 
402
  .elfinder-help-debug fieldset {
403
- margin-bottom: 10px;
404
- border-color: #778899;
405
- border-radius: 10px;
406
  }
407
 
408
  .elfinder-help-debug legend {
409
- font-size: 1.2em;
410
- font-weight: bold;
411
- color: #2e8b57;
412
  }
413
 
414
  .elfinder-help-debug dl {
415
- margin: 0;
416
  }
417
 
418
  .elfinder-help-debug dt {
419
- color: #778899;
420
  }
421
 
422
  .elfinder-help-debug dt:before {
423
- content: "[";
424
  }
 
425
  .elfinder-help-debug dt:after {
426
- content: "]";
427
  }
428
 
429
  .elfinder-help-debug dd {
430
- margin-left: 1em;
431
  }
432
 
433
  .elfinder-help-debug dd span {
434
- /*font-size: 1.2em;*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
435
  }
436
 
437
  /********************** COMMAND "INFO" ****************************/
438
- .elfinder-info-title .elfinder-cwd-bgurl:after {
439
- left: -28px;
 
440
  }
441
- .elfinder-info-title .elfinder-cwd-icon-video:after {
442
- left: -7px;
 
443
  }
444
 
445
  /********************** COMMAND "UPLOAD" ****************************/
446
  .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
447
- position: absolute;
448
- bottom: 2px;
449
- width: 16px;
450
- height: 16px;
451
- padding: 10px;
452
- border: none;
453
- overflow: hidden;
454
- cursor: pointer;
455
  }
 
456
  .elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
457
- left: 2px;
458
  }
 
459
  .elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
460
- right: 2px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  }
462
 
 
463
  /* File: /css/common.css */
464
  /*********************************************/
465
  /* COMMON ELFINDER STUFFS */
@@ -472,1038 +946,1752 @@ div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
472
 
473
  /* common container */
474
  .elfinder {
475
- padding: 0;
476
- position:relative;
477
- display:block;
478
- font-size: 18px;
479
- font-family: Verdana,Arial,Helvetica,sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480
  }
481
 
482
  /* in lazy execution status */
483
  .elfinder.elfinder-processing * {
484
- cursor: progress !important
485
  }
 
486
  .elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after {
487
- position: absolute;
488
- top: 0;
489
- width: 100%;
490
- height: 3px;
491
- content: '';
492
- left: 0;
493
- background-image: url(../img/progress.gif);
494
- opacity: .6;
495
- pointer-events: none;
496
  }
497
 
498
  /* for disable select of Touch devices */
499
  .elfinder *:not(input):not(textarea):not(select):not([contenteditable=true]),
500
  .elfinder-contextmenu *:not(input):not(textarea):not(select):not([contenteditable=true]) {
501
- -webkit-tap-highlight-color: rgba(0,0,0,0);
502
- /*-webkit-touch-callout:none;*/
503
- -webkit-user-select: none;
504
- -moz-user-select: none;
505
- -khtml-user-select: none;
506
- user-select: none;
507
  }
508
 
509
  .elfinder .overflow-scrolling-touch {
510
- -webkit-overflow-scrolling: touch;
511
  }
512
 
513
  /* right to left enviroment */
514
- .elfinder-rtl { text-align:right; direction:rtl; }
 
 
 
515
 
516
  /* nav and cwd container */
517
  .elfinder-workzone {
518
- padding: 0;
519
- position:relative;
520
- overflow:hidden;
521
  }
522
 
523
  /* dir/file permissions and symlink markers */
524
  .elfinder-lock,
525
  .elfinder-perms,
526
  .elfinder-symlink {
527
- position:absolute;
528
- width:16px;
529
- height:16px;
530
- background-image:url(../img/toolbar.png);
531
- background-repeat:no-repeat;
532
- background-position:0 -528px;
533
  }
534
 
535
- .elfinder-symlink { }
 
536
 
537
  /* noaccess */
538
- .elfinder-na .elfinder-perms { background-position:0 -96px; }
 
 
539
 
540
  /* read only */
541
- .elfinder-ro .elfinder-perms { background-position:0 -64px;}
 
 
542
 
543
  /* write only */
544
- .elfinder-wo .elfinder-perms { background-position:0 -80px;}
 
 
545
 
546
  /* volume type group */
547
- .elfinder-group .elfinder-perms { background-position:0 0px;}
 
 
548
 
549
  /* locked */
550
  .elfinder-lock {
551
- background-position:0 -656px;
552
  }
553
 
554
  /* drag helper */
555
  .elfinder-drag-helper {
556
- top: 0px;
557
- left: 0px;
558
- width:70px;
559
- height:60px;
560
- padding:0 0 0 25px;
561
- z-index:100000;
562
- will-change: left, top;
563
  }
 
564
  .elfinder-drag-helper.html5-native {
565
- position: absolute;
566
- top: -1000px;
567
- left: -1000px;
568
  }
569
 
570
  /* drag helper status icon (default no-drop) */
571
  .elfinder-drag-helper-icon-status {
572
- position:absolute;
573
- width:16px;
574
- height:16px;
575
- left:42px;
576
- top:60px;
577
- background:url('../img/toolbar.png') 0 -96px no-repeat;
578
- display: block;
579
  }
580
 
581
  /* show "up-arrow" icon for move item */
582
  .elfinder-drag-helper-move .elfinder-drag-helper-icon-status {
583
- background-position:0 -720px;
584
  }
 
585
  /* show "plus" icon when ctrl/shift pressed */
586
  .elfinder-drag-helper-plus .elfinder-drag-helper-icon-status {
587
- background-position:0 -544px;
588
  }
589
 
590
  /* files num in drag helper */
591
  .elfinder-drag-num {
592
- position:absolute;
593
- top:0;
594
- left:0;
595
- width:16px;
596
- height:14px;
597
- text-align:center;
598
- padding-top:2px;
599
-
600
- font-weight:bold;
601
- color:#fff;
602
- background-color:red;
603
- -moz-border-radius: 8px;
604
- -webkit-border-radius: 8px;
605
- border-radius: 8px;
 
606
  }
607
 
608
  /* icon in drag helper */
609
- .elfinder-drag-helper .elfinder-cwd-icon { margin:0 0 0 -24px; float:left; }
 
 
 
610
 
611
  /* transparent overlay */
612
  .elfinder-overlay {
613
- position: absolute;
614
- opacity: .2;
615
- filter: Alpha(Opacity=20);
616
  }
617
 
618
  /* panels under/below cwd (for search field etc) */
619
  .elfinder .elfinder-panel {
620
- position:relative;
621
- background-image:none;
622
- padding:7px 12px;
623
  }
624
 
625
  /* for html5 drag and drop */
626
  [draggable=true] {
627
- -khtml-user-drag: element;
628
  }
629
 
630
- /* for place holder to content editable elements */
631
  .elfinder [contentEditable=true]:empty:not(:focus):before {
632
- content:attr(data-ph);
633
  }
634
 
635
  /* bottom tray */
636
  .elfinder div.elfinder-bottomtray {
637
- position: fixed;
638
- bottom: 0;
639
- max-width:100%;
640
- opacity: .8;
641
  }
 
642
  .elfinder.elfinder-ltr div.elfinder-bottomtray {
643
- left: 0;
644
  }
 
645
  .elfinder.elfinder-rtl div.elfinder-bottomtray {
646
- right: 0;
 
 
 
 
 
 
 
647
  }
648
 
649
  /* File: /css/contextmenu.css */
650
  /* menu and submenu */
651
  .elfinder .elfinder-contextmenu,
652
  .elfinder .elfinder-contextmenu-sub {
653
- position:absolute;
654
- border:1px solid #aaa;
655
- background:#fff;
656
- color:#555;
657
- padding:4px 0;
658
- top: 0;
659
- left: 0;
660
  }
661
 
662
  /* submenu */
663
- .elfinder .elfinder-contextmenu-sub { top:5px; }
 
 
 
664
  /* submenu in rtl/ltr enviroment */
665
- .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub { margin-left:-5px; }
666
- .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub { margin-right:-5px; }
 
 
 
 
 
667
 
668
  /* menu item */
669
  .elfinder .elfinder-contextmenu-header {
670
- margin-top: -4px;
671
- padding: 0 .5em .2ex;
672
- border: none;
673
- text-align: center;
674
  }
 
675
  .elfinder .elfinder-contextmenu-header span {
676
- font-weight: normal;
677
- font-size: 0.8em;
678
- font-weight: bolder;
679
  }
 
680
  .elfinder .elfinder-contextmenu-item {
681
- position:relative;
682
- display:block;
683
- padding:4px 30px;
684
- text-decoration:none;
685
- white-space:nowrap;
686
- cursor:default;
687
  }
 
688
  .elfinder .elfinder-contextmenu-item.ui-state-active {
689
- border: none;
690
  }
 
691
  .elfinder .elfinder-contextmenu-item .ui-icon {
692
- width:16px;
693
- height:16px;
694
- position:absolute;
695
- left:auto;
696
- right:auto;
697
- top:50%;
698
- margin-top:-8px;
699
  }
 
700
  .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon {
701
- left: 2px;
702
  }
 
703
  .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon {
704
- right: 2px;
705
  }
 
706
  .elfinder-touch .elfinder-contextmenu-item {
707
- padding:12px 38px;
708
  }
709
 
710
  /* root icon of each volume */
711
- .elfinder-navbar-root-local.elfinder-contextmenu-icon { background-image:url("../img/volume_icon_local.png"); }
712
- .elfinder-navbar-root-ftp.elfinder-contextmenu-icon { background-image:url("../img/volume_icon_ftp.png"); }
713
- .elfinder-navbar-root-sql.elfinder-contextmenu-icon { background-image:url("../img/volume_icon_sql.png"); }
714
- .elfinder-navbar-root-dropbox.elfinder-contextmenu-icon { background-image:url("../img/volume_icon_dropbox.png"); }
715
- .elfinder-navbar-root-googledrive.elfinder-contextmenu-icon { background-image:url("../img/volume_icon_googledrive.png"); }
716
- .elfinder-navbar-root-onedrive.elfinder-contextmenu-icon { background-image:url("../img/volume_icon_onedrive.png"); }
717
- .elfinder-navbar-root-box.elfinder-contextmenu-icon { background-image:url("../img/volume_icon_box.png"); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
718
 
719
  /* text in item */
720
- .elfinder .elfinder-contextmenu .elfinder-contextmenu-item span { display:block; }
 
 
721
 
722
  /* submenu item in rtl/ltr enviroment */
723
- .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item { text-align:left; }
724
- .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item { text-align:right; }
725
- .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-left:12px; }
726
- .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-right:12px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
727
 
728
  /* command/submenu icon */
729
  .elfinder .elfinder-contextmenu-extra-icon,
730
  .elfinder .elfinder-contextmenu-arrow,
731
  .elfinder .elfinder-contextmenu-icon {
732
- position:absolute;
733
- top:50%;
734
- margin-top:-8px;
735
- overflow: hidden;
 
 
 
 
736
  }
737
 
738
  /* command icon in rtl/ltr enviroment */
739
- .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon { left:8px; }
740
- .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon { right:8px; }
741
- .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon { right:8px; }
742
- .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon { left:8px; }
 
 
 
 
 
 
 
 
 
 
 
743
 
744
  /* arrow icon */
745
  .elfinder .elfinder-contextmenu-arrow {
746
- width:16px;
747
- height:16px;
748
- background:url('../img/arrows-normal.png') 5px 4px no-repeat;
749
  }
750
 
751
  /* arrow icon in rtl/ltr enviroment */
752
- .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow { right:5px; }
753
- .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow { left:5px; background-position: 0 -10px; }
 
 
 
 
 
 
754
 
755
  /* command extra icon's <a>, <span> tag */
756
- .elfinder .elfinder-contextmenu-extra-icon a,
757
  .elfinder .elfinder-contextmenu-extra-icon span {
758
- display: inline-block;
759
- width: 100%;
760
- height: 100%;
761
- padding: 20px;
762
- margin: 0;
763
- color: transparent !important;
764
- text-decoration: none;
765
- cursor: pointer;
766
  }
767
 
768
  /* disable ui border/bg image on hover */
769
- .elfinder .elfinder-contextmenu .ui-state-hover { border:0 solid; background-image:none;}
 
 
 
770
 
771
  /* separator */
772
  .elfinder .elfinder-contextmenu-separator {
773
- height:0px;
774
- border-top:1px solid #ccc;
775
- margin:0 1px;
776
  }
777
 
778
  /* for CSS style priority to ui-state-disabled - "background-image: none" */
779
- .elfinder .elfinder-button-icon.ui-state-disabled {
780
- background-image: url('../img/toolbar.png') !important;
781
  }
 
782
  /* File: /css/cwd.css */
783
  /******************************************************************/
784
  /* CURRENT DIRECTORY STYLES */
785
  /******************************************************************/
786
  /* cwd container to avoid selectable on scrollbar */
787
  .elfinder-cwd-wrapper {
788
- overflow: auto;
789
- position:relative;
790
- padding:2px;
791
- margin:0;
792
  }
793
 
794
- .elfinder-cwd-wrapper-list { padding:0; }
 
 
795
 
796
  /* container */
797
- .elfinder-cwd {
798
- position:relative;
799
- cursor:default;
800
- padding:0;
801
- margin:0;
802
- -ms-touch-action: auto;
803
- touch-action: auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
804
  }
805
 
806
  /* container active on dropenter */
807
  .elfinder .elfinder-cwd-wrapper.elfinder-droppable-active {
808
- outline: 2px solid #8cafed;
809
- outline-offset: -2px;
810
  }
811
 
812
  .elfinder-cwd-wrapper-empty .elfinder-cwd:after {
813
- display: block;
814
- position: absolute;
815
- top: 40%;
816
- left: 0;
817
- right: 0;
818
- margin-top: -2em;
819
- line-height: 1.5em;
820
- text-align: center;
821
- white-space: pre-wrap;
822
- opacity: 0.6;
823
- filter: Alpha(Opacity=60);
824
- font-weight: bold;
 
 
 
 
 
825
  }
826
 
827
  .elfinder-cwd-file .elfinder-cwd-select {
828
- position: absolute;
829
- top: 0px;
830
- left: 0px;
831
- width: 30px;
832
- height: 30px;
833
- background-color: transparent;
834
- opacity: .4;
835
- filter:Alpha(Opacity=40);
 
 
 
836
  }
837
 
838
  .elfinder-cwd-file.ui-selected .elfinder-cwd-select {
839
- opacity: .8;
840
- filter:Alpha(Opacity=80);
841
  }
 
842
  .elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select {
843
- left: auto;
844
- right: 0px;
845
  }
846
 
847
  .elfinder .elfinder-cwd-selectall {
848
- position: absolute;
849
- width: 30px;
850
- height: 30px;
851
- top: 0px;
852
- opacity: .8;
853
- filter:Alpha(Opacity=80);
854
  }
855
 
856
  .elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall {
857
- display: none;
858
  }
859
 
860
  /************************** ICONS VIEW ********************************/
861
 
862
  .elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall {
863
- text-align: right;
864
- right: 18px;
865
- left: auto;
866
  }
867
 
868
  .elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall {
869
- text-align: left;
870
- right: auto;
871
- left: 18px;
872
  }
873
 
874
  .elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall {
875
- right: 0px;
876
  }
877
 
878
  .elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall {
879
- left: 0px;
880
  }
881
 
882
  .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover {
883
- background-color: transparent;
884
  }
885
 
886
  /* file container */
887
  .elfinder-cwd-view-icons .elfinder-cwd-file {
888
- width:120px;
889
- height:80px;
890
- padding-bottom:2px;
891
- cursor:default;
892
- border:none;
893
- /* overflow:hidden;*/
894
- position:relative;
895
- }
896
-
897
- /*.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select {
898
- top: 0px;
899
- left: 0px;
900
- }*/
901
 
902
- /*.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select {
903
- left: auto;
904
- right: 7px;
905
- }*/
906
 
907
  /* ltr/rtl enviroment */
908
- .elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file { float:left; margin:0 3px 12px 0; }
909
- .elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file { float:right; margin:0 0 5px 3px; }
 
 
 
 
 
 
 
910
 
911
  /* remove ui hover class border */
912
- .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { border:0 solid; }
 
 
913
 
914
  /* icon wrapper to create selected highlight around icon */
915
  .elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
916
- width:52px;
917
- height:52px;
918
- margin:1px auto 1px auto;
919
- padding:2px;
920
- position:relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
921
  }
922
 
923
  /* file name place */
924
  .elfinder-cwd-view-icons .elfinder-cwd-filename {
925
- text-align: center;
926
- max-height: 2.4em;
927
- line-height: 1.2em;
928
- white-space: pre-line;
929
- overflow: hidden;
930
- text-overflow: ellipsis;
931
- -o-text-overflow: ellipsis;
932
- margin: 3px 1px 0 1px;
933
- padding: 1px;
934
- -moz-border-radius: 8px;
935
- -webkit-border-radius: 8px;
936
- border-radius: 8px;
937
- /* for webkit CSS3 */
938
- word-break: break-word;
939
- overflow-wrap: break-word;
940
- display: -webkit-box;
941
- -webkit-line-clamp: 2;
942
- -webkit-box-orient: vertical;
943
  }
944
 
945
  /* permissions/symlink markers */
946
- .elfinder-cwd-view-icons .elfinder-perms { bottom:4px; right:2px; }
947
- .elfinder-cwd-view-icons .elfinder-lock { top:-3px; right:-2px; }
948
- .elfinder-cwd-view-icons .elfinder-symlink { bottom:6px; left:0px; }
 
 
 
 
 
 
 
 
 
 
 
949
 
950
  /* icon/thumbnail */
951
  .elfinder-cwd-icon {
952
- display:block;
953
- width:48px;
954
- height:48px;
955
- margin:0 auto;
956
- background: url('../img/icons-big.png') 0 0 no-repeat;
957
- -moz-background-clip: padding;
958
- -webkit-background-clip: padding-box;
959
- background-clip: padding-box;
 
 
 
960
  }
961
 
962
  /* volume icon of root in folder */
963
  .elfinder-navbar-root-local .elfinder-cwd-icon,
964
  .elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon,
965
  .elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon {
966
- background-image:url("../img/volume_icon_local.png");
967
- background-position:0 0;
968
- background-size: contain;
 
969
  }
 
970
  .elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon {
971
- background-position:1px -1px;
 
 
 
 
 
 
 
 
 
 
 
 
 
972
  }
 
973
  .elfinder-navbar-root-ftp .elfinder-cwd-icon,
974
  .elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon,
975
- .elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon {
976
- background-image:url("../img/volume_icon_ftp.png");
977
- background-position:0 0;
978
- background-size: contain;
 
979
  }
 
980
  .elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon {
981
- background-position:1px -1px;
982
  }
 
983
  .elfinder-navbar-root-sql .elfinder-cwd-icon,
984
  .elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon,
985
- .elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon {
986
- background-image:url("../img/volume_icon_sql.png");
987
- background-position:0 0;
988
- background-size: contain;
 
989
  }
 
990
  .elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon {
991
- background-position:1px -1px;
992
  }
 
993
  .elfinder-navbar-root-dropbox .elfinder-cwd-icon,
994
  .elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon,
995
- .elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon {
996
- background-image:url("../img/volume_icon_dropbox.png");
997
- background-position:0 0;
998
- background-size: contain;
 
999
  }
 
1000
  .elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon {
1001
- background-position:1px -1px;
1002
  }
 
1003
  .elfinder-navbar-root-googledrive .elfinder-cwd-icon,
1004
  .elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,
1005
- .elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon {
1006
- background-image:url("../img/volume_icon_googledrive.png");
1007
- background-position:0 0;
1008
- background-size: contain;
 
1009
  }
 
1010
  .elfinder-navbar-root-onedrive .elfinder-cwd-icon,
1011
  .elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,
1012
- .elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon {
1013
- background-image:url("../img/volume_icon_onedrive.png");
1014
- background-position:0 0;
1015
- background-size: contain;
 
1016
  }
 
1017
  .elfinder-navbar-root-box .elfinder-cwd-icon,
1018
  .elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,
1019
- .elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon {
1020
- background-image:url("../img/volume_icon_box.png");
1021
- background-position:0 0;
1022
- background-size: contain;
 
1023
  }
 
 
 
 
 
 
 
 
 
 
1024
  .elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,
1025
  .elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,
1026
  .elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon {
1027
- background-position:1px -1px;
1028
  }
 
1029
  .elfinder-navbar-root-network .elfinder-cwd-icon,
1030
  .elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon,
1031
- .elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon {
1032
- background-image:url("../img/toolbar.png");
1033
- background-position: 0 86%;
1034
- background-size: cover;
 
1035
  }
 
1036
  .elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon {
1037
- background-position:1px -1px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1038
  }
1039
 
1040
  /* thumbnail image */
1041
  .elfinder-cwd-icon.elfinder-cwd-bgurl {
1042
- background-position: center center;
1043
- background-repeat: no-repeat;
1044
- -moz-background-size: contain;
1045
- background-size: contain;
1046
  }
 
1047
  /* thumbnail self */
1048
  .elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself {
1049
- -moz-background-size: cover;
1050
- background-size: cover;
1051
  }
 
1052
  /* thumbnail crop*/
1053
  .elfinder-cwd-icon.elfinder-cwd-bgurl {
1054
- -moz-background-size: cover;
1055
- background-size: cover;
1056
  }
 
 
 
 
 
1057
  .elfinder-cwd-bgurl:after {
1058
- content: ' ';
1059
- position: relative;
1060
- display: inline-block;
1061
- top: 36px;
1062
- left: -38px;
1063
- width: 48px;
1064
- height: 48px;
1065
- background: url('../img/icons-big.png') 0 0 no-repeat;
1066
- background-size: auto !important;
1067
- opacity: .8;
1068
- filter: Alpha(Opacity=60);
1069
- -webkit-transform-origin: 54px -24px;
1070
- -webkit-transform: scale(.6);
1071
- -moz-transform-origin: 54px -24px;
1072
- -moz-transform: scale(.6);
1073
- -ms-transform-origin: 54px -24px;
1074
- -ms-transform: scale(.6);
1075
- -o-transform-origin: 54px -24px;
1076
- -o-transform: scale(.6);
1077
- transform-origin: 54px -24px;
1078
- transform: scale(.6);
1079
- }
1080
- /* thumbnail image overlay none */
1081
- .elfinder-cwd-icon-image:after {
1082
- content: none;
1083
- }
1084
- /* thumbnail image video overlay */
1085
- .elfinder-cwd-icon-video:after {
1086
- top: 32px;
1087
- left: -26px;
1088
- height: 25px;
1089
- width: 22px;
1090
- background-position: 0px -373px;
1091
- -webkit-transform: scale(1);
1092
- -moz-transform: scale(1);
1093
- -ms-transform: scale(1);
1094
- -o-transform: scale(1);
1095
- transform: scale(1);
1096
  }
1097
 
1098
  /* "opened folder" icon on dragover */
1099
- .elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon { background-position: 0 -100px; }
 
 
 
1100
  .elfinder-cwd .elfinder-droppable-active {
1101
- outline: 2px solid #8cafed;
1102
- outline-offset: -2px;
1103
  }
1104
 
1105
  /* mimetypes icons */
1106
- .elfinder-cwd-icon-directory { background-position:0 -50px; }
 
 
1107
 
1108
  .elfinder-cwd-icon-application:after,
1109
- .elfinder-cwd-icon-application { background-position:0 -150px; }
 
 
1110
 
1111
- .elfinder-cwd-icon-x-empty:after,
1112
  .elfinder-cwd-icon-text:after,
1113
- .elfinder-cwd-icon-x-empty,
1114
- .elfinder-cwd-icon-text { background-position:0 -200px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1115
 
1116
- .elfinder-cwd-icon-image:after,
1117
- .elfinder-cwd-icon-vnd-adobe-photoshop:after,
1118
  .elfinder-cwd-icon-postscript:after,
1119
- .elfinder-cwd-icon-image,
1120
- .elfinder-cwd-icon-vnd-adobe-photoshop,
1121
- .elfinder-cwd-icon-postscript { background-position:0 -250px; }
1122
 
1123
  .elfinder-cwd-icon-audio:after,
1124
- .elfinder-cwd-icon-audio { background-position:0 -300px; }
 
 
1125
 
 
1126
  .elfinder-cwd-icon-video,
1127
- .elfinder-cwd-icon-flash-video { background-position:0 -350px; }
 
 
 
 
 
1128
 
1129
- .elfinder-cwd-icon-rtf:after,
1130
  .elfinder-cwd-icon-rtfd:after,
1131
- .elfinder-cwd-icon-rtf,
1132
- .elfinder-cwd-icon-rtfd { background-position: 0 -401px; }
 
 
1133
 
1134
  .elfinder-cwd-icon-pdf:after,
1135
- .elfinder-cwd-icon-pdf { background-position: 0 -450px; }
 
 
1136
 
 
1137
  .elfinder-cwd-icon-ms-excel:after,
1138
- .elfinder-cwd-icon-msword:after,
1139
- .elfinder-cwd-icon-vnd-ms-excel:after,
1140
  .elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after,
 
1141
  .elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after,
 
1142
  .elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after,
 
1143
  .elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after,
1144
- .elfinder-cwd-icon-vnd-ms-office:after,
1145
- .elfinder-cwd-icon-vnd-ms-powerpoint:after,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1146
  .elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:after,
 
1147
  .elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:after,
 
1148
  .elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:after,
 
1149
  .elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:after,
 
1150
  .elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:after,
1151
- .elfinder-cwd-icon-vnd-ms-word:after,
1152
- .elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:after,
1153
- .elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:after,
1154
- .elfinder-cwd-icon-vnd-oasis-opendocument-chart:after,
1155
- .elfinder-cwd-icon-vnd-oasis-opendocument-database:after,
1156
- .elfinder-cwd-icon-vnd-oasis-opendocument-formula:after,
1157
- .elfinder-cwd-icon-vnd-oasis-opendocument-graphics:after,
1158
- .elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:after,
1159
- .elfinder-cwd-icon-vnd-oasis-opendocument-image:after,
1160
- .elfinder-cwd-icon-vnd-oasis-opendocument-presentation:after,
1161
- .elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:after,
1162
- .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:after,
1163
- .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:after,
1164
- .elfinder-cwd-icon-vnd-oasis-opendocument-text:after,
1165
- .elfinder-cwd-icon-vnd-oasis-opendocument-text-master:after,
1166
- .elfinder-cwd-icon-vnd-oasis-opendocument-text-template:after,
1167
- .elfinder-cwd-icon-vnd-oasis-opendocument-text-web:after,
1168
- .elfinder-cwd-icon-vnd-openofficeorg-extension:after,
1169
  .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:after,
 
1170
  .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:after,
 
1171
  .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:after,
1172
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:after,
1173
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:after,
1174
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:after,
1175
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:after,
1176
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:after,
1177
- .elfinder-cwd-icon-ms-excel,
 
 
 
 
 
 
1178
  .elfinder-cwd-icon-msword,
1179
- .elfinder-cwd-icon-vnd-ms-excel,
1180
- .elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,
1181
- .elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,
1182
- .elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,
1183
- .elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,
1184
- .elfinder-cwd-icon-vnd-ms-office,
1185
- .elfinder-cwd-icon-vnd-ms-powerpoint,
1186
- .elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,
1187
- .elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,
1188
- .elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,
1189
- .elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,
1190
- .elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,
1191
  .elfinder-cwd-icon-vnd-ms-word,
1192
  .elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,
 
1193
  .elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1194
  .elfinder-cwd-icon-vnd-oasis-opendocument-chart,
 
1195
  .elfinder-cwd-icon-vnd-oasis-opendocument-database,
 
1196
  .elfinder-cwd-icon-vnd-oasis-opendocument-formula,
 
1197
  .elfinder-cwd-icon-vnd-oasis-opendocument-graphics,
1198
  .elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,
 
 
1199
  .elfinder-cwd-icon-vnd-oasis-opendocument-image,
1200
- .elfinder-cwd-icon-vnd-oasis-opendocument-presentation,
1201
- .elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,
1202
- .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,
1203
- .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,
1204
- .elfinder-cwd-icon-vnd-oasis-opendocument-text,
1205
- .elfinder-cwd-icon-vnd-oasis-opendocument-text-master,
1206
- .elfinder-cwd-icon-vnd-oasis-opendocument-text-template,
1207
- .elfinder-cwd-icon-vnd-oasis-opendocument-text-web,
1208
  .elfinder-cwd-icon-vnd-openofficeorg-extension,
1209
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,
1210
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,
1211
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,
1212
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,
1213
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,
1214
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,
1215
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,
1216
- .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template { background-position: 0 -500px; }
1217
 
1218
  .elfinder-cwd-icon-html:after,
1219
- .elfinder-cwd-icon-html { background-position: 0 -550px; }
 
 
1220
 
1221
  .elfinder-cwd-icon-css:after,
1222
- .elfinder-cwd-icon-css { background-position: 0 -600px; }
 
 
1223
 
1224
- .elfinder-cwd-icon-javascript:after,
1225
  .elfinder-cwd-icon-x-javascript:after,
1226
- .elfinder-cwd-icon-javascript,
1227
- .elfinder-cwd-icon-x-javascript { background-position: 0 -650px; }
 
 
1228
 
1229
  .elfinder-cwd-icon-x-perl:after,
1230
- .elfinder-cwd-icon-x-perl { background-position: 0 -700px; }
 
 
1231
 
1232
  .elfinder-cwd-icon-x-python:after,
1233
- .elfinder-cwd-icon-x-python { background-position: 0 -750px; }
 
 
1234
 
1235
  .elfinder-cwd-icon-x-ruby:after,
1236
- .elfinder-cwd-icon-x-ruby { background-position: 0 -800px; }
1237
-
 
1238
 
1239
- .elfinder-cwd-icon-x-sh:after,
1240
  .elfinder-cwd-icon-x-shellscript:after,
1241
- .elfinder-cwd-icon-x-sh,
1242
- .elfinder-cwd-icon-x-shellscript { background-position: 0 -850px; }
 
 
1243
 
1244
  .elfinder-cwd-icon-x-c:after,
1245
  .elfinder-cwd-icon-x-csrc:after,
1246
  .elfinder-cwd-icon-x-chdr:after,
1247
- .elfinder-cwd-icon-x-c--:after,
1248
  .elfinder-cwd-icon-x-c--src:after,
1249
- .elfinder-cwd-icon-x-c--hdr:after,
1250
- .elfinder-cwd-icon-x-java:after,
1251
  .elfinder-cwd-icon-x-java-source:after,
1252
  .elfinder-cwd-icon-x-c,
1253
  .elfinder-cwd-icon-x-csrc,
1254
  .elfinder-cwd-icon-x-chdr,
1255
- .elfinder-cwd-icon-x-c--,
1256
  .elfinder-cwd-icon-x-c--src,
1257
- .elfinder-cwd-icon-x-c--hdr,
1258
- .elfinder-cwd-icon-x-java,
1259
- .elfinder-cwd-icon-x-java-source { background-position: 0 -900px; }
 
 
1260
 
1261
  .elfinder-cwd-icon-x-php:after,
1262
- .elfinder-cwd-icon-x-php { background-position: 0 -950px; }
 
 
1263
 
1264
  .elfinder-cwd-icon-xml:after,
1265
- .elfinder-cwd-icon-xml { background-position: 0 -1000px; }
 
 
1266
 
1267
- .elfinder-cwd-icon-zip:after,
1268
- .elfinder-cwd-icon-x-zip:after,
1269
- .elfinder-cwd-icon-x-xz:after,
1270
  .elfinder-cwd-icon-x-7z-compressed:after,
1271
- .elfinder-cwd-icon-zip,
1272
- .elfinder-cwd-icon-x-zip,
1273
- .elfinder-cwd-icon-x-xz,
1274
- .elfinder-cwd-icon-x-7z-compressed { background-position: 0 -1050px; }
 
 
1275
 
1276
- .elfinder-cwd-icon-x-gzip:after,
1277
  .elfinder-cwd-icon-x-tar:after,
1278
- .elfinder-cwd-icon-x-gzip,
1279
- .elfinder-cwd-icon-x-tar { background-position: 0 -1100px; }
 
 
1280
 
1281
- .elfinder-cwd-icon-x-bzip:after,
1282
  .elfinder-cwd-icon-x-bzip2:after,
1283
- .elfinder-cwd-icon-x-bzip,
1284
- .elfinder-cwd-icon-x-bzip2 { background-position: 0 -1150px; }
 
 
1285
 
1286
- .elfinder-cwd-icon-x-rar:after,
1287
  .elfinder-cwd-icon-x-rar-compressed:after,
1288
- .elfinder-cwd-icon-x-rar,
1289
- .elfinder-cwd-icon-x-rar-compressed { background-position: 0 -1200px; }
 
 
1290
 
1291
  .elfinder-cwd-icon-x-shockwave-flash:after,
1292
- .elfinder-cwd-icon-x-shockwave-flash { background-position: 0 -1250px; }
 
 
1293
 
1294
- .elfinder-cwd-icon-group { background-position:0 -1300px;}
 
 
1295
 
1296
  /* textfield inside icon */
1297
- .elfinder-cwd-filename input { width:100%; border:none; margin:0; padding:0; }
1298
- .elfinder-cwd-view-icons input {text-align:center; }
1299
- .elfinder-cwd-view-icons textarea {
1300
- width: 100%;
1301
- border: 0px solid;
1302
- margin: 0;
1303
- padding: 0;
1304
- text-align: center;
1305
- overflow: hidden;
1306
- resize: none;
1307
  }
1308
 
1309
- .elfinder-cwd-view-icons { text-align:center; }
 
 
 
 
 
 
 
 
1310
 
 
 
 
1311
 
1312
  /************************************ LIST VIEW ************************************/
1313
 
1314
  /*.elfinder-cwd-view-list { padding:0 0 4px 0; }*/
1315
 
1316
  .elfinder-cwd-wrapper.elfinder-cwd-fixheader .elfinder-cwd::after {
1317
- display: none;
 
 
 
 
 
 
 
 
 
 
 
1318
  }
1319
 
1320
- .elfinder-cwd table {
1321
- width: 100%;
1322
- border-collapse: separate;
1323
- border: 0 solid;
1324
- margin: 0 0 10px 0;
1325
- border-spacing: 0;
1326
- box-sizing: padding-box;
1327
- padding: 2px;
1328
- position: relative;
1329
  }
1330
 
1331
  .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader {
1332
- position: absolute;
1333
- overflow: hidden;
1334
  }
1335
 
1336
  .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before {
1337
- content: '';
1338
- position: absolute;
1339
- width: 100%;
1340
- top: 0;
1341
- height: 3px;
1342
- background-color: white;
1343
  }
 
1344
  .elfinder-droppable-active + .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before {
1345
- background-color: #8cafed;
1346
  }
1347
 
1348
  .elfinder .elfinder-workzone div.elfinder-cwd-fixheader table {
1349
- table-layout: fixed;
1350
  }
1351
 
1352
  .elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader {
1353
- position: relative;
1354
  }
1355
 
1356
  .elfinder-ltr .elfinder-cwd thead .elfinder-cwd-selectall {
1357
- text-align: left;
1358
- right: auto;
1359
- left: 0px;
1360
- padding-top: 3px;
1361
  }
1362
 
1363
  .elfinder-rtl .elfinder-cwd thead .elfinder-cwd-selectall {
1364
- text-align: right;
1365
- right: 0px;
1366
- left: auto;
1367
- padding-top: 3px;
1368
  }
1369
 
1370
  .elfinder-touch .elfinder-cwd thead .elfinder-cwd-selectall {
1371
- padding-top: 5px;
1372
  }
1373
 
1374
- .elfinder .elfinder-cwd table thead tr { border-left:0 solid; border-top:0 solid; border-right:0 solid; }
 
 
 
 
1375
 
1376
  .elfinder .elfinder-cwd table thead td {
1377
- padding: 4px 14px;
1378
  }
 
1379
  .elfinder-ltr .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
1380
- padding: 4px 14px 4px 22px;
1381
  }
 
1382
  .elfinder-rtl .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
1383
- padding: 4px 22px 4px 14px;
1384
  }
1385
 
1386
- .elfinder .elfinder-cwd table thead td.ui-state-active {
1387
- background: #ebf1f6;
1388
- background: -moz-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
1389
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebf1f6), color-stop(50%,#abd3ee), color-stop(51%,#89c3eb), color-stop(100%,#d5ebfb));
1390
- background: -webkit-linear-gradient(top, #ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);
1391
- background: -o-linear-gradient(top, #ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);
1392
- background: -ms-linear-gradient(top, #ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);
1393
- background: linear-gradient(to bottom, #ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);
1394
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebf1f6', endColorstr='#d5ebfb',GradientType=0 );
1395
  }
1396
 
1397
- .elfinder .elfinder-cwd table td {
1398
- padding:4px 12px;
1399
- white-space:pre;
1400
- overflow:hidden;
1401
- text-align:right;
1402
- cursor:default;
1403
- border:0 solid;
 
 
 
 
 
 
 
 
 
 
 
1404
  }
1405
 
1406
  .elfinder .elfinder-cwd table tbody td:first-child {
1407
- position: relative
1408
  }
1409
 
1410
- .elfinder .elfinder-cwd table td div {
1411
- box-sizing: content-box;
1412
  }
1413
 
1414
  tr.elfinder-cwd-file td .elfinder-cwd-select {
1415
- width: 40px;
1416
- padding-top: 3px;
 
 
 
1417
  }
1418
 
1419
  .elfinder-touch tr.elfinder-cwd-file td .elfinder-cwd-select {
1420
- padding-top: 10px;
1421
  }
1422
 
1423
  .elfinder-touch .elfinder-cwd tr td {
1424
- padding: 10px 12px;
1425
  }
1426
 
1427
- .elfinder-touch .elfinder-cwd table thead td {
1428
- padding: 8px 14px;
1429
  }
1430
 
1431
- .elfinder-touch .elfinder-cwd tr.elfinder-cwd-file td {
1432
- padding: 13px 12px;
 
 
 
 
1433
  }
1434
 
1435
- .elfinder-ltr .elfinder-cwd table td { text-align:right; }
1436
- .elfinder-ltr .elfinder-cwd table td:first-child { text-align:left; }
1437
- .elfinder-rtl .elfinder-cwd table td { text-align:left; }
1438
- .elfinder-rtl .elfinder-cwd table td:first-child { text-align:right; }
1439
 
1440
- .elfinder-odd-row { background:#eee; }
 
 
 
 
 
 
1441
 
1442
  /* filename container */
1443
- .elfinder-cwd-view-list .elfinder-cwd-file-wrapper { width:97%; position:relative; }
 
 
 
 
1444
  /* filename container in ltr/rtl enviroment */
1445
- .elfinder-ltr .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper { margin-left: 8px; }
1446
- .elfinder-rtl .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper { margin-right: 8px; }
1447
- .elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename { padding-left:23px; }
1448
- .elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-filename { padding-right:23px; }
 
 
 
 
 
 
 
 
 
 
 
1449
 
1450
  /* premissions/symlink marker */
1451
- .elfinder-cwd-view-list .elfinder-perms,
1452
  .elfinder-cwd-view-list .elfinder-lock,
1453
  .elfinder-cwd-view-list .elfinder-symlink {
1454
- margin-top:-6px;
1455
- opacity: .6;
1456
- filter:Alpha(Opacity=60);
 
 
 
 
 
 
 
 
 
 
 
 
1457
  }
 
1458
  /* markers in ltr/rtl enviroment */
1459
- .elfinder-ltr .elfinder-cwd-view-list .elfinder-perms { left:8px; bottom:-4px; }
1460
- .elfinder-ltr .elfinder-cwd-view-list .elfinder-lock { left:10px; top:0px; }
1461
- .elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink { left:-7px; bottom:-4px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1462
 
1463
  /* file icon */
1464
  .elfinder-cwd-view-list td .elfinder-cwd-icon {
1465
- width:16px;
1466
- height:16px;
1467
- position:absolute;
1468
- top:50%;
1469
- margin-top:-8px;
1470
- background-image:url(../img/icons-small.png);
1471
  }
 
1472
  /* icon in ltr/rtl enviroment */
1473
- .elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon { left:0; }
1474
- .elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon { right:0; }
 
1475
 
1476
- /* thumbnail image video overlay */
1477
- .elfinder-cwd-view-list .elfinder-cwd-icon.elfinder-cwd-icon-video.elfinder-cwd-bgurl:after {
1478
- content: none;
 
 
 
 
 
1479
  }
1480
 
1481
  /* table header resize handle */
1482
  .elfinder-cwd-view-list thead td .ui-resizable-handle {
1483
- height: 100%;
1484
- top: 3px;
1485
  }
 
1486
  .elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-handle {
1487
- top: -5px;
1488
- margin: 10px;
1489
  }
 
1490
  .elfinder-cwd-view-list thead td .ui-resizable-e {
1491
- right: -7px;
1492
  }
 
1493
  .elfinder-cwd-view-list thead td .ui-resizable-w {
1494
- left: -7px;
1495
  }
 
1496
  .elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-e {
1497
- right: -16px;
1498
  }
 
1499
  .elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-w {
1500
- left: -16px;
1501
  }
1502
 
1503
  /* empty message */
1504
  .elfinder-cwd-wrapper-empty .elfinder-cwd-view-list.elfinder-cwd:after {
1505
- margin-top: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1506
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1507
  /* File: /css/dialog.css */
1508
  /*********************************************/
1509
  /* DIALOGS STYLES */
@@ -1511,260 +2699,401 @@ tr.elfinder-cwd-file td .elfinder-cwd-select {
1511
 
1512
  /* common dialogs class */
1513
  .std42-dialog {
1514
- padding:0;
1515
- position:absolute;
1516
- left:auto;
1517
- right:auto;
 
1518
  }
 
1519
  .std42-dialog.elfinder-dialog-minimized {
1520
- overFlow: hidden;
1521
- position: relative;
1522
- float: left;
1523
- width: auto;
 
1524
  }
 
1525
  .elfinder-rtl .std42-dialog.elfinder-dialog-minimized {
1526
- float: right;
 
 
 
 
1527
  }
1528
 
1529
  /* titlebar */
1530
  .std42-dialog .ui-dialog-titlebar {
1531
- border-left:0 solid transparent;
1532
- border-top:0 solid transparent;
1533
- border-right:0 solid transparent;
1534
- -moz-border-radius-bottomleft: 0;
1535
- -webkit-border-bottom-left-radius: 0;
1536
- border-bottom-left-radius: 0;
1537
- -moz-border-radius-bottomright: 0;
1538
- -webkit-border-bottom-right-radius: 0;
1539
- border-bottom-right-radius: 0;
1540
- font-weight:normal;
1541
- padding:.2em 1em;
1542
  }
 
1543
  .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar {
1544
- padding: 0 .5em;
1545
- height: 20px;
1546
  }
 
1547
  .elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar {
1548
- padding:.3em .5em;
1549
  }
 
1550
  .std42-dialog.ui-draggable-disabled .ui-dialog-titlebar {
1551
- cursor: default;
1552
  }
1553
 
1554
  .std42-dialog .ui-dialog-titlebar .ui-widget-header {
1555
- border : none;
1556
- cursor: pointer;
1557
  }
1558
 
1559
  .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title {
1560
- display: inherit;
1561
- word-break: break-all;
1562
  }
 
1563
  .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title {
1564
- display: list-item;
1565
- display: -moz-inline-box;
1566
- white-space: nowrap;
1567
- word-break: normal;
1568
- overflow: hidden;
1569
- word-wrap: normal;
1570
- overflow-wrap: normal;
1571
- max-width: -webkit-calc(100% - 24px);
1572
- max-width: -moz-calc(100% - 24px);
1573
- max-width: calc(100% - 24px);
1574
  }
 
1575
  .elfinder-touch .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title {
1576
- padding-top: .15em;
1577
  }
 
1578
  .elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title {
1579
- max-width: -webkit-calc(100% - 36px);
1580
- max-width: -moz-calc(100% - 36px);
1581
- max-width: calc(100% - 36px);
1582
  }
1583
 
1584
  .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button {
1585
- position: relative;
1586
- float: left;
1587
- top: 10px;
1588
- left: -10px;
1589
- right: 10px;
1590
- width: 20px;
1591
- height: 20px;
1592
- padding:1px;
1593
- margin: -10px 1px 0 1px;
1594
- background-color: transparent;
1595
- background-image: none;
1596
- }
1597
- .elfinder-touch .std42-dialog/*:not(.elfinder-dialog-minimized)*/ .ui-dialog-titlebar .elfinder-titlebar-button {
1598
- transform: scale(1.1);
1599
- zoom: 1.1;
1600
- margin-left: 5px;
1601
- margin-right: 5px;
1602
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
1603
  .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right {
1604
- float: right;
1605
- left: 10px;
1606
- right: -10px;
1607
  }
 
1608
  .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
1609
- width: 17px;
1610
- height: 17px;
1611
- border-width: 1px;
1612
- border-color: transparent;
1613
- opacity: .7;
1614
- filter:Alpha(Opacity=70);
1615
- -moz-border-radius: 8px;
1616
- -webkit-border-radius: 8px;
1617
- border-radius: 8px;
 
 
 
 
1618
  }
 
1619
  .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
1620
- opacity: 1;
1621
- filter:Alpha(Opacity=100);
 
 
 
 
1622
  }
1623
- .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover .ui-icon,
1624
- .elfinder-mobile .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-icon {
1625
- background-color: #ff6252;
1626
- border-color: #e5695d;
 
 
 
 
1627
  }
1628
- .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize:hover .ui-icon,
1629
- .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize .ui-icon {
1630
- background-color: #ffbc00;
1631
- border-color: #e3a40b;
1632
  }
1633
- .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full:hover .ui-icon,
1634
- .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full .ui-icon {
1635
- background-color: #26c82f;
1636
- border-color: #13ae10;
1637
  }
1638
 
 
 
1639
  /* resize handle for touch devices */
1640
  .elfinder-touch .std42-dialog.ui-dialog:not(ui-resizable-disabled) .ui-resizable-se {
1641
- width: 12px;
1642
- height: 12px;
1643
- zoom: 1.5;
1644
- right: -7px;
1645
- bottom: -7px;
1646
- margin: 3px 7px 7px 3px;
1647
- background-position: -64px -224px;
 
 
1648
  }
1649
 
1650
- .elfinder-rtl .elfinder-dialog .ui-dialog-titlebar { text-align:right; }
 
 
1651
 
1652
  /* content */
1653
  .std42-dialog .ui-dialog-content {
1654
- padding:.3em .5em;
1655
- box-sizing: border-box;
1656
  }
 
1657
  .elfinder .std42-dialog .ui-dialog-content,
1658
  .elfinder .std42-dialog .ui-dialog-content * {
1659
- -webkit-user-select: auto;
1660
- -moz-user-select: text;
1661
- -khtml-user-select: text;
1662
- user-select: text;
 
 
 
 
1663
  }
1664
 
1665
  /* buttons */
1666
  .std42-dialog .ui-dialog-buttonpane {
1667
- border: 0 solid;
1668
- margin: 0;
1669
- padding: .5em;
1670
- text-align: right;
 
 
 
 
 
 
 
 
 
 
1671
  }
1672
- .elfinder-rtl .std42-dialog .ui-dialog-buttonpane { text-align: left; }
1673
 
1674
- .std42-dialog .ui-dialog-buttonpane button { margin:.7em 0 0 .4em; padding: .2em; outline:0px solid; }
1675
- .std42-dialog .ui-dialog-buttonpane button span { padding:2px 9px; }
1676
- .std42-dialog .ui-dialog-buttonpane button span.ui-icon { padding: 2px; }
1677
 
1678
- .elfinder-dialog .ui-resizable-e,
1679
- .elfinder-dialog .ui-resizable-s { width:0; height:0;}
 
1680
 
1681
- .std42-dialog .ui-button input { cursor: pointer;}
 
 
 
 
1682
 
1683
- /* error/notify/confirm dialogs icon */
1684
- .elfinder-dialog-icon {
1685
- position:absolute;
1686
- width:32px;
1687
- height:32px;
1688
- left:10px;
1689
- top:50%;
1690
- margin-top:-15px;
1691
- background:url("../img/dialogs.png") 0 0 no-repeat;
1692
  }
1693
 
1694
- .elfinder-rtl .elfinder-dialog-icon { left:auto; right:10px;}
 
 
1695
 
 
 
 
 
 
 
 
 
 
 
1696
 
 
 
 
 
1697
 
1698
  /*********************** ERROR DIALOG **************************/
1699
 
1700
  .elfinder-dialog-error .ui-dialog-content,
1701
- .elfinder-dialog-confirm .ui-dialog-content { padding-left: 56px; min-height:35px; }
 
 
 
1702
 
1703
  .elfinder-rtl .elfinder-dialog-error .ui-dialog-content,
1704
- .elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content { padding-left:0; padding-right: 56px; }
 
 
 
 
 
 
 
1705
 
1706
  /*********************** NOTIFY DIALOG **************************/
1707
 
1708
- .elfinder-dialog-notify .ui-dialog-titlebar-close { display:none; }
1709
- .elfinder-dialog-notify .ui-dialog-content { padding:0; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1710
 
1711
  /* one notification container */
1712
  .elfinder-notify {
1713
- border-bottom:1px solid #ccc;
1714
- position:relative;
1715
- padding:.5em;
1716
-
1717
- text-align:center;
1718
- overflow:hidden;
1719
  }
1720
 
1721
- .elfinder-ltr .elfinder-notify { padding-left:36px; }
1722
- .elfinder-rtl .elfinder-notify { padding-right:36px; }
 
1723
 
1724
- .elfinder-notify:last-child { border:0 solid; }
 
 
 
 
 
 
1725
 
1726
  /* progressbar */
1727
  .elfinder-notify-progressbar {
1728
- width:180px;
1729
- height:8px;
1730
- border:1px solid #aaa;
1731
- background:#f5f5f5;
1732
- margin:5px auto;
1733
- overflow:hidden;
1734
  }
1735
 
1736
  .elfinder-notify-progress {
1737
- width:100%;
1738
- height:8px;
1739
- background:url(../img/progress.gif) center center repeat-x;
1740
  }
1741
 
1742
  .elfinder-notify-progressbar, .elfinder-notify-progress {
1743
- -moz-border-radius: 2px;
1744
- -webkit-border-radius: 2px;
1745
- border-radius: 2px;
1746
  }
1747
 
1748
  /* icons */
1749
- .elfinder-dialog-icon-open,
1750
  .elfinder-dialog-icon-readdir,
1751
- .elfinder-dialog-icon-file { background-position: 0 -225px; }
1752
- .elfinder-dialog-icon-reload { background-position: 0 -225px; }
1753
- .elfinder-dialog-icon-mkdir { background-position: 0 -64px; }
1754
- .elfinder-dialog-icon-mkfile { background-position: 0 -96px; }
 
 
 
 
 
 
 
 
 
 
 
 
1755
  .elfinder-dialog-icon-copy,
1756
  .elfinder-dialog-icon-prepare,
1757
- .elfinder-dialog-icon-move { background-position: 0 -128px;}
1758
- .elfinder-dialog-icon-upload { background-position: 0 -160px; }
1759
- .elfinder-dialog-icon-chunkmerge { background-position: 0 -160px; }
1760
- .elfinder-dialog-icon-rm { background-position: 0 -192px; }
1761
- .elfinder-dialog-icon-download { background-position: 0 -260px; }
1762
- .elfinder-dialog-icon-save { background-position: 0 -295px; }
1763
- .elfinder-dialog-icon-rename { background-position: 0 -330px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1764
  .elfinder-dialog-icon-zipdl,
1765
  .elfinder-dialog-icon-archive,
1766
- .elfinder-dialog-icon-extract { background-position: 0 -365px; }
1767
- .elfinder-dialog-icon-search { background-position: 0 -402px; }
 
 
 
 
 
 
1768
  .elfinder-dialog-icon-resize,
1769
  .elfinder-dialog-icon-loadimg,
1770
  .elfinder-dialog-icon-netmount,
@@ -1772,189 +3101,312 @@ tr.elfinder-cwd-file td .elfinder-cwd-select {
1772
  .elfinder-dialog-icon-chmod,
1773
  .elfinder-dialog-icon-preupload,
1774
  .elfinder-dialog-icon-url,
1775
- .elfinder-dialog-icon-dim { background-position: 0 -434px; }
 
 
1776
 
1777
  /*********************** CONFIRM DIALOG **************************/
1778
 
1779
- .elfinder-dialog-confirm-applyall {
1780
- padding: 0 1em;
1781
- margin: 0;
 
1782
  }
1783
- .elfinder-ltr .elfinder-dialog-confirm-applyall { text-align: left; }
1784
- .elfinder-rtl .elfinder-dialog-confirm-applyall { text-align: right; }
1785
 
1786
- .elfinder-dialog-confirm .elfinder-dialog-icon { background-position:0 -32px; }
 
 
 
1787
 
1788
- .elfinder-dialog-confirm .ui-dialog-buttonset { width: auto; }
 
 
 
1789
 
1790
- /*********************** FILE INFO DIALOG **************************/
 
 
 
 
 
 
1791
 
 
1792
 
1793
  .elfinder-info-title .elfinder-cwd-icon {
1794
- float:left;
1795
- width:48px;
1796
- height:48px;
1797
- margin-right:1em;
1798
  }
1799
 
1800
  .elfinder-rtl .elfinder-info-title .elfinder-cwd-icon {
1801
- float: right;
1802
- margin-right: 0;
1803
- margin-left: 1em;
1804
  }
1805
 
1806
- .elfinder-info-title strong { display:block; padding:.3em 0 .5em 0; }
 
 
 
1807
 
1808
  .elfinder-info-tb {
1809
- min-width:200px;
1810
- border:0 solid;
1811
- margin:1em .2em 1em .2em;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1812
  }
1813
 
1814
- .elfinder-info-tb td { white-space:nowrap; padding:2px; }
 
 
 
1815
 
1816
- .elfinder-info-tb tr td:first-child { text-align:right; }
 
 
1817
 
1818
- .elfinder-info-tb span { float:left;}
1819
- .elfinder-info-tb a { outline: none; text-decoration:underline; }
1820
- .elfinder-info-tb a:hover { text-decoration:none; }
1821
- .elfinder-info-spinner {
1822
- width:14px;
1823
- height:14px;
1824
- float:left;
1825
- background: url("../img/spinner-mini.gif") center center no-repeat;
1826
- margin:0 5px;
1827
  }
1828
 
1829
- .elfinder-netmount-tb { margin:0 auto; }
1830
  .elfinder-netmount-tb select,
1831
- .elfinder-netmount-tb input { border:1px solid #ccc; }
1832
- .elfinder-netmount-tb .elfinder-button-icon { cursor: pointer; }
 
1833
 
1834
  button.elfinder-info-button {
1835
- margin: -3.5px 0;
1836
- cursor: pointer;
1837
  }
1838
 
1839
  /*********************** UPLOAD DIALOG **************************/
1840
 
1841
  .elfinder-upload-dropbox {
1842
- display: table-cell;
1843
- text-align:center;
1844
- vertical-align: middle;
1845
- padding:0.5em;
1846
- border:3px dashed #aaa;
1847
- width: 9999px;
1848
- height: 80px;
1849
- overflow: hidden;
1850
- word-break: keep-all;
1851
  }
1852
 
1853
  .elfinder-upload-dropbox.ui-state-hover {
1854
- background:#dfdfdf;
1855
- border:3px dashed #555;
1856
  }
1857
 
1858
  .elfinder-upload-dialog-or {
1859
- margin:.3em 0;
1860
- text-align:center;
1861
  }
1862
 
1863
- .elfinder-upload-dialog-wrapper { text-align:center; }
 
 
1864
 
1865
- .elfinder-upload-dialog-wrapper .ui-button { position:relative; overflow:hidden; }
 
 
 
1866
 
1867
  .elfinder-upload-dialog-wrapper .ui-button form {
1868
- position:absolute;
1869
- right:0;
1870
- top:0;
1871
- opacity: 0; filter:Alpha(Opacity=0);
 
 
1872
  }
1873
 
1874
  .elfinder-upload-dialog-wrapper .ui-button form input {
1875
- padding:0 20px;
1876
- font-size:3em;
1877
-
1878
  }
1879
 
1880
-
1881
  /* dialog for elFinder itself */
1882
  .dialogelfinder .dialogelfinder-drag {
1883
- border-left:0 solid;
1884
- border-top:0 solid;
1885
- border-right:0 solid;
1886
- font-weight:normal;
1887
- padding:2px 12px;
1888
- cursor:move;
1889
- position:relative;
1890
- text-align:left;
1891
  }
1892
 
1893
- .elfinder-rtl .dialogelfinder-drag { text-align:right;}
 
 
1894
 
1895
  .dialogelfinder-drag-close {
1896
- position: absolute;
1897
- top:50%;
1898
- margin-top:-8px;
1899
  }
1900
 
1901
- .elfinder-ltr .dialogelfinder-drag-close { right:12px; }
1902
- .elfinder-rtl .dialogelfinder-drag-close { left:12px; }
 
1903
 
 
 
 
1904
 
1905
  /*********************** RM CONFIRM **************************/
1906
  .elfinder-rm-title {
1907
- margin-bottom: .5ex;
1908
  }
1909
 
1910
  .elfinder-rm-title .elfinder-cwd-icon {
1911
- float:left;
1912
- width:48px;
1913
- height:48px;
1914
- margin-right:1em;
1915
  }
1916
 
1917
  .elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon {
1918
- float: right;
1919
- margin-right: 0;
1920
- margin-left: 1em;
1921
  }
1922
 
1923
  .elfinder-rm-title strong {
1924
- display: block;
1925
- /*word-wrap: break-word;*/
1926
- white-space: pre-wrap;
1927
- word-break: normal;
1928
- overflow: hidden;
1929
- text-overflow: ellipsis;
1930
  }
1931
 
1932
- .elfinder-rm-title+br {
1933
- display: none;
1934
  }
 
1935
  /* File: /css/fonts.css */
1936
- .elfinder-contextmenu .elfinder-contextmenu-item span { font-size:.72em; }
1937
-
1938
- .elfinder-cwd-view-icons .elfinder-cwd-filename { font-size:.7em; }
1939
- .elfinder-cwd-view-list td { font-size:.7em; }
1940
-
1941
- .std42-dialog .ui-dialog-titlebar { font-size:.82em; }
1942
- .std42-dialog .ui-dialog-content { font-size:.72em; }
1943
- .std42-dialog .ui-dialog-buttonpane { font-size:.76em; }
1944
- .elfinder-info-tb { font-size:.9em; }
1945
- .elfinder-upload-dropbox { font-size:1.2em; }
1946
- .elfinder-upload-dialog-or { font-size:1.2em; }
1947
- .dialogelfinder .dialogelfinder-drag { font-size:.9em; }
1948
- .elfinder .elfinder-navbar { font-size:.72em; }
1949
- .elfinder-place-drag .elfinder-navbar-dir { font-size:.9em;}
1950
- .elfinder-quicklook-title { font-size:.7em; }
1951
- .elfinder-quicklook-info-data { font-size:.72em; }
1952
- .elfinder-quicklook-preview-text-wrapper { font-size:.9em; }
1953
- .elfinder-button-menu-item { font-size:.72em; }
1954
- .elfinder-button-search input { font-size:.8em; }
1955
- .elfinder-statusbar div { font-size:.7em; }
1956
- .elfinder-drag-num { font-size:12px; }
1957
- .elfinder-toast { font-size:.76em; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1958
 
1959
 
1960
  /* File: /css/navbar.css */
@@ -1964,568 +3416,920 @@ button.elfinder-info-button {
1964
 
1965
  /* container */
1966
  .elfinder .elfinder-navbar {
1967
- width:230px;
1968
- padding:3px 5px;
1969
- background-image:none;
1970
- border-top:0 solid;
1971
- border-bottom:0 solid;
1972
- overflow:auto;
1973
- position:relative;
 
1974
  }
1975
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1976
 
1977
  /* ltr/rtl enviroment */
1978
- .elfinder-ltr .elfinder-navbar { float:left; border-left:0 solid; }
1979
- .elfinder-rtl .elfinder-navbar { float:right; border-right:0 solid; }
1980
- .elfinder-ltr .ui-resizable-e { margin-left:10px; }
 
 
 
 
 
 
 
 
 
 
1981
 
1982
  /* folders tree container */
1983
  .elfinder-tree {
1984
- display:table; width:100%; margin: 0 0 .5em 0;
1985
- -webkit-tap-highlight-color:rgba(0,0,0,0);
 
 
1986
  }
1987
 
1988
  /* one folder wrapper */
1989
- .elfinder-navbar-wrapper, .elfinder-place-wrapper { }
 
1990
 
1991
  /* folder */
1992
- .elfinder-navbar-dir {
1993
- position:relative;
1994
- display:block;
1995
- white-space:nowrap;
1996
- padding:3px 12px;
1997
- margin: 0;
1998
- outline:0px solid;
1999
- border:1px solid transparent;
2000
- cursor:default;
2001
  }
 
2002
  .elfinder-touch .elfinder-navbar-dir {
2003
- padding: 12px 12px;
2004
  }
2005
 
2006
  /* ltr/rtl enviroment */
2007
- .elfinder-ltr .elfinder-navbar-dir { padding-left:35px; }
2008
- .elfinder-rtl .elfinder-navbar-dir { padding-right:35px; }
 
 
 
 
 
2009
 
2010
  /* arrow before icon */
2011
  .elfinder-navbar-arrow {
2012
- width:12px;
2013
- height:14px;
2014
- position:absolute;
2015
- display:none;
2016
- top:50%;
2017
- margin-top:-8px;
2018
- background-image:url("../img/arrows-normal.png");
2019
- background-repeat:no-repeat;
2020
- /* border:1px solid #111;*/
2021
  }
 
2022
  .elfinder-ltr .elfinder-navbar-arrow {
2023
- left: 0;
2024
  }
2025
- .elfinder-ltr .elfinder-navbar-arrow {
2026
- right:0;
 
2027
  }
 
2028
  .elfinder-touch .elfinder-navbar-arrow {
2029
- zoom: 1.4;
2030
- -moz-transform-origin: top left;
2031
- -moz-transform: scale(1.4);
2032
- margin-bottom: 7px;
2033
  }
 
2034
  .elfinder-ltr.elfinder-touch .elfinder-navbar-arrow {
2035
  left: -3px;
2036
  margin-right: 20px;
2037
  }
 
2038
  .elfinder-rtl.elfinder-touch .elfinder-navbar-arrow {
2039
  right: -3px;
2040
  margin-left: 20px;
2041
  }
2042
 
2043
- .ui-state-active .elfinder-navbar-arrow { background-image:url("../img/arrows-active.png"); }
 
 
2044
 
2045
  /* collapsed/expanded arrow view */
2046
- .elfinder-navbar-collapsed .elfinder-navbar-arrow { display:block; }
 
 
 
 
 
 
 
2047
 
2048
  /* arrow ltr/rtl enviroment */
2049
- .elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow { background-position: 0 4px;}
2050
- .elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow { background-position: 0 -10px; }
2051
- .elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,
2052
- .elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow { background-position:0 -21px; }
2053
 
 
 
 
 
 
 
 
 
2054
 
2055
  /* folder icon */
2056
  .elfinder-navbar-icon {
2057
- width:16px;
2058
- height:16px;
2059
- position:absolute;
2060
- top:50%;
2061
- margin-top:-8px;
2062
- background-image:url("../img/toolbar.png");
2063
- background-repeat:no-repeat;
2064
- background-position:0 -16px;
2065
  }
2066
 
2067
  /* ltr/rtl enviroment */
2068
- .elfinder-ltr .elfinder-navbar-icon { left:14px; }
2069
- .elfinder-rtl .elfinder-navbar-icon { right:14px; }
 
 
 
 
 
 
 
 
 
 
2070
 
2071
  /* root folder */
2072
- .elfinder-tree .elfinder-navbar-root .elfinder-navbar-icon { background-position:0 0; }
2073
- .elfinder-places .elfinder-navbar-root .elfinder-navbar-icon { background-position:0 -704px; }
 
 
 
 
 
 
 
 
 
 
 
2074
 
2075
- /* root icon of each volume */
2076
- .elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon { background-image:url("../img/volume_icon_local.png"); background-position:0 0; }
2077
- .elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon { background-image:url("../img/volume_icon_ftp.png"); background-position:0 0; }
2078
- .elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon { background-image:url("../img/volume_icon_sql.png"); background-position:0 0; }
2079
- .elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon { background-image:url("../img/volume_icon_dropbox.png"); background-position:0 0; }
2080
- .elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon { background-image:url("../img/volume_icon_googledrive.png"); background-position:0 0; }
2081
- .elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon { background-image:url("../img/volume_icon_onedrive.png"); background-position:0 0; }
2082
- .elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon { background-image:url("../img/volume_icon_box.png"); background-position:0 0; }
2083
- .elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon { background-image:url("../img/toolbar.png"); background-position: 0 -688px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2084
 
2085
  /* icon in active/hove/dropactive state */
2086
- .ui-state-active .elfinder-navbar-icon,
2087
- .elfinder-droppable-active .elfinder-navbar-icon,
2088
- .ui-state-hover .elfinder-navbar-icon { background-position:0 -32px; }
 
 
2089
 
2090
  /* ltr/rtl enviroment */
2091
- .elfinder-ltr .elfinder-navbar-subtree { margin-left:12px; }
2092
- .elfinder-rtl .elfinder-navbar-subtree { margin-right:12px; }
 
2093
 
 
 
 
2094
 
2095
  /* spinner */
2096
- .elfinder-navbar-spinner {
2097
- width:14px;
2098
- height:14px;
2099
- position:absolute;
2100
- display:block;
2101
- top:50%;
2102
- margin-top:-7px;
2103
- background: url("../img/spinner-mini.gif") center center no-repeat;
2104
  }
 
2105
  /* spinner ltr/rtl enviroment */
2106
- .elfinder-ltr .elfinder-navbar-spinner { left:0; margin-left:-2px; }
2107
- .elfinder-rtl .elfinder-navbar-spinner { right:0; margin-right:-2px; }
 
 
 
 
 
 
 
2108
 
2109
  /* marker */
2110
  .elfinder-navbar .elfinder-perms,
2111
  .elfinder-navbar .elfinder-lock,
2112
- .elfinder-navbar .elfinder-symlink { opacity: .6; filter:Alpha(Opacity=60); }
 
 
 
2113
 
2114
  /* permissions marker */
2115
- .elfinder-navbar .elfinder-perms { bottom:-1px; margin-top:-8px; }
 
 
 
2116
 
2117
  /* locked marker */
2118
- .elfinder-navbar .elfinder-lock { top:-2px; }
 
 
2119
 
2120
  /* permissions/symlink markers ltr/rtl enviroment */
2121
- .elfinder-ltr .elfinder-navbar .elfinder-perms { left: 20px; }
2122
- .elfinder-rtl .elfinder-navbar .elfinder-perms { right: 20px; }
2123
- .elfinder-ltr .elfinder-navbar .elfinder-lock { left: 20px; }
2124
- .elfinder-rtl .elfinder-navbar .elfinder-lock { right: 20px; }
2125
- .elfinder-ltr .elfinder-navbar .elfinder-symlink { left: 8px; }
2126
- .elfinder-rtl .elfinder-navbar .elfinder-symlink { right: 8px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2127
 
2128
  /* navbar input */
2129
- .elfinder-navbar input { width:100%; border:0px solid; margin:0; padding:0; }
 
 
 
 
 
2130
 
2131
  /* resizable */
2132
- .elfinder-navbar .ui-resizable-handle { width:12px; background:transparent url('../img/resize.png') center center no-repeat; }
 
 
 
 
2133
  .elfinder-nav-handle-icon {
2134
- position:absolute;
2135
- top:50%;
2136
- margin:-8px 2px 0 2px;
2137
- opacity: .5; filter:Alpha(Opacity=50);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2138
  }
2139
 
2140
  .elfinder-places {
2141
- border: none;
2142
- margin: 0;
2143
- padding: 0;
2144
  }
 
2145
  .elfinder-places.elfinder-droppable-active {
2146
- /*border:1px solid #8cafed;*/
2147
  }
2148
 
2149
  /* navbar swipe handle */
2150
  .elfinder-navbar-swipe-handle {
2151
- position: absolute;
2152
- top: 0px;
2153
- height: 100%;
2154
- width: 50px;
2155
- pointer-events: none;
2156
  }
 
2157
  .elfinder-ltr .elfinder-navbar-swipe-handle {
2158
- left: 0px;
2159
- background: linear-gradient(to right,
2160
- rgba(221,228,235,1) 0,
2161
- rgba(221,228,235,0.8) 5px,
2162
- rgba(216,223,230,0.3) 8px,
2163
- rgba(0,0,0,0.1) 95%,
2164
- rgba(0,0,0,0) 100%);
2165
  }
 
2166
  .elfinder-rtl .elfinder-navbar-swipe-handle {
2167
- right: 0px;
2168
- background: linear-gradient(to left,
2169
- rgba(221,228,235,1) 0,
2170
- rgba(221,228,235,0.8) 5px,
2171
- rgba(216,223,230,0.3) 8px,
2172
- rgba(0,0,0,0.1) 95%,
2173
- rgba(0,0,0,0) 100%);
2174
  }
 
2175
  /* File: /css/places.css */
2176
  /*********************************************/
2177
  /* PLACES STYLES */
2178
  /*********************************************/
2179
  /* root extra icon */
2180
  .elfinder-navbar-root .elfinder-places-root-icon {
2181
- position: absolute;
2182
- top: 50%;
2183
- margin-top: -9px;
2184
- cursor: pointer;
2185
  }
 
2186
  .elfinder-ltr .elfinder-places-root-icon {
2187
- right: 10px;
2188
  }
 
2189
  .elfinder-rtl .elfinder-places-root-icon {
2190
- left: 10px;
2191
  }
 
2192
  .elfinder-navbar-expanded .elfinder-places-root-icon {
2193
- display: block;
2194
  }
2195
 
2196
  /* dragging helper base */
2197
  .elfinder-place-drag {
2198
- font-size: 0.8em;
2199
  }
2200
 
2201
  /* File: /css/quicklook.css */
2202
  /* quicklook window */
2203
  .elfinder-quicklook {
2204
- position:absolute;
2205
- background:url("../img/quicklook-bg.png");
2206
- overflow:hidden;
2207
- border-radius:7px;
2208
- -moz-border-radius:7px;
2209
- -webkit-border-radius:7px;
2210
- padding:20px 0 40px 0;
 
 
 
 
 
 
 
 
2211
  }
2212
 
2213
  .elfinder-quicklook.elfinder-touch {
2214
- padding:30px 0 40px 0;
2215
  }
2216
 
2217
  .elfinder-quicklook .ui-resizable-se {
2218
- width:14px;
2219
- height:14px;
2220
- right:5px;
2221
- bottom:3px;
2222
- background:url("../img/toolbar.png") 0 -496px no-repeat;
2223
  }
 
2224
  .elfinder-quicklook.elfinder-touch .ui-resizable-se {
2225
- zoom: 1.5;
 
 
2226
  }
2227
 
2228
  /* quicklook fullscreen window */
2229
  .elfinder-quicklook.elfinder-quicklook-fullscreen {
2230
- position:fixed;
2231
- top:0;
2232
- right:0;
2233
- bottom:0;
2234
- left:0;
2235
- margin:0;
2236
- box-sizing:border-box;
2237
- width:100%;
2238
- height:100%;
2239
- object-fit:contain;
2240
- border-radius:0;
2241
- -moz-border-radius:0;
2242
- -webkit-border-radius:0;
2243
- -webkit-background-clip: padding-box;
2244
- padding:0;
2245
- background:#000;
2246
- display:block;
2247
  }
 
2248
  /* hide titlebar in fullscreen mode */
2249
  .elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar,
2250
- .elfinder-quicklook-fullscreen.elfinder-quicklook .ui-resizable-handle { display:none; }
 
 
2251
 
2252
  /* hide preview border in fullscreen mode */
2253
- .elfinder-quicklook-fullscreen .elfinder-quicklook-preview { border:0 solid ;}
 
 
2254
 
2255
  /*.elfinder-quicklook-fullscreen iframe {
2256
  height: 100%;
2257
  }*/
2258
 
2259
  .elfinder-quicklook-cover {
2260
- width: 100%;
2261
- height: 100%;
2262
- top: 0;
2263
- left: 0;
2264
- position: absolute;
 
 
 
 
 
 
 
2265
  }
2266
 
2267
  /* quicklook titlebar */
2268
  .elfinder-quicklook-titlebar {
2269
- text-align:center;
2270
- background:#777;
2271
- position:absolute;
2272
- left:0;
2273
- top:0;
2274
- width:100%;
2275
- height:20px;
2276
- -moz-border-radius-topleft: 7px;
2277
- -webkit-border-top-left-radius: 7px;
2278
- border-top-left-radius: 7px;
2279
- -moz-border-radius-topright: 7px;
2280
- -webkit-border-top-right-radius: 7px;
2281
- border-top-right-radius: 7px;
2282
- cursor:move;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2283
  }
2284
 
2285
- .elfinder-touch .elfinder-quicklook-titlebar {
2286
- height: 30px;
 
 
 
2287
  }
2288
 
2289
- /* window title */
2290
- .elfinder-quicklook-title {
2291
- color:#fff;
2292
- white-space:nowrap;
2293
- overflow:hidden;
2294
- padding:2px 0;
2295
  }
2296
 
2297
- .elfinder-touch .elfinder-quicklook-title {
2298
- padding: 8px 0;
 
 
 
 
2299
  }
2300
 
2301
- /* icon "close" in titlebar */
2302
- .elfinder-quicklook-titlebar .ui-icon {
2303
- position:absolute;
2304
- left : 4px;
2305
- top:50%;
2306
- margin-top:-8px;
2307
- width:16px;
2308
- height:16px;
2309
- cursor:default;
2310
  }
2311
 
2312
- .elfinder-touch .elfinder-quicklook-titlebar .ui-icon {
2313
- zoom: 1.5;
 
2314
  }
2315
 
2316
- /* main part of quicklook window */
2317
- .elfinder-quicklook-preview {
2318
- overflow: hidden;
2319
- position:relative;
2320
- border:0 solid;
2321
- border-left:1px solid transparent;
2322
- border-right:1px solid transparent;
2323
- height:100%;
2324
  }
2325
- .elfinder-quicklook-preview.elfinder-overflow-auto {
2326
- overflow: auto;
2327
- -webkit-overflow-scrolling: touch;
2328
  }
2329
 
2330
- /* wrapper for file info/icon */
2331
- .elfinder-quicklook-info-wrapper {
2332
- position:absolute;
2333
- width:100%;
2334
- left:0;
2335
- top:50%;
2336
- margin-top:-50px;
2337
  }
2338
 
2339
- /* file info */
2340
- .elfinder-quicklook-info {
2341
- padding: 0 12px 0 112px;
2342
  }
2343
 
2344
- /* file name in info */
2345
- .elfinder-quicklook-info .elfinder-quicklook-info-data:first-child {
2346
- color:#fff;
2347
- font-weight:bold;
2348
- padding-bottom:.5em;
2349
  }
2350
 
2351
- /* other data in info */
2352
- .elfinder-quicklook-info-data {
2353
- padding-bottom:.2em;
2354
- color:#fff;
2355
  }
2356
 
 
 
 
 
2357
 
2358
- /* file icon */
2359
- .elfinder-quicklook .elfinder-cwd-icon {
2360
- position:absolute;
2361
- left:32px;
2362
- top:50%;
2363
- margin-top:-20px;
2364
  }
2365
 
2366
  /* image in preview */
2367
  .elfinder-quicklook-preview img {
2368
- display:block;
2369
- margin:0 auto;
2370
  }
2371
 
2372
  /* navigation bar on quicklook window bottom */
2373
  .elfinder-quicklook-navbar {
2374
- position:absolute;
2375
- left:50%;
2376
- bottom:4px;
2377
- width:140px;
2378
- height:32px;
2379
- padding:0px;
2380
- margin-left:-70px;
2381
- border:1px solid transparent;
2382
- border-radius:19px;
2383
- -moz-border-radius:19px;
2384
- -webkit-border-radius:19px;
2385
  }
2386
 
2387
  /* navigation bar in fullscreen mode */
2388
  .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar {
2389
- width:188px;
2390
- margin-left:-94px;
2391
- padding:5px;
2392
- border:1px solid #eee;
2393
- background:#000;
2394
- opacity: 0.4;
2395
- filter: Alpha(Opacity=40);
2396
  }
2397
 
2398
  /* show close icon in fullscreen mode */
2399
  .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,
2400
  .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator {
2401
- display:inline;
2402
  }
2403
 
2404
  /* icons in navbar */
2405
  .elfinder-quicklook-navbar-icon {
2406
- width:32px;
2407
- height:32px;
2408
- margin:0 7px;
2409
- float:left;
2410
- background:url("../img/quicklook-icons.png") 0 0 no-repeat;
2411
-
2412
  }
2413
 
2414
  /* fullscreen icon */
2415
  .elfinder-quicklook-navbar-icon-fullscreen {
2416
- background-position:0 -64px;
2417
  }
2418
 
2419
  /* exit fullscreen icon */
2420
  .elfinder-quicklook-navbar-icon-fullscreen-off {
2421
- background-position:0 -96px;
2422
  }
2423
 
2424
  /* prev file icon */
2425
  .elfinder-quicklook-navbar-icon-prev {
2426
- background-position:0 0;
2427
  }
2428
 
2429
  /* next file icon */
2430
  .elfinder-quicklook-navbar-icon-next {
2431
- background-position:0 -32px;
2432
  }
2433
 
2434
  /* close icon */
2435
  .elfinder-quicklook-navbar-icon-close {
2436
- background-position:0 -128px;
2437
- display:none;
2438
  }
2439
 
2440
  /* icons separator */
2441
  .elfinder-quicklook-navbar-separator {
2442
- width:1px;
2443
- height:32px;
2444
- float:left;
2445
- border-left:1px solid #fff;
2446
- display:none;
2447
  }
2448
 
2449
  /* text files preview wrapper */
2450
  .elfinder-quicklook-preview-text-wrapper {
2451
- width: 100%;
2452
- height:100%;
2453
- background:#fff;
2454
- color:#222;
2455
- overflow:auto;
2456
- -webkit-overflow-scrolling: touch;
2457
  }
2458
 
2459
  /* archive files preview wrapper */
2460
  .elfinder-quicklook-preview-archive-wrapper {
2461
- width: 100%;
2462
- height:100%;
2463
- background:#fff;
2464
- color:#222;
2465
- font-size: 1.5ex;
2466
- overflow:auto;
2467
- -webkit-overflow-scrolling: touch
2468
  }
2469
 
2470
  /* archive files preview header */
2471
  .elfinder-quicklook-preview-archive-wrapper strong {
2472
- padding: 0 5px;
2473
  }
2474
 
2475
  /* text preview */
2476
- pre.elfinder-quicklook-preview-text {
2477
- width: auto;
2478
- height: auto;
2479
- margin:0;
2480
- padding:3px 9px;
2481
- border: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2482
  }
2483
 
2484
  /* html/pdf preview */
2485
  .elfinder-quicklook-preview-html,
2486
  .elfinder-quicklook-preview-pdf,
2487
  .elfinder-quicklook-preview-iframe {
2488
- width:100%;
2489
- height:100%;
2490
- background:#fff;
2491
- margin:0;
2492
- border: none;
2493
- display: block;
2494
  }
2495
 
2496
  /* swf preview container */
2497
  .elfinder-quicklook-preview-flash {
2498
- width:100%;
2499
- height:100%;
2500
  }
2501
 
2502
  /* audio preview container */
2503
  .elfinder-quicklook-preview-audio {
2504
- width:100%;
2505
- position:absolute;
2506
- bottom:0;
2507
- left:0;
2508
  }
2509
 
2510
  /* audio preview using embed */
2511
  embed.elfinder-quicklook-preview-audio {
2512
- height:30px;
2513
- background:transparent;
2514
  }
2515
 
2516
  /* video preview container */
2517
  .elfinder-quicklook-preview-video {
2518
- width:100%;
2519
- height:100%;
2520
  }
2521
 
2522
  /* allow user select */
2523
  .elfinder .elfinder-quicklook .elfinder-quicklook-info *,
2524
  .elfinder .elfinder-quicklook .elfinder-quicklook-preview * {
2525
- -webkit-user-select: auto;
2526
- -moz-user-select: text;
2527
- -khtml-user-select: text;
2528
- user-select: text;
2529
  }
2530
 
2531
  /* File: /css/statusbar.css */
@@ -2533,96 +4337,156 @@ embed.elfinder-quicklook-preview-audio {
2533
  /* STATUSBAR STYLES */
2534
  /******************************************************************/
2535
 
2536
-
2537
  /* statusbar container */
2538
- .elfinder-statusbar {
2539
- text-align:center;
2540
- font-weight:normal;
2541
- padding:.2em .5em;
2542
-
2543
- border-right:0 solid transparent;
2544
- border-bottom:0 solid transparent;
2545
- border-left:0 solid transparent;
 
 
 
 
 
 
 
2546
  }
2547
 
2548
  .elfinder-statusbar span {
2549
- cursor: pointer;
2550
- /*display: inline-block;*/
2551
- vertical-align: bottom;
2552
- overflow: hidden;
2553
- text-overflow: ellipsis;
2554
- -o-text-overflow: ellipsis;
2555
- text-overflow: "..";
2556
- -o-text-overflow: "..";
 
 
2557
  }
2558
- .elfinder-statusbar span.ui-state-hover,
2559
- .elfinder-statusbar span.ui-state-active { border: none; }
2560
- .elfinder-statusbar span.elfinder-path-cwd { cursor: default; }
2561
 
 
 
 
 
2562
 
 
 
 
2563
 
2564
  /* path in statusbar */
2565
  .elfinder-path {
2566
- max-width:30%;
2567
- white-space:nowrap;
2568
- overflow:hidden;
2569
- text-overflow:ellipsis;
2570
- -o-text-overflow:ellipsis;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2571
  }
2572
- .elfinder-ltr .elfinder-path { float:left; }
2573
- .elfinder-rtl .elfinder-path { float:right; }
2574
 
2575
  /* path in workzone (case of swipe to navbar close) */
2576
  .elfinder-workzone-path {
2577
- position: relative;
2578
  }
 
2579
  .elfinder-workzone-path .elfinder-path {
2580
- position: relative;
2581
- font-size: .75em;
2582
- font-weight: normal;
2583
- float: none;
2584
- max-width: none;
2585
- overflow-x: scroll;
2586
- text-overflow: initial;
2587
- -o-text-overflow: initial;
 
 
 
 
 
 
2588
  }
 
2589
  .elfinder-ltr .elfinder-workzone-path .elfinder-path {
2590
- margin-left: 24px;
2591
  }
 
2592
  .elfinder-rtl .elfinder-workzone-path .elfinder-path {
2593
- margin-right: 24px;
2594
  }
 
2595
  .elfinder-workzone-path .elfinder-path span {
2596
- display: inline-block;
2597
- padding: 5px 3px;
2598
  }
 
2599
  .elfinder-workzone-path .elfinder-path span.elfinder-path-cwd {
2600
- font-weight: bold;
2601
  }
 
2602
  .elfinder-workzone-path .elfinder-path span.ui-state-hover,
2603
- .elfinder-workzone-path .elfinder-path span.ui-state-active { border: none; }
 
 
2604
 
2605
  .elfinder-workzone-path .elfinder-path-roots {
2606
- position: absolute;
2607
- top: 0;
2608
- width: 24px;
2609
- height: 20px;
2610
- padding: 2px;
2611
  border: none;
2612
  overflow: hidden;
2613
  }
 
2614
  .elfinder-ltr .elfinder-workzone-path .elfinder-path-roots {
2615
- left: 0;
2616
  }
 
2617
  .elfinder-rtl .elfinder-workzone-path .elfinder-path-roots {
2618
- right: 0;
2619
  }
 
2620
  /* total/selected size in statusbar */
2621
- .elfinder-stat-size { white-space:nowrap; }
2622
- .elfinder-ltr .elfinder-stat-size { float:right; }
2623
- .elfinder-rtl .elfinder-stat-size { float:left; }
 
 
 
 
 
 
 
 
 
 
 
 
 
2624
 
2625
- .elfinder-stat-selected { white-space:nowrap; overflow:hidden; }
 
 
 
 
 
 
2626
 
2627
  /* File: /css/toast.css */
2628
  /*
@@ -2637,68 +4501,90 @@ embed.elfinder-quicklook-preview-audio {
2637
  *
2638
  * Project: https://github.com/CodeSeven/toastr
2639
  */
2640
-
2641
  .elfinder .elfinder-toast {
2642
- position: absolute;
2643
- top: 12px;
2644
- right: 12px;
2645
- max-width: 90%;
2646
- cursor: default;
2647
  }
2648
 
2649
  .elfinder .elfinder-toast > div {
2650
- position: relative;
2651
- pointer-events: auto;
2652
- overflow: hidden;
2653
- margin: 0 0 6px;
2654
- padding: 8px 16px 8px 50px;
2655
- -moz-border-radius: 3px 3px 3px 3px;
2656
- -webkit-border-radius: 3px 3px 3px 3px;
2657
- border-radius: 3px 3px 3px 3px;
2658
- background-position: 15px center;
2659
- background-repeat: no-repeat;
2660
- -moz-box-shadow: 0 0 12px #999999;
2661
- -webkit-box-shadow: 0 0 12px #999999;
2662
- box-shadow: 0 0 12px #999999;
2663
- color: #FFFFFF;
2664
- opacity: 0.9;
2665
- filter: alpha(opacity=90);
2666
- background-color: #030303;
2667
- text-align: center;
2668
  }
2669
 
2670
  .elfinder .elfinder-toast > .toast-info {
2671
- background-color: #2F96B4;
2672
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
2673
  }
 
2674
  .elfinder .elfinder-toast > .toast-error {
2675
- background-color: #BD362F;
2676
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
2677
  }
 
2678
  .elfinder .elfinder-toast > .toast-success {
2679
- background-color: #51A351;
2680
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
2681
  }
 
2682
  .elfinder .elfinder-toast > .toast-warning {
2683
- background-color: #F89406;
2684
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
2685
  }
2686
 
2687
-
2688
  .elfinder .elfinder-toast > div button.ui-button {
2689
- background-image: none;
2690
- margin-top: 8px;
2691
- padding: .5em .8em;
2692
  }
2693
 
2694
  .elfinder .elfinder-toast > .toast-success button.ui-button {
2695
- background-color: green;
2696
- color: #FFF;
2697
  }
2698
 
2699
  .elfinder .elfinder-toast > .toast-success button.ui-button.ui-state-hover {
2700
- background-color: #add6ad;
2701
- color: #254b25;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2702
  }
2703
 
2704
  /* File: /css/toolbar.css */
@@ -2706,309 +4592,609 @@ embed.elfinder-quicklook-preview-audio {
2706
  /* TOOLBAR STYLES */
2707
  /*********************************************/
2708
  /* toolbar container */
2709
- .elfinder-toolbar {
2710
- padding:4px 0 3px 0;
2711
- border-left:0 solid transparent;
2712
- border-top:0 solid transparent;
2713
- border-right:0 solid transparent;
 
 
2714
  }
2715
 
2716
  /* container for button's group */
2717
  .elfinder-buttonset {
2718
- margin: 1px 4px;
2719
- float:left;
2720
- background:transparent;
2721
- padding:0;
2722
- -moz-border-radius: 4px;
2723
- -webkit-border-radius: 4px;
2724
- border-radius: 4px;
2725
  }
2726
 
2727
  /*.elfinder-buttonset:first-child { margin:0; }*/
2728
 
2729
  /* button */
2730
  .elfinder .elfinder-button {
2731
- /*width:16px;*/
2732
- height:16px;
2733
- margin:0;
2734
- padding:4px;
2735
- float:left;
2736
- overflow:hidden;
2737
- position:relative;
2738
- border:0 solid;
2739
- -webkit-box-sizing: content-box;
2740
- -moz-box-sizing: content-box;
2741
- box-sizing: content-box;
2742
- line-height: 1;
2743
- cursor: default;
2744
- }
2745
- .elfinder-touch .elfinder-button {
2746
- /*width:20px;*/
2747
- height:20px;
2748
  }
2749
 
2750
- .elfinder .ui-icon-search { cursor:pointer;}
 
 
2751
 
2752
- .elfinder-button:first-child {
2753
- -moz-border-radius-topleft: 4px;
2754
- -webkit-border-top-left-radius: 4px;
2755
- border-top-left-radius: 4px;
2756
- -moz-border-radius-bottomleft: 4px;
2757
- -webkit-border-bottom-left-radius: 4px;
2758
- border-bottom-left-radius: 4px;
2759
  }
2760
 
2761
- .elfinder-button:last-child {
2762
- -moz-border-radius-topright: 4px;
2763
- -webkit-border-top-right-radius: 4px;
2764
- border-top-right-radius: 4px;
2765
- -moz-border-radius-bottomright: 4px;
2766
- -webkit-border-bottom-right-radius: 4px;
2767
- border-bottom-right-radius: 4px;
2768
  }
2769
 
2770
  /* separator between buttons, required for berder between button with ui color */
2771
  .elfinder-toolbar-button-separator {
2772
- float:left;
2773
- padding:0;
2774
- height:24px;
2775
- border-top:0 solid;
2776
- border-right:0 solid;
2777
- border-bottom:0 solid;
2778
- width:0;
 
 
 
 
2779
  }
2780
 
2781
  .elfinder-touch .elfinder-toolbar-button-separator {
2782
- height:20px;
2783
  }
2784
 
2785
  /* change icon opacity^ not button */
2786
- .elfinder .elfinder-button.ui-state-disabled { opacity:1; filter:Alpha(Opacity=100);}
 
 
 
 
2787
  .elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon,
2788
- .elfinder .elfinder-button.ui-state-disabled .elfinder-button-text { opacity:.4; filter:Alpha(Opacity=40);}
 
 
 
2789
 
2790
  /* rtl enviroment */
2791
- .elfinder-rtl .elfinder-buttonset { float:right; }
 
 
2792
 
2793
  /* icon inside button */
2794
  .elfinder-button-icon {
2795
- width:16px;
2796
- height:16px;
2797
- /*display:block;*/
2798
- display:inline-block;
2799
- background:url('../img/toolbar.png') no-repeat;
2800
  }
 
2801
  .elfinder-button-text {
2802
- position: relative;
2803
- display: inline-block;
2804
- top: -4px;
2805
- margin: 0 2px;
2806
- font-size: 12px;
2807
  }
2808
 
2809
  .elfinder-touch .elfinder-button-icon {
2810
- zoom: 1.25;
2811
- -moz-transform-origin: top left;
2812
- -moz-transform: scale(1.25);
 
 
 
2813
  }
 
2814
  .elfinder-touch .elfinder-button-text {
2815
- top: -5px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2816
  }
2817
 
2818
  /* buttons icons */
2819
- .elfinder-button-icon-home { background-position: 0 0; }
2820
- .elfinder-button-icon-back { background-position: 0 -112px; }
2821
- .elfinder-button-icon-forward { background-position: 0 -128px; }
2822
- .elfinder-button-icon-up { background-position: 0 -144px; }
2823
- .elfinder-button-icon-dir { background-position: 0 -16px; }
2824
- .elfinder-button-icon-opendir { background-position: 0 -32px; }
2825
- .elfinder-button-icon-reload { background-position: 0 -160px; }
2826
- .elfinder-button-icon-open { background-position: 0 -176px; }
2827
- .elfinder-button-icon-mkdir { background-position: 0 -192px; }
2828
- .elfinder-button-icon-mkfile { background-position: 0 -208px; }
2829
- .elfinder-button-icon-rm { background-position: 0 -224px; }
2830
- .elfinder-button-icon-copy { background-position: 0 -240px; }
2831
- .elfinder-button-icon-cut { background-position: 0 -256px; }
2832
- .elfinder-button-icon-paste { background-position: 0 -272px; }
2833
- .elfinder-button-icon-getfile { background-position: 0 -288px; }
2834
- .elfinder-button-icon-duplicate { background-position: 0 -304px; }
2835
- .elfinder-button-icon-rename { background-position: 0 -320px; }
2836
- .elfinder-button-icon-edit { background-position: 0 -336px; }
2837
- .elfinder-button-icon-quicklook { background-position: 0 -352px; }
2838
- .elfinder-button-icon-upload { background-position: 0 -368px; }
2839
- .elfinder-button-icon-download { background-position: 0 -384px; }
2840
- .elfinder-button-icon-info { background-position: 0 -400px; }
2841
- .elfinder-button-icon-extract { background-position: 0 -416px; }
2842
- .elfinder-button-icon-archive { background-position: 0 -432px; }
2843
- .elfinder-button-icon-view { background-position: 0 -448px; }
2844
- .elfinder-button-icon-view-list { background-position: 0 -464px; }
2845
- .elfinder-button-icon-help { background-position: 0 -480px; }
2846
- .elfinder-button-icon-resize { background-position: 0 -512px; }
2847
- .elfinder-button-icon-link { background-position: 0 -528px; }
2848
- .elfinder-button-icon-search { background-position: 0 -561px; }
2849
- .elfinder-button-icon-sort { background-position: 0 -577px; }
2850
- .elfinder-button-icon-rotate-r { background-position: 0 -625px; }
2851
- .elfinder-button-icon-rotate-l { background-position: 0 -641px; }
2852
- .elfinder-button-icon-netmount { background-position: 0 -688px; }
2853
- .elfinder-button-icon-netunmount { background-position: 0 -96px; }
2854
- .elfinder-button-icon-places { background-position: 0 -704px; }
2855
- .elfinder-button-icon-chmod { background-position: 0 -48px; }
2856
- .elfinder-button-icon-accept { background-position: 0 -736px; }
2857
- .elfinder-button-icon-opendir { background-position: 0 -32px; }
2858
- .elfinder-button-icon-menu { background-position: 0 -752px; }
2859
- .elfinder-button-icon-colwidth { background-position: 0 -768px; }
2860
- .elfinder-button-icon-fullscreen { background-position: 0 -784px; }
2861
- .elfinder-button-icon-unfullscreen{ background-position: 0 -800px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2862
 
2863
  /* button with dropdown menu*/
2864
- .elfinder .elfinder-menubutton { overflow:visible; }
 
 
2865
 
2866
  /* button with spinner icon */
2867
- .elfinder-button-icon-spinner { background: url("../img/spinner-mini.gif") center center no-repeat; }
 
 
2868
 
2869
  /* menu */
2870
  .elfinder-button-menu {
2871
- position:absolute;
2872
- left:0;
2873
- top:25px;
2874
- padding:3px 0;
2875
  }
2876
 
2877
  .elfinder-touch .elfinder-button-menu {
2878
- top:35px;
2879
  }
2880
 
2881
  /* menu item */
2882
  .elfinder-button-menu-item {
2883
- white-space:nowrap;
2884
- cursor:default;
2885
- padding:5px 19px;
2886
- position:relative;
2887
  }
 
2888
  .elfinder-touch .elfinder-button-menu-item {
2889
- padding: 12px 19px
2890
  }
2891
 
2892
  /* fix hover ui class */
2893
- .elfinder-button-menu .ui-state-hover { border:0 solid; }
 
 
2894
 
2895
- .elfinder-button-menu-item-separated { border-top:1px solid #ccc; }
 
 
2896
 
2897
  .elfinder-button-menu-item .ui-icon {
2898
- width:16px;
2899
- height:16px;
2900
- position:absolute;
2901
- left:2px;
2902
- top:50%;
2903
- margin-top:-8px;
2904
- display:none;
 
 
 
 
2905
  }
2906
 
2907
- .elfinder-button-menu-item-selected .ui-icon { display:block; }
2908
- .elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s { display:none; }
2909
- .elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n { display:none; }
 
 
 
 
2910
 
2911
  /* hack for upload button */
2912
  .elfinder-button form {
2913
- position:absolute;
2914
- top:0;
2915
- right:0;
2916
- opacity: 0; filter:Alpha(Opacity=0);
2917
- cursor: pointer;
 
2918
  }
2919
 
2920
- .elfinder .elfinder-button form input { background:transparent; cursor: default;}
 
 
 
2921
 
2922
  /* search "button" */
2923
  .elfinder .elfinder-button-search {
2924
- border:0 solid;
2925
- background:transparent;
2926
- padding:0;
2927
- margin: 1px 4px;
2928
- height: auto;
2929
- min-height: 26px;
2930
- float:right;
2931
- width:202px;
2932
- overflow: visible;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2933
  }
2934
 
2935
- .elfinder .elfinder-button-search .elfinder-button-menu {
2936
- font-size: 8pt;
2937
- text-align: center;
2938
- width: 100%;
2939
- overflow: hidden;
2940
  }
2941
 
2942
- .elfinder .elfinder-button-search .elfinder-button-menu div {
2943
- margin-left: auto;
2944
- margin-right: auto;
2945
- margin-bottom: 5px;
 
 
2946
  }
2947
 
2948
- .elfinder .elfinder-button-search .elfinder-button-menu div .ui-state-hover {
2949
- border: 1px solid;
2950
  }
2951
 
2952
  /* ltr/rte enviroment */
2953
- .elfinder-ltr .elfinder-button-search { float:right; margin-right:10px; }
2954
- .elfinder-rtl .elfinder-button-search { float:left; margin-left:10px; }
 
 
 
 
 
 
 
 
 
 
 
2955
 
2956
  /* search text field */
2957
- .elfinder-button-search input {
2958
- width:160px;
2959
- height:22px;
2960
- padding:0 20px;
2961
- line-height: 22px;
2962
- border:0 solid;
2963
- border:1px solid #aaa;
2964
- -moz-border-radius: 12px;
2965
- -webkit-border-radius: 12px;
2966
- border-radius: 12px;
2967
- outline:0px solid;
 
2968
  }
2969
 
2970
  .elfinder-button-search input::-ms-clear {
2971
- display: none;
2972
  }
 
2973
  .elfinder-touch .elfinder-button-search input {
2974
- height:28px;
2975
- line-height: 28px;
2976
  }
2977
- .elfinder-rtl .elfinder-button-search input { direction:rtl; }
2978
 
 
 
 
2979
 
2980
  /* icons */
2981
  .elfinder-button-search .ui-icon {
2982
- position:absolute;
2983
- height:18px;
2984
- top: 50%;
2985
- margin:-8px 4px 0 4px;
2986
- opacity: .6;
2987
- filter:Alpha(Opacity=60);
2988
  }
2989
- .elfinder-button-search .ui-checkboxradio-icon {
2990
- display: none;
 
2991
  }
2992
 
2993
  /* search/close icons */
2994
- .elfinder-ltr .elfinder-button-search .ui-icon-search { left:0;}
2995
- .elfinder-rtl .elfinder-button-search .ui-icon-search { right:0;}
2996
- .elfinder-ltr .elfinder-button-search .ui-icon-close { right:0;}
2997
- .elfinder-rtl .elfinder-button-search .ui-icon-close { left:0;}
 
 
 
 
 
 
 
 
 
 
 
2998
 
2999
  /* toolbar swipe handle */
3000
  .elfinder-toolbar-swipe-handle {
3001
- position: absolute;
3002
- top: 0px;
3003
- left: 0px;
3004
- height: 50px;
3005
- width: 100%;
3006
- pointer-events: none;
3007
- background: linear-gradient(to bottom,
3008
- rgba(221,228,235,1) 0,
3009
- rgba(221,228,235,0.8) 2px,
3010
- rgba(216,223,230,0.3) 5px,
3011
- rgba(0,0,0,0.1) 95%,
3012
- rgba(0,0,0,0) 100%);
3013
  }
3014
 
1
  /*!
2
  * elFinder - file manager for web
3
+ * Version 2.1.46 (2019-02-21)
4
  * http://elfinder.org
5
  *
6
+ * Copyright 2009-2019, Studio 42
7
  * Licensed under a 3-clauses BSD license
8
  */
9
 
13
  /******************************************************************/
14
 
15
  /********************** COMMAND "RESIZE" ****************************/
16
+ .elfinder-resize-container {
17
+ margin-top: .3em;
 
 
 
 
 
 
 
 
 
 
18
  }
19
+
20
+ .elfinder-resize-type {
21
+ float: left;
22
+ margin-bottom: .4em;
23
+ }
24
+
25
+ .elfinder-resize-control {
26
+ float: left;
27
+ }
28
+
29
+ .elfinder-resize-control input[type=number] {
30
+ border: 1px solid #aaa;
31
+ text-align: right;
32
+ width: 4.5em;
33
+ }
34
+
35
+ .elfinder-mobile .elfinder-resize-control input[type=number] {
36
+ width: 3.5em;
37
+ }
38
+
39
+ .elfinder-resize-control input.elfinder-resize-bg {
40
+ text-align: center;
41
+ width: 5em;
42
+ direction: ltr;
43
+ }
44
+
45
+ .elfinder-dialog-resize .elfinder-resize-control-panel {
46
+ margin-top: 10px;
47
+ }
48
+
49
  .elfinder-dialog-resize .elfinder-resize-imgrotate,
50
  .elfinder-dialog-resize .elfinder-resize-pallet {
51
+ cursor: pointer;
52
  }
53
+
54
  .elfinder-dialog-resize .elfinder-resize-picking {
55
+ cursor: crosshair;
56
  }
57
+
58
  .elfinder-dialog-resize .elfinder-resize-grid8 + button {
59
+ padding-top: 2px;
60
+ padding-bottom: 2px;
61
  }
62
+
63
  .elfinder-resize-preview {
64
+ width: 400px;
65
+ height: 400px;
66
+ padding: 10px;
67
+ background: #fff;
68
+ border: 1px solid #aaa;
69
+ float: right;
70
+ position: relative;
71
+ overflow: hidden;
72
+ text-align: left;
73
+ direction: ltr;
74
  }
75
 
76
+ .elfinder-resize-handle {
77
+ position: relative;
78
+ }
79
 
80
  .elfinder-resize-handle-hline,
81
  .elfinder-resize-handle-vline {
82
+ position: absolute;
83
+ background-image: url("../img/crop.gif");
84
  }
85
 
86
  .elfinder-resize-handle-hline {
87
+ width: 100%;
88
+ height: 1px !important;
89
+ background-repeat: repeat-x;
90
  }
91
+
92
  .elfinder-resize-handle-vline {
93
+ width: 1px !important;
94
+ height: 100%;
95
+ background-repeat: repeat-y;
96
+ }
97
+
98
+ .elfinder-resize-handle-hline-top {
99
+ top: 0;
100
+ left: 0;
101
+ }
102
+
103
+ .elfinder-resize-handle-hline-bottom {
104
+ bottom: 0;
105
+ left: 0;
106
+ }
107
+
108
+ .elfinder-resize-handle-vline-left {
109
+ top: 0;
110
+ left: 0;
111
  }
112
 
113
+ .elfinder-resize-handle-vline-right {
114
+ top: 0;
115
+ right: 0;
116
+ }
117
 
118
  .elfinder-resize-handle-point {
119
+ position: absolute;
120
+ width: 8px;
121
+ height: 8px;
122
+ border: 1px solid #777;
123
+ background: transparent;
124
  }
125
 
126
+ .elfinder-resize-handle-point-n {
127
+ top: 0;
128
+ left: 50%;
129
+ margin-top: -5px;
130
+ margin-left: -5px;
131
  }
132
+
133
  .elfinder-resize-handle-point-ne {
134
+ top: 0;
135
+ right: 0;
136
+ margin-top: -5px;
137
+ margin-right: -5px;
138
+ }
139
+
140
+ .elfinder-resize-handle-point-e {
141
+ top: 50%;
142
+ right: 0;
143
+ margin-top: -5px;
144
+ margin-right: -5px;
145
+ }
146
+
147
+ .elfinder-resize-handle-point-se {
148
+ bottom: 0;
149
+ right: 0;
150
+ margin-bottom: -5px;
151
+ margin-right: -5px;
152
+ }
153
+
154
+ .elfinder-resize-handle-point-s {
155
+ bottom: 0;
156
+ left: 50%;
157
+ margin-bottom: -5px;
158
+ margin-left: -5px;
159
  }
160
+
161
  .elfinder-resize-handle-point-sw {
162
+ bottom: 0;
163
+ left: 0;
164
+ margin-bottom: -5px;
165
+ margin-left: -5px;
166
  }
167
+
168
+ .elfinder-resize-handle-point-w {
169
+ top: 50%;
170
+ left: 0;
171
+ margin-top: -5px;
172
+ margin-left: -5px;
173
  }
174
+
175
  .elfinder-resize-handle-point-nw {
176
+ top: 0;
177
+ left: 0;
178
+ margin-top: -5px;
179
+ margin-left: -5px;
180
+ }
181
+
182
+ .elfinder-dialog.elfinder-dialog-resize .ui-resizable-e {
183
+ width: 10px;
184
+ height: 100%;
185
+ }
186
+
187
+ .elfinder-dialog.elfinder-dialog-resize .ui-resizable-s {
188
+ width: 100%;
189
+ height: 10px;
190
+ }
191
+
192
+ .elfinder-resize-loading {
193
+ position: absolute;
194
+ width: 200px;
195
+ height: 30px;
196
+ top: 50%;
197
+ margin-top: -25px;
198
+ left: 50%;
199
+ margin-left: -100px;
200
+ text-align: center;
201
+ background: url(../img/progress.gif) center bottom repeat-x;
202
+ }
203
+
204
+ .elfinder-resize-row {
205
+ margin-bottom: 9px;
206
+ position: relative;
207
+ }
208
+
209
+ .elfinder-resize-label {
210
+ float: left;
211
+ width: 80px;
212
+ padding-top: 3px;
213
+ }
214
+
215
+ .elfinder-resize-checkbox-label {
216
+ border: 1px solid transparent;
217
+ }
218
+
219
+ .elfinder-dialog-resize .elfinder-resize-whctrls {
220
+ margin: -20px 5px 0 5px;
221
+ }
222
+
223
+ .elfinder-ltr .elfinder-dialog-resize .elfinder-resize-whctrls {
224
+ float: right;
225
+ }
226
+
227
+ .elfinder-rtl .elfinder-dialog-resize .elfinder-resize-whctrls {
228
+ float: left;
229
+ }
230
+
231
+ .elfinder-dialog-resize .ui-resizable-e,
232
+ .elfinder-dialog-resize .ui-resizable-w {
233
+ height: 100%;
234
+ width: 10px;
235
+ }
236
+
237
+ .elfinder-dialog-resize .ui-resizable-s,
238
+ .elfinder-dialog-resize .ui-resizable-n {
239
+ width: 100%;
240
+ height: 10px;
241
+ }
242
+
243
+ .elfinder-dialog-resize .ui-resizable-e {
244
+ margin-right: -7px;
245
+ }
246
+
247
+ .elfinder-dialog-resize .ui-resizable-w {
248
+ margin-left: -7px;
249
+ }
250
+
251
+ .elfinder-dialog-resize .ui-resizable-s {
252
+ margin-bottom: -7px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  }
254
+
255
+ .elfinder-dialog-resize .ui-resizable-n {
256
+ margin-top: -7px;
257
+ }
258
+
259
+ .elfinder-dialog-resize .ui-resizable-se,
260
+ .elfinder-dialog-resize .ui-resizable-sw,
261
+ .elfinder-dialog-resize .ui-resizable-ne,
262
+ .elfinder-dialog-resize .ui-resizable-nw {
263
+ width: 10px;
264
+ height: 10px;
265
+ }
266
+
267
+ .elfinder-dialog-resize .ui-resizable-se {
268
+ background: transparent;
269
+ bottom: 0;
270
+ right: 0;
271
+ margin-right: -7px;
272
+ margin-bottom: -7px;
273
+ }
274
+
275
+ .elfinder-dialog-resize .ui-resizable-sw {
276
+ margin-left: -7px;
277
+ margin-bottom: -7px;
278
+ }
279
+
280
+ .elfinder-dialog-resize .ui-resizable-ne {
281
+ margin-right: -7px;
282
+ margin-top: -7px;
283
+ }
284
+
285
+ .elfinder-dialog-resize .ui-resizable-nw {
286
+ margin-left: -7px;
287
+ margin-top: -7px;
288
+ }
289
+
290
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-s,
291
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-n {
292
+ height: 20px;
293
+ }
294
+
295
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-e,
296
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-w {
297
+ width: 20px;
298
+ }
299
+
300
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-se,
301
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-sw,
302
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-ne,
303
+ .elfinder-touch .elfinder-dialog-resize .ui-resizable-nw {
304
+ width: 30px;
305
+ height: 30px;
306
+ }
307
+
308
+ .elfinder-touch .elfinder-dialog-resize .elfinder-resize-preview .ui-resizable-se {
309
+ width: 30px;
310
+ height: 30px;
311
+ margin: 0;
312
+ }
313
+
314
+ .elfinder-dialog-resize .ui-icon-grip-solid-vertical {
315
+ position: absolute;
316
+ top: 50%;
317
+ right: 0;
318
+ margin-top: -8px;
319
+ margin-right: -11px;
320
+ }
321
+
322
  .elfinder-dialog-resize .ui-icon-grip-solid-horizontal {
323
+ position: absolute;
324
+ left: 50%;
325
+ bottom: 0;
326
+ margin-left: -8px;
327
+ margin-bottom: -11px;;
328
  }
329
 
330
  .elfinder-dialog-resize .elfinder-resize-row .ui-buttonset {
331
+ float: right;
332
  }
333
 
334
  .elfinder-dialog-resize .elfinder-resize-degree input,
335
+ .elfinder-dialog-resize input.elfinder-resize-quality {
336
+ width: 3.5em;
337
+ }
338
+
339
+ .elfinder-mobile .elfinder-dialog-resize .elfinder-resize-degree input,
340
+ .elfinder-mobile .elfinder-dialog-resize input.elfinder-resize-quality {
341
+ width: 2.5em;
342
  }
343
+
344
  .elfinder-dialog-resize .elfinder-resize-degree button.ui-button {
345
+ padding: 6px 8px;
346
  }
347
+
348
  .elfinder-dialog-resize button.ui-button span {
349
+ padding: 0;
350
+ }
351
+
352
+ .elfinder-dialog-resize .elfinder-resize-jpgsize {
353
+ font-size: 90%;
354
  }
355
 
356
+ .ui-widget-content .elfinder-resize-container .elfinder-resize-rotate-slider {
357
+ width: 195px;
358
+ margin: 10px 7px;
359
+ background-color: #fafafa;
360
  }
361
 
362
  .elfinder-dialog-resize .elfinder-resize-type span.ui-checkboxradio-icon {
363
+ display: none;
364
+ }
365
+
366
+ .elfinder-resize-preset-container {
367
+ box-sizing: border-box;
368
+ border-radius: 5px;
369
  }
370
 
371
  /********************** COMMAND "EDIT" ****************************/
372
  /* edit text file textarea */
373
  .elfinder-file-edit {
374
+ width: 100%;
375
+ height: 100%;
376
+ margin: 0;
377
+ padding: 2px;
378
+ border: 1px solid #ccc;
379
+ box-sizing: border-box;
380
+ resize: none;
381
  }
382
+
383
  .elfinder-touch .elfinder-file-edit {
384
+ font-size: 16px;
385
  }
386
+
387
+ /* edit area */
388
+ .elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor {
389
+ background-color: #fff;
390
+ }
391
+
392
+ .elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor {
393
+ width: 100%;
394
+ height: 300px;
395
+ max-height: 100%;
396
+ text-align: center;
397
+ }
398
+
399
+ .elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor * {
400
+ -webkit-user-select: none;
401
+ -moz-user-select: none;
402
+ -khtml-user-select: none;
403
+ user-select: none;
404
+ }
405
+
406
+ .elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-main {
407
+ top: 0;
408
+ }
409
+
410
+ .elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-header {
411
+ display: none;
412
+ }
413
+
414
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-crop .tui-image-editor-wrap,
415
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-flip .tui-image-editor-wrap,
416
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-rotate .tui-image-editor-wrap,
417
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-draw .tui-image-editor-wrap,
418
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-shape .tui-image-editor-wrap,
419
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-icon .tui-image-editor-wrap,
420
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-text .tui-image-editor-wrap,
421
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-mask .tui-image-editor-wrap,
422
+ .elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-filter .tui-image-editor-wrap {
423
+ height: calc(100% - 150px);
424
+ }
425
+
426
  /* bottom margen for softkeyboard on fullscreen mode */
427
  .elfinder-touch.elfinder-fullscreen-native textarea.elfinder-file-edit {
428
+ padding-bottom: 20em;
429
+ margin-bottom: -20em;
430
+ }
431
+
432
+ .elfinder-dialog-edit .ui-dialog-buttonpane .elfinder-dialog-confirm-encoding {
433
+ font-size: 12px;
434
+ }
435
+
436
+ .ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras {
437
+ margin: 0 1em 0 .2em;
438
+ float: left;
439
+ }
440
+
441
+ .ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras-quality {
442
+ padding-top: 6px;
443
+ }
444
+
445
+ .ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras select {
446
+ font-size: 12px;
447
+ margin-top: 8px;
448
+ }
449
+
450
+ .elfinder-dialog-edit .ui-dialog-buttonpane .ui-icon {
451
+ cursor: pointer;
452
+ }
453
+
454
+ .elfinder-edit-spinner {
455
+ position: absolute;
456
+ top: 50%;
457
+ text-align: center;
458
+ width: 100%;
459
+ font-size: 16pt;
460
+ }
461
+
462
+ .elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner,
463
+ .elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner-text {
464
+ float: none;
465
  }
466
 
467
+ .elfinder-dialog-edit .elfinder-toast > div {
468
+ width: 280px;
469
+ }
470
+
471
+ .elfinder-edit-onlineconvert-button {
472
+ display: inline-block;
473
+ width: 180px;
474
+ min-height: 30px;
475
+ vertical-align: top;
476
+ }
477
+ .elfinder-edit-onlineconvert-button button,
478
+ .elfinder-edit-onlineconvert-bottom-btn button {
479
+ cursor: pointer;
480
+ }
481
+ .elfinder-edit-onlineconvert-bottom-btn button.elfinder-button-ios-multiline {
482
+ -webkit-appearance: none;
483
+ border-radius: 16px;
484
+ color: #000;
485
+ text-align: center;
486
+ padding: 8px;
487
+ background-color: #eee;
488
+ background-image: -webkit-linear-gradient(top, hsl(0,0%,98%) 0%,hsl(0,0%,77%) 100%);
489
+ background-image: linear-gradient(to bottom, hsl(0,0%,98%) 0%,hsl(0,0%,77%) 100%);
490
+ }
491
+ .elfinder-edit-onlineconvert-button .elfinder-button-icon {
492
+ margin: 0 10px;
493
+ vertical-align: middle;
494
+ cursor: pointer;
495
+ }
496
+ .elfinder-edit-onlineconvert-bottom-btn {
497
+ text-align: center;
498
+ margin: 10px 0 0;
499
+ }
500
+
501
+ .elfinder-edit-onlineconvert-link {
502
+ margin-top: 1em;
503
+ text-align: center;
504
+ }
505
+ .elfinder-edit-onlineconvert-link .elfinder-button-icon {
506
+ background-image: url("../img/editor-icons.png");
507
+ background-repeat: no-repeat;
508
+ background-position: 0 -144px;
509
+ margin-bottom: -3px;
510
+ }
511
+ .elfinder-edit-onlineconvert-link a {
512
+ text-decoration: none;
513
+ }
514
 
515
  /********************** COMMAND "SORT" ****************************/
516
  /* for list table header sort triangle icon */
517
  div.elfinder-cwd-wrapper-list tr.ui-state-default td {
518
+ position: relative;
519
  }
520
+
521
  div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
522
+ position: absolute;
523
+ top: 4px;
524
+ left: 0;
525
+ right: 0;
526
+ margin: auto 0px auto auto;
527
  }
528
+
529
  .elfinder-touch div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
530
+ top: 7px;
531
  }
532
+
533
  .elfinder-rtl div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon {
534
+ margin: auto auto auto 0px;
535
  }
536
+
537
  /********************** COMMAND "HELP" ****************************/
538
  /* help dialog */
539
+ .elfinder-help {
540
+ margin-bottom: .5em;
541
+ -webkit-overflow-scrolling: touch;
542
+ }
543
 
544
  /* fix tabs */
545
+ .elfinder-help .ui-tabs-panel {
546
+ padding: .5em;
547
+ overflow: auto;
548
+ padding: 10px;
549
+ }
550
+
551
+ .elfinder-dialog .ui-tabs .ui-tabs-nav li {
552
+ overflow: hidden;
553
+ }
554
+
555
+ .elfinder-dialog .ui-tabs .ui-tabs-nav li a {
556
+ padding: .2em .8em;
557
+ display: inline-block;
558
+ }
559
+
560
+ .elfinder-touch .elfinder-dialog .ui-tabs .ui-tabs-nav li a {
561
+ padding: .5em .5em;
562
+ }
563
+
564
+ .elfinder-dialog .ui-tabs-active a {
565
+ background: inherit;
566
+ }
567
 
568
  .elfinder-help-shortcuts {
569
+ height: auto;
570
+ padding: 10px;
571
+ margin: 0;
572
+ box-sizing: border-box;
573
+ }
574
+
575
+ .elfinder-help-shortcut {
576
+ white-space: nowrap;
577
+ clear: both;
578
  }
 
579
 
580
+ .elfinder-help-shortcut-pattern {
581
+ float: left;
582
+ width: 160px;
583
+ }
584
 
585
  .elfinder-help-logo {
586
+ width: 100px;
587
+ height: 96px;
588
+ float: left;
589
+ margin-right: 1em;
590
+ background: url('../img/logo.png') center center no-repeat;
591
  }
592
 
593
+ .elfinder-help h3 {
594
+ font-size: 1.5em;
595
+ margin: .2em 0 .3em 0;
596
+ }
597
+
598
+ .elfinder-help-separator {
599
+ clear: both;
600
+ padding: .5em;
601
+ }
602
+
603
+ .elfinder-help-link {
604
+ display: inline-block;
605
+ margin-right: 12px;
606
+ padding: 2px 0;
607
+ white-space: nowrap;
608
+ }
609
 
610
+ .elfinder-rtl .elfinder-help-link {
611
+ margin-right: 0;
612
+ margin-left: 12px;
613
+ }
614
 
615
+ .elfinder-help .ui-priority-secondary {
616
+ font-size: .9em;
617
+ }
618
 
619
+ .elfinder-help .ui-priority-primary {
620
+ margin-bottom: 7px;
621
+ }
622
 
623
+ .elfinder-help-team {
624
+ clear: both;
625
+ text-align: right;
626
+ border-bottom: 1px solid #ccc;
627
+ margin: .5em 0;
628
+ font-size: .9em;
629
+ }
630
 
631
+ .elfinder-help-team div {
632
+ float: left;
 
 
 
 
633
  }
634
 
635
+ .elfinder-help-license {
636
+ font-size: .9em;
637
+ }
638
 
639
  .elfinder-help-disabled {
640
+ font-weight: bold;
641
+ text-align: center;
642
+ margin: 90px 0;
643
  }
644
 
645
  .elfinder-help .elfinder-dont-panic {
646
+ display: block;
647
+ border: 1px solid transparent;
648
+ width: 200px;
649
+ height: 200px;
650
+ margin: 30px auto;
651
+ text-decoration: none;
652
+ text-align: center;
653
+ position: relative;
654
+ background: #d90004;
655
+ -moz-box-shadow: 5px 5px 9px #111;
656
+ -webkit-box-shadow: 5px 5px 9px #111;
657
+ box-shadow: 5px 5px 9px #111;
658
+ background: -moz-radial-gradient(80px 80px, circle farthest-corner, #d90004 35%, #960004 100%);
659
+ background: -webkit-gradient(radial, 80 80, 60, 80 80, 120, from(#d90004), to(#960004));
660
+ -moz-border-radius: 100px;
661
+ -webkit-border-radius: 100px;
662
+ border-radius: 100px;
663
+ outline: none;
664
  }
665
 
666
  .elfinder-help .elfinder-dont-panic span {
667
+ font-size: 3em;
668
+ font-weight: bold;
669
+ text-align: center;
670
+ color: #fff;
671
+ position: absolute;
672
+ left: 0;
673
+ top: 45px;
674
+ }
675
+
676
+ ul.elfinder-help-integrations ul {
677
+ margin-bottom: 1em;
678
+ padding: 0;
679
+ margin: 0 1em 1em;
680
+ }
681
+
682
+ ul.elfinder-help-integrations a {
683
+ text-decoration: none;
684
+ }
685
+
686
+ ul.elfinder-help-integrations a:hover {
687
+ text-decoration: underline;
688
  }
689
 
690
  .elfinder-help-debug {
691
+ height: 100%;
692
+ padding: 0;
693
+ margin: 0;
694
+ overflow: none;
695
+ border: none;
696
  }
697
 
698
  .elfinder-help-debug .ui-tabs-panel {
699
+ padding: 0;
700
+ margin: 0;
701
+ overflow: auto;
 
702
  }
703
 
704
  .elfinder-help-debug fieldset {
705
+ margin-bottom: 10px;
706
+ border-color: #778899;
707
+ border-radius: 10px;
708
  }
709
 
710
  .elfinder-help-debug legend {
711
+ font-size: 1.2em;
712
+ font-weight: bold;
713
+ color: #2e8b57;
714
  }
715
 
716
  .elfinder-help-debug dl {
717
+ margin: 0;
718
  }
719
 
720
  .elfinder-help-debug dt {
721
+ color: #778899;
722
  }
723
 
724
  .elfinder-help-debug dt:before {
725
+ content: "[";
726
  }
727
+
728
  .elfinder-help-debug dt:after {
729
+ content: "]";
730
  }
731
 
732
  .elfinder-help-debug dd {
733
+ margin-left: 1em;
734
  }
735
 
736
  .elfinder-help-debug dd span {
737
+ /*font-size: 1.2em;*/
738
+ }
739
+
740
+ /********************** COMMAND "PREFERENCE" ****************************/
741
+ .elfinder-dialog .elfinder-preference .ui-tabs-nav {
742
+ margin-bottom: 1px;
743
+ height: auto;
744
+ }
745
+
746
+ /* fix tabs */
747
+ .elfinder-preference .ui-tabs-panel {
748
+ padding: 10px 10px 0;
749
+ overflow: auto;
750
+ box-sizing: border-box;
751
+ -webkit-overflow-scrolling: touch;
752
+ }
753
+
754
+ .elfinder-preference a.ui-state-hover,
755
+ .elfinder-preference label.ui-state-hover {
756
+ border: none;
757
+ }
758
+
759
+ .elfinder-preference dl {
760
+ width: 100%;
761
+ display: inline-block;
762
+ margin: .5em 0;
763
+ }
764
+
765
+ .elfinder-preference dt {
766
+ display: block;
767
+ width: 200px;
768
+ clear: left;
769
+ float: left;
770
+ max-width: 50%;
771
+ }
772
+
773
+ .elfinder-rtl .elfinder-preference dt {
774
+ clear: right;
775
+ float: right;
776
+ }
777
+
778
+ .elfinder-preference dd {
779
+ margin-bottom: 1em;
780
+ }
781
+
782
+ .elfinder-preference dt label {
783
+ cursor: pointer;
784
+ }
785
+
786
+ .elfinder-preference dd label,
787
+ .elfinder-preference dd input[type=checkbox] {
788
+ white-space: nowrap;
789
+ display: inline-block;
790
+ cursor: pointer;
791
+ }
792
+
793
+ .elfinder-preference dt.elfinder-preference-checkboxes {
794
+ width: 100%;
795
+ max-width: none;
796
+ }
797
+
798
+ .elfinder-preference dd.elfinder-preference-checkboxes {
799
+ padding-top: 3ex;
800
+ }
801
+
802
+ .elfinder-preference select {
803
+ max-width: 100%;
804
+ }
805
+
806
+ .elfinder-preference dd.elfinder-preference-iconSize .ui-slider {
807
+ width: 50%;
808
+ max-width: 100px;
809
+ display: inline-block;
810
+ margin: 0 10px;
811
+ }
812
+
813
+ .elfinder-preference button {
814
+ margin: 0 16px;
815
+ }
816
+
817
+ .elfinder-preference button + button {
818
+ margin: 0 -10px;
819
+ }
820
+
821
+ .elfinder-preference .elfinder-preference-taball .elfinder-reference-hide-taball {
822
+ display: none;
823
+ }
824
+
825
+ .elfinder-preference-theme fieldset {
826
+ margin-bottom: 10px;
827
+ }
828
+
829
+ .elfinder-preference-theme legend a {
830
+ font-size: 1.8em;
831
+ text-decoration: none;
832
+ cursor: pointer;
833
+ }
834
+
835
+ .elfinder-preference-theme dt {
836
+ width: 20%;
837
+ word-break: break-all;
838
+ }
839
+
840
+ .elfinder-preference-theme dt:after {
841
+ content: " :";
842
+ }
843
+
844
+ .elfinder-preference-theme dd {
845
+ margin-inline-start: 20%;
846
+ }
847
+
848
+ .elfinder-preference img.elfinder-preference-theme-image {
849
+ display: block;
850
+ margin-left: auto;
851
+ margin-right: auto;
852
+ max-width: 90%;
853
+ max-height: 200px;
854
+ cursor: pointer;
855
+ }
856
+
857
+ .elfinder-preference-theme-btn {
858
+ text-align: center;
859
+ }
860
+
861
+ .elfinder-preference-theme button.elfinder-preference-theme-default {
862
+ display: inline;
863
+ margin: 0 10px;
864
+ font-size: 8pt;
865
  }
866
 
867
  /********************** COMMAND "INFO" ****************************/
868
+ .elfinder-rtl .elfinder-info-title .elfinder-cwd-icon:before {
869
+ right: 33px;
870
+ left: auto;
871
  }
872
+
873
+ .elfinder-info-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
874
+ content: none;
875
  }
876
 
877
  /********************** COMMAND "UPLOAD" ****************************/
878
  .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
879
+ position: absolute;
880
+ bottom: 2px;
881
+ width: 16px;
882
+ height: 16px;
883
+ padding: 10px;
884
+ border: none;
885
+ overflow: hidden;
886
+ cursor: pointer;
887
  }
888
+
889
  .elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
890
+ left: 2px;
891
  }
892
+
893
  .elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect {
894
+ right: 2px;
895
+ }
896
+
897
+ /********************** COMMAND "RM" ****************************/
898
+ .elfinder-ltr .elfinder-rm-title .elfinder-cwd-icon:before {
899
+ left: 38px;
900
+ }
901
+
902
+ .elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon:before {
903
+ right: 86px;
904
+ left: auto;
905
+ }
906
+
907
+ .elfinder-rm-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
908
+ content: none;
909
+ }
910
+
911
+ /********************** COMMAND "RENAME" ****************************/
912
+ .elfinder-rename-batch div {
913
+ margin: 5px 8px;
914
+ }
915
+
916
+ .elfinder-rename-batch .elfinder-rename-batch-name input {
917
+ width: 100%;
918
+ font-size: 1.6em;
919
+ }
920
+
921
+ .elfinder-rename-batch-type {
922
+ text-align: center;
923
+ }
924
+
925
+ .elfinder-rename-batch .elfinder-rename-batch-type label {
926
+ margin: 2px;
927
+ font-size: .9em;
928
+ }
929
+
930
+ .elfinder-rename-batch-preview {
931
+ padding: 0 8px;
932
+ font-size: 1.1em;
933
+ min-height: 4ex;
934
  }
935
 
936
+
937
  /* File: /css/common.css */
938
  /*********************************************/
939
  /* COMMON ELFINDER STUFFS */
946
 
947
  /* common container */
948
  .elfinder {
949
+ padding: 0;
950
+ position: relative;
951
+ display: block;
952
+ visibility: visible;
953
+ font-size: 18px;
954
+ font-family: Verdana, Arial, Helvetica, sans-serif;
955
+ }
956
+
957
+ /* prevent auto zoom on iOS */
958
+ .elfinder-ios input,
959
+ .elfinder-ios select,
960
+ .elfinder-ios textarea {
961
+ font-size: 16px !important;
962
+ }
963
+
964
+ /* full screen mode */
965
+ .elfinder.elfinder-fullscreen > .ui-resizable-handle {
966
+ display: none;
967
+ }
968
+
969
+ .elfinder-font-mono {
970
+ line-height: 2ex;
971
  }
972
 
973
  /* in lazy execution status */
974
  .elfinder.elfinder-processing * {
975
+ cursor: progress !important
976
  }
977
+
978
  .elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after {
979
+ position: absolute;
980
+ top: 0;
981
+ width: 100%;
982
+ height: 3px;
983
+ content: '';
984
+ left: 0;
985
+ background-image: url(../img/progress.gif);
986
+ opacity: .6;
987
+ pointer-events: none;
988
  }
989
 
990
  /* for disable select of Touch devices */
991
  .elfinder *:not(input):not(textarea):not(select):not([contenteditable=true]),
992
  .elfinder-contextmenu *:not(input):not(textarea):not(select):not([contenteditable=true]) {
993
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
994
+ /*-webkit-touch-callout:none;*/
995
+ -webkit-user-select: none;
996
+ -moz-user-select: none;
997
+ -khtml-user-select: none;
998
+ user-select: none;
999
  }
1000
 
1001
  .elfinder .overflow-scrolling-touch {
1002
+ -webkit-overflow-scrolling: touch;
1003
  }
1004
 
1005
  /* right to left enviroment */
1006
+ .elfinder-rtl {
1007
+ text-align: right;
1008
+ direction: rtl;
1009
+ }
1010
 
1011
  /* nav and cwd container */
1012
  .elfinder-workzone {
1013
+ padding: 0;
1014
+ position: relative;
1015
+ overflow: hidden;
1016
  }
1017
 
1018
  /* dir/file permissions and symlink markers */
1019
  .elfinder-lock,
1020
  .elfinder-perms,
1021
  .elfinder-symlink {
1022
+ position: absolute;
1023
+ width: 16px;
1024
+ height: 16px;
1025
+ background-image: url(../img/toolbar.png);
1026
+ background-repeat: no-repeat;
1027
+ background-position: 0 -528px;
1028
  }
1029
 
1030
+ .elfinder-symlink {
1031
+ }
1032
 
1033
  /* noaccess */
1034
+ .elfinder-na .elfinder-perms {
1035
+ background-position: 0 -96px;
1036
+ }
1037
 
1038
  /* read only */
1039
+ .elfinder-ro .elfinder-perms {
1040
+ background-position: 0 -64px;
1041
+ }
1042
 
1043
  /* write only */
1044
+ .elfinder-wo .elfinder-perms {
1045
+ background-position: 0 -80px;
1046
+ }
1047
 
1048
  /* volume type group */
1049
+ .elfinder-group .elfinder-perms {
1050
+ background-position: 0 0px;
1051
+ }
1052
 
1053
  /* locked */
1054
  .elfinder-lock {
1055
+ background-position: 0 -656px;
1056
  }
1057
 
1058
  /* drag helper */
1059
  .elfinder-drag-helper {
1060
+ top: 0px;
1061
+ left: 0px;
1062
+ width: 70px;
1063
+ height: 60px;
1064
+ padding: 0 0 0 25px;
1065
+ z-index: 100000;
1066
+ will-change: left, top;
1067
  }
1068
+
1069
  .elfinder-drag-helper.html5-native {
1070
+ position: absolute;
1071
+ top: -1000px;
1072
+ left: -1000px;
1073
  }
1074
 
1075
  /* drag helper status icon (default no-drop) */
1076
  .elfinder-drag-helper-icon-status {
1077
+ position: absolute;
1078
+ width: 16px;
1079
+ height: 16px;
1080
+ left: 42px;
1081
+ top: 60px;
1082
+ background: url('../img/toolbar.png') 0 -96px no-repeat;
1083
+ display: block;
1084
  }
1085
 
1086
  /* show "up-arrow" icon for move item */
1087
  .elfinder-drag-helper-move .elfinder-drag-helper-icon-status {
1088
+ background-position: 0 -720px;
1089
  }
1090
+
1091
  /* show "plus" icon when ctrl/shift pressed */
1092
  .elfinder-drag-helper-plus .elfinder-drag-helper-icon-status {
1093
+ background-position: 0 -544px;
1094
  }
1095
 
1096
  /* files num in drag helper */
1097
  .elfinder-drag-num {
1098
+ display: inline-box;
1099
+ position: absolute;
1100
+ top: 0;
1101
+ left: 0;
1102
+ width: auto;
1103
+ height: 14px;
1104
+ text-align: center;
1105
+ padding: 1px 3px 1px 3px;
1106
+
1107
+ font-weight: bold;
1108
+ color: #fff;
1109
+ background-color: red;
1110
+ -moz-border-radius: 8px;
1111
+ -webkit-border-radius: 8px;
1112
+ border-radius: 8px;
1113
  }
1114
 
1115
  /* icon in drag helper */
1116
+ .elfinder-drag-helper .elfinder-cwd-icon {
1117
+ margin: 0 0 0 -24px;
1118
+ float: left;
1119
+ }
1120
 
1121
  /* transparent overlay */
1122
  .elfinder-overlay {
1123
+ position: absolute;
1124
+ opacity: .2;
1125
+ filter: Alpha(Opacity=20);
1126
  }
1127
 
1128
  /* panels under/below cwd (for search field etc) */
1129
  .elfinder .elfinder-panel {
1130
+ position: relative;
1131
+ background-image: none;
1132
+ padding: 7px 12px;
1133
  }
1134
 
1135
  /* for html5 drag and drop */
1136
  [draggable=true] {
1137
+ -khtml-user-drag: element;
1138
  }
1139
 
1140
+ /* for place holder to content editable elements */
1141
  .elfinder [contentEditable=true]:empty:not(:focus):before {
1142
+ content: attr(data-ph);
1143
  }
1144
 
1145
  /* bottom tray */
1146
  .elfinder div.elfinder-bottomtray {
1147
+ position: fixed;
1148
+ bottom: 0;
1149
+ max-width: 100%;
1150
+ opacity: .8;
1151
  }
1152
+
1153
  .elfinder.elfinder-ltr div.elfinder-bottomtray {
1154
+ left: 0;
1155
  }
1156
+
1157
  .elfinder.elfinder-rtl div.elfinder-bottomtray {
1158
+ right: 0;
1159
+ }
1160
+
1161
+ /* tooltip */
1162
+ .elfinder-ui-tooltip,
1163
+ .elfinder .elfinder-ui-tooltip {
1164
+ font-size: 14px;
1165
+ padding: 2px 4px;
1166
  }
1167
 
1168
  /* File: /css/contextmenu.css */
1169
  /* menu and submenu */
1170
  .elfinder .elfinder-contextmenu,
1171
  .elfinder .elfinder-contextmenu-sub {
1172
+ position: absolute;
1173
+ border: 1px solid #aaa;
1174
+ background: #fff;
1175
+ color: #555;
1176
+ padding: 4px 0;
1177
+ top: 0;
1178
+ left: 0;
1179
  }
1180
 
1181
  /* submenu */
1182
+ .elfinder .elfinder-contextmenu-sub {
1183
+ top: 5px;
1184
+ }
1185
+
1186
  /* submenu in rtl/ltr enviroment */
1187
+ .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub {
1188
+ margin-left: -5px;
1189
+ }
1190
+
1191
+ .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub {
1192
+ margin-right: -5px;
1193
+ }
1194
 
1195
  /* menu item */
1196
  .elfinder .elfinder-contextmenu-header {
1197
+ margin-top: -4px;
1198
+ padding: 0 .5em .2ex;
1199
+ border: none;
1200
+ text-align: center;
1201
  }
1202
+
1203
  .elfinder .elfinder-contextmenu-header span {
1204
+ font-weight: normal;
1205
+ font-size: 0.8em;
1206
+ font-weight: bolder;
1207
  }
1208
+
1209
  .elfinder .elfinder-contextmenu-item {
1210
+ position: relative;
1211
+ display: block;
1212
+ padding: 4px 30px;
1213
+ text-decoration: none;
1214
+ white-space: nowrap;
1215
+ cursor: default;
1216
  }
1217
+
1218
  .elfinder .elfinder-contextmenu-item.ui-state-active {
1219
+ border: none;
1220
  }
1221
+
1222
  .elfinder .elfinder-contextmenu-item .ui-icon {
1223
+ width: 16px;
1224
+ height: 16px;
1225
+ position: absolute;
1226
+ left: auto;
1227
+ right: auto;
1228
+ top: 50%;
1229
+ margin-top: -8px;
1230
  }
1231
+
1232
  .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon {
1233
+ left: 2px;
1234
  }
1235
+
1236
  .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon {
1237
+ right: 2px;
1238
  }
1239
+
1240
  .elfinder-touch .elfinder-contextmenu-item {
1241
+ padding: 12px 38px;
1242
  }
1243
 
1244
  /* root icon of each volume */
1245
+ .elfinder-navbar-root-local.elfinder-contextmenu-icon {
1246
+ background-image: url("../img/volume_icon_local.svg");
1247
+ background-size: contain;
1248
+ }
1249
+
1250
+ .elfinder-navbar-root-trash.elfinder-contextmenu-icon {
1251
+ background-image: url("../img/volume_icon_trash.svg");
1252
+ background-size: contain;
1253
+ }
1254
+
1255
+ .elfinder-navbar-root-ftp.elfinder-contextmenu-icon {
1256
+ background-image: url("../img/volume_icon_ftp.svg");
1257
+ background-size: contain;
1258
+ }
1259
+
1260
+ .elfinder-navbar-root-sql.elfinder-contextmenu-icon {
1261
+ background-image: url("../img/volume_icon_sql.svg");
1262
+ background-size: contain;
1263
+ }
1264
+
1265
+ .elfinder-navbar-root-dropbox.elfinder-contextmenu-icon {
1266
+ background-image: url("../img/volume_icon_dropbox.svg");
1267
+ background-size: contain;
1268
+ }
1269
+
1270
+ .elfinder-navbar-root-googledrive.elfinder-contextmenu-icon {
1271
+ background-image: url("../img/volume_icon_googledrive.svg");
1272
+ background-size: contain;
1273
+ }
1274
+
1275
+ .elfinder-navbar-root-onedrive.elfinder-contextmenu-icon {
1276
+ background-image: url("../img/volume_icon_onedrive.svg");
1277
+ background-size: contain;
1278
+ }
1279
+
1280
+ .elfinder-navbar-root-box.elfinder-contextmenu-icon {
1281
+ background-image: url("../img/volume_icon_box.svg");
1282
+ background-size: contain;
1283
+ }
1284
+
1285
+ .elfinder-navbar-root-zip.elfinder-contextmenu-icon {
1286
+ background-image: url("../img/volume_icon_zip.svg");
1287
+ background-size: contain;
1288
+ }
1289
+
1290
+ .elfinder-navbar-root-network.elfinder-contextmenu-icon {
1291
+ background-image: url("../img/volume_icon_network.svg");
1292
+ background-size: contain;
1293
+ }
1294
 
1295
  /* text in item */
1296
+ .elfinder .elfinder-contextmenu .elfinder-contextmenu-item span {
1297
+ display: block;
1298
+ }
1299
 
1300
  /* submenu item in rtl/ltr enviroment */
1301
+ .elfinder .elfinder-contextmenu-sub .elfinder-contextmenu-item {
1302
+ padding-left: 12px;
1303
+ padding-right: 12px;
1304
+ }
1305
+
1306
+ .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item {
1307
+ text-align: left;
1308
+ }
1309
+
1310
+ .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item {
1311
+ text-align: right;
1312
+ }
1313
+
1314
+ .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
1315
+ padding-left: 28px;
1316
+ }
1317
+
1318
+ .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
1319
+ padding-right: 28px;
1320
+ }
1321
+
1322
+ .elfinder-touch .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
1323
+ padding-left: 36px;
1324
+ }
1325
+
1326
+ .elfinder-touch .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon {
1327
+ padding-right: 36px;
1328
+ }
1329
 
1330
  /* command/submenu icon */
1331
  .elfinder .elfinder-contextmenu-extra-icon,
1332
  .elfinder .elfinder-contextmenu-arrow,
1333
  .elfinder .elfinder-contextmenu-icon {
1334
+ position: absolute;
1335
+ top: 50%;
1336
+ margin-top: -8px;
1337
+ overflow: hidden;
1338
+ }
1339
+
1340
+ .elfinder-touch .elfinder-button-icon.elfinder-contextmenu-icon {
1341
+ transform-origin: center center;
1342
  }
1343
 
1344
  /* command icon in rtl/ltr enviroment */
1345
+ .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon {
1346
+ left: 8px;
1347
+ }
1348
+
1349
+ .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon {
1350
+ right: 8px;
1351
+ }
1352
+
1353
+ .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon {
1354
+ right: 8px;
1355
+ }
1356
+
1357
+ .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon {
1358
+ left: 8px;
1359
+ }
1360
 
1361
  /* arrow icon */
1362
  .elfinder .elfinder-contextmenu-arrow {
1363
+ width: 16px;
1364
+ height: 16px;
1365
+ background: url('../img/arrows-normal.png') 5px 4px no-repeat;
1366
  }
1367
 
1368
  /* arrow icon in rtl/ltr enviroment */
1369
+ .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow {
1370
+ right: 5px;
1371
+ }
1372
+
1373
+ .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow {
1374
+ left: 5px;
1375
+ background-position: 0 -10px;
1376
+ }
1377
 
1378
  /* command extra icon's <a>, <span> tag */
1379
+ .elfinder .elfinder-contextmenu-extra-icon a,
1380
  .elfinder .elfinder-contextmenu-extra-icon span {
1381
+ position: relative;
1382
+ width: 100%;
1383
+ height: 100%;
1384
+ margin: 0;
1385
+ color: transparent !important;
1386
+ text-decoration: none;
1387
+ cursor: pointer;
 
1388
  }
1389
 
1390
  /* disable ui border/bg image on hover */
1391
+ .elfinder .elfinder-contextmenu .ui-state-hover {
1392
+ border: 0 solid;
1393
+ background-image: none;
1394
+ }
1395
 
1396
  /* separator */
1397
  .elfinder .elfinder-contextmenu-separator {
1398
+ height: 0px;
1399
+ border-top: 1px solid #ccc;
1400
+ margin: 0 1px;
1401
  }
1402
 
1403
  /* for CSS style priority to ui-state-disabled - "background-image: none" */
1404
+ .elfinder .elfinder-contextmenu-item .elfinder-button-icon.ui-state-disabled {
1405
+ background-image: url('../img/toolbar.png');
1406
  }
1407
+
1408
  /* File: /css/cwd.css */
1409
  /******************************************************************/
1410
  /* CURRENT DIRECTORY STYLES */
1411
  /******************************************************************/
1412
  /* cwd container to avoid selectable on scrollbar */
1413
  .elfinder-cwd-wrapper {
1414
+ overflow: auto;
1415
+ position: relative;
1416
+ padding: 2px;
1417
+ margin: 0;
1418
  }
1419
 
1420
+ .elfinder-cwd-wrapper-list {
1421
+ padding: 0;
1422
+ }
1423
 
1424
  /* container */
1425
+ .elfinder-cwd {
1426
+ position: absolute;
1427
+ top: 0;
1428
+ cursor: default;
1429
+ padding: 0;
1430
+ margin: 0;
1431
+ -ms-touch-action: auto;
1432
+ touch-action: auto;
1433
+ min-width: 100%;
1434
+ }
1435
+
1436
+ .elfinder-ltr .elfinder-cwd {
1437
+ left: 0;
1438
+ }
1439
+
1440
+ .elfinder-rtl .elfinder-cwd {
1441
+ right: 0;
1442
+ }
1443
+
1444
+ .elfinder-cwd.elfinder-table-header-sticky {
1445
+ position: -webkit-sticky;
1446
+ position: -ms-sticky;
1447
+ position: sticky;
1448
+ top: 0;
1449
+ left: auto;
1450
+ right: auto;
1451
+ width: -webkit-max-content;
1452
+ width: -moz-max-content;
1453
+ width: -ms-max-content;
1454
+ width: max-content;
1455
+ height: 0;
1456
+ overflow: visible;
1457
+ }
1458
+
1459
+ .elfinder-cwd.elfinder-table-header-sticky table {
1460
+ border-top: 2px solid;
1461
+ padding-top: 0;
1462
+ }
1463
+
1464
+ .elfinder-cwd.elfinder-table-header-sticky td {
1465
+ display: inline-block;
1466
+ }
1467
+
1468
+ .elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table {
1469
+ border-top: 2px solid transparent;
1470
+ }
1471
+
1472
+ /* fixed table header container */
1473
+ .elfinder-cwd-fixheader .elfinder-cwd {
1474
+ position: relative;
1475
  }
1476
 
1477
  /* container active on dropenter */
1478
  .elfinder .elfinder-cwd-wrapper.elfinder-droppable-active {
1479
+ outline: 2px solid #8cafed;
1480
+ outline-offset: -2px;
1481
  }
1482
 
1483
  .elfinder-cwd-wrapper-empty .elfinder-cwd:after {
1484
+ display: block;
1485
+ position: absolute;
1486
+ height: auto;
1487
+ width: 90%;
1488
+ width: calc(100% - 20px);
1489
+ position: absolute;
1490
+ top: 50%;
1491
+ left: 50%;
1492
+ -ms-transform: translateY(-50%) translateX(-50%);
1493
+ -webkit-transform: translateY(-50%) translateX(-50%);
1494
+ transform: translateY(-50%) translateX(-50%);
1495
+ line-height: 1.5em;
1496
+ text-align: center;
1497
+ white-space: pre-wrap;
1498
+ opacity: 0.6;
1499
+ filter: Alpha(Opacity=60);
1500
+ font-weight: bold;
1501
  }
1502
 
1503
  .elfinder-cwd-file .elfinder-cwd-select {
1504
+ position: absolute;
1505
+ top: 0px;
1506
+ left: 0px;
1507
+ background-color: transparent;
1508
+ opacity: .4;
1509
+ filter: Alpha(Opacity=40);
1510
+ }
1511
+
1512
+ .elfinder-mobile .elfinder-cwd-file .elfinder-cwd-select {
1513
+ width: 30px;
1514
+ height: 30px;
1515
  }
1516
 
1517
  .elfinder-cwd-file.ui-selected .elfinder-cwd-select {
1518
+ opacity: .8;
1519
+ filter: Alpha(Opacity=80);
1520
  }
1521
+
1522
  .elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select {
1523
+ left: auto;
1524
+ right: 0px;
1525
  }
1526
 
1527
  .elfinder .elfinder-cwd-selectall {
1528
+ position: absolute;
1529
+ width: 30px;
1530
+ height: 30px;
1531
+ top: 0px;
1532
+ opacity: .8;
1533
+ filter: Alpha(Opacity=80);
1534
  }
1535
 
1536
  .elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall {
1537
+ display: none;
1538
  }
1539
 
1540
  /************************** ICONS VIEW ********************************/
1541
 
1542
  .elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall {
1543
+ text-align: right;
1544
+ right: 18px;
1545
+ left: auto;
1546
  }
1547
 
1548
  .elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall {
1549
+ text-align: left;
1550
+ right: auto;
1551
+ left: 18px;
1552
  }
1553
 
1554
  .elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall {
1555
+ right: 0px;
1556
  }
1557
 
1558
  .elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall {
1559
+ left: 0px;
1560
  }
1561
 
1562
  .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover {
1563
+ background-color: transparent;
1564
  }
1565
 
1566
  /* file container */
1567
  .elfinder-cwd-view-icons .elfinder-cwd-file {
1568
+ width: 120px;
1569
+ height: 90px;
1570
+ padding-bottom: 2px;
1571
+ cursor: default;
1572
+ border: none;
1573
+ position: relative;
1574
+ }
 
 
 
 
 
 
1575
 
1576
+ .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active {
1577
+ border: none;
1578
+ }
 
1579
 
1580
  /* ltr/rtl enviroment */
1581
+ .elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file {
1582
+ float: left;
1583
+ margin: 0 3px 2px 0;
1584
+ }
1585
+
1586
+ .elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file {
1587
+ float: right;
1588
+ margin: 0 0 5px 3px;
1589
+ }
1590
 
1591
  /* remove ui hover class border */
1592
+ .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover {
1593
+ border: 0 solid;
1594
+ }
1595
 
1596
  /* icon wrapper to create selected highlight around icon */
1597
  .elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
1598
+ width: 52px;
1599
+ height: 52px;
1600
+ margin: 1px auto 1px auto;
1601
+ padding: 2px;
1602
+ position: relative;
1603
+ }
1604
+
1605
+ /*** Custom Icon Size size1 - size3 ***/
1606
+ /* type badge */
1607
+ .elfinder-cwd-size1 .elfinder-cwd-icon:before,
1608
+ .elfinder-cwd-size2 .elfinder-cwd-icon:before,
1609
+ .elfinder-cwd-size3 .elfinder-cwd-icon:before {
1610
+ top: 3px;
1611
+ display: block;
1612
+ }
1613
+
1614
+ /* size1 */
1615
+ .elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file {
1616
+ width: 120px;
1617
+ height: 112px;
1618
+ }
1619
+
1620
+ .elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
1621
+ width: 74px;
1622
+ height: 74px;
1623
+ }
1624
+
1625
+ .elfinder-cwd-size1 .elfinder-cwd-icon {
1626
+ -ms-transform-origin: top center;
1627
+ -ms-transform: scale(1.5);
1628
+ -webkit-transform-origin: top center;
1629
+ -webkit-transform: scale(1.5);
1630
+ transform-origin: top center;
1631
+ transform: scale(1.5);
1632
+ }
1633
+
1634
+ .elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
1635
+ -ms-transform-origin: top left;
1636
+ -ms-transform: scale(1.35) translate(-4px, 15%);
1637
+ -webkit-transform-origin: top left;
1638
+ -webkit-transform: scale(1.35) translate(-4px, 15%);
1639
+ transform-origin: top left;
1640
+ transform: scale(1.35) translate(-4px, 15%);
1641
+ }
1642
+
1643
+ .elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
1644
+ -ms-transform: scale(1) translate(10px, -5px);
1645
+ -webkit-transform: scale(1) translate(10px, -5px);
1646
+ transform: scale(1) translate(10px, -5px);
1647
+ }
1648
+
1649
+ .elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl {
1650
+ -ms-transform-origin: center center;
1651
+ -ms-transform: scale(1);
1652
+ -webkit-transform-origin: center center;
1653
+ -webkit-transform: scale(1);
1654
+ transform-origin: center center;
1655
+ transform: scale(1);
1656
+ width: 72px;
1657
+ height: 72px;
1658
+ -moz-border-radius: 6px;
1659
+ -webkit-border-radius: 6px;
1660
+ border-radius: 6px;
1661
+ }
1662
+
1663
+ /* size2 */
1664
+ .elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file {
1665
+ width: 140px;
1666
+ height: 134px;
1667
+ }
1668
+
1669
+ .elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
1670
+ width: 98px;
1671
+ height: 98px;
1672
+ }
1673
+
1674
+ .elfinder-cwd-size2 .elfinder-cwd-icon {
1675
+ -ms-transform-origin: top center;
1676
+ -ms-transform: scale(2);
1677
+ -webkit-transform-origin: top center;
1678
+ -webkit-transform: scale(2);
1679
+ transform-origin: top center;
1680
+ transform: scale(2);
1681
+ }
1682
+
1683
+ .elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
1684
+ -ms-transform-origin: top left;
1685
+ -ms-transform: scale(1.8) translate(-5px, 18%);
1686
+ -webkit-transform-origin: top left;
1687
+ -webkit-transform: scale(1.8) translate(-5px, 18%);
1688
+ transform-origin: top left;
1689
+ transform: scale(1.8) translate(-5px, 18%);
1690
+ }
1691
+
1692
+ .elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
1693
+ -ms-transform: scale(1.1) translate(0px, 10px);
1694
+ -webkit-transform: scale(1.1) translate(0px, 10px);
1695
+ transform: scale(1.1) translate(0px, 10px);
1696
+ }
1697
+
1698
+ .elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl {
1699
+ -ms-transform-origin: center center;
1700
+ -ms-transform: scale(1);
1701
+ -webkit-transform-origin: center center;
1702
+ -webkit-transform: scale(1);
1703
+ transform-origin: center center;
1704
+ transform: scale(1);
1705
+ width: 96px;
1706
+ height: 96px;
1707
+ -moz-border-radius: 8px;
1708
+ -webkit-border-radius: 8px;
1709
+ border-radius: 8px;
1710
+ }
1711
+
1712
+ /* size3 */
1713
+ .elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file {
1714
+ width: 174px;
1715
+ height: 158px;
1716
+ }
1717
+
1718
+ .elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper {
1719
+ width: 122px;
1720
+ height: 122px;
1721
+ }
1722
+
1723
+ .elfinder-cwd-size3 .elfinder-cwd-icon {
1724
+ -ms-transform-origin: top center;
1725
+ -ms-transform: scale(2.5);
1726
+ -webkit-transform-origin: top center;
1727
+ -webkit-transform: scale(2.5);
1728
+ transform-origin: top center;
1729
+ transform: scale(2.5);
1730
+ }
1731
+
1732
+ .elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
1733
+ -ms-transform-origin: top left;
1734
+ -ms-transform: scale(2.25) translate(-6px, 20%);
1735
+ -webkit-transform-origin: top left;
1736
+ -webkit-transform: scale(2.25) translate(-6px, 20%);
1737
+ transform-origin: top left;
1738
+ transform: scale(2.25) translate(-6px, 20%);
1739
+ }
1740
+
1741
+ .elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
1742
+ -ms-transform: scale(1.2) translate(-9px, 22px);
1743
+ -webkit-transform: scale(1.2) translate(-9px, 22px);
1744
+ transform: scale(1.2) translate(-9px, 22px);
1745
+ }
1746
+
1747
+ .elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl {
1748
+ -ms-transform-origin: center center;
1749
+ -ms-transform: scale(1);
1750
+ -webkit-transform-origin: center center;
1751
+ -webkit-transform: scale(1);
1752
+ transform-origin: center center;
1753
+ transform: scale(1);
1754
+ width: 120px;
1755
+ height: 120px;
1756
+ -moz-border-radius: 10px;
1757
+ -webkit-border-radius: 10px;
1758
+ border-radius: 10px;
1759
  }
1760
 
1761
  /* file name place */
1762
  .elfinder-cwd-view-icons .elfinder-cwd-filename {
1763
+ text-align: center;
1764
+ max-height: 2.4em;
1765
+ line-height: 1.2em;
1766
+ white-space: pre-line;
1767
+ overflow: hidden;
1768
+ text-overflow: ellipsis;
1769
+ -o-text-overflow: ellipsis;
1770
+ margin: 3px 1px 0 1px;
1771
+ padding: 1px;
1772
+ -moz-border-radius: 8px;
1773
+ -webkit-border-radius: 8px;
1774
+ border-radius: 8px;
1775
+ /* for webkit CSS3 */
1776
+ word-break: break-word;
1777
+ overflow-wrap: break-word;
1778
+ display: -webkit-box;
1779
+ -webkit-line-clamp: 2;
1780
+ -webkit-box-orient: vertical;
1781
  }
1782
 
1783
  /* permissions/symlink markers */
1784
+ .elfinder-cwd-view-icons .elfinder-perms {
1785
+ bottom: 4px;
1786
+ right: 2px;
1787
+ }
1788
+
1789
+ .elfinder-cwd-view-icons .elfinder-lock {
1790
+ top: -3px;
1791
+ right: -2px;
1792
+ }
1793
+
1794
+ .elfinder-cwd-view-icons .elfinder-symlink {
1795
+ bottom: 6px;
1796
+ left: 0px;
1797
+ }
1798
 
1799
  /* icon/thumbnail */
1800
  .elfinder-cwd-icon {
1801
+ display: block;
1802
+ width: 48px;
1803
+ height: 48px;
1804
+ margin: 0 auto;
1805
+ background-image: url('../img/icons-big.svg');
1806
+ background-image: url('../img/icons-big.png') \9;
1807
+ background-position: 0 0;
1808
+ background-repeat: no-repeat;
1809
+ -moz-background-clip: padding;
1810
+ -webkit-background-clip: padding-box;
1811
+ background-clip: padding-box;
1812
  }
1813
 
1814
  /* volume icon of root in folder */
1815
  .elfinder-navbar-root-local .elfinder-cwd-icon,
1816
  .elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon,
1817
  .elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon {
1818
+ background-image: url("../img/volume_icon_local.svg");
1819
+ background-image: url("../img/volume_icon_local.png") \9;
1820
+ background-position: 0 0;
1821
+ background-size: contain;
1822
  }
1823
+
1824
  .elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon {
1825
+ background-position: 1px -1px;
1826
+ }
1827
+
1828
+ .elfinder-navbar-root-trash .elfinder-cwd-icon,
1829
+ .elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon,
1830
+ .elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon {
1831
+ background-image: url("../img/volume_icon_trash.svg");
1832
+ background-image: url("../img/volume_icon_trash.png") \9;
1833
+ background-position: 0 0;
1834
+ background-size: contain;
1835
+ }
1836
+
1837
+ .elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon {
1838
+ background-position: 1px -1px;
1839
  }
1840
+
1841
  .elfinder-navbar-root-ftp .elfinder-cwd-icon,
1842
  .elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon,
1843
+ .elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon {
1844
+ background-image: url("../img/volume_icon_ftp.svg");
1845
+ background-image: url("../img/volume_icon_ftp.png") \9;
1846
+ background-position: 0 0;
1847
+ background-size: contain;
1848
  }
1849
+
1850
  .elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon {
1851
+ background-position: 1px -1px;
1852
  }
1853
+
1854
  .elfinder-navbar-root-sql .elfinder-cwd-icon,
1855
  .elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon,
1856
+ .elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon {
1857
+ background-image: url("../img/volume_icon_sql.svg");
1858
+ background-image: url("../img/volume_icon_sql.png") \9;
1859
+ background-position: 0 0;
1860
+ background-size: contain;
1861
  }
1862
+
1863
  .elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon {
1864
+ background-position: 1px -1px;
1865
  }
1866
+
1867
  .elfinder-navbar-root-dropbox .elfinder-cwd-icon,
1868
  .elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon,
1869
+ .elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon {
1870
+ background-image: url("../img/volume_icon_dropbox.svg");
1871
+ background-image: url("../img/volume_icon_dropbox.png") \9;
1872
+ background-position: 0 0;
1873
+ background-size: contain;
1874
  }
1875
+
1876
  .elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon {
1877
+ background-position: 1px -1px;
1878
  }
1879
+
1880
  .elfinder-navbar-root-googledrive .elfinder-cwd-icon,
1881
  .elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,
1882
+ .elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon {
1883
+ background-image: url("../img/volume_icon_googledrive.svg");
1884
+ background-image: url("../img/volume_icon_googledrive.png") \9;
1885
+ background-position: 0 0;
1886
+ background-size: contain;
1887
  }
1888
+
1889
  .elfinder-navbar-root-onedrive .elfinder-cwd-icon,
1890
  .elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,
1891
+ .elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon {
1892
+ background-image: url("../img/volume_icon_onedrive.svg");
1893
+ background-image: url("../img/volume_icon_onedrive.png") \9;
1894
+ background-position: 0 0;
1895
+ background-size: contain;
1896
  }
1897
+
1898
  .elfinder-navbar-root-box .elfinder-cwd-icon,
1899
  .elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,
1900
+ .elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon {
1901
+ background-image: url("../img/volume_icon_box.svg");
1902
+ background-image: url("../img/volume_icon_box.png") \9;
1903
+ background-position: 0 0;
1904
+ background-size: contain;
1905
  }
1906
+
1907
+ .elfinder-navbar-root-zip .elfinder-cwd-icon,
1908
+ .elfinder-cwd .elfinder-navbar-root-zip.elfinder-droppable-active .elfinder-cwd-icon,
1909
+ .elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon {
1910
+ background-image: url("../img/volume_icon_zip.svg");
1911
+ background-image: url("../img/volume_icon_zip.png") \9;
1912
+ background-position: 0 0;
1913
+ background-size: contain;
1914
+ }
1915
+
1916
  .elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,
1917
  .elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,
1918
  .elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon {
1919
+ background-position: 1px -1px;
1920
  }
1921
+
1922
  .elfinder-navbar-root-network .elfinder-cwd-icon,
1923
  .elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon,
1924
+ .elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon {
1925
+ background-image: url("../img/volume_icon_network.svg");
1926
+ background-image: url("../img/volume_icon_network.png") \9;
1927
+ background-position: 0 0;
1928
+ background-size: contain;
1929
  }
1930
+
1931
  .elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon {
1932
+ background-position: 1px -1px;
1933
+ }
1934
+
1935
+ /* type badge in "icons" view */
1936
+ .elfinder-cwd-icon:before {
1937
+ content: none;
1938
+ position: absolute;
1939
+ left: 0px;
1940
+ top: 5px;
1941
+ min-width: 20px;
1942
+ max-width: 84px;
1943
+ text-align: center;
1944
+ padding: 0px 4px 1px;
1945
+ border-radius: 4px;
1946
+ font-family: Verdana;
1947
+ font-size: 10px;
1948
+ line-height: 1.3em;
1949
+ -webkit-transform: scale(0.9);
1950
+ -moz-transform: scale(0.9);
1951
+ -ms-transform: scale(0.9);
1952
+ -o-transform: scale(0.9);
1953
+ transform: scale(0.9);
1954
+ }
1955
+
1956
+ .elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
1957
+ left: -10px;
1958
+ }
1959
+
1960
+ /* addtional type badge name */
1961
+ .elfinder-cwd-icon.elfinder-cwd-icon-mp2t:before {
1962
+ content: 'ts'
1963
+ }
1964
+
1965
+ .elfinder-cwd-icon.elfinder-cwd-icon-dash-xml:before {
1966
+ content: 'dash'
1967
+ }
1968
+
1969
+ .elfinder-cwd-icon.elfinder-cwd-icon-x-mpegurl:before {
1970
+ content: 'hls'
1971
+ }
1972
+
1973
+ .elfinder-cwd-icon.elfinder-cwd-icon-x-c:before {
1974
+ content: 'c++'
1975
  }
1976
 
1977
  /* thumbnail image */
1978
  .elfinder-cwd-icon.elfinder-cwd-bgurl {
1979
+ background-position: center center;
1980
+ background-repeat: no-repeat;
1981
+ -moz-background-size: contain;
1982
+ background-size: contain;
1983
  }
1984
+
1985
  /* thumbnail self */
1986
  .elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself {
1987
+ -moz-background-size: cover;
1988
+ background-size: cover;
1989
  }
1990
+
1991
  /* thumbnail crop*/
1992
  .elfinder-cwd-icon.elfinder-cwd-bgurl {
1993
+ -moz-background-size: cover;
1994
+ background-size: cover;
1995
  }
1996
+
1997
+ .elfinder-cwd-icon.elfinder-cwd-bgurl:after {
1998
+ content: ' ';
1999
+ }
2000
+
2001
  .elfinder-cwd-bgurl:after {
2002
+ position: relative;
2003
+ display: inline-block;
2004
+ top: 36px;
2005
+ left: -38px;
2006
+ width: 48px;
2007
+ height: 48px;
2008
+ background-image: url('../img/icons-big.svg');
2009
+ background-image: url('../img/icons-big.png') \9;
2010
+ background-repeat: no-repeat;
2011
+ background-size: auto !important;
2012
+ opacity: .8;
2013
+ filter: Alpha(Opacity=60);
2014
+ -webkit-transform-origin: 54px -24px;
2015
+ -webkit-transform: scale(.6);
2016
+ -moz-transform-origin: 54px -24px;
2017
+ -moz-transform: scale(.6);
2018
+ -ms-transform-origin: 54px -24px;
2019
+ -ms-transform: scale(.6);
2020
+ -o-transform-origin: 54px -24px;
2021
+ -o-transform: scale(.6);
2022
+ transform-origin: 54px -24px;
2023
+ transform: scale(.6);
2024
+ }
2025
+
2026
+ /* thumbnail image and draging icon */
2027
+ .elfinder-cwd-icon.elfinder-cwd-icon-drag {
2028
+ width: 48px;
2029
+ height: 48px;
2030
+ }
2031
+
2032
+ /* thumbnail image and draging icon overlay none */
2033
+ .elfinder-cwd-icon.elfinder-cwd-icon-drag:before,
2034
+ .elfinder-cwd-icon.elfinder-cwd-icon-drag:after,
2035
+ .elfinder-cwd-icon-image.elfinder-cwd-bgurl:after,
2036
+ .elfinder-cwd-icon-directory.elfinder-cwd-bgurl:after {
2037
+ content: none;
 
 
2038
  }
2039
 
2040
  /* "opened folder" icon on dragover */
2041
+ .elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon {
2042
+ background-position: 0 -100px;
2043
+ }
2044
+
2045
  .elfinder-cwd .elfinder-droppable-active {
2046
+ outline: 2px solid #8cafed;
2047
+ outline-offset: -2px;
2048
  }
2049
 
2050
  /* mimetypes icons */
2051
+ .elfinder-cwd-icon-directory {
2052
+ background-position: 0 -50px;
2053
+ }
2054
 
2055
  .elfinder-cwd-icon-application:after,
2056
+ .elfinder-cwd-icon-application {
2057
+ background-position: 0 -150px;
2058
+ }
2059
 
 
2060
  .elfinder-cwd-icon-text:after,
2061
+ .elfinder-cwd-icon-text {
2062
+ background-position: 0 -1350px;
2063
+ }
2064
+
2065
+ .elfinder-cwd-icon-plain:after,
2066
+ .elfinder-cwd-icon-plain,
2067
+ .elfinder-cwd-icon-x-empty:after,
2068
+ .elfinder-cwd-icon-x-empty {
2069
+ background-position: 0 -200px;
2070
+ }
2071
+
2072
+ .elfinder-cwd-icon-image:after,
2073
+ .elfinder-cwd-icon-vnd-adobe-photoshop:after,
2074
+ .elfinder-cwd-icon-image,
2075
+ .elfinder-cwd-icon-vnd-adobe-photoshop {
2076
+ background-position: 0 -250px;
2077
+ }
2078
 
 
 
2079
  .elfinder-cwd-icon-postscript:after,
2080
+ .elfinder-cwd-icon-postscript {
2081
+ background-position: 0 -1550px;
2082
+ }
2083
 
2084
  .elfinder-cwd-icon-audio:after,
2085
+ .elfinder-cwd-icon-audio {
2086
+ background-position: 0 -300px;
2087
+ }
2088
 
2089
+ .elfinder-cwd-icon-video:after,
2090
  .elfinder-cwd-icon-video,
2091
+ .elfinder-cwd-icon-flash-video,
2092
+ .elfinder-cwd-icon-dash-xml,
2093
+ .elfinder-cwd-icon-vnd-apple-mpegurl,
2094
+ .elfinder-cwd-icon-x-mpegurl {
2095
+ background-position: 0 -350px;
2096
+ }
2097
 
2098
+ .elfinder-cwd-icon-rtf:after,
2099
  .elfinder-cwd-icon-rtfd:after,
2100
+ .elfinder-cwd-icon-rtf,
2101
+ .elfinder-cwd-icon-rtfd {
2102
+ background-position: 0 -400px;
2103
+ }
2104
 
2105
  .elfinder-cwd-icon-pdf:after,
2106
+ .elfinder-cwd-icon-pdf {
2107
+ background-position: 0 -450px;
2108
+ }
2109
 
2110
+ .elfinder-cwd-icon-ms-excel,
2111
  .elfinder-cwd-icon-ms-excel:after,
2112
+ .elfinder-cwd-icon-vnd-ms-excel,
2113
+ .elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,
2114
  .elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after,
2115
+ .elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,
2116
  .elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after,
2117
+ .elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,
2118
  .elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after,
2119
+ .elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,
2120
  .elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after,
2121
+ .elfinder-cwd-icon-vnd-ms-excel:after,
2122
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,
2123
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:after,
2124
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,
2125
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:after {
2126
+ background-position: 0 -1450px
2127
+ }
2128
+
2129
+ .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,
2130
+ .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,
2131
+ .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:after,
2132
+ .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:after {
2133
+ background-position: 0 -1700px
2134
+ }
2135
+
2136
+ .elfinder-cwd-icon-vnd-ms-powerpoint,
2137
+ .elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,
2138
  .elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:after,
2139
+ .elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,
2140
  .elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:after,
2141
+ .elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,
2142
  .elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:after,
2143
+ .elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,
2144
  .elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:after,
2145
+ .elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,
2146
  .elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:after,
2147
+ .elfinder-cwd-icon-vnd-ms-powerpoint:after,
2148
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2149
  .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:after,
2150
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,
2151
  .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:after,
2152
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,
2153
  .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:after,
2154
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,
2155
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:after {
2156
+ background-position: 0 -1400px
2157
+ }
2158
+
2159
+ .elfinder-cwd-icon-vnd-oasis-opendocument-presentation,
2160
+ .elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,
2161
+ .elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:after,
2162
+ .elfinder-cwd-icon-vnd-oasis-opendocument-presentation:after {
2163
+ background-position: 0 -1650px
2164
+ }
2165
+
2166
  .elfinder-cwd-icon-msword,
2167
+ .elfinder-cwd-icon-msword:after,
 
 
 
 
 
 
 
 
 
 
 
2168
  .elfinder-cwd-icon-vnd-ms-word,
2169
  .elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,
2170
+ .elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:after,
2171
  .elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,
2172
+ .elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:after,
2173
+ .elfinder-cwd-icon-vnd-ms-word:after,
2174
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,
2175
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:after,
2176
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template,
2177
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:after {
2178
+ background-position: 0 -1500px
2179
+ }
2180
+
2181
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text,
2182
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-master,
2183
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-master:after,
2184
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-template,
2185
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-template:after,
2186
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-web,
2187
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-web:after,
2188
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text:after {
2189
+ background-position: 0 -1750px
2190
+ }
2191
+
2192
+ .elfinder-cwd-icon-vnd-ms-office,
2193
+ .elfinder-cwd-icon-vnd-ms-office:after {
2194
+ background-position: 0 -500px
2195
+ }
2196
+
2197
  .elfinder-cwd-icon-vnd-oasis-opendocument-chart,
2198
+ .elfinder-cwd-icon-vnd-oasis-opendocument-chart:after,
2199
  .elfinder-cwd-icon-vnd-oasis-opendocument-database,
2200
+ .elfinder-cwd-icon-vnd-oasis-opendocument-database:after,
2201
  .elfinder-cwd-icon-vnd-oasis-opendocument-formula,
2202
+ .elfinder-cwd-icon-vnd-oasis-opendocument-formula:after,
2203
  .elfinder-cwd-icon-vnd-oasis-opendocument-graphics,
2204
  .elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,
2205
+ .elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:after,
2206
+ .elfinder-cwd-icon-vnd-oasis-opendocument-graphics:after,
2207
  .elfinder-cwd-icon-vnd-oasis-opendocument-image,
2208
+ .elfinder-cwd-icon-vnd-oasis-opendocument-image:after,
 
 
 
 
 
 
 
2209
  .elfinder-cwd-icon-vnd-openofficeorg-extension,
2210
+ .elfinder-cwd-icon-vnd-openofficeorg-extension:after {
2211
+ background-position: 0 -1600px
2212
+ }
 
 
 
 
 
2213
 
2214
  .elfinder-cwd-icon-html:after,
2215
+ .elfinder-cwd-icon-html {
2216
+ background-position: 0 -550px;
2217
+ }
2218
 
2219
  .elfinder-cwd-icon-css:after,
2220
+ .elfinder-cwd-icon-css {
2221
+ background-position: 0 -600px;
2222
+ }
2223
 
2224
+ .elfinder-cwd-icon-javascript:after,
2225
  .elfinder-cwd-icon-x-javascript:after,
2226
+ .elfinder-cwd-icon-javascript,
2227
+ .elfinder-cwd-icon-x-javascript {
2228
+ background-position: 0 -650px;
2229
+ }
2230
 
2231
  .elfinder-cwd-icon-x-perl:after,
2232
+ .elfinder-cwd-icon-x-perl {
2233
+ background-position: 0 -700px;
2234
+ }
2235
 
2236
  .elfinder-cwd-icon-x-python:after,
2237
+ .elfinder-cwd-icon-x-python {
2238
+ background-position: 0 -750px;
2239
+ }
2240
 
2241
  .elfinder-cwd-icon-x-ruby:after,
2242
+ .elfinder-cwd-icon-x-ruby {
2243
+ background-position: 0 -800px;
2244
+ }
2245
 
2246
+ .elfinder-cwd-icon-x-sh:after,
2247
  .elfinder-cwd-icon-x-shellscript:after,
2248
+ .elfinder-cwd-icon-x-sh,
2249
+ .elfinder-cwd-icon-x-shellscript {
2250
+ background-position: 0 -850px;
2251
+ }
2252
 
2253
  .elfinder-cwd-icon-x-c:after,
2254
  .elfinder-cwd-icon-x-csrc:after,
2255
  .elfinder-cwd-icon-x-chdr:after,
2256
+ .elfinder-cwd-icon-x-c--:after,
2257
  .elfinder-cwd-icon-x-c--src:after,
2258
+ .elfinder-cwd-icon-x-c--hdr:after,
2259
+ .elfinder-cwd-icon-x-java:after,
2260
  .elfinder-cwd-icon-x-java-source:after,
2261
  .elfinder-cwd-icon-x-c,
2262
  .elfinder-cwd-icon-x-csrc,
2263
  .elfinder-cwd-icon-x-chdr,
2264
+ .elfinder-cwd-icon-x-c--,
2265
  .elfinder-cwd-icon-x-c--src,
2266
+ .elfinder-cwd-icon-x-c--hdr,
2267
+ .elfinder-cwd-icon-x-java,
2268
+ .elfinder-cwd-icon-x-java-source {
2269
+ background-position: 0 -900px;
2270
+ }
2271
 
2272
  .elfinder-cwd-icon-x-php:after,
2273
+ .elfinder-cwd-icon-x-php {
2274
+ background-position: 0 -950px;
2275
+ }
2276
 
2277
  .elfinder-cwd-icon-xml:after,
2278
+ .elfinder-cwd-icon-xml {
2279
+ background-position: 0 -1000px;
2280
+ }
2281
 
2282
+ .elfinder-cwd-icon-zip:after,
2283
+ .elfinder-cwd-icon-x-zip:after,
2284
+ .elfinder-cwd-icon-x-xz:after,
2285
  .elfinder-cwd-icon-x-7z-compressed:after,
2286
+ .elfinder-cwd-icon-zip,
2287
+ .elfinder-cwd-icon-x-zip,
2288
+ .elfinder-cwd-icon-x-xz,
2289
+ .elfinder-cwd-icon-x-7z-compressed {
2290
+ background-position: 0 -1050px;
2291
+ }
2292
 
2293
+ .elfinder-cwd-icon-x-gzip:after,
2294
  .elfinder-cwd-icon-x-tar:after,
2295
+ .elfinder-cwd-icon-x-gzip,
2296
+ .elfinder-cwd-icon-x-tar {
2297
+ background-position: 0 -1100px;
2298
+ }
2299
 
2300
+ .elfinder-cwd-icon-x-bzip:after,
2301
  .elfinder-cwd-icon-x-bzip2:after,
2302
+ .elfinder-cwd-icon-x-bzip,
2303
+ .elfinder-cwd-icon-x-bzip2 {
2304
+ background-position: 0 -1150px;
2305
+ }
2306
 
2307
+ .elfinder-cwd-icon-x-rar:after,
2308
  .elfinder-cwd-icon-x-rar-compressed:after,
2309
+ .elfinder-cwd-icon-x-rar,
2310
+ .elfinder-cwd-icon-x-rar-compressed {
2311
+ background-position: 0 -1200px;
2312
+ }
2313
 
2314
  .elfinder-cwd-icon-x-shockwave-flash:after,
2315
+ .elfinder-cwd-icon-x-shockwave-flash {
2316
+ background-position: 0 -1250px;
2317
+ }
2318
 
2319
+ .elfinder-cwd-icon-group {
2320
+ background-position: 0 -1300px;
2321
+ }
2322
 
2323
  /* textfield inside icon */
2324
+ .elfinder-cwd-filename input {
2325
+ width: 100%;
2326
+ border: none;
2327
+ margin: 0;
2328
+ padding: 0;
2329
+ }
2330
+
2331
+ .elfinder-cwd-view-icons input {
2332
+ text-align: center;
 
2333
  }
2334
 
2335
+ .elfinder-cwd-view-icons textarea {
2336
+ width: 100%;
2337
+ border: 0px solid;
2338
+ margin: 0;
2339
+ padding: 0;
2340
+ text-align: center;
2341
+ overflow: hidden;
2342
+ resize: none;
2343
+ }
2344
 
2345
+ .elfinder-cwd-view-icons {
2346
+ text-align: center;
2347
+ }
2348
 
2349
  /************************************ LIST VIEW ************************************/
2350
 
2351
  /*.elfinder-cwd-view-list { padding:0 0 4px 0; }*/
2352
 
2353
  .elfinder-cwd-wrapper.elfinder-cwd-fixheader .elfinder-cwd::after {
2354
+ display: none;
2355
+ }
2356
+
2357
+ .elfinder-cwd table {
2358
+ width: 100%;
2359
+ border-collapse: separate;
2360
+ border: 0 solid;
2361
+ margin: 0 0 10px 0;
2362
+ border-spacing: 0;
2363
+ box-sizing: padding-box;
2364
+ padding: 2px;
2365
+ position: relative;
2366
  }
2367
 
2368
+ .elfinder-cwd table td {
2369
+ /* fix conflict with Bootstrap CSS */
2370
+ box-sizing: content-box;
 
 
 
 
 
 
2371
  }
2372
 
2373
  .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader {
2374
+ position: absolute;
2375
+ overflow: hidden;
2376
  }
2377
 
2378
  .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before {
2379
+ content: '';
2380
+ position: absolute;
2381
+ width: 100%;
2382
+ top: 0;
2383
+ height: 3px;
2384
+ background-color: white;
2385
  }
2386
+
2387
  .elfinder-droppable-active + .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before {
2388
+ background-color: #8cafed;
2389
  }
2390
 
2391
  .elfinder .elfinder-workzone div.elfinder-cwd-fixheader table {
2392
+ table-layout: fixed;
2393
  }
2394
 
2395
  .elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader {
2396
+ position: relative;
2397
  }
2398
 
2399
  .elfinder-ltr .elfinder-cwd thead .elfinder-cwd-selectall {
2400
+ text-align: left;
2401
+ right: auto;
2402
+ left: 0px;
2403
+ padding-top: 3px;
2404
  }
2405
 
2406
  .elfinder-rtl .elfinder-cwd thead .elfinder-cwd-selectall {
2407
+ text-align: right;
2408
+ right: 0px;
2409
+ left: auto;
2410
+ padding-top: 3px;
2411
  }
2412
 
2413
  .elfinder-touch .elfinder-cwd thead .elfinder-cwd-selectall {
2414
+ padding-top: 4px;
2415
  }
2416
 
2417
+ .elfinder .elfinder-cwd table thead tr {
2418
+ border-left: 0 solid;
2419
+ border-top: 0 solid;
2420
+ border-right: 0 solid;
2421
+ }
2422
 
2423
  .elfinder .elfinder-cwd table thead td {
2424
+ padding: 4px 14px;
2425
  }
2426
+
2427
  .elfinder-ltr .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
2428
+ padding: 4px 14px 4px 22px;
2429
  }
2430
+
2431
  .elfinder-rtl .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
2432
+ padding: 4px 22px 4px 14px;
2433
  }
2434
 
2435
+ .elfinder-touch .elfinder-cwd table thead td,
2436
+ .elfinder-touch .elfinder-cwd.elfinder-has-checkbox table thead td:first-child {
2437
+ padding-top: 8px;
2438
+ padding-bottom: 8px;
 
 
 
 
 
2439
  }
2440
 
2441
+ .elfinder .elfinder-cwd table thead td.ui-state-active {
2442
+ background: #ebf1f6;
2443
+ background: -moz-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
2444
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ebf1f6), color-stop(50%, #abd3ee), color-stop(51%, #89c3eb), color-stop(100%, #d5ebfb));
2445
+ background: -webkit-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
2446
+ background: -o-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
2447
+ background: -ms-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
2448
+ background: linear-gradient(to bottom, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%);
2449
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebf1f6', endColorstr='#d5ebfb', GradientType=0);
2450
+ }
2451
+
2452
+ .elfinder .elfinder-cwd table td {
2453
+ padding: 4px 12px;
2454
+ white-space: pre;
2455
+ overflow: hidden;
2456
+ text-align: right;
2457
+ cursor: default;
2458
+ border: 0 solid;
2459
  }
2460
 
2461
  .elfinder .elfinder-cwd table tbody td:first-child {
2462
+ position: relative
2463
  }
2464
 
2465
+ .elfinder .elfinder-cwd table td div {
2466
+ box-sizing: content-box;
2467
  }
2468
 
2469
  tr.elfinder-cwd-file td .elfinder-cwd-select {
2470
+ padding-top: 3px;
2471
+ }
2472
+
2473
+ .elfinder-mobile tr.elfinder-cwd-file td .elfinder-cwd-select {
2474
+ width: 40px;
2475
  }
2476
 
2477
  .elfinder-touch tr.elfinder-cwd-file td .elfinder-cwd-select {
2478
+ padding-top: 10px;
2479
  }
2480
 
2481
  .elfinder-touch .elfinder-cwd tr td {
2482
+ padding: 10px 12px;
2483
  }
2484
 
2485
+ .elfinder-touch .elfinder-cwd tr.elfinder-cwd-file td {
2486
+ padding: 13px 12px;
2487
  }
2488
 
2489
+ .elfinder-ltr .elfinder-cwd table td {
2490
+ text-align: right;
2491
+ }
2492
+
2493
+ .elfinder-ltr .elfinder-cwd table td:first-child {
2494
+ text-align: left;
2495
  }
2496
 
2497
+ .elfinder-rtl .elfinder-cwd table td {
2498
+ text-align: left;
2499
+ }
 
2500
 
2501
+ .elfinder-rtl .elfinder-cwd table td:first-child {
2502
+ text-align: right;
2503
+ }
2504
+
2505
+ .elfinder-odd-row {
2506
+ background: #eee;
2507
+ }
2508
 
2509
  /* filename container */
2510
+ .elfinder-cwd-view-list .elfinder-cwd-file-wrapper {
2511
+ width: 97%;
2512
+ position: relative;
2513
+ }
2514
+
2515
  /* filename container in ltr/rtl enviroment */
2516
+ .elfinder-ltr .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper {
2517
+ margin-left: 8px;
2518
+ }
2519
+
2520
+ .elfinder-rtl .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper {
2521
+ margin-right: 8px;
2522
+ }
2523
+
2524
+ .elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename {
2525
+ padding-left: 23px;
2526
+ }
2527
+
2528
+ .elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-filename {
2529
+ padding-right: 23px;
2530
+ }
2531
 
2532
  /* premissions/symlink marker */
2533
+ .elfinder-cwd-view-list .elfinder-perms,
2534
  .elfinder-cwd-view-list .elfinder-lock,
2535
  .elfinder-cwd-view-list .elfinder-symlink {
2536
+ margin-top: -6px;
2537
+ opacity: .6;
2538
+ filter: Alpha(Opacity=60);
2539
+ }
2540
+
2541
+ .elfinder-cwd-view-list .elfinder-perms {
2542
+ bottom: -4px;
2543
+ }
2544
+
2545
+ .elfinder-cwd-view-list .elfinder-lock {
2546
+ top: 0px;
2547
+ }
2548
+
2549
+ .elfinder-cwd-view-list .elfinder-symlink {
2550
+ bottom: -4px;
2551
  }
2552
+
2553
  /* markers in ltr/rtl enviroment */
2554
+ .elfinder-ltr .elfinder-cwd-view-list .elfinder-perms {
2555
+ left: 8px;
2556
+ }
2557
+
2558
+ .elfinder-rtl .elfinder-cwd-view-list .elfinder-perms {
2559
+ right: -8px;
2560
+ }
2561
+
2562
+ .elfinder-ltr .elfinder-cwd-view-list .elfinder-lock {
2563
+ left: 10px;
2564
+ }
2565
+
2566
+ .elfinder-rtl .elfinder-cwd-view-list .elfinder-lock {
2567
+ right: -10px;
2568
+ }
2569
+
2570
+ .elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink {
2571
+ left: -7px;
2572
+ }
2573
+
2574
+ .elfinder-rtl .elfinder-cwd-view-list .elfinder-symlink {
2575
+ right: 7px;
2576
+ }
2577
 
2578
  /* file icon */
2579
  .elfinder-cwd-view-list td .elfinder-cwd-icon {
2580
+ width: 16px;
2581
+ height: 16px;
2582
+ position: absolute;
2583
+ top: 50%;
2584
+ margin-top: -8px;
2585
+ background-image: url(../img/icons-small.png);
2586
  }
2587
+
2588
  /* icon in ltr/rtl enviroment */
2589
+ .elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon {
2590
+ left: 0;
2591
+ }
2592
 
2593
+ .elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon {
2594
+ right: 0;
2595
+ }
2596
+
2597
+ /* type badge, thumbnail image overlay */
2598
+ .elfinder-cwd-view-list .elfinder-cwd-icon:before,
2599
+ .elfinder-cwd-view-list .elfinder-cwd-icon:after {
2600
+ content: none;
2601
  }
2602
 
2603
  /* table header resize handle */
2604
  .elfinder-cwd-view-list thead td .ui-resizable-handle {
2605
+ height: 100%;
2606
+ top: 6px;
2607
  }
2608
+
2609
  .elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-handle {
2610
+ top: -4px;
2611
+ margin: 10px;
2612
  }
2613
+
2614
  .elfinder-cwd-view-list thead td .ui-resizable-e {
2615
+ right: -7px;
2616
  }
2617
+
2618
  .elfinder-cwd-view-list thead td .ui-resizable-w {
2619
+ left: -7px;
2620
  }
2621
+
2622
  .elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-e {
2623
+ right: -16px;
2624
  }
2625
+
2626
  .elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-w {
2627
+ left: -16px;
2628
  }
2629
 
2630
  /* empty message */
2631
  .elfinder-cwd-wrapper-empty .elfinder-cwd-view-list.elfinder-cwd:after {
2632
+ margin-top: 0;
2633
+ }
2634
+
2635
+ /* overlay message board */
2636
+ .elfinder-cwd-message-board {
2637
+ position: absolute;
2638
+ position: -webkit-sticky;
2639
+ position: sticky;
2640
+ width: 100%;
2641
+ height: calc(100% - 0.01px); /* for Firefox scroll problem */
2642
+ top: 0;
2643
+ left: 0;
2644
+ margin: 0;
2645
+ padding: 0;
2646
+ pointer-events: none;
2647
+ background-color: transparent;
2648
+ }
2649
+
2650
+ /* overlay message board for trash */
2651
+ .elfinder-cwd-wrapper-trash .elfinder-cwd-message-board {
2652
+ background-image: url(../img/trashmesh.png);
2653
+ }
2654
+
2655
+ .elfinder-cwd-message-board .elfinder-cwd-trash {
2656
+ position: absolute;
2657
+ bottom: 0;
2658
+ font-size: 30px;
2659
+ width: 100%;
2660
+ text-align: right;
2661
+ display: none;
2662
+ }
2663
+
2664
+ .elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-trash {
2665
+ text-align: left;
2666
  }
2667
+
2668
+ .elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-trash {
2669
+ font-size: 20px;
2670
+ }
2671
+
2672
+ .elfinder-cwd-wrapper-trash .elfinder-cwd-message-board .elfinder-cwd-trash {
2673
+ display: block;
2674
+ opacity: .3;
2675
+ }
2676
+
2677
+ /* overlay message board for expires */
2678
+ .elfinder-cwd-message-board .elfinder-cwd-expires {
2679
+ position: absolute;
2680
+ bottom: 0;
2681
+ font-size: 24px;
2682
+ width: 100%;
2683
+ text-align: right;
2684
+ opacity: .25;
2685
+ }
2686
+
2687
+ .elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-expires {
2688
+ text-align: left;
2689
+ }
2690
+
2691
+ .elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-expires {
2692
+ font-size: 20px;
2693
+ }
2694
+
2695
  /* File: /css/dialog.css */
2696
  /*********************************************/
2697
  /* DIALOGS STYLES */
2699
 
2700
  /* common dialogs class */
2701
  .std42-dialog {
2702
+ padding: 0;
2703
+ position: absolute;
2704
+ left: auto;
2705
+ right: auto;
2706
+ box-sizing: border-box;
2707
  }
2708
+
2709
  .std42-dialog.elfinder-dialog-minimized {
2710
+ overFlow: hidden;
2711
+ position: relative;
2712
+ float: left;
2713
+ width: auto;
2714
+ cursor: pointer;
2715
  }
2716
+
2717
  .elfinder-rtl .std42-dialog.elfinder-dialog-minimized {
2718
+ float: right;
2719
+ }
2720
+
2721
+ .std42-dialog input {
2722
+ border: 1px solid;
2723
  }
2724
 
2725
  /* titlebar */
2726
  .std42-dialog .ui-dialog-titlebar {
2727
+ border-left: 0 solid transparent;
2728
+ border-top: 0 solid transparent;
2729
+ border-right: 0 solid transparent;
2730
+ font-weight: normal;
2731
+ padding: .2em 1em;
 
 
 
 
 
 
2732
  }
2733
+
2734
  .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar {
2735
+ padding: 0 .5em;
2736
+ height: 20px;
2737
  }
2738
+
2739
  .elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar {
2740
+ padding: .3em .5em;
2741
  }
2742
+
2743
  .std42-dialog.ui-draggable-disabled .ui-dialog-titlebar {
2744
+ cursor: default;
2745
  }
2746
 
2747
  .std42-dialog .ui-dialog-titlebar .ui-widget-header {
2748
+ border: none;
2749
+ cursor: pointer;
2750
  }
2751
 
2752
  .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title {
2753
+ display: inherit;
2754
+ word-break: break-all;
2755
  }
2756
+
2757
  .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title {
2758
+ display: list-item;
2759
+ display: -moz-inline-box;
2760
+ white-space: nowrap;
2761
+ word-break: normal;
2762
+ overflow: hidden;
2763
+ word-wrap: normal;
2764
+ overflow-wrap: normal;
2765
+ max-width: -webkit-calc(100% - 24px);
2766
+ max-width: -moz-calc(100% - 24px);
2767
+ max-width: calc(100% - 24px);
2768
  }
2769
+
2770
  .elfinder-touch .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title {
2771
+ padding-top: .15em;
2772
  }
2773
+
2774
  .elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title {
2775
+ max-width: -webkit-calc(100% - 36px);
2776
+ max-width: -moz-calc(100% - 36px);
2777
+ max-width: calc(100% - 36px);
2778
  }
2779
 
2780
  .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button {
2781
+ position: relative;
2782
+ float: left;
2783
+ top: 10px;
2784
+ left: -10px;
2785
+ right: 10px;
2786
+ width: 20px;
2787
+ height: 20px;
2788
+ padding: 1px;
2789
+ margin: -10px 1px 0 1px;
2790
+ background-color: transparent;
2791
+ background-image: none;
 
 
 
 
 
 
2792
  }
2793
+
2794
+ .elfinder-touch .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button {
2795
+ -moz-transform: scale(1.2);
2796
+ zoom: 1.2;
2797
+ padding-left: 6px;
2798
+ padding-right: 6px;
2799
+ height: 24px;
2800
+ }
2801
+
2802
+ .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button-right {
2803
+ float: right;
2804
+ }
2805
+
2806
  .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right {
2807
+ left: 10px;
2808
+ right: -10px;
 
2809
  }
2810
+
2811
  .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
2812
+ width: 17px;
2813
+ height: 17px;
2814
+ border-width: 1px;
2815
+ opacity: .7;
2816
+ filter: Alpha(Opacity=70);
2817
+ -moz-border-radius: 8px;
2818
+ -webkit-border-radius: 8px;
2819
+ border-radius: 8px;
2820
+ }
2821
+
2822
+ .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
2823
+ opacity: .5;
2824
+ filter: Alpha(Opacity=50);
2825
  }
2826
+
2827
  .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon {
2828
+ opacity: 1;
2829
+ filter: Alpha(Opacity=100);
2830
+ }
2831
+
2832
+ .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar select {
2833
+ display: none;
2834
  }
2835
+
2836
+ .elfinder-spinner {
2837
+ width: 14px;
2838
+ height: 14px;
2839
+ background: url("../img/spinner-mini.gif") center center no-repeat;
2840
+ margin: 0 5px;
2841
+ display: inline-block;
2842
+ vertical-align: middle;
2843
  }
2844
+
2845
+ .elfinder-ltr .elfinder-spinner,
2846
+ .elfinder-ltr .elfinder-spinner-text {
2847
+ float: left;
2848
  }
2849
+
2850
+ .elfinder-rtl .elfinder-spinner,
2851
+ .elfinder-rtl .elfinder-spinner-text {
2852
+ float: right;
2853
  }
2854
 
2855
+
2856
+
2857
  /* resize handle for touch devices */
2858
  .elfinder-touch .std42-dialog.ui-dialog:not(ui-resizable-disabled) .ui-resizable-se {
2859
+ width: 12px;
2860
+ height: 12px;
2861
+ -moz-transform-origin: bottom right;
2862
+ -moz-transform: scale(1.5);
2863
+ zoom: 1.5;
2864
+ right: -7px;
2865
+ bottom: -7px;
2866
+ margin: 3px 7px 7px 3px;
2867
+ background-position: -64px -224px;
2868
  }
2869
 
2870
+ .elfinder-rtl .elfinder-dialog .ui-dialog-titlebar {
2871
+ text-align: right;
2872
+ }
2873
 
2874
  /* content */
2875
  .std42-dialog .ui-dialog-content {
2876
+ padding: .3em .5em;
2877
+ box-sizing: border-box;
2878
  }
2879
+
2880
  .elfinder .std42-dialog .ui-dialog-content,
2881
  .elfinder .std42-dialog .ui-dialog-content * {
2882
+ -webkit-user-select: auto;
2883
+ -moz-user-select: text;
2884
+ -khtml-user-select: text;
2885
+ user-select: text;
2886
+ }
2887
+
2888
+ .elfinder .std42-dialog .ui-dialog-content label {
2889
+ border: none;
2890
  }
2891
 
2892
  /* buttons */
2893
  .std42-dialog .ui-dialog-buttonpane {
2894
+ border: 0 solid;
2895
+ margin: 0;
2896
+ padding: .5em;
2897
+ text-align: right;
2898
+ }
2899
+
2900
+ .elfinder-rtl .std42-dialog .ui-dialog-buttonpane {
2901
+ text-align: left;
2902
+ }
2903
+
2904
+ .std42-dialog .ui-dialog-buttonpane button {
2905
+ margin: .2em 0 0 .4em;
2906
+ padding: .2em;
2907
+ outline: 0px solid;
2908
  }
 
2909
 
2910
+ .std42-dialog .ui-dialog-buttonpane button span {
2911
+ padding: 2px 9px;
2912
+ }
2913
 
2914
+ .std42-dialog .ui-dialog-buttonpane button span.ui-icon {
2915
+ padding: 2px;
2916
+ }
2917
 
2918
+ .elfinder-dialog .ui-resizable-e,
2919
+ .elfinder-dialog .ui-resizable-s {
2920
+ width: 0;
2921
+ height: 0;
2922
+ }
2923
 
2924
+ .std42-dialog .ui-button input {
2925
+ cursor: pointer;
 
 
 
 
 
 
 
2926
  }
2927
 
2928
+ .std42-dialog select {
2929
+ border: 1px solid #ccc;
2930
+ }
2931
 
2932
+ /* error/notify/confirm dialogs icon */
2933
+ .elfinder-dialog-icon {
2934
+ position: absolute;
2935
+ width: 32px;
2936
+ height: 32px;
2937
+ left: 10px;
2938
+ top: 50%;
2939
+ margin-top: -15px;
2940
+ background: url("../img/dialogs.png") 0 0 no-repeat;
2941
+ }
2942
 
2943
+ .elfinder-rtl .elfinder-dialog-icon {
2944
+ left: auto;
2945
+ right: 10px;
2946
+ }
2947
 
2948
  /*********************** ERROR DIALOG **************************/
2949
 
2950
  .elfinder-dialog-error .ui-dialog-content,
2951
+ .elfinder-dialog-confirm .ui-dialog-content {
2952
+ padding-left: 56px;
2953
+ min-height: 35px;
2954
+ }
2955
 
2956
  .elfinder-rtl .elfinder-dialog-error .ui-dialog-content,
2957
+ .elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content {
2958
+ padding-left: 0;
2959
+ padding-right: 56px;
2960
+ }
2961
+
2962
+ .elfinder-dialog-error .elfinder-err-var {
2963
+ word-break: break-all;
2964
+ }
2965
 
2966
  /*********************** NOTIFY DIALOG **************************/
2967
 
2968
+ .elfinder-dialog-notify {
2969
+ top : 36px;
2970
+ width : 280px;
2971
+ }
2972
+
2973
+ .elfinder-ltr .elfinder-dialog-notify {
2974
+ right : 12px;
2975
+ }
2976
+
2977
+ .elfinder-rtl .elfinder-dialog-notify {
2978
+ left : 12px;
2979
+ }
2980
+
2981
+ .elfinder-dialog-notify .ui-dialog-titlebar {
2982
+ height: 5px;
2983
+ }
2984
+
2985
+ .elfinder-dialog-notify .ui-dialog-titlebar-close {
2986
+ display: none;
2987
+ }
2988
+
2989
+ .elfinder-dialog-notify .ui-dialog-content {
2990
+ padding: 0;
2991
+ }
2992
 
2993
  /* one notification container */
2994
  .elfinder-notify {
2995
+ border-bottom: 1px solid #ccc;
2996
+ position: relative;
2997
+ padding: .5em;
2998
+
2999
+ text-align: center;
3000
+ overflow: hidden;
3001
  }
3002
 
3003
+ .elfinder-ltr .elfinder-notify {
3004
+ padding-left: 36px;
3005
+ }
3006
 
3007
+ .elfinder-rtl .elfinder-notify {
3008
+ padding-right: 36px;
3009
+ }
3010
+
3011
+ .elfinder-notify:last-child {
3012
+ border: 0 solid;
3013
+ }
3014
 
3015
  /* progressbar */
3016
  .elfinder-notify-progressbar {
3017
+ width: 180px;
3018
+ height: 8px;
3019
+ border: 1px solid #aaa;
3020
+ background: #f5f5f5;
3021
+ margin: 5px auto;
3022
+ overflow: hidden;
3023
  }
3024
 
3025
  .elfinder-notify-progress {
3026
+ width: 100%;
3027
+ height: 8px;
3028
+ background: url(../img/progress.gif) center center repeat-x;
3029
  }
3030
 
3031
  .elfinder-notify-progressbar, .elfinder-notify-progress {
3032
+ -moz-border-radius: 2px;
3033
+ -webkit-border-radius: 2px;
3034
+ border-radius: 2px;
3035
  }
3036
 
3037
  /* icons */
3038
+ .elfinder-dialog-icon-open,
3039
  .elfinder-dialog-icon-readdir,
3040
+ .elfinder-dialog-icon-file {
3041
+ background-position: 0 -225px;
3042
+ }
3043
+
3044
+ .elfinder-dialog-icon-reload {
3045
+ background-position: 0 -225px;
3046
+ }
3047
+
3048
+ .elfinder-dialog-icon-mkdir {
3049
+ background-position: 0 -64px;
3050
+ }
3051
+
3052
+ .elfinder-dialog-icon-mkfile {
3053
+ background-position: 0 -96px;
3054
+ }
3055
+
3056
  .elfinder-dialog-icon-copy,
3057
  .elfinder-dialog-icon-prepare,
3058
+ .elfinder-dialog-icon-move {
3059
+ background-position: 0 -128px;
3060
+ }
3061
+
3062
+ .elfinder-dialog-icon-upload {
3063
+ background-position: 0 -160px;
3064
+ }
3065
+
3066
+ .elfinder-dialog-icon-chunkmerge {
3067
+ background-position: 0 -160px;
3068
+ }
3069
+
3070
+ .elfinder-dialog-icon-rm {
3071
+ background-position: 0 -192px;
3072
+ }
3073
+
3074
+ .elfinder-dialog-icon-download {
3075
+ background-position: 0 -260px;
3076
+ }
3077
+
3078
+ .elfinder-dialog-icon-save {
3079
+ background-position: 0 -295px;
3080
+ }
3081
+
3082
+ .elfinder-dialog-icon-rename,
3083
+ .elfinder-dialog-icon-chkcontent {
3084
+ background-position: 0 -330px;
3085
+ }
3086
+
3087
  .elfinder-dialog-icon-zipdl,
3088
  .elfinder-dialog-icon-archive,
3089
+ .elfinder-dialog-icon-extract {
3090
+ background-position: 0 -365px;
3091
+ }
3092
+
3093
+ .elfinder-dialog-icon-search {
3094
+ background-position: 0 -402px;
3095
+ }
3096
+
3097
  .elfinder-dialog-icon-resize,
3098
  .elfinder-dialog-icon-loadimg,
3099
  .elfinder-dialog-icon-netmount,
3101
  .elfinder-dialog-icon-chmod,
3102
  .elfinder-dialog-icon-preupload,
3103
  .elfinder-dialog-icon-url,
3104
+ .elfinder-dialog-icon-dim {
3105
+ background-position: 0 -434px;
3106
+ }
3107
 
3108
  /*********************** CONFIRM DIALOG **************************/
3109
 
3110
+ .elfinder-dialog-confirm-applyall,
3111
+ .elfinder-dialog-confirm-encoding {
3112
+ padding: 0 1em;
3113
+ margin: 0;
3114
  }
 
 
3115
 
3116
+ .elfinder-ltr .elfinder-dialog-confirm-applyall,
3117
+ .elfinder-ltr .elfinder-dialog-confirm-encoding {
3118
+ text-align: left;
3119
+ }
3120
 
3121
+ .elfinder-rtl .elfinder-dialog-confirm-applyall,
3122
+ .elfinder-rtl .elfinder-dialog-confirm-encoding {
3123
+ text-align: right;
3124
+ }
3125
 
3126
+ .elfinder-dialog-confirm .elfinder-dialog-icon {
3127
+ background-position: 0 -32px;
3128
+ }
3129
+
3130
+ .elfinder-dialog-confirm .ui-dialog-buttonset {
3131
+ width: auto;
3132
+ }
3133
 
3134
+ /*********************** FILE INFO DIALOG **************************/
3135
 
3136
  .elfinder-info-title .elfinder-cwd-icon {
3137
+ float: left;
3138
+ width: 48px;
3139
+ height: 48px;
3140
+ margin-right: 1em;
3141
  }
3142
 
3143
  .elfinder-rtl .elfinder-info-title .elfinder-cwd-icon {
3144
+ float: right;
3145
+ margin-right: 0;
3146
+ margin-left: 1em;
3147
  }
3148
 
3149
+ .elfinder-info-title strong {
3150
+ display: block;
3151
+ padding: .3em 0 .5em 0;
3152
+ }
3153
 
3154
  .elfinder-info-tb {
3155
+ min-width: 200px;
3156
+ border: 0 solid;
3157
+ margin: 1em .2em 1em .2em;
3158
+ width: 100%;
3159
+ }
3160
+
3161
+ .elfinder-info-tb td {
3162
+ white-space: pre-wrap;
3163
+ padding: 2px;
3164
+ }
3165
+
3166
+ .elfinder-info-tb td.elfinder-info-label {
3167
+ white-space: nowrap;
3168
+ }
3169
+
3170
+ .elfinder-info-tb td.elfinder-info-hash {
3171
+ display: inline-block;
3172
+ word-break: break-all;
3173
+ max-width: 32ch;
3174
+ }
3175
+
3176
+ .elfinder-ltr .elfinder-info-tb tr td:first-child {
3177
+ text-align: right;
3178
+ }
3179
+
3180
+ .elfinder-ltr .elfinder-info-tb span {
3181
+ float: left;
3182
+ }
3183
+
3184
+ .elfinder-rtl .elfinder-info-tb tr td:first-child {
3185
+ text-align: left;
3186
+ }
3187
+
3188
+ .elfinder-rtl .elfinder-info-tb span {
3189
+ float: right;
3190
  }
3191
 
3192
+ .elfinder-info-tb a {
3193
+ outline: none;
3194
+ text-decoration: underline;
3195
+ }
3196
 
3197
+ .elfinder-info-tb a:hover {
3198
+ text-decoration: none;
3199
+ }
3200
 
3201
+ .elfinder-netmount-tb {
3202
+ margin: 0 auto;
 
 
 
 
 
 
 
3203
  }
3204
 
 
3205
  .elfinder-netmount-tb select,
3206
+ .elfinder-netmount-tb .elfinder-button-icon {
3207
+ cursor: pointer;
3208
+ }
3209
 
3210
  button.elfinder-info-button {
3211
+ margin: -3.5px 0;
3212
+ cursor: pointer;
3213
  }
3214
 
3215
  /*********************** UPLOAD DIALOG **************************/
3216
 
3217
  .elfinder-upload-dropbox {
3218
+ display: table-cell;
3219
+ text-align: center;
3220
+ vertical-align: middle;
3221
+ padding: 0.5em;
3222
+ border: 3px dashed #aaa;
3223
+ width: 9999px;
3224
+ height: 80px;
3225
+ overflow: hidden;
3226
+ word-break: keep-all;
3227
  }
3228
 
3229
  .elfinder-upload-dropbox.ui-state-hover {
3230
+ background: #dfdfdf;
3231
+ border: 3px dashed #555;
3232
  }
3233
 
3234
  .elfinder-upload-dialog-or {
3235
+ margin: .3em 0;
3236
+ text-align: center;
3237
  }
3238
 
3239
+ .elfinder-upload-dialog-wrapper {
3240
+ text-align: center;
3241
+ }
3242
 
3243
+ .elfinder-upload-dialog-wrapper .ui-button {
3244
+ position: relative;
3245
+ overflow: hidden;
3246
+ }
3247
 
3248
  .elfinder-upload-dialog-wrapper .ui-button form {
3249
+ position: absolute;
3250
+ right: 0;
3251
+ top: 0;
3252
+ width: 100%;
3253
+ opacity: 0;
3254
+ filter: Alpha(Opacity=0);
3255
  }
3256
 
3257
  .elfinder-upload-dialog-wrapper .ui-button form input {
3258
+ padding: 50px 0 0;
3259
+ font-size: 3em;
3260
+ width: 100%;
3261
  }
3262
 
 
3263
  /* dialog for elFinder itself */
3264
  .dialogelfinder .dialogelfinder-drag {
3265
+ border-left: 0 solid;
3266
+ border-top: 0 solid;
3267
+ border-right: 0 solid;
3268
+ font-weight: normal;
3269
+ padding: 2px 12px;
3270
+ cursor: move;
3271
+ position: relative;
3272
+ text-align: left;
3273
  }
3274
 
3275
+ .elfinder-rtl .dialogelfinder-drag {
3276
+ text-align: right;
3277
+ }
3278
 
3279
  .dialogelfinder-drag-close {
3280
+ position: absolute;
3281
+ top: 50%;
3282
+ margin-top: -8px;
3283
  }
3284
 
3285
+ .elfinder-ltr .dialogelfinder-drag-close {
3286
+ right: 12px;
3287
+ }
3288
 
3289
+ .elfinder-rtl .dialogelfinder-drag-close {
3290
+ left: 12px;
3291
+ }
3292
 
3293
  /*********************** RM CONFIRM **************************/
3294
  .elfinder-rm-title {
3295
+ margin-bottom: .5ex;
3296
  }
3297
 
3298
  .elfinder-rm-title .elfinder-cwd-icon {
3299
+ float: left;
3300
+ width: 48px;
3301
+ height: 48px;
3302
+ margin-right: 1em;
3303
  }
3304
 
3305
  .elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon {
3306
+ float: right;
3307
+ margin-right: 0;
3308
+ margin-left: 1em;
3309
  }
3310
 
3311
  .elfinder-rm-title strong {
3312
+ display: block;
3313
+ /*word-wrap: break-word;*/
3314
+ white-space: pre-wrap;
3315
+ word-break: normal;
3316
+ overflow: hidden;
3317
+ text-overflow: ellipsis;
3318
  }
3319
 
3320
+ .elfinder-rm-title + br {
3321
+ display: none;
3322
  }
3323
+
3324
  /* File: /css/fonts.css */
3325
+ .elfinder-font-mono {
3326
+ font-family: "Ricty Diminished", "Myrica M", Consolas, "Courier New", Courier, Monaco, monospace;
3327
+ font-size: 1.1em;
3328
+ }
3329
+
3330
+ .elfinder-contextmenu .elfinder-contextmenu-item span {
3331
+ font-size: .72em;
3332
+ }
3333
+
3334
+ .elfinder-cwd-view-icons .elfinder-cwd-filename {
3335
+ font-size: .7em;
3336
+ }
3337
+
3338
+ .elfinder-cwd-view-list td {
3339
+ font-size: .7em;
3340
+ }
3341
+
3342
+ .std42-dialog .ui-dialog-titlebar {
3343
+ font-size: .82em;
3344
+ }
3345
+
3346
+ .std42-dialog .ui-dialog-content {
3347
+ font-size: .72em;
3348
+ }
3349
+
3350
+ .std42-dialog .ui-dialog-buttonpane {
3351
+ font-size: .76em;
3352
+ }
3353
+
3354
+ .elfinder-info-tb {
3355
+ font-size: .9em;
3356
+ }
3357
+
3358
+ .elfinder-upload-dropbox {
3359
+ font-size: 1.2em;
3360
+ }
3361
+
3362
+ .elfinder-upload-dialog-or {
3363
+ font-size: 1.2em;
3364
+ }
3365
+
3366
+ .dialogelfinder .dialogelfinder-drag {
3367
+ font-size: .9em;
3368
+ }
3369
+
3370
+ .elfinder .elfinder-navbar {
3371
+ font-size: .72em;
3372
+ }
3373
+
3374
+ .elfinder-place-drag .elfinder-navbar-dir {
3375
+ font-size: .9em;
3376
+ }
3377
+
3378
+ .elfinder-quicklook-title {
3379
+ font-size: .7em;
3380
+ font-weight: normal;
3381
+ }
3382
+
3383
+ .elfinder-quicklook-info-data {
3384
+ font-size: .72em;
3385
+ }
3386
+
3387
+ .elfinder-quicklook-preview-text-wrapper {
3388
+ font-size: .9em;
3389
+ }
3390
+
3391
+ .elfinder-button-menu-item {
3392
+ font-size: .72em;
3393
+ }
3394
+
3395
+ .elfinder-button-search input {
3396
+ font-size: .8em;
3397
+ }
3398
+
3399
+ .elfinder-statusbar div {
3400
+ font-size: .7em;
3401
+ }
3402
+
3403
+ .elfinder-drag-num {
3404
+ font-size: 12px;
3405
+ }
3406
+
3407
+ .elfinder-toast {
3408
+ font-size: .76em;
3409
+ }
3410
 
3411
 
3412
  /* File: /css/navbar.css */
3416
 
3417
  /* container */
3418
  .elfinder .elfinder-navbar {
3419
+ /*box-sizing: border-box;*/
3420
+ width: 230px;
3421
+ padding: 3px 5px;
3422
+ background-image: none;
3423
+ border-top: 0 solid;
3424
+ border-bottom: 0 solid;
3425
+ overflow: auto;
3426
+ position: relative;
3427
  }
3428
 
3429
+ .elfinder .elfinder-navdock {
3430
+ box-sizing: border-box;
3431
+ width: 230px;
3432
+ height: auto;
3433
+ position: absolute;
3434
+ bottom: 0;
3435
+ overflow: auto;
3436
+ }
3437
+
3438
+ .elfinder-navdock .ui-resizable-n {
3439
+ top: 0;
3440
+ height: 20px;
3441
+ }
3442
 
3443
  /* ltr/rtl enviroment */
3444
+ .elfinder-ltr .elfinder-navbar {
3445
+ float: left;
3446
+ border-left: 0 solid;
3447
+ }
3448
+
3449
+ .elfinder-rtl .elfinder-navbar {
3450
+ float: right;
3451
+ border-right: 0 solid;
3452
+ }
3453
+
3454
+ .elfinder-ltr .ui-resizable-e {
3455
+ margin-left: 10px;
3456
+ }
3457
 
3458
  /* folders tree container */
3459
  .elfinder-tree {
3460
+ display: table;
3461
+ width: 100%;
3462
+ margin: 0 0 .5em 0;
3463
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
3464
  }
3465
 
3466
  /* one folder wrapper */
3467
+ .elfinder-navbar-wrapper, .elfinder-place-wrapper {
3468
+ }
3469
 
3470
  /* folder */
3471
+ .elfinder-navbar-dir {
3472
+ position: relative;
3473
+ display: block;
3474
+ white-space: nowrap;
3475
+ padding: 3px 12px;
3476
+ margin: 0;
3477
+ outline: 0px solid;
3478
+ border: 1px solid transparent;
3479
+ cursor: default;
3480
  }
3481
+
3482
  .elfinder-touch .elfinder-navbar-dir {
3483
+ padding: 12px 12px;
3484
  }
3485
 
3486
  /* ltr/rtl enviroment */
3487
+ .elfinder-ltr .elfinder-navbar-dir {
3488
+ padding-left: 35px;
3489
+ }
3490
+
3491
+ .elfinder-rtl .elfinder-navbar-dir {
3492
+ padding-right: 35px;
3493
+ }
3494
 
3495
  /* arrow before icon */
3496
  .elfinder-navbar-arrow {
3497
+ width: 12px;
3498
+ height: 14px;
3499
+ position: absolute;
3500
+ display: none;
3501
+ top: 50%;
3502
+ margin-top: -8px;
3503
+ background-image: url("../img/arrows-normal.png");
3504
+ background-repeat: no-repeat;
3505
+ /* border:1px solid #111;*/
3506
  }
3507
+
3508
  .elfinder-ltr .elfinder-navbar-arrow {
3509
+ left: 0;
3510
  }
3511
+
3512
+ .elfinder-rtl .elfinder-navbar-arrow {
3513
+ right: 0;
3514
  }
3515
+
3516
  .elfinder-touch .elfinder-navbar-arrow {
3517
+ -moz-transform-origin: top left;
3518
+ -moz-transform: scale(1.4);
3519
+ zoom: 1.4;
3520
+ margin-bottom: 7px;
3521
  }
3522
+
3523
  .elfinder-ltr.elfinder-touch .elfinder-navbar-arrow {
3524
  left: -3px;
3525
  margin-right: 20px;
3526
  }
3527
+
3528
  .elfinder-rtl.elfinder-touch .elfinder-navbar-arrow {
3529
  right: -3px;
3530
  margin-left: 20px;
3531
  }
3532
 
3533
+ .ui-state-active .elfinder-navbar-arrow {
3534
+ background-image: url("../img/arrows-active.png");
3535
+ }
3536
 
3537
  /* collapsed/expanded arrow view */
3538
+ .elfinder-navbar-collapsed .elfinder-navbar-arrow {
3539
+ display: block;
3540
+ }
3541
+
3542
+ .elfinder-subtree-chksubdir .elfinder-navbar-arrow {
3543
+ opacity: .25;
3544
+ filter: Alpha(Opacity=25);
3545
+ }
3546
 
3547
  /* arrow ltr/rtl enviroment */
3548
+ .elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow {
3549
+ background-position: 0 4px;
3550
+ }
 
3551
 
3552
+ .elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow {
3553
+ background-position: 0 -10px;
3554
+ }
3555
+
3556
+ .elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,
3557
+ .elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow {
3558
+ background-position: 0 -21px;
3559
+ }
3560
 
3561
  /* folder icon */
3562
  .elfinder-navbar-icon {
3563
+ width: 16px;
3564
+ height: 16px;
3565
+ position: absolute;
3566
+ top: 50%;
3567
+ margin-top: -8px;
3568
+ background-image: url("../img/toolbar.png");
3569
+ background-repeat: no-repeat;
3570
+ background-position: 0 -16px;
3571
  }
3572
 
3573
  /* ltr/rtl enviroment */
3574
+ .elfinder-ltr .elfinder-navbar-icon {
3575
+ left: 14px;
3576
+ }
3577
+
3578
+ .elfinder-rtl .elfinder-navbar-icon {
3579
+ right: 14px;
3580
+ }
3581
+
3582
+ /* places icon */
3583
+ .elfinder-places .elfinder-navbar-root .elfinder-navbar-icon {
3584
+ background-position: 0 -704px;
3585
+ }
3586
 
3587
  /* root folder */
3588
+ .elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon,
3589
+ .elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon,
3590
+ .elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon,
3591
+ .elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon,
3592
+ .elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon,
3593
+ .elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon,
3594
+ .elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon,
3595
+ .elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon,
3596
+ .elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon,
3597
+ .elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon {
3598
+ background-position: 0 0;
3599
+ background-size: contain;
3600
+ }
3601
 
3602
+ /* root icon of each volume "\9" for IE8 trick */
3603
+ .elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon {
3604
+ background-image: url("../img/volume_icon_local.svg");
3605
+ background-image: url("../img/volume_icon_local.png") \9;
3606
+ }
3607
+
3608
+ .elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon {
3609
+ background-image: url("../img/volume_icon_trash.svg");
3610
+ background-image: url("../img/volume_icon_trash.png") \9;
3611
+ }
3612
+
3613
+ .elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon {
3614
+ background-image: url("../img/volume_icon_ftp.svg");
3615
+ background-image: url("../img/volume_icon_ftp.png") \9;
3616
+ }
3617
+
3618
+ .elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon {
3619
+ background-image: url("../img/volume_icon_sql.svg");
3620
+ background-image: url("../img/volume_icon_sql.png") \9;
3621
+ }
3622
+
3623
+ .elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon {
3624
+ background-image: url("../img/volume_icon_dropbox.svg");
3625
+ background-image: url("../img/volume_icon_dropbox.png") \9;
3626
+ }
3627
+
3628
+ .elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon {
3629
+ background-image: url("../img/volume_icon_googledrive.svg");
3630
+ background-image: url("../img/volume_icon_googledrive.png") \9;
3631
+ }
3632
+
3633
+ .elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon {
3634
+ background-image: url("../img/volume_icon_onedrive.svg");
3635
+ background-image: url("../img/volume_icon_onedrive.png") \9;
3636
+ }
3637
+
3638
+ .elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon {
3639
+ background-image: url("../img/volume_icon_box.svg");
3640
+ background-image: url("../img/volume_icon_box.png") \9;
3641
+ }
3642
+
3643
+ .elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon {
3644
+ background-image: url("../img/volume_icon_zip.svg");
3645
+ background-image: url("../img/volume_icon_zip.png") \9;
3646
+ }
3647
+
3648
+ .elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon {
3649
+ background-image: url("../img/volume_icon_network.svg");
3650
+ background-image: url("../img/volume_icon_network.png") \9;
3651
+ }
3652
 
3653
  /* icon in active/hove/dropactive state */
3654
+ .ui-state-active .elfinder-navbar-icon,
3655
+ .elfinder-droppable-active .elfinder-navbar-icon,
3656
+ .ui-state-hover .elfinder-navbar-icon {
3657
+ background-position: 0 -32px;
3658
+ }
3659
 
3660
  /* ltr/rtl enviroment */
3661
+ .elfinder-ltr .elfinder-navbar-subtree {
3662
+ margin-left: 12px;
3663
+ }
3664
 
3665
+ .elfinder-rtl .elfinder-navbar-subtree {
3666
+ margin-right: 12px;
3667
+ }
3668
 
3669
  /* spinner */
3670
+ .elfinder-tree .elfinder-spinner {
3671
+ position: absolute;
3672
+ top: 50%;
3673
+ margin: -7px 0 0;
 
 
 
 
3674
  }
3675
+
3676
  /* spinner ltr/rtl enviroment */
3677
+ .elfinder-ltr .elfinder-tree .elfinder-spinner {
3678
+ left: 0;
3679
+ margin-left: -2px;
3680
+ }
3681
+
3682
+ .elfinder-rtl .elfinder-tree .elfinder-spinner {
3683
+ right: 0;
3684
+ margin-right: -2px;
3685
+ }
3686
 
3687
  /* marker */
3688
  .elfinder-navbar .elfinder-perms,
3689
  .elfinder-navbar .elfinder-lock,
3690
+ .elfinder-navbar .elfinder-symlink {
3691
+ opacity: .6;
3692
+ filter: Alpha(Opacity=60);
3693
+ }
3694
 
3695
  /* permissions marker */
3696
+ .elfinder-navbar .elfinder-perms {
3697
+ bottom: -1px;
3698
+ margin-top: -8px;
3699
+ }
3700
 
3701
  /* locked marker */
3702
+ .elfinder-navbar .elfinder-lock {
3703
+ top: -2px;
3704
+ }
3705
 
3706
  /* permissions/symlink markers ltr/rtl enviroment */
3707
+ .elfinder-ltr .elfinder-navbar .elfinder-perms {
3708
+ left: 20px;
3709
+ transform: scale(0.8);
3710
+ }
3711
+
3712
+ .elfinder-rtl .elfinder-navbar .elfinder-perms {
3713
+ right: 20px;
3714
+ transform: scale(0.8);
3715
+ }
3716
+
3717
+ .elfinder-ltr .elfinder-navbar .elfinder-lock {
3718
+ left: 20px;
3719
+ transform: scale(0.8);
3720
+ }
3721
+
3722
+ .elfinder-rtl .elfinder-navbar .elfinder-lock {
3723
+ right: 20px;
3724
+ transform: scale(0.8);
3725
+ }
3726
+
3727
+ .elfinder-ltr .elfinder-navbar .elfinder-symlink {
3728
+ left: 8px;
3729
+ transform: scale(0.8);
3730
+ }
3731
+
3732
+ .elfinder-rtl .elfinder-navbar .elfinder-symlink {
3733
+ right: 8px;
3734
+ transform: scale(0.8);
3735
+ }
3736
 
3737
  /* navbar input */
3738
+ .elfinder-navbar input {
3739
+ width: 100%;
3740
+ border: 0px solid;
3741
+ margin: 0;
3742
+ padding: 0;
3743
+ }
3744
 
3745
  /* resizable */
3746
+ .elfinder-navbar .ui-resizable-handle {
3747
+ width: 12px;
3748
+ background: transparent url('../img/resize.png') center center no-repeat;
3749
+ }
3750
+
3751
  .elfinder-nav-handle-icon {
3752
+ position: absolute;
3753
+ top: 50%;
3754
+ margin: -8px 2px 0 2px;
3755
+ opacity: .5;
3756
+ filter: Alpha(Opacity=50);
3757
+ }
3758
+
3759
+ /* pager button */
3760
+ .elfinder-navbar-pager {
3761
+ width: 100%;
3762
+ box-sizing: border-box;
3763
+ padding-top: 3px;
3764
+ padding-bottom: 3px;
3765
+ }
3766
+
3767
+ .elfinder-touch .elfinder-navbar-pager {
3768
+ padding-top: 10px;
3769
+ padding-bottom: 10px;
3770
  }
3771
 
3772
  .elfinder-places {
3773
+ border: none;
3774
+ margin: 0;
3775
+ padding: 0;
3776
  }
3777
+
3778
  .elfinder-places.elfinder-droppable-active {
3779
+ /*border:1px solid #8cafed;*/
3780
  }
3781
 
3782
  /* navbar swipe handle */
3783
  .elfinder-navbar-swipe-handle {
3784
+ position: absolute;
3785
+ top: 0px;
3786
+ height: 100%;
3787
+ width: 50px;
3788
+ pointer-events: none;
3789
  }
3790
+
3791
  .elfinder-ltr .elfinder-navbar-swipe-handle {
3792
+ left: 0px;
3793
+ background: linear-gradient(to right,
3794
+ rgba(221, 228, 235, 1) 0,
3795
+ rgba(221, 228, 235, 0.8) 5px,
3796
+ rgba(216, 223, 230, 0.3) 8px,
3797
+ rgba(0, 0, 0, 0.1) 95%,
3798
+ rgba(0, 0, 0, 0) 100%);
3799
  }
3800
+
3801
  .elfinder-rtl .elfinder-navbar-swipe-handle {
3802
+ right: 0px;
3803
+ background: linear-gradient(to left,
3804
+ rgba(221, 228, 235, 1) 0,
3805
+ rgba(221, 228, 235, 0.8) 5px,
3806
+ rgba(216, 223, 230, 0.3) 8px,
3807
+ rgba(0, 0, 0, 0.1) 95%,
3808
+ rgba(0, 0, 0, 0) 100%);
3809
  }
3810
+
3811
  /* File: /css/places.css */
3812
  /*********************************************/
3813
  /* PLACES STYLES */
3814
  /*********************************************/
3815
  /* root extra icon */
3816
  .elfinder-navbar-root .elfinder-places-root-icon {
3817
+ position: absolute;
3818
+ top: 50%;
3819
+ margin-top: -9px;
3820
+ cursor: pointer;
3821
  }
3822
+
3823
  .elfinder-ltr .elfinder-places-root-icon {
3824
+ right: 10px;
3825
  }
3826
+
3827
  .elfinder-rtl .elfinder-places-root-icon {
3828
+ left: 10px;
3829
  }
3830
+
3831
  .elfinder-navbar-expanded .elfinder-places-root-icon {
3832
+ display: block;
3833
  }
3834
 
3835
  /* dragging helper base */
3836
  .elfinder-place-drag {
3837
+ font-size: 0.8em;
3838
  }
3839
 
3840
  /* File: /css/quicklook.css */
3841
  /* quicklook window */
3842
  .elfinder-quicklook {
3843
+ position: absolute;
3844
+ background: url("../img/quicklook-bg.png");
3845
+ overflow: hidden;
3846
+ -moz-border-radius: 7px;
3847
+ -webkit-border-radius: 7px;
3848
+ border-radius: 7px;
3849
+ padding: 20px 0 40px 0;
3850
+ }
3851
+
3852
+ .elfinder-navdock .elfinder-quicklook {
3853
+ -moz-border-radius: 0;
3854
+ -webkit-border-radius: 0;
3855
+ border-radius: 0;
3856
+ font-size: 90%;
3857
+ overflow: auto;
3858
  }
3859
 
3860
  .elfinder-quicklook.elfinder-touch {
3861
+ padding: 30px 0 40px 0;
3862
  }
3863
 
3864
  .elfinder-quicklook .ui-resizable-se {
3865
+ width: 14px;
3866
+ height: 14px;
3867
+ right: 5px;
3868
+ bottom: 3px;
3869
+ background: url("../img/toolbar.png") 0 -496px no-repeat;
3870
  }
3871
+
3872
  .elfinder-quicklook.elfinder-touch .ui-resizable-se {
3873
+ -moz-transform-origin: bottom right;
3874
+ -moz-transform: scale(1.5);
3875
+ zoom: 1.5;
3876
  }
3877
 
3878
  /* quicklook fullscreen window */
3879
  .elfinder-quicklook.elfinder-quicklook-fullscreen {
3880
+ position: fixed;
3881
+ top: 0;
3882
+ right: 0;
3883
+ bottom: 0;
3884
+ left: 0;
3885
+ margin: 0;
3886
+ box-sizing: border-box;
3887
+ width: 100%;
3888
+ height: 100%;
3889
+ object-fit: contain;
3890
+ border-radius: 0;
3891
+ -moz-border-radius: 0;
3892
+ -webkit-border-radius: 0;
3893
+ -webkit-background-clip: padding-box;
3894
+ padding: 0;
3895
+ background: #000;
3896
+ display: block;
3897
  }
3898
+
3899
  /* hide titlebar in fullscreen mode */
3900
  .elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar,
3901
+ .elfinder-quicklook-fullscreen.elfinder-quicklook .ui-resizable-handle {
3902
+ display: none;
3903
+ }
3904
 
3905
  /* hide preview border in fullscreen mode */
3906
+ .elfinder-quicklook-fullscreen .elfinder-quicklook-preview {
3907
+ border: 0 solid;
3908
+ }
3909
 
3910
  /*.elfinder-quicklook-fullscreen iframe {
3911
  height: 100%;
3912
  }*/
3913
 
3914
  .elfinder-quicklook-cover {
3915
+ width: 100%;
3916
+ height: 100%;
3917
+ top: 0;
3918
+ left: 0;
3919
+ position: absolute;
3920
+ }
3921
+
3922
+ .elfinder-quicklook-cover.elfinder-quicklook-coverbg {
3923
+ /* background need to catch mouse event over browser plugin (eg PDF preview) */
3924
+ background-color: #fff;
3925
+ opacity: 0.000001;
3926
+ filter: Alpha(Opacity=0.0001);
3927
  }
3928
 
3929
  /* quicklook titlebar */
3930
  .elfinder-quicklook-titlebar {
3931
+ text-align: center;
3932
+ background: #777;
3933
+ position: absolute;
3934
+ left: 0;
3935
+ top: 0;
3936
+ width: 100%;
3937
+ height: 20px;
3938
+ -moz-border-radius-topleft: 7px;
3939
+ -webkit-border-top-left-radius: 7px;
3940
+ border-top-left-radius: 7px;
3941
+ -moz-border-radius-topright: 7px;
3942
+ -webkit-border-top-right-radius: 7px;
3943
+ border-top-right-radius: 7px;
3944
+ border: none;
3945
+ line-height: 1.2;
3946
+ }
3947
+
3948
+ .elfinder-navdock .elfinder-quicklook-titlebar {
3949
+ -moz-border-radius-topleft: 0;
3950
+ -webkit-border-top-left-radius: 0;
3951
+ border-top-left-radius: 0;
3952
+ -moz-border-radius-topright: 0;
3953
+ -webkit-border-top-right-radius: 0;
3954
+ border-top-right-radius: 0;
3955
+ cursor: default;
3956
+ }
3957
+
3958
+ .elfinder-touch .elfinder-quicklook-titlebar {
3959
+ height: 30px;
3960
+ }
3961
+
3962
+ /* window title */
3963
+ .elfinder-quicklook-title {
3964
+ display: inline-block;
3965
+ white-space: nowrap;
3966
+ overflow: hidden;
3967
+ }
3968
+
3969
+ .elfinder-touch .elfinder-quicklook-title {
3970
+ padding: 8px 0;
3971
+ }
3972
+
3973
+ /* icon "close" in titlebar */
3974
+ .elfinder-quicklook-titlebar-icon {
3975
+ position: absolute;
3976
+ left: 4px;
3977
+ top: 50%;
3978
+ margin-top: -8px;
3979
+ height: 16px;
3980
+ border: none;
3981
+ }
3982
+ .elfinder-touch .elfinder-quicklook-titlebar-icon {
3983
+ height: 22px;
3984
+ }
3985
+
3986
+ .elfinder-quicklook-titlebar-icon .ui-icon {
3987
+ position: relative;
3988
+ margin: -9px 3px 0px 0px;
3989
+ cursor: pointer;
3990
+ border-radius: 10px;
3991
+ border: 1px solid;
3992
+ opacity: .7;
3993
+ filter: Alpha(Opacity=70);
3994
+ }
3995
+
3996
+ .elfinder-quicklook-titlebar-icon .ui-icon.ui-icon-closethick {
3997
+ padding-left: 1px;
3998
+ }
3999
+
4000
+ .elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon {
4001
+ opacity: .6;
4002
+ filter: Alpha(Opacity=60);
4003
+ }
4004
+
4005
+ .elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon {
4006
+ margin-top: -5px;
4007
+ }
4008
+
4009
+ .elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right {
4010
+ left: auto;
4011
+ right: 4px;
4012
+ direction: rtl;
4013
+ }
4014
+
4015
+ .elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon {
4016
+ margin: -9px 0px 0px 3px;
4017
+ }
4018
+
4019
+ .elfinder-touch .elfinder-quicklook-titlebar .ui-icon {
4020
+ -moz-transform-origin: center center;
4021
+ -moz-transform: scale(1.2);
4022
+ zoom: 1.2;
4023
+ }
4024
+
4025
+ .elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon {
4026
+ margin-right: 10px;
4027
+ }
4028
+
4029
+ .elfinder-touch .elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon {
4030
+ margin-left: 10px;
4031
+ }
4032
+
4033
+ /* main part of quicklook window */
4034
+ .elfinder-quicklook-preview {
4035
+ overflow: hidden;
4036
+ position: relative;
4037
+ border: 0 solid;
4038
+ border-left: 1px solid transparent;
4039
+ border-right: 1px solid transparent;
4040
+ height: 100%;
4041
+ }
4042
+
4043
+ .elfinder-navdock .elfinder-quicklook-preview {
4044
+ border-left: 0;
4045
+ border-right: 0;
4046
+ }
4047
+
4048
+ .elfinder-quicklook-preview.elfinder-overflow-auto {
4049
+ overflow: auto;
4050
+ -webkit-overflow-scrolling: touch;
4051
+ }
4052
+
4053
+ /* wrapper for file info/icon */
4054
+ .elfinder-quicklook-info-wrapper {
4055
+ display: table;
4056
+ position: absolute;
4057
+ width: 100%;
4058
+ height: 100%;
4059
+ height: calc(100% - 80px);
4060
+ left: 0;
4061
+ top: 20px;
4062
+ }
4063
+
4064
+ .elfinder-navdock .elfinder-quicklook-info-wrapper {
4065
+ height: calc(100% - 20px);
4066
+ }
4067
+
4068
+ /* file info */
4069
+ .elfinder-quicklook-info {
4070
+ display: table-cell;
4071
+ vertical-align: middle;
4072
+ }
4073
+
4074
+ .elfinder-ltr .elfinder-quicklook-info {
4075
+ padding: 0 12px 0 112px;
4076
+ }
4077
+
4078
+ .elfinder-rtl .elfinder-quicklook-info {
4079
+ padding: 0 112px 0 12px;
4080
+ }
4081
+
4082
+ .elfinder-ltr .elfinder-navdock .elfinder-quicklook-info {
4083
+ padding: 0 0 0 80px;
4084
+ }
4085
+
4086
+ .elfinder-rtl .elfinder-navdock .elfinder-quicklook-info {
4087
+ padding: 0 80px 0 0;
4088
  }
4089
 
4090
+ /* file name in info */
4091
+ .elfinder-quicklook-info .elfinder-quicklook-info-data:first-child {
4092
+ color: #fff;
4093
+ font-weight: bold;
4094
+ padding-bottom: .5em;
4095
  }
4096
 
4097
+ /* other data in info */
4098
+ .elfinder-quicklook-info-data {
4099
+ clear: both;
4100
+ padding-bottom: .2em;
4101
+ color: #fff;
 
4102
  }
4103
 
4104
+ /* file icon */
4105
+ .elfinder-quicklook .elfinder-cwd-icon {
4106
+ position: absolute;
4107
+ left: 32px;
4108
+ top: 50%;
4109
+ margin-top: -20px;
4110
  }
4111
 
4112
+ .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon {
4113
+ left: 16px;
 
 
 
 
 
 
 
4114
  }
4115
 
4116
+ .elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon {
4117
+ left: auto;
4118
+ right: 32px;
4119
  }
4120
 
4121
+ .elfinder-rtl .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon {
4122
+ right: 6px;
 
 
 
 
 
 
4123
  }
4124
+
4125
+ .elfinder-quicklook .elfinder-cwd-icon:before {
4126
+ top: -10px;
4127
  }
4128
 
4129
+ .elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:before {
4130
+ left: -20px;
 
 
 
 
 
4131
  }
4132
 
4133
+ .elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:before {
4134
+ left: -14px;
 
4135
  }
4136
 
4137
+ .elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:after {
4138
+ left: -20px;
 
 
 
4139
  }
4140
 
4141
+ .elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:after {
4142
+ left: -12px;
 
 
4143
  }
4144
 
4145
+ .elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:before {
4146
+ left: auto;
4147
+ right: 40px;
4148
+ }
4149
 
4150
+ .elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:after {
4151
+ left: auto;
4152
+ right: 46px;
 
 
 
4153
  }
4154
 
4155
  /* image in preview */
4156
  .elfinder-quicklook-preview img {
4157
+ display: block;
4158
+ margin: 0 auto;
4159
  }
4160
 
4161
  /* navigation bar on quicklook window bottom */
4162
  .elfinder-quicklook-navbar {
4163
+ position: absolute;
4164
+ left: 50%;
4165
+ bottom: 4px;
4166
+ width: 140px;
4167
+ height: 32px;
4168
+ padding: 0px;
4169
+ margin-left: -70px;
4170
+ border: 1px solid transparent;
4171
+ border-radius: 19px;
4172
+ -moz-border-radius: 19px;
4173
+ -webkit-border-radius: 19px;
4174
  }
4175
 
4176
  /* navigation bar in fullscreen mode */
4177
  .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar {
4178
+ width: 188px;
4179
+ margin-left: -94px;
4180
+ padding: 5px;
4181
+ border: 1px solid #eee;
4182
+ background: #000;
4183
+ opacity: 0.4;
4184
+ filter: Alpha(Opacity=40);
4185
  }
4186
 
4187
  /* show close icon in fullscreen mode */
4188
  .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,
4189
  .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator {
4190
+ display: inline;
4191
  }
4192
 
4193
  /* icons in navbar */
4194
  .elfinder-quicklook-navbar-icon {
4195
+ width: 32px;
4196
+ height: 32px;
4197
+ margin: 0 7px;
4198
+ float: left;
4199
+ background: url("../img/quicklook-icons.png") 0 0 no-repeat;
4200
+
4201
  }
4202
 
4203
  /* fullscreen icon */
4204
  .elfinder-quicklook-navbar-icon-fullscreen {
4205
+ background-position: 0 -64px;
4206
  }
4207
 
4208
  /* exit fullscreen icon */
4209
  .elfinder-quicklook-navbar-icon-fullscreen-off {
4210
+ background-position: 0 -96px;
4211
  }
4212
 
4213
  /* prev file icon */
4214
  .elfinder-quicklook-navbar-icon-prev {
4215
+ background-position: 0 0;
4216
  }
4217
 
4218
  /* next file icon */
4219
  .elfinder-quicklook-navbar-icon-next {
4220
+ background-position: 0 -32px;
4221
  }
4222
 
4223
  /* close icon */
4224
  .elfinder-quicklook-navbar-icon-close {
4225
+ background-position: 0 -128px;
4226
+ display: none;
4227
  }
4228
 
4229
  /* icons separator */
4230
  .elfinder-quicklook-navbar-separator {
4231
+ width: 1px;
4232
+ height: 32px;
4233
+ float: left;
4234
+ border-left: 1px solid #fff;
4235
+ display: none;
4236
  }
4237
 
4238
  /* text files preview wrapper */
4239
  .elfinder-quicklook-preview-text-wrapper {
4240
+ width: 100%;
4241
+ height: 100%;
4242
+ background: #fff;
4243
+ color: #222;
4244
+ overflow: auto;
4245
+ -webkit-overflow-scrolling: touch;
4246
  }
4247
 
4248
  /* archive files preview wrapper */
4249
  .elfinder-quicklook-preview-archive-wrapper {
4250
+ width: 100%;
4251
+ height: 100%;
4252
+ background: #fff;
4253
+ color: #222;
4254
+ font-size: 90%;
4255
+ overflow: auto;
4256
+ -webkit-overflow-scrolling: touch
4257
  }
4258
 
4259
  /* archive files preview header */
4260
  .elfinder-quicklook-preview-archive-wrapper strong {
4261
+ padding: 0 5px;
4262
  }
4263
 
4264
  /* text preview */
4265
+ pre.elfinder-quicklook-preview-text,
4266
+ pre.elfinder-quicklook-preview-text.prettyprint {
4267
+ width: auto;
4268
+ height: auto;
4269
+ margin: 0;
4270
+ padding: 3px 9px;
4271
+ border: none;
4272
+ -o-tab-size: 4;
4273
+ -moz-tab-size: 4;
4274
+ tab-size: 4;
4275
+ }
4276
+
4277
+ .elfinder-quicklook-preview-charsleft hr {
4278
+ border: none;
4279
+ border-top: dashed 1px;
4280
+ }
4281
+
4282
+ .elfinder-quicklook-preview-charsleft span {
4283
+ font-size: 90%;
4284
+ font-style: italic;
4285
+ cursor: pointer;
4286
  }
4287
 
4288
  /* html/pdf preview */
4289
  .elfinder-quicklook-preview-html,
4290
  .elfinder-quicklook-preview-pdf,
4291
  .elfinder-quicklook-preview-iframe {
4292
+ width: 100%;
4293
+ height: 100%;
4294
+ background: #fff;
4295
+ margin: 0;
4296
+ border: none;
4297
+ display: block;
4298
  }
4299
 
4300
  /* swf preview container */
4301
  .elfinder-quicklook-preview-flash {
4302
+ width: 100%;
4303
+ height: 100%;
4304
  }
4305
 
4306
  /* audio preview container */
4307
  .elfinder-quicklook-preview-audio {
4308
+ width: 100%;
4309
+ position: absolute;
4310
+ bottom: 0;
4311
+ left: 0;
4312
  }
4313
 
4314
  /* audio preview using embed */
4315
  embed.elfinder-quicklook-preview-audio {
4316
+ height: 30px;
4317
+ background: transparent;
4318
  }
4319
 
4320
  /* video preview container */
4321
  .elfinder-quicklook-preview-video {
4322
+ width: 100%;
4323
+ height: 100%;
4324
  }
4325
 
4326
  /* allow user select */
4327
  .elfinder .elfinder-quicklook .elfinder-quicklook-info *,
4328
  .elfinder .elfinder-quicklook .elfinder-quicklook-preview * {
4329
+ -webkit-user-select: auto;
4330
+ -moz-user-select: text;
4331
+ -khtml-user-select: text;
4332
+ user-select: text;
4333
  }
4334
 
4335
  /* File: /css/statusbar.css */
4337
  /* STATUSBAR STYLES */
4338
  /******************************************************************/
4339
 
 
4340
  /* statusbar container */
4341
+ .elfinder-statusbar {
4342
+ display: flex;
4343
+ justify-content: space-between;
4344
+ cursor: default;
4345
+ text-align: center;
4346
+ font-weight: normal;
4347
+ padding: .2em .5em;
4348
+ border-right: 0 solid transparent;
4349
+ border-bottom: 0 solid transparent;
4350
+ border-left: 0 solid transparent;
4351
+ }
4352
+
4353
+ .elfinder-statusbar:before,
4354
+ .elfinder-statusbar:after {
4355
+ display: none;
4356
  }
4357
 
4358
  .elfinder-statusbar span {
4359
+ vertical-align: bottom;
4360
+ overflow: hidden;
4361
+ text-overflow: ellipsis;
4362
+ -o-text-overflow: ellipsis;
4363
+ }
4364
+
4365
+ .elfinder-statusbar span.elfinder-path-other {
4366
+ flex-shrink: 0;
4367
+ text-overflow: clip;
4368
+ -o-text-overflow: clip;
4369
  }
 
 
 
4370
 
4371
+ .elfinder-statusbar span.ui-state-hover,
4372
+ .elfinder-statusbar span.ui-state-active {
4373
+ border: none;
4374
+ }
4375
 
4376
+ .elfinder-statusbar span.elfinder-path-cwd {
4377
+ cursor: default;
4378
+ }
4379
 
4380
  /* path in statusbar */
4381
  .elfinder-path {
4382
+ display: flex;
4383
+ order: 1;
4384
+ flex-grow: 1;
4385
+ cursor: pointer;
4386
+ white-space: nowrap;
4387
+ overflow: hidden;
4388
+ text-overflow: ellipsis;
4389
+ -o-text-overflow: ellipsis;
4390
+ max-width: 30%\9;
4391
+ }
4392
+
4393
+ .elfinder-ltr .elfinder-path {
4394
+ text-align: left;
4395
+ float: left\9;
4396
+ }
4397
+
4398
+ .elfinder-rtl .elfinder-path {
4399
+ text-align: right;
4400
+ float: right\9;
4401
  }
 
 
4402
 
4403
  /* path in workzone (case of swipe to navbar close) */
4404
  .elfinder-workzone-path {
4405
+ position: relative;
4406
  }
4407
+
4408
  .elfinder-workzone-path .elfinder-path {
4409
+ position: relative;
4410
+ font-size: .75em;
4411
+ font-weight: normal;
4412
+ float: none;
4413
+ max-width: none;
4414
+ overflow: hidden;
4415
+ overflow-x: hidden;
4416
+ text-overflow: initial;
4417
+ -o-text-overflow: initial;
4418
+ }
4419
+
4420
+ .elfinder-mobile .elfinder-workzone-path .elfinder-path {
4421
+ overflow: auto;
4422
+ overflow-x: scroll;
4423
  }
4424
+
4425
  .elfinder-ltr .elfinder-workzone-path .elfinder-path {
4426
+ margin-left: 24px;
4427
  }
4428
+
4429
  .elfinder-rtl .elfinder-workzone-path .elfinder-path {
4430
+ margin-right: 24px;
4431
  }
4432
+
4433
  .elfinder-workzone-path .elfinder-path span {
4434
+ display: inline-block;
4435
+ padding: 5px 3px;
4436
  }
4437
+
4438
  .elfinder-workzone-path .elfinder-path span.elfinder-path-cwd {
4439
+ font-weight: bold;
4440
  }
4441
+
4442
  .elfinder-workzone-path .elfinder-path span.ui-state-hover,
4443
+ .elfinder-workzone-path .elfinder-path span.ui-state-active {
4444
+ border: none;
4445
+ }
4446
 
4447
  .elfinder-workzone-path .elfinder-path-roots {
4448
+ position: absolute;
4449
+ top: 0;
4450
+ width: 24px;
4451
+ height: 20px;
4452
+ padding: 2px;
4453
  border: none;
4454
  overflow: hidden;
4455
  }
4456
+
4457
  .elfinder-ltr .elfinder-workzone-path .elfinder-path-roots {
4458
+ left: 0;
4459
  }
4460
+
4461
  .elfinder-rtl .elfinder-workzone-path .elfinder-path-roots {
4462
+ right: 0;
4463
  }
4464
+
4465
  /* total/selected size in statusbar */
4466
+ .elfinder-stat-size {
4467
+ order: 3;
4468
+ flex-grow: 1;
4469
+ overflow: hidden;
4470
+ white-space: nowrap;
4471
+ }
4472
+
4473
+ .elfinder-ltr .elfinder-stat-size {
4474
+ text-align: right;
4475
+ float: right\9;
4476
+ }
4477
+
4478
+ .elfinder-rtl .elfinder-stat-size {
4479
+ text-align: left;
4480
+ float: left\9;
4481
+ }
4482
 
4483
+ /* info of current selected item */
4484
+ .elfinder-stat-selected {
4485
+ order: 2;
4486
+ margin: 0 .5em;
4487
+ white-space: nowrap;
4488
+ overflow: hidden;
4489
+ }
4490
 
4491
  /* File: /css/toast.css */
4492
  /*
4501
  *
4502
  * Project: https://github.com/CodeSeven/toastr
4503
  */
4504
+
4505
  .elfinder .elfinder-toast {
4506
+ position: absolute;
4507
+ top: 12px;
4508
+ right: 12px;
4509
+ max-width: 90%;
4510
+ cursor: default;
4511
  }
4512
 
4513
  .elfinder .elfinder-toast > div {
4514
+ position: relative;
4515
+ pointer-events: auto;
4516
+ overflow: hidden;
4517
+ margin: 0 0 6px;
4518
+ padding: 8px 16px 8px 50px;
4519
+ -moz-border-radius: 3px 3px 3px 3px;
4520
+ -webkit-border-radius: 3px 3px 3px 3px;
4521
+ border-radius: 3px 3px 3px 3px;
4522
+ background-position: 15px center;
4523
+ background-repeat: no-repeat;
4524
+ -moz-box-shadow: 0 0 12px #999999;
4525
+ -webkit-box-shadow: 0 0 12px #999999;
4526
+ box-shadow: 0 0 12px #999999;
4527
+ color: #FFFFFF;
4528
+ opacity: 0.9;
4529
+ filter: alpha(opacity=90);
4530
+ background-color: #030303;
4531
+ text-align: center;
4532
  }
4533
 
4534
  .elfinder .elfinder-toast > .toast-info {
4535
+ background-color: #2F96B4;
4536
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
4537
  }
4538
+
4539
  .elfinder .elfinder-toast > .toast-error {
4540
+ background-color: #BD362F;
4541
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
4542
  }
4543
+
4544
  .elfinder .elfinder-toast > .toast-success {
4545
+ background-color: #51A351;
4546
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
4547
  }
4548
+
4549
  .elfinder .elfinder-toast > .toast-warning {
4550
+ background-color: #F89406;
4551
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
4552
  }
4553
 
 
4554
  .elfinder .elfinder-toast > div button.ui-button {
4555
+ background-image: none;
4556
+ margin-top: 8px;
4557
+ padding: .5em .8em;
4558
  }
4559
 
4560
  .elfinder .elfinder-toast > .toast-success button.ui-button {
4561
+ background-color: green;
4562
+ color: #FFF;
4563
  }
4564
 
4565
  .elfinder .elfinder-toast > .toast-success button.ui-button.ui-state-hover {
4566
+ background-color: #add6ad;
4567
+ color: #254b25;
4568
+ }
4569
+
4570
+ .elfinder .elfinder-toast > .toast-info button.ui-button {
4571
+ background-color: #046580;
4572
+ color: #FFF;
4573
+ }
4574
+
4575
+ .elfinder .elfinder-toast > .toast-info button.ui-button.ui-state-hover {
4576
+ background-color: #7DC6DB;
4577
+ color: #046580;
4578
+ }
4579
+
4580
+ .elfinder .elfinder-toast > .toast-warning button.ui-button {
4581
+ background-color: #dd8c1a;
4582
+ color: #FFF;
4583
+ }
4584
+
4585
+ .elfinder .elfinder-toast > .toast-warning button.ui-button.ui-state-hover {
4586
+ background-color: #e7ae5e;
4587
+ color: #422a07;
4588
  }
4589
 
4590
  /* File: /css/toolbar.css */
4592
  /* TOOLBAR STYLES */
4593
  /*********************************************/
4594
  /* toolbar container */
4595
+ .elfinder-toolbar {
4596
+ padding: 4px 0 3px 0;
4597
+ border-left: 0 solid transparent;
4598
+ border-top: 0 solid transparent;
4599
+ border-right: 0 solid transparent;
4600
+ max-height: 50%;
4601
+ overflow-y: auto;
4602
  }
4603
 
4604
  /* container for button's group */
4605
  .elfinder-buttonset {
4606
+ margin: 1px 4px;
4607
+ float: left;
4608
+ background: transparent;
4609
+ padding: 0;
4610
+ overflow: hidden;
 
 
4611
  }
4612
 
4613
  /*.elfinder-buttonset:first-child { margin:0; }*/
4614
 
4615
  /* button */
4616
  .elfinder .elfinder-button {
4617
+ min-width: 16px;
4618
+ height: 16px;
4619
+ margin: 0;
4620
+ padding: 4px;
4621
+ float: left;
4622
+ overflow: hidden;
4623
+ position: relative;
4624
+ border: 0 solid;
4625
+ -webkit-box-sizing: content-box;
4626
+ -moz-box-sizing: content-box;
4627
+ box-sizing: content-box;
4628
+ line-height: 1;
4629
+ cursor: default;
 
 
 
 
4630
  }
4631
 
4632
+ .elfinder-rtl .elfinder-button {
4633
+ float: right;
4634
+ }
4635
 
4636
+ .elfinder-touch .elfinder-button {
4637
+ min-width: 20px;
4638
+ height: 20px;
 
 
 
 
4639
  }
4640
 
4641
+ .elfinder .ui-icon-search {
4642
+ cursor: pointer;
 
 
 
 
 
4643
  }
4644
 
4645
  /* separator between buttons, required for berder between button with ui color */
4646
  .elfinder-toolbar-button-separator {
4647
+ float: left;
4648
+ padding: 0;
4649
+ height: 24px;
4650
+ border-top: 0 solid;
4651
+ border-right: 0 solid;
4652
+ border-bottom: 0 solid;
4653
+ width: 0;
4654
+ }
4655
+
4656
+ .elfinder-rtl .elfinder-toolbar-button-separator {
4657
+ float: right;
4658
  }
4659
 
4660
  .elfinder-touch .elfinder-toolbar-button-separator {
4661
+ height: 28px;
4662
  }
4663
 
4664
  /* change icon opacity^ not button */
4665
+ .elfinder .elfinder-button.ui-state-disabled {
4666
+ opacity: 1;
4667
+ filter: Alpha(Opacity=100);
4668
+ }
4669
+
4670
  .elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon,
4671
+ .elfinder .elfinder-button.ui-state-disabled .elfinder-button-text {
4672
+ opacity: .4;
4673
+ filter: Alpha(Opacity=40);
4674
+ }
4675
 
4676
  /* rtl enviroment */
4677
+ .elfinder-rtl .elfinder-buttonset {
4678
+ float: right;
4679
+ }
4680
 
4681
  /* icon inside button */
4682
  .elfinder-button-icon {
4683
+ width: 16px;
4684
+ height: 16px;
4685
+ /*display:block;*/
4686
+ display: inline-block;
4687
+ background: url('../img/toolbar.png') no-repeat;
4688
  }
4689
+
4690
  .elfinder-button-text {
4691
+ position: relative;
4692
+ display: inline-block;
4693
+ top: -4px;
4694
+ margin: 0 2px;
4695
+ font-size: 12px;
4696
  }
4697
 
4698
  .elfinder-touch .elfinder-button-icon {
4699
+ transform: scale(1.25);
4700
+ transform-origin: top left;
4701
+ }
4702
+
4703
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon {
4704
+ transform-origin: top right;
4705
  }
4706
+
4707
  .elfinder-touch .elfinder-button-text {
4708
+ transform: translate(3px, 3px);
4709
+ top: -5px;
4710
+ }
4711
+
4712
+ .elfinder-rtl.elfinder-touch .elfinder-button-text {
4713
+ transform: translate(-3px, 3px);
4714
+ }
4715
+
4716
+ .elfinder-touch .elfinder-button-icon.elfinder-contextmenu-extra-icon {
4717
+ transform: scale(2);
4718
+ transform-origin: 12px 8px;
4719
+ }
4720
+
4721
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon.elfinder-contextmenu-extra-icon {
4722
+ transform-origin: 4px 8px;
4723
  }
4724
 
4725
  /* buttons icons */
4726
+ .elfinder-button-icon-home {
4727
+ background-position: 0 0;
4728
+ }
4729
+
4730
+ .elfinder-button-icon-back {
4731
+ background-position: 0 -112px;
4732
+ }
4733
+
4734
+ .elfinder-button-icon-forward {
4735
+ background-position: 0 -128px;
4736
+ }
4737
+
4738
+ .elfinder-button-icon-up {
4739
+ background-position: 0 -144px;
4740
+ }
4741
+
4742
+ .elfinder-button-icon-dir {
4743
+ background-position: 0 -16px;
4744
+ }
4745
+
4746
+ .elfinder-button-icon-opendir {
4747
+ background-position: 0 -32px;
4748
+ }
4749
+
4750
+ .elfinder-button-icon-reload {
4751
+ background-position: 0 -160px;
4752
+ }
4753
+
4754
+ .elfinder-button-icon-open {
4755
+ background-position: 0 -176px;
4756
+ }
4757
+
4758
+ .elfinder-button-icon-mkdir {
4759
+ background-position: 0 -192px;
4760
+ }
4761
+
4762
+ .elfinder-button-icon-mkfile {
4763
+ background-position: 0 -208px;
4764
+ }
4765
+
4766
+ .elfinder-button-icon-rm {
4767
+ background-position: 0 -832px;
4768
+ }
4769
+
4770
+ .elfinder-button-icon-trash {
4771
+ background-position: 0 -224px;
4772
+ }
4773
+
4774
+ .elfinder-button-icon-restore {
4775
+ background-position: 0 -816px;
4776
+ }
4777
+
4778
+ .elfinder-button-icon-copy {
4779
+ background-position: 0 -240px;
4780
+ }
4781
+
4782
+ .elfinder-button-icon-cut {
4783
+ background-position: 0 -256px;
4784
+ }
4785
+
4786
+ .elfinder-button-icon-paste {
4787
+ background-position: 0 -272px;
4788
+ }
4789
+
4790
+ .elfinder-button-icon-getfile {
4791
+ background-position: 0 -288px;
4792
+ }
4793
+
4794
+ .elfinder-button-icon-duplicate {
4795
+ background-position: 0 -304px;
4796
+ }
4797
+
4798
+ .elfinder-button-icon-rename {
4799
+ background-position: 0 -320px;
4800
+ }
4801
+
4802
+ .elfinder-button-icon-edit {
4803
+ background-position: 0 -336px;
4804
+ }
4805
+
4806
+ .elfinder-button-icon-quicklook {
4807
+ background-position: 0 -352px;
4808
+ }
4809
+
4810
+ .elfinder-button-icon-upload {
4811
+ background-position: 0 -368px;
4812
+ }
4813
+
4814
+ .elfinder-button-icon-download {
4815
+ background-position: 0 -384px;
4816
+ }
4817
+
4818
+ .elfinder-button-icon-info {
4819
+ background-position: 0 -400px;
4820
+ }
4821
+
4822
+ .elfinder-button-icon-extract {
4823
+ background-position: 0 -416px;
4824
+ }
4825
+
4826
+ .elfinder-button-icon-archive {
4827
+ background-position: 0 -432px;
4828
+ }
4829
+
4830
+ .elfinder-button-icon-view {
4831
+ background-position: 0 -448px;
4832
+ }
4833
+
4834
+ .elfinder-button-icon-view-list {
4835
+ background-position: 0 -464px;
4836
+ }
4837
+
4838
+ .elfinder-button-icon-help {
4839
+ background-position: 0 -480px;
4840
+ }
4841
+
4842
+ .elfinder-button-icon-resize {
4843
+ background-position: 0 -512px;
4844
+ }
4845
+
4846
+ .elfinder-button-icon-link {
4847
+ background-position: 0 -528px;
4848
+ }
4849
+
4850
+ .elfinder-button-icon-search {
4851
+ background-position: 0 -561px;
4852
+ }
4853
+
4854
+ .elfinder-button-icon-sort {
4855
+ background-position: 0 -577px;
4856
+ }
4857
+
4858
+ .elfinder-button-icon-rotate-r {
4859
+ background-position: 0 -625px;
4860
+ }
4861
+
4862
+ .elfinder-button-icon-rotate-l {
4863
+ background-position: 0 -641px;
4864
+ }
4865
+
4866
+ .elfinder-button-icon-netmount {
4867
+ background-position: 0 -688px;
4868
+ }
4869
+
4870
+ .elfinder-button-icon-netunmount {
4871
+ background-position: 0 -96px;
4872
+ }
4873
+
4874
+ .elfinder-button-icon-places {
4875
+ background-position: 0 -704px;
4876
+ }
4877
+
4878
+ .elfinder-button-icon-chmod {
4879
+ background-position: 0 -48px;
4880
+ }
4881
+
4882
+ .elfinder-button-icon-accept {
4883
+ background-position: 0 -736px;
4884
+ }
4885
+
4886
+ .elfinder-button-icon-menu {
4887
+ background-position: 0 -752px;
4888
+ }
4889
+
4890
+ .elfinder-button-icon-colwidth {
4891
+ background-position: 0 -768px;
4892
+ }
4893
+
4894
+ .elfinder-button-icon-fullscreen {
4895
+ background-position: 0 -784px;
4896
+ }
4897
+
4898
+ .elfinder-button-icon-unfullscreen {
4899
+ background-position: 0 -800px;
4900
+ }
4901
+
4902
+ .elfinder-button-icon-empty {
4903
+ background-position: 0 -848px;
4904
+ }
4905
+
4906
+ .elfinder-button-icon-undo {
4907
+ background-position: 0 -864px;
4908
+ }
4909
+
4910
+ .elfinder-button-icon-redo {
4911
+ background-position: 0 -880px;
4912
+ }
4913
+
4914
+ .elfinder-button-icon-preference {
4915
+ background-position: 0 -896px;
4916
+ }
4917
+
4918
+ .elfinder-button-icon-mkdirin {
4919
+ background-position: 0 -912px;
4920
+ }
4921
+
4922
+ .elfinder-button-icon-selectall {
4923
+ background-position: 0 -928px;
4924
+ }
4925
+
4926
+ .elfinder-button-icon-selectnone {
4927
+ background-position: 0 -944px;
4928
+ }
4929
+
4930
+ .elfinder-button-icon-selectinvert {
4931
+ background-position: 0 -960px;
4932
+ }
4933
+
4934
+ .elfinder-button-icon-opennew {
4935
+ background-position: 0 -976px;
4936
+ }
4937
+
4938
+ .elfinder-button-icon-hide {
4939
+ background-position: 0 -992px;
4940
+ }
4941
+
4942
+ .elfinder-button-icon-text {
4943
+ background-position: 0 -1008px;
4944
+ }
4945
+
4946
+ /* button icon mirroring for rtl */
4947
+ .elfinder-rtl .elfinder-button-icon-back,
4948
+ .elfinder-rtl .elfinder-button-icon-forward,
4949
+ .elfinder-rtl .elfinder-button-icon-getfile,
4950
+ .elfinder-rtl .elfinder-button-icon-help,
4951
+ .elfinder-rtl .elfinder-button-icon-redo,
4952
+ .elfinder-rtl .elfinder-button-icon-rename,
4953
+ .elfinder-rtl .elfinder-button-icon-search,
4954
+ .elfinder-rtl .elfinder-button-icon-undo,
4955
+ .elfinder-rtl .elfinder-button-icon-view-list,
4956
+ .elfinder-rtl .ui-icon-search {
4957
+ -ms-transform: scale(-1, 1);
4958
+ -webkit-transform: scale(-1, 1);
4959
+ transform: scale(-1, 1);
4960
+ }
4961
+
4962
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-back,
4963
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-forward,
4964
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-getfile,
4965
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-help,
4966
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-redo,
4967
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-rename,
4968
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-search,
4969
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-undo,
4970
+ .elfinder-rtl.elfinder-touch .elfinder-button-icon-view-list,
4971
+ .elfinder-rtl.elfinder-touch .ui-icon-search {
4972
+ -ms-transform: scale(-1.25, 1.25) translateX(16px);
4973
+ -webkit-transform: scale(-1.25, 1.25) translateX(16px);
4974
+ transform: scale(-1.25, 1.25) translateX(16px);
4975
+ }
4976
 
4977
  /* button with dropdown menu*/
4978
+ .elfinder .elfinder-menubutton {
4979
+ overflow: visible;
4980
+ }
4981
 
4982
  /* button with spinner icon */
4983
+ .elfinder-button-icon-spinner {
4984
+ background: url("../img/spinner-mini.gif") center center no-repeat;
4985
+ }
4986
 
4987
  /* menu */
4988
  .elfinder-button-menu {
4989
+ position: absolute;
4990
+ margin-top: 24px;
4991
+ padding: 3px 0;
4992
+ overflow-y: auto;
4993
  }
4994
 
4995
  .elfinder-touch .elfinder-button-menu {
4996
+ margin-top: 30px;
4997
  }
4998
 
4999
  /* menu item */
5000
  .elfinder-button-menu-item {
5001
+ white-space: nowrap;
5002
+ cursor: default;
5003
+ padding: 5px 19px;
5004
+ position: relative;
5005
  }
5006
+
5007
  .elfinder-touch .elfinder-button-menu-item {
5008
+ padding: 12px 19px
5009
  }
5010
 
5011
  /* fix hover ui class */
5012
+ .elfinder-button-menu .ui-state-hover {
5013
+ border: 0 solid;
5014
+ }
5015
 
5016
+ .elfinder-button-menu-item-separated {
5017
+ border-top: 1px solid #ccc;
5018
+ }
5019
 
5020
  .elfinder-button-menu-item .ui-icon {
5021
+ width: 16px;
5022
+ height: 16px;
5023
+ position: absolute;
5024
+ left: 2px;
5025
+ top: 50%;
5026
+ margin-top: -8px;
5027
+ display: none;
5028
+ }
5029
+
5030
+ .elfinder-button-menu-item-selected .ui-icon {
5031
+ display: block;
5032
  }
5033
 
5034
+ .elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s {
5035
+ display: none;
5036
+ }
5037
+
5038
+ .elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n {
5039
+ display: none;
5040
+ }
5041
 
5042
  /* hack for upload button */
5043
  .elfinder-button form {
5044
+ position: absolute;
5045
+ top: 0;
5046
+ right: 0;
5047
+ opacity: 0;
5048
+ filter: Alpha(Opacity=0);
5049
+ cursor: pointer;
5050
  }
5051
 
5052
+ .elfinder .elfinder-button form input {
5053
+ background: transparent;
5054
+ cursor: default;
5055
+ }
5056
 
5057
  /* search "button" */
5058
  .elfinder .elfinder-button-search {
5059
+ border: 0 solid;
5060
+ background: transparent;
5061
+ padding: 0;
5062
+ margin: 1px 4px;
5063
+ height: auto;
5064
+ min-height: 26px;
5065
+ width: 70px;
5066
+ overflow: visible;
5067
+ }
5068
+
5069
+ .elfinder .elfinder-button-search.ui-state-active {
5070
+ width: 220px;
5071
+ }
5072
+
5073
+ /* search "pull down menu" */
5074
+ .elfinder .elfinder-button-search-menu {
5075
+ font-size: 8pt;
5076
+ text-align: center;
5077
+ width: auto;
5078
+ min-width: 180px;
5079
+ position: absolute;
5080
+ top: 30px;
5081
+ padding-right: 5px;
5082
+ padding-left: 5px;
5083
+ }
5084
+
5085
+ .elfinder-ltr .elfinder-button-search-menu {
5086
+ right: 22px;
5087
+ left: auto;
5088
+ }
5089
+
5090
+ .elfinder-rtl .elfinder-button-search-menu {
5091
+ right: auto;
5092
+ left: 22px;
5093
  }
5094
 
5095
+ .elfinder-touch .elfinder-button-search-menu {
5096
+ top: 34px;
 
 
 
5097
  }
5098
 
5099
+ .elfinder .elfinder-button-search-menu div {
5100
+ margin-left: auto;
5101
+ margin-right: auto;
5102
+ margin-top: 5px;
5103
+ margin-bottom: 5px;
5104
+ display: table;
5105
  }
5106
 
5107
+ .elfinder .elfinder-button-search-menu div .ui-state-hover {
5108
+ border: 1px solid;
5109
  }
5110
 
5111
  /* ltr/rte enviroment */
5112
+ .elfinder-ltr .elfinder-button-search {
5113
+ float: right;
5114
+ margin-right: 10px;
5115
+ }
5116
+
5117
+ .elfinder-rtl .elfinder-button-search {
5118
+ float: left;
5119
+ margin-left: 10px;
5120
+ }
5121
+
5122
+ .elfinder-rtl .ui-controlgroup > .ui-controlgroup-item {
5123
+ float: right;
5124
+ }
5125
 
5126
  /* search text field */
5127
+ .elfinder-button-search input[type=text] {
5128
+ box-sizing: border-box;
5129
+ width: 100%;
5130
+ height: 26px;
5131
+ padding: 0 20px;
5132
+ line-height: 22px;
5133
+ border: 0 solid;
5134
+ border: 1px solid #aaa;
5135
+ -moz-border-radius: 12px;
5136
+ -webkit-border-radius: 12px;
5137
+ border-radius: 12px;
5138
+ outline: 0px solid;
5139
  }
5140
 
5141
  .elfinder-button-search input::-ms-clear {
5142
+ display: none;
5143
  }
5144
+
5145
  .elfinder-touch .elfinder-button-search input {
5146
+ height: 30px;
5147
+ line-height: 28px;
5148
  }
 
5149
 
5150
+ .elfinder-rtl .elfinder-button-search input {
5151
+ direction: rtl;
5152
+ }
5153
 
5154
  /* icons */
5155
  .elfinder-button-search .ui-icon {
5156
+ position: absolute;
5157
+ height: 18px;
5158
+ top: 50%;
5159
+ margin: -8px 4px 0 4px;
5160
+ opacity: .6;
5161
+ filter: Alpha(Opacity=60);
5162
  }
5163
+
5164
+ .elfinder-button-search-menu .ui-checkboxradio-icon {
5165
+ display: none;
5166
  }
5167
 
5168
  /* search/close icons */
5169
+ .elfinder-ltr .elfinder-button-search .ui-icon-search {
5170
+ left: 0;
5171
+ }
5172
+
5173
+ .elfinder-rtl .elfinder-button-search .ui-icon-search {
5174
+ right: 0;
5175
+ }
5176
+
5177
+ .elfinder-ltr .elfinder-button-search .ui-icon-close {
5178
+ right: 0;
5179
+ }
5180
+
5181
+ .elfinder-rtl .elfinder-button-search .ui-icon-close {
5182
+ left: 0;
5183
+ }
5184
 
5185
  /* toolbar swipe handle */
5186
  .elfinder-toolbar-swipe-handle {
5187
+ position: absolute;
5188
+ top: 0px;
5189
+ left: 0px;
5190
+ height: 50px;
5191
+ width: 100%;
5192
+ pointer-events: none;
5193
+ background: linear-gradient(to bottom,
5194
+ rgba(221, 228, 235, 1) 0,
5195
+ rgba(221, 228, 235, 0.8) 2px,
5196
+ rgba(216, 223, 230, 0.3) 5px,
5197
+ rgba(0, 0, 0, 0.1) 95%,
5198
+ rgba(0, 0, 0, 0) 100%);
5199
  }
5200
 
elFinder/css/elfinder.min.css CHANGED
@@ -1,9 +1,9 @@
1
  /*!
2
  * elFinder - file manager for web
3
- * Version 2.1.18 (2016-11-21)
4
  * http://elfinder.org
5
  *
6
- * Copyright 2009-2016, Studio 42
7
  * Licensed under a 3-clauses BSD license
8
  */
9
- .elfinder-dialog-resize{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{float:left}.elfinder-resize-control input[type=text]{border:1px solid #aaa;text-align:right;width:4em}.elfinder-resize-control input.elfinder-resize-bg{text-align:center;width:5em;direction:ltr}.elfinder-dialog-resize .elfinder-resize-imgrotate,.elfinder-dialog-resize .elfinder-resize-pallet{cursor:pointer}.elfinder-dialog-resize .elfinder-resize-picking{cursor:crosshair}.elfinder-dialog-resize .elfinder-resize-grid8+button{padding-top:2px;padding-bottom:2px}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:hidden;text-align:left;direction:ltr}.elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader,.elfinder-resize-handle,div.elfinder-cwd-wrapper-list tr.ui-state-default td{position:relative}.elfinder-resize-handle-hline,.elfinder-resize-handle-vline{position:absolute;background-image:url(../img/crop.gif)}.elfinder-resize-handle-hline{width:100%;height:1px!important;background-repeat:repeat-x}.elfinder-resize-handle-vline{width:1px!important;height:100%;background-repeat:repeat-y}.elfinder-resize-handle-hline-top{top:0;left:0}.elfinder-resize-handle-hline-bottom{bottom:0;left:0}.elfinder-resize-handle-vline-left{top:0;left:0}.elfinder-resize-handle-vline-right{top:0;right:0}.elfinder-resize-handle-point{position:absolute;width:8px;height:8px;border:1px solid #777;background:0 0}.elfinder-resize-handle-point-n{top:0;left:50%;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-e,.elfinder-resize-handle-point-ne{top:0;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-e{top:50%}.elfinder-resize-handle-point-se{bottom:0;right:0;margin-bottom:-5px;margin-right:-5px}.elfinder-resize-handle-point-s,.elfinder-resize-handle-point-sw{bottom:0;left:50%;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-sw{left:0}.elfinder-resize-handle-point-nw,.elfinder-resize-handle-point-w{top:50%;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-nw{top:0}.elfinder-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:9px;position:relative}.elfinder-resize-label{float:left;width:80px;padding-top:3px}.elfinder-resize-checkbox-label{border:1px solid transparent}.elfinder-dialog .elfinder-dialog-resize .elfinder-resize-whctrls{margin:-20px 5px 0}.elfinder-ltr .elfinder-dialog .elfinder-dialog-resize .elfinder-resize-whctrls{float:right}.elfinder-help-team div,.elfinder-info-tb span,.elfinder-rtl .elfinder-dialog .elfinder-dialog-resize .elfinder-resize-whctrls{float:left}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e,.elfinder-dialog .elfinder-dialog-resize .ui-resizable-w{height:100%;width:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-n,.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e{margin-right:-7px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-w{margin-left:-7px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s{margin-bottom:-7px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-n{margin-top:-7px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-ne,.elfinder-dialog .elfinder-dialog-resize .ui-resizable-nw,.elfinder-dialog .elfinder-dialog-resize .ui-resizable-se,.elfinder-dialog .elfinder-dialog-resize .ui-resizable-sw{width:10px;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 .elfinder-dialog-resize .ui-resizable-sw{margin-left:-7px;margin-bottom:-7px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-ne{margin-right:-7px;margin-top:-7px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-nw{margin-left:-7px;margin-top:-7px}.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-n,.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-s{height:20px}.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-e,.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-w{width:20px}.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-ne,.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-nw,.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-se,.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .ui-resizable-sw{width:30px;height:30px}.elfinder-touch .elfinder-dialog .elfinder-dialog-resize .elfinder-resize-preview .ui-resizable-se{width:30px;height:30px;zoom:1;margin:0}.elfinder-dialog-resize .ui-icon-grip-solid-vertical{position:absolute;top:50%;right:0;margin-top:-8px;margin-right:-11px}.elfinder-dialog-resize .ui-icon-grip-solid-horizontal{position:absolute;left:50%;bottom:0;margin-left:-8px;margin-bottom:-11px}.elfinder-dialog-resize .elfinder-resize-row .ui-buttonset{float:right}.elfinder-dialog-resize .elfinder-resize-degree input,.elfinder-dialog-resize .elfinder-resize-quality input{width:2.5em}.elfinder-dialog-resize .elfinder-resize-degree button.ui-button{padding:6px 8px}.elfinder-dialog-resize button.ui-button span{padding:0}.ui-widget-content .elfinder-dialog-resize .elfinder-resize-rotate-slider{width:195px;margin:10px 7px;background-color:#fafafa}.elfinder-dialog-resize .elfinder-resize-type span.ui-checkboxradio-icon{display:none}.elfinder-file-edit{width:100%;height:99%;margin:0;padding:2px;border:1px solid #ccc;box-sizing:border-box}.elfinder-touch .elfinder-file-edit{font-size:16px}.elfinder-touch.elfinder-fullscreen-native textarea.elfinder-file-edit{padding-bottom:20em;margin-bottom:-20em}div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{position:absolute;top:4px;left:0;right:0;margin:auto 0 auto auto}.elfinder-touch div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{top:7px}.elfinder-rtl div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{margin:auto auto auto 0}.elfinder-help{margin-bottom:.5em}.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,.std42-dialog .ui-dialog-buttonpane button span.ui-icon{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-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-help-debug{height:auto;padding:0;margin:0;overflow:none;border:none}.elfinder-help-debug .ui-tabs-panel{height:310px;padding:0;margin:0;overflow:auto}.elfinder-help-debug fieldset{margin-bottom:10px;border-color:#789;border-radius:10px}.elfinder-help-debug legend{font-size:1.2em;font-weight:700;color:#2e8b57}.elfinder-help-debug dl{margin:0}.elfinder-help-debug dt{color:#789}.elfinder-help-debug dt:before{content:"["}.elfinder-help-debug dt:after{content:"]"}.elfinder-help-debug dd{margin-left:1em}.elfinder-info-title .elfinder-cwd-bgurl:after{left:-28px}.elfinder-info-title .elfinder-cwd-icon-video:after{left:-7px}.elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{position:absolute;bottom:2px;width:16px;height:16px;padding:10px;border:none;overflow:hidden;cursor:pointer}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon,.elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{left:2px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon,.elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{right:2px}.ui-front{z-index:100}.elfinder{padding:0;position:relative;display:block;font-size:18px;font-family:Verdana,Arial,Helvetica,sans-serif}.elfinder.elfinder-processing *{cursor:progress!important}.elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after{position:absolute;top:0;width:100%;height:3px;content:'';left:0;background-image:url(../img/progress.gif);opacity:.6;pointer-events:none}.elfinder :not(input):not(textarea):not(select):not([contenteditable=true]),.elfinder-contextmenu :not(input):not(textarea):not(select):not([contenteditable=true]){-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;user-select:none}.elfinder .overflow-scrolling-touch{-webkit-overflow-scrolling:touch}.elfinder-rtl{text-align:right;direction:rtl}.elfinder-workzone{padding:0;position:relative;overflow:hidden}.elfinder-lock,.elfinder-perms,.elfinder-symlink{position:absolute;width:16px;height:16px;background-image:url(../img/toolbar.png);background-repeat:no-repeat}.elfinder-perms,.elfinder-symlink{background-position:0 -528px}.elfinder-na .elfinder-perms{background-position:0 -96px}.elfinder-ro .elfinder-perms{background-position:0 -64px}.elfinder-wo .elfinder-perms{background-position:0 -80px}.elfinder-group .elfinder-perms{background-position:0 0}.elfinder-lock{background-position:0 -656px}.elfinder-drag-helper{top:0;left:0;width:70px;height:60px;padding:0 0 0 25px;z-index:100000;will-change:left,top}.elfinder-drag-helper.html5-native{position:absolute;top:-1000px;left:-1000px}.elfinder-drag-helper-icon-status{position:absolute;width:16px;height:16px;left:42px;top:60px;background:url(../img/toolbar.png) 0 -96px no-repeat;display:block}.elfinder-drag-helper-move .elfinder-drag-helper-icon-status{background-position:0 -720px}.elfinder-drag-helper-plus .elfinder-drag-helper-icon-status{background-position:0 -544px}.elfinder-drag-num{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 [contentEditable=true]:empty:not(:focus):before{content:attr(data-ph)}.elfinder div.elfinder-bottomtray{position:fixed;bottom:0;max-width:100%;opacity:.8}.elfinder.elfinder-ltr div.elfinder-bottomtray{left:0}.elfinder.elfinder-rtl div.elfinder-bottomtray{right:0}.elfinder .elfinder-contextmenu,.elfinder .elfinder-contextmenu-sub{position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0;top:0;left:0}.elfinder .elfinder-contextmenu-sub{top:5px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder .elfinder-contextmenu-header{margin-top:-4px;padding:0 .5em .2ex;border:none;text-align:center}.elfinder .elfinder-contextmenu-header span{font-size:.8em;font-weight:bolder}.elfinder .elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder .elfinder-contextmenu-item.ui-state-active{border:none}.elfinder .elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:auto;right:auto;top:50%;margin-top:-8px}.elfinder-touch .elfinder-contextmenu-item{padding:12px 38px}.elfinder-navbar-root-local.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_local.png)}.elfinder-navbar-root-ftp.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_ftp.png)}.elfinder-navbar-root-sql.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_sql.png)}.elfinder-navbar-root-dropbox.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_dropbox.png)}.elfinder-navbar-root-googledrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_googledrive.png)}.elfinder-navbar-root-onedrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_onedrive.png)}.elfinder-navbar-root-box.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_box.png)}.elfinder .elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-right:12px}.elfinder .elfinder-contextmenu-arrow,.elfinder .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px;overflow:hidden}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon{right:8px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon{left:8px}.elfinder .elfinder-contextmenu-arrow{width:16px;height:16px;background:url(../img/arrows-normal.png) 5px 4px no-repeat}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder .elfinder-contextmenu-extra-icon a,.elfinder .elfinder-contextmenu-extra-icon span{display:inline-block;width:100%;height:100%;padding:20px;margin:0;color:transparent!important;text-decoration:none;cursor:pointer}.elfinder .elfinder-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder .elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder .elfinder-button-icon.ui-state-disabled{background-image:url(../img/toolbar.png)!important}.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-file .elfinder-cwd-select{position:absolute;top:0;left:0;width:30px;height:30px;background-color:transparent;opacity:.4;filter:Alpha(Opacity=40)}.elfinder-cwd-file.ui-selected .elfinder-cwd-select{opacity:.8;filter:Alpha(Opacity=80)}.elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select{left:auto;right:0}.elfinder .elfinder-cwd-selectall{position:absolute;width:30px;height:30px;top:0;opacity:.8;filter:Alpha(Opacity=80)}.elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall{display:none}.elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall{text-align:right;right:18px;left:auto}.elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall{text-align:left;right:auto;left:18px}.elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{right:0}.elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{left:0}.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover{background-color:transparent}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:80px;padding-bottom:2px;cursor:default;border:none;position:relative}.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-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon,.elfinder-navbar-root-local .elfinder-cwd-icon{background-image:url(../img/volume_icon_local.png);background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/volume_icon_local.png);background-size:contain;background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon,.elfinder-navbar-root-ftp .elfinder-cwd-icon{background-image:url(../img/volume_icon_ftp.png);background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/volume_icon_ftp.png);background-size:contain;background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon,.elfinder-navbar-root-sql .elfinder-cwd-icon{background-image:url(../img/volume_icon_sql.png);background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/volume_icon_sql.png);background-size:contain;background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon,.elfinder-navbar-root-dropbox .elfinder-cwd-icon{background-image:url(../img/volume_icon_dropbox.png);background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/volume_icon_dropbox.png);background-size:contain;background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon,.elfinder-navbar-root-googledrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_googledrive.png);background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/volume_icon_googledrive.png);background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon,.elfinder-navbar-root-onedrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_onedrive.png);background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/volume_icon_onedrive.png);background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon,.elfinder-navbar-root-box .elfinder-cwd-icon{background-image:url(../img/volume_icon_box.png);background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/volume_icon_box.png);background-size:contain}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon,.elfinder-navbar-root-network .elfinder-cwd-icon{background-image:url(../img/toolbar.png);background-position:0 86%;background-size:cover}.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon{background-image:url(../img/toolbar.png);background-size:cover;background-position:1px -1px}.elfinder-cwd-icon.elfinder-cwd-bgurl{background-position:center center;background-repeat:no-repeat}.elfinder-cwd-icon.elfinder-cwd-bgurl,.elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself{-moz-background-size:cover;background-size:cover}.elfinder-cwd-bgurl:after{content:' ';position:relative;display:inline-block;top:36px;left:-38px;width:48px;height:48px;background:url(../img/icons-big.png) 0 0 no-repeat;background-size:auto!important;opacity:.8;filter:Alpha(Opacity=60);-webkit-transform-origin:54px -24px;-webkit-transform:scale(.6);-moz-transform-origin:54px -24px;-moz-transform:scale(.6);-ms-transform-origin:54px -24px;-ms-transform:scale(.6);-o-transform-origin:54px -24px;-o-transform:scale(.6);transform-origin:54px -24px;transform:scale(.6)}.elfinder-cwd-icon-image:after,.elfinder-cwd-view-list .elfinder-cwd-icon.elfinder-cwd-icon-video.elfinder-cwd-bgurl:after{content:none}.elfinder-cwd-icon-video:after{top:32px;left:-26px;height:25px;width:22px;background-position:0 -373px;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon{background-position:0 -100px}.elfinder-cwd .elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-icon-directory{background-position:0 -50px}.elfinder-cwd-icon-application,.elfinder-cwd-icon-application:after{background-position:0 -150px}.elfinder-cwd-icon-text,.elfinder-cwd-icon-text:after,.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-x-empty:after{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-image:after,.elfinder-cwd-icon-postscript,.elfinder-cwd-icon-postscript:after,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-vnd-adobe-photoshop:after{background-position:0 -250px}.elfinder-cwd-icon-audio,.elfinder-cwd-icon-audio:after{background-position:0 -300px}.elfinder-cwd-icon-flash-video,.elfinder-cwd-icon-video{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtf:after,.elfinder-cwd-icon-rtfd,.elfinder-cwd-icon-rtfd:after{background-position:0 -401px}.elfinder-cwd-icon-pdf,.elfinder-cwd-icon-pdf:after{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-ms-excel:after,.elfinder-cwd-icon-msword,.elfinder-cwd-icon-msword:after,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel:after,.elfinder-cwd-icon-vnd-ms-office,.elfinder-cwd-icon-vnd-ms-office:after,.elfinder-cwd-icon-vnd-ms-powerpoint,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint:after,.elfinder-cwd-icon-vnd-ms-word,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-word:after,.elfinder-cwd-icon-vnd-oasis-opendocument-chart,.elfinder-cwd-icon-vnd-oasis-opendocument-chart:after,.elfinder-cwd-icon-vnd-oasis-opendocument-database,.elfinder-cwd-icon-vnd-oasis-opendocument-database:after,.elfinder-cwd-icon-vnd-oasis-opendocument-formula,.elfinder-cwd-icon-vnd-oasis-opendocument-formula:after,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics:after,.elfinder-cwd-icon-vnd-oasis-opendocument-image,.elfinder-cwd-icon-vnd-oasis-opendocument-image:after,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation:after,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text:after,.elfinder-cwd-icon-vnd-openofficeorg-extension,.elfinder-cwd-icon-vnd-openofficeorg-extension:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:after{background-position:0 -500px}.elfinder-cwd-icon-html,.elfinder-cwd-icon-html:after{background-position:0 -550px}.elfinder-cwd-icon-css,.elfinder-cwd-icon-css:after{background-position:0 -600px}.elfinder-cwd-icon-javascript,.elfinder-cwd-icon-javascript:after,.elfinder-cwd-icon-x-javascript,.elfinder-cwd-icon-x-javascript:after{background-position:0 -650px}.elfinder-cwd-icon-x-perl,.elfinder-cwd-icon-x-perl:after{background-position:0 -700px}.elfinder-cwd-icon-x-python,.elfinder-cwd-icon-x-python:after{background-position:0 -750px}.elfinder-cwd-icon-x-ruby,.elfinder-cwd-icon-x-ruby:after{background-position:0 -800px}.elfinder-cwd-icon-x-sh,.elfinder-cwd-icon-x-sh:after,.elfinder-cwd-icon-x-shellscript,.elfinder-cwd-icon-x-shellscript:after{background-position:0 -850px}.elfinder-cwd-icon-x-c,.elfinder-cwd-icon-x-c--,.elfinder-cwd-icon-x-c--:after,.elfinder-cwd-icon-x-c--hdr,.elfinder-cwd-icon-x-c--hdr:after,.elfinder-cwd-icon-x-c--src,.elfinder-cwd-icon-x-c--src:after,.elfinder-cwd-icon-x-c:after,.elfinder-cwd-icon-x-chdr,.elfinder-cwd-icon-x-chdr:after,.elfinder-cwd-icon-x-csrc,.elfinder-cwd-icon-x-csrc:after,.elfinder-cwd-icon-x-java,.elfinder-cwd-icon-x-java-source,.elfinder-cwd-icon-x-java-source:after,.elfinder-cwd-icon-x-java:after{background-position:0 -900px}.elfinder-cwd-icon-x-php,.elfinder-cwd-icon-x-php:after{background-position:0 -950px}.elfinder-cwd-icon-xml,.elfinder-cwd-icon-xml:after{background-position:0 -1000px}.elfinder-cwd-icon-x-7z-compressed,.elfinder-cwd-icon-x-7z-compressed:after,.elfinder-cwd-icon-x-xz,.elfinder-cwd-icon-x-xz:after,.elfinder-cwd-icon-x-zip,.elfinder-cwd-icon-x-zip:after,.elfinder-cwd-icon-zip,.elfinder-cwd-icon-zip:after{background-position:0 -1050px}.elfinder-cwd-icon-x-gzip,.elfinder-cwd-icon-x-gzip:after,.elfinder-cwd-icon-x-tar,.elfinder-cwd-icon-x-tar:after{background-position:0 -1100px}.elfinder-cwd-icon-x-bzip,.elfinder-cwd-icon-x-bzip2,.elfinder-cwd-icon-x-bzip2:after,.elfinder-cwd-icon-x-bzip:after{background-position:0 -1150px}.elfinder-cwd-icon-x-rar,.elfinder-cwd-icon-x-rar-compressed,.elfinder-cwd-icon-x-rar-compressed:after,.elfinder-cwd-icon-x-rar:after{background-position:0 -1200px}.elfinder-cwd-icon-x-shockwave-flash,.elfinder-cwd-icon-x-shockwave-flash:after{background-position:0 -1250px}.elfinder-cwd-icon-group{background-position:0 -1300px}.elfinder-cwd-filename input{width:100%;border:none;margin:0;padding:0}.elfinder-cwd-view-icons,.elfinder-cwd-view-icons input{text-align:center}.elfinder-cwd-view-icons textarea{width:100%;border:0 solid;margin:0;padding:0;text-align:center;overflow:hidden;resize:none}.elfinder-cwd-wrapper.elfinder-cwd-fixheader .elfinder-cwd::after{display:none}.elfinder-cwd table{width:100%;border-collapse:separate;border:0 solid;margin:0 0 10px;border-spacing:0;box-sizing:padding-box;padding:2px;position:relative}.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader{position:absolute;overflow:hidden}.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before{content:'';position:absolute;width:100%;top:0;height:3px;background-color:#fff}.elfinder-droppable-active+.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before{background-color:#8cafed}.elfinder .elfinder-workzone div.elfinder-cwd-fixheader table{table-layout:fixed}.elfinder-ltr .elfinder-cwd thead .elfinder-cwd-selectall{text-align:left;right:auto;left:0;padding-top:3px}.elfinder-rtl .elfinder-cwd thead .elfinder-cwd-selectall{text-align:right;right:0;left:auto;padding-top:3px}.elfinder-touch .elfinder-cwd thead .elfinder-cwd-selectall{padding-top:5px}.elfinder .elfinder-cwd table thead tr{border-left:0 solid;border-top:0 solid;border-right:0 solid}.elfinder .elfinder-cwd table thead td{padding:4px 14px}.elfinder-ltr .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding:4px 14px 4px 22px}.elfinder-rtl .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding:4px 22px 4px 14px}.elfinder .elfinder-cwd table thead td.ui-state-active{background:#ebf1f6;background:-moz-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebf1f6),color-stop(50%,#abd3ee),color-stop(51%,#89c3eb),color-stop(100%,#d5ebfb));background:-webkit-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-o-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-ms-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:linear-gradient(to bottom,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebf1f6', endColorstr='#d5ebfb',GradientType=0 )}.elfinder .elfinder-cwd table td{padding:4px 12px;white-space:pre;overflow:hidden;text-align:right;cursor:default;border:0 solid}.elfinder .elfinder-cwd table tbody td:first-child{position:relative}.elfinder .elfinder-cwd table td div{box-sizing:content-box}tr.elfinder-cwd-file td .elfinder-cwd-select{width:40px;padding-top:3px}.elfinder-touch tr.elfinder-cwd-file td .elfinder-cwd-select{padding-top:10px}.elfinder-touch .elfinder-cwd tr td{padding:10px 12px}.elfinder-touch .elfinder-cwd table thead td{padding:8px 14px}.elfinder-touch .elfinder-cwd tr.elfinder-cwd-file td{padding:13px 12px}.elfinder-ltr .elfinder-cwd table td{text-align:right}.elfinder-ltr .elfinder-cwd table td:first-child{text-align:left}.elfinder-rtl .elfinder-cwd table td{text-align:left}.elfinder-info-tb tr td:first-child,.elfinder-rtl .elfinder-cwd table td:first-child{text-align:right}.elfinder-odd-row{background:#eee}.elfinder-cwd-view-list .elfinder-cwd-file-wrapper{width:97%;position:relative}.elfinder-ltr .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper{margin-left:8px}.elfinder-rtl .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper{margin-right:8px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename{padding-left:23px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-filename{padding-right:23px}.elfinder-cwd-view-list .elfinder-lock,.elfinder-cwd-view-list .elfinder-perms,.elfinder-cwd-view-list .elfinder-symlink{margin-top:-6px;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-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}.elfinder-cwd-view-list thead td .ui-resizable-handle{height:100%;top:3px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-handle{top:-5px;margin:10px}.elfinder-cwd-view-list thead td .ui-resizable-e{right:-7px}.elfinder-cwd-view-list thead td .ui-resizable-w{left:-7px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-e{right:-16px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-w{left:-16px}.elfinder-cwd-wrapper-empty .elfinder-cwd-view-list.elfinder-cwd:after{margin-top:0}.std42-dialog{padding:0;position:absolute;left:auto;right:auto}.std42-dialog.elfinder-dialog-minimized{overFlow:hidden;position:relative;float:left;width:auto}.elfinder-rtl .std42-dialog.elfinder-dialog-minimized{float:right}.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.elfinder-dialog-minimized .ui-dialog-titlebar{padding:0 .5em;height:20px}.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar{padding:.3em .5em}.std42-dialog.ui-draggable-disabled .ui-dialog-titlebar{cursor:default}.std42-dialog .ui-dialog-titlebar .ui-widget-header{border:none;cursor:pointer}.std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title{display:inherit;word-break:break-all}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title{display:list-item;display:-moz-inline-box;white-space:nowrap;word-break:normal;overflow:hidden;word-wrap:normal;overflow-wrap:normal;max-width:-webkit-calc(100% - 24px);max-width:-moz-calc(100% - 24px);max-width:calc(100% - 24px)}.elfinder-touch .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title{padding-top:.15em}.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title{max-width:-webkit-calc(100% - 36px);max-width:-moz-calc(100% - 36px);max-width:calc(100% - 36px)}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button{position:relative;float:left;top:10px;left:-10px;right:10px;width:20px;height:20px;padding:1px;margin:-10px 1px 0;background-color:transparent;background-image:none}.elfinder-touch .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button{transform:scale(1.1);zoom:1.1;margin-left:5px;margin-right:5px}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right{float:right;left:10px;right:-10px}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{width:17px;height:17px;border-width:1px;border-color:transparent;opacity:.7;filter:Alpha(Opacity=70);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{opacity:1;filter:Alpha(Opacity=100)}.elfinder-mobile .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-icon,.std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover .ui-icon{background-color:#ff6252;border-color:#e5695d}.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize .ui-icon,.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize:hover .ui-icon{background-color:#ffbc00;border-color:#e3a40b}.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full .ui-icon,.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full:hover .ui-icon{background-color:#26c82f;border-color:#13ae10}.elfinder-touch .std42-dialog.ui-dialog:not(ui-resizable-disabled) .ui-resizable-se{width:12px;height:12px;zoom:1.5;right:-7px;bottom:-7px;margin:3px 7px 7px 3px;background-position:-64px -224px}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar{text-align:right}.std42-dialog .ui-dialog-content{padding:.3em .5em;box-sizing:border-box}.elfinder .std42-dialog .ui-dialog-content,.elfinder .std42-dialog .ui-dialog-content *{-webkit-user-select:auto;-moz-user-select:text;-khtml-user-select:text;user-select:text}.std42-dialog .ui-dialog-buttonpane{border:0 solid;margin:0;padding:.5em;text-align:right}.elfinder-rtl .std42-dialog .ui-dialog-buttonpane{text-align:left}.std42-dialog .ui-dialog-buttonpane button{margin:.7em 0 0 .4em;padding:.2em;outline:0 solid}.std42-dialog .ui-dialog-buttonpane button span{padding:2px 9px}.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:10px;top:50%;margin-top:-15px;background:url(../img/dialogs.png) 0 0 no-repeat}.elfinder-rtl .elfinder-dialog-icon{left:auto;right:10px}.elfinder-dialog-confirm .ui-dialog-content,.elfinder-dialog-error .ui-dialog-content{padding-left:56px;min-height:35px}.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content,.elfinder-rtl .elfinder-dialog-error .ui-dialog-content{padding-left:0;padding-right:56px}.elfinder-dialog-notify .ui-dialog-titlebar-close,.elfinder-rm-title+br{display:none}.elfinder-dialog-notify .ui-dialog-content{padding:0}.elfinder-notify{border-bottom:1px solid #ccc;position:relative;padding:.5em;text-align:center;overflow:hidden}.elfinder-ltr .elfinder-notify{padding-left:36px}.elfinder-rtl .elfinder-notify{padding-right:36px}.elfinder-notify:last-child{border:0 solid}.elfinder-notify-progressbar{width:180px;height:8px;border:1px solid #aaa;background:#f5f5f5;margin:5px auto;overflow:hidden}.elfinder-notify-progress{width:100%;height:8px;background:url(../img/progress.gif) center center repeat-x}.elfinder-notify-progress,.elfinder-notify-progressbar{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.elfinder-dialog-icon-file,.elfinder-dialog-icon-open,.elfinder-dialog-icon-readdir,.elfinder-dialog-icon-reload{background-position:0 -225px}.elfinder-dialog-icon-mkdir{background-position:0 -64px}.elfinder-dialog-icon-mkfile{background-position:0 -96px}.elfinder-dialog-icon-copy,.elfinder-dialog-icon-move,.elfinder-dialog-icon-prepare{background-position:0 -128px}.elfinder-dialog-icon-chunkmerge,.elfinder-dialog-icon-upload{background-position:0 -160px}.elfinder-dialog-icon-rm{background-position:0 -192px}.elfinder-dialog-icon-download{background-position:0 -260px}.elfinder-dialog-icon-save{background-position:0 -295px}.elfinder-dialog-icon-rename{background-position:0 -330px}.elfinder-dialog-icon-archive,.elfinder-dialog-icon-extract,.elfinder-dialog-icon-zipdl{background-position:0 -365px}.elfinder-dialog-icon-search{background-position:0 -402px}.elfinder-dialog-icon-chmod,.elfinder-dialog-icon-dim,.elfinder-dialog-icon-loadimg,.elfinder-dialog-icon-netmount,.elfinder-dialog-icon-netunmount,.elfinder-dialog-icon-preupload,.elfinder-dialog-icon-resize,.elfinder-dialog-icon-url{background-position:0 -434px}.elfinder-dialog-confirm-applyall{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,.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon{float:right;margin-right:0;margin-left:1em}.elfinder-info-title strong{display:block;padding:.3em 0 .5em}.elfinder-info-tb{min-width:200px;border:0 solid;margin:1em .2em}.elfinder-info-tb td{white-space:nowrap;padding:2px}.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,.elfinder-netmount-tb select{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{display:table-cell;text-align:center;vertical-align:middle;padding:.5em;border:3px dashed #aaa;width:9999px;height:80px;overflow:hidden;word-break:keep-all}.elfinder-upload-dropbox.ui-state-hover{background:#dfdfdf;border:3px dashed #555}.elfinder-upload-dialog-or{margin:.3em 0;text-align:center}.elfinder-upload-dialog-wrapper{text-align:center}.elfinder-upload-dialog-wrapper .ui-button{position:relative;overflow:hidden}.elfinder-upload-dialog-wrapper .ui-button form{position:absolute;right:0;top:0;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-rm-title strong{display:block;white-space:pre-wrap;word-break:normal;overflow:hidden;text-overflow:ellipsis}.elfinder-contextmenu .elfinder-contextmenu-item span{font-size:.72em}.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}.dialogelfinder .dialogelfinder-drag,.elfinder-info-tb{font-size:.9em}.elfinder-upload-dialog-or,.elfinder-upload-dropbox{font-size:1.2em}.elfinder .elfinder-navbar{font-size:.72em}.elfinder-place-drag .elfinder-navbar-dir{font-size:.9em}.elfinder-quicklook-title,.elfinder-statusbar div{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-drag-num{font-size:12px}.elfinder-toast{font-size:.76em}.elfinder .elfinder-navbar{width:230px;padding:3px 5px;background-image:none;border-top:0 solid;border-bottom:0 solid;overflow:auto;position:relative}.elfinder-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-touch .elfinder-navbar-dir{padding:12px}.elfinder-ltr .elfinder-navbar-dir{padding-left:35px}.elfinder-rtl .elfinder-navbar-dir{padding-right:35px}.elfinder-navbar-arrow{width:12px;height:14px;position:absolute;display:none;top:50%;margin-top:-8px;background-image:url(../img/arrows-normal.png);background-repeat:no-repeat}.elfinder-ltr .elfinder-navbar-arrow{left:0;right:0}.elfinder-touch .elfinder-navbar-arrow{zoom:1.4;-moz-transform-origin:top left;-moz-transform:scale(1.4);margin-bottom:7px}.elfinder-ltr.elfinder-touch .elfinder-navbar-arrow{left:-3px;margin-right:20px}.elfinder-rtl.elfinder-touch .elfinder-navbar-arrow{right:-3px;margin-left:20px}.ui-state-active .elfinder-navbar-arrow{background-image:url(../img/arrows-active.png)}.elfinder-navbar-collapsed .elfinder-navbar-arrow{display:block}.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 4px}.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 -10px}.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow{background-position:0 -21px}.elfinder-navbar-icon{width:16px;height:16px;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);background-position:0 0}.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon{background-image:url(../img/volume_icon_ftp.png);background-position:0 0}.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon{background-image:url(../img/volume_icon_sql.png);background-position:0 0}.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon{background-image:url(../img/volume_icon_dropbox.png);background-position:0 0}.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon{background-image:url(../img/volume_icon_googledrive.png);background-position:0 0}.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon{background-image:url(../img/volume_icon_onedrive.png);background-position:0 0}.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon{background-image:url(../img/volume_icon_box.png);background-position:0 0}.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon{background-image:url(../img/toolbar.png);background-position:0 -688px}.elfinder-droppable-active .elfinder-navbar-icon,.ui-state-active .elfinder-navbar-icon,.ui-state-hover .elfinder-navbar-icon{background-position:0 -32px}.elfinder-ltr .elfinder-navbar-subtree{margin-left:12px}.elfinder-rtl .elfinder-navbar-subtree{margin-right:12px}.elfinder-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-lock,.elfinder-navbar .elfinder-perms,.elfinder-navbar .elfinder-symlink{opacity:.6;filter:Alpha(Opacity=60)}.elfinder-navbar .elfinder-perms{bottom:-1px;margin-top:-8px}.elfinder-navbar .elfinder-lock{top:-2px}.elfinder-ltr .elfinder-navbar .elfinder-perms{left:20px}.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-swipe-handle{position:absolute;top:0;height:100%;width:50px;pointer-events:none}.elfinder-ltr .elfinder-navbar-swipe-handle{left:0;background:linear-gradient(to right,#dde4eb 0,rgba(221,228,235,.8) 5px,rgba(216,223,230,.3) 8px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}.elfinder-rtl .elfinder-navbar-swipe-handle{right:0;background:linear-gradient(to left,#dde4eb 0,rgba(221,228,235,.8) 5px,rgba(216,223,230,.3) 8px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}.elfinder-navbar-root .elfinder-places-root-icon{position:absolute;top:50%;margin-top:-9px;cursor:pointer}.elfinder-ltr .elfinder-places-root-icon{right:10px}.elfinder-rtl .elfinder-places-root-icon{left:10px}.elfinder-navbar-expanded .elfinder-places-root-icon{display:block}.elfinder-place-drag{font-size:.8em}.elfinder-quicklook{position:absolute;background:url(../img/quicklook-bg.png);overflow:hidden;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;padding:20px 0 40px}.elfinder-quicklook.elfinder-touch{padding:30px 0 40px}.elfinder-quicklook .ui-resizable-se{width:14px;height:14px;right:5px;bottom:3px;background:url(../img/toolbar.png) 0 -496px no-repeat}.elfinder-quicklook.elfinder-touch .ui-resizable-se{zoom:1.5}.elfinder-quicklook.elfinder-quicklook-fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;margin:0;box-sizing:border-box;width:100%;height:100%;object-fit:contain;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-background-clip:padding-box;padding:0;background:#000;display:block}.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar,.elfinder-quicklook-fullscreen.elfinder-quicklook .ui-resizable-handle{display:none}.elfinder-quicklook-fullscreen .elfinder-quicklook-preview{border:0 solid}.elfinder-quicklook-cover,.elfinder-quicklook-titlebar{width:100%;height:100%;top:0;left:0;position:absolute}.elfinder-quicklook-titlebar{text-align:center;background:#777;height:20px;-moz-border-radius-topleft:7px;-webkit-border-top-left-radius:7px;border-top-left-radius:7px;-moz-border-radius-topright:7px;-webkit-border-top-right-radius:7px;border-top-right-radius:7px;cursor:move}.elfinder-touch .elfinder-quicklook-titlebar{height:30px}.elfinder-quicklook-title{color:#fff;white-space:nowrap;overflow:hidden;padding:2px 0}.elfinder-touch .elfinder-quicklook-title{padding:8px 0}.elfinder-quicklook-titlebar .ui-icon{position:absolute;left:4px;top:50%;margin-top:-8px;width:16px;height:16px;cursor:default}.elfinder-touch .elfinder-quicklook-titlebar .ui-icon{zoom:1.5}.elfinder-quicklook-preview{overflow:hidden;position:relative;border:0 solid;border-left:1px solid transparent;border-right:1px solid transparent;height:100%}.elfinder-quicklook-preview.elfinder-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.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;opacity:.4;filter:Alpha(Opacity=40)}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator{display:inline}.elfinder-quicklook-navbar-icon{width:32px;height:32px;margin:0 7px;float:left;background:url(../img/quicklook-icons.png) 0 0 no-repeat}.elfinder-quicklook-navbar-icon-fullscreen{background-position:0 -64px}.elfinder-quicklook-navbar-icon-fullscreen-off{background-position:0 -96px}.elfinder-quicklook-navbar-icon-prev{background-position:0 0}.elfinder-quicklook-navbar-icon-next{background-position:0 -32px}.elfinder-quicklook-navbar-icon-close{background-position:0 -128px;display:none}.elfinder-quicklook-navbar-separator{width:1px;height:32px;float:left;border-left:1px solid #fff;display:none}.elfinder-quicklook-preview-archive-wrapper,.elfinder-quicklook-preview-text-wrapper{width:100%;height:100%;background:#fff;color:#222;overflow:auto;-webkit-overflow-scrolling:touch}.elfinder-quicklook-preview-archive-wrapper{font-size:1.5ex}.elfinder-quicklook-preview-archive-wrapper strong{padding:0 5px}pre.elfinder-quicklook-preview-text{width:auto;height:auto;margin:0;padding:3px 9px;border:none}.elfinder-quicklook-preview-html,.elfinder-quicklook-preview-iframe,.elfinder-quicklook-preview-pdf{width:100%;height:100%;background:#fff;margin:0;border:none;display:block}.elfinder-quicklook-preview-flash{width:100%;height:100%}.elfinder-quicklook-preview-audio{width:100%;position:absolute;bottom:0;left:0}embed.elfinder-quicklook-preview-audio{height:30px;background:0 0}.elfinder-quicklook-preview-video{width:100%;height:100%}.elfinder .elfinder-quicklook .elfinder-quicklook-info *,.elfinder .elfinder-quicklook .elfinder-quicklook-preview *{-webkit-user-select:auto;-moz-user-select:text;-khtml-user-select:text;user-select:text}.elfinder-statusbar{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 span{cursor:pointer;vertical-align:bottom;overflow:hidden;text-overflow:"..";-o-text-overflow:".."}.elfinder-statusbar span.ui-state-active,.elfinder-statusbar span.ui-state-hover{border:none}.elfinder-statusbar span.elfinder-path-cwd{cursor:default}.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-workzone-path{position:relative}.elfinder-workzone-path .elfinder-path{position:relative;font-size:.75em;font-weight:400;float:none;max-width:none;overflow-x:scroll;text-overflow:initial;-o-text-overflow:initial}.elfinder-ltr .elfinder-workzone-path .elfinder-path{margin-left:24px}.elfinder-rtl .elfinder-workzone-path .elfinder-path{margin-right:24px}.elfinder-workzone-path .elfinder-path span{display:inline-block;padding:5px 3px}.elfinder-workzone-path .elfinder-path span.elfinder-path-cwd{font-weight:700}.elfinder-workzone-path .elfinder-path span.ui-state-active,.elfinder-workzone-path .elfinder-path span.ui-state-hover{border:none}.elfinder-workzone-path .elfinder-path-roots{position:absolute;top:0;width:24px;height:20px;padding:2px;border:none;overflow:hidden}.elfinder-ltr .elfinder-workzone-path .elfinder-path-roots{left:0}.elfinder-rtl .elfinder-workzone-path .elfinder-path-roots{right:0}.elfinder-stat-size{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 .elfinder-toast{position:absolute;top:12px;right:12px;max-width:90%;cursor:default}.elfinder .elfinder-toast>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:8px 16px 8px 50px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.9;filter:alpha(opacity=90);background-color:#030303;text-align:center}.elfinder .elfinder-toast>.toast-info{background-color:#2f96b4;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>.toast-error{background-color:#bd362f;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>.toast-success{background-color:#51a351;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}.elfinder .elfinder-toast>.toast-warning{background-color:#f89406;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>div button.ui-button{background-image:none;margin-top:8px;padding:.5em .8em}.elfinder .elfinder-toast>.toast-success button.ui-button{background-color:green;color:#fff}.elfinder .elfinder-toast>.toast-success button.ui-button.ui-state-hover{background-color:#add6ad;color:#254b25}.elfinder-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{height:16px;margin:0;padding:4px;float:left;overflow:hidden;position:relative;border:0 solid;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;line-height:1;cursor:default}.elfinder-touch .elfinder-button{height:20px}.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-touch .elfinder-toolbar-button-separator{height:20px}.elfinder .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon,.elfinder .elfinder-button.ui-state-disabled .elfinder-button-text{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:inline-block;background:url(../img/toolbar.png) no-repeat}.elfinder-button-text{position:relative;display:inline-block;top:-4px;margin:0 2px;font-size:12px}.elfinder-touch .elfinder-button-icon{zoom:1.25;-moz-transform-origin:top left;-moz-transform:scale(1.25)}.elfinder-touch .elfinder-button-text{top:-5px}.elfinder-button-icon-home{background-position:0 0}.elfinder-button-icon-back{background-position:0 -112px}.elfinder-button-icon-forward{background-position:0 -128px}.elfinder-button-icon-up{background-position:0 -144px}.elfinder-button-icon-dir{background-position:0 -16px}.elfinder-button-icon-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-button-icon-menu{background-position:0 -752px}.elfinder-button-icon-colwidth{background-position:0 -768px}.elfinder-button-icon-fullscreen{background-position:0 -784px}.elfinder-button-icon-unfullscreen{background-position:0 -800px}.elfinder .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-touch .elfinder-button-menu{top:35px}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.elfinder-touch .elfinder-button-menu-item{padding:12px 19px}.elfinder-button-menu .ui-state-hover{border:0 solid}.elfinder-button-menu-item-separated{border-top:1px solid #ccc}.elfinder-button-menu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-button-menu-item-selected .ui-icon{display:block}.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n{display:none}.elfinder-button form{position:absolute;top:0;right:0;opacity:0;filter:Alpha(Opacity=0);cursor:pointer}.elfinder .elfinder-button form input{background:0 0;cursor:default}.elfinder .elfinder-button-search{border:0 solid;background:0 0;padding:0;margin:1px 4px;height:auto;min-height:26px;float:right;width:202px;overflow:visible}.elfinder .elfinder-button-search .elfinder-button-menu{font-size:8pt;text-align:center;width:100%;overflow:hidden}.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-button-search input::-ms-clear{display:none}.elfinder-touch .elfinder-button-search input{height:28px;line-height:28px}.elfinder-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-8px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-button-search .ui-checkboxradio-icon{display:none}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-ltr .elfinder-button-search .ui-icon-close,.elfinder-rtl .elfinder-button-search .ui-icon-search{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0}.elfinder-toolbar-swipe-handle{position:absolute;top:0;left:0;height:50px;width:100%;pointer-events:none;background:linear-gradient(to bottom,#dde4eb 0,rgba(221,228,235,.8) 2px,rgba(216,223,230,.3) 5px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}
1
  /*!
2
  * elFinder - file manager for web
3
+ * Version 2.1.46 (2019-02-21)
4
  * http://elfinder.org
5
  *
6
+ * Copyright 2009-2019, Studio 42
7
  * Licensed under a 3-clauses BSD license
8
  */
9
+ .elfinder-resize-container{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{float:left}.elfinder-resize-control input[type=number]{border:1px solid #aaa;text-align:right;width:4.5em}.elfinder-resize-control input.elfinder-resize-bg{text-align:center;width:5em;direction:ltr}.elfinder-dialog-resize .elfinder-resize-control-panel{margin-top:10px}.elfinder-dialog-resize .elfinder-resize-imgrotate,.elfinder-dialog-resize .elfinder-resize-pallet{cursor:pointer}.elfinder-dialog-resize .elfinder-resize-picking{cursor:crosshair}.elfinder-dialog-resize .elfinder-resize-grid8+button{padding-top:2px;padding-bottom:2px}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:hidden;text-align:left;direction:ltr}.elfinder-resize-handle,div.elfinder-cwd-wrapper-list tr.ui-state-default td{position:relative}.elfinder-resize-handle-hline,.elfinder-resize-handle-vline{position:absolute;background-image:url(../img/crop.gif)}.elfinder-resize-handle-hline{width:100%;height:1px!important;background-repeat:repeat-x}.elfinder-resize-handle-vline{width:1px!important;height:100%;background-repeat:repeat-y}.elfinder-resize-handle-hline-top{top:0;left:0}.elfinder-resize-handle-hline-bottom{bottom:0;left:0}.elfinder-resize-handle-vline-left{top:0;left:0}.elfinder-resize-handle-vline-right{top:0;right:0}.elfinder-resize-handle-point{position:absolute;width:8px;height:8px;border:1px solid #777;background:0 0}.elfinder-resize-handle-point-n{top:0;left:50%;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-e,.elfinder-resize-handle-point-ne{top:0;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-e{top:50%}.elfinder-resize-handle-point-se{bottom:0;right:0;margin-bottom:-5px;margin-right:-5px}.elfinder-resize-handle-point-s,.elfinder-resize-handle-point-sw{bottom:0;left:50%;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-sw{left:0}.elfinder-resize-handle-point-nw,.elfinder-resize-handle-point-w{top:50%;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-nw{top:0}.elfinder-dialog.elfinder-dialog-resize .ui-resizable-e{width:10px;height:100%}.elfinder-dialog.elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-resize-loading{position:absolute;width:200px;height:30px;top:50%;margin-top:-25px;left:50%;margin-left:-100px;text-align:center;background:url(../img/progress.gif) center bottom repeat-x}.elfinder-resize-row{margin-bottom:9px;position:relative}.elfinder-resize-label{float:left;width:80px;padding-top:3px}.elfinder-resize-checkbox-label{border:1px solid transparent}.elfinder-dialog-resize .elfinder-resize-whctrls{margin:-20px 5px 0}.elfinder-ltr .elfinder-dialog-resize .elfinder-resize-whctrls{float:right}.elfinder-help-team div,.elfinder-rtl .elfinder-dialog-resize .elfinder-resize-whctrls{float:left}.elfinder-dialog-resize .ui-resizable-e,.elfinder-dialog-resize .ui-resizable-w{height:100%;width:10px}.elfinder-dialog-resize .ui-resizable-n,.elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-dialog-resize .ui-resizable-e{margin-right:-7px}.elfinder-dialog-resize .ui-resizable-w{margin-left:-7px}.elfinder-dialog-resize .ui-resizable-s{margin-bottom:-7px}.elfinder-dialog-resize .ui-resizable-n{margin-top:-7px}.elfinder-dialog-resize .ui-resizable-ne,.elfinder-dialog-resize .ui-resizable-nw,.elfinder-dialog-resize .ui-resizable-se,.elfinder-dialog-resize .ui-resizable-sw{width:10px;height:10px}.elfinder-dialog-resize .ui-resizable-se{background:0 0;bottom:0;right:0;margin-right:-7px;margin-bottom:-7px}.elfinder-dialog-resize .ui-resizable-sw{margin-left:-7px;margin-bottom:-7px}.elfinder-dialog-resize .ui-resizable-ne{margin-right:-7px;margin-top:-7px}.elfinder-dialog-resize .ui-resizable-nw{margin-left:-7px;margin-top:-7px}.elfinder-touch .elfinder-dialog-resize .ui-resizable-n,.elfinder-touch .elfinder-dialog-resize .ui-resizable-s{height:20px}.elfinder-touch .elfinder-dialog-resize .ui-resizable-e,.elfinder-touch .elfinder-dialog-resize .ui-resizable-w{width:20px}.elfinder-touch .elfinder-dialog-resize .ui-resizable-ne,.elfinder-touch .elfinder-dialog-resize .ui-resizable-nw,.elfinder-touch .elfinder-dialog-resize .ui-resizable-se,.elfinder-touch .elfinder-dialog-resize .ui-resizable-sw{width:30px;height:30px}.elfinder-touch .elfinder-dialog-resize .elfinder-resize-preview .ui-resizable-se{width:30px;height:30px;margin:0}.elfinder-dialog-resize .ui-icon-grip-solid-vertical{position:absolute;top:50%;right:0;margin-top:-8px;margin-right:-11px}.elfinder-dialog-resize .ui-icon-grip-solid-horizontal{position:absolute;left:50%;bottom:0;margin-left:-8px;margin-bottom:-11px}.elfinder-dialog-resize .elfinder-resize-row .ui-buttonset{float:right}.elfinder-dialog-resize .elfinder-resize-degree input,.elfinder-dialog-resize input.elfinder-resize-quality,.elfinder-mobile .elfinder-resize-control input[type=number]{width:3.5em}.elfinder-mobile .elfinder-dialog-resize .elfinder-resize-degree input,.elfinder-mobile .elfinder-dialog-resize input.elfinder-resize-quality{width:2.5em}.elfinder-dialog-resize .elfinder-resize-degree button.ui-button{padding:6px 8px}.elfinder-dialog-resize button.ui-button span{padding:0}.elfinder-dialog-resize .elfinder-resize-jpgsize{font-size:90%}.ui-widget-content .elfinder-resize-container .elfinder-resize-rotate-slider{width:195px;margin:10px 7px;background-color:#fafafa}.elfinder-dialog-resize .elfinder-resize-type span.ui-checkboxradio-icon{display:none}.elfinder-resize-preset-container{box-sizing:border-box;border-radius:5px}.elfinder-file-edit{width:100%;height:100%;margin:0;padding:2px;border:1px solid #ccc;box-sizing:border-box;resize:none}.elfinder-touch .elfinder-file-edit{font-size:16px}.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor{background-color:#fff}.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor{width:100%;height:300px;max-height:100%;text-align:center}.elfinder-dialog-edit .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor *{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;user-select:none}.elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-main{top:0}.elfinder-edit-imageeditor .tui-image-editor-main-container .tui-image-editor-header{display:none}.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-crop .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-draw .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-filter .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-flip .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-icon .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-mask .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-rotate .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-shape .tui-image-editor-wrap,.elfinder-edit-imageeditor .tui-image-editor-main.tui-image-editor-menu-text .tui-image-editor-wrap{height:calc(100% - 150px)}.elfinder-touch.elfinder-fullscreen-native textarea.elfinder-file-edit{padding-bottom:20em;margin-bottom:-20em}.elfinder-dialog-edit .ui-dialog-buttonpane .elfinder-dialog-confirm-encoding{font-size:12px}.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras{margin:0 1em 0 .2em;float:left}.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras-quality{padding-top:6px}.ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras select{font-size:12px;margin-top:8px}.elfinder-dialog-edit .ui-dialog-buttonpane .ui-icon,.elfinder-edit-onlineconvert-bottom-btn button,.elfinder-edit-onlineconvert-button button,.elfinder-preference dt label{cursor:pointer}.elfinder-edit-spinner{position:absolute;top:50%;text-align:center;width:100%;font-size:16pt}.elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner,.elfinder-dialog-edit .elfinder-edit-spinner .elfinder-spinner-text{float:none}.elfinder-dialog-edit .elfinder-toast>div{width:280px}.elfinder-edit-onlineconvert-button{display:inline-block;width:180px;min-height:30px;vertical-align:top}.elfinder-edit-onlineconvert-bottom-btn button.elfinder-button-ios-multiline{-webkit-appearance:none;border-radius:16px;color:#000;text-align:center;padding:8px;background-color:#eee;background-image:-webkit-linear-gradient(top,#fafafa 0%,#c4c4c4 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#c4c4c4 100%)}.elfinder-edit-onlineconvert-button .elfinder-button-icon{margin:0 10px;vertical-align:middle;cursor:pointer}.elfinder-edit-onlineconvert-bottom-btn{text-align:center;margin:10px 0 0}.elfinder-edit-onlineconvert-link{margin-top:1em;text-align:center}.elfinder-edit-onlineconvert-link .elfinder-button-icon{background-image:url(../img/editor-icons.png);background-repeat:no-repeat;background-position:0 -144px;margin-bottom:-3px}.elfinder-edit-onlineconvert-link a,ul.elfinder-help-integrations a{text-decoration:none}div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{position:absolute;top:4px;left:0;right:0;margin:auto 0 auto auto}.elfinder-touch div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{top:7px}.elfinder-rtl div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{margin:auto auto auto 0}.elfinder-help{margin-bottom:.5em;-webkit-overflow-scrolling:touch}.elfinder-help .ui-tabs-panel{overflow:auto;padding:10px}.elfinder-dialog .ui-tabs .ui-tabs-nav li{overflow:hidden}.elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.2em .8em;display:inline-block}.elfinder-touch .elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.5em}.elfinder-dialog .ui-tabs-active a{background:inherit}.elfinder-help-shortcuts{height:auto;padding:10px;margin:0;box-sizing:border-box}.elfinder-help-shortcut{white-space:nowrap;clear:both}.elfinder-help-shortcut-pattern{float:left;width:160px}.elfinder-help-logo{width:100px;height:96px;float:left;margin-right:1em;background:url(../img/logo.png) center center no-repeat}.elfinder-help h3{font-size:1.5em;margin:.2em 0 .3em}.elfinder-help-separator{clear:both;padding:.5em}.elfinder-help-link{display:inline-block;margin-right:12px;padding:2px 0;white-space:nowrap}.elfinder-rtl .elfinder-help-link{margin-right:0;margin-left:12px}.elfinder-help .ui-priority-secondary{font-size:.9em}.elfinder-help .ui-priority-primary{margin-bottom:7px}.elfinder-help-team{clear:both;text-align:right;border-bottom:1px solid #ccc;margin:.5em 0;font-size:.9em}.elfinder-help-license{font-size:.9em}.elfinder-help-disabled{font-weight:700;text-align:center;margin:90px 0}.elfinder-help .elfinder-dont-panic{display:block;border:1px solid transparent;width:200px;height:200px;margin:30px auto;text-decoration:none;text-align:center;position:relative;background:#d90004;-moz-box-shadow:5px 5px 9px #111;-webkit-box-shadow:5px 5px 9px #111;box-shadow:5px 5px 9px #111;background:-moz-radial-gradient(80px 80px,circle farthest-corner,#d90004 35%,#960004 100%);background:-webkit-gradient(radial,80 80,60,80 80,120,from(#d90004),to(#960004));-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;outline:none}.elfinder-help .elfinder-dont-panic span{font-size:3em;font-weight:700;text-align:center;color:#fff;position:absolute;left:0;top:45px}ul.elfinder-help-integrations ul{padding:0;margin:0 1em 1em}ul.elfinder-help-integrations a:hover{text-decoration:underline}.elfinder-help-debug{height:100%;padding:0;margin:0;overflow:none;border:none}.elfinder-help-debug .ui-tabs-panel{padding:0;margin:0;overflow:auto}.elfinder-help-debug fieldset{margin-bottom:10px;border-color:#789;border-radius:10px}.elfinder-help-debug legend{font-size:1.2em;font-weight:700;color:#2e8b57}.elfinder-help-debug dl{margin:0}.elfinder-help-debug dt{color:#789}.elfinder-help-debug dt:before{content:"["}.elfinder-help-debug dt:after{content:"]"}.elfinder-help-debug dd{margin-left:1em}.elfinder-dialog .elfinder-preference .ui-tabs-nav{margin-bottom:1px;height:auto}.elfinder-preference .ui-tabs-panel{padding:10px 10px 0;overflow:auto;box-sizing:border-box;-webkit-overflow-scrolling:touch}.elfinder-preference a.ui-state-hover,.elfinder-preference label.ui-state-hover{border:none}.elfinder-preference dl{width:100%;display:inline-block;margin:.5em 0}.elfinder-preference dt{display:block;width:200px;clear:left;float:left;max-width:50%}.elfinder-rtl .elfinder-preference dt{clear:right;float:right}.elfinder-preference dd{margin-bottom:1em}.elfinder-preference dd input[type=checkbox],.elfinder-preference dd label{white-space:nowrap;display:inline-block;cursor:pointer}.elfinder-preference dt.elfinder-preference-checkboxes{width:100%;max-width:none}.elfinder-preference dd.elfinder-preference-checkboxes{padding-top:3ex}.elfinder-preference select{max-width:100%}.elfinder-preference dd.elfinder-preference-iconSize .ui-slider{width:50%;max-width:100px;display:inline-block;margin:0 10px}.elfinder-preference button{margin:0 16px}.elfinder-preference button+button{margin:0 -10px}.elfinder-preference .elfinder-preference-taball .elfinder-reference-hide-taball{display:none}.elfinder-preference-theme fieldset{margin-bottom:10px}.elfinder-preference-theme legend a{font-size:1.8em;text-decoration:none;cursor:pointer}.elfinder-preference-theme dt{width:20%;word-break:break-all}.elfinder-preference-theme dt:after{content:" :"}.elfinder-preference-theme dd{margin-inline-start:20%}.elfinder-preference img.elfinder-preference-theme-image{display:block;margin-left:auto;margin-right:auto;max-width:90%;max-height:200px;cursor:pointer}.elfinder-preference-theme-btn,.elfinder-rename-batch-type{text-align:center}.elfinder-preference-theme button.elfinder-preference-theme-default{display:inline;margin:0 10px;font-size:8pt}.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon:before{right:33px;left:auto}.elfinder-info-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:none}.elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{position:absolute;bottom:2px;width:16px;height:16px;padding:10px;border:none;overflow:hidden;cursor:pointer}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon,.elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{left:2px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon,.elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{right:2px}.elfinder-ltr .elfinder-rm-title .elfinder-cwd-icon:before{left:38px}.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon:before{right:86px;left:auto}.elfinder-rm-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:none}.elfinder-rename-batch div{margin:5px 8px}.elfinder-rename-batch .elfinder-rename-batch-name input{width:100%;font-size:1.6em}.elfinder-rename-batch .elfinder-rename-batch-type label{margin:2px;font-size:.9em}.elfinder-rename-batch-preview{padding:0 8px;font-size:1.1em;min-height:4ex}.ui-front{z-index:100}.elfinder{padding:0;position:relative;display:block;visibility:visible;font-size:18px;font-family:Verdana,Arial,Helvetica,sans-serif}.elfinder-ios input,.elfinder-ios select,.elfinder-ios textarea{font-size:16px!important}.elfinder.elfinder-fullscreen>.ui-resizable-handle{display:none}.elfinder-font-mono{line-height:2ex}.elfinder.elfinder-processing *{cursor:progress!important}.elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after{position:absolute;top:0;width:100%;height:3px;content:'';left:0;background-image:url(../img/progress.gif);opacity:.6;pointer-events:none}.elfinder :not(input):not(textarea):not(select):not([contenteditable=true]),.elfinder-contextmenu :not(input):not(textarea):not(select):not([contenteditable=true]){-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;user-select:none}.elfinder .overflow-scrolling-touch{-webkit-overflow-scrolling:touch}.elfinder-rtl{text-align:right;direction:rtl}.elfinder-workzone{padding:0;position:relative;overflow:hidden}.elfinder-lock,.elfinder-perms,.elfinder-symlink{position:absolute;width:16px;height:16px;background-image:url(../img/toolbar.png);background-repeat:no-repeat}.elfinder-perms,.elfinder-symlink{background-position:0 -528px}.elfinder-na .elfinder-perms{background-position:0 -96px}.elfinder-ro .elfinder-perms{background-position:0 -64px}.elfinder-wo .elfinder-perms{background-position:0 -80px}.elfinder-group .elfinder-perms{background-position:0 0}.elfinder-lock{background-position:0 -656px}.elfinder-drag-helper{top:0;left:0;width:70px;height:60px;padding:0 0 0 25px;z-index:100000;will-change:left,top}.elfinder-drag-helper.html5-native{position:absolute;top:-1000px;left:-1000px}.elfinder-drag-helper-icon-status{position:absolute;width:16px;height:16px;left:42px;top:60px;background:url(../img/toolbar.png) 0 -96px no-repeat;display:block}.elfinder-drag-helper-move .elfinder-drag-helper-icon-status{background-position:0 -720px}.elfinder-drag-helper-plus .elfinder-drag-helper-icon-status{background-position:0 -544px}.elfinder-drag-num{display:inline-box;position:absolute;top:0;left:0;width:auto;height:14px;text-align:center;padding:1px 3px;font-weight:700;color:#fff;background-color:red;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-drag-helper .elfinder-cwd-icon{margin:0 0 0 -24px;float:left}.elfinder-overlay{position:absolute;opacity:.2;filter:Alpha(Opacity=20)}.elfinder .elfinder-panel{position:relative;background-image:none;padding:7px 12px}[draggable=true]{-khtml-user-drag:element}.elfinder [contentEditable=true]:empty:not(:focus):before{content:attr(data-ph)}.elfinder div.elfinder-bottomtray{position:fixed;bottom:0;max-width:100%;opacity:.8}.elfinder.elfinder-ltr div.elfinder-bottomtray{left:0}.elfinder.elfinder-rtl div.elfinder-bottomtray{right:0}.elfinder .elfinder-ui-tooltip,.elfinder-ui-tooltip{font-size:14px;padding:2px 4px}.elfinder .elfinder-contextmenu,.elfinder .elfinder-contextmenu-sub{position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0;top:0;left:0}.elfinder .elfinder-contextmenu-sub{top:5px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder .elfinder-contextmenu-header{margin-top:-4px;padding:0 .5em .2ex;border:none;text-align:center}.elfinder .elfinder-contextmenu-header span{font-size:.8em;font-weight:bolder}.elfinder .elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder .elfinder-contextmenu-item.ui-state-active{border:none}.elfinder .elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:auto;right:auto;top:50%;margin-top:-8px}.elfinder-touch .elfinder-contextmenu-item{padding:12px 38px}.elfinder-navbar-root-local.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_local.svg);background-size:contain}.elfinder-navbar-root-trash.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_trash.svg);background-size:contain}.elfinder-navbar-root-ftp.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_ftp.svg);background-size:contain}.elfinder-navbar-root-sql.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_sql.svg);background-size:contain}.elfinder-navbar-root-dropbox.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_dropbox.svg);background-size:contain}.elfinder-navbar-root-googledrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_googledrive.svg);background-size:contain}.elfinder-navbar-root-onedrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_onedrive.svg);background-size:contain}.elfinder-navbar-root-box.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_box.svg);background-size:contain}.elfinder-navbar-root-zip.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_zip.svg);background-size:contain}.elfinder-navbar-root-network.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_network.svg);background-size:contain}.elfinder .elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px;padding-right:12px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-left:28px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-right:28px}.elfinder-touch .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-left:36px}.elfinder-touch .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-right:36px}.elfinder .elfinder-contextmenu-arrow,.elfinder .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px;overflow:hidden}.elfinder-touch .elfinder-button-icon.elfinder-contextmenu-icon{transform-origin:center center}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon{right:8px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon{left:8px}.elfinder .elfinder-contextmenu-arrow{width:16px;height:16px;background:url(../img/arrows-normal.png) 5px 4px no-repeat}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder .elfinder-contextmenu-extra-icon a,.elfinder .elfinder-contextmenu-extra-icon span{position:relative;width:100%;height:100%;margin:0;color:transparent!important;text-decoration:none;cursor:pointer}.elfinder .elfinder-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder .elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder .elfinder-contextmenu-item .elfinder-button-icon.ui-state-disabled{background-image:url(../img/toolbar.png)}.elfinder-cwd-wrapper{overflow:auto;position:relative;padding:2px;margin:0}.elfinder-cwd-wrapper-list{padding:0}.elfinder-cwd{position:absolute;top:0;cursor:default;padding:0;margin:0;-ms-touch-action:auto;touch-action:auto;min-width:100%}.elfinder-ltr .elfinder-cwd{left:0}.elfinder-rtl .elfinder-cwd{right:0}.elfinder-cwd.elfinder-table-header-sticky{position:-webkit-sticky;position:-ms-sticky;position:sticky;top:0;left:auto;right:auto;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;height:0;overflow:visible}.elfinder-cwd.elfinder-table-header-sticky table{border-top:2px solid;padding-top:0}.elfinder-cwd.elfinder-table-header-sticky td{display:inline-block}.elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table{border-top:2px solid transparent}.elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader,.elfinder-cwd-fixheader .elfinder-cwd{position:relative}.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-wrapper-empty .elfinder-cwd:after{display:block;height:auto;width:90%;width:calc(100% - 20px);position:absolute;top:50%;left:50%;-ms-transform:translateY(-50%) translateX(-50%);-webkit-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);line-height:1.5em;text-align:center;white-space:pre-wrap;opacity:.6;filter:Alpha(Opacity=60);font-weight:700}.elfinder-cwd-file .elfinder-cwd-select{position:absolute;top:0;left:0;background-color:transparent;opacity:.4;filter:Alpha(Opacity=40)}.elfinder-mobile .elfinder-cwd-file .elfinder-cwd-select{width:30px;height:30px}.elfinder .elfinder-cwd-selectall,.elfinder-cwd-file.ui-selected .elfinder-cwd-select{opacity:.8;filter:Alpha(Opacity=80)}.elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select{left:auto;right:0}.elfinder .elfinder-cwd-selectall{position:absolute;width:30px;height:30px;top:0}.elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall{display:none}.elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall{text-align:right;right:18px;left:auto}.elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall{text-align:left;right:auto;left:18px}.elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{right:0}.elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{left:0}.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover{background-color:transparent}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:90px;padding-bottom:2px;cursor:default;border:none;position:relative}.elfinder .std42-dialog .ui-dialog-content label,.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active{border:none}.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file{float:left;margin:0 3px 2px 0}.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file{float:right;margin:0 0 5px 3px}.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover{border:0 solid}.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:52px;height:52px;margin:1px auto;padding:2px;position:relative}.elfinder-cwd-size1 .elfinder-cwd-icon:before,.elfinder-cwd-size2 .elfinder-cwd-icon:before,.elfinder-cwd-size3 .elfinder-cwd-icon:before{top:3px;display:block}.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:112px}.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:74px;height:74px}.elfinder-cwd-size1 .elfinder-cwd-icon,.elfinder-cwd-size2 .elfinder-cwd-icon,.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform-origin:top center;-ms-transform:scale(1.5);-webkit-transform-origin:top center;-webkit-transform:scale(1.5);transform-origin:top center;transform:scale(1.5)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(1.35) translate(-4px,15%);-webkit-transform-origin:top left;-webkit-transform:scale(1.35) translate(-4px,15%);transform-origin:top left;transform:scale(1.35) translate(-4px,15%)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1) translate(10px,-5px);-webkit-transform:scale(1) translate(10px,-5px);transform:scale(1) translate(10px,-5px)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:72px;height:72px;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file{width:140px;height:134px}.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:98px;height:98px}.elfinder-cwd-size2 .elfinder-cwd-icon,.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform:scale(2);-webkit-transform:scale(2);transform:scale(2)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(1.8) translate(-5px,18%);-webkit-transform-origin:top left;-webkit-transform:scale(1.8) translate(-5px,18%);transform-origin:top left;transform:scale(1.8) translate(-5px,18%)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1.1) translate(0,10px);-webkit-transform:scale(1.1) translate(0,10px);transform:scale(1.1) translate(0,10px)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:96px;height:96px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file{width:174px;height:158px}.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:122px;height:122px}.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform:scale(2.5);-webkit-transform:scale(2.5);transform:scale(2.5)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(2.25) translate(-6px,20%);-webkit-transform-origin:top left;-webkit-transform:scale(2.25) translate(-6px,20%);transform-origin:top left;transform:scale(2.25) translate(-6px,20%)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1.2) translate(-9px,22px);-webkit-transform:scale(1.2) translate(-9px,22px);transform:scale(1.2) translate(-9px,22px)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:120px;height:120px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}.elfinder-cwd-view-icons .elfinder-cwd-filename{text-align:center;max-height:2.4em;line-height:1.2em;white-space:pre-line;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;margin:3px 1px 0;padding:1px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;word-break:break-word;overflow-wrap:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.elfinder-cwd-view-icons .elfinder-perms{bottom:4px;right:2px}.elfinder-cwd-view-icons .elfinder-lock{top:-3px;right:-2px}.elfinder-cwd-view-icons .elfinder-symlink{bottom:6px;left:0}.elfinder-cwd-icon{display:block;width:48px;height:48px;margin:0 auto;background-image:url(../img/icons-big.svg);background-image:url(../img/icons-big.png) \9;background-position:0 0;background-repeat:no-repeat;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon,.elfinder-navbar-root-local .elfinder-cwd-icon{background-image:url(../img/volume_icon_local.svg);background-image:url(../img/volume_icon_local.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon,.elfinder-navbar-root-trash .elfinder-cwd-icon{background-image:url(../img/volume_icon_trash.svg);background-image:url(../img/volume_icon_trash.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon,.elfinder-navbar-root-ftp .elfinder-cwd-icon{background-image:url(../img/volume_icon_ftp.svg);background-image:url(../img/volume_icon_ftp.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon,.elfinder-navbar-root-sql .elfinder-cwd-icon{background-image:url(../img/volume_icon_sql.svg);background-image:url(../img/volume_icon_sql.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon,.elfinder-navbar-root-dropbox .elfinder-cwd-icon{background-image:url(../img/volume_icon_dropbox.svg);background-image:url(../img/volume_icon_dropbox.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon,.elfinder-navbar-root-googledrive .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon,.elfinder-navbar-root-googledrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_googledrive.svg);background-image:url(../img/volume_icon_googledrive.png) \9;background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon,.elfinder-navbar-root-onedrive .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon,.elfinder-navbar-root-onedrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_onedrive.svg);background-image:url(../img/volume_icon_onedrive.png) \9;background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon,.elfinder-navbar-root-box .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon,.elfinder-navbar-root-box .elfinder-cwd-icon{background-image:url(../img/volume_icon_box.svg);background-image:url(../img/volume_icon_box.png) \9;background-size:contain}.elfinder-cwd .elfinder-navbar-root-zip.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon,.elfinder-navbar-root-zip .elfinder-cwd-icon{background-image:url(../img/volume_icon_zip.svg);background-image:url(../img/volume_icon_zip.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon,.elfinder-navbar-root-network .elfinder-cwd-icon{background-image:url(../img/volume_icon_network.svg);background-image:url(../img/volume_icon_network.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd-icon:before{content:none;position:absolute;left:0;top:5px;min-width:20px;max-width:84px;text-align:center;padding:0 4px 1px;border-radius:4px;font-family:Verdana;font-size:10px;line-height:1.3em;-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);-o-transform:scale(.9);transform:scale(.9)}.elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before{left:-10px}.elfinder-cwd-icon.elfinder-cwd-icon-mp2t:before{content:'ts'}.elfinder-cwd-icon.elfinder-cwd-icon-dash-xml:before{content:'dash'}.elfinder-cwd-icon.elfinder-cwd-icon-x-mpegurl:before{content:'hls'}.elfinder-cwd-icon.elfinder-cwd-icon-x-c:before{content:'c++'}.elfinder-cwd-icon.elfinder-cwd-bgurl{background-position:center center;background-repeat:no-repeat}.elfinder-cwd-icon.elfinder-cwd-bgurl,.elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself{-moz-background-size:cover;background-size:cover}.elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:' '}.elfinder-cwd-bgurl:after{position:relative;display:inline-block;top:36px;left:-38px;width:48px;height:48px;background-image:url(../img/icons-big.svg);background-image:url(../img/icons-big.png) \9;background-repeat:no-repeat;background-size:auto!important;opacity:.8;filter:Alpha(Opacity=60);-webkit-transform-origin:54px -24px;-webkit-transform:scale(.6);-moz-transform-origin:54px -24px;-moz-transform:scale(.6);-ms-transform-origin:54px -24px;-ms-transform:scale(.6);-o-transform-origin:54px -24px;-o-transform:scale(.6);transform-origin:54px -24px;transform:scale(.6)}.elfinder-cwd-icon.elfinder-cwd-icon-drag{width:48px;height:48px}.elfinder-cwd-icon-directory.elfinder-cwd-bgurl:after,.elfinder-cwd-icon-image.elfinder-cwd-bgurl:after,.elfinder-cwd-icon.elfinder-cwd-icon-drag:after,.elfinder-cwd-icon.elfinder-cwd-icon-drag:before{content:none}.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon{background-position:0 -100px}.elfinder-cwd .elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-icon-directory{background-position:0 -50px}.elfinder-cwd-icon-application,.elfinder-cwd-icon-application:after{background-position:0 -150px}.elfinder-cwd-icon-text,.elfinder-cwd-icon-text:after{background-position:0 -1350px}.elfinder-cwd-icon-plain,.elfinder-cwd-icon-plain:after,.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-x-empty:after{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-image:after,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-vnd-adobe-photoshop:after{background-position:0 -250px}.elfinder-cwd-icon-postscript,.elfinder-cwd-icon-postscript:after{background-position:0 -1550px}.elfinder-cwd-icon-audio,.elfinder-cwd-icon-audio:after{background-position:0 -300px}.elfinder-cwd-icon-dash-xml,.elfinder-cwd-icon-flash-video,.elfinder-cwd-icon-video,.elfinder-cwd-icon-video:after,.elfinder-cwd-icon-vnd-apple-mpegurl,.elfinder-cwd-icon-x-mpegurl{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtf:after,.elfinder-cwd-icon-rtfd,.elfinder-cwd-icon-rtfd:after{background-position:0 -400px}.elfinder-cwd-icon-pdf,.elfinder-cwd-icon-pdf:after{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-ms-excel:after,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:after{background-position:0 -1450px}.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:after{background-position:0 -1700px}.elfinder-cwd-icon-vnd-ms-powerpoint,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-powerpoint:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:after{background-position:0 -1400px}.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation:after{background-position:0 -1650px}.elfinder-cwd-icon-msword,.elfinder-cwd-icon-msword:after,.elfinder-cwd-icon-vnd-ms-word,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-word:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:after,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:after{background-position:0 -1500px}.elfinder-cwd-icon-vnd-oasis-opendocument-text,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web:after,.elfinder-cwd-icon-vnd-oasis-opendocument-text:after{background-position:0 -1750px}.elfinder-cwd-icon-vnd-ms-office,.elfinder-cwd-icon-vnd-ms-office:after{background-position:0 -500px}.elfinder-cwd-icon-vnd-oasis-opendocument-chart,.elfinder-cwd-icon-vnd-oasis-opendocument-chart:after,.elfinder-cwd-icon-vnd-oasis-opendocument-database,.elfinder-cwd-icon-vnd-oasis-opendocument-database:after,.elfinder-cwd-icon-vnd-oasis-opendocument-formula,.elfinder-cwd-icon-vnd-oasis-opendocument-formula:after,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:after,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics:after,.elfinder-cwd-icon-vnd-oasis-opendocument-image,.elfinder-cwd-icon-vnd-oasis-opendocument-image:after,.elfinder-cwd-icon-vnd-openofficeorg-extension,.elfinder-cwd-icon-vnd-openofficeorg-extension:after{background-position:0 -1600px}.elfinder-cwd-icon-html,.elfinder-cwd-icon-html:after{background-position:0 -550px}.elfinder-cwd-icon-css,.elfinder-cwd-icon-css:after{background-position:0 -600px}.elfinder-cwd-icon-javascript,.elfinder-cwd-icon-javascript:after,.elfinder-cwd-icon-x-javascript,.elfinder-cwd-icon-x-javascript:after{background-position:0 -650px}.elfinder-cwd-icon-x-perl,.elfinder-cwd-icon-x-perl:after{background-position:0 -700px}.elfinder-cwd-icon-x-python,.elfinder-cwd-icon-x-python:after{background-position:0 -750px}.elfinder-cwd-icon-x-ruby,.elfinder-cwd-icon-x-ruby:after{background-position:0 -800px}.elfinder-cwd-icon-x-sh,.elfinder-cwd-icon-x-sh:after,.elfinder-cwd-icon-x-shellscript,.elfinder-cwd-icon-x-shellscript:after{background-position:0 -850px}.elfinder-cwd-icon-x-c,.elfinder-cwd-icon-x-c--,.elfinder-cwd-icon-x-c--:after,.elfinder-cwd-icon-x-c--hdr,.elfinder-cwd-icon-x-c--hdr:after,.elfinder-cwd-icon-x-c--src,.elfinder-cwd-icon-x-c--src:after,.elfinder-cwd-icon-x-c:after,.elfinder-cwd-icon-x-chdr,.elfinder-cwd-icon-x-chdr:after,.elfinder-cwd-icon-x-csrc,.elfinder-cwd-icon-x-csrc:after,.elfinder-cwd-icon-x-java,.elfinder-cwd-icon-x-java-source,.elfinder-cwd-icon-x-java-source:after,.elfinder-cwd-icon-x-java:after{background-position:0 -900px}.elfinder-cwd-icon-x-php,.elfinder-cwd-icon-x-php:after{background-position:0 -950px}.elfinder-cwd-icon-xml,.elfinder-cwd-icon-xml:after{background-position:0 -1000px}.elfinder-cwd-icon-x-7z-compressed,.elfinder-cwd-icon-x-7z-compressed:after,.elfinder-cwd-icon-x-xz,.elfinder-cwd-icon-x-xz:after,.elfinder-cwd-icon-x-zip,.elfinder-cwd-icon-x-zip:after,.elfinder-cwd-icon-zip,.elfinder-cwd-icon-zip:after{background-position:0 -1050px}.elfinder-cwd-icon-x-gzip,.elfinder-cwd-icon-x-gzip:after,.elfinder-cwd-icon-x-tar,.elfinder-cwd-icon-x-tar:after{background-position:0 -1100px}.elfinder-cwd-icon-x-bzip,.elfinder-cwd-icon-x-bzip2,.elfinder-cwd-icon-x-bzip2:after,.elfinder-cwd-icon-x-bzip:after{background-position:0 -1150px}.elfinder-cwd-icon-x-rar,.elfinder-cwd-icon-x-rar-compressed,.elfinder-cwd-icon-x-rar-compressed:after,.elfinder-cwd-icon-x-rar:after{background-position:0 -1200px}.elfinder-cwd-icon-x-shockwave-flash,.elfinder-cwd-icon-x-shockwave-flash:after{background-position:0 -1250px}.elfinder-cwd-icon-group{background-position:0 -1300px}.elfinder-cwd-filename input{width:100%;border:none;margin:0;padding:0}.elfinder-cwd-view-icons,.elfinder-cwd-view-icons input{text-align:center}.elfinder-cwd-view-icons textarea{width:100%;border:0 solid;margin:0;padding:0;text-align:center;overflow:hidden;resize:none}.elfinder-cwd-wrapper.elfinder-cwd-fixheader .elfinder-cwd::after,.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar select{display:none}.elfinder-cwd table{width:100%;border-collapse:separate;border:0 solid;margin:0 0 10px;border-spacing:0;box-sizing:padding-box;padding:2px;position:relative}.elfinder .elfinder-cwd table td div,.elfinder-cwd table td{box-sizing:content-box}.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader{position:absolute;overflow:hidden}.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before{content:'';position:absolute;width:100%;top:0;height:3px;background-color:#fff}.elfinder-droppable-active+.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before{background-color:#8cafed}.elfinder .elfinder-workzone div.elfinder-cwd-fixheader table{table-layout:fixed}.elfinder-ltr .elfinder-cwd thead .elfinder-cwd-selectall{text-align:left;right:auto;left:0;padding-top:3px}.elfinder-rtl .elfinder-cwd thead .elfinder-cwd-selectall{text-align:right;right:0;left:auto;padding-top:3px}.elfinder-touch .elfinder-cwd thead .elfinder-cwd-selectall{padding-top:4px}.elfinder .elfinder-cwd table thead tr{border-left:0 solid;border-top:0 solid;border-right:0 solid}.elfinder .elfinder-cwd table thead td{padding:4px 14px}.elfinder-ltr .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding:4px 14px 4px 22px}.elfinder-rtl .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding:4px 22px 4px 14px}.elfinder-touch .elfinder-cwd table thead td,.elfinder-touch .elfinder-cwd.elfinder-has-checkbox table thead td:first-child{padding-top:8px;padding-bottom:8px}.elfinder .elfinder-cwd table thead td.ui-state-active{background:#ebf1f6;background:-moz-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebf1f6),color-stop(50%,#abd3ee),color-stop(51%,#89c3eb),color-stop(100%,#d5ebfb));background:-webkit-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-o-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:-ms-linear-gradient(top,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);background:linear-gradient(to bottom,#ebf1f6 0%,#abd3ee 50%,#89c3eb 51%,#d5ebfb 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebf1f6', endColorstr='#d5ebfb', GradientType=0)}.elfinder .elfinder-cwd table td{padding:4px 12px;white-space:pre;overflow:hidden;text-align:right;cursor:default;border:0 solid}.elfinder .elfinder-cwd table tbody td:first-child{position:relative}tr.elfinder-cwd-file td .elfinder-cwd-select{padding-top:3px}.elfinder-mobile tr.elfinder-cwd-file td .elfinder-cwd-select{width:40px}.elfinder-touch tr.elfinder-cwd-file td .elfinder-cwd-select{padding-top:10px}.elfinder-touch .elfinder-cwd tr td{padding:10px 12px}.elfinder-touch .elfinder-cwd tr.elfinder-cwd-file td{padding:13px 12px}.elfinder-ltr .elfinder-cwd table td{text-align:right}.elfinder-ltr .elfinder-cwd table td:first-child{text-align:left}.elfinder-rtl .elfinder-cwd table td{text-align:left}.elfinder-ltr .elfinder-info-tb tr td:first-child,.elfinder-rtl .elfinder-cwd table td:first-child{text-align:right}.elfinder-odd-row{background:#eee}.elfinder-cwd-view-list .elfinder-cwd-file-wrapper{width:97%;position:relative}.elfinder-ltr .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper{margin-left:8px}.elfinder-rtl .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper{margin-right:8px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename{padding-left:23px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-filename{padding-right:23px}.elfinder-cwd-view-list .elfinder-lock,.elfinder-cwd-view-list .elfinder-perms,.elfinder-cwd-view-list .elfinder-symlink{margin-top:-6px;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-cwd-view-list .elfinder-perms{bottom:-4px}.elfinder-cwd-view-list .elfinder-lock{top:0}.elfinder-cwd-view-list .elfinder-symlink{bottom:-4px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms{left:8px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-perms{right:-8px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock{left:10px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-lock{right:-10px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink{left:-7px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-symlink{right:7px}.elfinder-cwd-view-list td .elfinder-cwd-icon{width:16px;height:16px;position:absolute;top:50%;margin-top:-8px;background-image:url(../img/icons-small.png)}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon{left:0}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon{right:0}.elfinder-cwd-view-list .elfinder-cwd-icon:after,.elfinder-cwd-view-list .elfinder-cwd-icon:before{content:none}.elfinder-cwd-view-list thead td .ui-resizable-handle{height:100%;top:6px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-handle{top:-4px;margin:10px}.elfinder-cwd-view-list thead td .ui-resizable-e{right:-7px}.elfinder-cwd-view-list thead td .ui-resizable-w{left:-7px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-e{right:-16px}.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-w{left:-16px}.elfinder-cwd-wrapper-empty .elfinder-cwd-view-list.elfinder-cwd:after{margin-top:0}.elfinder-cwd-message-board{position:-webkit-sticky;position:sticky;width:100%;height:calc(100% - .01px);top:0;left:0;margin:0;padding:0;pointer-events:none;background-color:transparent}.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board{background-image:url(../img/trashmesh.png)}.elfinder-cwd-message-board .elfinder-cwd-trash{position:absolute;bottom:0;font-size:30px;width:100%;text-align:right;display:none}.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-trash{text-align:left}.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-trash{font-size:20px}.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board .elfinder-cwd-trash{display:block;opacity:.3}.elfinder-cwd-message-board .elfinder-cwd-expires{position:absolute;bottom:0;font-size:24px;width:100%;text-align:right;opacity:.25}.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-expires{text-align:left}.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-expires{font-size:20px}.std42-dialog{padding:0;position:absolute;left:auto;right:auto;box-sizing:border-box}.std42-dialog.elfinder-dialog-minimized{overFlow:hidden;position:relative;float:left;width:auto;cursor:pointer}.elfinder-rtl .std42-dialog.elfinder-dialog-minimized{float:right}.std42-dialog input{border:1px solid}.std42-dialog .ui-dialog-titlebar{border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;font-weight:400;padding:.2em 1em}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar{padding:0 .5em;height:20px}.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar{padding:.3em .5em}.std42-dialog.ui-draggable-disabled .ui-dialog-titlebar{cursor:default}.std42-dialog .ui-dialog-titlebar .ui-widget-header{border:none;cursor:pointer}.std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title{display:inherit;word-break:break-all}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title{display:list-item;display:-moz-inline-box;white-space:nowrap;word-break:normal;overflow:hidden;word-wrap:normal;overflow-wrap:normal;max-width:-webkit-calc(100% - 24px);max-width:-moz-calc(100% - 24px);max-width:calc(100% - 24px)}.elfinder-touch .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title{padding-top:.15em}.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title{max-width:-webkit-calc(100% - 36px);max-width:-moz-calc(100% - 36px);max-width:calc(100% - 36px)}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button{position:relative;float:left;top:10px;left:-10px;right:10px;width:20px;height:20px;padding:1px;margin:-10px 1px 0;background-color:transparent;background-image:none}.elfinder-touch .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button{-moz-transform:scale(1.2);zoom:1.2;padding-left:6px;padding-right:6px;height:24px}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button-right{float:right}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right{left:10px;right:-10px}.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{width:17px;height:17px;border-width:1px;opacity:.7;filter:Alpha(Opacity=70);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{opacity:.5;filter:Alpha(Opacity=50)}.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon{opacity:1;filter:Alpha(Opacity=100)}.elfinder-spinner{width:14px;height:14px;background:url(../img/spinner-mini.gif) center center no-repeat;margin:0 5px;display:inline-block;vertical-align:middle}.elfinder-ltr .elfinder-info-tb span,.elfinder-ltr .elfinder-spinner,.elfinder-ltr .elfinder-spinner-text{float:left}.elfinder-rtl .elfinder-info-tb span,.elfinder-rtl .elfinder-spinner,.elfinder-rtl .elfinder-spinner-text{float:right}.elfinder-touch .std42-dialog.ui-dialog:not(ui-resizable-disabled) .ui-resizable-se{width:12px;height:12px;-moz-transform-origin:bottom right;-moz-transform:scale(1.5);zoom:1.5;right:-7px;bottom:-7px;margin:3px 7px 7px 3px;background-position:-64px -224px}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar{text-align:right}.std42-dialog .ui-dialog-content{padding:.3em .5em;box-sizing:border-box}.elfinder .std42-dialog .ui-dialog-content,.elfinder .std42-dialog .ui-dialog-content *{-webkit-user-select:auto;-moz-user-select:text;-khtml-user-select:text;user-select:text}.std42-dialog .ui-dialog-buttonpane{border:0 solid;margin:0;padding:.5em;text-align:right}.elfinder-rtl .std42-dialog .ui-dialog-buttonpane{text-align:left}.std42-dialog .ui-dialog-buttonpane button{margin:.2em 0 0 .4em;padding:.2em;outline:0 solid}.std42-dialog .ui-dialog-buttonpane button span{padding:2px 9px}.std42-dialog .ui-dialog-buttonpane button span.ui-icon{padding:2px}.elfinder-dialog .ui-resizable-e,.elfinder-dialog .ui-resizable-s{width:0;height:0}.std42-dialog .ui-button input{cursor:pointer}.std42-dialog select{border:1px solid #ccc}.elfinder-dialog-icon{position:absolute;width:32px;height:32px;left:10px;top:50%;margin-top:-15px;background:url(../img/dialogs.png) 0 0 no-repeat}.elfinder-rtl .elfinder-dialog-icon{left:auto;right:10px}.elfinder-dialog-confirm .ui-dialog-content,.elfinder-dialog-error .ui-dialog-content{padding-left:56px;min-height:35px}.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content,.elfinder-rtl .elfinder-dialog-error .ui-dialog-content{padding-left:0;padding-right:56px}.elfinder-dialog-error .elfinder-err-var{word-break:break-all}.elfinder-dialog-notify{top:36px;width:280px}.elfinder-ltr .elfinder-dialog-notify{right:12px}.elfinder-rtl .elfinder-dialog-notify{left:12px}.elfinder-dialog-notify .ui-dialog-titlebar{height:5px}.elfinder-dialog-notify .ui-dialog-titlebar-close,.elfinder-rm-title+br{display:none}.elfinder-dialog-notify .ui-dialog-content{padding:0}.elfinder-notify{border-bottom:1px solid #ccc;position:relative;padding:.5em;text-align:center;overflow:hidden}.elfinder-ltr .elfinder-notify{padding-left:36px}.elfinder-rtl .elfinder-notify{padding-right:36px}.elfinder-notify:last-child{border:0 solid}.elfinder-notify-progressbar{width:180px;height:8px;border:1px solid #aaa;background:#f5f5f5;margin:5px auto;overflow:hidden}.elfinder-notify-progress{width:100%;height:8px;background:url(../img/progress.gif) center center repeat-x}.elfinder-notify-progress,.elfinder-notify-progressbar{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.elfinder-dialog-icon-file,.elfinder-dialog-icon-open,.elfinder-dialog-icon-readdir,.elfinder-dialog-icon-reload{background-position:0 -225px}.elfinder-dialog-icon-mkdir{background-position:0 -64px}.elfinder-dialog-icon-mkfile{background-position:0 -96px}.elfinder-dialog-icon-copy,.elfinder-dialog-icon-move,.elfinder-dialog-icon-prepare{background-position:0 -128px}.elfinder-dialog-icon-chunkmerge,.elfinder-dialog-icon-upload{background-position:0 -160px}.elfinder-dialog-icon-rm{background-position:0 -192px}.elfinder-dialog-icon-download{background-position:0 -260px}.elfinder-dialog-icon-save{background-position:0 -295px}.elfinder-dialog-icon-chkcontent,.elfinder-dialog-icon-rename{background-position:0 -330px}.elfinder-dialog-icon-archive,.elfinder-dialog-icon-extract,.elfinder-dialog-icon-zipdl{background-position:0 -365px}.elfinder-dialog-icon-search{background-position:0 -402px}.elfinder-dialog-icon-chmod,.elfinder-dialog-icon-dim,.elfinder-dialog-icon-loadimg,.elfinder-dialog-icon-netmount,.elfinder-dialog-icon-netunmount,.elfinder-dialog-icon-preupload,.elfinder-dialog-icon-resize,.elfinder-dialog-icon-url{background-position:0 -434px}.elfinder-dialog-confirm-applyall,.elfinder-dialog-confirm-encoding{padding:0 1em;margin:0}.elfinder-ltr .elfinder-dialog-confirm-applyall,.elfinder-ltr .elfinder-dialog-confirm-encoding{text-align:left}.elfinder-rtl .elfinder-dialog-confirm-applyall,.elfinder-rtl .elfinder-dialog-confirm-encoding{text-align:right}.elfinder-dialog-confirm .elfinder-dialog-icon{background-position:0 -32px}.elfinder-dialog-confirm .ui-dialog-buttonset{width:auto}.elfinder-info-title .elfinder-cwd-icon{float:left;width:48px;height:48px;margin-right:1em}.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon,.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon{float:right;margin-right:0;margin-left:1em}.elfinder-info-title strong{display:block;padding:.3em 0 .5em}.elfinder-info-tb{min-width:200px;border:0 solid;margin:1em .2em;width:100%}.elfinder-info-tb td{white-space:pre-wrap;padding:2px}.elfinder-info-tb td.elfinder-info-label{white-space:nowrap}.elfinder-info-tb td.elfinder-info-hash{display:inline-block;word-break:break-all;max-width:32ch}.elfinder-rtl .elfinder-info-tb tr td:first-child{text-align:left}.elfinder-info-tb a{outline:none;text-decoration:underline}.elfinder-info-tb a:hover{text-decoration:none}.elfinder-netmount-tb{margin:0 auto}.elfinder-netmount-tb .elfinder-button-icon,.elfinder-netmount-tb select{cursor:pointer}button.elfinder-info-button{margin:-3.5px 0;cursor:pointer}.elfinder-upload-dropbox{display:table-cell;text-align:center;vertical-align:middle;padding:.5em;border:3px dashed #aaa;width:9999px;height:80px;overflow:hidden;word-break:keep-all}.elfinder-upload-dropbox.ui-state-hover{background:#dfdfdf;border:3px dashed #555}.elfinder-upload-dialog-or{margin:.3em 0;text-align:center}.elfinder-upload-dialog-wrapper{text-align:center}.elfinder-upload-dialog-wrapper .ui-button{position:relative;overflow:hidden}.elfinder-upload-dialog-wrapper .ui-button form{position:absolute;right:0;top:0;width:100%;opacity:0;filter:Alpha(Opacity=0)}.elfinder-upload-dialog-wrapper .ui-button form input{padding:50px 0 0;font-size:3em;width:100%}.dialogelfinder .dialogelfinder-drag{border-left:0 solid;border-top:0 solid;border-right:0 solid;font-weight:400;padding:2px 12px;cursor:move;position:relative;text-align:left}.elfinder-rtl .dialogelfinder-drag{text-align:right}.dialogelfinder-drag-close{position:absolute;top:50%;margin-top:-8px}.elfinder-ltr .dialogelfinder-drag-close{right:12px}.elfinder-rtl .dialogelfinder-drag-close{left:12px}.elfinder-rm-title{margin-bottom:.5ex}.elfinder-rm-title .elfinder-cwd-icon{float:left;width:48px;height:48px;margin-right:1em}.elfinder-rm-title strong{display:block;white-space:pre-wrap;word-break:normal;overflow:hidden;text-overflow:ellipsis}.elfinder-font-mono{font-family:"Ricty Diminished","Myrica M",Consolas,"Courier New",Courier,Monaco,monospace;font-size:1.1em}.elfinder-contextmenu .elfinder-contextmenu-item span{font-size:.72em}.elfinder-cwd-view-icons .elfinder-cwd-filename,.elfinder-cwd-view-list td,.elfinder-statusbar div{font-size:.7em}.std42-dialog .ui-dialog-titlebar{font-size:.82em}.std42-dialog .ui-dialog-content{font-size:.72em}.std42-dialog .ui-dialog-buttonpane{font-size:.76em}.dialogelfinder .dialogelfinder-drag,.elfinder-info-tb{font-size:.9em}.elfinder-upload-dialog-or,.elfinder-upload-dropbox{font-size:1.2em}.elfinder .elfinder-navbar{font-size:.72em}.elfinder-place-drag .elfinder-navbar-dir{font-size:.9em}.elfinder-quicklook-title{font-size:.7em;font-weight:400}.elfinder-quicklook-info-data{font-size:.72em}.elfinder-quicklook-preview-text-wrapper{font-size:.9em}.elfinder-button-menu-item{font-size:.72em}.elfinder-button-search input{font-size:.8em}.elfinder-drag-num{font-size:12px}.elfinder-toast{font-size:.76em}.elfinder .elfinder-navbar{width:230px;padding:3px 5px;background-image:none;border-top:0 solid;border-bottom:0 solid;overflow:auto;position:relative}.elfinder .elfinder-navdock{box-sizing:border-box;width:230px;height:auto;position:absolute;bottom:0;overflow:auto}.elfinder-navdock .ui-resizable-n{top:0;height:20px}.elfinder-ltr .elfinder-navbar{float:left;border-left:0 solid}.elfinder-rtl .elfinder-navbar{float:right;border-right:0 solid}.elfinder-ltr .ui-resizable-e,.elfinder-touch .elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon{margin-left:10px}.elfinder-tree{display:table;width:100%;margin:0 0 .5em;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder-navbar-dir{position:relative;display:block;white-space:nowrap;padding:3px 12px;margin:0;outline:0 solid;border:1px solid transparent;cursor:default}.elfinder-touch .elfinder-navbar-dir{padding:12px}.elfinder-ltr .elfinder-navbar-dir{padding-left:35px}.elfinder-rtl .elfinder-navbar-dir{padding-right:35px}.elfinder-navbar-arrow,.elfinder-navbar-icon{position:absolute;top:50%;margin-top:-8px;background-repeat:no-repeat}.elfinder-navbar-arrow{display:none;width:12px;height:14px;background-image:url(../img/arrows-normal.png)}.elfinder-ltr .elfinder-navbar-arrow{left:0}.elfinder-rtl .elfinder-navbar-arrow{right:0}.elfinder-touch .elfinder-navbar-arrow{-moz-transform-origin:top left;-moz-transform:scale(1.4);zoom:1.4;margin-bottom:7px}.elfinder-ltr.elfinder-touch .elfinder-navbar-arrow{left:-3px;margin-right:20px}.elfinder-rtl.elfinder-touch .elfinder-navbar-arrow{right:-3px;margin-left:20px}.ui-state-active .elfinder-navbar-arrow{background-image:url(../img/arrows-active.png)}.elfinder-navbar-collapsed .elfinder-navbar-arrow{display:block}.elfinder-subtree-chksubdir .elfinder-navbar-arrow{opacity:.25;filter:Alpha(Opacity=25)}.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 4px}.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 -10px}.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow{background-position:0 -21px}.elfinder-navbar-icon{width:16px;height:16px;background-image:url(../img/toolbar.png);background-position:0 -16px}.elfinder-ltr .elfinder-navbar-icon{left:14px}.elfinder-rtl .elfinder-navbar-icon{right:14px}.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 -704px}.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon,.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon{background-position:0 0;background-size:contain}.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon{background-image:url(../img/volume_icon_local.svg);background-image:url(../img/volume_icon_local.png) \9}.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon{background-image:url(../img/volume_icon_trash.svg);background-image:url(../img/volume_icon_trash.png) \9}.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon{background-image:url(../img/volume_icon_ftp.svg);background-image:url(../img/volume_icon_ftp.png) \9}.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon{background-image:url(../img/volume_icon_sql.svg);background-image:url(../img/volume_icon_sql.png) \9}.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon{background-image:url(../img/volume_icon_dropbox.svg);background-image:url(../img/volume_icon_dropbox.png) \9}.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon{background-image:url(../img/volume_icon_googledrive.svg);background-image:url(../img/volume_icon_googledrive.png) \9}.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon{background-image:url(../img/volume_icon_onedrive.svg);background-image:url(../img/volume_icon_onedrive.png) \9}.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon{background-image:url(../img/volume_icon_box.svg);background-image:url(../img/volume_icon_box.png) \9}.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon{background-image:url(../img/volume_icon_zip.svg);background-image:url(../img/volume_icon_zip.png) \9}.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon{background-image:url(../img/volume_icon_network.svg);background-image:url(../img/volume_icon_network.png) \9}.elfinder-droppable-active .elfinder-navbar-icon,.ui-state-active .elfinder-navbar-icon,.ui-state-hover .elfinder-navbar-icon{background-position:0 -32px}.elfinder-ltr .elfinder-navbar-subtree{margin-left:12px}.elfinder-rtl .elfinder-navbar-subtree{margin-right:12px}.elfinder-tree .elfinder-spinner{position:absolute;top:50%;margin:-7px 0 0}.elfinder-ltr .elfinder-tree .elfinder-spinner{left:0;margin-left:-2px}.elfinder-rtl .elfinder-tree .elfinder-spinner{right:0;margin-right:-2px}.elfinder-navbar .elfinder-lock,.elfinder-navbar .elfinder-perms,.elfinder-navbar .elfinder-symlink{opacity:.6;filter:Alpha(Opacity=60)}.elfinder-navbar .elfinder-perms{bottom:-1px;margin-top:-8px}.elfinder-navbar .elfinder-lock{top:-2px}.elfinder-ltr .elfinder-navbar .elfinder-perms{left:20px;transform:scale(.8)}.elfinder-rtl .elfinder-navbar .elfinder-perms{right:20px;transform:scale(.8)}.elfinder-ltr .elfinder-navbar .elfinder-lock{left:20px;transform:scale(.8)}.elfinder-rtl .elfinder-navbar .elfinder-lock{right:20px;transform:scale(.8)}.elfinder-ltr .elfinder-navbar .elfinder-symlink{left:8px;transform:scale(.8)}.elfinder-rtl .elfinder-navbar .elfinder-symlink{right:8px;transform:scale(.8)}.elfinder-navbar input{width:100%;border:0 solid;margin:0;padding:0}.elfinder-navbar .ui-resizable-handle{width:12px;background:url(../img/resize.png) center center no-repeat}.elfinder-nav-handle-icon{position:absolute;top:50%;margin:-8px 2px 0;opacity:.5;filter:Alpha(Opacity=50)}.elfinder-navbar-pager{width:100%;box-sizing:border-box;padding-top:3px;padding-bottom:3px}.elfinder-touch .elfinder-navbar-pager{padding-top:10px;padding-bottom:10px}.elfinder-places{border:none;margin:0;padding:0}.elfinder-navbar-swipe-handle{position:absolute;top:0;height:100%;width:50px;pointer-events:none}.elfinder-ltr .elfinder-navbar-swipe-handle{left:0;background:linear-gradient(to right,#dde4eb 0,rgba(221,228,235,.8) 5px,rgba(216,223,230,.3) 8px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}.elfinder-rtl .elfinder-navbar-swipe-handle{right:0;background:linear-gradient(to left,#dde4eb 0,rgba(221,228,235,.8) 5px,rgba(216,223,230,.3) 8px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}.elfinder-navbar-root .elfinder-places-root-icon{position:absolute;top:50%;margin-top:-9px;cursor:pointer}.elfinder-ltr .elfinder-places-root-icon{right:10px}.elfinder-rtl .elfinder-places-root-icon{left:10px}.elfinder-navbar-expanded .elfinder-places-root-icon{display:block}.elfinder-place-drag{font-size:.8em}.elfinder-quicklook{position:absolute;background:url(../img/quicklook-bg.png);overflow:hidden;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;padding:20px 0 40px}.elfinder-navdock .elfinder-quicklook{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;font-size:90%;overflow:auto}.elfinder-quicklook.elfinder-touch{padding:30px 0 40px}.elfinder-quicklook .ui-resizable-se{width:14px;height:14px;right:5px;bottom:3px;background:url(../img/toolbar.png) 0 -496px no-repeat}.elfinder-quicklook.elfinder-touch .ui-resizable-se{-moz-transform-origin:bottom right;-moz-transform:scale(1.5);zoom:1.5}.elfinder-quicklook.elfinder-quicklook-fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;margin:0;box-sizing:border-box;width:100%;height:100%;object-fit:contain;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-background-clip:padding-box;padding:0;background:#000;display:block}.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar,.elfinder-quicklook-fullscreen.elfinder-quicklook .ui-resizable-handle,.elfinder-statusbar:after,.elfinder-statusbar:before{display:none}.elfinder-quicklook-fullscreen .elfinder-quicklook-preview{border:0 solid}.elfinder-quicklook-cover,.elfinder-quicklook-titlebar{width:100%;height:100%;top:0;left:0;position:absolute}.elfinder-quicklook-cover.elfinder-quicklook-coverbg{background-color:#fff;opacity:.000001;filter:Alpha(Opacity=.0001)}.elfinder-quicklook-titlebar{text-align:center;background:#777;height:20px;-moz-border-radius-topleft:7px;-webkit-border-top-left-radius:7px;border-top-left-radius:7px;-moz-border-radius-topright:7px;-webkit-border-top-right-radius:7px;border-top-right-radius:7px;border:none;line-height:1.2}.elfinder-navdock .elfinder-quicklook-titlebar{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;cursor:default}.elfinder-touch .elfinder-quicklook-titlebar{height:30px}.elfinder-quicklook-title{display:inline-block;white-space:nowrap;overflow:hidden}.elfinder-touch .elfinder-quicklook-title{padding:8px 0}.elfinder-quicklook-titlebar-icon{position:absolute;left:4px;top:50%;margin-top:-8px;height:16px;border:none}.elfinder-touch .elfinder-quicklook-titlebar-icon{height:22px}.elfinder-quicklook-titlebar-icon .ui-icon{position:relative;margin:-9px 3px 0 0;cursor:pointer;border-radius:10px;border:1px solid;opacity:.7;filter:Alpha(Opacity=70)}.elfinder-quicklook-titlebar-icon .ui-icon.ui-icon-closethick{padding-left:1px}.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon{opacity:.6;filter:Alpha(Opacity=60)}.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon{margin-top:-5px}.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right{left:auto;right:4px;direction:rtl}.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon{margin:-9px 0 0 3px}.elfinder-touch .elfinder-quicklook-titlebar .ui-icon{-moz-transform-origin:center center;-moz-transform:scale(1.2);zoom:1.2}.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon{margin-right:10px}.elfinder-quicklook-preview{overflow:hidden;position:relative;border:0 solid;border-left:1px solid transparent;border-right:1px solid transparent;height:100%}.elfinder-navdock .elfinder-quicklook-preview{border-left:0;border-right:0}.elfinder-quicklook-preview.elfinder-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.elfinder-quicklook-info-wrapper{display:table;position:absolute;width:100%;height:100%;height:calc(100% - 80px);left:0;top:20px}.elfinder-navdock .elfinder-quicklook-info-wrapper{height:calc(100% - 20px)}.elfinder-quicklook-info{display:table-cell;vertical-align:middle}.elfinder-ltr .elfinder-quicklook-info{padding:0 12px 0 112px}.elfinder-rtl .elfinder-quicklook-info{padding:0 112px 0 12px}.elfinder-ltr .elfinder-navdock .elfinder-quicklook-info{padding:0 0 0 80px}.elfinder-rtl .elfinder-navdock .elfinder-quicklook-info{padding:0 80px 0 0}.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child{color:#fff;font-weight:700;padding-bottom:.5em}.elfinder-quicklook-info-data{clear:both;padding-bottom:.2em;color:#fff}.elfinder-quicklook .elfinder-cwd-icon{position:absolute;left:32px;top:50%;margin-top:-20px}.elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon{left:16px}.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon{left:auto;right:32px}.elfinder-rtl .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon{right:6px}.elfinder-quicklook .elfinder-cwd-icon:before{top:-10px}.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:after,.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:before{left:-20px}.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:before{left:-14px}.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:after{left:-12px}.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:before{left:auto;right:40px}.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:after{left:auto;right:46px}.elfinder-quicklook-preview img{display:block;margin:0 auto}.elfinder-quicklook-navbar{position:absolute;left:50%;bottom:4px;width:140px;height:32px;padding:0;margin-left:-70px;border:1px solid transparent;border-radius:19px;-moz-border-radius:19px;-webkit-border-radius:19px}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar{width:188px;margin-left:-94px;padding:5px;border:1px solid #eee;background:#000;opacity:.4;filter:Alpha(Opacity=40)}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator{display:inline}.elfinder-quicklook-navbar-icon{width:32px;height:32px;margin:0 7px;float:left;background:url(../img/quicklook-icons.png) 0 0 no-repeat}.elfinder-quicklook-navbar-icon-fullscreen{background-position:0 -64px}.elfinder-quicklook-navbar-icon-fullscreen-off{background-position:0 -96px}.elfinder-quicklook-navbar-icon-prev{background-position:0 0}.elfinder-quicklook-navbar-icon-next{background-position:0 -32px}.elfinder-quicklook-navbar-icon-close{background-position:0 -128px;display:none}.elfinder-quicklook-navbar-separator{width:1px;height:32px;float:left;border-left:1px solid #fff;display:none}.elfinder-quicklook-preview-archive-wrapper,.elfinder-quicklook-preview-text-wrapper{width:100%;height:100%;background:#fff;color:#222;overflow:auto;-webkit-overflow-scrolling:touch}.elfinder-quicklook-preview-archive-wrapper{font-size:90%}.elfinder-quicklook-preview-archive-wrapper strong{padding:0 5px}pre.elfinder-quicklook-preview-text,pre.elfinder-quicklook-preview-text.prettyprint{width:auto;height:auto;margin:0;padding:3px 9px;border:none;-o-tab-size:4;-moz-tab-size:4;tab-size:4}.elfinder-quicklook-preview-charsleft hr{border:none;border-top:dashed 1px}.elfinder-quicklook-preview-charsleft span{font-size:90%;font-style:italic;cursor:pointer}.elfinder-quicklook-preview-html,.elfinder-quicklook-preview-iframe,.elfinder-quicklook-preview-pdf{width:100%;height:100%;background:#fff;margin:0;border:none;display:block}.elfinder-quicklook-preview-flash{width:100%;height:100%}.elfinder-quicklook-preview-audio{width:100%;position:absolute;bottom:0;left:0}embed.elfinder-quicklook-preview-audio{height:30px;background:0 0}.elfinder-quicklook-preview-video{width:100%;height:100%}.elfinder .elfinder-quicklook .elfinder-quicklook-info *,.elfinder .elfinder-quicklook .elfinder-quicklook-preview *{-webkit-user-select:auto;-moz-user-select:text;-khtml-user-select:text;user-select:text}.elfinder-statusbar{display:flex;justify-content:space-between;cursor:default;text-align:center;font-weight:400;padding:.2em .5em;border-right:0 solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent}.elfinder-path,.elfinder-statusbar span{overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.elfinder-statusbar span{vertical-align:bottom}.elfinder-statusbar span.elfinder-path-other{flex-shrink:0;text-overflow:clip;-o-text-overflow:clip}.elfinder-statusbar span.ui-state-active,.elfinder-statusbar span.ui-state-hover{border:none}.elfinder-statusbar span.elfinder-path-cwd{cursor:default}.elfinder-path{display:flex;order:1;flex-grow:1;cursor:pointer;white-space:nowrap;max-width:30%\9}.elfinder-ltr .elfinder-path{text-align:left;float:left\9}.elfinder-rtl .elfinder-path{text-align:right;float:right\9}.elfinder-workzone-path{position:relative}.elfinder-workzone-path .elfinder-path{position:relative;font-size:.75em;font-weight:400;float:none;max-width:none;overflow:hidden;overflow-x:hidden;text-overflow:initial;-o-text-overflow:initial}.elfinder-mobile .elfinder-workzone-path .elfinder-path{overflow:auto;overflow-x:scroll}.elfinder-ltr .elfinder-workzone-path .elfinder-path{margin-left:24px}.elfinder-rtl .elfinder-workzone-path .elfinder-path{margin-right:24px}.elfinder-workzone-path .elfinder-path span{display:inline-block;padding:5px 3px}.elfinder-workzone-path .elfinder-path span.elfinder-path-cwd{font-weight:700}.elfinder-workzone-path .elfinder-path span.ui-state-active,.elfinder-workzone-path .elfinder-path span.ui-state-hover{border:none}.elfinder-workzone-path .elfinder-path-roots{position:absolute;top:0;width:24px;height:20px;padding:2px;border:none;overflow:hidden}.elfinder-ltr .elfinder-workzone-path .elfinder-path-roots{left:0}.elfinder-rtl .elfinder-workzone-path .elfinder-path-roots{right:0}.elfinder-stat-size{order:3;flex-grow:1;overflow:hidden;white-space:nowrap}.elfinder-ltr .elfinder-stat-size{text-align:right;float:right\9}.elfinder-rtl .elfinder-stat-size{text-align:left;float:left\9}.elfinder-stat-selected{order:2;margin:0 .5em;white-space:nowrap;overflow:hidden}.elfinder .elfinder-toast{position:absolute;top:12px;right:12px;max-width:90%;cursor:default}.elfinder .elfinder-toast>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:8px 16px 8px 50px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.9;filter:alpha(opacity=90);background-color:#030303;text-align:center}.elfinder .elfinder-toast>.toast-info{background-color:#2f96b4;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>.toast-error{background-color:#bd362f;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>.toast-success{background-color:#51a351;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}.elfinder .elfinder-toast>.toast-warning{background-color:#f89406;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}.elfinder .elfinder-toast>div button.ui-button{background-image:none;margin-top:8px;padding:.5em .8em}.elfinder .elfinder-toast>.toast-success button.ui-button{background-color:green;color:#fff}.elfinder .elfinder-toast>.toast-success button.ui-button.ui-state-hover{background-color:#add6ad;color:#254b25}.elfinder .elfinder-toast>.toast-info button.ui-button{background-color:#046580;color:#fff}.elfinder .elfinder-toast>.toast-info button.ui-button.ui-state-hover{background-color:#7dc6db;color:#046580}.elfinder .elfinder-toast>.toast-warning button.ui-button{background-color:#dd8c1a;color:#fff}.elfinder .elfinder-toast>.toast-warning button.ui-button.ui-state-hover{background-color:#e7ae5e;color:#422a07}.elfinder-toolbar{padding:4px 0 3px;border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;max-height:50%;overflow-y:auto}.elfinder-buttonset{margin:1px 4px;float:left;background:0 0;padding:0;overflow:hidden}.elfinder .elfinder-button{min-width:16px;height:16px;margin:0;padding:4px;float:left;overflow:hidden;position:relative;border:0 solid;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;line-height:1;cursor:default}.elfinder-rtl .elfinder-button{float:right}.elfinder-touch .elfinder-button{min-width:20px;height:20px}.elfinder .ui-icon-search{cursor:pointer}.elfinder-toolbar-button-separator{float:left;padding:0;height:24px;border-top:0 solid;border-right:0 solid;border-bottom:0 solid;width:0}.elfinder-rtl .elfinder-toolbar-button-separator{float:right}.elfinder-touch .elfinder-toolbar-button-separator{height:28px}.elfinder .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon,.elfinder .elfinder-button.ui-state-disabled .elfinder-button-text{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:inline-block;background:url(../img/toolbar.png) no-repeat}.elfinder-button-text{position:relative;display:inline-block;top:-4px;margin:0 2px;font-size:12px}.elfinder-touch .elfinder-button-icon{transform:scale(1.25);transform-origin:top left}.elfinder-rtl.elfinder-touch .elfinder-button-icon{transform-origin:top right}.elfinder-touch .elfinder-button-text{transform:translate(3px,3px);top:-5px}.elfinder-rtl.elfinder-touch .elfinder-button-text{transform:translate(-3px,3px)}.elfinder-touch .elfinder-button-icon.elfinder-contextmenu-extra-icon{transform:scale(2);transform-origin:12px 8px}.elfinder-rtl.elfinder-touch .elfinder-button-icon.elfinder-contextmenu-extra-icon{transform-origin:4px 8px}.elfinder-button-icon-home{background-position:0 0}.elfinder-button-icon-back{background-position:0 -112px}.elfinder-button-icon-forward{background-position:0 -128px}.elfinder-button-icon-up{background-position:0 -144px}.elfinder-button-icon-dir{background-position:0 -16px}.elfinder-button-icon-opendir{background-position:0 -32px}.elfinder-button-icon-reload{background-position:0 -160px}.elfinder-button-icon-open{background-position:0 -176px}.elfinder-button-icon-mkdir{background-position:0 -192px}.elfinder-button-icon-mkfile{background-position:0 -208px}.elfinder-button-icon-rm{background-position:0 -832px}.elfinder-button-icon-trash{background-position:0 -224px}.elfinder-button-icon-restore{background-position:0 -816px}.elfinder-button-icon-copy{background-position:0 -240px}.elfinder-button-icon-cut{background-position:0 -256px}.elfinder-button-icon-paste{background-position:0 -272px}.elfinder-button-icon-getfile{background-position:0 -288px}.elfinder-button-icon-duplicate{background-position:0 -304px}.elfinder-button-icon-rename{background-position:0 -320px}.elfinder-button-icon-edit{background-position:0 -336px}.elfinder-button-icon-quicklook{background-position:0 -352px}.elfinder-button-icon-upload{background-position:0 -368px}.elfinder-button-icon-download{background-position:0 -384px}.elfinder-button-icon-info{background-position:0 -400px}.elfinder-button-icon-extract{background-position:0 -416px}.elfinder-button-icon-archive{background-position:0 -432px}.elfinder-button-icon-view{background-position:0 -448px}.elfinder-button-icon-view-list{background-position:0 -464px}.elfinder-button-icon-help{background-position:0 -480px}.elfinder-button-icon-resize{background-position:0 -512px}.elfinder-button-icon-link{background-position:0 -528px}.elfinder-button-icon-search{background-position:0 -561px}.elfinder-button-icon-sort{background-position:0 -577px}.elfinder-button-icon-rotate-r{background-position:0 -625px}.elfinder-button-icon-rotate-l{background-position:0 -641px}.elfinder-button-icon-netmount{background-position:0 -688px}.elfinder-button-icon-netunmount{background-position:0 -96px}.elfinder-button-icon-places{background-position:0 -704px}.elfinder-button-icon-chmod{background-position:0 -48px}.elfinder-button-icon-accept{background-position:0 -736px}.elfinder-button-icon-menu{background-position:0 -752px}.elfinder-button-icon-colwidth{background-position:0 -768px}.elfinder-button-icon-fullscreen{background-position:0 -784px}.elfinder-button-icon-unfullscreen{background-position:0 -800px}.elfinder-button-icon-empty{background-position:0 -848px}.elfinder-button-icon-undo{background-position:0 -864px}.elfinder-button-icon-redo{background-position:0 -880px}.elfinder-button-icon-preference{background-position:0 -896px}.elfinder-button-icon-mkdirin{background-position:0 -912px}.elfinder-button-icon-selectall{background-position:0 -928px}.elfinder-button-icon-selectnone{background-position:0 -944px}.elfinder-button-icon-selectinvert{background-position:0 -960px}.elfinder-button-icon-opennew{background-position:0 -976px}.elfinder-button-icon-hide{background-position:0 -992px}.elfinder-button-icon-text{background-position:0 -1008px}.elfinder-rtl .elfinder-button-icon-back,.elfinder-rtl .elfinder-button-icon-forward,.elfinder-rtl .elfinder-button-icon-getfile,.elfinder-rtl .elfinder-button-icon-help,.elfinder-rtl .elfinder-button-icon-redo,.elfinder-rtl .elfinder-button-icon-rename,.elfinder-rtl .elfinder-button-icon-search,.elfinder-rtl .elfinder-button-icon-undo,.elfinder-rtl .elfinder-button-icon-view-list,.elfinder-rtl .ui-icon-search{-ms-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scale(-1,1)}.elfinder-rtl.elfinder-touch .elfinder-button-icon-back,.elfinder-rtl.elfinder-touch .elfinder-button-icon-forward,.elfinder-rtl.elfinder-touch .elfinder-button-icon-getfile,.elfinder-rtl.elfinder-touch .elfinder-button-icon-help,.elfinder-rtl.elfinder-touch .elfinder-button-icon-redo,.elfinder-rtl.elfinder-touch .elfinder-button-icon-rename,.elfinder-rtl.elfinder-touch .elfinder-button-icon-search,.elfinder-rtl.elfinder-touch .elfinder-button-icon-undo,.elfinder-rtl.elfinder-touch .elfinder-button-icon-view-list,.elfinder-rtl.elfinder-touch .ui-icon-search{-ms-transform:scale(-1.25,1.25) translateX(16px);-webkit-transform:scale(-1.25,1.25) translateX(16px);transform:scale(-1.25,1.25) translateX(16px)}.elfinder .elfinder-menubutton{overflow:visible}.elfinder-button-icon-spinner{background:url(../img/spinner-mini.gif) center center no-repeat}.elfinder-button-menu{position:absolute;margin-top:24px;padding:3px 0;overflow-y:auto}.elfinder-touch .elfinder-button-menu{margin-top:30px}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.elfinder-touch .elfinder-button-menu-item{padding:12px 19px}.elfinder-button-menu .ui-state-hover{border:0 solid}.elfinder-button-menu-item-separated{border-top:1px solid #ccc}.elfinder-button-menu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-button-menu-item-selected .ui-icon{display:block}.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n{display:none}.elfinder-button form{position:absolute;top:0;right:0;opacity:0;filter:Alpha(Opacity=0);cursor:pointer}.elfinder .elfinder-button form input{background:0 0;cursor:default}.elfinder .elfinder-button-search{border:0 solid;background:0 0;padding:0;margin:1px 4px;height:auto;min-height:26px;width:70px;overflow:visible}.elfinder .elfinder-button-search.ui-state-active{width:220px}.elfinder .elfinder-button-search-menu{font-size:8pt;text-align:center;width:auto;min-width:180px;position:absolute;top:30px;padding-right:5px;padding-left:5px}.elfinder-ltr .elfinder-button-search-menu{right:22px;left:auto}.elfinder-rtl .elfinder-button-search-menu{right:auto;left:22px}.elfinder-touch .elfinder-button-search-menu{top:34px}.elfinder .elfinder-button-search-menu div{margin:5px auto;display:table}.elfinder .elfinder-button-search-menu div .ui-state-hover{border:1px solid}.elfinder-ltr .elfinder-button-search{float:right;margin-right:10px}.elfinder-rtl .elfinder-button-search{float:left;margin-left:10px}.elfinder-rtl .ui-controlgroup>.ui-controlgroup-item{float:right}.elfinder-button-search input[type=text]{box-sizing:border-box;width:100%;height:26px;padding:0 20px;line-height:22px;border:1px solid #aaa;-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px;outline:0 solid}.elfinder-button-search input::-ms-clear{display:none}.elfinder-touch .elfinder-button-search input{height:30px;line-height:28px}.elfinder-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-8px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-button-search-menu .ui-checkboxradio-icon{display:none}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-ltr .elfinder-button-search .ui-icon-close,.elfinder-rtl .elfinder-button-search .ui-icon-search{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0}.elfinder-toolbar-swipe-handle{position:absolute;top:0;left:0;height:50px;width:100%;pointer-events:none;background:linear-gradient(to bottom,#dde4eb 0,rgba(221,228,235,.8) 2px,rgba(216,223,230,.3) 5px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)}
elFinder/css/theme.css CHANGED
@@ -8,61 +8,345 @@
8
  /* input textarea */
9
  .elfinder input,
10
  .elfinder textarea {
11
- color: #000;
12
- background-color: #FFF;
 
13
  }
14
 
15
  /* dialogs */
16
- .std42-dialog, .std42-dialog .ui-widget-content { background-color:#ededed; background-image:none; background-clip: content-box; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  /* navbar */
19
- .elfinder .elfinder-navbar { background:#dde4eb; }
20
- .elfinder-navbar .ui-state-hover { color:#000; background-color:#edf1f4; border-color:#bdcbd8; }
21
- .elfinder-navbar .ui-state-active { background: #3875d7; border-color:#3875d7; color:#fff; }
22
- .elfinder-navbar .elfinder-droppable-active {background:#A7C6E5 !important;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  /* disabled elfinder */
24
- .elfinder-disabled .elfinder-navbar .ui-state-active { background: #dadada; border-color:#aaa; color:#fff; }
 
 
 
 
25
 
26
  /* workzone */
27
- .elfinder-workzone { background:#fff; }
 
 
28
 
29
  /* current directory */
 
 
 
 
 
30
  /* selected file in "icons" view */
31
- .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { background:#ccc; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  /* list view*/
34
- .elfinder-cwd table thead td.ui-state-hover { background:#ddd; }
35
- .elfinder-cwd table tr:nth-child(odd) { background-color:#edf3fe; }
 
 
 
 
 
 
36
  .elfinder-cwd table tr {
37
- border: 1px solid transparent;
38
- border-top:1px solid #fff;
 
 
 
 
 
 
 
 
39
  }
40
- .elfinder-cwd .elfinder-droppable-active td { background:#A7C6E5 !important; }
41
 
 
 
 
42
 
43
  /* common selected background/color */
44
  .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover,
45
  .elfinder-cwd table td.ui-state-hover,
46
- .elfinder-button-menu .ui-state-hover { background: #3875d7; color:#fff;}
 
 
 
 
47
  /* disabled elfinder */
48
  .elfinder-disabled .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover,
49
- .elfinder-disabled .elfinder-cwd table td.ui-state-hover { background:#dadada;}
 
 
50
 
51
  /* statusbar */
52
- .elfinder .elfinder-statusbar { color:#555; }
53
- .elfinder .elfinder-statusbar a { text-decoration:none; color:#555;}
54
-
55
 
56
- .std42-dialog .elfinder-help, .std42-dialog .elfinder-help .ui-widget-content { background:#fff;}
 
 
 
57
 
58
  /* contextmenu */
59
- .elfinder-contextmenu .ui-state-active { background: #6293df; color:#fff; }
60
- .elfinder-contextmenu .ui-state-hover { background: #3875d7; color:#fff; }
61
- .elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow { background-image:url('../img/arrows-active.png'); }
 
 
 
 
 
 
 
 
 
 
62
 
63
  /* dialog */
64
  .elfinder .ui-dialog input:text.ui-state-hover,
65
  .elfinder .ui-dialog textarea.ui-state-hover {
66
- background-image: none;
67
- background-color: inherit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  }
8
  /* input textarea */
9
  .elfinder input,
10
  .elfinder textarea {
11
+ color: #000;
12
+ background-color: #FFF;
13
+ border-color: #ccc;
14
  }
15
 
16
  /* dialogs */
17
+ .std42-dialog, .std42-dialog .ui-widget-content {
18
+ background-color: #ededed;
19
+ background-image: none;
20
+ background-clip: content-box;
21
+ }
22
+
23
+ .std42-dialog.elfinder-bg-translucent {
24
+ background-color: #fff;
25
+ background-color: rgba(255, 255, 255, 0.9);
26
+ }
27
+
28
+ .std42-dialog.elfinder-bg-translucent .ui-widget-content {
29
+ background-color: transparent;
30
+ }
31
+
32
+ .elfinder-quicklook-title {
33
+ color: #fff;
34
+ }
35
+
36
+ .elfinder-quicklook-titlebar-icon {
37
+ background-color: transparent;
38
+ background-image: none;
39
+ }
40
+
41
+ .elfinder-quicklook-titlebar-icon .ui-icon {
42
+ background-color: #d4d4d4;
43
+ border-color: #8a8a8a;
44
+ }
45
+
46
+ .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover .ui-icon,
47
+ .elfinder-mobile .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-icon,
48
+ .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close:hover,
49
+ .elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close {
50
+ background-color: #ff6252;
51
+ border-color: #e5695d;
52
+ background-image: url("../img/ui-icons_ffffff_256x240.png");
53
+ }
54
+
55
+ .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize:hover .ui-icon,
56
+ .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize .ui-icon,
57
+ .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize:hover,
58
+ .elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize {
59
+ background-color: #ffbc00;
60
+ border-color: #e3a40b;
61
+ background-image: url("../img/ui-icons_ffffff_256x240.png");
62
+ }
63
+
64
+ .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full:hover .ui-icon,
65
+ .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full .ui-icon,
66
+ .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full:hover,
67
+ .elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full {
68
+ background-color: #26c82f;
69
+ border-color: #13ae10;
70
+ background-image: url("../img/ui-icons_ffffff_256x240.png");
71
+ }
72
+
73
+ .std42-dialog .elfinder-help,
74
+ .std42-dialog .elfinder-help .ui-widget-content {
75
+ background: #fff;
76
+ }
77
 
78
  /* navbar */
79
+ .elfinder .elfinder-navbar {
80
+ background: #dde4eb;
81
+ }
82
+
83
+ .elfinder-navbar .ui-state-hover {
84
+ color: #000;
85
+ background-color: #edf1f4;
86
+ border-color: #bdcbd8;
87
+ }
88
+
89
+ .elfinder-navbar .ui-droppable-hover {
90
+ background: transparent;
91
+ }
92
+
93
+ .elfinder-navbar .ui-state-active {
94
+ background: #3875d7;
95
+ border-color: #3875d7;
96
+ color: #fff;
97
+ }
98
+
99
+ .elfinder-navbar .elfinder-droppable-active {
100
+ background: #A7C6E5;
101
+ }
102
+
103
  /* disabled elfinder */
104
+ .elfinder-disabled .elfinder-navbar .ui-state-active {
105
+ background: #dadada;
106
+ border-color: #aaa;
107
+ color: #777;
108
+ }
109
 
110
  /* workzone */
111
+ .elfinder-workzone {
112
+ background: #fff;
113
+ }
114
 
115
  /* current directory */
116
+ /* Is in trash */
117
+ .elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash {
118
+ background-color: #f0f0f0;
119
+ }
120
+
121
  /* selected file in "icons" view */
122
+ .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover,
123
+ .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active {
124
+ background: #ccc;
125
+ }
126
+
127
+ /* type badge in "icons" view */
128
+ /* default */
129
+ .elfinder-cwd-icon:before {
130
+ color: white;
131
+ background-color: #798da7;
132
+ }
133
+
134
+ /* type */
135
+ .elfinder-cwd-icon-text:before {
136
+ background-color: #6f99e6
137
+ }
138
+
139
+ .elfinder-cwd-icon-image:before {
140
+ background-color: #2ea26c
141
+ }
142
+
143
+ .elfinder-cwd-icon-audio:before {
144
+ background-color: #7bad2a
145
+ }
146
+
147
+ .elfinder-cwd-icon-video:before {
148
+ background-color: #322aad
149
+ }
150
+
151
+ /* subtype */
152
+ .elfinder-cwd-icon-x-empty:before,
153
+ .elfinder-cwd-icon-plain:before {
154
+ background-color: #719be6
155
+ }
156
+
157
+ .elfinder-cwd-icon-rtf:before,
158
+ .elfinder-cwd-icon-rtfd:before {
159
+ background-color: #83aae7
160
+ }
161
+
162
+ .elfinder-cwd-icon-pdf:before {
163
+ background-color: #db7424
164
+ }
165
+
166
+ .elfinder-cwd-icon-html:before {
167
+ background-color: #82bc12
168
+ }
169
+
170
+ .elfinder-cwd-icon-xml:before,
171
+ .elfinder-cwd-icon-css:before {
172
+ background-color: #7c7c7c
173
+ }
174
+
175
+ .elfinder-cwd-icon-x-shockwave-flash:before {
176
+ background-color: #f43a36
177
+ }
178
+
179
+ .elfinder-cwd-icon-zip:before,
180
+ .elfinder-cwd-icon-x-zip:before,
181
+ .elfinder-cwd-icon-x-xz:before,
182
+ .elfinder-cwd-icon-x-7z-compressed:before,
183
+ .elfinder-cwd-icon-x-gzip:before,
184
+ .elfinder-cwd-icon-x-tar:before,
185
+ .elfinder-cwd-icon-x-bzip:before,
186
+ .elfinder-cwd-icon-x-bzip2:before,
187
+ .elfinder-cwd-icon-x-rar:before,
188
+ .elfinder-cwd-icon-x-rar-compressed:before {
189
+ background-color: #97638e
190
+ }
191
+
192
+ .elfinder-cwd-icon-javascript:before,
193
+ .elfinder-cwd-icon-x-javascript:before,
194
+ .elfinder-cwd-icon-x-perl:before,
195
+ .elfinder-cwd-icon-x-python:before,
196
+ .elfinder-cwd-icon-x-ruby:before,
197
+ .elfinder-cwd-icon-x-sh:before,
198
+ .elfinder-cwd-icon-x-shellscript:before,
199
+ .elfinder-cwd-icon-x-c:before,
200
+ .elfinder-cwd-icon-x-csrc:before,
201
+ .elfinder-cwd-icon-x-chdr:before,
202
+ .elfinder-cwd-icon-x-c--:before,
203
+ .elfinder-cwd-icon-x-c--src:before,
204
+ .elfinder-cwd-icon-x-c--hdr:before,
205
+ .elfinder-cwd-icon-x-java:before,
206
+ .elfinder-cwd-icon-x-java-source:before,
207
+ .elfinder-cwd-icon-x-php:before {
208
+ background-color: #7c607c
209
+ }
210
+
211
+ .elfinder-cwd-icon-msword:before,
212
+ .elfinder-cwd-icon-vnd-ms-office:before,
213
+ .elfinder-cwd-icon-vnd-ms-word:before,
214
+ .elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:before,
215
+ .elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:before,
216
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:before,
217
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:before {
218
+ background-color: #2b569a
219
+ }
220
+
221
+ .elfinder-cwd-icon-ms-excel:before,
222
+ .elfinder-cwd-icon-vnd-ms-excel:before,
223
+ .elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:before,
224
+ .elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:before,
225
+ .elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:before,
226
+ .elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:before,
227
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:before,
228
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:before {
229
+ background-color: #107b10
230
+ }
231
+
232
+ .elfinder-cwd-icon-vnd-ms-powerpoint:before,
233
+ .elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:before,
234
+ .elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:before,
235
+ .elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:before,
236
+ .elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:before,
237
+ .elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:before,
238
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:before,
239
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:before,
240
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:before,
241
+ .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:before {
242
+ background-color: #d24625
243
+ }
244
+
245
+ .elfinder-cwd-icon-vnd-oasis-opendocument-chart:before,
246
+ .elfinder-cwd-icon-vnd-oasis-opendocument-database:before,
247
+ .elfinder-cwd-icon-vnd-oasis-opendocument-formula:before,
248
+ .elfinder-cwd-icon-vnd-oasis-opendocument-graphics:before,
249
+ .elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:before,
250
+ .elfinder-cwd-icon-vnd-oasis-opendocument-image:before,
251
+ .elfinder-cwd-icon-vnd-oasis-opendocument-presentation:before,
252
+ .elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:before,
253
+ .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:before,
254
+ .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:before,
255
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text:before,
256
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-master:before,
257
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-template:before,
258
+ .elfinder-cwd-icon-vnd-oasis-opendocument-text-web:before,
259
+ .elfinder-cwd-icon-vnd-openofficeorg-extension:before {
260
+ background-color: #00a500
261
+ }
262
+
263
+ .elfinder-cwd-icon-postscript:before {
264
+ background-color: #ff5722
265
+ }
266
 
267
  /* list view*/
268
+ .elfinder-cwd table thead td.ui-state-hover {
269
+ background: #ddd;
270
+ }
271
+
272
+ .elfinder-cwd table tr:nth-child(odd) {
273
+ background-color: #edf3fe;
274
+ }
275
+
276
  .elfinder-cwd table tr {
277
+ border: 1px solid transparent;
278
+ border-top: 1px solid #fff;
279
+ }
280
+
281
+ .elfinder-cwd .elfinder-droppable-active td {
282
+ background: #A7C6E5;
283
+ }
284
+
285
+ .elfinder-cwd.elfinder-table-header-sticky table {
286
+ border-top-color: #fff;
287
  }
 
288
 
289
+ .elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table {
290
+ border-top-color: #A7C6E5;
291
+ }
292
 
293
  /* common selected background/color */
294
  .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover,
295
  .elfinder-cwd table td.ui-state-hover,
296
+ .elfinder-button-menu .ui-state-hover {
297
+ background: #3875d7;
298
+ color: #fff;
299
+ }
300
+
301
  /* disabled elfinder */
302
  .elfinder-disabled .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover,
303
+ .elfinder-disabled .elfinder-cwd table td.ui-state-hover {
304
+ background: #dadada;
305
+ }
306
 
307
  /* statusbar */
308
+ .elfinder .elfinder-statusbar {
309
+ color: #555;
310
+ }
311
 
312
+ .elfinder .elfinder-statusbar a {
313
+ text-decoration: none;
314
+ color: #555;
315
+ }
316
 
317
  /* contextmenu */
318
+ .elfinder-contextmenu .ui-state-active {
319
+ background: #6293df;
320
+ color: #fff;
321
+ }
322
+
323
+ .elfinder-contextmenu .ui-state-hover {
324
+ background: #3875d7;
325
+ color: #fff;
326
+ }
327
+
328
+ .elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow {
329
+ background-image: url('../img/arrows-active.png');
330
+ }
331
 
332
  /* dialog */
333
  .elfinder .ui-dialog input:text.ui-state-hover,
334
  .elfinder .ui-dialog textarea.ui-state-hover {
335
+ background-image: none;
336
+ background-color: inherit;
337
+ }
338
+
339
+ /* edit dialog */
340
+ .elfinder-dialog-edit select.elfinder-edit-changed {
341
+ border-bottom: 2px solid #13ae10;
342
+ }
343
+
344
+ /* tooltip */
345
+ .ui-widget-content.elfinder-ui-tooltip {
346
+ background-color: #fff;
347
+ }
348
+
349
+ .elfinder-ui-tooltip.ui-widget-shadow,
350
+ .elfinder .elfinder-ui-tooltip.ui-widget-shadow {
351
+ box-shadow: 2px 6px 4px -4px #cecdcd;
352
  }
elFinder/img/arrows-active.png CHANGED
Binary file
elFinder/img/arrows-normal.png CHANGED
Binary file
elFinder/img/crop.gif CHANGED
Binary file
elFinder/img/dialogs.png CHANGED
Binary file
elFinder/img/editor-icons.png ADDED
Binary file
elFinder/img/icons-big.png CHANGED
Binary file
elFinder/img/icons-big.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="1800" viewBox="0 0 480 18000"><defs><linearGradient id="a"><stop offset="0" stop-color="#85b1d9"/><stop offset="1" stop-color="#dff0fe"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" y2="12.5" x2="20.2" y1="35.7" x1="20.2" id="f" xlink:href="#a" gradientTransform="translate(-1.2 27) scale(1.23846)"/><linearGradient y2="7.4" x2="21.9" y1="35.4" x1="21.7" gradientUnits="userSpaceOnUse" id="e" xlink:href="#a" gradientTransform="matrix(1.27105 0 0 1.27105 -1.2 -24.2)"/><filter id="g" color-interpolation-filters="sRGB"><feColorMatrix values="1 0 0 -0.2 -0 0 1 0 -0.2 -0 0 0 1 -0.2 -0 0 0 0 1 0"/></filter><filter id="o" color-interpolation-filters="sRGB"><feColorMatrix type="hueRotate" values="203" result="color1"/><feColorMatrix type="saturate" values=".7" result="color2"/></filter><filter id="n" color-interpolation-filters="sRGB"><feColorMatrix type="hueRotate" values="135" result="color1"/><feColorMatrix type="saturate" values=".7" result="color2"/></filter><linearGradient id="b"><stop offset="0" stop-color="#18a303"/><stop offset="1" stop-color="#43c330"/></linearGradient><linearGradient id="p" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" y1="991.7" y2="977"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><linearGradient id="q" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" xlink:href="#c" y1="991.7" y2="977"/><linearGradient id="c"><stop offset="0" stop-color="#a33e03"/><stop offset="1" stop-color="#d36118"/></linearGradient><linearGradient id="r" gradientUnits="userSpaceOnUse" x1="41" x2="5" xlink:href="#c" y1="46" y2="2"/><linearGradient id="s" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" xlink:href="#b" y1="991.7" y2="977"/><linearGradient id="t" gradientUnits="userSpaceOnUse" x1="41" x2="7" xlink:href="#b" y1="47" y2="3"/><linearGradient id="u" gradientTransform="matrix(2.9999 0 0 2.99917 -328 -2928.3)" gradientUnits="userSpaceOnUse" x1="123.7" x2="111.7" xlink:href="#d" y1="991.7" y2="977"/><linearGradient id="d"><stop offset="0" stop-color="#0369a3"/><stop offset="1" stop-color="#1c99e0"/></linearGradient><linearGradient id="v" gradientTransform="matrix(1.55551 0 0 1.66668 -316 1319)" gradientUnits="userSpaceOnUse" x1="230.1" x2="204.4" xlink:href="#d" y1="-762.6" y2="-791.4"/></defs><g transform="translate(0 -8369.4) scale(9.93789)"><path d="M42 854.6v35.2H6V843h24.4z" fill="#fff"/><path d="M30.2 843.4l11.3 11.2V889H6.8v-45.5h23.5m.6-1.3H5.3v48.3H43v-36.3z" fill="#788b9c"/><path d="M42 854.6v.4H30v-12h.4z" fill="#eef0f2"/><path d="M30.9 844.2l10 10h-10v-10m0-2h-1.3v13.5H43v-1.3z" fill="#788b9c"/><path word-spacing="0" letter-spacing="0" font-size="8.5" font-weight="400" aria-label="?" d="M21 880h4v4h-4zm3.8-2.2h-3.6v-2.5q0-1.6.5-2.6t2.3-2.4l1.7-1.4q1-.8 1.6-1.6.5-.7.5-1.5 0-1.4-1.3-2.2-1.3-1-3.3-1-1.5 0-3.3.6-1.7.6-3.6 1.6v-3q1.9-.8 3.7-1.3 1.9-.4 3.8-.4 3.6 0 5.7 1.5 2.2 1.6 2.2 4 0 1.3-.7 2.4-.7 1-2.4 2.4l-1.8 1.4-1.3 1q-.4.5-.5.9l-.2.8v1.3z" font-family="sans-serif" fill="navy"/><path d="M.6 937.2v-39.5h13l4 3.8h30.1v35.7z" fill="#b6dcfe"/><path d="M13.5 898.3l3.8 3.8h29.8v34.4H1.3v-38.2h12m.7-1.2H0v40.7h48.3v-36.9H17.8z" fill="#4788c7"/><path d="M.7 21v-33.1h13.6l3.8-2.6h29.6V21z" fill="url(#e)" transform="translate(0 916.2)"/><path d="M47 902.1v34.4H1.4v-31.8h13l.4-.2 3.5-2.4h28.9m1.2-1.2H17.8l-3.8 2.6H0v34.2h48.3z" fill="#4788c7"/><path d="M.6 987.5V949h12.8l3.7 3.8h25.7v34.7z" fill="#b6dcfe"/><path d="M13 949.6l3.8 3.8h25.5v33.5h-41v-37.3H13m.6-1.2H0v39.7h43.3v-36H17.4z" fill="#4788c7"/><path d="M.8 71l4.7-26h13.4l3.7-2.5h25L42.9 71z" fill="url(#f)" transform="translate(0 916.5)"/><path d="M46.9 959.6l-4.5 27.2H1.5L6 962h13l.3-.2 3.3-2.2h24.2m1.5-1.4h-26l-3.7 2.5H5L0 988h43.3z" fill="#4788c7"/><path d="M6 1040.8v-47h24.5l11.6 11.7v35.1z" fill="#fff"/><path d="M30.2 994.5l11.3 11v34.5H6.8v-45.6h23.5m.6-1.3H5.3v48.3H43v-36.2z" fill="#4788c7"/><path d="M30 1006v-12h.5l11.6 11.6v.4z" fill="#dff0fe"/><path d="M30.8 995.1l10 10h-10v-10m0-2h-1.3v13.6h13.4v-1.3z" fill="#4788c7"/><path stroke-miterlimit="10" d="M15.3 1015.3h1.5v6m6.6-.6c-.7 0-1.3-.7-1.3-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .7-.6 1.3-1.4 1.3zm8 0c-.7 0-1.3-.7-1.3-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .7-.6 1.3-1.4 1.3zm0 4h1.5v6m-8.1-.6c-.8 0-1.4-.6-1.4-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .8-.6 1.4-1.3 1.4zm-8 0c-.9 0-1.5-.6-1.5-1.4v-2.7a1.4 1.4 0 0 1 2.7 0v2.7c0 .8-.6 1.4-1.3 1.4z" fill="none" stroke="#4788c7" stroke-width="1.3"/><g id="k"><path d="M6.5 37.5v-35h18.3l8.7 8.7v26.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#fff"/><path d="M24.6 3l8.4 8.4V37H7V3h17.6m.4-1H6v36h28V11z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#4788c7"/><path d="M24.5 11.5v-9h.3l8.7 8.7v.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#dff2fe"/><path d="M25 3.4l7.6 7.6H25V3.4M25 2h-1v10h10v-1z" transform="matrix(1.34766 0 0 1.34167 -2.8 1040.7)" fill="#4788c7"/><path d="M27.5 17h-15a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h15c.3 0 .5.2.5.5s-.2.5-.5.5zm-4 3h-11a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h11c.3 0 .5.2.5.5s-.2.5-.5.5zm4 3h-15a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h15c.3 0 .5.2.5.5s-.2.5-.5.5zm-4 3h-11a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h11c.3 0 .5.2.5.5s-.2.5-.5.5zm4 3h-15a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h15c.3 0 .5.2.5.5s-.2.5-.5.5z" transform="matrix(1.34766 0 0 1.34167 -2.8 1042)" fill="#4788c7"/></g><path d="M6 1094.5h24.5l11.7 11.7v35.2H6z" fill="#fff"/><path d="M30.2 1095.2l11.3 11.1v34.4H6.8V1095h23.5m.6-1.3H5.3v48.3H43v-36.2z" fill="#2ea26c"/><path d="M30.1 1094.5h.4l11.7 11.7v.4h-12z" fill="#e8f8f1"/><path d="M30.8 1095.7l10.1 10.1h-10v-10m0-2h-1.4v13.5H43v-1.3z" fill="#2ea26c"/><g transform="matrix(1.34166 0 0 1.34166 -2.8 1093.8)" filter="url(#g)"><path d="M28 29v-3l-5-4.8-3 2.8 4.6 5z" fill="#79efa8"/><circle cx="26" cy="17" r="2" fill="#b5ffc9"/><path d="M26 29H12v-4l5-5z" fill="#b5ffc9"/></g><path d="M6 1191.8v-47h24.5l11.7 11.7v35.2z" fill="#fff"/><path d="M30.2 1145.6l11.3 11.1v34.3H6.8v-45.5h23.5m.6-1.5H5.3v48.3H43v-36.2z" fill="#7bad2a"/><path d="M42.2 1157h-12v-12.2h.3l11.7 11.7z" fill="#f2f9e7"/><path d="M30.8 1146l10.2 10.2H31v-10.1m0-2h-1.5v13.6H43v-1.4z" fill="#7bad2a"/><path d="M24.8 1177.9v-12.7c3.4 0 5.3 1.3 5.3 1.3v2.7s-2.4-1.4-4.7-1.4" fill="#c9e69a"/><path d="M25.4 1177.9h-1.3v-13.4h.7c3.7 0 5.6 1.5 5.7 1.5h.3v4.2l-1-.5s-2.4-1.2-4.4-1.2zm0-10.7c1.5 0 3.1.5 4 .9v-1.2c-.5-.3-1.8-1-4-1z" fill="#7bad2a"/><g transform="matrix(1.34166 0 0 1.34166 -2.8 1143)"><circle cx="18" cy="26" r="2.5" fill="#c4e490"/><path d="M18 24a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1.1.9-2 2-2m0-1a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3z" fill="#7bad2a"/></g><path d="M30.5 1195l11.7 11.7v35.2H6V1195z" fill="#fff"/><path d="M30.2 1195.8l11.3 11.2v34.2H6.8v-45.4h23.5m.6-1.3H5.3v48.2H43v-36.2z" fill="#788b9c"/><path d="M30.5 1195l11.7 11.7v.4h-12v-12z" fill="#eef0f2"/><path d="M30.8 1196.3l10.1 10.1h-10v-10.1m0-2h-1.4v13.5H43v-1.3z" fill="#788b9c"/><path d="M18.8 1231.8l14.8-8.3-14.8-8.4z" fill="#8bb7f0"/><g><path d="M6 1443.4v-47h24.5l11.7 11.7v35.2z" fill="#fff"/><path d="M30.2 1397.1l11.3 11v34.5H6.8v-45.7h23.5m.6-1.3H5.3v48.3H43v-36.2z" fill="#4788c7"/><path d="M30.1 1408.5v-12h.4l11.7 11.6v.4z" fill="#dff0fe"/><path d="M30.8 1397.6l10.1 10h-10v-10m0-2h-1.4v13.6H43v-1.3z" fill="#4788c7"/><path d="M36.7 1426.3a12.5 12.5 0 0 1-25 0c0-6.8 5.6-12.4 12.5-12.4 7 0 12.5 5.6 12.5 12.4z" fill="#c2e8ff"/><path d="M31.5 1436l-.4-1.2a8 8 0 0 1-.6-1.8v-.5c0-.4-.2-.9-.6-1.3l-.6-.4h-.2c-.5-.3-1-.3-1.4-.3-.8 0-1.2 0-1.6-.6v-1.1l.3-.6.3-.6.4-.9.5-1.3.1-.6v-.3l.6-.3h.1l.1-.2c.1 0 .3-.1.3-.4v-.4l.1-.2 1-1a30 30 0 0 0 1.4-1.3v-.5c0-.1-.2-.3-.4-.3a3 3 0 0 0-.4-.1l-.3-.2v-.1l.4-.7.5-.8.3-.3c.1-.3.3-.5.5-.6a1 1 0 0 1 .8 0 12.4 12.4 0 0 1-1 19.3z" fill="#bae0bd"/><path d="M32.4 1417.4a12 12 0 0 1 3.9 8.9c0 3.7-1.6 7.1-4.5 9.5a2 2 0 0 1-.3-1v-.2c-.4-.6-.5-1-.6-1.7v-.4c-.2-.4-.3-1-.7-1.5-.2-.3-.6-.5-.8-.5h-.2l-1.5-.4c-.8 0-1 0-1.3-.3V1429l.3-.6.3-.6.4-.8.6-1.4V1424.7l.5-.2.2-.1c.1-.1.4-.3.4-.8v-.4l1-1 1-1c.3 0 .4-.2.5-.4v-.7a1 1 0 0 0-.6-.5l-.4-.1.7-1.3.3-.3.4-.5h.4m0-.7h-.5c-.4.2-.7.8-1 1.1l-1 1.5c0 .2-.3.5 0 .6h.2l.7.4c.1 0 .3.2.1.3v.2l-2.3 2-.3.6s.2 0 .2.3l-.3.3-.7.4c-.2.3 0 .7-.2 1 0 .8-.6 1.3-.9 2l-.7 1.4c0 .6 0 1 .2 1.4.7 1 2 .5 3 1 .3 0 .6 0 .7.3.5.5.5 1.2.6 1.6l.6 1.9c.1.7.4 1.4.6 2l.3-.2a12.9 12.9 0 0 0 1-19.9h-.3z" fill="#5e9c76"/><path d="M24.3 1419.3l-.1-1.2.1-.7c.1-.4.2-.8.1-1.3l-.1-1.2v-.3h-1.1v-.4l.2-.4a12.3 12.3 0 0 1 5 .7l-.6 1.1v.2c-.2.5-.5 1-.8 1.1l-1 1-.8.6-.7.6a2.7 2.7 0 0 0-.3.2z" fill="#bae0bd"/><path d="M24.1 1414.1c1.3 0 2.6.2 4 .6l-.5.8v.2a2 2 0 0 1-.7 1l-1 1-.8.5-.6.6v-.7l.1-.6c.1-.4.3-.8.2-1.4l-.2-1.3v-.4l-.5-.2h-.4.4m0-.8h-.8l-.4.8c-.1.7.5.6 1 .7l.2 1.3c.2.7-.3 1.2-.3 2 0 .3 0 1.2.3 1.5h.2l.5-.3 1.3-1 1.2-1 1-1.5c0-.3.5-1 .4-1.6a13 13 0 0 0-4.6-.9z" fill="#5e9c76"/><path d="M20.4 1438.4a12.5 12.5 0 0 1-2.2-1v-.5l-.2-.6-.2-.8a18.8 18.8 0 0 0-.6-1.5c-.2-.5-.5-1-.5-1.5v-.5c0-.5 0-1-.3-1.7h2.9l.3.1c.3.1.7.2.9.4v.3l.3.5c.6.7 1.3.8 2 1l.6.2c.1 0 .2 0 .2.3.2.4 0 1 0 1.1l-.2.3c0 .4-.2.8-.4 1l-.8.5-.8.9-.4.5h-.1v.2l-.5.7zm-5-8.8l-.7-.3c-.3 0-.6-.2-.8-.3-1-.6-1.7-1.5-2-2.2 0-.2-.3-.3-.4-.4 0-3.5 1.4-6.7 3.8-9a12 12 0 0 1 3.6-.8h.7c.4.2.8.4 1 .7.3.3.7.6.7 1H20l-.6-.6a1 1 0 0 0-.4 0c-1 0-2.3 1.8-2.4 2.5a2 2 0 0 0 0 1.4c.2.3.5.5.8.6.5 0 1-.4 1.5-1l.5-.2.4-.3.2-.1h.2c.9 0 1.5.8 1.7 1.6v.5c-.3.6-1.4 1-2.4 1.4h-.7c-1 .4-1.8 1.4-1.8 2.4l-.1.8a1 1 0 0 0-.6-.5c-.1-.2-.2-.2-.5-.2l-.4-.1-.6-.2a1 1 0 0 0-.5.2c-.3.2-.8.8-.8 1.4 0 .2 0 .5.3.7l.4.2h.6v.1a57.3 57.3 0 0 0 .5.7z" fill="#bae0bd"/><path d="M18.9 1417h.6l1 .6.3.4h-.5l-.5-.5H19.5l-.4-.2c-1.3 0-2.6 2-2.8 2.7-.1.5-.1 1.3.2 1.8.2.4.5.6 1 .7.6 0 1-.4 1.7-1l.5-.2.3-.3.2-.1c.7 0 1.3.7 1.5 1.4v.2c-.2.4-1 1-2.1 1.3h-.4a1 1 0 0 0-.5 0c-1 .4-2 1.5-2 2.6v.1a1 1 0 0 0-.8-.2l-.3-.1a2 2 0 0 0-.7-.2c-.3 0-.5 0-.7.2v.1c-.4.2-.9.9-.9 1.6v.2c-.5-.5-1-1-1.2-1.5a7 7 0 0 0-.2-.3 12 12 0 0 1 3.6-8.8c1.3-.3 2.5-.6 3.4-.6m.3 13.8a16.5 16.5 0 0 0 1 .3v.2l.2.5v.2c.8.7 1.6 1 2.2 1l.7.2v1h-.1l-.1.3-.3.9-.7.4h-.2l-1 1-.3.5-.2.2-.2.5-1.8-.7v-.4l-.1-.5v-.2l-.3-.7-.2-.8a8 8 0 0 0-.4-.8 3 3 0 0 1-.4-1.3v-.5l-.1-1.3H19m-.2-14.5c-1 0-2.5.2-3.8.6-2.4 2.5-3.9 5.8-3.9 9.4v.2l.3.4c.4 1 1.3 1.8 2.2 2.4.6.4 1.7.4 2.3 1.1.5.6.4 1.3.4 2 0 1 .6 1.7.9 2.5l.4 1.4.2 1.2c.8.6 1.7.9 2.5 1 .2 0 .8-.7.8-1 .4-.3.7-1 1.2-1.2l.8-.5c.3-.3.5-1 .6-1.4.2-.3.3-1 .2-1.4-.1-.2-.2-.4-.5-.5-.8-.3-1.7-.3-2.4-1l-.3-1-1.5-.5h-3c-.4-.2-.7-.7-1-1.2 0 0 0-.4-.3-.4H14.1v-.5c0-.4.2-.8.4-1.1l.4-.1 1 .2.4.2c.4.1.5.7.5 1.1v.3c0 .2.2.2.3.2l.3-2.2c0-1 .9-1.8 1.6-2h.7c1-.3 3-1.2 2.7-2.4-.3-1-1-2-2.1-2h-.4l-.7.6c-.4.3-1.3 1-1.7 1-.8 0-.8-1-.6-1.5 0-.5 1.3-2.3 2-2.3h.3l.6.6c.3.3.7.3 1.2.3l.4-.3v-.3c0-.4-.3-.8-.6-1-.3-.4-.7-.7-1.2-.8a3 3 0 0 0-.8 0z" fill="#5e9c76"/><g><path d="M24.1 1414.1a12.2 12.2 0 1 1 0 24.4 12.2 12.2 0 0 1 0-24.4m0-.7a12.9 12.9 0 1 0 0 25.8 12.9 12.9 0 0 0 0-25.8z" fill="#7496c4"/></g></g><g><path d="M6 1292.5v-47h24.5l11.7 11.6v35.3z" fill="#fff"/><path d="M30.2 1246.2l11.3 11v34.5H6.8V1246h23.5m.6-1.3H5.3v48.3H43v-36.3z" fill="#4788c7"/><path d="M30.1 1257.5v-12h.4l11.7 11.6v.4z" fill="#dff0fe"/><path d="M30.8 1246.7l10.1 10h-10v-10m0-2h-1.4v13.6H43v-1.4z" fill="#4788c7"/><path d="M34.2 1266.2H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h20.2c.4 0 .7.3.7.6 0 .4-.3.7-.7.7z" fill="purple"/><path d="M28.8 1270.2H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h15c.2 0 .5.3.5.6 0 .4-.3.7-.6.7z" fill="#f55"/><path d="M34.2 1274.3H14a.7.7 0 0 1-.7-.8c0-.3.3-.6.7-.6h20.2c.4 0 .7.3.7.6 0 .5-.3.8-.7.8z" fill="green"/><path d="M28.8 1278.3H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h15c.2 0 .5.3.5.6 0 .4-.3.7-.6.7z" fill="olive"/><path d="M34.2 1282.3H14a.7.7 0 0 1-.7-.7c0-.3.3-.6.7-.6h20.2c.4 0 .7.3.7.6 0 .4-.3.7-.7.7z" fill="#500"/></g><g><path d="M42.2 1307.4v35.2H6v-47h24.5z" fill="#fff"/><path d="M30.2 1296.3l11.3 11.3v34.4H6.8v-45.7h23.5m.6-1.3H5.3v48.3H43V1307z" fill="#c74343"/><path d="M42.2 1307.4v.4h-12v-12.1h.3z" fill="#ffd9d9"/><path d="M30.8 1296.9L41 1307H31v-10.2m0-2h-1.5v13.5H43v-1.3zm-16 40.7c-1 0-1.7-.6-1.7-1.3 0-1.9 2.4-3.3 5.6-4.4a38.2 38.2 0 0 0 3.5-8c-.8-2-1.2-3.7-1.2-5 0-.7 0-1.4.4-1.8.2-.5.8-.9 1.4-.9.6 0 1.1.3 1.4.8.2.4.2 1 .2 1.6 0 1.2-.4 3-.9 5a26.2 26.2 0 0 0 3.7 6.3 13 13 0 0 1 5.6.3c1.3.4 1.6 1.2 1.6 1.7s-.3 2-2.6 2a7 7 0 0 1-5.2-2.8c-2.4.3-5 .8-7.2 1.5-1.2 3-3 5-4.7 5zm-.3-1.3h.2c.7 0 1.9-1 2.9-2.5-1.9.8-3 1.7-3 2.5zm14.2-5a5 5 0 0 0 3.4 1.5c1.2 0 1.2-.4 1.2-.5 0-.3-.5-.4-.6-.5-1-.4-2.4-.6-4-.4zm-5.7-5.5a40.3 40.3 0 0 1-2.4 5.4c1.7-.4 3.4-.8 5-1a35.2 35.2 0 0 1-2.6-4.4zm0-8.3c-.2 0-.3 0-.3.2l-.1 1c0 .8 0 1.8.4 2.8.2-1 .4-2 .4-2.9 0-.7-.2-1-.2-1h-.2z" fill="#c74343"/></g><g id="l"><path d="M6.2 474v-46.7h24.4l11.6 11.6v35z" fill="#fff" transform="translate(-.3 916.1) scale(1.00625)"/><path d="M30.2 439.3v-12h.4l11.6 11.6v.4z" fill="#ffd5d5" transform="translate(-.3 916.1) scale(1.00625)"/><path d="M30.3 428l11.2 11v34.2H7v-45.4h23.4m.6-1.3H5.5v48H43v-36z" fill="#e64a19" transform="translate(-.3 916.1) scale(1.00625)"/><path d="M30.9 428.5l10 10H31v-10m0-2h-1.4V440H43v-1.3zM12.8 449l14.5-5.3 7.9 2v22.4l-8 2-14.4-5.3 14.5 2v-19.1l-9.3 2v13.1l-5.2 2z" fill="#e64a19" transform="translate(-.3 916.1) scale(1.00625)"/></g><g id="h"><path d="M6.5 37.5v-35h18.3l8.7 8.7v26.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#fff"/><path d="M24.6 3l8.4 8.4V37H7V3h17.6m.4-1H6v36h28V11z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#4788c7"/><path d="M24.5 11.5v-9h.3l8.7 8.7v.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#dff0fe"/><path d="M25 3.4l7.6 7.6H25V3.4M25 2h-1v10h10v-1z" transform="matrix(1.34766 0 0 1.34167 -2.8 1443.2)" fill="#4788c7"/><path d="M25.5 19.5l2 4-2 4m-11-8l-2 4 2 4m8-11l-5 14" transform="matrix(1.34766 0 0 1.34167 -2.8 1444.5)" stroke-miterlimit="10" fill="none" stroke="#4788c7" stroke-linecap="round"/></g><g id="j" transform="matrix(1.01074 0 0 1.00625 -.3 916)"><path d="M6.5 2.5h27v35h-27z" transform="translate(-2.5 974) scale(1.33333)" fill="#ffeea3"/><path d="M33 3v34H7V3h26m1-1H6v36h28z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M20 30.5c-2 0-3.5-1.6-3.5-3.5 0-.6.4-2.5 1-5.3.1-.7.7-1.2 1.4-1.2h2.2c.7 0 1.3.5 1.4 1.2l1 5.3c0 2-1.6 3.5-3.5 3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#fffae0"/><path d="M21 21c.5 0 1 .3 1 .8 1 4 1 5 1 5.2a3 3 0 0 1-6 0c0-.2 0-1.1 1-5.2a1 1 0 0 1 1-.8h2m0-1h-2a2 2 0 0 0-2 1.6c-.4 1.8-1 4.6-1 5.4a4 4 0 0 0 8 0c0-.8-.6-3.6-1-5.4a2 2 0 0 0-2-1.6z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="20" cy="27" r="1.5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 19H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="18.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 20H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="19.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 17H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="16.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 18H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="17.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 15H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="14.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 16H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="15.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 13H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="12.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 14H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="13.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 11H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="10.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 12H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="11.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 9H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="8.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 10H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="9.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 7H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="6.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 8H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="7.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M22.5 5H20l-1-1h3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="22.5" cy="4.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 6H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="5.5" r=".5" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><path d="M17.5 4H20l1-1h-3.5z" transform="translate(-2.5 974) scale(1.33333)" fill="#ba9b48"/><circle cx="17.5" cy="3.5" r=".5" fill="#ba9b48" transform="translate(-2.5 974) scale(1.33333)"/></g><g><path d="M6 2147.6v-47h24.5l11.7 11.7v35.2z" fill="#fff"/><path d="M30.2 2101.4l11.3 11.2v34.3H6.8v-45.4h23.5m.6-1.4H5.3v48.2H43V2112z" fill="#f44336"/><path d="M30.1 2112.7v-12h.4l11.7 11.6v.4z" fill="#fde4e3"/><path d="M30.8 2101.9L41 2112H31v-10m0-2h-1.5v13.4H43v-1.4z" fill="#f44336"/><g><path d="M11 2121a2.9 3 0 0 1 3-2.9h20.2a2.9 3 0 0 1 3 2.9v20.4a2.9 3 0 0 1-2.9 2.9H14a2.9 3 0 0 1-3-3z" fill="#f44336"/><path d="M13.2 2120.2v22H35v-22zm12.4 7.5H22v2.6h3.3v1.7H22v4.3h-2.1V2126h5.7zm3 8.6h-1.9V2126h2z" fill="#210403"/></g></g><g><path d="M22.7 2186v-35.2h17l8 8.7v26.5z" fill="#fff"/><path d="M39.5 2151.3l7.8 8.4v25.8H23.2v-34.2h16.3m.4-1H22.2v36.2h26.1v-27z" fill="#4788c7"/><path d="M39.4 2159.8v-9.1h.3l8 8.8v.3z" fill="#dff0fe"/><path d="M39.9 2151.7l7 7.6h-7v-7.6m0-1.4h-1v10.1h9.3v-1z" fill="#4788c7"/><path d="M12 2191.5v-35.3h17.1l8 8.8v26.4z" fill="#fff"/><path d="M29 2156.7l7.7 8.5v25.8H12.6v-34.3h16.3m.4-1H11.6v36.2h26v-27.1z" fill="#4788c7"/><path d="M28.8 2165.3v-9.1h.2l8 8.8v.3z" fill="#dff0fe"/><path d="M29.2 2157l7 7.8h-7v-7.7m0-1.4h-.9v10.1h9.3v-1z" fill="#4788c7"/><g><path d="M.5 2198v-35.2h17l8 8.8v26.4z" fill="#fff"/><path d="M17.3 2163.3l7.7 8.5v25.8H.9v-34.3h16.4m.4-1H0v36.3h26v-27.2z" fill="#4788c7"/><path d="M17.2 2172v-9.2h.3l8 8.8v.3z" fill="#dff0fe"/><path d="M17.7 2163.8l7 7.6h-7v-7.6m0-1.4h-1v10H26v-1z" fill="#4788c7"/></g></g><g id="i"><path d="M6.5 37.5v-35h18.3l8.7 8.7v26.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#fff"/><path d="M24.6 3l8.4 8.4V37H7V3h17.6m.4-1H6v36h28V11z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#4788c7"/><path d="M24.5 11.5v-9h.3l8.7 8.7v.3z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#dff0fe"/><path d="M25 3.4l7.6 7.6H25V3.4M25 2h-1v10h10v-1z" transform="matrix(1.34766 0 0 1.34167 -2.8 1493.5)" fill="#4788c7"/><path d="M2.5 3.5h35v33h-35z" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="#fff"/><path d="M37 4v32H3V4h34m1-1H2v34h36z" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="#4788c7"/><path d="M3 4h34v5H3z" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="#98ccfd"/><path d="M14.6 24.6c.5 1.1 1.3 1.9 2.2 1.9 2.1 0 3.2-2 3.2-4.5s-1.2-4.5-3.2-4.5c-1 0-1.7.8-2.2 2m10.8 5.1c-.5 1.1-1.3 1.9-2.2 1.9-2.1 0-3.2-2-3.2-4.5s1.2-4.5 3.2-4.5c1 0 1.7.8 2.2 2m3.1 9a20.6 20.6 0 0 0 0-13m-17 0a20.6 20.6 0 0 0 0 13" stroke-miterlimit="10" transform="matrix(.75201 0 0 .74867 9.2 1512.7)" fill="none" stroke="#4788c7" stroke-linecap="round"/></g><use height="100%" width="100%" transform="translate(0 402.5)" xlink:href="#h"/><use height="100%" width="100%" transform="translate(0 50.3)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 100.6)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 151)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 201.2)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 251.6)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 301.9)" xlink:href="#i"/><use height="100%" width="100%" transform="translate(0 50.3)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(0 100.6)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(0 151)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(0 1157.2)" xlink:href="#k"/><g transform="translate(0 -201.3)"><g transform="matrix(1.07692 0 0 1.07692 -2.2 -191.4)" id="m"><use transform="translate(2 1205.6) scale(.92857)" height="100%" width="100%" xlink:href="#l"/><path fill="#fff" stroke-width="1.1" d="M11.3 2469.7h26.2v28H11.3z"/></g><path d="M36.5 2474.2H24.9v20.3h11.6c.4 0 .7-.3.7-.7V2475c0-.4-.3-.7-.7-.7z" fill="#ff8a65"/><g fill="#fbe9e7"><path d="M24.1 2488h10.2v1.5H24.1zM24.1 2491h10.2v1.4H24.1zM28.5 2477.8a4.4 4.4 0 1 0 4.4 4.4h-4.4z"/><path d="M30 2476.4v4.3h4.3c0-2.4-2-4.3-4.3-4.3z"/></g><path fill="#e64a19" d="M26.3 2497.5l-15.2-3v-20.3l15.2-3z"/><path d="M19 2479.3h-3.6v10.2h2.2v-3.5h1.1c1.2 0 2.2-.4 3-1 .6-.6 1-1.5 1-2.5 0-2.1-1.3-3.2-3.8-3.2zm-.5 5h-.9v-3.3h1c1.1 0 1.7.6 1.7 1.6s-.6 1.6-1.8 1.6z" fill="#fff"/></g><g transform="translate(0 -201.3)"><use xlink:href="#m" width="100%" height="100%" transform="translate(0 50.3)" fill="none" filter="url(#n)"/><path d="M36.5 2524.5H24.9v20.4h11.6c.4 0 .7-.4.7-.8v-18.9c0-.4-.3-.7-.7-.7z" fill="#4caf50"/><path d="M30 2528.1h5v2.2h-5zM30 2535.4h5v2.2h-5zM30 2539h5v2.2h-5zM30 2531.8h5v2.2h-5zM24.9 2528.1h3.6v2.2H25zM24.9 2535.4h3.6v2.2H25zM24.9 2539h3.6v2.2H25zM24.9 2531.8h3.6v2.2H25z" fill="#fff"/><path d="M26.3 2547.8l-15.2-3v-20.3l15.2-2.9z" fill="#2e7d32"/><path d="M20.6 2539.8l-1.7-3.3-.2-.7-.3.7-1.8 3.3H14l3.2-5.1-3-5.1H17l1.4 3 .3.9.4-.9 1.6-3h2.5l-3 5 3.1 5.2h-2.7z" fill="#fff"/></g><g transform="translate(0 -201.3)"><use transform="translate(0 100.6)" height="100%" width="100%" xlink:href="#m" filter="url(#o)"/><path d="M36.5 2574.8H24.9v20.4h11.6c.4 0 .7-.4.7-.8v-18.9c0-.4-.3-.7-.7-.7z" fill="#2196f3"/><path d="M24.9 2578.5H35v1.4H24.9zM24.9 2581.4H35v1.4H24.9zM24.9 2584.3H35v1.4H24.9zM24.9 2587.2H35v1.4H24.9zM24.9 2590H35v1.5H24.9z" fill="#fff"/><path d="M26.3 2598l-15.2-2.8v-20.4l15.2-2.9z" fill="#0d47a1"/><path d="M22 2590h-1.9l-1.3-6.4-.1-1.2-.2 1.2-1.3 6.5h-2l-2.2-10.2h2l1.1 6.8.1 1.2.2-1.2 1.4-6.8h2l1.2 6.8.2 1.1v-1.1l1.2-6.8h1.8z" fill="#fff"/></g><g><path d="M6 2449.5v-47h24.6l11.7 11.7v35.3z" fill="#fff"/><path d="M30.3 2403.2l11.4 11.3v34.3h-35v-45.6h23.6m.6-1.3H5.3v48.3H43v-36.3z" fill="#ff5722"/><path d="M30.2 2414.6v-12h.4l11.7 11.6v.4z" fill="#ffe8e1"/><path d="M30.9 2403.7L41 2414H31v-10.2m0-1.8h-1.4v13.4H43v-1.4zM11 2422.9a3 3 0 0 1 3-3h20.3a3 3 0 0 1 3 3v20.3a3 3 0 0 1-3 3H14a3 3 0 0 1-3-3z" fill="#ff5722"/><path d="M13.2 2422.1v21.9h21.9V2422zm10.7 16l-.5-2h-2.9l-.5 2h-2.2l3.2-10.3h1.9l3.3 10.3zm5.2 0h-2v-7.6h2zm-.2-8.9a1 1 0 0 1-.8.3 1 1 0 0 1-.8-.3 1 1 0 0 1-.3-.7c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .3 0 .5-.3.7z" fill="#1c0802"/><path d="M21 2434.3h2l-1-3.7z" fill="#1c0802"/></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#p)" transform="translate(0 2452.2) scale(1.00625)"/><path d="M7 2455.2v42.3h34.3v-26.2l-16.1-16.1z" fill="#fff"/></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#q)" transform="translate(0 2502.5) scale(1.00625)"/><path d="M7 2505.5v42.3h34.3v-26.2l-16.1-16.1z" fill="#fff"/><path d="M13 20a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h22a2 2 0 0 0 2-2V22a2 2 0 0 0-2-2zm0 2h22v16H13zm2 3v2h18v-2zm2 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm3 0v2h13v-2zm-3 4a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm3 0v2h13v-2z" fill="url(#r)" transform="translate(0 2502.5) scale(1.00625)"/></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#s)" transform="translate(0 2552.8) scale(1.00625)"/><path d="M7 2555.8v42.3h34.3v-26.2l-16.1-16z" fill="#fff"/><path d="M12 19v21h13v1h11V30h-2V19h-1zm1 1h6v3h-6zm7 0h6v3h-6zm7 0h6v3h-6zm-14 4h6v3h-6zm7 0h6v3h-6zm7 0h6v3h-6zm-14 4h6v3h-6zm7 0h6v2h-1v1h-5zm7 0h6v2h-6zm-1 3h9v9h-9v-8zm-13 1h6v3h-6zm7 0h5v3h-5zm-7 4h6v3h-6zm7 0h5v3h-5z" fill="url(#t)" transform="translate(0 2552.8) scale(1.00625)"/><g fill="#43c330"><path d="M26.2 2588h3v5h-3zM29.2 2585h3v8h-3zM32.2 2590h3v3h-3z"/></g><g fill="#ccf4c6"><path d="M27.2 2589h1v4h-1zM30.2 2586h1v7h-1zM33.2 2591h1v2h-1z"/></g></g><g><path d="M6.4 0A3.1 3.1 0 0 0 4 3v42c0 1.6 1.4 3 3 3h34c1.6 0 3-1.4 3-3V18.8a3 3 0 0 0-.8-2.1L27.3.9a3 3 0 0 0-2.1-.9H7a3 3 0 0 0-.6 0zM33 0c-1 .3-1.3 1.9-.6 2.6l9 9c.9.9 2.6.2 2.6-1v-9c0-.9-.7-1.6-1.5-1.6H33z" fill="url(#u)" transform="translate(0 2603.1) scale(1.00625)"/><path d="M7 2606.1v42.3h34.3v-26.2l-16.1-16z" fill="#fff"/><path d="M12 18v2h8v-2zm10 0v10h14V18zm1 1h12v8-1l-2.5-3-2.5 2-3.5-4.5L23 26v-7zm-11 3v2h8v-2zm0 4v2h8v-2zm0 4v2h24v-2zm0 4v2h24v-2zm0 4v2h18v-2z" fill="url(#v)" transform="translate(0 2603.1) scale(1.00625)"/></g></g></svg>
elFinder/img/icons-small.png CHANGED
Binary file
elFinder/img/logo.png CHANGED
Binary file
elFinder/img/progress.gif CHANGED
Binary file
elFinder/img/quicklook-bg.png CHANGED
Binary file
elFinder/img/quicklook-icons.png CHANGED
Binary file
elFinder/img/spinner-mini.gif CHANGED
Binary file
elFinder/img/toolbar.png CHANGED
Binary file
elFinder/img/trashmesh.png ADDED
Binary file
elFinder/img/tui-icon-a.svg ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs>
2
+ <circle id="a" cx="16" cy="16" r="16"/>
3
+ </defs><symbol id="icon-a-ic-apply" viewBox="0 0 24 24">
4
+ <g fill="none" fill-rule="evenodd">
5
+ <path d="M0 0h24v24H0z"/>
6
+ <path stroke="#434343" d="M4 12.011l5 5L20.011 6"/>
7
+ </g>
8
+ </symbol><symbol id="icon-a-ic-cancel" viewBox="0 0 24 24">
9
+ <g fill="none" fill-rule="evenodd">
10
+ <path d="M0 0h24v24H0z"/>
11
+ <path stroke="#434343" d="M6 6l12 12M18 6L6 18"/>
12
+ </g>
13
+ </symbol><symbol id="icon-a-ic-color-transparent-w" viewBox="0 0 32 32">
14
+
15
+ <g fill="none" fill-rule="evenodd">
16
+ <g>
17
+ <use fill="#FFF" xlink:href="#a"/>
18
+ <circle cx="16" cy="16" r="15.5" stroke="#D5D5D5"/>
19
+ </g>
20
+ <path stroke="#FF4040" stroke-width="1.5" d="M27 5L5 27"/>
21
+ </g>
22
+ </symbol><symbol id="icon-a-ic-crop" viewBox="0 0 24 24">
23
+ <g fill="none" fill-rule="evenodd">
24
+ <path d="M0 0h24v24H0z"/>
25
+ <path fill="#434343" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
26
+ <path fill="#434343" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
27
+ </g>
28
+ </symbol><symbol id="icon-a-ic-delete-all" viewBox="0 0 24 24">
29
+ <g fill="#434343" fill-rule="evenodd">
30
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
31
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
32
+ </g>
33
+ </symbol><symbol id="icon-a-ic-delete" viewBox="0 0 24 24">
34
+ <g fill="#434343" fill-rule="evenodd">
35
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
36
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
37
+ </g>
38
+ </symbol><symbol id="icon-a-ic-draw-free" viewBox="0 0 32 32">
39
+ <g fill="none" fill-rule="evenodd">
40
+ <path stroke="#434343" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
41
+ </g>
42
+ </symbol><symbol id="icon-a-ic-draw-line" viewBox="0 0 32 32">
43
+ <g fill="none" fill-rule="evenodd">
44
+ <path stroke="#434343" d="M2 15.5h28"/>
45
+ </g>
46
+ </symbol><symbol id="icon-a-ic-draw" viewBox="0 0 24 24">
47
+ <g fill="none">
48
+ <path stroke="#434343" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
49
+ <path fill="#434343" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
50
+ </g>
51
+ </symbol><symbol id="icon-a-ic-filter" viewBox="0 0 24 24">
52
+ <g fill="none" fill-rule="evenodd">
53
+ <path d="M0 0h24v24H0z"/>
54
+ <path fill="#434343" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
55
+ <path fill="#434343" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
56
+ </g>
57
+ </symbol><symbol id="icon-a-ic-flip-reset" viewBox="0 0 31 32">
58
+ <g fill="none" fill-rule="evenodd">
59
+ <path d="M31 0H0v32h31z"/>
60
+ <path fill="#434343" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
61
+ <path stroke="#434343" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
62
+ </g>
63
+ </symbol><symbol id="icon-a-ic-flip-x" viewBox="0 0 32 32">
64
+ <g fill="none" fill-rule="evenodd">
65
+ <path d="M32 32H0V0h32z"/>
66
+ <path fill="#434343" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
67
+ </g>
68
+ </symbol><symbol id="icon-a-ic-flip-y" viewBox="0 0 32 32">
69
+ <g fill="none" fill-rule="evenodd">
70
+ <path d="M0 0v32h32V0z"/>
71
+ <path fill="#434343" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
72
+ </g>
73
+ </symbol><symbol id="icon-a-ic-flip" viewBox="0 0 24 24">
74
+ <g fill="none" fill-rule="evenodd">
75
+ <path d="M0 0h24v24H0z"/>
76
+ <path fill="#434343" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
77
+ </g>
78
+ </symbol><symbol id="icon-a-ic-icon-arrow-2" viewBox="0 0 32 32">
79
+ <g fill="none" fill-rule="evenodd">
80
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
81
+ </g>
82
+ </symbol><symbol id="icon-a-ic-icon-arrow-3" viewBox="0 0 32 32">
83
+ <g fill="none" fill-rule="evenodd">
84
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
85
+ </g>
86
+ </symbol><symbol id="icon-a-ic-icon-arrow" viewBox="0 0 32 32">
87
+ <g fill="none" fill-rule="evenodd">
88
+ <path stroke="#434343" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
89
+ </g>
90
+ </symbol><symbol id="icon-a-ic-icon-bubble" viewBox="0 0 32 32">
91
+ <g fill="none" fill-rule="evenodd">
92
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
93
+ </g>
94
+ </symbol><symbol id="icon-a-ic-icon-heart" viewBox="0 0 32 32">
95
+ <g fill="none" fill-rule="evenodd">
96
+ <path fill-rule="nonzero" stroke="#434343" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
97
+ </g>
98
+ </symbol><symbol id="icon-a-ic-icon-load" viewBox="0 0 32 32">
99
+ <g fill="none" fill-rule="evenodd">
100
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
101
+ <path fill="#434343" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
102
+ <path fill="#434343" d="M25 3h1v9h-1z"/>
103
+ <path stroke="#434343" d="M22 6l3.5-3.5L29 6"/>
104
+ </g>
105
+ </symbol><symbol id="icon-a-ic-icon-location" viewBox="0 0 32 32">
106
+ <g fill="none" fill-rule="evenodd">
107
+ <g stroke="#434343">
108
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
109
+ <circle cx="16" cy="13" r="4.5"/>
110
+ </g>
111
+ </g>
112
+ </symbol><symbol id="icon-a-ic-icon-polygon" viewBox="0 0 32 32">
113
+ <g fill="none" fill-rule="evenodd">
114
+ <path stroke="#434343" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
115
+ </g>
116
+ </symbol><symbol id="icon-a-ic-icon-star-2" viewBox="0 0 32 32">
117
+ <g fill="none" fill-rule="evenodd">
118
+ <path stroke="#434343" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
119
+ </g>
120
+ </symbol><symbol id="icon-a-ic-icon-star" viewBox="0 0 32 32">
121
+ <g fill="none" fill-rule="evenodd">
122
+ <path stroke="#434343" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
123
+ </g>
124
+ </symbol><symbol id="icon-a-ic-icon" viewBox="0 0 24 24">
125
+ <g fill="none">
126
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
127
+ </g>
128
+ </symbol><symbol id="icon-a-ic-mask-load" viewBox="0 0 32 32">
129
+ <g fill="none" fill-rule="evenodd">
130
+ <path d="M0 0h32v32H0z"/>
131
+ <path fill="#434343" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
132
+ <path fill="#434343" d="M25 3h1v9h-1z"/>
133
+ <path stroke="#434343" d="M22 6l3.5-3.5L29 6"/>
134
+ </g>
135
+ </symbol><symbol id="icon-a-ic-mask" viewBox="0 0 24 24">
136
+ <g fill="none">
137
+ <circle cx="12" cy="12" r="4.5" stroke="#434343"/>
138
+ <path fill="#434343" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
139
+ </g>
140
+ </symbol><symbol id="icon-a-ic-redo" viewBox="0 0 24 24">
141
+ <g fill="none" fill-rule="evenodd">
142
+ <path d="M0 0h24v24H0z" opacity=".5"/>
143
+ <path fill="#434343" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
144
+ <path stroke="#434343" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
145
+ </g>
146
+ </symbol><symbol id="icon-a-ic-reset" viewBox="0 0 24 24">
147
+ <g fill="none" fill-rule="evenodd">
148
+ <path d="M0 0h24v24H0z" opacity=".5"/>
149
+ <path fill="#434343" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
150
+ <path stroke="#434343" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
151
+ </g>
152
+ </symbol><symbol id="icon-a-ic-rotate-clockwise" viewBox="0 0 32 32">
153
+ <g fill="none" fill-rule="evenodd">
154
+ <path fill="#434343" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
155
+ <path stroke="#434343" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
156
+ <path fill="#434343" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
157
+ </g>
158
+ </symbol><symbol id="icon-a-ic-rotate-counterclockwise" viewBox="0 0 32 32">
159
+ <g fill="none" fill-rule="evenodd">
160
+ <path fill="#434343" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
161
+ <path fill="#434343" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
162
+ <path stroke="#434343" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
163
+ </g>
164
+ </symbol><symbol id="icon-a-ic-rotate" viewBox="0 0 24 24">
165
+ <g fill="none" fill-rule="evenodd">
166
+ <path d="M0 0h24v24H0z"/>
167
+ <path fill="#434343" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
168
+ <path stroke="#434343" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
169
+ </g>
170
+ </symbol><symbol id="icon-a-ic-shape-circle" viewBox="0 0 32 32">
171
+ <g fill="none" fill-rule="evenodd">
172
+ <circle cx="16" cy="16" r="14.5" stroke="#434343"/>
173
+ </g>
174
+ </symbol><symbol id="icon-a-ic-shape-rectangle" viewBox="0 0 32 32">
175
+ <g fill="none" fill-rule="evenodd">
176
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#434343" rx="1"/>
177
+ </g>
178
+ </symbol><symbol id="icon-a-ic-shape-triangle" viewBox="0 0 32 32">
179
+ <g fill="none" fill-rule="evenodd">
180
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
181
+ </g>
182
+ </symbol><symbol id="icon-a-ic-shape" viewBox="0 0 24 24">
183
+ <g fill="none" fill-rule="evenodd">
184
+ <path fill="#434343" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
185
+ <path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
186
+ </g>
187
+ </symbol><symbol id="icon-a-ic-text-align-center" viewBox="0 0 32 32">
188
+ <g fill="none" fill-rule="evenodd">
189
+ <path d="M0 0h32v32H0z"/>
190
+ <path fill="#434343" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
191
+ </g>
192
+ </symbol><symbol id="icon-a-ic-text-align-left" viewBox="0 0 32 32">
193
+ <g fill="none" fill-rule="evenodd">
194
+ <path d="M0 0h32v32H0z"/>
195
+ <path fill="#434343" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
196
+ </g>
197
+ </symbol><symbol id="icon-a-ic-text-align-right" viewBox="0 0 32 32">
198
+ <g fill="none" fill-rule="evenodd">
199
+ <path d="M0 0h32v32H0z"/>
200
+ <path fill="#434343" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
201
+ </g>
202
+ </symbol><symbol id="icon-a-ic-text-bold" viewBox="0 0 32 32">
203
+ <g fill="none" fill-rule="evenodd">
204
+ <path d="M0 0h32v32H0z"/>
205
+ <path fill="#434343" d="M7 2h2v2H7zM7 28h2v2H7z"/>
206
+ <path stroke="#434343" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
207
+ </g>
208
+ </symbol><symbol id="icon-a-ic-text-italic" viewBox="0 0 32 32">
209
+ <g fill="none" fill-rule="evenodd">
210
+ <path d="M0 0h32v32H0z"/>
211
+ <path fill="#434343" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
212
+ </g>
213
+ </symbol><symbol id="icon-a-ic-text-underline" viewBox="0 0 32 32">
214
+ <g fill="none" fill-rule="evenodd">
215
+ <path d="M0 0h32v32H0z"/>
216
+ <path fill="#434343" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
217
+ <path fill="#434343" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
218
+ </g>
219
+ </symbol><symbol id="icon-a-ic-text" viewBox="0 0 24 24">
220
+ <g fill="#434343" fill-rule="evenodd">
221
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
222
+ <path d="M11 3h1v18h-1z"/>
223
+ <path d="M10 20h3v1h-3z"/>
224
+ </g>
225
+ </symbol><symbol id="icon-a-ic-undo" viewBox="0 0 24 24">
226
+ <g fill="none" fill-rule="evenodd">
227
+ <path d="M24 0H0v24h24z" opacity=".5"/>
228
+ <path fill="#434343" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
229
+ <path stroke="#434343" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
230
+ </g>
231
+ </symbol><symbol id="icon-a-img-bi" viewBox="0 0 257 26">
232
+ <g fill="#FDBA3B">
233
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
234
+ </g>
235
+ </symbol></svg>
elFinder/img/tui-icon-b.svg ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-b-ic-apply" viewBox="0 0 24 24">
2
+ <g fill="none" fill-rule="evenodd">
3
+ <path d="M0 0h24v24H0z"/>
4
+ <path stroke="#555555" d="M4 12.011l5 5L20.011 6"/>
5
+ </g>
6
+ </symbol><symbol id="icon-b-ic-cancel" viewBox="0 0 24 24">
7
+ <g fill="none" fill-rule="evenodd">
8
+ <path d="M0 0h24v24H0z"/>
9
+ <path stroke="#555555" d="M6 6l12 12M18 6L6 18"/>
10
+ </g>
11
+ </symbol><symbol id="icon-b-ic-crop" viewBox="0 0 24 24">
12
+ <g fill="none" fill-rule="evenodd">
13
+ <path d="M0 0h24v24H0z"/>
14
+ <path fill="#555555" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
15
+ <path fill="#555555" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
16
+ </g>
17
+ </symbol><symbol id="icon-b-ic-delete-all" viewBox="0 0 24 24">
18
+ <g fill="#555555" fill-rule="evenodd">
19
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
20
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
21
+ </g>
22
+ </symbol><symbol id="icon-b-ic-delete" viewBox="0 0 24 24">
23
+ <g fill="#555555" fill-rule="evenodd">
24
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
25
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
26
+ </g>
27
+ </symbol><symbol id="icon-b-ic-draw-free" viewBox="0 0 32 32">
28
+ <g fill="none" fill-rule="evenodd">
29
+ <path stroke="#555555" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
30
+ </g>
31
+ </symbol><symbol id="icon-b-ic-draw-line" viewBox="0 0 32 32">
32
+ <g fill="none" fill-rule="evenodd">
33
+ <path stroke="#555555" d="M2 15.5h28"/>
34
+ </g>
35
+ </symbol><symbol id="icon-b-ic-draw" viewBox="0 0 24 24">
36
+ <g fill="none">
37
+ <path stroke="#555555" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
38
+ <path fill="#555555" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
39
+ </g>
40
+ </symbol><symbol id="icon-b-ic-filter" viewBox="0 0 24 24">
41
+ <g fill="none" fill-rule="evenodd">
42
+ <path d="M0 0h24v24H0z"/>
43
+ <path fill="#555555" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
44
+ <path fill="#555555" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
45
+ </g>
46
+ </symbol><symbol id="icon-b-ic-flip-reset" viewBox="0 0 31 32">
47
+ <g fill="none" fill-rule="evenodd">
48
+ <path d="M31 0H0v32h31z"/>
49
+ <path fill="#555555" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
50
+ <path stroke="#555555" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
51
+ </g>
52
+ </symbol><symbol id="icon-b-ic-flip-x" viewBox="0 0 32 32">
53
+ <g fill="none" fill-rule="evenodd">
54
+ <path d="M32 32H0V0h32z"/>
55
+ <path fill="#555555" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
56
+ </g>
57
+ </symbol><symbol id="icon-b-ic-flip-y" viewBox="0 0 32 32">
58
+ <g fill="none" fill-rule="evenodd">
59
+ <path d="M0 0v32h32V0z"/>
60
+ <path fill="#555555" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
61
+ </g>
62
+ </symbol><symbol id="icon-b-ic-flip" viewBox="0 0 24 24">
63
+ <g fill="none" fill-rule="evenodd">
64
+ <path d="M0 0h24v24H0z"/>
65
+ <path fill="#555555" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
66
+ </g>
67
+ </symbol><symbol id="icon-b-ic-icon-arrow-2" viewBox="0 0 32 32">
68
+ <g fill="none" fill-rule="evenodd">
69
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
70
+ </g>
71
+ </symbol><symbol id="icon-b-ic-icon-arrow-3" viewBox="0 0 32 32">
72
+ <g fill="none" fill-rule="evenodd">
73
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
74
+ </g>
75
+ </symbol><symbol id="icon-b-ic-icon-arrow" viewBox="0 0 32 32">
76
+ <g fill="none" fill-rule="evenodd">
77
+ <path stroke="#555555" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
78
+ </g>
79
+ </symbol><symbol id="icon-b-ic-icon-bubble" viewBox="0 0 32 32">
80
+ <g fill="none" fill-rule="evenodd">
81
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
82
+ </g>
83
+ </symbol><symbol id="icon-b-ic-icon-heart" viewBox="0 0 32 32">
84
+ <g fill="none" fill-rule="evenodd">
85
+ <path fill-rule="nonzero" stroke="#555555" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
86
+ </g>
87
+ </symbol><symbol id="icon-b-ic-icon-load" viewBox="0 0 32 32">
88
+ <g fill="none" fill-rule="evenodd">
89
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
90
+ <path fill="#555555" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
91
+ <path fill="#555555" d="M25 3h1v9h-1z"/>
92
+ <path stroke="#555555" d="M22 6l3.5-3.5L29 6"/>
93
+ </g>
94
+ </symbol><symbol id="icon-b-ic-icon-location" viewBox="0 0 32 32">
95
+ <g fill="none" fill-rule="evenodd">
96
+ <g stroke="#555555">
97
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
98
+ <circle cx="16" cy="13" r="4.5"/>
99
+ </g>
100
+ </g>
101
+ </symbol><symbol id="icon-b-ic-icon-polygon" viewBox="0 0 32 32">
102
+ <g fill="none" fill-rule="evenodd">
103
+ <path stroke="#555555" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
104
+ </g>
105
+ </symbol><symbol id="icon-b-ic-icon-star-2" viewBox="0 0 32 32">
106
+ <g fill="none" fill-rule="evenodd">
107
+ <path stroke="#555555" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
108
+ </g>
109
+ </symbol><symbol id="icon-b-ic-icon-star" viewBox="0 0 32 32">
110
+ <g fill="none" fill-rule="evenodd">
111
+ <path stroke="#555555" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
112
+ </g>
113
+ </symbol><symbol id="icon-b-ic-icon" viewBox="0 0 24 24">
114
+ <g fill="none">
115
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
116
+ </g>
117
+ </symbol><symbol id="icon-b-ic-mask-load" viewBox="0 0 32 32">
118
+ <g fill="none" fill-rule="evenodd">
119
+ <path d="M0 0h32v32H0z"/>
120
+ <path fill="#555555" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
121
+ <path fill="#555555" d="M25 3h1v9h-1z"/>
122
+ <path stroke="#555555" d="M22 6l3.5-3.5L29 6"/>
123
+ </g>
124
+ </symbol><symbol id="icon-b-ic-mask" viewBox="0 0 24 24">
125
+ <g fill="none">
126
+ <circle cx="12" cy="12" r="4.5" stroke="#555555"/>
127
+ <path fill="#555555" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
128
+ </g>
129
+ </symbol><symbol id="icon-b-ic-redo" viewBox="0 0 24 24">
130
+ <g fill="none" fill-rule="evenodd">
131
+ <path d="M0 0h24v24H0z" opacity=".5"/>
132
+ <path fill="#555555" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
133
+ <path stroke="#555555" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
134
+ </g>
135
+ </symbol><symbol id="icon-b-ic-reset" viewBox="0 0 24 24">
136
+ <g fill="none" fill-rule="evenodd">
137
+ <path d="M0 0h24v24H0z" opacity=".5"/>
138
+ <path fill="#555555" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
139
+ <path stroke="#555555" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
140
+ </g>
141
+ </symbol><symbol id="icon-b-ic-rotate-clockwise" viewBox="0 0 32 32">
142
+ <g fill="none" fill-rule="evenodd">
143
+ <path fill="#555555" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
144
+ <path stroke="#555555" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
145
+ <path fill="#555555" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
146
+ </g>
147
+ </symbol><symbol id="icon-b-ic-rotate-counterclockwise" viewBox="0 0 32 32">
148
+ <g fill="none" fill-rule="evenodd">
149
+ <path fill="#555555" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
150
+ <path fill="#555555" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
151
+ <path stroke="#555555" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
152
+ </g>
153
+ </symbol><symbol id="icon-b-ic-rotate" viewBox="0 0 24 24">
154
+ <g fill="none" fill-rule="evenodd">
155
+ <path d="M0 0h24v24H0z"/>
156
+ <path fill="#555555" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
157
+ <path stroke="#555555" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
158
+ </g>
159
+ </symbol><symbol id="icon-b-ic-shape-circle" viewBox="0 0 32 32">
160
+ <g fill="none" fill-rule="evenodd">
161
+ <circle cx="16" cy="16" r="14.5" stroke="#555555"/>
162
+ </g>
163
+ </symbol><symbol id="icon-b-ic-shape-rectangle" viewBox="0 0 32 32">
164
+ <g fill="none" fill-rule="evenodd">
165
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#555555" rx="1"/>
166
+ </g>
167
+ </symbol><symbol id="icon-b-ic-shape-triangle" viewBox="0 0 32 32">
168
+ <g fill="none" fill-rule="evenodd">
169
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
170
+ </g>
171
+ </symbol><symbol id="icon-b-ic-shape" viewBox="0 0 24 24">
172
+ <g fill="none" fill-rule="evenodd">
173
+ <path fill="#555555" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
174
+ <path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
175
+ </g>
176
+ </symbol><symbol id="icon-b-ic-text-align-center" viewBox="0 0 32 32">
177
+ <g fill="none" fill-rule="evenodd">
178
+ <path d="M0 0h32v32H0z"/>
179
+ <path fill="#555555" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
180
+ </g>
181
+ </symbol><symbol id="icon-b-ic-text-align-left" viewBox="0 0 32 32">
182
+ <g fill="none" fill-rule="evenodd">
183
+ <path d="M0 0h32v32H0z"/>
184
+ <path fill="#555555" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
185
+ </g>
186
+ </symbol><symbol id="icon-b-ic-text-align-right" viewBox="0 0 32 32">
187
+ <g fill="none" fill-rule="evenodd">
188
+ <path d="M0 0h32v32H0z"/>
189
+ <path fill="#555555" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
190
+ </g>
191
+ </symbol><symbol id="icon-b-ic-text-bold" viewBox="0 0 32 32">
192
+ <g fill="none" fill-rule="evenodd">
193
+ <path d="M0 0h32v32H0z"/>
194
+ <path fill="#555555" d="M7 2h2v2H7zM7 28h2v2H7z"/>
195
+ <path stroke="#555555" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
196
+ </g>
197
+ </symbol><symbol id="icon-b-ic-text-italic" viewBox="0 0 32 32">
198
+ <g fill="none" fill-rule="evenodd">
199
+ <path d="M0 0h32v32H0z"/>
200
+ <path fill="#555555" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
201
+ </g>
202
+ </symbol><symbol id="icon-b-ic-text-underline" viewBox="0 0 32 32">
203
+ <g fill="none" fill-rule="evenodd">
204
+ <path d="M0 0h32v32H0z"/>
205
+ <path fill="#555555" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
206
+ <path fill="#555555" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
207
+ </g>
208
+ </symbol><symbol id="icon-b-ic-text" viewBox="0 0 24 24">
209
+ <g fill="#555555" fill-rule="evenodd">
210
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
211
+ <path d="M11 3h1v18h-1z"/>
212
+ <path d="M10 20h3v1h-3z"/>
213
+ </g>
214
+ </symbol><symbol id="icon-b-ic-undo" viewBox="0 0 24 24">
215
+ <g fill="none" fill-rule="evenodd">
216
+ <path d="M24 0H0v24h24z" opacity=".5"/>
217
+ <path fill="#555555" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
218
+ <path stroke="#555555" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
219
+ </g>
220
+ </symbol><symbol id="icon-b-img-bi" viewBox="0 0 257 26">
221
+ <g fill="#FDBA3B">
222
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
223
+ </g>
224
+ </symbol></svg>
elFinder/img/tui-icon-c.svg ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-c-ic-apply" viewBox="0 0 24 24">
2
+ <g fill="none" fill-rule="evenodd">
3
+ <path d="M0 0h24v24H0z"/>
4
+ <path stroke="#e9e9e9" d="M4 12.011l5 5L20.011 6"/>
5
+ </g>
6
+ </symbol><symbol id="icon-c-ic-cancel" viewBox="0 0 24 24">
7
+ <g fill="none" fill-rule="evenodd">
8
+ <path d="M0 0h24v24H0z"/>
9
+ <path stroke="#e9e9e9" d="M6 6l12 12M18 6L6 18"/>
10
+ </g>
11
+ </symbol><symbol id="icon-c-ic-crop" viewBox="0 0 24 24">
12
+ <g fill="none" fill-rule="evenodd">
13
+ <path d="M0 0h24v24H0z"/>
14
+ <path fill="#e9e9e9" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
15
+ <path fill="#e9e9e9" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
16
+ </g>
17
+ </symbol><symbol id="icon-c-ic-delete-all" viewBox="0 0 24 24">
18
+ <g fill="#e9e9e9" fill-rule="evenodd">
19
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
20
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
21
+ </g>
22
+ </symbol><symbol id="icon-c-ic-delete" viewBox="0 0 24 24">
23
+ <g fill="#e9e9e9" fill-rule="evenodd">
24
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
25
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
26
+ </g>
27
+ </symbol><symbol id="icon-c-ic-draw-free" viewBox="0 0 32 32">
28
+ <g fill="none" fill-rule="evenodd">
29
+ <path stroke="#e9e9e9" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
30
+ </g>
31
+ </symbol><symbol id="icon-c-ic-draw-line" viewBox="0 0 32 32">
32
+ <g fill="none" fill-rule="evenodd">
33
+ <path stroke="#e9e9e9" d="M2 15.5h28"/>
34
+ </g>
35
+ </symbol><symbol id="icon-c-ic-draw" viewBox="0 0 24 24">
36
+ <g fill="none">
37
+ <path stroke="#e9e9e9" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
38
+ <path fill="#e9e9e9" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
39
+ </g>
40
+ </symbol><symbol id="icon-c-ic-filter" viewBox="0 0 24 24">
41
+ <g fill="none" fill-rule="evenodd">
42
+ <path d="M0 0h24v24H0z"/>
43
+ <path fill="#e9e9e9" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
44
+ <path fill="#e9e9e9" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
45
+ </g>
46
+ </symbol><symbol id="icon-c-ic-flip-reset" viewBox="0 0 31 32">
47
+ <g fill="none" fill-rule="evenodd">
48
+ <path d="M31 0H0v32h31z"/>
49
+ <path fill="#e9e9e9" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
50
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
51
+ </g>
52
+ </symbol><symbol id="icon-c-ic-flip-x" viewBox="0 0 32 32">
53
+ <g fill="none" fill-rule="evenodd">
54
+ <path d="M32 32H0V0h32z"/>
55
+ <path fill="#e9e9e9" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
56
+ </g>
57
+ </symbol><symbol id="icon-c-ic-flip-y" viewBox="0 0 32 32">
58
+ <g fill="none" fill-rule="evenodd">
59
+ <path d="M0 0v32h32V0z"/>
60
+ <path fill="#e9e9e9" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
61
+ </g>
62
+ </symbol><symbol id="icon-c-ic-flip" viewBox="0 0 24 24">
63
+ <g fill="none" fill-rule="evenodd">
64
+ <path d="M0 0h24v24H0z"/>
65
+ <path fill="#e9e9e9" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
66
+ </g>
67
+ </symbol><symbol id="icon-c-ic-icon-arrow-2" viewBox="0 0 32 32">
68
+ <g fill="none" fill-rule="evenodd">
69
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
70
+ </g>
71
+ </symbol><symbol id="icon-c-ic-icon-arrow-3" viewBox="0 0 32 32">
72
+ <g fill="none" fill-rule="evenodd">
73
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
74
+ </g>
75
+ </symbol><symbol id="icon-c-ic-icon-arrow" viewBox="0 0 32 32">
76
+ <g fill="none" fill-rule="evenodd">
77
+ <path stroke="#e9e9e9" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
78
+ </g>
79
+ </symbol><symbol id="icon-c-ic-icon-bubble" viewBox="0 0 32 32">
80
+ <g fill="none" fill-rule="evenodd">
81
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
82
+ </g>
83
+ </symbol><symbol id="icon-c-ic-icon-heart" viewBox="0 0 32 32">
84
+ <g fill="none" fill-rule="evenodd">
85
+ <path fill-rule="nonzero" stroke="#e9e9e9" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
86
+ </g>
87
+ </symbol><symbol id="icon-c-ic-icon-load" viewBox="0 0 32 32">
88
+ <g fill="none" fill-rule="evenodd">
89
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
90
+ <path fill="#e9e9e9" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
91
+ <path fill="#e9e9e9" d="M25 3h1v9h-1z"/>
92
+ <path stroke="#e9e9e9" d="M22 6l3.5-3.5L29 6"/>
93
+ </g>
94
+ </symbol><symbol id="icon-c-ic-icon-location" viewBox="0 0 32 32">
95
+ <g fill="none" fill-rule="evenodd">
96
+ <g stroke="#e9e9e9">
97
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
98
+ <circle cx="16" cy="13" r="4.5"/>
99
+ </g>
100
+ </g>
101
+ </symbol><symbol id="icon-c-ic-icon-polygon" viewBox="0 0 32 32">
102
+ <g fill="none" fill-rule="evenodd">
103
+ <path stroke="#e9e9e9" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
104
+ </g>
105
+ </symbol><symbol id="icon-c-ic-icon-star-2" viewBox="0 0 32 32">
106
+ <g fill="none" fill-rule="evenodd">
107
+ <path stroke="#e9e9e9" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
108
+ </g>
109
+ </symbol><symbol id="icon-c-ic-icon-star" viewBox="0 0 32 32">
110
+ <g fill="none" fill-rule="evenodd">
111
+ <path stroke="#e9e9e9" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
112
+ </g>
113
+ </symbol><symbol id="icon-c-ic-icon" viewBox="0 0 24 24">
114
+ <g fill="none">
115
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
116
+ </g>
117
+ </symbol><symbol id="icon-c-ic-mask-load" viewBox="0 0 32 32">
118
+ <g fill="none" fill-rule="evenodd">
119
+ <path d="M0 0h32v32H0z"/>
120
+ <path fill="#e9e9e9" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
121
+ <path fill="#e9e9e9" d="M25 3h1v9h-1z"/>
122
+ <path stroke="#e9e9e9" d="M22 6l3.5-3.5L29 6"/>
123
+ </g>
124
+ </symbol><symbol id="icon-c-ic-mask" viewBox="0 0 24 24">
125
+ <g fill="none">
126
+ <circle cx="12" cy="12" r="4.5" stroke="#e9e9e9"/>
127
+ <path fill="#e9e9e9" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
128
+ </g>
129
+ </symbol><symbol id="icon-c-ic-redo" viewBox="0 0 24 24">
130
+ <g fill="none" fill-rule="evenodd">
131
+ <path d="M0 0h24v24H0z" opacity=".5"/>
132
+ <path fill="#e9e9e9" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
133
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
134
+ </g>
135
+ </symbol><symbol id="icon-c-ic-reset" viewBox="0 0 24 24">
136
+ <g fill="none" fill-rule="evenodd">
137
+ <path d="M0 0h24v24H0z" opacity=".5"/>
138
+ <path fill="#e9e9e9" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
139
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
140
+ </g>
141
+ </symbol><symbol id="icon-c-ic-rotate-clockwise" viewBox="0 0 32 32">
142
+ <g fill="none" fill-rule="evenodd">
143
+ <path fill="#e9e9e9" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
144
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
145
+ <path fill="#e9e9e9" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
146
+ </g>
147
+ </symbol><symbol id="icon-c-ic-rotate-counterclockwise" viewBox="0 0 32 32">
148
+ <g fill="none" fill-rule="evenodd">
149
+ <path fill="#e9e9e9" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
150
+ <path fill="#e9e9e9" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
151
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
152
+ </g>
153
+ </symbol><symbol id="icon-c-ic-rotate" viewBox="0 0 24 24">
154
+ <g fill="none" fill-rule="evenodd">
155
+ <path d="M0 0h24v24H0z"/>
156
+ <path fill="#e9e9e9" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
157
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
158
+ </g>
159
+ </symbol><symbol id="icon-c-ic-shape-circle" viewBox="0 0 32 32">
160
+ <g fill="none" fill-rule="evenodd">
161
+ <circle cx="16" cy="16" r="14.5" stroke="#e9e9e9"/>
162
+ </g>
163
+ </symbol><symbol id="icon-c-ic-shape-rectangle" viewBox="0 0 32 32">
164
+ <g fill="none" fill-rule="evenodd">
165
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#e9e9e9" rx="1"/>
166
+ </g>
167
+ </symbol><symbol id="icon-c-ic-shape-triangle" viewBox="0 0 32 32">
168
+ <g fill="none" fill-rule="evenodd">
169
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
170
+ </g>
171
+ </symbol><symbol id="icon-c-ic-shape" viewBox="0 0 24 24">
172
+ <g fill="none" fill-rule="evenodd">
173
+ <path fill="#e9e9e9" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
174
+ <path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
175
+ </g>
176
+ </symbol><symbol id="icon-c-ic-text-align-center" viewBox="0 0 32 32">
177
+ <g fill="none" fill-rule="evenodd">
178
+ <path d="M0 0h32v32H0z"/>
179
+ <path fill="#e9e9e9" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
180
+ </g>
181
+ </symbol><symbol id="icon-c-ic-text-align-left" viewBox="0 0 32 32">
182
+ <g fill="none" fill-rule="evenodd">
183
+ <path d="M0 0h32v32H0z"/>
184
+ <path fill="#e9e9e9" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
185
+ </g>
186
+ </symbol><symbol id="icon-c-ic-text-align-right" viewBox="0 0 32 32">
187
+ <g fill="none" fill-rule="evenodd">
188
+ <path d="M0 0h32v32H0z"/>
189
+ <path fill="#e9e9e9" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
190
+ </g>
191
+ </symbol><symbol id="icon-c-ic-text-bold" viewBox="0 0 32 32">
192
+ <g fill="none" fill-rule="evenodd">
193
+ <path d="M0 0h32v32H0z"/>
194
+ <path fill="#e9e9e9" d="M7 2h2v2H7zM7 28h2v2H7z"/>
195
+ <path stroke="#e9e9e9" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
196
+ </g>
197
+ </symbol><symbol id="icon-c-ic-text-italic" viewBox="0 0 32 32">
198
+ <g fill="none" fill-rule="evenodd">
199
+ <path d="M0 0h32v32H0z"/>
200
+ <path fill="#e9e9e9" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
201
+ </g>
202
+ </symbol><symbol id="icon-c-ic-text-underline" viewBox="0 0 32 32">
203
+ <g fill="none" fill-rule="evenodd">
204
+ <path d="M0 0h32v32H0z"/>
205
+ <path fill="#e9e9e9" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
206
+ <path fill="#e9e9e9" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
207
+ </g>
208
+ </symbol><symbol id="icon-c-ic-text" viewBox="0 0 24 24">
209
+ <g fill="#e9e9e9" fill-rule="evenodd">
210
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
211
+ <path d="M11 3h1v18h-1z"/>
212
+ <path d="M10 20h3v1h-3z"/>
213
+ </g>
214
+ </symbol><symbol id="icon-c-ic-undo" viewBox="0 0 24 24">
215
+ <g fill="none" fill-rule="evenodd">
216
+ <path d="M24 0H0v24h24z" opacity=".5"/>
217
+ <path fill="#e9e9e9" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
218
+ <path stroke="#e9e9e9" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
219
+ </g>
220
+ </symbol><symbol id="icon-c-img-bi" viewBox="0 0 257 26">
221
+ <g fill="#FDBA3B">
222
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
223
+ </g>
224
+ </symbol></svg>
elFinder/img/tui-icon-d.svg ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-d-ic-apply" viewBox="0 0 24 24">
2
+ <g fill="none" fill-rule="evenodd">
3
+ <path d="M0 0h24v24H0z"/>
4
+ <path stroke="#8a8a8a" d="M4 12.011l5 5L20.011 6"/>
5
+ </g>
6
+ </symbol><symbol id="icon-d-ic-cancel" viewBox="0 0 24 24">
7
+ <g fill="none" fill-rule="evenodd">
8
+ <path d="M0 0h24v24H0z"/>
9
+ <path stroke="#8a8a8a" d="M6 6l12 12M18 6L6 18"/>
10
+ </g>
11
+ </symbol><symbol id="icon-d-ic-crop" viewBox="0 0 24 24">
12
+ <g fill="none" fill-rule="evenodd">
13
+ <path d="M0 0h24v24H0z"/>
14
+ <path fill="#8a8a8a" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
15
+ <path fill="#8a8a8a" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
16
+ </g>
17
+ </symbol><symbol id="icon-d-ic-delete-all" viewBox="0 0 24 24">
18
+ <g fill="#8a8a8a" fill-rule="evenodd">
19
+ <path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
20
+ <path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
21
+ </g>
22
+ </symbol><symbol id="icon-d-ic-delete" viewBox="0 0 24 24">
23
+ <g fill="#8a8a8a" fill-rule="evenodd">
24
+ <path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
25
+ <path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
26
+ </g>
27
+ </symbol><symbol id="icon-d-ic-draw-free" viewBox="0 0 32 32">
28
+ <g fill="none" fill-rule="evenodd">
29
+ <path stroke="#8a8a8a" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
30
+ </g>
31
+ </symbol><symbol id="icon-d-ic-draw-line" viewBox="0 0 32 32">
32
+ <g fill="none" fill-rule="evenodd">
33
+ <path stroke="#8a8a8a" d="M2 15.5h28"/>
34
+ </g>
35
+ </symbol><symbol id="icon-d-ic-draw" viewBox="0 0 24 24">
36
+ <g fill="none">
37
+ <path stroke="#8a8a8a" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
38
+ <path fill="#8a8a8a" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
39
+ </g>
40
+ </symbol><symbol id="icon-d-ic-filter" viewBox="0 0 24 24">
41
+ <g fill="none" fill-rule="evenodd">
42
+ <path d="M0 0h24v24H0z"/>
43
+ <path fill="#8a8a8a" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
44
+ <path fill="#8a8a8a" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
45
+ </g>
46
+ </symbol><symbol id="icon-d-ic-flip-reset" viewBox="0 0 31 32">
47
+ <g fill="none" fill-rule="evenodd">
48
+ <path d="M31 0H0v32h31z"/>
49
+ <path fill="#8a8a8a" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
50
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
51
+ </g>
52
+ </symbol><symbol id="icon-d-ic-flip-x" viewBox="0 0 32 32">
53
+ <g fill="none" fill-rule="evenodd">
54
+ <path d="M32 32H0V0h32z"/>
55
+ <path fill="#8a8a8a" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
56
+ </g>
57
+ </symbol><symbol id="icon-d-ic-flip-y" viewBox="0 0 32 32">
58
+ <g fill="none" fill-rule="evenodd">
59
+ <path d="M0 0v32h32V0z"/>
60
+ <path fill="#8a8a8a" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
61
+ </g>
62
+ </symbol><symbol id="icon-d-ic-flip" viewBox="0 0 24 24">
63
+ <g fill="none" fill-rule="evenodd">
64
+ <path d="M0 0h24v24H0z"/>
65
+ <path fill="#8a8a8a" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
66
+ </g>
67
+ </symbol><symbol id="icon-d-ic-icon-arrow-2" viewBox="0 0 32 32">
68
+ <g fill="none" fill-rule="evenodd">
69
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
70
+ </g>
71
+ </symbol><symbol id="icon-d-ic-icon-arrow-3" viewBox="0 0 32 32">
72
+ <g fill="none" fill-rule="evenodd">
73
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
74
+ </g>
75
+ </symbol><symbol id="icon-d-ic-icon-arrow" viewBox="0 0 32 32">
76
+ <g fill="none" fill-rule="evenodd">
77
+ <path stroke="#8a8a8a" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
78
+ </g>
79
+ </symbol><symbol id="icon-d-ic-icon-bubble" viewBox="0 0 32 32">
80
+ <g fill="none" fill-rule="evenodd">
81
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
82
+ </g>
83
+ </symbol><symbol id="icon-d-ic-icon-heart" viewBox="0 0 32 32">
84
+ <g fill="none" fill-rule="evenodd">
85
+ <path fill-rule="nonzero" stroke="#8a8a8a" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
86
+ </g>
87
+ </symbol><symbol id="icon-d-ic-icon-load" viewBox="0 0 32 32">
88
+ <g fill="none" fill-rule="evenodd">
89
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
90
+ <path fill="#8a8a8a" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
91
+ <path fill="#8a8a8a" d="M25 3h1v9h-1z"/>
92
+ <path stroke="#8a8a8a" d="M22 6l3.5-3.5L29 6"/>
93
+ </g>
94
+ </symbol><symbol id="icon-d-ic-icon-location" viewBox="0 0 32 32">
95
+ <g fill="none" fill-rule="evenodd">
96
+ <g stroke="#8a8a8a">
97
+ <path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
98
+ <circle cx="16" cy="13" r="4.5"/>
99
+ </g>
100
+ </g>
101
+ </symbol><symbol id="icon-d-ic-icon-polygon" viewBox="0 0 32 32">
102
+ <g fill="none" fill-rule="evenodd">
103
+ <path stroke="#8a8a8a" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
104
+ </g>
105
+ </symbol><symbol id="icon-d-ic-icon-star-2" viewBox="0 0 32 32">
106
+ <g fill="none" fill-rule="evenodd">
107
+ <path stroke="#8a8a8a" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
108
+ </g>
109
+ </symbol><symbol id="icon-d-ic-icon-star" viewBox="0 0 32 32">
110
+ <g fill="none" fill-rule="evenodd">
111
+ <path stroke="#8a8a8a" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
112
+ </g>
113
+ </symbol><symbol id="icon-d-ic-icon" viewBox="0 0 24 24">
114
+ <g fill="none">
115
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
116
+ </g>
117
+ </symbol><symbol id="icon-d-ic-mask-load" viewBox="0 0 32 32">
118
+ <g fill="none" fill-rule="evenodd">
119
+ <path d="M0 0h32v32H0z"/>
120
+ <path fill="#8a8a8a" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
121
+ <path fill="#8a8a8a" d="M25 3h1v9h-1z"/>
122
+ <path stroke="#8a8a8a" d="M22 6l3.5-3.5L29 6"/>
123
+ </g>
124
+ </symbol><symbol id="icon-d-ic-mask" viewBox="0 0 24 24">
125
+ <g fill="none">
126
+ <circle cx="12" cy="12" r="4.5" stroke="#8a8a8a"/>
127
+ <path fill="#8a8a8a" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
128
+ </g>
129
+ </symbol><symbol id="icon-d-ic-redo" viewBox="0 0 24 24">
130
+ <g fill="none" fill-rule="evenodd">
131
+ <path d="M0 0h24v24H0z" opacity=".5"/>
132
+ <path fill="#8a8a8a" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
133
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
134
+ </g>
135
+ </symbol><symbol id="icon-d-ic-reset" viewBox="0 0 24 24">
136
+ <g fill="none" fill-rule="evenodd">
137
+ <path d="M0 0h24v24H0z" opacity=".5"/>
138
+ <path fill="#8a8a8a" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
139
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
140
+ </g>
141
+ </symbol><symbol id="icon-d-ic-rotate-clockwise" viewBox="0 0 32 32">
142
+ <g fill="none" fill-rule="evenodd">
143
+ <path fill="#8a8a8a" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
144
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
145
+ <path fill="#8a8a8a" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
146
+ </g>
147
+ </symbol><symbol id="icon-d-ic-rotate-counterclockwise" viewBox="0 0 32 32">
148
+ <g fill="none" fill-rule="evenodd">
149
+ <path fill="#8a8a8a" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
150
+ <path fill="#8a8a8a" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
151
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
152
+ </g>
153
+ </symbol><symbol id="icon-d-ic-rotate" viewBox="0 0 24 24">
154
+ <g fill="none" fill-rule="evenodd">
155
+ <path d="M0 0h24v24H0z"/>
156
+ <path fill="#8a8a8a" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
157
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
158
+ </g>
159
+ </symbol><symbol id="icon-d-ic-shape-circle" viewBox="0 0 32 32">
160
+ <g fill="none" fill-rule="evenodd">
161
+ <circle cx="16" cy="16" r="14.5" stroke="#8a8a8a"/>
162
+ </g>
163
+ </symbol><symbol id="icon-d-ic-shape-rectangle" viewBox="0 0 32 32">
164
+ <g fill="none" fill-rule="evenodd">
165
+ <rect width="27" height="27" x="2.5" y="2.5" stroke="#8a8a8a" rx="1"/>
166
+ </g>
167
+ </symbol><symbol id="icon-d-ic-shape-triangle" viewBox="0 0 32 32">
168
+ <g fill="none" fill-rule="evenodd">
169
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
170
+ </g>
171
+ </symbol><symbol id="icon-d-ic-shape" viewBox="0 0 24 24">
172
+ <g fill="none" fill-rule="evenodd">
173
+ <path fill="#8a8a8a" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
174
+ <path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
175
+ </g>
176
+ </symbol><symbol id="icon-d-ic-text-align-center" viewBox="0 0 32 32">
177
+ <g fill="none" fill-rule="evenodd">
178
+ <path d="M0 0h32v32H0z"/>
179
+ <path fill="#8a8a8a" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
180
+ </g>
181
+ </symbol><symbol id="icon-d-ic-text-align-left" viewBox="0 0 32 32">
182
+ <g fill="none" fill-rule="evenodd">
183
+ <path d="M0 0h32v32H0z"/>
184
+ <path fill="#8a8a8a" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
185
+ </g>
186
+ </symbol><symbol id="icon-d-ic-text-align-right" viewBox="0 0 32 32">
187
+ <g fill="none" fill-rule="evenodd">
188
+ <path d="M0 0h32v32H0z"/>
189
+ <path fill="#8a8a8a" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
190
+ </g>
191
+ </symbol><symbol id="icon-d-ic-text-bold" viewBox="0 0 32 32">
192
+ <g fill="none" fill-rule="evenodd">
193
+ <path d="M0 0h32v32H0z"/>
194
+ <path fill="#8a8a8a" d="M7 2h2v2H7zM7 28h2v2H7z"/>
195
+ <path stroke="#8a8a8a" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
196
+ </g>
197
+ </symbol><symbol id="icon-d-ic-text-italic" viewBox="0 0 32 32">
198
+ <g fill="none" fill-rule="evenodd">
199
+ <path d="M0 0h32v32H0z"/>
200
+ <path fill="#8a8a8a" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
201
+ </g>
202
+ </symbol><symbol id="icon-d-ic-text-underline" viewBox="0 0 32 32">
203
+ <g fill="none" fill-rule="evenodd">
204
+ <path d="M0 0h32v32H0z"/>
205
+ <path fill="#8a8a8a" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
206
+ <path fill="#8a8a8a" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
207
+ </g>
208
+ </symbol><symbol id="icon-d-ic-text" viewBox="0 0 24 24">
209
+ <g fill="#8a8a8a" fill-rule="evenodd">
210
+ <path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
211
+ <path d="M11 3h1v18h-1z"/>
212
+ <path d="M10 20h3v1h-3z"/>
213
+ </g>
214
+ </symbol><symbol id="icon-d-ic-undo" viewBox="0 0 24 24">
215
+ <g fill="none" fill-rule="evenodd">
216
+ <path d="M24 0H0v24h24z" opacity=".5"/>
217
+ <path fill="#8a8a8a" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
218
+ <path stroke="#8a8a8a" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
219
+ </g>
220
+ </symbol><symbol id="icon-d-img-bi" viewBox="0 0 257 26">
221
+ <g fill="#FDBA3B">
222
+ <path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
223
+ </g>
224
+ </symbol></svg>
elFinder/img/ui-icons_ffffff_256x240.png ADDED
Binary file
elFinder/img/volume_icon_box.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48"><g fill="#0288d1"><path d="M25.6 18c-3 0-5.8 1.8-7.2 4.5a8 8 0 0 0-12.2-2.9V12c0-.8-.8-1.7-1.6-1.7-1 0-1.6.7-1.6 1.7v14.5C3 31 6.7 35 11 35c3.2 0 6-1.8 7.4-4.5 1.4 2.7 4 4.5 7.2 4.5 4.6 0 8.1-3.9 8.1-8.4 0-4.7-3.5-8.6-8-8.6M11 31.6a5 5 0 0 1-4.9-5 5 5 0 0 1 4.9-5.2c2.6 0 4.8 2.4 4.8 5.1.2 2.7-2 5-4.8 5zm14.5 0a5 5 0 0 1-4.8-5 5 5 0 0 1 4.8-5.2 5 5 0 0 1 4.9 5.1c0 2.7-2.3 5-4.9 5z"/><path d="M44.8 32.4l-4.3-6 4.3-5.8c.5-.7.3-1.9-.3-2.4-.7-.5-1.8-.3-2.3.3l-3.6 5.1-3.6-5c-.5-.7-1.7-.9-2.3-.4-.7.5-.8 1.7-.3 2.4l4.2 5.9-4.2 5.9c-.5.6-.4 1.8.3 2.3.6.5 1.8.3 2.3-.3l3.6-5 3.6 5c.5.6 1.6.8 2.3.3.6-.5.8-1.7.3-2.3"/></g></svg>
elFinder/img/volume_icon_dropbox.png CHANGED
Binary file
elFinder/img/volume_icon_dropbox.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48"><g fill="#1e88e5"><path d="M42 14L31.4 7.3l-7.4 6 11 6.4zM6 25.6l11 6.5 7-5.5L13.5 20zM17 7.3l-11 7 7.5 5.7L24 13.3zM24 26.6l7.2 5.5L42 25.6l-7-5.9z"/><path d="M32.2 33.8l-1.2.7-1-.8-6-4.5-5.8 4.4-1.1.9-1.2-.7L13 32v2.6L24 42l11-7.2V32z"/></g></svg>
elFinder/img/volume_icon_ftp.png CHANGED
Binary file
elFinder/img/volume_icon_ftp.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 48 48" overflow="visible"><path d="M36.66 41.52h-8.89a1.55 1.52 0 0 0-.75-.65v-8.8h-5.05v8.81a1.55 1.52 0 0 0-.75.64h-8.9v4.94h8.74a1.55 1.52 0 0 0 1.49 1.14h3.88c.72 0 1.32-.49 1.5-1.14h8.72v-4.94z" opacity=".2" stroke-width="1.02"/><path d="M36.47 41.34h-8.9a1.55 1.52 0 0 0-.75-.65v-8.81h-5.04v8.81a1.55 1.52 0 0 0-.76.65h-8.9v4.93h8.74a1.55 1.52 0 0 0 1.5 1.15h3.88c.72 0 1.32-.5 1.5-1.15h8.73z" opacity=".2" stroke-width="1.02"/><path d="M36.27 41.15h-8.9a1.55 1.52 0 0 0-.75-.65v-8.8H21.6v8.8a1.55 1.52 0 0 0-.77.65h-8.88v4.93h8.73a1.55 1.52 0 0 0 1.5 1.14h3.87c.73 0 1.34-.48 1.5-1.14h8.73z" opacity=".2" stroke-width="1.02"/><path d="M35.38 40.95H11.74v4.95H36.1v-4.95z" fill="#616161" stroke-width="1.02"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="23.72" y1="41.11" x2="23.72" y2="44.64" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#cecedb"/><stop offset=".19" stop-color="#fff"/><stop offset=".48" stop-color="#cecedb"/><stop offset=".75" stop-color="#b3b3c6"/><stop offset=".99" stop-color="#828282"/></linearGradient><path d="M12.44 41.63h22.95v3.58H12.44z" fill="url(#a)" stroke-width="1.02"/><path d="M21.4 31.88v12.64h5.04V31.5h-5.05z" fill="#616161" stroke-width="1.02"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="291.57" y1="864.85" x2="291.57" y2="868.38" gradientTransform="matrix(0 -1.01271 1.0339 0 -872.08 333.28)"><stop offset="0" stop-color="#cecedb"/><stop offset=".19" stop-color="#fff"/><stop offset=".48" stop-color="#cecedb"/><stop offset=".75" stop-color="#b3b3c6"/><stop offset=".99" stop-color="#828282"/></linearGradient><path d="M22.08 31.88h3.65v12.26h-3.65z" fill="url(#b)" stroke-width="1.02"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="23.72" y1="46.44" x2="23.72" y2="39.69" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#cf0000"/><stop offset=".99" stop-color="#ff6d00"/></linearGradient><path d="M27.4 45.51c0 .84-.7 1.52-1.54 1.52h-3.89a1.55 1.52 0 0 1-1.55-1.52v-3.79c0-.84.7-1.52 1.55-1.52h3.88c.86 0 1.55.68 1.55 1.52v3.8z" fill="url(#c)" stroke-width="1.02"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="23.72" y1="37.07" x2="23.72" y2="49.63" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff030"/><stop offset=".99" stop-color="#ffae00"/></linearGradient><path d="M21.97 40.95a.78.76 0 0 0-.78.76v3.8c0 .43.36.76.78.76h3.88c.43 0 .77-.33.77-.76v-3.79a.78.76 0 0 0-.77-.76h-3.88z" fill="url(#d)" stroke-width="1.02"/><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="23.72" y1="41" x2="23.72" y2="43.82" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff"/><stop offset=".5" stop-color="#ffe3a9"/><stop offset=".99" stop-color="#ffc957"/></linearGradient><path d="M21.97 41.52c-.1 0-.19.1-.19.2v3.8c0 .1.09.18.19.18h3.88c.1 0 .2-.08.2-.19v-3.79c0-.1-.1-.19-.2-.19h-3.88z" fill="url(#e)" stroke-width="1.02"/><path d="M25.5 1.3L11.94 10l-.04.02-.05.04-.04.03-.18.2-.02.04-.04.08-.02.04-.03.1-.02.03-.02.08v.05l-.02.1v23.13c0 .44.3.84.72.98l10.1 3.3c.33.1.7.05.97-.15l13.46-9.9c.27-.2.43-.5.43-.83V4.15l-.01-.06v-.04l-.02-.03-.02-.08-.02-.06-.05-.07-.03-.06-.04-.07-.04-.05-.04-.06-.02-.02-.03-.04-.05-.04-.07-.05-.06-.03-.07-.05-.07-.03-.07-.02a7.24 7.09 0 0 0-.08-.03h-.05l-10-2.12c-.28-.06-.57 0-.8.16zm-14.02 9.36" opacity=".2" stroke-width="1.02"/><path d="M36.75 4.25V4.13l-.02-.02a.9.88 0 0 0-.05-.13l-.02-.04-.03-.04-.02-.05-.03-.03-.03-.03-.04-.03-.03-.03a.86.84 0 0 0-.05-.03l-.04-.02-.04-.02-.05-.02-.05-.01-.03-.01-10-2.11a.68.67 0 0 0-.52.1L12.16 10.3h-.01l-.02.02-.03.02-.02.02a.73.72 0 0 0-.12.13l-.02.02c0 .02-.02.04-.03.05v.03l-.03.05v.03l-.02.06v.04l-.01.06v23.1c0 .28.18.53.46.62l10.1 3.3c.2.07.44.04.61-.1l13.47-9.89a.68.67 0 0 0 .26-.53V4.25z" opacity=".2" stroke-width="1.02"/><path d="M25.3 1.1L11.76 9.8l-.06.02-.05.04-.03.03-.19.2-.02.05-.04.08-.02.04-.03.09v.04l-.04.1v.04l-.01.1v23.11c0 .45.29.84.72 1l10.1 3.29c.32.1.7.05.98-.15l13.46-9.9c.26-.2.41-.5.41-.83V3.85l-.03-.03-.02-.08-.02-.06-.03-.07-.03-.07-.06-.06-.04-.06-.04-.05-.05-.05-.05-.05-.06-.04-.07-.04-.07-.04-.06-.03-.07-.03a7.24 7.09 0 0 0-.08-.02l-.06-.02-10-2.1c-.27-.05-.56 0-.8.15zm-14.01 9.38" opacity=".2" stroke-width="1.02"/><path d="M36.56 4.05v-.04l-.01-.05v-.01l-.01-.02-.01-.05-.02-.04a.35.34 0 0 0-.02-.04l-.02-.04-.04-.04-.02-.04-.03-.03-.03-.03-.04-.04-.03-.03a.86.84 0 0 0-.12-.07l-.05-.02h-.05l-.03-.02-10-2.1a.68.67 0 0 0-.52.1l-13.55 8.69-.03.02-.03.02-.02.02a.73.72 0 0 0-.11.13l-.03.02-.02.05-.02.03-.02.05v.03l-.02.06V33.75c0 .29.18.54.46.63l10.09 3.3c.2.06.44.03.62-.1l13.46-9.9a.68.67 0 0 0 .27-.52V4.06z" opacity=".2" stroke-width="1.02"/><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="32.27" y1="26.92" x2="14.03" y2="8.67" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#585868"/><stop offset="1" stop-color="#494949"/></linearGradient><path d="M25.1.78l-13.54 8.7-.05.03-.05.04-.04.03-.17.2-.03.04-.04.08-.02.04-.04.09v.04l-.03.1v.04l-.02.1v23.12c0 .45.3.84.73.98l10.1 3.3c.33.1.69.05.97-.15l13.46-9.9c.27-.2.42-.5.42-.82V3.64l-.02-.08V3.5l-.04-.07-.02-.06a14.7 14.4 0 0 0-.06-.13l-.04-.07-.04-.05-.04-.05-.02-.02-.05-.04-.05-.04-.06-.05-.06-.04-.07-.04-.07-.03-.07-.04-.07-.02h-.06L25.9.63c-.28-.06-.57 0-.8.14zm-14 9.38" fill="url(#f)" stroke-width="1.02"/><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="15.17" y1="9.81" x2="33.41" y2="28.05" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#494949"/></linearGradient><path d="M36.36 3.75V3.6l-.03-.06-.02-.04a.35.34 0 0 0-.02-.05l-.02-.03-.02-.04-.03-.04-.03-.03c0-.02-.02-.03-.03-.04a1.13 1.1 0 0 0-.04-.03l-.04-.02-.04-.03-.04-.02-.04-.02-.04-.02-.05-.01-.04-.01-10-2.1a.68.67 0 0 0-.52.08L11.77 9.8h-.01l-.03.01-.03.03-.02.02a.73.72 0 0 0-.11.14l-.01.02-.03.05-.02.03-.01.05-.01.03-.02.05v23.19c0 .3.17.55.45.64l10.1 3.29c.2.07.44.03.61-.1l13.46-9.89a.68.67 0 0 0 .27-.52z" fill="url(#g)" stroke-width="1.02"/><radialGradient id="h" cx="105.2" cy="47.28" r="139.09" fx="105.2" fy="47.28" gradientTransform="matrix(.19386 0 0 .18988 19.55 19.75)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset=".28" stop-color="#cecedb"/><stop offset=".64" stop-color="#bdbdcf"/><stop offset="1" stop-color="#9a9ab1"/></radialGradient><path d="M12.14 10.35l10.09 3.3 13.46-9.9v23.09l-13.46 9.88-10.1-3.29z" fill="url(#h)" stroke-width="1.02"/><linearGradient id="i" gradientUnits="userSpaceOnUse" x1="23.72" y1="13.22" x2="23.72" y2="3.36" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#cecedb"/><stop offset="1" stop-color="#eee"/></linearGradient><path d="M25.7 1.66l-13.56 8.69 10.09 3.3 13.46-9.9z" fill="url(#i)" stroke-width="1.02"/><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="15.04" y1="16.69" x2="22.17" y2="38.24" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M12.14 33.42l10.09 3.3V13.65l-10.1-3.3z" fill="url(#j)" stroke-width="1.02"/><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="16.64" y1="35.2" x2="17.78" y2="28.48" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#bdbdcf"/></linearGradient><path d="M12.14 27.75v5.67l10.09 3.3V30.9z" fill="url(#k)" stroke-width="1.02"/><linearGradient id="l" gradientUnits="userSpaceOnUse" x1="13.81" y1="16.36" x2="20.09" y2="16.36" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M13.66 16.37l6.51 2.12v-1.73l-6.51-2.13z" fill="url(#l)" stroke-width="1.02"/><linearGradient id="m" gradientUnits="userSpaceOnUse" x1="13.81" y1="18.78" x2="20.09" y2="18.78" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M13.66 18.84l6.51 2.11v-1.74l-6.51-2.13z" fill="url(#m)" stroke-width="1.02"/><linearGradient id="n" gradientUnits="userSpaceOnUse" x1="14.63" y1="18.9" x2="18.67" y2="22.93" gradientTransform="matrix(1.0339 0 0 1.01271 -.61 0)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#cecedb"/></linearGradient><path d="M13.66 21.29l6.51 2.12v-1.74l-6.51-2.12z" fill="url(#n)" stroke-width="1.02"/><linearGradient id="o" gradientUnits="userSpaceOnUse" x1="271.32" y1="478.92" x2="271.32" y2="477.59" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset=".01" stop-color="#fff"/><stop offset="1" stop-color="#b6b6b6"/></linearGradient><path d="M19.84 33.83c-.48-.12-.84.1-.84.51 0 .4.36.81.83.94l.5.13c.47.13.83-.1.83-.5s-.36-.81-.82-.94z" fill="url(#o)" stroke-width="1.02"/><linearGradient id="p" gradientUnits="userSpaceOnUse" x1="271.32" y1="478.86" x2="271.32" y2="477.72" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset=".01" stop-color="#b6b6b6"/><stop offset=".37" stop-color="#9d9d9d"/><stop offset=".74" stop-color="#898989"/><stop offset="1" stop-color="#828282"/></linearGradient><path d="M19.84 34.03c-.36-.1-.65.07-.65.36 0 .3.29.6.65.7l.5.13c.35.1.65-.07.65-.36 0-.3-.3-.61-.65-.7z" fill="url(#p)" stroke-width="1.02"/><linearGradient id="q" gradientUnits="userSpaceOnUse" x1="-890.74" y1="529.26" x2="-890.74" y2="528.08" gradientTransform="matrix(-.99864 -.26209 0 .78637 -869.45 -614.56)"><stop offset=".01" stop-color="#9f6"/><stop offset=".24" stop-color="#68de56"/><stop offset=".48" stop-color="#3bc147"/><stop offset=".7" stop-color="#1bab3c"/><stop offset=".88" stop-color="#079e35"/><stop offset="1" stop-color="#093"/></linearGradient><path d="M20.93 34.84c0 .26-.27.4-.6.31l-.49-.13c-.33-.08-.59-.35-.59-.6 0-.27.26-.41.59-.32l.5.12c.32.1.59.36.59.63z" fill="url(#q)" stroke-width="1.02"/><linearGradient id="r" gradientUnits="userSpaceOnUse" x1="271.31" y1="478.52" x2="271.34" y2="477.65" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset=".01" stop-color="#3c3"/><stop offset=".36" stop-color="#1bb433"/><stop offset=".74" stop-color="#07a033"/><stop offset="1" stop-color="#093"/></linearGradient><path d="M19.84 34.23c-.26-.07-.48.03-.48.22 0 .2.22.4.48.48l.5.13c.24.06.46-.04.46-.23 0-.2-.2-.4-.46-.48l-.5-.13z" fill="url(#r)" stroke-width="1.02"/><linearGradient id="s" gradientUnits="userSpaceOnUse" x1="271.32" y1="477.78" x2="271.32" y2="478.35" gradientTransform="matrix(.99864 .26209 0 1.04846 -250.87 -537.8)"><stop offset="0" stop-color="#fff"/><stop offset=".09" stop-color="#e8f7d6"/><stop offset=".23" stop-color="#c8ed9e"/><stop offset=".36" stop-color="#ade46d"/><stop offset=".5" stop-color="#97dc46"/><stop offset=".63" stop-color="#85d627"/><stop offset=".76" stop-color="#79d212"/><stop offset=".89" stop-color="#72d004"/><stop offset="1" stop-color="#6fcf00"/></linearGradient><path d="M19.82 34.14c-.2-.05-.37.04-.37.15 0 .11.16.3.37.35l.54.15c.2.05.36-.04.36-.16 0-.1-.16-.3-.36-.35z" fill="url(#s)" stroke-width="1.02"/><path d="M-.61 48.61V0h49.63v48.61" fill="none" stroke-width="1.02"/></svg>
elFinder/img/volume_icon_googledrive.png CHANGED
Binary file
elFinder/img/volume_icon_googledrive.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" version="1" width="48" height="48"><path d="M17 6h14l14 24H31z" fill="#ffc107"/><path d="M10 42l7-12h28l-7 12z" fill="#1976d2"/><path d="M3 30l7 12 14-24-7-12z" fill="#4caf50"/></svg>
elFinder/img/volume_icon_local.png CHANGED
Binary file
elFinder/img/volume_icon_local.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64" viewBox="0 0 48 48" overflow="visible"><defs><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="24" y1="39.07" x2="24" y2="8.93" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#7d7d99"/><stop offset="1" stop-color="#585868"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="24" y1="41.44" x2="24" y2="6.56" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#cecedb"/><stop offset=".58" stop-color="#b1b1c5"/><stop offset="1" stop-color="#9a9ab1"/></linearGradient><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="42.8" y1="3.42" x2="18.71" y2="27.51"><stop offset="0" stop-color="#fff"/><stop offset=".07" stop-color="#f5f5f7"/><stop offset=".31" stop-color="#d7d7e1"/><stop offset=".55" stop-color="#c2c2d2"/><stop offset=".78" stop-color="#b5b5c8"/><stop offset="1" stop-color="#b1b1c5"/></linearGradient><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="4.39" y1="28.4" x2="43.61" y2="28.4" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#9a9ab1"/><stop offset=".26" stop-color="#7d7d99"/><stop offset="1" stop-color="#585868"/></linearGradient><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="4.39" y1="28.4" x2="43.61" y2="28.4" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#ccc"/></linearGradient><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="24" y1="28.28" x2="24" y2="38.75" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#ccc"/></linearGradient><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="24" y1="38.25" x2="24" y2="27.38" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#ccc"/></linearGradient><linearGradient id="i" gradientUnits="userSpaceOnUse" x1="39.51" y1="37.32" x2="39.51" y2="35.18" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset=".01" stop-color="#fff"/><stop offset="1" stop-color="#b6b6b6"/></linearGradient><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="39.51" y1="37.22" x2="39.51" y2="35.38" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset=".01" stop-color="#b6b6b6"/><stop offset=".37" stop-color="#9d9d9d"/><stop offset=".74" stop-color="#898989"/><stop offset="1" stop-color="#828282"/></linearGradient><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="-323.35" y1="37.99" x2="-323.35" y2="36.08" gradientTransform="matrix(-1.09746 0 0 .8231 -313.94 6.86)"><stop offset=".01" stop-color="#9f6"/><stop offset=".24" stop-color="#68de56"/><stop offset=".48" stop-color="#3bc147"/><stop offset=".7" stop-color="#1bab3c"/><stop offset=".88" stop-color="#079e35"/><stop offset="1" stop-color="#093"/></linearGradient><linearGradient id="l" gradientUnits="userSpaceOnUse" x1="39.49" y1="36.68" x2="39.54" y2="35.27" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset=".01" stop-color="#3c3"/><stop offset=".36" stop-color="#1bb433"/><stop offset=".74" stop-color="#07a033"/><stop offset="1" stop-color="#093"/></linearGradient><linearGradient id="m" gradientUnits="userSpaceOnUse" x1="39.51" y1="35.48" x2="39.51" y2="36.4" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#fff"/><stop offset=".09" stop-color="#e8f7d6"/><stop offset=".23" stop-color="#c8ed9e"/><stop offset=".36" stop-color="#ade46d"/><stop offset=".5" stop-color="#97dc46"/><stop offset=".63" stop-color="#85d627"/><stop offset=".76" stop-color="#79d212"/><stop offset=".89" stop-color="#72d004"/><stop offset="1" stop-color="#6fcf00"/></linearGradient><linearGradient id="n" gradientUnits="userSpaceOnUse" x1="8.18" y1="35.36" x2="20.94" y2="35.36" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#dfdfdf"/><stop offset="1" stop-color="#a2a2a2"/></linearGradient><linearGradient id="o" gradientUnits="userSpaceOnUse" x1="14.56" y1="33.7" x2="14.56" y2="37.03" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"><stop offset="0" stop-color="#828282"/><stop offset="1" stop-color="#a2a2a2"/></linearGradient><linearGradient xlink:href="#a" id="d" x1="41.87" y1="9.41" x2="5.74" y2="29.21" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.09746 0 0 1.09746 -2.44 -2.24)"/></defs><path d="M8.96 7.64a3.13 3.13 0 0 0-3.13 2.85l.04-.18-.11.55.04-.2-.1.54.04-.2-.1.55.03-.19-.1.53.03-.18-.1.53.04-.18-.09.53.03-.19-.1.54.04-.19-.11.53.04-.17-.1.52.04-.17-.1.52.03-.18-.1.53.03-.18-.1.52.04-.17-.09.53.03-.18-.1.53.04-.18-.1.53.03-.18-.1.53.04-.18-.1.52.03-.18-.1.53.03-.17-.08.52.02-.17-.09.52.03-.17-.1.51.04-.16-.1.51.03-.17-.1.53.04-.18-.1.53.03-.18-.09.53.03-.18-.1.52.04-.17-.1.52.03-.17-.1.52.04-.17-.1.51.03-.16-.09.51.03-.16-.1.51.03-.16-.09.51.03-.16-.1.52.04-.18-.1.52.03-.17-.1.52.04-.17-.09.52.02-.17-.09.52.03-.17-.1.51.03-.15-.09.5.03-.16-.1.51.04-.16-.1.51.03-.16-.08.51.02-.16-.09.5.02-.15-.09.5.04-.15-.1.5.03-.15-.1.5.03-.16-.1.52.04-.17-.09.52.02-.16-.08.5.02-.15-.09.5.03-.15-.1.5.04-.16-.1.5.02-.15-.09.5.03-.15-.1.5.04-.16-.09.5.02-.15-.08.5.02-.15-.09.5.02-.15-.09.5.03-.14-.1.49.04-.15-.1.5.04-.15c-.08.3-.11.59-.11.88v6.47a3.6 3.6 0 0 0 3.6 3.6h38.02a3.6 3.6 0 0 0 3.6-3.6v-6.47a4 4 0 0 0-.1-.88l.01.15-.08-.5.02.15-.09-.5.02.16-.09-.5.03.15-.1-.5.03.15-.09-.5.02.16-.08-.5-.07-.36.03.15-.1-.5.04.16-.09-.51.02.16-.09-.51.03.16-.1-.5.03.15-.09-.5.02.16-.08-.52.02.16-.09-.5.03.16-.1-.5.04.15-.1-.5.03.15-.1-.5.04.16-.1-.52.03.16-.09-.51.02.16-.08-.51.02.16-.09-.51.02.17-.08-.51.03.15-.1-.5.03.16-.1-.52.04.17-.1-.52.03.17-.1-.52.03.18-.1-.53.04.18-.09-.52.02.16-.08-.51.02.16-.1-.51.04.16-.1-.51.04.17-.1-.52.03.17-.1-.53.03.18-.1-.52.04.17-.1-.52.03.18-.08-.53.02.17-.1-.52.03.18-.09-.53.04.17-.1-.52.03.17-.1-.52.03.18-.07-.52.03.17-.1-.52.04.17-.1-.53.03.18-.1-.53.03.19-.1-.53.04.18-.09-.53.02.18-.09-.53.03.18-.1-.53.04.19-.1-.53.04.17-.1-.52.03.17-.1-.52.03.17-.1-.52.04.17-.1-.53.03.2-.1-.55.04.19-.1-.53.03.19-.09-.55.04.2-.11-.54.04.19-.11-.54.04.19-.1-.54.04.18-.1-.53.03.2a3.12 3.12 0 0 0-3.12-2.87H8.95z" font-size="12" opacity=".2" stroke-width="1.1"/><path d="M8.75 7.23a3.13 3.13 0 0 0-3.12 2.86l.03-.19-.1.54.03-.2-.1.55.04-.2-.1.54.03-.19-.09.54.04-.19-.11.54.04-.18-.1.52.03-.17-.1.52.04-.17-.1.52.03-.18-.1.54.04-.2-.1.54.03-.18-.09.53.04-.18-.11.53.04-.19-.1.53.03-.18-.1.53.04-.18-.1.53.03-.17-.08.52.02-.17-.1.51.04-.17-.1.52.04-.17-.1.52.03-.17-.1.53.03-.18-.1.52.04-.17-.1.52.03-.17-.08.52.02-.18-.1.53.04-.18-.1.53.04-.17-.1.51.03-.16-.1.51.03-.16-.08.51.02-.17-.09.52.03-.17-.1.51.04-.16-.1.52.03-.17-.1.52.04-.17-.1.52.03-.17-.09.52.02-.18-.08.52.03-.16-.1.51.03-.16-.1.51.03-.16-.1.51.04-.16-.1.51.04-.16-.1.52.03-.17-.09.5.02-.16-.08.52.02-.17-.09.52.03-.17-.1.5.04-.14-.1.5.03-.15-.1.5.04-.16-.1.51.03-.16-.09.51.02-.16-.08.5.02-.15-.09.5.02-.15-.08.5.03-.15-.1.5.03-.16-.1.5.04-.15-.1.5.03-.15-.09.51.02-.15-.08.5.03-.15-.1.5.03-.16-.1.5.04-.15-.1.5.03-.15-.09.5.03-.15c-.08.29-.11.58-.11.88v6.47a3.6 3.6 0 0 0 3.6 3.6h38.02a3.6 3.6 0 0 0 3.6-3.6v-6.48c0-.29-.04-.58-.1-.88l.02.16-.1-.5.03.15-.09-.5.02.15-.08-.5.02.15-.09-.5.02.16-.09-.5.04.15-.1-.5-.07-.36.04.16-.1-.5.03.16-.09-.5.02.15-.08-.5.02.14-.09-.5.02.16-.09-.5.03.15-.1-.5.04.15-.1-.5.04.15-.1-.5.03.16-.1-.51.03.16-.08-.52.02.17-.09-.52.02.17-.09-.5.03.15-.1-.5.03.16-.09-.52.04.16-.1-.51.03.16-.1-.5.03.15-.1-.5.04.16-.1-.51.03.16-.09-.51.03.16-.08-.52.03.17-.1-.52.04.17-.1-.52.03.17-.1-.52.03.18-.1-.53.04.17-.09-.52.02.17-.08-.51.03.17-.1-.52.03.17-.1-.52.04.17-.1-.51.03.16-.1-.53.03.18-.1-.53.04.19-.09-.53.02.18-.08-.53.03.18-.11-.53.04.17-.1-.51.04.16-.1-.51.03.16-.1-.51.03.17-.1-.52.04.17-.1-.53.03.18-.1-.53.04.19-.1-.53.03.18-.09-.53.04.18-.11-.53.04.19-.1-.54.03.19-.1-.53.04.17-.1-.52.03.17-.1-.52.04.18-.1-.53.03.18-.1-.54.04.2-.1-.55.04.19-.1-.53.03.19-.1-.55.04.2-.11-.55.04.2a3.13 3.13 0 0 0-3.12-2.86z" font-size="12" opacity=".2" stroke-width="1.1"/><path d="M8.35 6.82A3.13 3.13 0 0 0 5.2 9.67l.03-.19-.09.55.04-.2-.11.54.04-.18-.1.52.03-.17-.1.52.04-.17-.1.53.03-.18-.1.53.04-.19-.1.54.03-.19-.09.53.04-.18-.11.53.04-.19-.1.54.04-.18-.1.53.03-.19-.1.53.03-.17-.08.52.02-.17-.09.52.03-.17-.1.51.04-.17-.1.54.03-.18-.1.52.04-.18-.1.53.03-.18-.09.53.02-.18-.08.53.02-.18-.09.52.03-.16-.1.51.04-.17-.1.52.03-.17-.1.52.04-.17-.1.52.03-.17-.09.52.02-.17-.08.52.03-.17-.1.52.03-.18-.1.52.04-.17-.1.52.03-.17-.09.52.03-.16-.1.51.04-.16-.1.51.03-.16-.1.51.04-.17-.1.51.03-.16-.09.52.03-.17-.1.52.03-.17-.09.52.03-.17-.1.5.04-.15-.1.5.03-.16-.1.52.04-.16-.1.5.03-.15-.1.5.04-.15-.1.5.03-.16-.09.51.03-.16-.1.51.03-.16-.09.52.03-.17-.1.5.04-.15-.1.5.03-.15-.08.5.02-.16-.1.52.03-.16-.09.5.03-.15-.1.5.03-.15-.09.5.03-.16-.1.5.04-.15-.09.5.02-.15-.08.5.02-.15-.1.5.03-.16-.09.5.03-.15-.1.5.03-.15c-.07.3-.11.6-.11.88v6.48a3.6 3.6 0 0 0 3.61 3.6h38.02a3.6 3.6 0 0 0 3.6-3.6V31.3c0-.3-.04-.58-.11-.88l.03.16-.1-.5.03.15-.1-.5.04.16-.1-.5.03.15-.09-.51.03.15-.1-.5.03.16-.09-.5-.06-.35.02.15-.09-.5.03.16-.1-.51.04.16-.1-.52.03.17-.1-.5.04.15-.1-.5.03.16-.09-.52.02.16-.08-.51.02.16-.09-.5.02.15-.09-.5.04.15-.1-.5.03.16-.1-.51.04.16-.1-.51.03.16-.09-.5.02.16-.1-.53.04.18-.09-.52.02.16-.09-.5.03.16-.1-.52.04.17-.1-.52.04.16-.1-.5.03.16-.1-.52.03.17-.1-.51.04.16-.09-.51.02.16-.09-.52.03.17-.1-.52.03.18-.09-.53.04.18-.1-.52.03.17-.1-.52.03.17-.1-.52.04.17-.08-.52.03.16-.1-.51.04.17-.1-.52.03.18-.1-.52.04.16-.1-.52.03.18-.1-.53.04.18-.1-.53.03.18-.09-.53.02.18-.08-.53.03.19-.11-.53.04.18-.1-.53.04.17-.1-.52.03.17-.1-.52.04.18-.1-.52.03.17-.1-.53.03.18-.1-.53.04.18-.09-.53.03.18-.1-.53.04.19-.11-.54.04.19-.1-.53.04.19-.1-.55.03.2-.1-.54.03.18-.1-.53.04.18-.09-.54.03.2-.1-.55.05.19a3.13 3.13 0 0 0-3.14-2.85z" font-size="12" fill="url(#b)" stroke-width="1.1"/><path d="M45.34 30.7a2.52 2.52 0 0 0-.06-.34 1.8 1.8 0 0 0-.07-.35 1.98 1.98 0 0 0-.06-.36 2.41 2.41 0 0 0-.07-.35c0-.1-.03-.22-.07-.34 0-.12-.03-.24-.06-.35 0-.1-.04-.23-.06-.35l-.06-.35-.07-.34a1.8 1.8 0 0 0-.06-.35l-.07-.35-.07-.35-.06-.34a2.41 2.41 0 0 0-.07-.36c0-.1-.03-.23-.05-.35l-.07-.35-.06-.34a1.8 1.8 0 0 0-.07-.35l-.07-.35a2.3 2.3 0 0 0-.06-.35c0-.11-.04-.22-.07-.34 0-.12-.03-.24-.06-.35 0-.12-.04-.24-.06-.35l-.06-.36-.07-.34a1.8 1.8 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.35l-.07-.35a2.2 2.2 0 0 0-.06-.35c0-.11-.04-.22-.07-.34 0-.12-.03-.24-.07-.35 0-.11-.03-.23-.05-.35l-.07-.35-.06-.34a1.8 1.8 0 0 0-.07-.36 1.8 1.8 0 0 0-.06-.35 2.2 2.2 0 0 0-.07-.35c0-.1-.03-.23-.07-.35 0-.1-.03-.23-.06-.34 0-.12-.03-.24-.06-.35 0-.12-.04-.24-.06-.35l-.07-.35-.06-.35-.07-.34a1.8 1.8 0 0 0-.07-.36c0-.1-.03-.23-.06-.35 0-.1-.03-.23-.07-.35 0-.1-.03-.23-.05-.34-.01-.12-.05-.24-.07-.35a1.8 1.8 0 0 0-.06-.35l-.07-.35-.07-.35a1.86 1.86 0 0 0-.06-.34c0-.12-.03-.24-.07-.35 0-.12-.03-.25-.06-.36 0-.1-.04-.23-.06-.35l-.06-.35a1.86 1.86 0 0 0-.07-.34 1.8 1.8 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.35 2.05 2.05 0 0 0-2.04-1.87H8.35c-1.08 0-1.96.83-2.04 1.87-.04.11-.06.22-.07.35l-.07.35a1.7 1.7 0 0 0-.06.34 1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35l-.06.36c-.03.1-.05.21-.06.35-.04.1-.06.22-.07.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.35l-.06.35a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.36a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35l-.06.35a1.8 1.8 0 0 0-.06.35c-.04.11-.06.22-.07.35l-.07.34-.06.35-.06.35c-.03.11-.05.22-.06.35-.03.11-.06.22-.07.36a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.35l-.07.35-.06.35-.06.34a1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.35a1.7 1.7 0 0 0-.07.34l-.07.35-.06.36-.06.35c-.03.1-.05.22-.06.35-.03.1-.06.22-.07.35-.02.1-.05.22-.06.34-.03.11-.06.23-.07.35l-.05.35c-.04.11-.06.22-.07.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.36c-.02.1-.05.22-.06.35l-.07.34-.07.35-.05.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.02.11-.05.23-.06.35l-.07.34-.05.36a1.8 1.8 0 0 0-.07.35c-.03.1-.06.22-.07.35a2.52 2.52 0 0 0-.07.6v6.48a2.5 2.5 0 0 0 2.5 2.5H42.9a2.5 2.5 0 0 0 2.5-2.5V31.3c0-.2-.02-.4-.07-.6z" font-size="12" fill="url(#c)" stroke-width="1.1"/><path d="M10.7 7.91L3.5 30.35c13.7-1.65 27.04-1.65 40.54-.91L37.1 7.9z" font-size="12" fill="url(#d)" stroke-width="1.1"/><path d="M2.77 29.18l-.05.34a1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.36a1.7 1.7 0 0 0-.07.34c-.02.1-.06.23-.07.35a2.52 2.52 0 0 0-.07.61v2.66c.47.44 1.1.7 1.79.7h39.46c.7 0 1.32-.26 1.79-.7v-2.66c0-.22-.03-.42-.08-.61a2.52 2.52 0 0 0-.06-.35 1.86 1.86 0 0 0-.07-.34 1.8 1.8 0 0 0-.06-.36 2.41 2.41 0 0 0-.07-.35c0-.1-.03-.23-.07-.35 0-.1-.03-.23-.06-.34 0-.12-.04-.24-.06-.35l-.06-.35-.07-.35a1.86 1.86 0 0 0-.06-.34 1.8 1.8 0 0 0-.07-.35 1.98 1.98 0 0 0-.07-.35l-.06-.36a2.41 2.41 0 0 0-.07-.34c0-.12-.03-.24-.05-.35a2.3 2.3 0 0 0-.07-.35l-.06-.35-.07-.34a2.3 2.3 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.35c0-.11-.04-.23-.07-.35 0-.11-.03-.23-.06-.34 0-.1-.03-.19-.05-.28H3.92a2.3 2.3 0 0 0-.04.28 1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.06.35 1.8 1.8 0 0 0-.07.35c-.02.1-.05.22-.06.35-.02.11-.06.22-.07.34l-.05.35a1.8 1.8 0 0 0-.07.35l-.07.35a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.36c-.02.1-.05.23-.06.35l-.07.35-.06.34-.06.35a1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.35l-.06.34z" font-size="12" fill="url(#e)" stroke-width="1.1"/><path d="M45.28 30.36a1.8 1.8 0 0 0-.07-.35 1.8 1.8 0 0 0-.06-.36 2.41 2.41 0 0 0-.07-.35c0-.1-.03-.23-.07-.34 0-.12-.03-.24-.05-.35l-.07-.35-.06-.35a1.86 1.86 0 0 0-.07-.34 1.8 1.8 0 0 0-.06-.35 1.8 1.8 0 0 0-.07-.35l-.07-.35c0-.11-.03-.23-.06-.34a2.41 2.41 0 0 0-.06-.36l-.06-.35-.07-.35a1.86 1.86 0 0 0-.06-.34 1.8 1.8 0 0 0-.07-.35 1.98 1.98 0 0 0-.07-.35 2.3 2.3 0 0 0-.06-.35c0-.09-.02-.19-.05-.28-.33-.16-.7-.26-1.1-.26H4.9c-.4 0-.77.1-1.1.26l-.05.28c-.02.1-.06.23-.07.35l-.06.35-.06.35a1.7 1.7 0 0 0-.06.34 1.8 1.8 0 0 0-.07.35 1.8 1.8 0 0 0-.07.35c-.03.11-.05.22-.06.36-.02.1-.06.22-.07.34l-.06.35-.06.35c-.03.1-.05.22-.06.35a1.7 1.7 0 0 0-.07.34 1.8 1.8 0 0 0-.07.35 1.8 1.8 0 0 0-.06.35c-.02.11-.06.22-.07.35l-.06.34-.06.35a1.8 1.8 0 0 0-.06.36c-.04.1-.06.22-.07.35a1.7 1.7 0 0 0-.07.34c-.04.2-.07.4-.07.61v.86a2.5 2.5 0 0 0 2.5 2.51H42.9a2.5 2.5 0 0 0 2.5-2.51v-.86c0-.22-.02-.42-.08-.61 0-.11-.03-.23-.05-.34z" font-size="12" fill="url(#f)" stroke-width="1.1"/><path d="M2.39 37.79a2.5 2.5 0 0 0 2.5 2.5h38.02a2.5 2.5 0 0 0 2.5-2.5V31.3a2.5 2.5 0 0 0-2.5-2.51H4.89a2.5 2.5 0 0 0-2.51 2.51v6.48z" font-size="12" fill="url(#g)" stroke-width="1.1"/><path d="M4.89 30.12c-.66 0-1.2.53-1.2 1.2v6.47c0 .66.54 1.2 1.2 1.2h38.02c.65 0 1.2-.56 1.2-1.21V31.3a1.2 1.2 0 0 0-1.2-1.18z" font-size="12" fill="url(#h)" stroke-width="1.1"/><path d="M40.47 36.12c-.82 0-1.48.53-1.48 1.22s.66 1.23 1.5 1.23h.87c.83 0 1.5-.55 1.5-1.23 0-.68-.67-1.23-1.5-1.23h-.88z" font-size="12" fill="url(#i)" stroke-width="1.1"/><path d="M40.47 36.44c-.64 0-1.15.4-1.15.9s.51.9 1.16.9h.88c.65 0 1.16-.4 1.16-.9s-.52-.9-1.16-.9h-.88z" font-size="12" fill="url(#j)" stroke-width="1.1"/><path d="M42.41 37.34c0 .44-.47.79-1.05.79h-.88c-.58 0-1.05-.35-1.05-.8 0-.43.47-.78 1.05-.78h.88c.58 0 1.05.35 1.05.79z" font-size="12" fill="url(#k)" stroke-width="1.1"/><path d="M40.47 36.77c-.44 0-.82.27-.82.6 0 .33.38.6.83.6h.88c.45 0 .83-.28.83-.6 0-.33-.38-.6-.83-.6h-.88z" font-size="12" fill="url(#l)" stroke-width="1.1"/><path d="M40.45 36.65c-.38 0-.66.22-.66.41 0 .2.28.43.66.43h.94c.39 0 .66-.22.66-.43 0-.2-.27-.41-.66-.41z" font-size="12" fill="url(#m)" stroke-width="1.1"/><path font-size="12" d="M6.54 34.75h14v3.64h-14z" fill="url(#n)" stroke-width="1.1"/><path font-size="12" d="M6.54 34.75v.44H20.1v3.2h.44v-3.64z" fill="url(#o)" stroke-width="1.1"/><path font-size="12" d="M17.2 34.75h.87v3.64h-.88zm-4.58 0h.87v3.64h-.87zm2.28 0h.88v3.64h-.88zm-4.57 0h.88v3.64h-.88z" fill="#949494" stroke-width="1.1"/><path font-size="12" d="M16.97 34.75h.88v3.64h-.88zm-4.57 0h.87v3.64h-.87zm2.28 0h.88v3.64h-.88zm-4.57 0H11v3.64h-.88z" fill="#f0f0f0" stroke-width="1.1"/><path font-size="12" d="M-2.44 50.44V-2.24h52.68v52.68" fill="none" stroke-width="1.1"/></svg>
elFinder/img/volume_icon_network.png ADDED
Binary file
elFinder/img/volume_icon_network.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" viewBox="0 0 42.33 42.33" id="svg8"><g id="layer1" transform="translate(-48.98 -204.72)"><g id="XMLID_16103_" transform="matrix(1.05625 0 0 1.0371 44.78 200.04)"><ellipse ry="1.9" rx="14.6" cy="43.1" cx="24" id="XMLID_16108_" opacity=".15" fill="#45413c"/><path d="M43.3 27.4c0-2.5-1.5-4.6-3.6-5.6.1-.6.2-1.1.2-1.7a6.8 6.8 0 0 0-9.4-6.3c-.8-4.8-5-8.5-10-8.5-5.6 0-10.2 4.6-10.2 10.2v.7a9.13 9.13 0 0 0-5.5 8.3c0 5 4 9 9 9h23.5c3.3 0 6-2.7 6-6.1z" id="XMLID_16107_" fill="#fff"/><path d="M37.2 29.2H13.7a9.1 9.1 0 0 1-8.8-6.9c-.2.7-.3 1.4-.3 2.1 0 5 4 9 9 9h23.5a6.06 6.06 0 0 0 5.7-8.2c-.8 2.4-3 4-5.6 4z" id="XMLID_16106_" fill="#f0f0f0"/><path d="M43.3 27.4c0-2.5-1.5-4.6-3.6-5.6.1-.6.2-1.1.2-1.7a6.8 6.8 0 0 0-9.4-6.3c-.8-4.8-5-8.5-10-8.5-5.6 0-10.2 4.6-10.2 10.2v.7a9.13 9.13 0 0 0-5.5 8.3c0 5 4 9 9 9h23.5c3.3 0 6-2.7 6-6.1z" class="st4" id="XMLID_16105_" fill="none" stroke="#45413c" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/><path d="M30.4 13.8a7.68 7.68 0 0 0-4.1 6.5" class="st4" id="XMLID_16104_" fill="none" stroke="#45413c" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/></g><g id="g3965" transform="matrix(.81344 0 0 .81344 50.86 206.3)" overflow="visible"><g id="Layer_1"><g id="g1182"><path id="path1183" d="M36.05 41h-8.6a1.5 1.5 0 0 0-.73-.64v-8.69h-4.88v8.69a1.5 1.5 0 0 0-.73.64h-8.6v4.88h8.45A1.5 1.5 0 0 0 22.4 47h3.75c.7 0 1.28-.48 1.45-1.12h8.44z" opacity=".2"/><path id="path1184" d="M35.86 40.82h-8.59a1.5 1.5 0 0 0-.74-.64v-8.7h-4.87v8.7a1.5 1.5 0 0 0-.74.64h-8.6v4.87h8.45a1.5 1.5 0 0 0 1.45 1.13h3.75c.7 0 1.28-.48 1.45-1.13h8.44z" opacity=".2"/><path id="path1185" d="M35.67 40.63h-8.59a1.5 1.5 0 0 0-.74-.64V31.3h-4.87v8.69a1.5 1.5 0 0 0-.74.64h-8.59v4.87h8.44a1.5 1.5 0 0 0 1.45 1.13h3.75c.7 0 1.29-.48 1.45-1.13h8.44z" opacity=".2"/><path id="polygon1186" fill="#616161" d="M11.95 40.44v4.88H35.5v-4.88h-.68z"/><linearGradient y2="44.64" x2="23.72" y1="41.11" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_20_"><stop id="stop1188" offset="0" stop-color="#cecedb"/><stop id="stop1189" offset=".19" stop-color="#fff"/><stop id="stop1190" offset=".48" stop-color="#cecedb"/><stop id="stop1191" offset=".75" stop-color="#b3b3c6"/><stop id="stop1192" offset=".99" stop-color="#828282"/></linearGradient><path id="rect1202" fill="url(#XMLID_20_)" d="M12.62 41.11h22.19v3.53H12.62z"/><path id="polygon1203" fill="#616161" d="M21.28 43.96h4.88V31.1h-4.88v.37z"/><linearGradient gradientTransform="rotate(-90 -256.9 586)" y2="868.38" x2="291.57" y1="864.85" x1="291.57" gradientUnits="userSpaceOnUse" id="XMLID_21_"><stop id="stop1205" offset="0" stop-color="#cecedb"/><stop id="stop1206" offset=".19" stop-color="#fff"/><stop id="stop1207" offset=".48" stop-color="#cecedb"/><stop id="stop1208" offset=".75" stop-color="#b3b3c6"/><stop id="stop1209" offset=".99" stop-color="#828282"/></linearGradient><path id="rect1219" fill="url(#XMLID_21_)" d="M21.95 31.48h3.53v12.11h-3.53z"/><linearGradient y2="39.69" x2="23.72" y1="46.44" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_22_"><stop id="stop1221" offset="0" stop-color="#cf0000"/><stop id="stop1222" offset=".99" stop-color="#ff6d00"/></linearGradient><path id="path1226" d="M27.1 44.94c0 .83-.68 1.5-1.5 1.5h-3.76a1.5 1.5 0 0 1-1.5-1.5V41.2c0-.83.68-1.5 1.5-1.5h3.75c.83 0 1.5.67 1.5 1.5z" fill="url(#XMLID_22_)"/><linearGradient y2="49.63" x2="23.72" y1="37.07" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_23_"><stop id="stop1228" offset="0" stop-color="#fff030"/><stop id="stop1229" offset=".99" stop-color="#ffae00"/></linearGradient><path id="path1233" d="M21.84 40.44a.75.75 0 0 0-.75.75v3.75c0 .42.34.75.75.75h3.75c.42 0 .75-.33.75-.75V41.2a.75.75 0 0 0-.75-.75z" fill="url(#XMLID_23_)"/><linearGradient y2="43.82" x2="23.72" y1="41" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_24_"><stop id="stop1235" offset="0" stop-color="#fff"/><stop id="stop1236" offset=".5" stop-color="#ffe3a9"/><stop id="stop1237" offset=".99" stop-color="#ffc957"/></linearGradient><path id="path1241" d="M21.84 41c-.1 0-.18.09-.18.2v3.74c0 .1.08.19.18.19h3.75c.1 0 .2-.08.2-.19V41.2c0-.1-.1-.19-.2-.19z" fill="url(#XMLID_24_)"/></g><path id="path1242" d="M25.25 1.28L12.14 9.87l-.04.02-.05.04-.04.03-.17.2-.02.04-.04.08-.02.04-.03.09-.02.04-.02.08v.05l-.01.1V33.51c0 .44.28.83.7.97l9.76 3.26c.32.1.67.05.94-.15l13.02-9.77c.26-.2.41-.5.41-.82V4.22v-.05-.07l-.01-.06V4l-.02-.03-.02-.08-.02-.06-.03-.07-.04-.06-.04-.07-.04-.05-.04-.05-.02-.02-.03-.04a4.33 4.33 0 0 1-.11-.09l-.06-.03-.07-.05-.07-.03-.06-.02a7 7 0 0 0-.08-.03l-.05-.01-9.67-2.08c-.27-.06-.55 0-.78.15zM11.69 10.53" opacity=".2"/><path id="path1243" d="M36.14 4.2v-.05l-.01-.05v-.02l-.01-.02a.87.87 0 0 0-.05-.13l-.02-.04-.03-.04L36 3.8l-.03-.03a.94.94 0 0 0-.07-.06l-.03-.03a.83.83 0 0 0-.04-.03l-.04-.02h-.01l-.03-.02-.05-.02-.05-.01-.03-.01-9.67-2.08a.66.66 0 0 0-.5.1l-13.1 8.58h-.01l-.02.02-.03.02-.02.02a.71.71 0 0 0-.11.13l-.02.02c0 .02-.02.04-.03.05v.03l-.03.05v.03l-.02.06v.03l-.01.06V33.5c0 .28.18.53.45.62l9.76 3.25c.2.07.43.04.6-.1l13.02-9.76a.66.66 0 0 0 .26-.52V4.22 4.2z" opacity=".2"/><path id="path1244" d="M25.06 1.09l-13.1 8.59-.05.03-.05.03-.03.03-.18.2-.02.04-.04.08-.02.04-.03.09-.01.04-.03.09v.05l-.01.1v22.82c0 .44.28.83.7.98l9.76 3.25c.32.1.68.05.95-.15l13.02-9.77c.25-.19.4-.5.4-.82V4.03v-.05-.06l-.01-.07V3.8c0-.02-.01-.01-.02-.03l-.02-.08-.02-.06a14.21 14.21 0 0 0-.1-.2l-.05-.05-.04-.05-.01-.01-.04-.04-.05-.05-.06-.04-.06-.04-.07-.04-.06-.03-.07-.03-.08-.02-.05-.02L25.84.94c-.27-.05-.55 0-.78.15zM11.5 10.35" opacity=".2"/><path id="path1245" d="M35.95 4v-.04l-.01-.05V3.9l-.01-.02-.01-.05-.02-.04a.34.34 0 0 0-.02-.04l-.02-.04-.03-.04-.02-.04-.03-.03-.03-.03a.33.33 0 0 0-.04-.03l-.03-.03a.83.83 0 0 0-.12-.07l-.05-.02-.04-.01-.03-.01-9.68-2.08a.66.66 0 0 0-.5.1l-13.1 8.58h-.01l-.02.02-.03.02-.02.02a.71.71 0 0 0-.11.13l-.02.02-.02.05-.02.03-.02.05v.03l-.02.06v.09l-.01.02v22.79c0 .28.18.53.45.62l9.76 3.25c.2.07.43.04.6-.1l13.02-9.76a.66.66 0 0 0 .26-.52V4.03v-.02z" opacity=".2"/><linearGradient y2="8.67" x2="14.03" y1="26.92" x1="32.27" gradientUnits="userSpaceOnUse" id="XMLID_25_"><stop id="stop1247" offset="0" stop-color="#585868"/><stop id="stop1248" offset="1" stop-color="#494949"/></linearGradient><path id="path1252" d="M24.87.77l-13.1 8.6-.05.02-.04.04-.04.03-.17.2-.03.04-.04.08-.02.04-.03.08-.01.04-.02.1-.01.04-.01.1V33.01c0 .44.28.83.7.97l9.77 3.26c.32.1.67.05.94-.15l13.02-9.77c.26-.2.41-.5.41-.82V3.7v-.04-.07l-.02-.07V3.5l-.01-.04-.03-.07-.02-.06-.03-.07L36 3.2l-.04-.07-.04-.05-.04-.05a.3.3 0 0 0-.02-.02l-.04-.04a3.78 3.78 0 0 1-.16-.13l-.08-.04-.06-.03-.07-.03-.07-.02-.06-.01L25.65.63c-.27-.06-.55 0-.78.14zM11.32 10.03" fill="url(#XMLID_25_)"/><linearGradient y2="28.05" x2="33.41" y1="9.81" x1="15.17" gradientUnits="userSpaceOnUse" id="XMLID_26_"><stop id="stop1254" offset="0" stop-color="#7d7d99"/><stop id="stop1255" offset="1" stop-color="#494949"/></linearGradient><path id="path1259" d="M35.76 3.7v-.05-.05l-.01-.02v-.02l-.02-.05-.02-.04a.34.34 0 0 0-.02-.05l-.02-.03-.02-.04-.03-.04-.03-.03-.03-.04-.03-.03-.04-.02-.04-.03-.04-.02-.04-.02-.04-.02-.05-.02h-.03L25.57 1a.66.66 0 0 0-.5.09l-13.1 8.59h-.01l-.02.01-.03.03-.02.02a.71.71 0 0 0-.11.13l-.01.02-.03.05-.02.03-.01.05-.01.03-.02.05V33c0 .29.17.54.44.63l9.76 3.25c.2.07.43.03.6-.1l13.02-9.76a.66.66 0 0 0 .26-.53V3.72v-.03z" fill="url(#XMLID_26_)"/><radialGradient gradientUnits="userSpaceOnUse" gradientTransform="translate(19.5 19.5) scale(.1875)" fy="47.28" fx="105.2" r="139.09" cy="47.28" cx="105.2" id="XMLID_27_"><stop id="stop1261" offset="0" stop-color="#fff"/><stop id="stop1262" offset=".28" stop-color="#cecedb"/><stop id="stop1263" offset=".64" stop-color="#bdbdcf"/><stop id="stop1264" offset="1" stop-color="#9a9ab1"/></radialGradient><path id="polygon1272" fill="url(#XMLID_27_)" d="M12.33 10.22l9.76 3.26L35.11 3.7V26.5l-13.02 9.76-9.76-3.25z"/><linearGradient y2="3.36" x2="23.72" y1="13.22" x1="23.72" gradientUnits="userSpaceOnUse" id="XMLID_28_"><stop id="stop1274" offset="0" stop-color="#cecedb"/><stop id="stop1275" offset="1" stop-color="#eee"/></linearGradient><path id="polygon1279" fill="url(#XMLID_28_)" d="M25.44 1.64l-13.11 8.58 9.76 3.26L35.11 3.7z"/><linearGradient y2="38.24" x2="22.17" y1="16.69" x1="15.04" gradientUnits="userSpaceOnUse" id="XMLID_29_"><stop id="stop1281" offset="0" stop-color="#fff"/><stop id="stop1282" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1286" fill="url(#XMLID_29_)" d="M12.33 33l9.76 3.26V13.48l-9.76-3.26z"/><linearGradient y2="28.48" x2="17.78" y1="35.2" x1="16.64" gradientUnits="userSpaceOnUse" id="XMLID_30_"><stop id="stop1288" offset="0" stop-color="#fff"/><stop id="stop1289" offset="1" stop-color="#bdbdcf"/></linearGradient><path id="polygon1293" fill="url(#XMLID_30_)" d="M12.33 27.4V33l9.76 3.26V30.5z"/><linearGradient y2="16.36" x2="20.09" y1="16.36" x1="13.81" gradientUnits="userSpaceOnUse" id="XMLID_31_"><stop id="stop1295" offset="0" stop-color="#7d7d99"/><stop id="stop1296" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1300" fill="url(#XMLID_31_)" d="M13.8 16.16l6.3 2.1v-1.71l-6.3-2.1z"/><linearGradient y2="18.78" x2="20.09" y1="18.78" x1="13.81" gradientUnits="userSpaceOnUse" id="XMLID_32_"><stop id="stop1302" offset="0" stop-color="#7d7d99"/><stop id="stop1303" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1307" fill="url(#XMLID_32_)" d="M13.8 18.6l6.3 2.09v-1.71l-6.3-2.1z"/><linearGradient y2="22.93" x2="18.67" y1="18.9" x1="14.63" gradientUnits="userSpaceOnUse" id="XMLID_33_"><stop id="stop1309" offset="0" stop-color="#7d7d99"/><stop id="stop1310" offset="1" stop-color="#cecedb"/></linearGradient><path id="polygon1314" fill="url(#XMLID_33_)" d="M13.8 21.02l6.3 2.1V21.4l-6.3-2.1z"/><g id="g1315"><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="477.59" x2="271.32" y1="478.92" x1="271.32" gradientUnits="userSpaceOnUse" id="XMLID_34_"><stop id="stop1317" offset=".01" stop-color="#fff"/><stop id="stop1318" offset="1" stop-color="#b6b6b6"/></linearGradient><path id="path1322" d="M19.78 33.41c-.46-.12-.81.1-.81.5s.35.8.8.93l.49.13c.45.12.8-.1.8-.5s-.35-.8-.8-.93z" fill="url(#XMLID_34_)"/><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="477.72" x2="271.32" y1="478.86" x1="271.32" gradientUnits="userSpaceOnUse" id="XMLID_35_"><stop id="stop1324" offset=".01" stop-color="#b6b6b6"/><stop id="stop1325" offset=".37" stop-color="#9d9d9d"/><stop id="stop1326" offset=".74" stop-color="#898989"/><stop id="stop1327" offset="1" stop-color="#828282"/></linearGradient><path id="path1331" d="M19.78 33.6c-.35-.1-.63.07-.63.36s.28.6.63.69l.48.13c.34.09.63-.07.63-.36 0-.28-.29-.6-.63-.69z" fill="url(#XMLID_35_)"/><linearGradient gradientTransform="matrix(-.9659 -.2588 0 .7765 -840.35 -606.85)" y2="528.08" x2="-890.74" y1="529.26" x1="-890.74" gradientUnits="userSpaceOnUse" id="XMLID_36_"><stop id="stop1333" offset=".01" stop-color="#9f6"/><stop id="stop1334" offset=".24" stop-color="#68de56"/><stop id="stop1335" offset=".48" stop-color="#3bc147"/><stop id="stop1336" offset=".7" stop-color="#1bab3c"/><stop id="stop1337" offset=".88" stop-color="#079e35"/><stop id="stop1338" offset="1" stop-color="#093"/></linearGradient><path id="path1342" d="M20.83 34.4c0 .26-.26.4-.57.31l-.48-.13c-.32-.08-.57-.35-.57-.6 0-.26.25-.4.57-.31l.48.12c.31.09.57.36.57.62z" fill="url(#XMLID_36_)"/><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="477.65" x2="271.34" y1="478.52" x1="271.31" gradientUnits="userSpaceOnUse" id="XMLID_37_"><stop id="stop1344" offset=".01" stop-color="#3c3"/><stop id="stop1345" offset=".36" stop-color="#1bb433"/><stop id="stop1346" offset=".74" stop-color="#07a033"/><stop id="stop1347" offset="1" stop-color="#093"/></linearGradient><path id="path1351" d="M19.78 33.8c-.25-.07-.46.03-.46.22s.21.4.46.47l.48.13c.24.06.45-.04.45-.23s-.2-.4-.45-.47z" fill="url(#XMLID_37_)"/><linearGradient gradientTransform="matrix(.9659 .2588 0 1.0353 -242.05 -531.04)" y2="478.35" x2="271.32" y1="477.78" x1="271.32" gradientUnits="userSpaceOnUse" id="XMLID_38_"><stop id="stop1353" offset="0" stop-color="#fff"/><stop id="stop1354" offset=".09" stop-color="#e8f7d6"/><stop id="stop1355" offset=".23" stop-color="#c8ed9e"/><stop id="stop1356" offset=".36" stop-color="#ade46d"/><stop id="stop1357" offset=".5" stop-color="#97dc46"/><stop id="stop1358" offset=".63" stop-color="#85d627"/><stop id="stop1359" offset=".76" stop-color="#79d212"/><stop id="stop1360" offset=".89" stop-color="#72d004"/><stop id="stop1361" offset="1" stop-color="#6fcf00"/></linearGradient><path id="path1365" d="M19.76 33.71c-.2-.05-.36.04-.36.15 0 .12.16.3.36.35l.52.14c.2.05.35-.04.35-.15 0-.12-.15-.3-.35-.35z" fill="url(#XMLID_38_)"/></g><path id="_x3C_Slice_x3E_" fill="none" d="M0 48V0h48v48"/></g></g></g><style id="style3713">.st4{fill:none;stroke:#45413c;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10}</style></svg>
elFinder/img/volume_icon_onedrive.png CHANGED
Binary file
elFinder/img/volume_icon_onedrive.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48"><path d="M40.4 36s3-.4 3.5-3.2a5 5 0 0 0 0-1.7c-.4-3.1-3.8-3.8-3.8-3.8s.6-3.4-2.5-5.2c-3.2-1.8-6 0-6 0s-1.7-3.4-6.3-3.4c-5.8 0-6.8 6.6-6.8 6.6s-5.5.3-5.5 5.2 5 5.5 5 5.5h22.4z" fill="#1565c0"/><path d="M11 30.5c0-4.4 3.3-6.3 5.9-7 .9-3 3.4-6.8 8.4-6.8a9 9 0 0 1 7 3c.6-.3 1.4-.4 2.3-.4A8 8 0 0 0 26 12c-5.5 0-7.4 4.7-7.4 4.7s-4-3-8.1 1.1c-2.1 2.1-1.6 5.4-1.6 5.4S4 23.6 4 28.8C4 33.5 9 34 9 34h2.8c-.5-1-.8-2.1-.8-3.5z" fill="#1565c0"/></svg>
elFinder/img/volume_icon_sql.png CHANGED
Binary file
elFinder/img/volume_icon_sql.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg viewBox="0 0 233.1 286.6" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a"><stop stop-color="#fff" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="b" x1="1618.4" x2="1701.1" gradientUnits="userSpaceOnUse" spreadMethod="reflect"><stop stop-color="#497bb3" offset="0"/><stop stop-color="#a5c4e6" offset=".2"/><stop stop-color="#3b5d8b" offset="1"/></linearGradient><linearGradient id="c" x1="282.4" x2="286.6" y1="518.6" y2="527.3" gradientUnits="userSpaceOnUse"><stop stop-color="#a5c4e6" offset="0"/><stop stop-color="#497bb3" offset="1"/></linearGradient><linearGradient id="d" x1="1702.8" x2="1783.8" y1="-868.3" y2="-877.9" gradientUnits="userSpaceOnUse" xlink:href="#a" spreadMethod="reflect"/><linearGradient id="e" x1="1702.8" x2="1783.8" y1="-821.2" y2="-830.8" gradientUnits="userSpaceOnUse" xlink:href="#a" spreadMethod="reflect"/><linearGradient id="f" x1="1702.8" x2="1783.8" y1="-777" y2="-786.6" gradientUnits="userSpaceOnUse" xlink:href="#a" spreadMethod="reflect"/></defs><g class="Graphic"><path d="M183 16.4c2.3 3.9 1.5 189.2-1.6 196.5-2.4 5.8-80.6 70.8-84.7 72.5-52.9-.3-88.5-19.6-94.5-29.8C0 242.8 2 45.6 4 41.6 6 37.8 106 2 109.5 1.1c3.2-.7 70.7 10.9 73.4 15.2z" fill="#c7c7c7"/><path d="M181.9 17l.3-.2h-.1l-.3.1h.3-.1l-.1.1zm0 0l.2-.1v-.1l.3-.1-.2.2.2-.2-.2.1-.2.2zm.5-.3l.5-.3-.5.2zm.6-.2l-.6.2.6-.2zm.9-.7c0-.2-.2-.3-.3-.5l-.4-.3-1-.6-1-.5-1.5-.5c-1-.4-2.2-.8-3.6-1.1l-4.5-1.2A858.9 858.9 0 0 0 124 1.8l-9-1.3-3-.4h-1l-.5-.1h-.9l-.2.1h-.4l-.3.2-.6.1-.6.3-1.6.5-2.1.7-5.5 2-6.8 2.4a3492.8 3492.8 0 0 0-71 26.4l-6.7 2.7a210.2 210.2 0 0 0-8.8 4l-.6.4-.5.3c-.1.2-.3.3-.4.3L3 41l-.2.4v.4l-.1.5-.1.7c0 .4 0 1-.2 1.5v2a326.8 326.8 0 0 0-.6 12A6597.9 6597.9 0 0 0 .2 237l.2 6.9.2 5.4.2 4 .1 1.5v.6l.1.4v.2l.2.2a19 19 0 0 0 3.8 4.5c1.7 1.5 3.8 3.1 6.4 4.8 5 3.3 11.8 6.7 20 9.8a190.2 190.2 0 0 0 65.3 11.3h.5l.4-.3.3-.2.5-.3.6-.5 1.4-1 1.8-1.3 4.4-3.5 5.5-4.4a1569.7 1569.7 0 0 0 56.5-47.8l5.3-4.8 4.2-4 1.6-1.7 1.4-1.4.9-1 .3-.5c0-.2.2-.4.3-.5v-.4l.2-.4a19 19 0 0 0 .3-2.4l.2-1.7.3-4.2.3-5.3.9-30.7a4531.2 4531.2 0 0 0 .1-139 202.1 202.1 0 0 0-.5-11.1v-.8l-.2-.6v-.5l-.2-.2-.1-.3zm-1.7 1l.5-.6-.5.6zm-.3.4v.5l.1.7.2 1.9v2.4l.4 6.6a2727.6 2727.6 0 0 1 .5 56.4c0 27.4-.2 58.1-.7 82.5a1759.8 1759.8 0 0 1-1.5 40.1c0 .6 0 1.2-.2 1.7l-.1 1.2-.2.8v.4l-.1.2-.2.3-.8 1-1.3 1.3-1.6 1.6-4.1 3.9a1419.9 1419.9 0 0 1-61.7 52.5l-5.5 4.4-4.4 3.5c-.6.5-1.2 1-1.8 1.3l-1.3 1a4 4 0 0 1-.6.4l-.3.3-.3.1a194.1 194.1 0 0 1-64.1-11.1c-8-3-14.6-6.4-19.6-9.6a46.8 46.8 0 0 1-8.1-6.7c-.5-.5-.9-1-1.2-1.6v-.7l-.2-1.3-.3-4a724.6 724.6 0 0 1-.2-12.2A6591.7 6591.7 0 0 1 4.2 58.6c0-2.5.2-4.7.3-6.8l.2-5.1.1-2 .2-1.5v-.5l.1-.5.1-.1.3-.3.6-.3 1.4-.7 2-1 5.1-2.1 6.7-2.7a2431 2431 0 0 1 71-26.4L99 6l5.4-1.9 2.1-.7 1.7-.6.6-.1.5-.2.3-.1h.2l-.1-.5v.4h1l1 .2 3.1.3 8.9 1.3a816.2 816.2 0 0 1 47.4 9.2l4.3 1.2 3.5 1 1.3.6 1 .4.6.4v.2zm-85.6 267h.4v.7l-.4-.6.4.6v.5l-.5-1 .1-.1zM3.3 255v.2l.1.2-1.2.2 1-.5h.2-.1zM5 42v.2l-.3-.3-.8-.2.8.2h-.1.2l.2.1zm-.3 0zm-.8-.5l.7.4-.7-.4zm.7.4l-.5-.6.5.6zM109.7 2l-.1-.8V2zm-.2-.8l.2.8-.2-.8z"/><path d="M179 20.2l-2.4 1-2.5 1.2-2.4 1-2.5 1.2-2.5 1.2-2.5 1.2-2.6 1.3-2.5 1.3-2.6 1.2-2.5 1.4-2.6 1.3-2.6 1.4-2.6 1.3-2.6 1.4-5.3 2.8-5.3 2.9-5.3 2.8-5.3 3-5.4 2.8-5.4 2.8-5.4 2.8-2.7 1.4-2.7 1.3-2.8 1.4-2.7 1.3-1.2-.3-1.4-.3-2.6-.6-2.8-.7-2.8-.6-2.8-.7-2.9-.6-2.9-.7-3-.7-2.9-.6-3-.7-6-1.4-6-1.3-3-.7-3-.6-3-.6-2.9-.6-2.9-.7-2.8-.6-2.9-.6-2.7-.6-2.7-.5-1.3-.3-1.4-.3-1.2-.2-1.3-.3-1.3-.2-1.2-.2-1.3-.3-1.2-.3-1.1-.2-1.2-.2-1.1-.2-1.1-.2-1.1-.2-1-.2-1.1-.2-1-.2-1-.2-1-.2 2.5.8 2.5.8 2.5.7 2.5.7 2.6.8 2.6.7 2.7.8 2.7.7 2.7.7 2.7.7 5.5 1.5 5.6 1.4 5.6 1.5 5.6 1.5 5.5 1.4 5.5 1.4 2.7.8 2.7.7 2.7.7 2.7.8 2.6.7 2.6.8 2.6.7 2.5.7 2.4.8 2.5.7v2.9l.1 2.9v2.9l.1 3v3l.2 3v6.2l.1 3.2v3.2l.1 3.2v6.5l.1 3.3v6.7l.1 3.4v10.2l.1 7v14l.1 7 .1 14.2v14.2l.1 7v7l.1 7v7l.1 3.4v6.8l.1 3.4v6.7l.1 3.3v6.5l.1 3.2v6.4l.1 3.1v3l.1 3.2.1 3v3l.1 2.9.1 2.8v2.9l.1-2.9v-5.9l.1-3v-3l.1-3v-3.2l.1-3.2v-6.4l.1-3.2.1-3.3v-3.3l.1-3.4v-3.3l.1-3.4v-3.5l.2-3.4v-6.9l.2-7 .1-7 .1-7.2.2-7.2.3-14.3.2-14.4.1-7.1.2-7.1v-7.1l.2-7V126l.2-3.5v-6.8l.1-3.4v-3.4l.1-3.3.1-3.3v-6.6l.1-3.2v-3.2l.1-3.1V83l.1-3v-3l.1-3.1V68l.1-2.8 5.2-2.8 5.2-2.8 5.2-2.7L120 54l5.1-2.7 5.1-2.7 5-2.7 5.1-2.8 5-2.7 5-2.7 4.9-2.9 4.9-2.8 2.4-1.5 2.4-1.4 2.4-1.5 2.3-1.5 2.4-1.4 2.4-1.5 2.3-1.6 2.4-1.5z" fill="#fff" fill-opacity=".5"/><path d="M179 20.2C153 31.2 124.4 49 95.4 63a1898 1898 0 0 0-87-18.8c25.7 8 59.5 15.5 85.2 23.5 1.5 60.2.8 151.4 2.3 211.6.7-60.7 2.8-153.4 3.5-214 27.8-15 55-28.5 79.8-45z" fill="none"/><path d="M18 218.5l.4.6.5.7.5.6.6.6.6.6.5.5.7.6.6.6.7.5.7.5.7.6.7.5.8.5.8.5.7.5.8.5.9.4.8.5.9.4.8.4 1 .4.8.4 1 .4.8.3 2 .8 1.8.6 2 .6 2 .5 1.9.5 2 .4 2 .4 1.9.3 2 .3 1.9.1h1l.9.1H63l1-.1.7-.1.9-.1.8-.1.8-.2.8-.2.8-.2.7-.1.7-.2.7-.3.7-.2h-.1l-.3-.1H71l-.4-.2h-.4l-.4-.2-.5-.2-.6-.1-.6-.2-.7-.1-.7-.2-.7-.3-.8-.2-.8-.2-.9-.2-.9-.3-1-.3-.9-.2-1-.3-1-.3-1-.2-1.1-.3-1-.4-1.2-.2-2.3-.7-2.3-.6-2.4-.7-2.4-.6-2.3-.7-2.4-.6-2.3-.7-2.3-.6-1.1-.3-1.2-.3-1-.4-1-.2-1.1-.3-1-.3-1-.3-1-.2-.9-.3-.9-.2-.8-.3-.8-.2-.8-.2-.7-.2-.7-.2-.6-.2-.6-.2-.6-.1-.4-.2H19l-.3-.2h-.3l-.3-.2H18z" fill-opacity=".2"/><path d="M18 218.5c9.5 13.7 39.4 20.4 53.6 14.9-2.5-.7-50.5-13.9-53.6-15z" fill="none"/><path d="M67 193.1l-44.4-17-.4.1-.4.2-.4.2-.3.2-.3.3-.2.3-.3.3-.2.3-.2.4-.2.3-.1.3-.2.4-.1.4-.1.3-.2.7v.7l-.1.7v2.2l7 2.4v.1l.1.2h.1v.2l.2.2v.1l.2.2.2.2.1.2.2.2.2.2.2.3.2.2.5.5.5.6.6.5.6.6.7.6.7.6.8.6.8.6.9.5.9.5 1 .6 1 .4.5.2.6.3.5.2.6.1.6.2.6.1.6.2.6.1.6.1h.6l.7.2h3.5l.7-.1.7-.1.7-.1.8-.2.8-.2.7-.2.8-.2.8-.3h.4l.3.1h.3l.3.1h.4l.4.1h.5l.5.1h.6l.5.1h4.4l.6-.2h.6l.6-.2.6-.2.5-.1.5-.2.5-.3.5-.3.3-.3.4-.3.2-.2.1-.2.1-.2.1-.2.1-.2.1-.3z" fill="#fff" fill-opacity=".4"/><path d="M67 193.1l-44.4-17c-4.6 1.6-3.7 8.3-3.7 8.3l7 2.4s9.6 15.1 26.7 9.2c0 0 12.8 2.3 14.3-2.9z" fill="none"/><path d="M66.5 187.4l-44.1-11.5c-.6 2-.7 5 .2 6.6 2.3 1.1 6.8 2 9 3 6.4 6.3 12 6.8 22.3 6l12 2.2c1.2-2.4 1.5-3.4.6-6.3z" fill="#606060"/><path d="M66.5 187.4l-44.1-11.5c-.6 2-.7 5 .2 6.6 2.3 1.1 6.8 2 9 3 6.4 6.3 12 6.8 22.3 6l12 2.2c1.2-2.4 1.5-3.4.6-6.3z" fill="none"/><path d="M180.7 18.9L94.8 67.1l.4 215.4 84-70.7 1.5-192.9z" fill="#fff" fill-opacity=".4"/><path d="M180.7 18.9L94.8 67.1l.4 215.4 84-70.7 1.5-192.9z" fill="none"/><path d="M23 232.1l.4.6.5.6.5.6.5.5.5.6.6.5.5.5.6.5.6.5.5.5.6.4.6.5.6.4.6.4 1.3.8 1.4.7 1.3.7 1.3.6 1.4.5 1.4.5 1.4.4 1.4.4 1.4.4 1.4.3 1.4.2 1.4.2 1.4.1 1.5.1 1.3.1h2.8l1.3-.1 1.3-.1 1.3-.1 1.2-.3 1.2-.2 1.1-.3 1.2-.3 1-.4h-.3l-.2-.1H63l-.3-.1-.4-.1-.3-.1-.5-.1-.4-.2-.5-.1-.5-.2-.6-.1-.6-.2-.6-.1-.7-.2-.7-.2-.7-.2-.7-.2-.8-.2-.8-.3-.8-.2-.8-.2-1.7-.5-1.7-.4-1.8-.5-1.8-.5-1.8-.5-3.6-1-1.7-.5-1.8-.5-1.7-.5-.8-.2-.8-.2-.8-.2-.8-.2-.7-.3-.7-.1-.7-.2-.7-.2-.7-.2-.6-.2-.5-.1-.6-.2-.5-.1-.5-.2-.4-.1-.4-.1-.4-.2h-.6l-.2-.2h-.4z" fill-opacity=".2"/><path d="M23 232.1c9.8 13 29.6 15.3 40.7 11.3a3565 3565 0 0 1-40.8-11.3z" fill="none"/><path d="M30.3 245.5l.5.7.6.7.6.7.7.5.6.6.7.6.7.5.8.5.7.4.8.5.8.4.8.3.8.3.8.4.9.2.8.2.9.3.9.1.8.2 1 .1.8.1h4.5l.8-.2.9-.1.8-.2.9-.2.8-.2.8-.3h-.2l-.2-.1h-.2l-.2-.2h-.2l-.3-.1h-.3l-.3-.1-.3-.1-.4-.1-.4-.1-.4-.2H52l-.4-.2-1-.2-.9-.3-1-.3-1-.3-1.1-.2-1.1-.4-2.3-.6-2.3-.6-1-.3-1.2-.3-1-.3-1-.3-1-.3-1-.2-.4-.1-.4-.2h-.4l-.4-.2h-.4l-.3-.2h-.3l-.3-.2h-.3l-.2-.1H31l-.2-.1h-.2l-.1-.1h-.2z" fill-opacity=".2"/><path d="M30.3 245.5c5.7 7.7 16.8 10.1 25.5 7l-25.5-7z" fill="none"/><path d="M15 59l-4.4.5-.8 103 67.4 18.8L79 176l-64.8-17.3L15 59z" fill="#fcfcfc" fill-opacity=".4"/><path d="M15 59l-4.4.5-.8 103 67.4 18.8L79 176l-64.8-17.3L15 59z" fill="none"/><path d="M78.6 97l-.1 3L15 81.7l63.6 15.4zm.9 21l-.1 3L16 102.5 79.5 118zm-.9 19.4l-.1 2.9L15 122l63.6 15.4zm0 19l-.1 3L15 141l63.6 15.4z" fill-opacity=".2"/><path d="M15.2 61.3l63 15.8-.5 104h1l.6-104.4v-.4l-.4-.1-63.5-16-.1.6-.1.5zm63.4 15.9l-.4-.1v-.4h.6l-.2.5z" fill="#9e9e9e"/></g><path d="M1618.4-890.9v126.4h.5c-.3 1-.5 2-.5 3 0 15.3 37 27.6 82.7 27.6s82.6-12.3 82.6-27.6c0-1-.1-2-.5-3h.5v-126.4h-165.3z" fill="url(#b)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path transform="matrix(4.58315 0 0 4.28653 -1157 -2110.6)" d="M303.3 521.8c0 3-7.5 5.5-16.7 5.5s-16.6-2.5-16.6-5.5 7.4-5.6 16.6-5.6 16.7 2.5 16.7 5.6z" fill="url(#c)"/><path d="M80.2 205.2c.6 13 34.7 23.4 76.5 23.4 41.7 0 75.6-10.4 76.4-23.3-13.4 10.6-42.5 18-76.4 18-34 0-63.1-7.4-76.5-18.1z" fill="#3b5d8b"/><path d="M1618.3-891.5c.6 15 37.5 27.2 82.8 27.2 45.2 0 81.9-12 82.7-27l-3 2.2c-9.7 11.7-41.6 20.3-79.7 20.3-38.3 0-70.5-8.7-80-20.5 0 0 0-.2-.2-.2l-2.6-2z" fill="url(#d)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path d="M80.2 167c.6 13 34.7 23.5 76.5 23.5 41.7 0 75.6-10.4 76.4-23.4-13.4 10.7-42.5 18-76.4 18-34 0-63.1-7.4-76.5-18z" fill="#3b5d8b"/><path d="M1618.3-844.4c.6 15 37.5 27.2 82.8 27.2 45.2 0 81.9-12 82.7-27l-.7.5c-5.2 13.5-40 24-82 24-42.5 0-77.5-10.5-82.3-24.3l-.5-.4z" fill="url(#e)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path d="M1618.3-800.2c.6 15 37.5 27.2 82.8 27.2 45.2 0 81.9-12 82.7-27l-.7.5c-5.2 13.5-40 24-82 24-42.5 0-77.5-10.6-82.3-24.3l-.5-.4z" fill="url(#f)" transform="matrix(.92352 0 0 .86375 -1414.3 896.3)"/><path d="M80.7 244.5c4.4 11.9 36.8 21 76 21 38.8 0 71-9 75.7-20.8-13.6 10.4-42.4 17.6-75.7 17.6-33.6 0-62.5-7.3-76-17.8z" fill="#3b5d8b"/></svg>
elFinder/img/volume_icon_trash.png ADDED
Binary file
elFinder/img/volume_icon_trash.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="175" height="200" viewBox="0 0 46 53" version="1"><defs><linearGradient gradientTransform="translate(643 -1191) scale(4.95289)" gradientUnits="userSpaceOnUse" y2="357" x2="482" y1="357" x1="413" id="j" xlink:href="#a"/><linearGradient id="a"><stop offset="0" stop-color="#60a016"/><stop offset="0" stop-color="#98e90d"/><stop offset="0" stop-color="#64a616"/><stop offset="1" stop-color="#99ea0c"/><stop offset="1" stop-color="#61a017"/></linearGradient><radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.9529 0 0 .83705 643 267)" r="34" fy="354" fx="448" cy="354" cx="448" id="k" xlink:href="#b"/><linearGradient id="b"><stop offset="0" stop-color="#aff637"/><stop offset="1" stop-color="#5f9f16"/></linearGradient><linearGradient gradientTransform="translate(-46 -1244) scale(4.95289)" gradientUnits="userSpaceOnUse" y2="336" x2="580" y1="288" x1="580" id="l" xlink:href="#c"/><linearGradient id="c"><stop offset="0" stop-color="#a4bcc3"/><stop offset="1" stop-color="#b9d1da" stop-opacity="0"/></linearGradient><linearGradient gradientTransform="matrix(4.9529 0 0 4.84448 -46 -1201)" gradientUnits="userSpaceOnUse" y2="284" x2="631" y1="284" x1="543" id="m" xlink:href="#d"/><linearGradient id="d"><stop offset="0" stop-color="#9beb0a"/><stop offset="0" stop-color="#90e612"/><stop offset="0" stop-color="#6fbb16"/><stop offset="1" stop-color="#8ee518"/><stop offset="1" stop-color="#89e31f"/></linearGradient><linearGradient gradientTransform="matrix(3.07055 0 0 3.13001 2739 257)" y2="141" x2="86" y1="7" x1="23" gradientUnits="userSpaceOnUse" id="n" xlink:href="#e"/><linearGradient id="e"><stop offset="0" stop-color="#6eb314"/><stop offset="1" stop-color="#97e70d" stop-opacity="0"/></linearGradient><linearGradient gradientTransform="translate(464 39)" gradientUnits="userSpaceOnUse" y2="361" x2="567" y1="275" x1="560" id="o" xlink:href="#f"/><linearGradient id="f"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><filter height="1" y="0" width="1" x="0" id="p" color-interpolation-filters="sRGB"><feGaussianBlur/></filter><linearGradient gradientTransform="translate(471 39)" gradientUnits="userSpaceOnUse" y2="362" x2="608" y1="275" x1="618" id="q" xlink:href="#f"/><filter height="1" y="0" width="1" x="0" id="r" color-interpolation-filters="sRGB"><feGaussianBlur/></filter><linearGradient y2="357" x2="482" y1="357" x1="413" gradientTransform="matrix(6.30935 0 0 6.17125 37 -2027)" gradientUnits="userSpaceOnUse" id="s" xlink:href="#a"/><linearGradient y2="361" x2="567" y1="275" x1="560" gradientTransform="translate(-76 -1276) scale(4.95289)" gradientUnits="userSpaceOnUse" id="t" xlink:href="#f"/><linearGradient y2="835" x2="2087" y1="1161" x1="2121" gradientTransform="matrix(.33568 0 0 .28176 2133 -120)" gradientUnits="userSpaceOnUse" id="u" xlink:href="#g"/><linearGradient id="g"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#89d30e"/></linearGradient><linearGradient y2="362" x2="608" y1="275" x1="618" gradientTransform="translate(-24 -1270) scale(4.95289)" gradientUnits="userSpaceOnUse" id="v" xlink:href="#f"/><linearGradient gradientTransform="matrix(4.9529 0 0 4.84448 -46 -1201)" gradientUnits="userSpaceOnUse" y2="281" x2="629" y1="281" x1="545" id="w" xlink:href="#h"/><linearGradient id="h"><stop offset="0" stop-color="#5f9d16"/><stop offset="0" stop-color="#8fdd0f"/><stop offset="1" stop-color="#65a816"/><stop offset="1" stop-color="#88d40f"/><stop offset="1" stop-color="#5f9d16"/></linearGradient><linearGradient gradientTransform="matrix(1.2687 0 0 1.12163 2134 -136)" gradientUnits="userSpaceOnUse" y2="237" x2="557" y1="374" x1="571" id="x" xlink:href="#i"/><linearGradient id="i"><stop offset="0"/><stop offset="1" stop-opacity="0"/></linearGradient><filter height="1" y="0" width="1" x="0" id="y" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation="3"/></filter></defs><g transform="matrix(.10238 0 0 .10238 -32 8.8)"><path d="M540 339a171 30 0 0 0-172 30 171 30 0 0 0 0 1l4 21v2h1a167 30 0 0 0 167 28 167 30 0 0 0 167-29l4-23a171 30 0 0 0-171-30z" fill="url(#j)"/><ellipse cx="540" cy="369" rx="171" ry="30" fill="#599714"/><ellipse ry="28" rx="166" cy="368" cx="540" fill="url(#k)"/><path d="M746-28H335l38 398c0 2 2 3 4 5l10 5c8 4 21 7 36 9a764 764 0 0 0 271-9l10-5 3-4z" fill="url(#l)"/><path d="M539-72a218 38 0 0 0-218 37 218 38 0 0 0 0 1l5 26a213 38 0 0 0 0 1l1 1a213 38 0 0 0 212 36A213 38 0 0 0 752-6h1l5-29a218 38 0 0 0-219-37z" fill="url(#m)"/><path d="M580 67h-68c14 4 23 15 31 29l21 39-16 10h56l30-49-18 9-12-23c-4-8-15-16-24-15zm-76 2c-5 0-10 2-15 6l-28 44 53 31 28-46c-8-17-23-35-38-35zm136 77l-52 32 25 48c25 1 57-8 51-33zm-162 1h-58l17 13-16 30c-7 14 6 27 14 32 9 4 22 5 34 4l21-35 17 9zm98 65l-28 50 28 50v-20h26c9 1 21-5 25-14l33-61c-11 11-25 13-41 13h-42zm-153 4l35 65c7 9 20 11 34 11h38v-62h-71c-11 1-25-2-36-14z" fill="url(#n)" fill-rule="evenodd"/><path transform="translate(-2366 -1440) scale(4.95289)" d="M553 292l7 71h9l-8-70z" fill="url(#o)" filter="url(#p)"/><path transform="translate(-2366 -1440) scale(4.95289)" d="M622 292l-7 71h-9l7-70z" fill="url(#q)" filter="url(#r)"/><path d="M321-35a218 38 0 0 0 0 1l5 26a213 38 0 0 0 0 1l1 1a213 38 0 0 0 212 36A213 38 0 0 0 752-6h1l4-24A219 37 0 0 1 541 1a219 37 0 0 1-220-36z" fill="url(#s)"/><path d="M363-14l3 28a213 38 0 0 0 44 8l-3-29a219 37 0 0 1-44-7z" fill="url(#t)" filter="url(#p)"/><path d="M321-35a218 38 0 0 0 0 1l1 4c3 5 11 9 22 13 12 3 27 7 43 9a1064 1064 0 0 0 345-7c11-4 19-7 24-11l1-4A219 37 0 0 1 541 1a219 37 0 0 1-220-36z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" font-weight="400" overflow="visible" color="#000" font-family="sans-serif" white-space="normal" fill="url(#u)" enable-background="accumulate"/><path d="M725-16a219 37 0 0 1-44 8l-3 29a213 38 0 0 0 44-9z" fill="url(#v)" filter="url(#r)"/><ellipse cx="541" cy="-37" rx="209" ry="31" fill="url(#w)"/><path d="M321-35a218 38 0 0 0 0 1l1 1a223 37 0 0 0 1 1 219 37 0 0 1-2-3zM751-3a217 38 0 0 1-212 29A217 38 0 0 1 328-3a213 38 0 0 0 211 33A213 38 0 0 0 751-3z" fill="#5f9d16"/><ellipse ry="31" rx="209" cy="-36" cx="542" fill="url(#x)"/><path d="M541-68a209 31 0 0 0-209 31 209 31 0 0 0 0 1 209 31 0 0 1 209-30 209 31 0 0 1 209 30 209 31 0 0 0 0-1 209 31 0 0 0-209-31z" fill="#609f16"/><path d="M721-21a209 31 0 0 1-46 8l6 5a219 37 0 0 0 43-8zm-349 2l-8 5 44 7 9-5c-17-2-33-4-45-7z" fill="#fff"/><g fill="#fff"><path d="M728 0l-4-13-13 3 12-4-2-14 4 13 13-3-13 4z"/><path d="M733-7l-9-6-7 8 7-9-8-7 8 6 7-7-6 8z"/><path d="M730-4l-6-9-9 5 9-6-5-9 5 8 10-4-9 5z"/><path d="M722-3l2-10-10-3 10 2 2-11-1 11 10 2-10-1z"/></g><path d="M720-28l2 9-3-4 3 6-6-4 6 6-8-1v1l7 1-11 4h1l9-2-5 4 6-3-4 5 1 1 5-6-1 8h1l2-8 3 11h1l-3-9 4 5-3-7 6 5v-1l-6-6 8 2v-1l-7-2 10-3v-1l-9 2 5-3v-1l-7 4 5-6h-1l-5 6 1-9h-1l-2 8-3-11z" fill="#fff" filter="url(#y)"/></g></svg>
elFinder/img/volume_icon_zip.png ADDED
Binary file
elFinder/img/volume_icon_zip.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1" width="96" height="96"><defs><linearGradient id="i"><stop offset="0" stop-color="#2f2f2f"/><stop offset=".4" stop-color="#fff"/><stop offset=".6" stop-color="#979797"/><stop offset=".8" stop-color="#505050"/><stop offset="1" stop-color="#e6e6e6"/></linearGradient><linearGradient id="h"><stop offset="0" stop-color="#ededed"/><stop offset="1" stop-color="#b0b0b0"/></linearGradient><linearGradient id="g"><stop offset="0" stop-color="#a2a2a2"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="e"><stop offset="0" stop-color="#b4b4b4"/><stop offset=".2" stop-color="#646464"/><stop offset=".5" stop-color="#fff"/><stop offset="1" stop-color="#3c3c3c"/></linearGradient><linearGradient id="f"><stop offset="0" stop-color="#fff"/><stop offset=".5" stop-color="#8c8c8c"/><stop offset=".5" stop-color="#cfcfcf"/><stop offset=".6" stop-color="#fff"/><stop offset=".8" stop-color="#c8c8c8"/><stop offset="1" stop-color="#505050"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#818181"/><stop offset=".2" stop-color="#f9f9f9"/><stop offset="1" stop-color="#dcdcdc" stop-opacity="0"/></linearGradient><linearGradient id="c"><stop offset="0" stop-color="#dcdcdc"/><stop offset="1" stop-color="#fafafa"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="d"><stop offset="0" stop-color="#b4b4b4"/><stop offset="1" stop-color="#dcdcdc"/></linearGradient><linearGradient x1="19" y1="74" x2="87.5" y2="27.4" id="t" xlink:href="#a" gradientUnits="userSpaceOnUse"/><linearGradient x1="6" y1="73" x2="24" y2="73" id="q" xlink:href="#b" gradientUnits="userSpaceOnUse"/><linearGradient x1="6" y1="73" x2="24" y2="73" id="r" xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 96 0)"/><linearGradient x1="38.7" y1="65.6" x2="38.7" y2="5.8" id="s" xlink:href="#c" gradientUnits="userSpaceOnUse"/><radialGradient cx="90" cy="90" r="42" fx="90" fy="90" id="p" xlink:href="#d" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0 -1.08503 2 0 -90 187.7)"/><clipPath id="v"><path d="M66 6v55a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V6h-4v2h-4V6h-4z" fill="#fff"/></clipPath><filter x="-.2" y="0" width="1.3" height="1.1" color-interpolation-filters="sRGB" id="w"><feGaussianBlur stdDeviation=".9"/></filter><linearGradient x1="68.8" y1="59" x2="75.3" y2="59" id="u" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -1)"/><linearGradient x1="69" y1="54" x2="73" y2="54" id="x" xlink:href="#f" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -1)"/><linearGradient x1="63.5" y1="64.2" x2="79" y2="65" id="M" xlink:href="#g" gradientUnits="userSpaceOnUse"/><filter x="-.2" y="-.1" width="1.3" height="1.2" color-interpolation-filters="sRGB" id="N"><feGaussianBlur stdDeviation=".5"/></filter><linearGradient x1="69" y1="17.5" x2="75.1" y2="17.5" id="P" xlink:href="#h" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 144 -2)"/><linearGradient x1="68" y1="17.8" x2="76" y2="17.8" id="O" xlink:href="#h" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -2)"/><linearGradient x1="68.8" y1="59" x2="72.3" y2="59" id="Q" xlink:href="#e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.12627 0 0 1 -7.4 -49.5)"/><linearGradient x1="69" y1="54" x2="73" y2="54" id="F" xlink:href="#i" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1 0 0 1 144 -4)"/><linearGradient x1="45.4" y1="92.5" x2="45.4" y2="7" id="j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.00587 0 0 .99417 100 0)"><stop offset="0"/><stop offset="1" stop-opacity=".6"/></linearGradient><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="l" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="m" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="n" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="o" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 -97)"/><linearGradient x1="32.3" y1="6.1" x2="32.3" y2="90.2" id="k" xlink:href="#j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0238 0 0 1.0119 -1.1 -98)"/></defs><g transform="scale(1 -1)"><path d="M12-95A10 10 0 0 0 2-85v71A10 10 0 0 0 12-4h72a10 10 0 0 0 10-10v-71a10 10 0 0 0-10-10H12z" opacity=".1" fill="url(#k)"/><path d="M12-94c-5 0-9 4-9 9v71c0 5 4 9 9 9h72c5 0 9-4 9-9v-71c0-5-4-9-9-9H12z" opacity=".1" fill="url(#l)"/><path d="M12-93a8 8 0 0 0-8 8v71a8 8 0 0 0 8 8h72a8 8 0 0 0 8-8v-71a8 8 0 0 0-8-8H12z" opacity=".2" fill="url(#m)"/><rect width="86" height="85" rx="7" ry="7" x="5" y="-92" opacity=".3" fill="url(#n)"/><rect width="84" height="84" rx="6" ry="6" x="6" y="-91" opacity=".5" fill="url(#o)"/></g><path d="M12 6a6 6 0 0 0-6 6v72a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V12a6 6 0 0 0-6-6h-9v3h-6V6H12z" fill="url(#p)"/><path d="M6 56v28a6 6 0 0 0 6 6h12V56H6z" fill="url(#q)"/><path d="M90 56v28a6 6 0 0 1-6 6H72V56h18z" fill="url(#r)"/><path d="M6 82v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".1"/><path d="M6 78v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".8" fill="#fff"/><path d="M6 76v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".1"/><path d="M6 72v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".8" fill="#fff"/><path d="M6 70v2a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6v-2a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6z" opacity=".1"/><path d="M12 6a6 6 0 0 0-6 6v56a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V12a6 6 0 0 0-6-6h-9v3h-6V6H12z" fill="url(#s)"/><path d="M12 6a6 6 0 0 0-6 6v56a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V12a6 6 0 0 0-6-6h-9v2h9a4 4 0 0 1 4 4v56a4 4 0 0 1-4 4H12a4 4 0 0 1-4-4V12a4 4 0 0 1 4-4h57V6H12z" fill="url(#t)"/><path d="M66 6v55a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V6h-4v2h-4V6h-4z" fill="#252525"/><path fill="#4d4d4d" d="M70 8h4v49h-4z"/><rect width="6" height="4" rx="1" ry="1" x="69" y="56" fill="url(#u)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6"/><path d="M66 6v55a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V6h-4v2h-4V6h-4z" clip-path="url(#v)" fill="none" stroke="#000" stroke-width="2" stroke-linecap="square" filter="url(#w)"/><path d="M69.5 51c-.3 0-.5.2-.5.5v3c0 .3.2.5.5.5h1c.3 0 .5-.2.5-.5V54h1.5c.3 0 .5-.2.5-.5v-1c0-.3-.2-.5-.5-.5H71v-.5c0-.3-.2-.5-.5-.5h-1z" id="y" fill="url(#x)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6"/><use transform="translate(0 -6)" id="z" width="96" height="96" xlink:href="#y"/><use transform="translate(0 -6)" id="A" width="96" height="96" xlink:href="#z"/><use transform="translate(0 -6)" id="B" width="96" height="96" xlink:href="#A"/><use transform="translate(0 -6)" id="C" width="96" height="96" xlink:href="#B"/><use transform="translate(0 -6)" id="D" width="96" height="96" xlink:href="#C"/><use transform="translate(0 -6)" id="E" width="96" height="96" xlink:href="#D"/><use transform="translate(0 -6)" width="96" height="96" xlink:href="#E"/><path d="M74.5 48c.3 0 .5.2.5.5v3c0 .3-.2.5-.5.5h-1a.5.5 0 0 1-.5-.5V51h-1.5a.5.5 0 0 1-.5-.5v-1c0-.3.2-.5.5-.5H73v-.5c0-.3.2-.5.5-.5h1z" id="G" fill="url(#F)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6"/><use transform="translate(0 -6)" id="H" width="96" height="96" xlink:href="#G"/><use transform="translate(0 -6)" id="I" width="96" height="96" xlink:href="#H"/><use transform="translate(0 -6)" id="J" width="96" height="96" xlink:href="#I"/><use transform="translate(0 -6)" id="K" width="96" height="96" xlink:href="#J"/><use transform="translate(0 -6)" id="L" width="96" height="96" xlink:href="#K"/><use transform="translate(0 -6)" width="96" height="96" xlink:href="#L"/><path d="M65 6v55a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V6h-1v55a3 3 0 0 1-3 3h-6a3 3 0 0 1-3-3V6h-1z" fill="url(#M)"/><path d="M69.5 10.5c-1 0-2 .8-2 1.8v10.9c0 1 1 1.8 2 1.8h5c1 0 2-.8 2-1.8V12.3c0-1-1-1.8-2-1.8h-5zm1 9h3v1.8h-3v-1.7z" transform="translate(0 -2)" stroke="#000" stroke-width=".5" stroke-linecap="square" stroke-opacity=".6" filter="url(#N)"/><path d="M69.2 9c-.7 0-1.2.5-1.2 1.1v10.8c0 .6.5 1.1 1.2 1.1h5.6c.7 0 1.2-.5 1.2-1V10c0-.6-.5-1-1.2-1h-5.6zm.7 8H74v3h-4v-3z" fill="url(#O)"/><path d="M74.6 10c.2 0 .5.2.5.5v10c0 .3-.3.5-.5.5h-5.1a.5.5 0 0 1-.5-.5v-10c0-.3.2-.5.5-.5h5zm-.5 7H70v3h4.1v-3z" fill="url(#P)"/><rect width="3.4" height="5" rx=".6" ry=".5" x="70.3" y="7.5" fill="url(#Q)" stroke="#000" stroke-linecap="square" stroke-opacity=".6"/><path opacity=".3" d="M70 16h4v1h-4z"/></svg>
elFinder/js/elfinder.full.js CHANGED
@@ -1,12 +1,29 @@
1
  /*!
2
  * elFinder - file manager for web
3
- * Version 2.1.18 (2016-11-21)
4
  * http://elfinder.org
5
  *
6
- * Copyright 2009-2016, Studio 42
7
  * Licensed under a 3-clauses BSD license
8
  */
9
- (function($) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
 
12
  /*
@@ -18,47 +35,59 @@
18
  *
19
  * @author Dmitry (dio) Levashov
20
  **/
21
- window.elFinder = function(node, opts) {
22
- //this.time('load');
23
-
24
  var self = this,
25
 
26
  /**
27
- * Node on which elfinder creating
 
 
 
 
 
 
 
28
  *
29
- * @type jQuery
30
  **/
31
- node = $(node),
32
 
33
  /**
34
- * Store node contents.
35
  *
36
- * @see this.destroy
37
  * @type jQuery
38
  **/
39
- prevContent = $('<div/>').append(node.contents()),
 
 
 
 
 
 
 
40
 
41
  /**
42
- * Store node inline styles
43
  *
44
  * @see this.destroy
45
- * @type String
46
  **/
47
- prevStyle = node.attr('style'),
48
 
49
  /**
50
  * Instance ID. Required to get/set cookie
51
  *
52
  * @type String
53
  **/
54
- id = node.attr('id') || '',
55
 
56
  /**
57
  * Events namespace
58
  *
59
  * @type String
60
  **/
61
- namespace = 'elfinder-' + (id ? id : Math.random().toString().substr(2, 7)),
62
 
63
  /**
64
  * Mousedown event
@@ -81,19 +110,26 @@ window.elFinder = function(node, opts) {
81
  **/
82
  keypress = 'keypress.'+namespace,
83
 
 
 
 
 
 
 
 
84
  /**
85
  * Is shortcuts/commands enabled
86
  *
87
  * @type Boolean
88
  **/
89
- enabled = true,
90
 
91
  /**
92
- * Store enabled value before ajax requiest
93
  *
94
  * @type Boolean
95
  **/
96
- prevEnabled = true,
97
 
98
  /**
99
  * List of build-in events which mapped into methods with same names
@@ -117,11 +153,11 @@ window.elFinder = function(node, opts) {
117
  cwd = '',
118
 
119
  /**
120
- * Current working directory options
121
  *
122
  * @type Object
123
  **/
124
- cwdOptions = {
125
  path : '',
126
  url : '',
127
  tmbUrl : '',
@@ -137,6 +173,13 @@ window.elFinder = function(node, opts) {
137
  tmb : false // old API
138
  },
139
 
 
 
 
 
 
 
 
140
  /**
141
  * Files/dirs cache
142
  *
@@ -144,6 +187,20 @@ window.elFinder = function(node, opts) {
144
  **/
145
  files = {},
146
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  /**
148
  * Selected files hashes
149
  *
@@ -177,9 +234,9 @@ window.elFinder = function(node, opts) {
177
  * Prevent from remove its from cache.
178
  * Required for dispaly correct files names in error messages
179
  *
180
- * @type Array
181
  **/
182
- remember = [],
183
 
184
  /**
185
  * Queue for 'open' requests
@@ -212,19 +269,54 @@ window.elFinder = function(node, opts) {
212
 
213
  /**
214
  * elFinder node height
 
215
  *
216
- * @type Number
217
  * @default 400
218
  **/
219
  height = 400,
220
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  /**
222
  * elfinder path for sound played on remove
223
  * @type String
224
  * @default ./sounds/
225
  **/
226
- soundPath = './sounds/',
227
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  beeper = $(document.createElement('audio')).hide().appendTo('body')[0],
229
 
230
  syncInterval,
@@ -232,29 +324,19 @@ window.elFinder = function(node, opts) {
232
 
233
  uiCmdMapPrev = '',
234
 
 
 
235
  open = function(data) {
236
  // NOTES: Do not touch data object
237
 
238
  var volumeid, contextmenu, emptyDirs = {}, stayDirs = {},
239
- rmClass, hashes, calc, gc, collapsed, prevcwd;
240
 
241
  if (self.api >= 2.1) {
242
- self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {};
243
-
244
  // support volume driver option `uiCmdMap`
 
245
  if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) {
246
  uiCmdMapPrev = JSON.stringify(self.commandMap);
247
- if (Object.keys(self.commandMap).length) {
248
- // for contextmenu
249
- contextmenu = self.getUI('contextmenu');
250
- if (!contextmenu.data('cmdMaps')) {
251
- contextmenu.data('cmdMaps', {});
252
- }
253
- volumeid = data.cwd? data.cwd.volumeid : null;
254
- if (volumeid && !contextmenu.data('cmdMaps')[volumeid]) {
255
- contextmenu.data('cmdMaps')[volumeid] = self.commandMap;
256
- }
257
- }
258
  }
259
  } else {
260
  self.options.sync = 0;
@@ -263,6 +345,7 @@ window.elFinder = function(node, opts) {
263
  if (data.init) {
264
  // init - reset cache
265
  files = {};
 
266
  } else {
267
  // remove only files from prev cwd
268
  // and collapsed directory (included 100+ directories) to empty for perfomance tune in DnD
@@ -270,7 +353,7 @@ window.elFinder = function(node, opts) {
270
  rmClass = 'elfinder-subtree-loaded ' + self.res('class', 'navexpand');
271
  collapsed = self.res('class', 'navcollapse');
272
  hashes = Object.keys(files);
273
- calc = function(n, i) {
274
  if (!files[i]) {
275
  return true;
276
  }
@@ -278,35 +361,45 @@ window.elFinder = function(node, opts) {
278
  var isDir = (files[i].mime === 'directory'),
279
  phash = files[i].phash,
280
  pnav;
281
-
282
  if (
283
  (!isDir
284
  || emptyDirs[phash]
285
  || (!stayDirs[phash]
286
- && $('#'+self.navHash2Id(files[i].hash)).is(':hidden')
287
- && $('#'+self.navHash2Id(phash)).next('.elfinder-navbar-subtree').children().length > 100
288
  )
289
  )
290
  && (isDir || phash !== cwd)
291
- && $.inArray(i, remember) === -1
292
  ) {
293
  if (isDir && !emptyDirs[phash]) {
294
  emptyDirs[phash] = true;
295
- $('#'+self.navHash2Id(phash))
296
  .removeClass(rmClass)
297
  .next('.elfinder-navbar-subtree').empty();
298
  }
299
- delete files[i];
300
  } else if (isDir) {
301
  stayDirs[phash] = true;
302
  }
303
  };
304
  gc = function() {
305
  if (hashes.length) {
306
- $.each(hashes.splice(0, 100), calc);
307
- if (hashes.length) {
308
- setTimeout(gc, 20);
309
- }
 
 
 
 
 
 
 
 
 
 
310
  }
311
  };
312
 
@@ -325,12 +418,20 @@ window.elFinder = function(node, opts) {
325
  });
326
  }
327
 
328
- self.sorters = [];
329
  cwd = data.cwd.hash;
330
  cache(data.files);
331
  if (!files[cwd]) {
332
  cache([data.cwd]);
333
  }
 
 
 
 
 
 
 
 
334
  self.lastDir(cwd);
335
 
336
  self.autoSync();
@@ -340,50 +441,229 @@ window.elFinder = function(node, opts) {
340
  * Store info about files/dirs in "files" object.
341
  *
342
  * @param Array files
 
343
  * @return void
344
  **/
345
- cache = function(data) {
346
  var defsorter = { name: true, perm: true, date: true, size: true, kind: true },
347
- sorterChk = (self.sorters.length === 0),
348
  l = data.length,
349
- f, i;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
350
 
351
  for (i = 0; i < l; i++) {
352
- f = data[i];
 
353
  if (f.name && f.hash && f.mime) {
354
- if (sorterChk && f.phash === cwd) {
355
- $.each(self.sortRules, function(key) {
356
- if (defsorter[key] || typeof f[key] !== 'undefined' || (key === 'mode' && typeof f.perm !== 'undefined')) {
357
- self.sorters.push(key);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  }
359
  });
360
- sorterChk = false;
 
 
 
361
  }
362
-
363
- // make or update of leaf roots cache
364
- if (f.isroot && f.phash) {
365
- if (! self.leafRoots[f.phash]) {
366
- self.leafRoots[f.phash] = [ f.hash ];
367
- } else {
368
- if ($.inArray(f.hash, self.leafRoots[f.phash]) === -1) {
369
- self.leafRoots[f.phash].push(f.hash);
 
 
 
 
 
 
370
  }
 
371
  }
372
- if (files[f.phash]) {
373
- if (! files[f.phash].dirs) {
374
- files[f.phash].dirs = 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
375
  }
376
- if (f.ts && (files[f.phash].ts || 0) < f.ts) {
377
- files[f.phash].ts = f.ts;
 
 
 
 
378
  }
379
  }
 
380
  }
381
-
382
- files[f.hash] = f;
383
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
384
  }
 
385
  },
386
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
387
  /**
388
  * Exec shortcut
389
  *
@@ -393,8 +673,21 @@ window.elFinder = function(node, opts) {
393
  execShortcut = function(e) {
394
  var code = e.keyCode,
395
  ctrlKey = !!(e.ctrlKey || e.metaKey),
 
396
  ddm;
397
 
 
 
 
 
 
 
 
 
 
 
 
 
398
  if (enabled) {
399
 
400
  $.each(shortcuts, function(i, shortcut) {
@@ -427,7 +720,9 @@ window.elFinder = function(node, opts) {
427
  ddm && ddm.helper && ddm.cancel();
428
  }
429
  // button menus
430
- node.find('.ui-widget.elfinder-button-menu').hide();
 
 
431
  }
432
 
433
  }
@@ -452,9 +747,49 @@ window.elFinder = function(node, opts) {
452
  } catch(e) {}
453
  }
454
  return pifm;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
  })();
456
- ;
457
-
458
 
459
  /**
460
  * Protocol version
@@ -485,114 +820,49 @@ window.elFinder = function(node, opts) {
485
  this.netDrivers = [];
486
 
487
  /**
488
- * Configuration options
489
- *
490
- * @type Object
491
- **/
492
- this.options = $.extend(true, {}, this._options, opts||{});
493
 
494
  /**
495
- * Volume option to set the properties of the root Stat
 
496
  *
497
- * @type Array
498
  */
499
- this.optionProperties = ['icon', 'csscls', 'tmbUrl', 'uiCmdMap', 'netkey'];
500
-
501
- if (opts.ui) {
502
- this.options.ui = opts.ui;
503
- }
504
-
505
- if (opts.commands) {
506
- this.options.commands = opts.commands;
507
- }
508
-
509
- if (opts.uiOptions && opts.uiOptions.toolbar) {
510
- this.options.uiOptions.toolbar = opts.uiOptions.toolbar;
511
- }
512
-
513
- if (opts.uiOptions && opts.uiOptions.cwd && opts.uiOptions.cwd.listView && opts.uiOptions.cwd.listView.columns) {
514
- this.options.uiOptions.cwd.listView.columns = opts.uiOptions.cwd.listView.columns;
515
- }
516
- if (opts.uiOptions && opts.uiOptions.cwd && opts.uiOptions.cwd.listView && opts.uiOptions.cwd.listView.columnsCustomName) {
517
- this.options.uiOptions.cwd.listView.columnsCustomName = opts.uiOptions.cwd.listView.columnsCustomName;
518
- }
519
 
520
- if (! inFrame && ! this.options.enableAlways && $('body').children().length === 2) { // only node and beeper
521
- this.options.enableAlways = true;
522
- }
523
-
524
  /**
525
- * Is elFinder over CORS
526
- *
527
  * @type Boolean
528
- **/
529
- this.isCORS = false;
530
 
531
- // configure for CORS
532
- (function(){
533
- var parseUrl = document.createElement('a'),
534
- parseUploadUrl;
535
- parseUrl.href = opts.url;
536
- if (opts.urlUpload && (opts.urlUpload !== opts.url)) {
537
- parseUploadUrl = document.createElement('a');
538
- parseUploadUrl.href = opts.urlUpload;
539
- }
540
- if (window.location.host !== parseUrl.host || (parseUploadUrl && (window.location.host !== parseUploadUrl.host))) {
541
- self.isCORS = true;
542
- if (!$.isPlainObject(self.options.customHeaders)) {
543
- self.options.customHeaders = {};
544
- }
545
- if (!$.isPlainObject(self.options.xhrFields)) {
546
- self.options.xhrFields = {};
547
- }
548
- self.options.requestType = 'post';
549
- self.options.customHeaders['X-Requested-With'] = 'XMLHttpRequest';
550
- self.options.xhrFields['withCredentials'] = true;
551
- }
552
- })();
553
 
554
- $.extend(this.options.contextmenu, opts.contextmenu);
555
-
556
  /**
557
- * Ajax request type
558
- *
559
- * @type String
560
- * @default "get"
561
- **/
562
- this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get';
563
-
564
- /**
565
- * Any data to send across every ajax request
566
- *
567
- * @type Object
568
- * @default {}
569
- **/
570
- this.customData = $.isPlainObject(this.options.customData) ? this.options.customData : {};
571
-
572
- /**
573
- * Any custom headers to send across every ajax request
574
- *
575
- * @type Object
576
- * @default {}
577
- */
578
- this.customHeaders = $.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {};
579
-
580
- /**
581
- * Any custom xhrFields to send across every ajax request
582
- *
583
- * @type Object
584
- * @default {}
585
  */
586
- this.xhrFields = $.isPlainObject(this.options.xhrFields) ? this.options.xhrFields : {};
587
 
588
  /**
589
- * command names for into queue for only cwd requests
590
- * these commands aborts before `open` request
591
- *
592
- * @type Array
593
- * @default ['tmb']
594
  */
595
- this.abortCmdsOnOpen = this.options.abortCmdsOnOpen || ['tmb'];
596
 
597
  /**
598
  * ID. Required to create unique cookie name
@@ -600,136 +870,6 @@ window.elFinder = function(node, opts) {
600
  * @type String
601
  **/
602
  this.id = id;
603
-
604
- /**
605
- * ui.nav id prefix
606
- *
607
- * @type String
608
- */
609
- this.navPrefix = 'nav' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-';
610
-
611
- /**
612
- * ui.cwd id prefix
613
- *
614
- * @type String
615
- */
616
- this.cwdPrefix = elFinder.prototype.uniqueid? ('cwd' + elFinder.prototype.uniqueid + '-') : '';
617
-
618
- // Increment elFinder.prototype.uniqueid
619
- ++elFinder.prototype.uniqueid;
620
-
621
- /**
622
- * URL to upload files
623
- *
624
- * @type String
625
- **/
626
- this.uploadURL = opts.urlUpload || opts.url;
627
-
628
- /**
629
- * Events namespace
630
- *
631
- * @type String
632
- **/
633
- this.namespace = namespace;
634
-
635
- /**
636
- * Interface language
637
- *
638
- * @type String
639
- * @default "en"
640
- **/
641
- this.lang = this.i18[this.options.lang] && this.i18[this.options.lang].messages ? this.options.lang : 'en';
642
-
643
- i18n = this.lang == 'en'
644
- ? this.i18['en']
645
- : $.extend(true, {}, this.i18['en'], this.i18[this.lang]);
646
-
647
- /**
648
- * Interface direction
649
- *
650
- * @type String
651
- * @default "ltr"
652
- **/
653
- this.direction = i18n.direction;
654
-
655
- /**
656
- * i18 messages
657
- *
658
- * @type Object
659
- **/
660
- this.messages = i18n.messages;
661
-
662
- /**
663
- * Date/time format
664
- *
665
- * @type String
666
- * @default "m.d.Y"
667
- **/
668
- this.dateFormat = this.options.dateFormat || i18n.dateFormat;
669
-
670
- /**
671
- * Date format like "Yesterday 10:20:12"
672
- *
673
- * @type String
674
- * @default "{day} {time}"
675
- **/
676
- this.fancyFormat = this.options.fancyDateFormat || i18n.fancyDateFormat;
677
-
678
- /**
679
- * Today timestamp
680
- *
681
- * @type Number
682
- **/
683
- this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000;
684
-
685
- /**
686
- * Yesterday timestamp
687
- *
688
- * @type Number
689
- **/
690
- this.yesterday = this.today - 86400;
691
-
692
- utc = this.options.UTCDate ? 'UTC' : '';
693
-
694
- this.getHours = 'get'+utc+'Hours';
695
- this.getMinutes = 'get'+utc+'Minutes';
696
- this.getSeconds = 'get'+utc+'Seconds';
697
- this.getDate = 'get'+utc+'Date';
698
- this.getDay = 'get'+utc+'Day';
699
- this.getMonth = 'get'+utc+'Month';
700
- this.getFullYear = 'get'+utc+'FullYear';
701
-
702
- /**
703
- * Css classes
704
- *
705
- * @type String
706
- **/
707
- this.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-'
708
- +(this.direction == 'rtl' ? 'rtl' : 'ltr')
709
- +(this.UA.Touch? (' elfinder-touch' + (this.options.resizable ? ' touch-punch' : '')) : '')
710
- +(this.UA.Mobile? ' elfinder-mobile' : '')
711
- +' '+this.options.cssClass;
712
-
713
- /**
714
- * elFinder node z-index (auto detect on elFinder load)
715
- *
716
- * @type null | Number
717
- **/
718
- this.zIndex;
719
-
720
- /**
721
- * Current search status
722
- *
723
- * @type Object
724
- */
725
- this.searchStatus = {
726
- state : 0, // 0: search ended, 1: search started, 2: in search result
727
- query : '',
728
- target : '',
729
- mime : '',
730
- mixed : false, // in multi volumes search
731
- ininc : false // in incremental search
732
- };
733
 
734
  /**
735
  * Method to store/fetch data
@@ -738,7 +878,7 @@ window.elFinder = function(node, opts) {
738
  **/
739
  this.storage = (function() {
740
  try {
741
- if ('localStorage' in window && window['localStorage'] !== null) {
742
  if (self.UA.Safari) {
743
  // check for Mac/iOS safari private browsing mode
744
  window.localStorage.setItem('elfstoragecheck', 1);
@@ -753,5736 +893,9076 @@ window.elFinder = function(node, opts) {
753
  }
754
  })();
755
 
756
- this.viewType = this.storage('view') || this.options.defaultView || 'icons';
757
-
758
- this.sortType = this.storage('sortType') || this.options.sortType || 'name';
759
-
760
- this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc';
761
-
762
- this.sortStickFolders = this.storage('sortStickFolders');
763
- if (this.sortStickFolders === null) {
764
- this.sortStickFolders = !!this.options.sortStickFolders;
765
- } else {
766
- this.sortStickFolders = !!this.sortStickFolders
767
- }
768
-
769
- this.sortAlsoTreeview = this.storage('sortAlsoTreeview');
770
- if (this.sortAlsoTreeview === null) {
771
- this.sortAlsoTreeview = !!this.options.sortAlsoTreeview;
772
- } else {
773
- this.sortAlsoTreeview = !!this.sortAlsoTreeview
774
- }
775
-
776
- this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortRules);
777
-
778
- $.each(this.sortRules, function(name, method) {
779
- if (typeof method != 'function') {
780
- delete self.sortRules[name];
781
- }
782
- });
783
-
784
- this.compare = $.proxy(this.compare, this);
785
-
786
  /**
787
- * Delay in ms before open notification dialog
788
  *
789
- * @type Number
790
- * @default 500
791
- **/
792
- this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500;
793
-
 
 
 
 
 
 
 
 
 
 
 
 
794
  /**
795
- * Dragging UI Helper object
796
  *
797
- * @type jQuery | null
798
  **/
799
- this.draggingUiHelper = null;
 
 
 
 
 
 
 
 
 
 
800
 
801
- // draggable closure
802
  (function() {
803
- var ltr, wzRect, wzBottom, nodeStyle,
804
- keyEvt = keydown + 'draggable' + ' keyup.' + namespace + 'draggable';
805
-
806
- /**
807
- * Base draggable options
808
- *
809
- * @type Object
810
- **/
811
- self.draggable = {
812
- appendTo : node,
813
- addClasses : false,
814
- distance : 4,
815
- revert : true,
816
- refreshPositions : false,
817
- cursor : 'crosshair',
818
- cursorAt : {left : 50, top : 47},
819
- scroll : false,
820
- start : function(e, ui) {
821
- var helper = ui.helper,
822
- targets = $.map(helper.data('files')||[], function(h) { return h || null ;}),
823
- locked = false,
824
- cnt, h;
825
-
826
- // fix node size
827
- nodeStyle = node.attr('style');
828
- node.width(node.width()).height(node.height());
829
-
830
- // set var for drag()
831
- ltr = (self.direction === 'ltr');
832
- wzRect = self.getUI('workzone').data('rectangle');
833
- wzBottom = wzRect.top + wzRect.height;
834
-
835
- self.draggingUiHelper = helper;
836
- cnt = targets.length;
837
- while (cnt--) {
838
- h = targets[cnt];
839
- if (files[h].locked) {
840
- locked = true;
841
- helper.data('locked', true);
842
- break;
843
- }
844
- }
845
- !locked && self.trigger('lockfiles', {files : targets});
846
-
847
- helper.data('autoScrTm', setInterval(function() {
848
- if (helper.data('autoScr')) {
849
- self.autoScroll[helper.data('autoScr')](helper.data('autoScrVal'));
850
- }
851
- }, 50));
852
- },
853
- drag : function(e, ui) {
854
- var helper = ui.helper,
855
- autoUp;
856
-
857
- if ((autoUp = wzRect.top > e.pageY) || wzBottom < e.pageY) {
858
- if (wzRect.cwdEdge > e.pageX) {
859
- helper.data('autoScr', (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'));
860
- } else {
861
- helper.data('autoScr', (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'));
862
- }
863
- helper.data('autoScrVal', Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom), 1.3));
864
- } else {
865
- if (helper.data('autoScr')) {
866
- helper.data('refreshPositions', 1).data('autoScr', null);
867
- }
868
- }
869
- if (helper.data('refreshPositions') && $(this).elfUiWidgetInstance('draggable')) {
870
- if (helper.data('refreshPositions') > 0) {
871
- $(this).draggable('option', { refreshPositions : true, elfRefresh : true });
872
- helper.data('refreshPositions', -1);
873
- } else {
874
- $(this).draggable('option', { refreshPositions : false, elfRefresh : false });
875
- helper.data('refreshPositions', null);
876
- }
877
- }
878
- },
879
- stop : function(e, ui) {
880
- var helper = ui.helper,
881
- files;
882
-
883
- $(document).off(keyEvt);
884
- $(this).elfUiWidgetInstance('draggable') && $(this).draggable('option', { refreshPositions : false });
885
- self.draggingUiHelper = null;
886
- self.trigger('focus').trigger('dragstop');
887
- if (! helper.data('droped')) {
888
- files = $.map(helper.data('files')||[], function(h) { return h || null ;});
889
- self.trigger('unlockfiles', {files : files});
890
- self.trigger('selectfiles', {files : files});
891
- }
892
- self.enable();
893
-
894
- // restore node style
895
- node.attr('style', nodeStyle);
896
-
897
- helper.data('autoScrTm') && clearInterval(helper.data('autoScrTm'));
898
- },
899
- helper : function(e, ui) {
900
- var element = this.id ? $(this) : $(this).parents('[id]:first'),
901
- helper = $('<div class="elfinder-drag-helper"><span class="elfinder-drag-helper-icon-status"/></div>'),
902
- icon = function(f) {
903
- var mime = f.mime, i, tmb = self.tmb(f);
904
- i = '<div class="elfinder-cwd-icon '+self.mime2class(mime)+' ui-corner-all"/>';
905
- if (tmb) {
906
- i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML;
907
- }
908
- return i;
909
- },
910
- hashes, l, ctr;
911
-
912
- self.draggingUiHelper && self.draggingUiHelper.stop(true, true);
913
-
914
- self.trigger('dragstart', {target : element[0], originalEvent : e});
915
-
916
- hashes = element.hasClass(self.res('class', 'cwdfile'))
917
- ? self.selected()
918
- : [self.navId2Hash(element.attr('id'))];
919
-
920
- helper.append(icon(files[hashes[0]])).data('files', hashes).data('locked', false).data('droped', false).data('namespace', namespace).data('dropover', 0);
921
-
922
- if ((l = hashes.length) > 1) {
923
- helper.append(icon(files[hashes[l-1]]) + '<span class="elfinder-drag-num">'+l+'</span>');
924
- }
925
-
926
- $(document).on(keyEvt, function(e){
927
- var chk = (e.shiftKey||e.ctrlKey||e.metaKey);
928
- if (ctr !== chk) {
929
- ctr = chk;
930
- if (helper.is(':visible') && helper.data('dropover') && ! helper.data('droped')) {
931
- helper.toggleClass('elfinder-drag-helper-plus', helper.data('locked')? true : ctr);
932
- self.trigger(ctr? 'unlockfiles' : 'lockfiles', {files : hashes, helper: helper});
933
  }
 
 
 
934
  }
935
  });
936
-
937
- return helper;
938
  }
939
  };
 
940
  })();
941
 
 
 
 
 
942
  /**
943
- * Base droppable options
944
- *
945
  * @type Object
946
- **/
947
- this.droppable = {
948
- greedy : true,
949
- tolerance : 'pointer',
950
- accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename',
951
- hoverClass : this.res('class', 'adroppable'),
952
- classes : { // Deprecated hoverClass jQueryUI>=1.12.0
953
- 'ui-droppable-hover': this.res('class', 'adroppable')
954
- },
955
- autoDisable: true, // elFinder original, see jquery.elfinder.js
956
- drop : function(e, ui) {
957
- var dst = $(this),
958
- targets = $.map(ui.helper.data('files')||[], function(h) { return h || null }),
959
- result = [],
960
- dups = [],
961
- faults = [],
962
- isCopy = ui.helper.hasClass('elfinder-drag-helper-plus'),
963
- c = 'class',
964
- cnt, hash, i, h;
965
-
966
- if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) {
967
- return false;
968
- }
969
- if (dst.hasClass(self.res(c, 'cwdfile'))) {
970
- hash = self.cwdId2Hash(dst.attr('id'));
971
- } else if (dst.hasClass(self.res(c, 'navdir'))) {
972
- hash = self.navId2Hash(dst.attr('id'));
973
- } else {
974
- hash = cwd;
975
- }
976
-
977
- cnt = targets.length;
978
 
979
- while (cnt--) {
980
- h = targets[cnt];
981
- // ignore drop into itself or in own location
982
- if (h != hash && files[h].phash != hash) {
983
- result.push(h);
984
- } else {
985
- ((isCopy && h !== hash && files[hash].write)? dups : faults).push(h);
986
  }
987
- }
988
-
989
- if (faults.length) {
990
- return false;
991
- }
992
-
993
- ui.helper.data('droped', true);
994
-
995
- if (dups.length) {
996
- ui.helper.hide();
997
- self.exec('duplicate', dups);
998
- }
999
-
1000
- if (result.length) {
1001
- ui.helper.hide();
1002
- self.clipboard(result, !isCopy);
1003
- self.exec('paste', hash, void 0, hash).always(function(){
1004
- self.clipboard([]);
1005
- self.trigger('unlockfiles', {files : targets});
1006
- });
1007
- self.trigger('drop', {files : targets});
1008
  }
1009
  }
 
1010
  };
1011
 
1012
  /**
1013
- * Return true if filemanager is active
 
1014
  *
1015
- * @return Boolean
1016
- **/
1017
- this.enabled = function() {
1018
- return enabled && this.visible();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1019
  };
1020
 
1021
  /**
1022
- * Return true if filemanager is visible
 
1023
  *
1024
- * @return Boolean
1025
- **/
1026
- this.visible = function() {
1027
- return node[0].elfinder && node.is(':visible');
1028
- };
1029
-
1030
- /**
1031
- * Return file is root?
1032
- *
1033
- * @param Object target file object
1034
- * @return Boolean
1035
  */
1036
- this.isRoot = function(file) {
1037
- return (file.isroot || ! file.phash)? true : false;
1038
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1039
 
1040
  /**
1041
- * Return root dir hash for current working directory
1042
- *
1043
- * @param String target hash
1044
- * @param Boolean include fake parent (optional)
1045
- * @return String
1046
  */
1047
- this.root = function(hash, fake) {
1048
- hash = hash || cwd;
1049
- var dir, i;
 
 
 
 
1050
 
1051
- if (! fake) {
1052
- $.each(self.roots, function(id, rhash) {
1053
- if (hash.indexOf(id) === 0) {
1054
- dir = rhash;
 
 
 
 
 
1055
  return false;
1056
  }
1057
  });
1058
- if (dir) {
1059
- return dir;
 
 
 
 
 
 
 
 
 
 
 
1060
  }
1061
- }
1062
-
1063
- dir = files[hash];
1064
- while (dir && dir.phash && (fake || ! dir.isroot)) {
1065
- dir = files[dir.phash]
1066
- }
1067
- if (dir) {
1068
- return dir.hash;
1069
- }
1070
-
1071
- while (i in files && files.hasOwnProperty(i)) {
1072
- dir = files[i]
1073
- if (!dir.phash && !dir.mime == 'directory' && dir.read) {
1074
- return dir.hash;
1075
  }
 
1076
  }
1077
-
1078
- return '';
1079
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1080
 
1081
  /**
1082
- * Return current working directory info
1083
  *
1084
- * @return Object
1085
  */
1086
- this.cwd = function() {
1087
- return files[cwd] || {};
 
 
 
 
 
1088
  };
1089
 
1090
- /**
1091
- * Return required cwd option
1092
- *
1093
- * @param String option name
1094
- * @param String target hash (optional)
1095
- * @return mixed
1096
- */
1097
- this.option = function(name, target) {
1098
- if (target && cwd !== target) {
1099
- var res = '';
1100
- $.each(self.volOptions, function(id, opt) {
1101
- if (target.indexOf(id) === 0) {
1102
- res = opt[name] || '';
1103
- return false;
1104
- }
1105
  });
1106
- return res;
1107
- } else {
1108
- return cwdOptions[name] || '';
1109
- }
1110
- };
1111
 
1112
  /**
1113
- * Return file data from current dir or tree by it's hash
1114
  *
1115
- * @param String file hash
1116
- * @return Object
1117
  */
1118
- this.file = function(hash) {
1119
- return hash? files[hash] : void(0);
1120
- };
1121
 
1122
  /**
1123
- * Return all cached files
1124
  *
1125
- * @return Array
1126
  */
1127
- this.files = function() {
1128
- return $.extend(true, {}, files);
 
 
 
 
1129
  };
 
 
1130
 
1131
  /**
1132
- * Return list of file parents hashes include file hash
1133
- *
1134
- * @param String file hash
1135
- * @return Array
1136
- */
1137
- this.parents = function(hash) {
1138
- var parents = [],
1139
- dir;
1140
-
1141
- while ((dir = this.file(hash))) {
1142
- parents.unshift(dir.hash);
1143
- hash = dir.phash;
1144
- }
1145
- return parents;
1146
- };
1147
-
1148
- this.path2array = function(hash, i18) {
1149
- var file,
1150
- path = [];
1151
-
1152
- while (hash) {
1153
- if ((file = files[hash]) && file.hash) {
1154
- path.unshift(i18 && file.i18 ? file.i18 : file.name);
1155
- hash = file.isroot? null : file.phash;
1156
- } else {
1157
- path = [];
1158
- break;
1159
- }
1160
- }
1161
-
1162
- return path;
1163
- };
1164
 
1165
- /**
1166
- * Return file path or Get path async with jQuery.Deferred
1167
- *
1168
- * @param Object file
1169
- * @param Boolean i18
1170
- * @param Object asyncOpt
1171
- * @return String|jQuery.Deferred
1172
- */
1173
- this.path = function(hash, i18, asyncOpt) {
1174
- var path = files[hash] && files[hash].path
1175
- ? files[hash].path
1176
- : this.path2array(hash, i18).join(cwdOptions.separator);
1177
- if (! asyncOpt || ! files[hash]) {
1178
- return path;
1179
  } else {
1180
- asyncOpt = $.extend({notify: {type : 'parents', cnt : 1, hideCnt : true}}, asyncOpt);
1181
-
1182
- var dfd = $.Deferred(),
1183
- notify = asyncOpt.notify,
1184
- noreq = false,
1185
- req = function() {
1186
- self.request({
1187
- data : {cmd : 'parents', target : files[hash].phash},
1188
- notify : notify,
1189
- preventFail : true
1190
- })
1191
- .done(done)
1192
- .fail(function() {
1193
- dfd.reject();
1194
- });
1195
- },
1196
- done = function() {
1197
- self.one('parentsdone', function() {
1198
- path = self.path(hash, i18);
1199
- if (path === '' && noreq) {
1200
- //retry with request
1201
- noreq = false;
1202
- req();
1203
- } else {
1204
- if (notify) {
1205
- clearTimeout(ntftm);
1206
- notify.cnt = -(parseInt(notify.cnt || 0));
1207
- self.notify(notify);
1208
- }
1209
- dfd.resolve(path);
1210
- }
1211
- });
1212
  },
1213
- ntftm;
1214
-
1215
- if (path) {
1216
- return dfd.resolve(path);
1217
- } else {
1218
- if (self.ui['tree']) {
1219
- // try as no request
1220
- if (notify) {
1221
- ntftm = setTimeout(function() {
1222
- self.notify(notify);
1223
- }, self.notifyDelay);
1224
- }
1225
- noreq = true;
1226
- done(true);
1227
- } else {
1228
- req();
1229
- }
1230
- return dfd;
1231
  }
1232
  }
1233
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1234
 
1235
  /**
1236
- * Return file url if set
1237
  *
1238
- * @param String file hash
1239
- * @return String
1240
  */
1241
- this.url = function(hash) {
1242
- var file = files[hash],
1243
- baseUrl;
1244
-
1245
- if (!file || !file.read) {
1246
- return '';
1247
- }
1248
-
1249
- if (file.url == '1') {
1250
- this.request({
1251
- data : {cmd : 'url', target : hash},
1252
- preventFail : true,
1253
- options: {async: false}
1254
- })
1255
- .done(function(data) {
1256
- file.url = data.url || '';
1257
- })
1258
- .fail(function() {
1259
- file.url = '';
1260
- });
1261
- }
1262
-
1263
- if (file.url) {
1264
- return file.url;
1265
- }
1266
-
1267
- baseUrl = (file.hash.indexOf(self.cwd().volumeid) === 0)? cwdOptions.url : this.option('url', file.hash);
1268
-
1269
- if (baseUrl) {
1270
- return baseUrl + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/')
1271
- }
1272
 
1273
- var params = $.extend({}, this.customData, {
1274
- cmd: 'file',
1275
- target: file.hash
1276
- });
1277
- if (this.oldAPI) {
1278
- params.cmd = 'open';
1279
- params.current = file.phash;
1280
- }
1281
- return this.options.url + (this.options.url.indexOf('?') === -1 ? '?' : '&') + $.param(params, true);
1282
- };
1283
-
1284
  /**
1285
- * Convert from relative URL to abstract URL based on current URL
 
 
 
 
 
 
 
 
1286
  *
1287
- * @param String URL
1288
- * @return String
1289
  */
1290
- this.convAbsUrl = function(url) {
1291
- if (url.match(/^http/i)) {
1292
- return url;
1293
- }
1294
- if (url.substr(0,2) === '//') {
1295
- return window.location.protocol + url;
1296
- }
1297
- var root = window.location.protocol + '//' + window.location.host,
1298
- reg = /[^\/]+\/\.\.\//,
1299
- ret;
1300
- if (url.substr(0, 1) === '/') {
1301
- ret = root + url;
1302
- } else {
1303
- ret = root + window.location.pathname.replace(/\/[^\/]+$/, '/') + url;
1304
- }
1305
- ret = ret.replace('/./', '/');
1306
- while(reg.test(ret)) {
1307
- ret = ret.replace(reg, '');
1308
- }
1309
- return ret;
1310
- };
1311
-
1312
  /**
1313
- * Return file url for open in elFinder
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1314
  *
1315
- * @param String file hash
1316
- * @param Boolean for download link
1317
- * @return String
1318
  */
1319
- this.openUrl = function(hash, download) {
1320
- var file = files[hash],
1321
- url = '';
1322
-
1323
- if (!file || !file.read) {
1324
- return '';
1325
  }
1326
-
1327
- if (!download) {
1328
- if (file.url) {
1329
- if (file.url != 1) {
1330
- return file.url;
1331
- }
1332
- } else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) {
1333
- return cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/');
1334
  }
1335
- }
1336
-
1337
- url = this.options.url;
1338
- url = url + (url.indexOf('?') === -1 ? '?' : '&')
1339
- + (this.oldAPI ? 'cmd=open&current='+file.phash : 'cmd=file')
1340
- + '&target=' + file.hash;
1341
-
1342
- if (download) {
1343
- url += '&download=1';
1344
- }
1345
-
1346
- $.each(this.options.customData, function(key, val) {
1347
- url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val);
1348
- });
1349
-
1350
- return url;
1351
  };
1352
 
1353
  /**
1354
- * Return thumbnail url
1355
  *
1356
- * @param Object file object
1357
- * @return String
1358
  */
1359
- this.tmb = function(file) {
1360
- var tmbUrl, tmbCrop,
1361
- cls = 'elfinder-cwd-bgurl',
1362
- url = '';
1363
-
1364
- if ($.isPlainObject(file)) {
1365
- if (self.searchStatus.state && file.hash.indexOf(self.cwd().volumeid) !== 0) {
1366
- tmbUrl = self.option('tmbUrl', file.hash);
1367
- tmbCrop = self.option('tmbCrop', file.hash);
1368
- } else {
1369
- tmbUrl = cwdOptions['tmbUrl'];
1370
- tmbCrop = cwdOptions['tmbCrop'];
1371
- }
1372
- if (tmbCrop) {
1373
- cls += ' elfinder-cwd-bgurl-crop';
1374
- }
1375
- if (tmbUrl === 'self' && file.mime.indexOf('image/') === 0) {
1376
- url = self.openUrl(file.hash);
1377
- cls += ' elfinder-cwd-bgself';
1378
- } else if ((self.oldAPI || tmbUrl) && file && file.tmb && file.tmb != 1) {
1379
- url = tmbUrl + file.tmb;
1380
- }
1381
- if (url) {
1382
- return { url: url, className: cls };
1383
- }
1384
- }
1385
-
1386
- return false;
1387
  };
1388
-
1389
  /**
1390
- * Return selected files hashes
 
1391
  *
1392
- * @return Array
1393
- **/
1394
- this.selected = function() {
1395
- return selected.slice(0);
1396
- };
 
 
 
 
 
 
1397
 
1398
  /**
1399
- * Return selected files info
1400
  *
1401
- * @return Array
1402
  */
1403
- this.selectedFiles = function() {
1404
- return $.map(selected, function(hash) { return files[hash] ? $.extend({}, files[hash]) : null });
1405
- };
 
1406
 
1407
  /**
1408
- * Return true if file with required name existsin required folder
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1409
  *
1410
- * @param String file name
1411
- * @param String parent folder hash
1412
- * @return Boolean
1413
  */
1414
- this.fileByName = function(name, phash) {
1415
- var hash;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1416
 
1417
- for (hash in files) {
1418
- if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) {
1419
- return files[hash];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1420
  }
1421
  }
1422
  };
1423
 
1424
  /**
1425
- * Valid data for required command based on rules
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1426
  *
1427
- * @param String command name
1428
- * @param Object cammand's data
1429
  * @return Boolean
1430
  */
1431
- this.validResponse = function(cmd, data) {
1432
- return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data);
1433
  };
1434
 
1435
  /**
1436
- * Return bytes from ini formated size
1437
  *
1438
- * @param String ini formated size
1439
- * @return Integer
 
1440
  */
1441
- this.returnBytes = function(val) {
1442
- var last;
1443
- if (isNaN(val)) {
1444
- if (! val) {
1445
- val = '';
 
 
 
 
 
 
 
 
1446
  }
1447
- // for ex. 1mb, 1KB
1448
- val = val.replace(/b$/i, '');
1449
- last = val.charAt(val.length - 1).toLowerCase();
1450
- val = val.replace(/[tgmk]$/i, '');
1451
- if (last == 't') {
1452
- val = val * 1024 * 1024 * 1024 * 1024;
1453
- } else if (last == 'g') {
1454
- val = val * 1024 * 1024 * 1024;
1455
- } else if (last == 'm') {
1456
- val = val * 1024 * 1024;
1457
- } else if (last == 'k') {
1458
- val = val * 1024;
1459
- }
1460
- val = isNaN(val)? 0 : parseInt(val);
1461
- } else {
1462
- val = parseInt(val);
1463
- if (val < 1) val = 0;
1464
- }
1465
- return val;
1466
- };
1467
-
1468
- /**
1469
- * Proccess ajax request.
1470
- * Fired events :
1471
- * @todo
1472
- * @example
1473
- * @todo
1474
- * @return $.Deferred
1475
- */
1476
- this.request = function(opts) {
1477
- var self = this,
1478
- o = this.options,
1479
- dfrd = $.Deferred(),
1480
- // request data
1481
- data = $.extend({}, o.customData, {mimes : o.onlyMimes}, opts.data || opts),
1482
- // command name
1483
- cmd = data.cmd,
1484
- isOpen = (cmd === 'open'),
1485
- // call default fail callback (display error dialog) ?
1486
- deffail = !(opts.preventDefault || opts.preventFail),
1487
- // call default success callback ?
1488
- defdone = !(opts.preventDefault || opts.preventDone),
1489
- // options for notify dialog
1490
- notify = $.extend({}, opts.notify),
1491
- // make cancel button
1492
- cancel = !!opts.cancel,
1493
- // do not normalize data - return as is
1494
- raw = !!opts.raw,
1495
- // sync files on request fail
1496
- syncOnFail = opts.syncOnFail,
1497
- // use lazy()
1498
- lazy = !!opts.lazy,
1499
- // prepare function before done()
1500
- prepare = opts.prepare,
1501
- // open notify dialog timeout
1502
- timeout,
1503
- // request options
1504
- options = $.extend({
1505
- url : o.url,
1506
- async : true,
1507
- type : this.requestType,
1508
- dataType : 'json',
1509
- cache : false,
1510
- // timeout : 100,
1511
- data : data,
1512
- headers : this.customHeaders,
1513
- xhrFields: this.xhrFields
1514
- }, opts.options || {}),
1515
- /**
1516
- * Default success handler.
1517
- * Call default data handlers and fire event with command name.
1518
- *
1519
- * @param Object normalized response data
1520
- * @return void
1521
- **/
1522
- done = function(data) {
1523
- data.warning && self.error(data.warning);
1524
-
1525
- isOpen && open(data);
1526
-
1527
- self.lazy(function() {
1528
- // fire some event to update cache/ui
1529
- data.removed && data.removed.length && self.remove(data);
1530
- data.added && data.added.length && self.add(data);
1531
- data.changed && data.changed.length && self.change(data);
1532
- }).then(function() {
1533
- // fire event with command name
1534
- return self.lazy(function() {
1535
- self.trigger(cmd, data);
1536
- });
1537
- }).then(function() {
1538
- // fire event with command name + 'done'
1539
- return self.lazy(function() {
1540
- self.trigger(cmd + 'done');
1541
- });
1542
- }).then(function() {
1543
- // force update content
1544
- data.sync && self.sync();
1545
- });
1546
- },
1547
- /**
1548
- * Request error handler. Reject dfrd with correct error message.
1549
- *
1550
- * @param jqxhr request object
1551
- * @param String request status
1552
- * @return void
1553
- **/
1554
- error = function(xhr, status) {
1555
- var error;
1556
-
1557
- switch (status) {
1558
- case 'abort':
1559
- error = xhr.quiet ? '' : ['errConnect', 'errAbort'];
1560
- break;
1561
- case 'timeout':
1562
- error = ['errConnect', 'errTimeout'];
1563
- break;
1564
- case 'parsererror':
1565
- error = ['errResponse', 'errDataNotJSON'];
1566
- if (xhr.responseText) {
1567
- self.debug('backend-debug', { debug: {phpErrors: [ xhr.responseText] }});
1568
- if (! cwd) {
1569
- xhr.responseText && error.push(xhr.responseText);
1570
- }
1571
- }
1572
- break;
1573
- default:
1574
- if (xhr.status == 403) {
1575
- error = ['errConnect', 'errAccess', 'HTTP error ' + xhr.status];
1576
- } else if (xhr.status == 404) {
1577
- error = ['errConnect', 'errNotFound', 'HTTP error ' + xhr.status];
1578
- } else {
1579
- if (xhr.status == 414 && options.type === 'get') {
1580
- // retry by POST method
1581
- options.type = 'post';
1582
- dfrd.xhr = xhr = self.transport.send(options).fail(error).done(success);
1583
- return;
1584
- }
1585
- error = xhr.quiet ? '' : ['errConnect', 'HTTP error ' + xhr.status];
1586
- }
1587
- }
1588
-
1589
- dfrd.reject(error, xhr, status);
1590
- },
1591
- /**
1592
- * Request success handler. Valid response data and reject/resolve dfrd.
1593
- *
1594
- * @param Object response data
1595
- * @param String request status
1596
- * @return void
1597
- **/
1598
- success = function(response) {
1599
- // Set currrent request command name
1600
- self.currentReqCmd = cmd;
1601
-
1602
- if (raw) {
1603
- response && response.debug && self.debug('backend-debug', response);
1604
- return dfrd.resolve(response);
1605
- }
1606
-
1607
- if (!response) {
1608
- return dfrd.reject(['errResponse', 'errDataEmpty'], xhr, response);
1609
- } else if (!$.isPlainObject(response)) {
1610
- return dfrd.reject(['errResponse', 'errDataNotJSON'], xhr, response);
1611
- } else if (response.error) {
1612
- return dfrd.reject(response.error, xhr, response);
1613
- } else if (!self.validResponse(cmd, response)) {
1614
- return dfrd.reject('errResponse', xhr, response);
1615
- }
1616
-
1617
- var resolve = function() {
1618
- var pushLeafRoots = function(name) {
1619
- if (self.leafRoots[data.target] && response[name]) {
1620
- $.each(self.leafRoots[data.target], function(i, h) {
1621
- var root;
1622
- if (root = self.file(h)) {
1623
- response[name].push(root);
1624
- }
1625
- });
1626
- }
1627
- };
1628
-
1629
- if (isOpen) {
1630
- pushLeafRoots('files');
1631
- } else if (cmd === 'tree') {
1632
- pushLeafRoots('tree');
1633
- }
1634
-
1635
- response = self.normalize(response);
1636
-
1637
- if (!self.api) {
1638
- self.api = response.api || 1;
1639
- if (self.api == '2.0' && typeof response.options.uploadMaxSize !== 'undefined') {
1640
- self.api = '2.1';
1641
- }
1642
- self.newAPI = self.api >= 2;
1643
- self.oldAPI = !self.newAPI;
1644
- }
1645
-
1646
- if (response.options) {
1647
- cwdOptions = $.extend({}, cwdOptions, response.options);
1648
- }
1649
-
1650
- if (response.netDrivers) {
1651
- self.netDrivers = response.netDrivers;
1652
- }
1653
-
1654
- if (response.maxTargets) {
1655
- self.maxTargets = response.maxTargets;
1656
- }
1657
-
1658
- if (isOpen && !!data.init) {
1659
- self.uplMaxSize = self.returnBytes(response.uplMaxSize);
1660
- self.uplMaxFile = !!response.uplMaxFile? parseInt(response.uplMaxFile) : 20;
1661
- }
1662
-
1663
- if (typeof prepare === 'function') {
1664
- prepare(response);
1665
- }
1666
-
1667
- dfrd.resolve(response);
1668
- response.debug && self.debug('backend-debug', response);
1669
- };
1670
-
1671
- lazy? self.lazy(resolve) : resolve();
1672
- },
1673
- xhr, _xhr,
1674
- abort = function(e){
1675
- if (e.type == 'autosync') {
1676
- if (e.data.action != 'stop') return;
1677
- } else if (e.type != 'unload' && e.type != 'destroy' && e.type != 'openxhrabort') {
1678
- if (!e.data.added || !e.data.added.length) {
1679
- return;
1680
- }
1681
- }
1682
- if (xhr.state() == 'pending') {
1683
- xhr.quiet = true;
1684
- xhr.abort();
1685
- if (e.type != 'unload' && e.type != 'destroy') {
1686
- self.autoSync();
1687
- }
1688
- }
1689
- };
1690
-
1691
- dfrd.fail(function(error, xhr, response) {
1692
- self.trigger(cmd + 'fail', response);
1693
- if (error) {
1694
- deffail ? self.error(error) : self.debug('error', self.i18n(error));
1695
- }
1696
- syncOnFail && self.sync();
1697
- })
1698
-
1699
- if (!cmd) {
1700
- syncOnFail = false;
1701
- return dfrd.reject('errCmdReq');
1702
  }
1703
 
1704
- if (self.maxTargets && data.targets && data.targets.length > self.maxTargets) {
1705
- syncOnFail = false;
1706
- return dfrd.reject(['errMaxTargets', self.maxTargets]);
1707
  }
1708
-
1709
- defdone && dfrd.done(done);
1710
- if (notify.type && notify.cnt) {
1711
- if (cancel) {
1712
- notify.cancel = dfrd;
1713
- }
1714
- timeout = setTimeout(function() {
1715
- self.notify(notify);
1716
- dfrd.always(function() {
1717
- notify.cnt = -(parseInt(notify.cnt)||0);
1718
- self.notify(notify);
1719
- })
1720
- }, self.notifyDelay)
1721
-
1722
- dfrd.always(function() {
1723
- clearTimeout(timeout);
1724
- });
1725
  }
1726
 
1727
- // quiet abort not completed "open" requests
1728
- if (isOpen) {
1729
- while ((_xhr = queue.pop())) {
1730
- if (_xhr.state() == 'pending') {
1731
- _xhr.quiet = true;
1732
- _xhr.abort();
1733
- }
1734
- }
1735
- if (cwd !== data.target) {
1736
- while ((_xhr = cwdQueue.pop())) {
1737
- if (_xhr.state() == 'pending') {
1738
- _xhr.quiet = true;
1739
- _xhr.abort();
1740
- }
1741
- }
1742
- }
1743
- }
1744
-
1745
- // trigger abort autoSync for commands to add the item
1746
- if ($.inArray(cmd, (self.cmdsToAdd + ' autosync').split(' ')) !== -1) {
1747
- if (cmd !== 'autosync') {
1748
- self.autoSync('stop');
1749
- dfrd.always(function() {
1750
- self.autoSync();
1751
- });
1752
  }
1753
- self.trigger('openxhrabort');
1754
- }
1755
-
1756
- delete options.preventFail
1757
-
1758
- dfrd.xhr = xhr = this.transport.send(options).fail(error).done(success);
1759
-
1760
- if (isOpen || (data.compare && cmd === 'info')) {
1761
- // add autoSync xhr into queue
1762
- queue.unshift(xhr);
1763
- // bind abort()
1764
- data.compare && self.bind(self.cmdsToAdd + ' autosync openxhrabort', abort);
1765
- dfrd.always(function() {
1766
- var ndx = $.inArray(xhr, queue);
1767
- data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort);
1768
- ndx !== -1 && queue.splice(ndx, 1);
1769
- });
1770
- } else if ($.inArray(cmd, this.abortCmdsOnOpen) !== -1) {
1771
- // add "open" xhr, only cwd xhr into queue
1772
- cwdQueue.unshift(xhr);
1773
- dfrd.always(function() {
1774
- var ndx = $.inArray(xhr, cwdQueue);
1775
- ndx !== -1 && cwdQueue.splice(ndx, 1);
1776
- });
1777
  }
1778
 
1779
- // abort pending xhr on window unload or elFinder destroy
1780
- self.bind('unload destroy', abort);
1781
- dfrd.always(function() {
1782
- self.unbind('unload destroy', abort);
1783
- });
1784
-
1785
- return dfrd;
1786
  };
1787
 
1788
  /**
1789
- * Compare current files cache with new files and return diff
1790
  *
1791
- * @param Array new files
1792
- * @param String target folder hash
1793
- * @param Array exclude properties to compare
1794
  * @return Object
1795
  */
1796
- this.diff = function(incoming, onlydir, excludeProps) {
1797
- var raw = {},
1798
- added = [],
1799
- removed = [],
1800
- changed = [],
1801
- isChanged = function(hash) {
1802
- var l = changed.length;
1803
-
1804
- while (l--) {
1805
- if (changed[l].hash == hash) {
1806
- return true;
1807
- }
1808
- }
1809
- };
1810
-
1811
- $.each(incoming, function(i, f) {
1812
- raw[f.hash] = f;
1813
- });
1814
-
1815
- // find removed
1816
- $.each(files, function(hash, f) {
1817
- if (! raw[hash] && (! onlydir || f.phash === onlydir)) {
1818
- removed.push(hash);
1819
- }
1820
- });
1821
-
1822
- // compare files
1823
- $.each(raw, function(hash, file) {
1824
- var origin = files[hash];
1825
-
1826
- if (!origin) {
1827
- added.push(file);
1828
- } else {
1829
- $.each(file, function(prop) {
1830
- if (! excludeProps || $.inArray(prop, excludeProps) === -1) {
1831
- if (file[prop] !== origin[prop]) {
1832
- changed.push(file)
1833
- return false;
1834
- }
1835
- }
1836
- });
1837
- }
1838
- });
1839
-
1840
- // parents of removed dirs mark as changed (required for tree correct work)
1841
- $.each(removed, function(i, hash) {
1842
- var file = files[hash],
1843
- phash = file.phash;
1844
-
1845
- if (phash
1846
- && file.mime == 'directory'
1847
- && $.inArray(phash, removed) === -1
1848
- && raw[phash]
1849
- && !isChanged(phash)) {
1850
- changed.push(raw[phash]);
1851
- }
1852
- });
1853
-
1854
- return {
1855
- added : added,
1856
- removed : removed,
1857
- changed : changed
1858
- };
1859
  };
1860
 
1861
  /**
1862
- * Sync content
1863
  *
1864
- * @return jQuery.Deferred
 
 
1865
  */
1866
- this.sync = function(onlydir, polling) {
1867
- this.autoSync('stop');
1868
- var self = this,
1869
- compare = function(){
1870
- var c = '', cnt = 0, mtime = 0;
1871
- if (onlydir && polling) {
1872
- $.each(files, function(h, f) {
1873
- if (f.phash && f.phash === onlydir) {
1874
- ++cnt;
1875
- mtime = Math.max(mtime, f.ts);
1876
- }
1877
- c = cnt+':'+mtime;
1878
- });
1879
- }
1880
- return c;
1881
- },
1882
- comp = compare(),
1883
- dfrd = $.Deferred().done(function() { self.trigger('sync'); }),
1884
- opts = [this.request({
1885
- data : {cmd : 'open', reload : 1, target : cwd, tree : (! onlydir && this.ui.tree) ? 1 : 0, compare : comp},
1886
- preventDefault : true
1887
- })],
1888
- exParents = function() {
1889
- var parents = [],
1890
- curRoot = self.file(self.root(cwd)),
1891
- curId = curRoot? curRoot.volumeid : null,
1892
- phash = self.cwd().phash,
1893
- isroot,pdir;
1894
-
1895
- while(phash) {
1896
- if (pdir = self.file(phash)) {
1897
- if (phash.indexOf(curId) !== 0) {
1898
- if (! self.isRoot(pdir)) {
1899
- parents.push( {target: phash, cmd: 'tree'} );
1900
- }
1901
- parents.push( {target: phash, cmd: 'parents'} );
1902
- curRoot = self.file(self.root(phash));
1903
- curId = curRoot? curRoot.volumeid : null;
1904
- }
1905
- phash = pdir.phash;
1906
- } else {
1907
- phash = null;
1908
- }
1909
  }
1910
- return parents;
1911
- };
1912
-
1913
- if (! onlydir) {
1914
- (cwd !== this.root()) && opts.push(this.request({
1915
- data : {cmd : 'parents', target : cwd},
1916
- preventDefault : true
1917
- }));
1918
- $.each(exParents(), function(i, data) {
1919
- opts.push(self.request({
1920
- data : {cmd : data.cmd, target : data.target},
1921
- preventDefault : true
1922
- }));
1923
  });
 
 
 
1924
  }
1925
- $.when.apply($, opts)
1926
- .fail(function(error, xhr) {
1927
- if (! polling || $.inArray('errOpen', error) !== -1) {
1928
- dfrd.reject(error);
1929
- error && self.request({
1930
- data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1},
1931
- notify : {type : 'open', cnt : 1, hideCnt : true}
1932
- });
1933
- } else {
1934
- dfrd.reject((error && xhr.status != 0)? error : void 0);
1935
- }
1936
- })
1937
- .done(function(odata) {
1938
- var pdata, argLen, i;
1939
-
1940
- if (odata.cwd.compare) {
1941
- if (comp === odata.cwd.compare) {
1942
- return dfrd.reject();
1943
- }
1944
- }
1945
-
1946
- // for 2nd and more requests
1947
- pdata = {tree : []};
1948
-
1949
- // results marge of 2nd and more requests
1950
- argLen = arguments.length;
1951
- if (argLen > 1) {
1952
- for(i = 1; i < argLen; i++) {
1953
- if (arguments[i].tree && arguments[i].tree.length) {
1954
- pdata.tree.push.apply(pdata.tree, arguments[i].tree);
1955
- }
1956
- }
1957
- }
1958
-
1959
- if (self.api < 2.1) {
1960
- pdata.tree = (pdata.tree || []).push(odata.cwd);
1961
- }
1962
-
1963
- // data normalize
1964
- odata = self.normalize(odata);
1965
- pdata = self.normalize(pdata);
1966
-
1967
- var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir);
1968
-
1969
- diff.added.push(odata.cwd);
1970
- diff.removed.length && self.remove(diff);
1971
- diff.added.length && self.add(diff);
1972
- diff.changed.length && self.change(diff);
1973
- return dfrd.resolve(diff);
1974
- })
1975
- .always(function() {
1976
- self.autoSync();
1977
- });
1978
-
1979
- return dfrd;
1980
- };
1981
-
1982
- this.upload = function(files) {
1983
- return this.transport.upload(files, this);
1984
  };
1985
 
1986
  /**
1987
- * Attach listener to events
1988
- * To bind to multiply events at once, separate events names by space
1989
  *
1990
- * @param String event(s) name(s)
1991
- * @param Object event handler
1992
- * @return elFinder
1993
  */
1994
- this.bind = function(event, callback) {
1995
- var i;
1996
-
1997
- if (typeof(callback) == 'function') {
1998
- event = ('' + event).toLowerCase().split(/\s+/);
1999
-
2000
- for (i = 0; i < event.length; i++) {
2001
- if (listeners[event[i]] === void(0)) {
2002
- listeners[event[i]] = [];
2003
- }
2004
- listeners[event[i]].push(callback);
2005
- }
2006
  }
2007
- return this;
 
 
 
 
 
 
2008
  };
2009
 
2010
  /**
2011
- * Remove event listener if exists
2012
- * To un-bind to multiply events at once, separate events names by space
2013
- *
2014
- * @param String event(s) name(s)
2015
- * @param Function callback
2016
- * @return elFinder
2017
  */
2018
- this.unbind = function(event, callback) {
2019
- var i, l, ci;
2020
-
2021
- event = ('' + event).toLowerCase().split(/\s+/);
2022
-
2023
- for (i = 0; i < event.length; i++) {
2024
- l = listeners[event[i]] || [];
2025
- ci = $.inArray(callback, l);
2026
- ci > -1 && l.splice(ci, 1);
2027
- }
2028
-
2029
- callback = null
2030
- return this;
2031
  };
2032
 
2033
  /**
2034
- * Fire event - send notification to all event listeners
2035
- *
2036
- * @param String event type
2037
- * @param Object data to send across event
2038
- * @param Boolean allow modify data (call by reference of data)
2039
- * @return elFinder
2040
  */
2041
- this.trigger = function(event, data, allowModify) {
2042
- var event = event.toLowerCase(),
2043
- isopen = (event === 'open'),
2044
- handlers = listeners[event] || [], i, l, jst;
2045
-
2046
- this.debug('event-'+event, data);
2047
-
2048
- if (isopen && !allowModify) {
2049
- // for performance tuning
2050
- jst = JSON.stringify(data);
2051
- }
2052
- if (l = handlers.length) {
2053
- event = $.Event(event);
2054
- if (allowModify) {
2055
- event.data = data;
2056
  }
2057
-
2058
- for (i = 0; i < l; i++) {
2059
- if (! handlers[i]) {
2060
- // probably un-binded this handler
2061
- continue;
2062
- }
2063
- // only callback has argument
2064
- if (handlers[i].length) {
2065
- if (!allowModify) {
2066
- // to avoid data modifications. remember about "sharing" passing arguments in js :)
2067
- event.data = isopen? JSON.parse(jst) : $.extend(true, {}, data);
2068
- }
2069
- }
2070
-
2071
- try {
2072
- if (handlers[i](event, this) === false
2073
- || event.isDefaultPrevented()) {
2074
- this.debug('event-stoped', event.type);
2075
- break;
2076
- }
2077
- } catch (ex) {
2078
- window.console && window.console.log && window.console.log(ex);
2079
  }
2080
-
2081
- }
2082
  }
2083
- return this;
2084
  };
2085
 
2086
  /**
2087
- * Get event listeners
2088
- *
2089
- * @param String event type
2090
- * @return Array listed event functions
2091
  */
2092
- this.getListeners = function(event) {
2093
- return event? listeners[event.toLowerCase()] : listeners;
 
 
 
 
 
 
 
2094
  };
2095
 
2096
- /**
2097
- * Bind keybord shortcut to keydown event
2098
- *
2099
- * @example
2100
- * elfinder.shortcut({
2101
- * pattern : 'ctrl+a',
2102
- * description : 'Select all files',
2103
- * callback : function(e) { ... },
2104
- * keypress : true|false (bind to keypress instead of keydown)
2105
- * })
2106
- *
2107
- * @param Object shortcut config
2108
- * @return elFinder
2109
- */
2110
- this.shortcut = function(s) {
2111
- var patterns, pattern, code, i, parts;
2112
-
2113
- if (this.options.allowShortcuts && s.pattern && $.isFunction(s.callback)) {
2114
- patterns = s.pattern.toUpperCase().split(/\s+/);
2115
 
2116
- for (i= 0; i < patterns.length; i++) {
2117
- pattern = patterns[i]
2118
- parts = pattern.split('+');
2119
- code = (code = parts.pop()).length == 1
2120
- ? code > 0 ? code : code.charCodeAt(0)
2121
- : (code > 0 ? code : $.ui.keyCode[code]);
2122
-
2123
- if (code && !shortcuts[pattern]) {
2124
- shortcuts[pattern] = {
2125
- keyCode : code,
2126
- altKey : $.inArray('ALT', parts) != -1,
2127
- ctrlKey : $.inArray('CTRL', parts) != -1,
2128
- shiftKey : $.inArray('SHIFT', parts) != -1,
2129
- type : s.type || 'keydown',
2130
- callback : s.callback,
2131
- description : s.description,
2132
- pattern : pattern
2133
- };
2134
- }
2135
  }
2136
  }
2137
- return this;
2138
- };
2139
-
2140
- /**
2141
- * Registered shortcuts
2142
- *
2143
- * @type Object
2144
- **/
2145
- this.shortcuts = function() {
2146
- var ret = [];
2147
-
2148
- $.each(shortcuts, function(i, s) {
2149
- ret.push([s.pattern, self.i18n(s.description)]);
2150
- });
2151
- return ret;
2152
  };
2153
 
2154
  /**
2155
- * Get/set clipboard content.
2156
- * Return new clipboard content.
2157
- *
2158
- * @example
2159
- * this.clipboard([]) - clean clipboard
2160
- * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted
2161
  *
2162
- * @param Array new files hashes
2163
- * @param Boolean cut files?
2164
- * @return Array
 
2165
  */
2166
- this.clipboard = function(hashes, cut) {
2167
- var map = function() { return $.map(clipboard, function(f) { return f.hash }); };
2168
-
2169
- if (hashes !== void(0)) {
2170
- clipboard.length && this.trigger('unlockfiles', {files : map()});
2171
- remember = [];
 
 
2172
 
2173
- clipboard = $.map(hashes||[], function(hash) {
2174
- var file = files[hash];
2175
- if (file) {
2176
-
2177
- remember.push(hash);
2178
-
2179
- return {
2180
- hash : hash,
2181
- phash : file.phash,
2182
- name : file.name,
2183
- mime : file.mime,
2184
- read : file.read,
2185
- locked : file.locked,
2186
- cut : !!cut
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2187
  }
 
 
 
 
2188
  }
2189
- return null;
2190
- });
2191
- this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)});
2192
- cut && this.trigger('lockfiles', {files : map()});
2193
  }
2194
-
2195
- // return copy of clipboard instead of refrence
2196
- return clipboard.slice(0, clipboard.length);
2197
  };
2198
 
2199
  /**
2200
- * Return true if command enabled
2201
  *
2202
- * @param String command name
2203
- * @param String|void hash for check of own volume's disabled cmds
2204
- * @return Boolean
2205
  */
2206
- this.isCommandEnabled = function(name, dstHash) {
2207
- var disabled,
2208
- cvid = self.cwd().volumeid || '';
2209
- if (dstHash && (! cvid || dstHash.indexOf(cvid) !== 0)) {
2210
- disabled = self.option('disabled', dstHash);
2211
- if (! disabled) {
2212
- disabled = [];
2213
- }
2214
- } else {
2215
- disabled = cwdOptions.disabled;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2216
  }
2217
- return this._commands[name] ? $.inArray(name, disabled) === -1 : false;
2218
- };
2219
-
2220
- /**
2221
- * Exec command and return result;
2222
- *
2223
- * @param String command name
2224
- * @param String|Array usualy files hashes
2225
- * @param String|Array command options
2226
- * @param String|void hash for enabled check of own volume's disabled cmds
2227
- * @return $.Deferred
2228
- */
2229
- this.exec = function(cmd, files, opts, dstHash) {
2230
- if (cmd === 'open') {
2231
- if (this.searchStatus.state || this.searchStatus.ininc) {
2232
- this.trigger('searchend', { noupdate: true });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2233
  }
2234
- this.autoSync('stop');
2235
  }
2236
- return this._commands[cmd] && this.isCommandEnabled(cmd, dstHash)
2237
- ? this._commands[cmd].exec(files, opts)
2238
- : $.Deferred().reject('No such command');
2239
- };
2240
-
2241
- /**
2242
- * Create and return dialog.
2243
- *
2244
- * @param String|DOMElement dialog content
2245
- * @param Object dialog options
2246
- * @return jQuery
2247
- */
2248
- this.dialog = function(content, options) {
2249
- var dialog = $('<div/>').append(content).appendTo(node).elfinderdialog(options, this),
2250
- dnode = dialog.closest('.ui-dialog'),
2251
- resize = function(){
2252
- ! dialog.data('draged') && dialog.is(':visible') && dialog.elfinderdialog('posInit');
2253
- };
2254
- if (dnode.length) {
2255
- self.bind('resize', resize);
2256
- dnode.on('remove', function() {
2257
- self.unbind('resize', resize);
2258
- });
2259
  }
2260
- return dialog;
2261
- };
2262
-
2263
- /**
2264
- * Create and return toast.
2265
- *
2266
- * @param Object toast options - see ui/toast.js
2267
- * @return jQuery
2268
- */
2269
- this.toast = function(options) {
2270
- return $('<div class="ui-front"/>').appendTo(this.ui.toast).elfindertoast(options || {}, this);
2271
  };
2272
 
2273
  /**
2274
- * Return UI widget or node
2275
  *
2276
- * @param String ui name
2277
- * @return jQuery
 
2278
  */
2279
- this.getUI = function(ui) {
2280
- return this.ui[ui] || node;
 
 
 
 
 
 
 
2281
  };
2282
-
2283
  /**
2284
- * Return elFinder.command instance or instances array
2285
- *
2286
- * @param String command name
2287
- * @return Object | Array
 
2288
  */
2289
- this.getCommand = function(name) {
2290
- return name === void(0) ? this._commands : this._commands[name];
2291
- };
2292
-
2293
- /**
2294
- * Resize elfinder node
2295
- *
2296
- * @param String|Number width
2297
- * @param Number height
2298
- * @return void
2299
- */
2300
- this.resize = function(w, h) {
2301
- node.css('width', w).height(h).trigger('resize');
2302
- this.trigger('resize', {width : node.width(), height : node.height()});
2303
- };
2304
-
2305
- /**
2306
- * Restore elfinder node size
2307
- *
2308
- * @return elFinder
2309
- */
2310
- this.restoreSize = function() {
2311
- this.resize(width, height);
2312
- };
2313
-
2314
- this.show = function() {
2315
- node.show();
2316
- this.enable().trigger('show');
2317
- };
2318
-
2319
- this.hide = function() {
2320
- if (this.options.enableAlways) {
2321
- prevEnabled = enabled;
2322
- enabled = false;
2323
  }
2324
- this.disable().trigger('hide');
2325
- node.hide();
2326
- };
2327
-
2328
- /**
2329
- * Lazy execution function
2330
- *
2331
- * @param Object function
2332
- * @param Number delay
2333
- * @param Object options
2334
- * @return Object jQuery.Deferred
2335
- */
2336
- this.lazy = function(func, delay, opts) {
2337
- var busy = function(state) {
2338
- var cnt = node.data('lazycnt'),
2339
- repaint;
2340
-
2341
- if (state) {
2342
- repaint = node.data('lazyrepaint')? false : opts.repaint;
2343
- if (! cnt) {
2344
- node.data('lazycnt', 1)
2345
- .addClass('elfinder-processing');
2346
- } else {
2347
- node.data('lazycnt', ++cnt);
2348
- }
2349
- if (repaint) {
2350
- node.data('lazyrepaint', true).css('display'); // force repaint
2351
- }
2352
- } else {
2353
- if (cnt && cnt > 1) {
2354
- node.data('lazycnt', --cnt);
2355
- } else {
2356
- repaint = node.data('lazyrepaint');
2357
- node.data('lazycnt', 0)
2358
- .removeData('lazyrepaint')
2359
- .removeClass('elfinder-processing');
2360
- repaint && node.css('display'); // force repaint;
2361
- self.trigger('lazydone');
2362
- }
2363
- }
2364
- },
2365
- dfd = $.Deferred();
2366
 
2367
- delay = delay || 0;
2368
- opts = opts || {};
2369
- busy(true);
 
 
 
 
 
 
 
 
 
 
2370
 
2371
- setTimeout(function() {
2372
- dfd.resolve(func.call(dfd));
2373
- busy(false);
2374
- }, delay);
 
2375
 
2376
- return dfd;
2377
- }
2378
-
2379
- /**
2380
- * Destroy this elFinder instance
2381
- *
2382
- * @return void
2383
- **/
2384
- this.destroy = function() {
2385
- if (node && node[0].elfinder) {
2386
- this.options.syncStart = false;
2387
- this.autoSync('forcestop');
2388
- this.trigger('destroy').disable();
2389
- clipboard = [];
2390
- selected = [];
2391
- listeners = {};
2392
- shortcuts = {};
2393
- $(window).off('.' + namespace);
2394
- $(document).off('.' + namespace);
2395
- self.trigger = function(){}
2396
- node.off();
2397
- node.removeData();
2398
- node.empty();
2399
- node[0].elfinder = null;
2400
- $(beeper).remove();
2401
- node.append(prevContent.contents()).removeClass(this.cssClass).attr('style', prevStyle);
2402
  }
 
 
 
 
 
 
2403
  };
2404
 
2405
  /**
2406
- * Start or stop auto sync
2407
  *
2408
- * @param String|Bool stop
2409
- * @return void
2410
  */
2411
- this.autoSync = function(mode) {
2412
- var sync;
2413
- if (self.options.sync >= 1000) {
2414
- if (syncInterval) {
2415
- clearTimeout(syncInterval);
2416
- syncInterval = null;
2417
- self.trigger('autosync', {action : 'stop'});
2418
- }
2419
-
2420
- if (mode === 'stop') {
2421
- ++autoSyncStop;
2422
  } else {
2423
- autoSyncStop = Math.max(0, --autoSyncStop);
 
2424
  }
2425
-
2426
- if (autoSyncStop || mode === 'forcestop' || ! self.options.syncStart) {
2427
- return;
2428
- }
2429
-
2430
- // run interval sync
2431
- sync = function(start){
2432
- var timeout;
2433
- if (cwdOptions.syncMinMs && (start || syncInterval)) {
2434
- start && self.trigger('autosync', {action : 'start'});
2435
- timeout = Math.max(self.options.sync, cwdOptions.syncMinMs);
2436
- syncInterval && clearTimeout(syncInterval);
2437
- syncInterval = setTimeout(function() {
2438
- var dosync = true, hash = cwd, cts;
2439
- if (cwdOptions.syncChkAsTs && (cts = files[hash].ts)) {
2440
- self.request({
2441
- data : {cmd : 'info', targets : [hash], compare : cts, reload : 1},
2442
- preventDefault : true
2443
- })
2444
- .done(function(data){
2445
- var ts;
2446
- dosync = true;
2447
- if (data.compare) {
2448
- ts = data.compare;
2449
- if (ts == cts) {
2450
- dosync = false;
2451
- }
2452
- }
2453
- if (dosync) {
2454
- self.sync(hash).always(function(){
2455
- if (ts) {
2456
- // update ts for cache clear etc.
2457
- files[hash].ts = ts;
2458
- }
2459
- sync();
2460
- });
2461
- } else {
2462
- sync();
2463
- }
2464
- })
2465
- .fail(function(error, xhr){
2466
- if (error && xhr.status != 0) {
2467
- self.error(error);
2468
- if ($.inArray('errOpen', error) !== -1) {
2469
- self.request({
2470
- data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1},
2471
- notify : {type : 'open', cnt : 1, hideCnt : true}
2472
- });
2473
- }
2474
- } else {
2475
- syncInterval = setTimeout(function() {
2476
- sync();
2477
- }, timeout);
2478
- }
2479
- });
2480
- } else {
2481
- self.sync(cwd, true).always(function(){
2482
- sync();
2483
- });
2484
- }
2485
- }, timeout);
2486
  }
2487
- };
2488
- sync(true);
2489
  }
 
 
2490
  };
2491
 
2492
  /**
2493
- * Return bool is inside work zone of specific point
2494
- *
2495
- * @param Number event.pageX
2496
- * @param Number event.pageY
2497
- * @return Bool
2498
- */
2499
- this.insideWorkzone = function(x, y, margin) {
2500
- var rectangle = this.getUI('workzone').data('rectangle');
2501
-
2502
- margin = margin || 1;
2503
- if (x < rectangle.left + margin
2504
- || x > rectangle.left + rectangle.width + margin
2505
- || y < rectangle.top + margin
2506
- || y > rectangle.top + rectangle.height + margin) {
2507
- return false;
2508
- }
2509
- return true;
2510
  };
2511
 
2512
  /**
2513
- * Target ui node move to last of children of elFinder node fot to show front
2514
  *
2515
- * @param Object target Target jQuery node object
2516
  */
2517
- this.toFront = function(target) {
2518
- var lastnode = node.children(':last');
2519
- target = $(target);
2520
- if (lastnode.get(0) !== target.get(0)) {
2521
- lastnode.after(target);
2522
- }
2523
  };
2524
 
2525
  /**
2526
- * Return css object for maximize
2527
  *
2528
- * @return Object
 
 
2529
  */
2530
- this.getMaximizeCss = function() {
2531
- return {
2532
- width : '100%',
2533
- height : '100%',
2534
- margin : 0,
2535
- padding : 0,
2536
- top : 0,
2537
- left : 0,
2538
- display : 'block',
2539
- position: 'fixed',
2540
- zIndex : Math.max(self.zIndex? (self.zIndex + 1) : 0 , 1000)
2541
- };
2542
  };
2543
 
2544
- // Closure for togglefullscreen
2545
- (function() {
2546
- // check is in iframe
2547
- if (inFrame && self.UA.Fullscreen) {
2548
- self.UA.Fullscreen = false;
2549
- if (parentIframe && typeof parentIframe.attr('allowfullscreen') !== 'undefined') {
2550
- self.UA.Fullscreen = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2551
  }
 
 
 
 
2552
  }
2553
-
2554
- var orgStyle, bodyOvf, resizeTm, fullElm, exitFull, toFull,
2555
- cls = 'elfinder-fullscreen',
2556
- clsN = 'elfinder-fullscreen-native',
2557
- checkDialog = function() {
2558
- var t = 0,
2559
- l = 0;
2560
- $.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) {
2561
- var $d = $(d),
2562
- pos = $d.position();
2563
-
2564
- if (pos.top < 0) {
2565
- $d.css('top', t);
2566
- t += 20;
2567
- }
2568
- if (pos.left < 0) {
2569
- $d.css('left', l);
2570
- l += 20;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2571
  }
 
 
2572
  });
2573
  },
2574
- funcObj = self.UA.Fullscreen? {
2575
- // native full screen mode
 
 
 
 
 
 
 
 
2576
 
2577
- fullElm: function() {
2578
- return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || null;
2579
- },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2580
 
2581
- exitFull: function() {
2582
- if (document.exitFullscreen) {
2583
- return document.exitFullscreen();
2584
- } else if (document.webkitExitFullscreen) {
2585
- return document.webkitExitFullscreen();
2586
- } else if (document.mozCancelFullScreen) {
2587
- return document.mozCancelFullScreen();
2588
- } else if (document.msExitFullscreen) {
2589
- return document.msExitFullscreen();
2590
  }
2591
- },
 
 
 
 
 
 
 
 
2592
 
2593
- toFull: function(elem) {
2594
- if (elem.requestFullscreen) {
2595
- return elem.requestFullscreen();
2596
- } else if (elem.webkitRequestFullscreen) {
2597
- return elem.webkitRequestFullscreen();
2598
- } else if (elem.mozRequestFullScreen) {
2599
- return elem.mozRequestFullScreen();
2600
- } else if (elem.msRequestFullscreen) {
2601
- return elem.msRequestFullscreen();
 
2602
  }
2603
- return false;
2604
  }
2605
- } : {
2606
- // node element maximize mode
2607
 
2608
- fullElm: function() {
2609
- var full;
2610
- if (node.hasClass(cls)) {
2611
- return node.get(0);
2612
- } else {
2613
- full = node.find('.' + cls);
2614
- if (full.length) {
2615
- return full.get(0);
 
2616
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
2617
  }
2618
- return null;
2619
- },
2620
-
2621
- exitFull: function() {
2622
- var elm;
2623
 
2624
- $(window).off('resize.' + namespace, resize);
2625
- if (bodyOvf !== void(0)) {
2626
- $('body').css('overflow', bodyOvf);
 
2627
  }
2628
- bodyOvf = void(0);
2629
 
2630
- if (orgStyle) {
2631
- elm = orgStyle.elm;
2632
- restoreStyle(elm);
2633
- $(elm).trigger('resize', {fullscreen: 'off'});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2634
  }
2635
 
2636
- $(window).trigger('resize');
2637
- },
2638
-
2639
- toFull: function(elem) {
2640
- bodyOvf = $('body').css('overflow') || '';
2641
- $('body').css('overflow', 'hidden');
2642
-
2643
- $(elem).css(self.getMaximizeCss())
2644
- .addClass(cls)
2645
- .trigger('resize', {fullscreen: 'on'});
2646
-
2647
- checkDialog();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2648
 
2649
- $(window).on('resize.' + namespace, resize).trigger('resize');
2650
 
2651
- return true;
 
 
 
 
 
 
 
 
 
 
 
2652
  }
2653
  },
2654
- restoreStyle = function(elem) {
2655
- if (orgStyle && orgStyle.elm == elem) {
2656
- $(elem).removeClass(cls + ' ' + clsN).attr('style', orgStyle.style);
2657
- orgStyle = null;
 
 
 
 
2658
  }
 
2659
  },
2660
- resize = function(e) {
2661
- var elm;
2662
- if (e.target === window) {
2663
- resizeTm && clearTimeout(resizeTm);
2664
- resizeTm = setTimeout(function() {
2665
- if (elm = funcObj.fullElm()) {
2666
- $(elm).trigger('resize', {fullscreen: 'on'});
2667
- }
2668
- }, 100);
 
2669
  }
2670
- };
2671
-
2672
- $(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){
2673
- if (self.UA.Fullscreen) {
2674
- var elm = funcObj.fullElm(),
2675
- win = $(window);
2676
 
2677
- resizeTm && clearTimeout(resizeTm);
2678
- if (elm === null) {
2679
- win.off('resize.' + namespace, resize);
2680
- if (orgStyle) {
2681
- elm = orgStyle.elm;
2682
- restoreStyle(elm);
2683
- $(elm).trigger('resize', {fullscreen: 'off'});
2684
  }
2685
- } else {
2686
- $(elm).addClass(cls + ' ' + clsN)
2687
- .attr('style', 'width:100%; height:100%; margin:0; padding:0;')
2688
- .trigger('resize', {fullscreen: 'on'});
2689
- win.on('resize.' + namespace, resize);
2690
- checkDialog();
2691
  }
2692
- win.trigger('resize');
2693
- }
2694
- });
2695
-
2696
- /**
2697
- * Toggle Full Scrren Mode
2698
- *
2699
- * @param Object target
2700
- * @param Bool full
2701
- * @return Object | Null DOM node object of current full scrren
2702
- */
2703
- self.toggleFullscreen = function(target, full) {
2704
- var elm = $(target).get(0),
2705
- curElm = null;
2706
-
2707
- curElm = funcObj.fullElm();
2708
- if (curElm) {
2709
- if (curElm == elm) {
2710
- if (full === true) {
2711
- return curElm;
2712
  }
2713
- } else {
2714
- if (full === false) {
2715
- return curElm;
 
 
 
 
 
 
 
 
 
 
 
2716
  }
 
 
 
 
 
 
 
 
 
 
2717
  }
2718
- funcObj.exitFull();
2719
- return null;
2720
- } else {
2721
- if (full === false) {
2722
- return null;
2723
  }
2724
- }
2725
-
2726
- orgStyle = {elm: elm, style: $(elm).attr('style')};
2727
- if (funcObj.toFull(elm) !== false) {
2728
- return elm;
2729
- } else {
2730
- orgStyle = null;
2731
- return null;
2732
- }
2733
- };
2734
- })();
2735
-
2736
- // Closure for toggleMaximize
2737
- (function(){
2738
- var cls = 'elfinder-maximized',
2739
- resizeTm,
2740
- resize = function(e) {
2741
- if (e.target === window && e.data && e.data.elm) {
2742
- resizeTm && clearTimeout(resizeTm);
2743
- resizeTm = setTimeout(function() {
2744
- e.data.elm.trigger('resize', {maximize: 'on'});
2745
- }, 100);
2746
- }
2747
- },
2748
- exitMax = function(elm) {
2749
- $(window).off('resize.' + namespace, resize);
2750
- $('body').css('overflow', elm.data('bodyOvf'));
2751
- elm.removeClass(cls)
2752
- .attr('style', elm.data('orgStyle'))
2753
- .removeData('bodyOvf')
2754
- .removeData('orgStyle');
2755
- elm.trigger('resize', {maximize: 'off'});
2756
- },
2757
- toMax = function(elm) {
2758
- elm.data('bodyOvf', $('body').css('overflow') || '')
2759
- .data('orgStyle', elm.attr('style'))
2760
- .addClass(cls)
2761
- .css(self.getMaximizeCss());
2762
- $('body').css('overflow', 'hidden');
2763
- $(window).on('resize.' + namespace, {elm: elm}, resize).trigger('resize');
2764
- };
2765
-
2766
- /**
2767
- * Toggle Maximize target node
2768
- *
2769
- * @param Object target
2770
- * @param Bool max
2771
- * @return void
2772
- */
2773
- self.toggleMaximize = function(target, max) {
2774
- var elm = $(target),
2775
- maximized = elm.hasClass(cls);
2776
-
2777
- if (maximized) {
2778
- if (max === true) {
2779
- return;
2780
  }
2781
- exitMax(elm);
2782
- } else {
2783
- if (max === false) {
2784
- return;
 
 
 
 
 
 
2785
  }
2786
- toMax(elm);
2787
- }
2788
- };
2789
- })();
2790
-
2791
- /************* init stuffs ****************/
2792
-
2793
- // check jquery ui
2794
- if (!($.fn.selectable && $.fn.draggable && $.fn.droppable)) {
2795
- return alert(this.i18n('errJqui'));
2796
- }
2797
 
2798
- // check node
2799
- if (!node.length) {
2800
- return alert(this.i18n('errNode'));
2801
- }
2802
- // check connector url
2803
- if (!this.options.url) {
2804
- return alert(this.i18n('errURL'));
2805
- }
2806
 
2807
- $.extend($.ui.keyCode, {
2808
- 'F1' : 112,
2809
- 'F2' : 113,
2810
- 'F3' : 114,
2811
- 'F4' : 115,
2812
- 'F5' : 116,
2813
- 'F6' : 117,
2814
- 'F7' : 118,
2815
- 'F8' : 119,
2816
- 'F9' : 120,
2817
- 'F10' : 121,
2818
- 'F11' : 122,
2819
- 'F12' : 123,
2820
- 'CONTEXTMENU' : 93
2821
- });
2822
-
2823
- this.dragUpload = false;
2824
- this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined';
2825
-
2826
- // configure transport object
2827
- this.transport = {};
2828
 
2829
- if (typeof(this.options.transport) == 'object') {
2830
- this.transport = this.options.transport;
2831
- if (typeof(this.transport.init) == 'function') {
2832
- this.transport.init(this)
2833
- }
2834
- }
2835
-
2836
- if (typeof(this.transport.send) != 'function') {
2837
- this.transport.send = function(opts) { return $.ajax(opts); }
2838
- }
2839
-
2840
- if (this.transport.upload == 'iframe') {
2841
- this.transport.upload = $.proxy(this.uploads.iframe, this);
2842
- } else if (typeof(this.transport.upload) == 'function') {
2843
- this.dragUpload = !!this.options.dragUploadAllow;
2844
- } else if (this.xhrUpload && !!this.options.dragUploadAllow) {
2845
- this.transport.upload = $.proxy(this.uploads.xhr, this);
2846
- this.dragUpload = true;
2847
- } else {
2848
- this.transport.upload = $.proxy(this.uploads.iframe, this);
2849
- }
2850
 
2851
- /**
2852
- * Decoding 'raw' string converted to unicode
2853
- *
2854
- * @param String str
2855
- * @return String
2856
- */
2857
- this.decodeRawString = $.isFunction(this.options.rawStringDecoder)? this.options.rawStringDecoder : function(str) {
2858
- var charCodes = function(str) {
2859
- var i, len, arr;
2860
- for (i=0,len=str.length,arr=[]; i<len; i++) {
2861
- arr.push(str.charCodeAt(i));
2862
- }
2863
- return arr;
2864
- },
2865
- scalarValues = function(arr) {
2866
- var scalars = [], i, len, c;
2867
- if (typeof arr === 'string') {arr = charCodes(arr);}
2868
- for (i=0,len=arr.length; c=arr[i],i<len; i++) {
2869
- if (c >= 0xd800 && c <= 0xdbff) {
2870
- scalars.push((c & 1023) + 64 << 10 | arr[++i] & 1023);
2871
- } else {
2872
- scalars.push(c);
2873
- }
2874
- }
2875
- return scalars;
2876
- },
2877
- decodeUTF8 = function(arr) {
2878
- var i, len, c, str, char = String.fromCharCode;
2879
- for (i=0,len=arr.length,str=""; c=arr[i],i<len; i++) {
2880
- if (c <= 0x7f) {
2881
- str += char(c);
2882
- } else if (c <= 0xdf && c >= 0xc2) {
2883
- str += char((c&31)<<6 | arr[++i]&63);
2884
- } else if (c <= 0xef && c >= 0xe0) {
2885
- str += char((c&15)<<12 | (arr[++i]&63)<<6 | arr[++i]&63);
2886
- } else if (c <= 0xf7 && c >= 0xf0) {
2887
- str += char(
2888
- 0xd800 | ((c&7)<<8 | (arr[++i]&63)<<2 | arr[++i]>>>4&3) - 64,
2889
- 0xdc00 | (arr[i++]&15)<<6 | arr[i]&63
2890
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2891
  } else {
2892
- str += char(0xfffd);
 
 
 
 
 
2893
  }
2894
- }
2895
- return str;
2896
- };
2897
 
2898
- return decodeUTF8(scalarValues(str));
2899
- };
 
 
 
2900
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2901
  /**
2902
- * Alias for this.trigger('error', {error : 'message'})
 
2903
  *
2904
- * @param String error message
2905
- * @return elFinder
2906
- **/
2907
- this.error = function() {
2908
- var arg = arguments[0],
2909
- opts = arguments[1] || null;
2910
- return arguments.length == 1 && typeof(arg) == 'function'
2911
- ? self.bind('error', arg)
2912
- : (arg === true? this : self.trigger('error', {error : arg, opts : opts}));
2913
  };
2914
 
2915
- // create bind/trigger aliases for build-in events
2916
- $.each(events, function(i, name) {
2917
- self[name] = function() {
2918
- var arg = arguments[0];
2919
- return arguments.length == 1 && typeof(arg) == 'function'
2920
- ? self.bind(name, arg)
2921
- : self.trigger(name, $.isPlainObject(arg) ? arg : {});
 
 
 
 
 
 
2922
  }
2923
- });
2924
 
2925
- // bind core event handlers
2926
- this
2927
- .enable(function() {
2928
- if (!enabled && self.visible() && self.ui.overlay.is(':hidden')) {
2929
- enabled = true;
2930
- document.activeElement && document.activeElement.blur();
2931
- node.removeClass('elfinder-disabled');
2932
- }
2933
- })
2934
- .disable(function() {
2935
- prevEnabled = enabled;
2936
- enabled = false;
2937
- node.addClass('elfinder-disabled');
2938
- })
2939
- .open(function() {
2940
- selected = [];
2941
- })
2942
- .select(function(e) {
2943
- var cnt = 0,
2944
- unselects = [];
2945
- selected = $.map(e.data.selected || e.data.value|| [], function(hash) {
2946
- if (unselects.length || (self.maxTargets && ++cnt > self.maxTargets)) {
2947
- unselects.push(hash);
2948
- return null;
2949
- } else {
2950
- return files[hash] ? hash : null;
2951
  }
 
 
 
 
 
 
 
 
 
 
 
2952
  });
2953
- if (unselects.length) {
2954
- self.trigger('unselectfiles', {files: unselects, inselect: true});
2955
- self.toast({mode: 'warning', msg: self.i18n(['errMaxTargets', self.maxTargets])});
 
 
 
2956
  }
2957
- })
2958
- .error(function(e) {
2959
- var opts = {
2960
- cssClass : 'elfinder-dialog-error',
2961
- title : self.i18n(self.i18n('error')),
2962
- resizable : false,
2963
- destroyOnClose : true,
2964
- buttons : {}
2965
- };
2966
-
2967
- opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { $(this).elfinderdialog('close'); };
2968
 
2969
- if (e.data.opts && $.isPlainObject(e.data.opts)) {
2970
- $.extend(opts, e.data.opts);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2971
  }
 
 
 
 
 
 
2972
 
2973
- self.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-error"/>'+self.i18n(e.data.error), opts);
2974
- })
2975
- .bind('tree parents', function(e) {
2976
- cache(e.data.tree || []);
2977
- })
2978
- .bind('tmb', function(e) {
2979
- $.each(e.data.images||[], function(hash, tmb) {
2980
- if (files[hash]) {
2981
- files[hash].tmb = tmb;
2982
- }
2983
- })
2984
- })
2985
- .add(function(e) {
2986
- cache(e.data.added || []);
2987
- })
2988
- .change(function(e) {
2989
- $.each(e.data.changed||[], function(i, file) {
2990
- var hash = file.hash;
2991
- if (files[hash]) {
2992
- $.each(['locked', 'hidden', 'width', 'height'], function(i, v){
2993
- if (files[hash][v] && !file[v]) {
2994
- delete files[hash][v];
 
 
 
 
 
 
 
 
 
2995
  }
 
2996
  });
2997
  }
2998
- files[hash] = files[hash] ? $.extend(files[hash], file) : file;
2999
- });
3000
- })
3001
- .remove(function(e) {
3002
- var removed = e.data.removed||[],
3003
- l = removed.length,
3004
- roots = {},
3005
- rm = function(hash) {
3006
- var file = files[hash], i;
3007
- if (file) {
3008
- if (file.mime === 'directory') {
3009
- if (roots[hash]) {
3010
- delete self.roots[roots[hash]];
 
 
 
 
 
 
 
 
3011
  }
3012
- $.each(files, function(h, f) {
3013
- f.phash == hash && rm(h);
3014
- });
3015
  }
3016
- delete files[hash];
 
 
3017
  }
3018
- };
 
 
3019
 
3020
- $.each(self.roots, function(k, v) {
3021
- roots[v] = k;
 
 
 
 
 
 
 
 
3022
  });
3023
- while (l--) {
3024
- rm(removed[l]);
 
 
 
 
 
 
 
 
 
3025
  }
3026
-
3027
- })
3028
- .bind('searchstart', function(e) {
3029
- $.extend(self.searchStatus, e.data);
3030
- self.searchStatus.state = 1;
3031
- })
3032
- .bind('search', function(e) {
3033
- self.searchStatus.state = 2;
3034
- cache(e.data.files || []);
3035
  })
3036
- .bind('searchend', function() {
3037
- self.searchStatus.state = 0;
3038
- self.searchStatus.mixed = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3039
  })
3040
- .bind('rm', function(e) {
3041
- var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"');
 
3042
 
3043
- play && play != '' && play != 'no' && $(beeper).html('<source src="' + soundPath + 'rm.wav" type="audio/wav">')[0].play()
3044
- })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3045
 
3046
- ;
3047
-
3048
- // bind external event handlers
3049
- $.each(this.options.handlers, function(event, callback) {
3050
- self.bind(event, callback);
3051
- });
 
 
 
3052
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3053
  /**
3054
- * History object. Store visited folders
3055
  *
3056
  * @type Object
3057
  **/
3058
- this.history = new this.history(this);
 
 
 
 
 
 
 
3059
 
3060
- // in getFileCallback set - change default actions on double click/enter/ctrl+enter
3061
- if (this.commands.getfile) {
3062
- if (typeof(this.options.getFileCallback) == 'function') {
3063
- this.bind('dblclick', function(e) {
3064
- e.preventDefault();
3065
- self.exec('getfile').fail(function() {
3066
- self.exec('open');
3067
- });
3068
- });
3069
- this.shortcut({
3070
- pattern : 'enter',
3071
- description : this.i18n('cmdgetfile'),
3072
- callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') }) }
3073
- })
3074
- .shortcut({
3075
- pattern : 'ctrl+enter',
3076
- description : this.i18n(this.OS == 'mac' ? 'cmdrename' : 'cmdopen'),
3077
- callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') }
3078
- });
3079
- } else {
3080
- this.options.getFileCallback = null;
3081
- }
3082
- }
3083
-
3084
  /**
3085
- * Root hashed
 
 
 
 
 
3086
  *
3087
- * @type Object
 
 
3088
  */
3089
- this.roots = {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3090
 
3091
  /**
3092
- * leaf roots
3093
  *
3094
- * @type Object
 
 
3095
  */
3096
- this.leafRoots = {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3097
 
3098
  /**
3099
- * Loaded commands
3100
  *
3101
- * @type Object
3102
- **/
3103
- this._commands = {};
3104
-
3105
- if (!$.isArray(this.options.commands)) {
3106
- this.options.commands = [];
3107
- }
3108
-
3109
- if ($.inArray('*', this.options.commands) !== -1) {
3110
- this.options.commands = Object.keys(this.commands);
3111
- }
3112
-
3113
- // load commands
3114
- $.each(this.commands, function(name, cmd) {
3115
- var proto = $.extend({}, cmd.prototype),
3116
- extendsCmd, opts;
3117
- if ($.isFunction(cmd) && !self._commands[name] && (cmd.prototype.forceLoad || $.inArray(name, self.options.commands) !== -1)) {
3118
- extendsCmd = cmd.prototype.extendsCmd || '';
3119
- if (extendsCmd) {
3120
- if ($.isFunction(self.commands[extendsCmd])) {
3121
- cmd.prototype = $.extend({}, base, new self.commands[extendsCmd](), cmd.prototype);
3122
- } else {
3123
- return true;
 
3124
  }
3125
  } else {
3126
- cmd.prototype = $.extend({}, base, cmd.prototype);
3127
- }
3128
- self._commands[name] = new cmd();
3129
- cmd.prototype = proto;
3130
- opts = self.options.commandsOptions[name] || {};
3131
- if (extendsCmd && self.options.commandsOptions[extendsCmd]) {
3132
- opts = $.extend(true, {}, self.options.commandsOptions[extendsCmd], opts);
3133
- }
3134
- self._commands[name].setup(name, opts);
3135
- // setup linked commands
3136
- if (self._commands[name].linkedCmds.length) {
3137
- $.each(self._commands[name].linkedCmds, function(i, n) {
3138
- var lcmd = self.commands[n];
3139
- if ($.isFunction(lcmd) && !self._commands[n]) {
3140
- lcmd.prototype = base;
3141
- self._commands[n] = new lcmd();
3142
- self._commands[n].setup(n, self.options.commandsOptions[n]||{});
3143
- }
3144
- });
3145
  }
3146
  }
3147
- });
 
 
 
 
 
 
 
 
 
 
 
 
3148
 
3149
  /**
3150
- * UI command map of cwd volume ( That volume driver option `uiCmdMap` )
3151
  *
3152
- * @type Object
3153
- **/
3154
- this.commandMap = {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3155
 
3156
  /**
3157
- * cwd options of each volume
3158
- * key: volumeid
3159
- * val: options object
3160
- *
3161
- * @type Object
3162
  */
3163
- this.volOptions = {};
3164
-
3165
- // prepare node
3166
- node.addClass(this.cssClass)
3167
- .on(mousedown, function() {
3168
- !enabled && self.enable();
3169
- });
3170
 
3171
  /**
3172
- * UI nodes
3173
  *
3174
- * @type Object
3175
- **/
3176
- this.ui = {
3177
- // container for nav panel and current folder container
3178
- workzone : $('<div/>').appendTo(node).elfinderworkzone(this),
3179
- // container for folders tree / places
3180
- navbar : $('<div/>').appendTo(node).elfindernavbar(this, this.options.uiOptions.navbar || {}),
3181
- // contextmenu
3182
- contextmenu : $('<div/>').appendTo(node).elfindercontextmenu(this),
3183
- // overlay
3184
- overlay : $('<div/>').appendTo(node).elfinderoverlay({
3185
- show : function() { self.disable(); },
3186
- hide : function() { prevEnabled && self.enable(); }
3187
- }),
3188
- // current folder container
3189
- cwd : $('<div/>').appendTo(node).elfindercwd(this, this.options.uiOptions.cwd || {}),
3190
- // notification dialog window
3191
- notify : this.dialog('', {
3192
- cssClass : 'elfinder-dialog-notify',
3193
- position : this.options.notifyDialog.position,
3194
- resizable : false,
3195
- autoOpen : false,
3196
- closeOnEscape : false,
3197
- title : '&nbsp;',
3198
- width : parseInt(this.options.notifyDialog.width)
3199
- }),
3200
- statusbar : $('<div class="ui-widget-header ui-helper-clearfix ui-corner-bottom elfinder-statusbar"/>').hide().appendTo(node),
3201
- toast : $('<div class="elfinder-toast"/>').appendTo(node),
3202
- bottomtray : $('<div class="elfinder-bottomtray">').appendTo(node)
3203
  };
3204
 
3205
  /**
3206
- * UI Auto Hide Functions
3207
- * Each auto hide function mast be call to `fm.trigger('uiautohide')` at end of process
3208
  *
3209
- * @type Array
3210
- **/
3211
- this.uiAutoHide = [];
 
 
 
3212
 
3213
- // trigger `uiautohide`
3214
- this.one('open', function() {
3215
- if (self.uiAutoHide.length) {
3216
- setTimeout(function() {
3217
- self.trigger('uiautohide');
3218
- }, 500);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3219
  }
3220
- });
3221
-
3222
- // Auto Hide Functions sequential processing start
3223
- this.bind('uiautohide', function() {
3224
- if (self.uiAutoHide.length) {
3225
- self.uiAutoHide.shift()();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3226
  }
3227
- });
3228
-
3229
- // load required ui
3230
- $.each(this.options.ui || [], function(i, ui) {
3231
- var name = 'elfinder'+ui,
3232
- opts = self.options.uiOptions[ui] || {};
3233
-
3234
- if (!self.ui[ui] && $.fn[name]) {
3235
- // regist to self.ui before make instance
3236
- self.ui[ui] = $('<'+(opts.tag || 'div')+'/>').appendTo(node);
3237
- self.ui[ui][name](self, opts);
3238
  }
3239
- });
3240
-
3241
-
3242
-
3243
- // store instance in node
3244
- node[0].elfinder = this;
3245
-
3246
- // make node resizable
3247
- this.options.resizable
3248
- && $.fn.resizable
3249
- && node.resizable({
3250
- resize : function(e, ui) {
3251
- self.resize(ui.size.width, ui.size.height);
3252
- },
3253
- handles : 'se',
3254
- minWidth : 300,
3255
- minHeight : 200
3256
- });
3257
-
3258
- if (this.options.width) {
3259
- width = this.options.width;
3260
- }
3261
 
3262
- if (this.options.height) {
3263
- height = parseInt(this.options.height);
3264
- }
 
 
 
 
 
3265
 
3266
- if (this.options.soundPath) {
3267
- soundPath = this.options.soundPath.replace(/\/+$/, '') + '/';
3268
- }
 
3269
 
3270
- // update size
3271
- self.resize(width, height);
3272
-
3273
- // attach events to document
3274
- $(document)
3275
- // disable elfinder on click outside elfinder
3276
- .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !$(e.target).closest(node).length && self.disable(); })
3277
- // exec shortcuts
3278
- .on(keydown+' '+keypress, execShortcut);
3279
-
3280
- // attach events to window
3281
- self.options.useBrowserHistory && $(window)
3282
- .on('popstate.' + namespace, function(ev) {
3283
- var target = ev.originalEvent.state && ev.originalEvent.state.thash;
3284
- target && !$.isEmptyObject(self.files()) && self.request({
3285
- data : {cmd : 'open', target : target, onhistory : 1},
3286
- notify : {type : 'open', cnt : 1, hideCnt : true},
3287
- syncOnFail : true
3288
- });
3289
- });
3290
 
3291
- // send initial request and start to pray >_<
3292
- this.trigger('init')
3293
- .request({
3294
- data : {cmd : 'open', target : self.startDir(), init : 1, tree : this.ui.tree ? 1 : 0},
3295
- preventDone : true,
3296
- notify : {type : 'open', cnt : 1, hideCnt : true},
3297
- freeze : true
3298
- })
3299
- .fail(function() {
3300
- self.trigger('fail').disable().lastDir('');
3301
- listeners = {};
3302
- shortcuts = {};
3303
- $(document).add(node).off('.'+namespace);
3304
- self.trigger = function() { };
3305
- })
3306
- .done(function(data) {
3307
- // detect elFinder node z-index
3308
- var ni = node.css('z-index');
3309
- if (ni && ni !== 'auto' && ni !== 'inherit') {
3310
- self.zIndex = ni;
3311
- } else {
3312
- node.parents().each(function(i, n) {
3313
- var z = $(n).css('z-index');
3314
- if (z !== 'auto' && z !== 'inherit' && (z = parseInt(z))) {
3315
- self.zIndex = z;
3316
- return false;
3317
  }
3318
- });
3319
- }
3320
-
3321
- self.load().debug('api', self.api);
3322
- open(data);
3323
- self.trigger('open', data);
3324
-
3325
- if (inFrame && self.options.enableAlways) {
3326
- $(window).focus();
3327
- }
3328
- });
3329
-
3330
- // update ui's size after init
3331
- this.one('load', function() {
3332
- node.trigger('resize');
3333
- });
3334
-
3335
- (function(){
3336
- var tm;
3337
- $(window).on('resize.' + namespace, function(e){
3338
- if (e.target === this) {
3339
- tm && clearTimeout(tm);
3340
- tm = setTimeout(function() {
3341
- self.trigger('resize', {width : node.width(), height : node.height()});
3342
- }, 100);
3343
- }
3344
- })
3345
- .on('beforeunload.' + namespace,function(e){
3346
- var msg, cnt;
3347
- if (node.is(':visible')) {
3348
- if (self.ui.notify.children().length && $.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) {
3349
- msg = self.i18n('ntfsmth');
3350
- } else if (node.find('.'+self.res('class', 'editing')).length && $.inArray('editingFile', self.options.windowCloseConfirm) !== -1) {
3351
- msg = self.i18n('editingFile');
3352
- } else if ((cnt = Object.keys(self.selected()).length) && $.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) {
3353
- msg = self.i18n('hasSelected', ''+cnt);
3354
- } else if ((cnt = Object.keys(self.clipboard()).length) && $.inArray('hasClipboardData', self.options.windowCloseConfirm) !== -1) {
3355
- msg = self.i18n('hasClipboard', ''+cnt);
3356
- }
3357
- if (msg) {
3358
- e.returnValue = msg;
3359
- return msg;
3360
- }
3361
- }
3362
- self.trigger('unload');
3363
- });
3364
- })();
3365
-
3366
- // bind window onmessage for CORS
3367
- $(window).on('message.' + namespace, function(e){
3368
- var res = e.originalEvent || null,
3369
- obj, data;
3370
- if (res && self.uploadURL.indexOf(res.origin) === 0) {
3371
- try {
3372
- obj = JSON.parse(res.data);
3373
- data = obj.data || null;
3374
- if (data) {
3375
- if (data.error) {
3376
- if (obj.bind) {
3377
- self.trigger(obj.bind+'fail', data);
3378
- }
3379
- self.error(data.error);
3380
  } else {
3381
- data.warning && self.error(data.warning);
3382
- data.removed && data.removed.length && self.remove(data);
3383
- data.added && data.added.length && self.add(data);
3384
- data.changed && data.changed.length && self.change(data);
3385
- if (obj.bind) {
3386
- self.trigger(obj.bind, data);
3387
- self.trigger(obj.bind+'done');
3388
- }
3389
- data.sync && self.sync();
3390
  }
3391
  }
3392
- } catch (e) {
3393
- self.sync();
3394
- }
 
 
 
 
 
 
 
 
 
 
 
 
3395
  }
3396
- });
3397
-
3398
- // elFinder enable always
3399
- if (self.options.enableAlways) {
3400
- $(window).on('focus.' + namespace, function(e){
3401
- (e.target === this) && self.enable();
3402
- });
3403
- if (inFrame) {
3404
- $(window.top).on('focus.' + namespace, function() {
3405
- if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) {
3406
- setTimeout(function() {
3407
- $(window).focus();
3408
- }, 10);
3409
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3410
  });
3411
  }
3412
- } else if (inFrame) {
3413
- $(window).on('blur.' + namespace, function(e){
3414
- enabled && e.target === this && self.disable();
3415
- });
3416
- }
3417
-
3418
- (function() {
3419
- var navbar = self.getUI('navbar'),
3420
- cwd = self.getUI('cwd').parent();
3421
-
3422
- self.autoScroll = {
3423
- navbarUp : function(v) {
3424
- navbar.scrollTop(Math.max(0, navbar.scrollTop() - v));
3425
- },
3426
- navbarDown : function(v) {
3427
- navbar.scrollTop(navbar.scrollTop() + v);
3428
- },
3429
- cwdUp : function(v) {
3430
- cwd.scrollTop(Math.max(0, cwd.scrollTop() - v));
3431
- },
3432
- cwdDown : function(v) {
3433
- cwd.scrollTop(cwd.scrollTop() + v);
3434
- }
3435
- };
3436
- })();
3437
-
3438
- if (self.dragUpload) {
3439
- // add event listener for HTML5 DnD upload
3440
- (function() {
3441
- var isin = function(e) {
3442
- return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && $(e.target).closest('div.ui-dialog-content').length === 0);
3443
- },
3444
- ent = 'native-drag-enter',
3445
- disable = 'native-drag-disable',
3446
- c = 'class',
3447
- navdir = self.res(c, 'navdir'),
3448
- droppable = self.res(c, 'droppable'),
3449
- dropover = self.res(c, 'adroppable'),
3450
- arrow = self.res(c, 'navarrow'),
3451
- clDropActive = self.res(c, 'adroppable'),
3452
- wz = self.getUI('workzone'),
3453
- ltr = (self.direction === 'ltr'),
3454
- clearTm = function() {
3455
- autoScrTm && clearTimeout(autoScrTm);
3456
- autoScrTm = null;
3457
- },
3458
- wzRect, autoScrFn, autoScrTm;
3459
 
3460
- node.on('dragenter', function(e) {
3461
- clearTm();
3462
- if (isin(e)) {
3463
- e.preventDefault();
3464
- e.stopPropagation();
3465
- wzRect = wz.data('rectangle');
3466
- }
3467
- })
3468
- .on('dragleave', function(e) {
3469
- clearTm();
3470
- if (isin(e)) {
3471
- e.preventDefault();
3472
- e.stopPropagation();
3473
- }
3474
- })
3475
- .on('dragover', function(e) {
3476
- var autoUp;
3477
- if (isin(e)) {
3478
- e.preventDefault();
3479
- e.stopPropagation();
3480
- e.originalEvent.dataTransfer.dropEffect = 'none';
3481
- if (! autoScrTm) {
3482
- autoScrTm = setTimeout(function() {
3483
- var wzBottom = wzRect.top + wzRect.height,
3484
- fn;
3485
- if ((autoUp = e.pageY < wzRect.top) || e.pageY > wzBottom ) {
3486
- if (wzRect.cwdEdge > e.pageX) {
3487
- fn = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down');
 
 
 
 
 
 
 
 
 
 
 
 
 
3488
  } else {
3489
- fn = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down');
3490
  }
3491
- self.autoScroll[fn](Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom), 1.3));
3492
- }
3493
- autoScrTm = null;
3494
- }, 20);
3495
- }
3496
- } else {
3497
- clearTm();
3498
- }
3499
- })
3500
- .on('drop', function(e) {
3501
- clearTm();
3502
- if (isin(e)) {
3503
- e.stopPropagation();
3504
- e.preventDefault();
3505
- }
3506
- });
3507
-
3508
- node.on('dragenter', '.native-droppable', function(e){
3509
- if (e.originalEvent.dataTransfer) {
3510
- var $elm = $(e.currentTarget),
3511
- id = e.currentTarget.id || null,
3512
- cwd = null,
3513
- elfFrom;
3514
- if (!id) { // target is cwd
3515
- cwd = self.cwd();
3516
- $elm.data(disable, false);
3517
- try {
3518
- $.each(e.originalEvent.dataTransfer.types, function(i, v){
3519
- if (v.substr(0, 13) === 'elfinderfrom:') {
3520
- elfFrom = v.substr(13).toLowerCase();
3521
  }
3522
  });
3523
- } catch(e) {}
3524
- }
3525
- if (!cwd || (cwd.write && (!elfFrom || elfFrom !== (window.location.href + cwd.hash).toLowerCase()))) {
3526
- e.preventDefault();
3527
- e.stopPropagation();
3528
- $elm.data(ent, true);
3529
- $elm.addClass(clDropActive);
3530
- } else {
3531
- $elm.data(disable, true);
3532
- }
3533
- }
3534
- })
3535
- .on('dragleave', '.native-droppable', function(e){
3536
- if (e.originalEvent.dataTransfer) {
3537
- var $elm = $(e.currentTarget);
3538
- e.preventDefault();
3539
- e.stopPropagation();
3540
- if ($elm.data(ent)) {
3541
- $elm.data(ent, false);
3542
- } else {
3543
- $elm.removeClass(clDropActive);
3544
- }
3545
- }
3546
- })
3547
- .on('dragover', '.native-droppable', function(e){
3548
- if (e.originalEvent.dataTransfer) {
3549
- var $elm = $(e.currentTarget);
3550
- e.preventDefault();
3551
- e.stopPropagation();
3552
- e.originalEvent.dataTransfer.dropEffect = $elm.data(disable)? 'none' : 'copy';
3553
- $elm.data(ent, false);
3554
- }
3555
- })
3556
- .on('drop', '.native-droppable', function(e){
3557
- if (e.originalEvent && e.originalEvent.dataTransfer) {
3558
- var $elm = $(e.currentTarget)
3559
- id;
3560
- e.preventDefault();
3561
- e.stopPropagation();
3562
- $elm.removeClass(clDropActive);
3563
- if (e.currentTarget.id) {
3564
- id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id);
3565
- } else {
3566
- id = self.cwd().hash;
3567
- }
3568
- e.originalEvent._target = id;
3569
- self.exec('upload', {dropEvt: e.originalEvent, target: id}, void 0, id);
3570
- }
3571
- });
3572
- })();
3573
- }
3574
-
3575
- // Swipe on the touch devices to show/hide of toolbar or navbar
3576
- if (self.UA.Touch) {
3577
- (function() {
3578
- var lastX, lastY, nodeOffset, nodeWidth, nodeTop, navbarW, toolbarH,
3579
- navbar = self.getUI('navbar'),
3580
- toolbar = self.getUI('toolbar'),
3581
- moveOn = function(e) {
3582
- e.preventDefault();
3583
- },
3584
- moveOff = function() {
3585
- $(document).off('touchmove', moveOn);
3586
- },
3587
- handleW, handleH = 50;
3588
-
3589
- node.on('touchstart touchmove touchend', function(e) {
3590
- if (e.type === 'touchend') {
3591
- lastX = false;
3592
- lastY = false;
3593
- moveOff();
3594
- return;
3595
- }
3596
-
3597
- var touches = e.originalEvent.touches || [{}],
3598
- x = touches[0].pageX || null,
3599
- y = touches[0].pageY || null,
3600
- ltr = (self.direction === 'ltr'),
3601
- navbarMode, treeWidth, swipeX, moveX, toolbarT, mode;
3602
-
3603
- if (x === null || y === null || (e.type === 'touchstart' && touches.length > 1)) {
3604
- return;
3605
- }
3606
-
3607
- if (e.type === 'touchstart') {
3608
- nodeOffset = node.offset();
3609
- nodeWidth = node.width();
3610
- if (navbar) {
3611
- lastX = false;
3612
- if (navbar.is(':hidden')) {
3613
- if (! handleW) {
3614
- handleW = Math.max(50, nodeWidth / 10)
3615
- }
3616
- if ((ltr? (x - nodeOffset.left) : (nodeWidth + nodeOffset.left - x)) < handleW) {
3617
- lastX = x;
3618
- }
3619
- } else {
3620
- navbarW = navbar.width();
3621
- treeWidth = Math.max.apply(Math, $.map(navbar.children('.elfinder-tree'), function(c){return $(c).width();}));
3622
- if (ltr) {
3623
- swipeX = (x < nodeOffset.left + navbarW && treeWidth - navbar.scrollLeft() - 5 <= navbarW);
3624
- } else {
3625
- swipeX = (x > nodeOffset.left + nodeWidth - navbarW && treeWidth + navbar.scrollLeft() - 5 <= navbarW);
3626
- }
3627
- if (swipeX) {
3628
- handleW = Math.max(50, nodeWidth / 10);
3629
- lastX = x;
3630
- } else {
3631
- lastX = false;
3632
- }
3633
- }
3634
- }
3635
- if (toolbar) {
3636
- toolbarH = toolbar.height();
3637
- nodeTop = nodeOffset.top;
3638
- if (y - nodeTop < (toolbar.is(':hidden')? handleH : (toolbarH + 30))) {
3639
- lastY = y;
3640
- $(document).on('touchmove.' + namespace, moveOn);
3641
- setTimeout(function() {
3642
- moveOff();
3643
- }, 500);
3644
  } else {
3645
- lastY = false;
3646
- }
3647
- }
3648
- } else {
3649
- if (navbar && lastX !== false) {
3650
- navbarMode = (ltr? (lastX > x) : (lastX < x))? 'navhide' : 'navshow';
3651
- moveX = Math.abs(lastX - x);
3652
- if (navbarMode === 'navhide' && moveX > navbarW * .6
3653
- || (moveX > (navbarMode === 'navhide'? navbarW / 3 : 45)
3654
- && (navbarMode === 'navshow'
3655
- || (ltr? x < nodeOffset.left + 20 : x > nodeOffset.left + nodeWidth - 20)
3656
- ))
3657
- ) {
3658
- self.getUI('navbar').trigger(navbarMode, {handleW: handleW});
3659
- lastX = false;
3660
- }
3661
- }
3662
- if (toolbar && lastY !== false ) {
3663
- toolbarT = toolbar.offset().top;
3664
- if (Math.abs(lastY - y) > Math.min(45, toolbarH / 3)) {
3665
- mode = (lastY > y)? 'slideUp' : 'slideDown';
3666
- if (mode === 'slideDown' || toolbarT + 20 > y) {
3667
- if (toolbar.is(mode === 'slideDown' ? ':hidden' : ':visible')) {
3668
- toolbar.stop(true, true).trigger('toggle', {duration: 100, handleH: handleH});
3669
- moveOff();
3670
- }
3671
- lastY = false;
3672
- }
3673
  }
3674
- }
3675
  }
3676
- });
3677
- })();
3678
- }
3679
-
3680
- // return focus to the window on click (elFInder in the frame)
3681
- if (inFrame) {
3682
- node.on('click', function(e) {
3683
- $(window).focus();
3684
- });
3685
- }
3686
-
3687
- // elFinder to enable by mouse over
3688
- if (this.options.enableByMouseOver) {
3689
- node.on('mouseenter', function(e) {
3690
- (inFrame) && $(window).focus();
3691
- ! self.enabled() && self.enable();
3692
- });
3693
- }
3694
-
3695
- // self.timeEnd('load');
3696
-
3697
- }
3698
-
3699
- /**
3700
- * Prototype
3701
- *
3702
- * @type Object
3703
- */
3704
- elFinder.prototype = {
3705
-
3706
- uniqueid : 0,
3707
-
3708
- res : function(type, id) {
3709
- return this.resources[type] && this.resources[type][id];
3710
- },
3711
-
3712
- /**
3713
- * User os. Required to bind native shortcuts for open/rename
3714
- *
3715
- * @type String
3716
- **/
3717
- OS : navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other',
3718
-
3719
- /**
3720
- * User browser UA.
3721
- * jQuery.browser: version deprecated: 1.3, removed: 1.9
3722
- *
3723
- * @type Object
3724
- **/
3725
- UA : (function(){
3726
- var webkit = !document.uniqueID && !window.opera && !window.sidebar && window.localStorage && 'WebkitAppearance' in document.documentElement.style;
3727
- return {
3728
- // Browser IE <= IE 6
3729
- ltIE6 : typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined",
3730
- // Browser IE <= IE 7
3731
- ltIE7 : typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined",
3732
- // Browser IE <= IE 8
3733
- ltIE8 : typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined",
3734
- IE : document.uniqueID,
3735
- Firefox : window.sidebar,
3736
- Opera : window.opera,
3737
- Webkit : webkit,
3738
- Chrome : webkit && window.chrome,
3739
- Safari : webkit && !window.chrome,
3740
- Mobile : typeof window.orientation != "undefined",
3741
- Touch : typeof window.ontouchstart != "undefined",
3742
- iOS : navigator.platform.match(/^iP(?:[ao]d|hone)/),
3743
- Fullscreen : (typeof (document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen) !== 'undefined')
3744
- };
3745
- })(),
3746
 
3747
  /**
3748
- * Current request command
3749
  *
3750
- * @type String
 
 
3751
  */
3752
- currentReqCmd : '',
 
 
 
 
 
 
 
 
 
 
 
3753
 
3754
  /**
3755
- * Internationalization object
3756
  *
3757
- * @type Object
3758
  */
3759
- i18 : {
3760
- en : {
3761
- translator : '',
3762
- language : 'English',
3763
- direction : 'ltr',
3764
- dateFormat : 'd.m.Y H:i',
3765
- fancyDateFormat : '$1 H:i',
3766
- messages : {}
3767
- },
3768
- months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
3769
- monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'],
3770
-
3771
- days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
3772
- daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
3773
- },
3774
 
3775
  /**
3776
- * File mimetype to kind mapping
3777
- *
3778
- * @type Object
 
3779
  */
3780
- kinds : {
3781
- 'unknown' : 'Unknown',
3782
- 'directory' : 'Folder',
3783
- 'symlink' : 'Alias',
3784
- 'symlink-broken' : 'AliasBroken',
3785
- 'application/x-empty' : 'TextPlain',
3786
- 'application/postscript' : 'Postscript',
3787
- 'application/vnd.ms-office' : 'MsOffice',
3788
- 'application/msword' : 'MsWord',
3789
- 'application/vnd.ms-word' : 'MsWord',
3790
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord',
3791
- 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord',
3792
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord',
3793
- 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord',
3794
- 'application/vnd.ms-excel' : 'MsExcel',
3795
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel',
3796
- 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel',
3797
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel',
3798
- 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel',
3799
- 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel',
3800
- 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel',
3801
- 'application/vnd.ms-powerpoint' : 'MsPP',
3802
- 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP',
3803
- 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP',
3804
- 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP',
3805
- 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP',
3806
- 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP',
3807
- 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP',
3808
- 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP',
3809
- 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP',
3810
- 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP',
3811
- 'application/pdf' : 'PDF',
3812
- 'application/xml' : 'XML',
3813
- 'application/vnd.oasis.opendocument.text' : 'OO',
3814
- 'application/vnd.oasis.opendocument.text-template' : 'OO',
3815
- 'application/vnd.oasis.opendocument.text-web' : 'OO',
3816
- 'application/vnd.oasis.opendocument.text-master' : 'OO',
3817
- 'application/vnd.oasis.opendocument.graphics' : 'OO',
3818
- 'application/vnd.oasis.opendocument.graphics-template' : 'OO',
3819
- 'application/vnd.oasis.opendocument.presentation' : 'OO',
3820
- 'application/vnd.oasis.opendocument.presentation-template' : 'OO',
3821
- 'application/vnd.oasis.opendocument.spreadsheet' : 'OO',
3822
- 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO',
3823
- 'application/vnd.oasis.opendocument.chart' : 'OO',
3824
- 'application/vnd.oasis.opendocument.formula' : 'OO',
3825
- 'application/vnd.oasis.opendocument.database' : 'OO',
3826
- 'application/vnd.oasis.opendocument.image' : 'OO',
3827
- 'application/vnd.openofficeorg.extension' : 'OO',
3828
- 'application/x-shockwave-flash' : 'AppFlash',
3829
- 'application/flash-video' : 'Flash video',
3830
- 'application/x-bittorrent' : 'Torrent',
3831
- 'application/javascript' : 'JS',
3832
- 'application/rtf' : 'RTF',
3833
- 'application/rtfd' : 'RTF',
3834
- 'application/x-font-ttf' : 'TTF',
3835
- 'application/x-font-otf' : 'OTF',
3836
- 'application/x-rpm' : 'RPM',
3837
- 'application/x-web-config' : 'TextPlain',
3838
- 'application/xhtml+xml' : 'HTML',
3839
- 'application/docbook+xml' : 'DOCBOOK',
3840
- 'application/x-awk' : 'AWK',
3841
- 'application/x-gzip' : 'GZIP',
3842
- 'application/x-bzip2' : 'BZIP',
3843
- 'application/x-xz' : 'XZ',
3844
- 'application/zip' : 'ZIP',
3845
- 'application/x-zip' : 'ZIP',
3846
- 'application/x-rar' : 'RAR',
3847
- 'application/x-tar' : 'TAR',
3848
- 'application/x-7z-compressed' : '7z',
3849
- 'application/x-jar' : 'JAR',
3850
- 'text/plain' : 'TextPlain',
3851
- 'text/x-php' : 'PHP',
3852
- 'text/html' : 'HTML',
3853
- 'text/javascript' : 'JS',
3854
- 'text/css' : 'CSS',
3855
- 'text/rtf' : 'RTF',
3856
- 'text/rtfd' : 'RTF',
3857
- 'text/x-c' : 'C',
3858
- 'text/x-csrc' : 'C',
3859
- 'text/x-chdr' : 'CHeader',
3860
- 'text/x-c++' : 'CPP',
3861
- 'text/x-c++src' : 'CPP',
3862
- 'text/x-c++hdr' : 'CPPHeader',
3863
- 'text/x-shellscript' : 'Shell',
3864
- 'application/x-csh' : 'Shell',
3865
- 'text/x-python' : 'Python',
3866
- 'text/x-java' : 'Java',
3867
- 'text/x-java-source' : 'Java',
3868
- 'text/x-ruby' : 'Ruby',
3869
- 'text/x-perl' : 'Perl',
3870
- 'text/x-sql' : 'SQL',
3871
- 'text/xml' : 'XML',
3872
- 'text/x-comma-separated-values' : 'CSV',
3873
- 'text/x-markdown' : 'Markdown',
3874
- 'image/x-ms-bmp' : 'BMP',
3875
- 'image/jpeg' : 'JPEG',
3876
- 'image/gif' : 'GIF',
3877
- 'image/png' : 'PNG',
3878
- 'image/tiff' : 'TIFF',
3879
- 'image/x-targa' : 'TGA',
3880
- 'image/vnd.adobe.photoshop' : 'PSD',
3881
- 'image/xbm' : 'XBITMAP',
3882
- 'image/pxm' : 'PXM',
3883
- 'audio/mpeg' : 'AudioMPEG',
3884
- 'audio/midi' : 'AudioMIDI',
3885
- 'audio/ogg' : 'AudioOGG',
3886
- 'audio/mp4' : 'AudioMPEG4',
3887
- 'audio/x-m4a' : 'AudioMPEG4',
3888
- 'audio/wav' : 'AudioWAV',
3889
- 'audio/x-mp3-playlist' : 'AudioPlaylist',
3890
- 'video/x-dv' : 'VideoDV',
3891
- 'video/mp4' : 'VideoMPEG4',
3892
- 'video/mpeg' : 'VideoMPEG',
3893
- 'video/x-msvideo' : 'VideoAVI',
3894
- 'video/quicktime' : 'VideoMOV',
3895
- 'video/x-ms-wmv' : 'VideoWM',
3896
- 'video/x-flv' : 'VideoFlash',
3897
- 'video/x-matroska' : 'VideoMKV',
3898
- 'video/ogg' : 'VideoOGG'
3899
- },
3900
-
3901
- /**
3902
- * Ajax request data validation rules
3903
- *
3904
- * @type Object
3905
- */
3906
- rules : {
3907
- defaults : function(data) {
3908
- if (!data
3909
- || (data.added && !$.isArray(data.added))
3910
- || (data.removed && !$.isArray(data.removed))
3911
- || (data.changed && !$.isArray(data.changed))) {
3912
- return false;
3913
  }
3914
- return true;
3915
- },
3916
- open : function(data) { return data && data.cwd && data.files && $.isPlainObject(data.cwd) && $.isArray(data.files); },
3917
- tree : function(data) { return data && data.tree && $.isArray(data.tree); },
3918
- parents : function(data) { return data && data.tree && $.isArray(data.tree); },
3919
- tmb : function(data) { return data && data.images && ($.isPlainObject(data.images) || $.isArray(data.images)); },
3920
- upload : function(data) { return data && ($.isPlainObject(data.added) || $.isArray(data.added));},
3921
- search : function(data) { return data && data.files && $.isArray(data.files)}
3922
- },
3923
-
3924
- /**
3925
- * Commands costructors
3926
- *
3927
- * @type Object
3928
- */
3929
- commands : {},
3930
-
3931
  /**
3932
- * Commands to add the item (space delimited)
3933
  *
3934
- * @type String
3935
  */
3936
- cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload',
 
 
 
 
 
 
 
 
 
 
 
 
 
3937
 
3938
- parseUploadData : function(text) {
3939
- var data;
3940
-
3941
- if (!$.trim(text)) {
3942
- return {error : ['errResponse', 'errDataEmpty']};
3943
- }
3944
-
3945
- try {
3946
- data = JSON.parse(text);
3947
- } catch (e) {
3948
- return {error : ['errResponse', 'errDataNotJSON']};
3949
- }
3950
-
3951
- if (!this.validResponse('upload', data)) {
3952
- return {error : ['errResponse']};
3953
  }
3954
- data = this.normalize(data);
3955
- data.removed = $.merge((data.removed || []), $.map(data.added||[], function(f) { return f.hash; }));
3956
- return data;
3957
-
3958
- },
3959
-
3960
- iframeCnt : 0,
3961
-
3962
- uploads : {
3963
- // xhr muiti uploading flag
3964
- xhrUploading: false,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3965
 
3966
  // check file/dir exists
3967
- checkExists: function(files, target, fm) {
3968
  var dfrd = $.Deferred(),
3969
- names, name,
3970
  cancel = function() {
3971
  var i = files.length;
3972
  while (--i > -1) {
3973
  files[i]._remove = true;
3974
  }
3975
- },
3976
- check = function() {
3977
- var renames = [], hashes = {}, existed = [], exists = [], i, c;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3978
 
3979
- var confirm = function(ndx) {
3980
- var last = ndx == exists.length-1,
3981
- opts = {
3982
- title : fm.i18n('cmdupload'),
3983
- text : ['errExists', exists[ndx].name, 'confirmRepl'],
3984
- all : !last,
3985
- accept : {
3986
- label : 'btnYes',
3987
- callback : function(all) {
3988
- !last && !all
3989
- ? confirm(++ndx)
3990
- : dfrd.resolve(renames, hashes);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3991
  }
3992
- },
3993
- reject : {
3994
- label : 'btnNo',
3995
- callback : function(all) {
3996
- var i;
3997
-
3998
- if (all) {
3999
- i = exists.length;
4000
- while (ndx < i--) {
4001
- files[exists[i].i]._remove = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4002
  }
 
 
 
4003
  } else {
4004
- files[exists[ndx].i]._remove = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4005
  }
4006
-
4007
- !last && !all
4008
- ? confirm(++ndx)
4009
- : dfrd.resolve(renames, hashes);
4010
  }
4011
- },
4012
- cancel : {
4013
- label : 'btnCancel',
4014
- callback : function() {
4015
- cancel();
4016
- dfrd.resolve(renames, hashes);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4017
  }
4018
- },
4019
- buttons : [
4020
- {
4021
- label : 'btnBackup',
4022
- callback : function(all) {
4023
- var i;
4024
- if (all) {
4025
- i = exists.length;
4026
- while (ndx < i--) {
4027
- renames.push(exists[i].name);
4028
- }
4029
- } else {
4030
- renames.push(exists[ndx].name);
4031
- }
4032
- !last && !all
4033
- ? confirm(++ndx)
4034
- : dfrd.resolve(renames, hashes);
4035
  }
4036
  }
4037
- ]
4038
- };
4039
- if (fm.iframeCnt > 0) {
4040
- delete opts.reject;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4041
  }
4042
- fm.confirm(opts);
4043
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4044
 
4045
- if (! fm.file(target).read) {
4046
- // for dropbox type
4047
- dfrd.resolve([]);
4048
- return;
 
 
 
 
4049
  }
4050
 
4051
- names = $.map(files, function(file, i) { return file.name? {i: i, name: file.name} : null ;});
 
 
 
 
 
 
 
 
 
4052
 
4053
- name = $.map(names, function(item) { return item.name;});
4054
- fm.request({
4055
- data : {cmd : 'ls', target : target, intersect : name},
4056
- notify : {type : 'preupload', cnt : 1, hideCnt : true},
4057
- preventFail : true
4058
- })
4059
- .done(function(data) {
4060
- var existedArr, cwdItems;
4061
- if (data) {
4062
- if (data.error) {
4063
- cancel();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4064
  } else {
4065
- if (fm.options.overwriteUploadConfirm && ! fm.UA.iOS && fm.option('uploadOverwrite', target)) {
4066
- if (data.list) {
4067
- if ($.isArray(data.list)) {
4068
- existed = data.list || [];
4069
- } else {
4070
- existedArr = [];
4071
- existed = $.map(data.list, function(n) {
4072
- if (typeof n === 'string') {
4073
- return n;
4074
- } else {
4075
- // support to >=2.1.11 plugin Normalizer, Sanitizer
4076
- existedArr = existedArr.concat(n);
4077
- return null;
4078
- }
4079
- });
4080
- if (existedArr.length) {
4081
- existed = existed.concat(existedArr);
4082
- }
4083
- hashes = data.list;
4084
- }
4085
- exists = $.map(names, function(name){
4086
- return $.inArray(name.name, existed) !== -1 ? name : null ;
4087
- });
4088
- if (existed.length && target == fm.cwd().hash) {
4089
- cwdItems = $.map(fm.files(), function(file) { return (file.phash == target) ? file.name : null; } );
4090
- if ($.map(existed, function(n) {
4091
- return $.inArray(n, cwdItems) === -1? true : null;
4092
- }).length){
4093
- fm.sync();
4094
- }
4095
  }
4096
  }
4097
  }
4098
  }
 
4099
  }
4100
- if (exists.length > 0) {
4101
- confirm(0);
 
 
 
4102
  } else {
4103
- dfrd.resolve([]);
4104
  }
4105
- })
4106
- .fail(function(error) {
4107
- cancel();
4108
- dfrd.resolve([]);
4109
- error && fm.error(error);
 
4110
  });
4111
- };
4112
- if (fm.api >= 2.1 && typeof files[0] == 'object') {
4113
- check();
4114
- return dfrd;
4115
- } else {
4116
- return dfrd.resolve([]);
4117
- }
4118
- },
4119
-
4120
- // check droped contents
4121
- checkFile : function(data, fm, target) {
4122
- if (!!data.checked || data.type == 'files') {
4123
- return data.files;
4124
- } else if (data.type == 'data') {
4125
- var dfrd = $.Deferred(),
4126
- files = [],
4127
- paths = [],
4128
- dirctorys = [],
4129
- entries = [],
4130
- processing = 0,
4131
- items,
4132
- mkdirs = [],
4133
 
4134
- readEntries = function(dirReader) {
4135
- var toArray = function(list) {
4136
- return Array.prototype.slice.call(list || []);
4137
- };
4138
- },
4139
 
4140
- doScan = function(items) {
4141
- var dirReader, entry,
4142
- entries = [],
4143
- toArray = function(list) {
4144
- return Array.prototype.slice.call(list || [], 0);
4145
- };
4146
- var length = items.length;
4147
- for (var i = 0; i < length; i++) {
4148
- entry = items[i];
4149
- if (entry) {
4150
- if (entry.isFile) {
4151
- processing++;
4152
- entry.file(function (file) {
4153
- if (! (fm.OS == 'win' && file.name.match(/^(?:desktop\.ini|thumbs\.db)$/i))
4154
- &&
4155
- ! (fm.OS == 'mac' && file.name.match(/^\.ds_store$/i))) {
4156
- paths.push(entry.fullPath || '');
4157
- files.push(file);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4158
  }
4159
- processing--;
4160
- });
4161
- } else if (entry.isDirectory) {
4162
- if (fm.api >= 2.1) {
4163
- processing++;
4164
- mkdirs.push(entry.fullPath);
4165
- dirReader = entry.createReader();
4166
- var entries = [];
4167
- // Call the reader.readEntries() until no more results are returned.
4168
- var readEntries = function() {
4169
- dirReader.readEntries (function(results) {
4170
- if (!results.length) {
4171
- for (var i = 0; i < entries.length; i++) {
4172
- doScan([entries[i]]);
 
 
 
 
 
 
 
 
4173
  }
4174
- processing--;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4175
  } else {
4176
- entries = entries.concat(toArray(results));
4177
- readEntries();
4178
  }
4179
- }, function(){
4180
- processing--;
4181
- });
4182
- };
4183
- readEntries(); // Start reading dirs.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4184
  }
4185
- }
 
 
 
 
4186
  }
4187
  }
4188
- };
4189
-
4190
- items = $.map(data.files.items, function(item){
4191
- return item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry();
4192
- });
4193
- if (items.length > 0) {
4194
- fm.uploads.checkExists(items, target, fm).done(function(renames, hashes){
4195
- var notifyto, dfds = [];
4196
- if (fm.options.overwriteUploadConfirm && ! fm.UA.iOS && fm.option('uploadOverwrite', target)) {
4197
- items = $.map(items, function(item){
4198
- var i, bak, hash, dfd, hi;
4199
- if (item.isDirectory) {
4200
- i = $.inArray(item.name, renames);
4201
- if (i !== -1) {
4202
- renames.splice(i, 1);
4203
- bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, '');
4204
- $.each(hashes, function(h, name) {
4205
- if (item.name == name) {
4206
- hash = h;
4207
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4208
  }
4209
- });
4210
- if (! hash) {
4211
- hash = fm.fileByName(item.name, target).hash;
4212
  }
4213
- fm.lockfiles({files : [hash]});
4214
- dfd = fm.request({
4215
- data : {cmd : 'rename', target : hash, name : bak},
4216
- notify : {type : 'rename', cnt : 1}
4217
- })
4218
- .fail(function(error) {
4219
- item._remove = true;
4220
- fm.sync();
4221
- })
4222
- .always(function() {
4223
- fm.unlockfiles({files : [hash]})
4224
- });
4225
- dfds.push(dfd);
4226
  }
4227
- }
4228
- return !item._remove? item : null;
4229
- });
4230
- }
4231
- $.when.apply($, dfds).done(function(){
4232
- if (items.length > 0) {
4233
- notifyto = setTimeout(function() {
4234
- fm.notify({type : 'readdir', cnt : 1, hideCnt: true});
4235
- }, fm.options.notifyDelay);
4236
- doScan(items);
4237
- setTimeout(function wait() {
4238
- if (processing > 0) {
4239
- setTimeout(wait, 10);
4240
- } else {
4241
- notifyto && clearTimeout(notifyto);
4242
- fm.notify({type : 'readdir', cnt : -1});
4243
- dfrd.resolve([files, paths, renames, hashes, mkdirs]);
4244
  }
4245
- }, 10);
4246
- } else {
4247
- dfrd.reject();
4248
- }
4249
- });
4250
- });
4251
- return dfrd.promise();
4252
- } else {
4253
- return dfrd.reject();
4254
- }
4255
- } else {
4256
- var ret = [];
4257
- var check = [];
4258
- var str = data.files[0];
4259
- if (data.type == 'html') {
4260
- var tmp = $("<html/>").append($.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))),
4261
- atag;
4262
- $('img[_elfsrc]', tmp).each(function(){
4263
- var url, purl,
4264
- self = $(this),
4265
- pa = self.closest('a');
4266
- if (pa && pa.attr('href') && pa.attr('href').match(/\.(?:jpe?g|gif|bmp|png)/i)) {
4267
- purl = pa.attr('href');
4268
- }
4269
- url = self.attr('_elfsrc');
4270
- if (url) {
4271
- if (purl) {
4272
- $.inArray(purl, ret) == -1 && ret.push(purl);
4273
- $.inArray(url, check) == -1 && check.push(url);
4274
  } else {
4275
- $.inArray(url, ret) == -1 && ret.push(url);
4276
- }
4277
- }
4278
- });
4279
- atag = $('a[href]', tmp);
4280
- atag.each(function(){
4281
- var loc,
4282
- parseUrl = function(url) {
4283
- var a = document.createElement('a');
4284
- a.href = url;
4285
- return a;
4286
- };
4287
- if ($(this).text()) {
4288
- loc = parseUrl($(this).attr('href'));
4289
- if (loc.href && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i))) {
4290
- if ($.inArray(loc.href, ret) == -1 && $.inArray(loc.href, check) == -1) ret.push(loc.href);
4291
  }
 
 
 
 
 
4292
  }
 
 
4293
  });
4294
- } else {
4295
- var regex, m, url;
4296
- regex = /(http[^<>"{}|\\^\[\]`\s]+)/ig;
4297
- while (m = regex.exec(str)) {
4298
- url = m[1].replace(/&amp;/g, '&');
4299
- if ($.inArray(url, ret) == -1) ret.push(url);
4300
- }
4301
  }
4302
- return ret;
4303
  }
4304
- },
4305
 
4306
- // upload transport using XMLHttpRequest
4307
- xhr : function(data, fm) {
 
 
 
4308
  var self = fm ? fm : this,
4309
- node = self.getUI(),
4310
- xhr = new XMLHttpRequest(),
4311
- notifyto = null, notifyto2 = null,
4312
- dataChecked = data.checked,
4313
- isDataType = (data.isDataType || data.type == 'data'),
4314
- target = (data.target || self.cwd().hash),
4315
- chunkEnable = (self.option('uploadMaxConn', target) != -1),
4316
- multiMax = Math.min(5, Math.max(1, self.option('uploadMaxConn', target))),
4317
- timeout = 30000, // 30 sec
4318
- retryWait = 10000, // 10 sec
4319
- retryMax = 18, // 10 sec * 18 = 180 sec (Max 3 mins)
4320
- retry = 0,
4321
  dfrd = $.Deferred()
4322
  .fail(function(error) {
4323
- if (self.uploads.xhrUploading) {
4324
- setTimeout(function() { self.sync(); }, 5000);
4325
- var file = files.length? (isDataType? files[0][0] : files[0]) : {};
4326
- if (file._cid) {
4327
- formData = new FormData();
4328
- files = [{_chunkfail: true}];
4329
- formData.append('chunk', file._chunk);
4330
- formData.append('cid' , file._cid);
4331
- isDataType = false;
4332
- send(files);
4333
- }
4334
- }
4335
- self.uploads.xhrUploading = false;
4336
- files = null;
4337
  error && self.error(error);
4338
- })
4339
- .done(function(data) {
4340
- xhr = null;
4341
- self.uploads.xhrUploading = false;
4342
- files = null;
4343
- if (data) {
4344
- self.currentReqCmd = 'upload';
4345
- data.warning && self.error(data.warning);
4346
- data.removed && self.remove(data);
4347
- data.added && self.add(data);
4348
- data.changed && self.change(data);
4349
- self.trigger('upload', data);
4350
- self.trigger('uploaddone');
4351
- data.sync && self.sync();
4352
- data.debug && fm.debug('backend-debug', data);
4353
- }
4354
- })
4355
- .always(function() {
4356
- // unregist fnAbort function
4357
- node.off('uploadabort', fnAbort);
4358
- $(window).off('unload', fnAbort);
4359
- notifyto && clearTimeout(notifyto);
4360
- notifyto2 && clearTimeout(notifyto2);
4361
- dataChecked && !data.multiupload && checkNotify() && self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0});
4362
- chunkMerge && notifyElm.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1});
4363
  }),
4364
- formData = new FormData(),
4365
- files = data.input ? data.input.files : self.uploads.checkFile(data, self, target),
4366
- cnt = data.checked? (isDataType? files[0].length : files.length) : files.length,
4367
- loaded = 0, prev,
4368
- filesize = 0,
4369
- notify = false,
4370
- notifyElm = self.ui.notify,
4371
- cancelBtn = true,
4372
- abort = false,
4373
- checkNotify = function() {
4374
- return notify = (notify || notifyElm.children('.elfinder-notify-upload').length);
4375
- },
4376
- fnAbort = function() {
4377
- abort = true;
4378
- if (xhr) {
4379
- xhr.quiet = true;
4380
- xhr.abort();
4381
- }
4382
- if (checkNotify()) {
4383
- self.notify({type : 'upload', cnt : notifyElm.children('.elfinder-notify-upload').data('cnt') * -1, progress : 0, size : 0});
4384
- }
4385
- },
4386
- cancelToggle = function(show) {
4387
- notifyElm.children('.elfinder-notify-upload').children('.elfinder-notify-cancel')[show? 'show':'hide']();
4388
- },
4389
- startNotify = function(size) {
4390
- if (!size) size = filesize;
4391
- return setTimeout(function() {
4392
- notify = true;
4393
- self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size,
4394
- cancel: function() {
4395
- node.trigger('uploadabort');
4396
- }
4397
- });
4398
- prev = loaded;
4399
- if (data.multiupload) {
4400
- cancelBtn && cancelToggle(true);
4401
- } else {
4402
- cancelToggle(cancelBtn && loaded < size);
4403
- }
4404
- }, self.options.notifyDelay);
4405
  },
4406
- renames = (data.renames || null),
4407
- hashes = (data.hashes || null),
4408
- chunkMerge = false;
4409
-
4410
- // regist fnAbort function
4411
- node.one('uploadabort', fnAbort);
4412
- $(window).one('unload.' + fm.namespace, fnAbort);
4413
-
4414
- !chunkMerge && (prev = loaded);
4415
-
4416
- if (!isDataType && !cnt) {
4417
- return dfrd.reject(['errUploadNoFiles']);
4418
- }
4419
-
4420
- xhr.addEventListener('error', function() {
4421
- if (xhr.status == 0) {
4422
- if (abort) {
4423
- dfrd.reject();
4424
- } else {
4425
- // ff bug while send zero sized file
4426
- // for safari - send directory
4427
- if (!isDataType && data.files && $.map(data.files, function(f){return f.size === (self.UA.Safari? 1802 : 0)? f : null;}).length) {
4428
- errors.push('errFolderUpload');
4429
- dfrd.reject(['errAbort', 'errFolderUpload']);
4430
- } else {
4431
- if (retry++ <= retryMax) {
4432
- setTimeout(function() {
4433
- if (! abort) {
4434
- filesize = 0;
4435
- xhr.open('POST', self.uploadURL, true);
4436
- xhr.timeout = timeout;
4437
- xhr.send(formData);
4438
- }
4439
- }, retryWait);
4440
- } else {
4441
- node.trigger('uploadabort');
4442
- dfrd.reject(['errAbort']);
4443
  }
4444
- }
4445
- }
4446
- } else {
4447
- node.trigger('uploadabort');
4448
- dfrd.reject('errConnect');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4449
  }
4450
- }, false);
4451
-
4452
- xhr.addEventListener('abort', function() {
4453
- dfrd.reject(['errConnect', 'errAbort']);
4454
- }, false);
4455
 
4456
- xhr.addEventListener('load', function(e) {
4457
- var status = xhr.status, res, curr = 0, error = '';
 
 
 
 
 
 
4458
 
4459
- if (status >= 400) {
4460
- if (status > 500) {
4461
- error = 'errResponse';
4462
- } else {
4463
- error = 'errConnect';
4464
- }
4465
- } else {
4466
- if (xhr.readyState != 4) {
4467
- error = ['errConnect', 'errTimeout']; // am i right?
4468
- }
4469
- if (!xhr.responseText) {
4470
- error = ['errResponse', 'errDataEmpty'];
4471
- }
4472
  }
4473
 
4474
- if (error) {
4475
- node.trigger('uploadabort');
4476
- var file = isDataType? files[0][0] : files[0];
4477
- return dfrd.reject(file._cid? null : error);
4478
  }
4479
 
4480
- loaded = filesize;
 
 
4481
 
4482
- if (checkNotify() && (curr = loaded - prev)) {
4483
- self.notify({type : 'upload', cnt : 0, progress : curr, size : 0});
4484
- }
4485
-
4486
- res = self.parseUploadData(xhr.responseText);
4487
 
4488
- // chunked upload commit
4489
- if (res._chunkmerged) {
4490
- formData = new FormData();
4491
- var _file = [{_chunkmerged: res._chunkmerged, _name: res._name, _mtime: res._mtime}];
4492
- chunkMerge = true;
4493
- node.off('uploadabort', fnAbort);
4494
- notifyto2 = setTimeout(function() {
4495
- self.notify({type : 'chunkmerge', cnt : 1});
4496
- }, self.options.notifyDelay);
4497
- isDataType? send(_file, files[1]) : send(_file);
4498
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4499
  }
4500
-
4501
- res._multiupload = data.multiupload? true : false;
4502
- if (res.error) {
4503
- self.trigger('uploadfail', res);
4504
- if (res._chunkfailure || res._multiupload) {
4505
- abort = true;
4506
- self.uploads.xhrUploading = false;
4507
- notifyto && clearTimeout(notifyto);
4508
- if (notifyElm.children('.elfinder-notify-upload').length) {
4509
- self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0});
4510
- dfrd.reject(res.error);
4511
- } else {
4512
- // for multi connection
4513
- dfrd.reject();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4514
  }
4515
- } else {
4516
- dfrd.reject(res.error);
4517
  }
4518
- } else {
4519
- dfrd.resolve(res);
4520
  }
4521
- }, false);
4522
-
4523
- xhr.upload.addEventListener('loadstart', function(e) {
4524
- if (!chunkMerge && e.lengthComputable) {
4525
- loaded = e.loaded;
4526
- retry && (loaded = 0);
4527
- filesize = e.total;
4528
- if (!loaded) {
4529
- loaded = parseInt(filesize * 0.05);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4530
  }
4531
- if (checkNotify()) {
4532
- self.notify({type : 'upload', cnt : 0, progress : loaded - prev, size : data.multiupload? 0 : filesize});
4533
- prev = loaded;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4534
  }
4535
  }
4536
- }, false);
4537
-
4538
- xhr.upload.addEventListener('progress', function(e) {
4539
- var curr;
4540
-
4541
- if (e.lengthComputable && !chunkMerge) {
4542
-
4543
- loaded = e.loaded;
4544
-
4545
- // to avoid strange bug in safari (not in chrome) with drag&drop.
4546
- // bug: macos finder opened in any folder,
4547
- // reset safari cache (option+command+e), reload elfinder page,
4548
- // drop file from finder
4549
- // on first attempt request starts (progress callback called ones) but never ends.
4550
- // any next drop - successfull.
4551
- if (!data.checked && loaded > 0 && !notifyto) {
4552
- notifyto = startNotify(xhr._totalSize - loaded);
4553
  }
4554
-
4555
- if (!filesize) {
4556
- retry && (loaded = 0);
4557
- filesize = e.total;
4558
- if (!loaded) {
4559
- loaded = parseInt(filesize * 0.05);
4560
  }
4561
  }
4562
-
4563
- curr = loaded - prev;
4564
- if (checkNotify() && (curr/e.total) >= 0.05) {
4565
- self.notify({type : 'upload', cnt : 0, progress : curr, size : 0});
4566
- prev = loaded;
 
 
 
 
 
 
 
 
 
 
 
4567
  }
4568
 
4569
- if (! data.multiupload && loaded >= filesize) {
4570
- cancelBtn = false;
4571
- cancelToggle(false);
4572
- }
4573
- }
4574
- }, false);
4575
-
4576
- var send = function(files, paths){
4577
- var size = 0,
4578
- fcnt = 1,
4579
- sfiles = [],
4580
- c = 0,
4581
- total = cnt,
4582
- maxFileSize,
4583
- totalSize = 0,
4584
- chunked = [],
4585
- chunkID = new Date().getTime().toString().substr(-9), // for take care of the 32bit backend system
4586
- BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize
4587
- blobSlice = chunkEnable? false : '',
4588
- blobSize, i, start, end, chunks, blob, chunk, added, done, last, failChunk,
4589
- multi = function(files, num){
4590
- var sfiles = [], cid, sfilesLen = 0, cancelChk;
4591
- if (!abort) {
4592
- while(files.length && sfiles.length < num) {
4593
- sfiles.push(files.shift());
4594
  }
4595
- sfilesLen = sfiles.length;
4596
- if (sfilesLen) {
4597
- cancelChk = sfilesLen;
4598
- for (var i=0; i < sfilesLen; i++) {
4599
- if (abort) {
4600
- break;
4601
- }
4602
- cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null);
4603
- if (!!failChunk[cid]) {
4604
- last--;
4605
- continue;
4606
- }
4607
- fm.exec('upload', {
4608
- type: data.type,
4609
- isDataType: isDataType,
4610
- files: sfiles[i],
4611
- checked: true,
4612
- target: target,
4613
- renames: renames,
4614
- hashes: hashes,
4615
- multiupload: true}, void 0, target)
4616
- .fail(function(error) {
4617
- if (error && error === 'No such command') {
4618
- abort = true;
4619
- fm.error(['errUpload', 'errPerm']);
4620
- }
4621
- if (cid) {
4622
- failChunk[cid] = true;
4623
- }
4624
- })
4625
- .always(function(e) {
4626
- if (e && e.added) added = $.merge(added, e.added);
4627
- if (last <= ++done) {
4628
- fm.trigger('multiupload', {added: added});
4629
- notifyto && clearTimeout(notifyto);
4630
- if (checkNotify()) {
4631
- self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0});
4632
  }
4633
  }
4634
- if (files.length) {
4635
- multi(files, 1); // Next one
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4636
  } else {
4637
- if (--cancelChk <= 1) {
4638
- cancelBtn = false;
4639
- cancelToggle(false);
4640
- }
 
 
 
 
4641
  }
4642
  });
4643
- }
4644
- }
4645
- }
4646
- if (sfiles.length < 1 || abort) {
4647
- if (abort) {
4648
- notifyto && clearTimeout(notifyto);
4649
- if (cid) {
4650
- failChunk[cid] = true;
4651
- }
4652
- dfrd.reject();
4653
- } else {
4654
- dfrd.resolve();
4655
- self.uploads.xhrUploading = false;
4656
- }
4657
- }
4658
- },
4659
- check = function(){
4660
- if (!self.uploads.xhrUploading) {
4661
- self.uploads.xhrUploading = true;
4662
- multi(sfiles, multiMax); // Max connection: 3
4663
- } else {
4664
- setTimeout(function(){ check(); }, 100);
4665
- }
4666
- };
4667
 
4668
- if (! dataChecked && (isDataType || data.type == 'files')) {
4669
- if (! (maxFileSize = fm.option('uploadMaxSize', target))) {
4670
- maxFileSize = 0;
4671
- }
4672
- for (i=0; i < files.length; i++) {
4673
- blob = files[i];
4674
- blobSize = blob.size;
4675
- if (blobSlice === false) {
4676
- blobSlice = '';
4677
- if (self.api >= 2.1) {
4678
- if ('slice' in blob) {
4679
- blobSlice = 'slice';
4680
- } else if ('mozSlice' in blob) {
4681
- blobSlice = 'mozSlice';
4682
- } else if ('webkitSlice' in blob) {
4683
- blobSlice = 'webkitSlice';
4684
  }
4685
  }
 
 
 
 
 
4686
  }
4687
 
4688
- // file size check
4689
- if ((maxFileSize && blobSize > maxFileSize) || (!blobSlice && fm.uplMaxSize && blobSize > fm.uplMaxSize)) {
4690
- self.error(self.i18n('errUploadFile', blob.name) + ' ' + self.i18n('errUploadFileSize'));
4691
- cnt--;
4692
- total--;
4693
- continue;
4694
- }
4695
-
4696
- // file mime check
4697
- if (blob.type && ! self.uploadMimeCheck(blob.type, target)) {
4698
- self.error(self.i18n('errUploadFile', blob.name) + ' ' + self.i18n('errUploadMime') + ' (' + self.escape(blob.type) + ')');
4699
- cnt--;
4700
- total--;
4701
- continue;
4702
  }
4703
 
4704
- if (blobSlice && blobSize > BYTES_PER_CHUNK) {
4705
- start = 0;
4706
- end = BYTES_PER_CHUNK;
4707
- chunks = -1;
4708
- total = Math.floor(blobSize / BYTES_PER_CHUNK);
4709
-
4710
- totalSize += blobSize;
4711
- chunked[chunkID] = 0;
4712
- while(start <= blobSize) {
4713
- chunk = blob[blobSlice](start, end);
4714
- chunk._chunk = blob.name + '.' + (++chunks) + '_' + total + '.part';
4715
- chunk._cid = chunkID;
4716
- chunk._range = start + ',' + chunk.size + ',' + blobSize;
4717
- chunked[chunkID]++;
4718
-
4719
- if (size) {
4720
- c++;
4721
- }
4722
- if (typeof sfiles[c] == 'undefined') {
4723
- sfiles[c] = [];
4724
- if (isDataType) {
4725
- sfiles[c][0] = [];
4726
- sfiles[c][1] = [];
4727
- }
4728
- }
4729
- size = BYTES_PER_CHUNK;
4730
- fcnt = 1;
4731
- if (isDataType) {
4732
- sfiles[c][0].push(chunk);
4733
- sfiles[c][1].push(paths[i]);
4734
- } else {
4735
- sfiles[c].push(chunk);
4736
- }
4737
-
4738
- start = end;
4739
- end = start + BYTES_PER_CHUNK;
4740
  }
4741
- if (chunk == null) {
4742
- self.error(self.i18n('errUploadFile', blob.name) + ' ' + self.i18n('errUploadFileSize'));
4743
- cnt--;
4744
- total--;
4745
- } else {
4746
- total += chunks;
4747
- size = 0;
4748
- fcnt = 1;
4749
- c++;
 
 
4750
  }
4751
- continue;
4752
  }
4753
- if ((fm.uplMaxSize && size + blobSize >= fm.uplMaxSize) || fcnt > fm.uplMaxFile) {
4754
- size = 0;
4755
- fcnt = 1;
4756
- c++;
4757
  }
4758
- if (typeof sfiles[c] == 'undefined') {
4759
- sfiles[c] = [];
4760
- if (isDataType) {
4761
- sfiles[c][0] = [];
4762
- sfiles[c][1] = [];
 
 
 
4763
  }
4764
  }
4765
- if (isDataType) {
4766
- sfiles[c][0].push(blob);
4767
- sfiles[c][1].push(paths[i]);
4768
- } else {
4769
- sfiles[c].push(blob);
4770
  }
4771
- size += blobSize;
4772
- totalSize += blobSize;
4773
- fcnt++;
4774
  }
4775
 
4776
- if (sfiles.length == 0) {
4777
- // no data
4778
- data.checked = true;
4779
- return false;
4780
  }
4781
 
4782
- if (sfiles.length > 1) {
4783
- // multi upload
4784
- notifyto = startNotify(totalSize);
4785
- added = [];
4786
- done = 0;
4787
- last = sfiles.length;
4788
- failChunk = [];
4789
- check();
4790
- return true;
4791
- }
4792
 
4793
- // single upload
4794
- if (isDataType) {
4795
- files = sfiles[0][0];
4796
- paths = sfiles[0][1];
4797
- } else {
4798
- files = sfiles[0];
4799
- }
4800
- }
4801
-
4802
- if (!dataChecked) {
4803
- if (!fm.UA.Safari || !data.files) {
4804
- notifyto = startNotify(totalSize);
4805
- } else {
4806
- xhr._totalSize = totalSize;
4807
- }
4808
- }
4809
-
4810
- dataChecked = true;
4811
-
4812
- if (! files.length) {
4813
- dfrd.reject(['errUploadNoFiles']);
4814
- }
4815
-
4816
- xhr.open('POST', self.uploadURL, true);
4817
- xhr.timeout = timeout;
4818
-
4819
- // set request headers
4820
- if (fm.customHeaders) {
4821
- $.each(fm.customHeaders, function(key) {
4822
- xhr.setRequestHeader(key, this);
4823
- });
4824
  }
4825
-
4826
- // set xhrFields
4827
- if (fm.xhrFields) {
4828
- $.each(fm.xhrFields, function(key) {
4829
- if (key in xhr) {
4830
- xhr[key] = this;
 
 
 
4831
  }
4832
  });
4833
- }
4834
-
4835
- formData.append('cmd', 'upload');
4836
- formData.append(self.newAPI ? 'target' : 'current', target);
4837
- if (renames && renames.length) {
4838
- $.each(renames, function(i, v) {
4839
- formData.append('renames[]', v);
4840
- });
4841
- formData.append('suffix', fm.options.backupSuffix);
4842
- }
4843
- if (hashes) {
4844
- $.each(hashes, function(i, v) {
4845
- formData.append('hashes['+ i +']', v);
4846
- });
4847
- }
4848
- $.each(self.options.customData, function(key, val) {
4849
- formData.append(key, val);
4850
- });
4851
- $.each(self.options.onlyMimes, function(i, mime) {
4852
- formData.append('mimes['+i+']', mime);
4853
  });
4854
-
4855
- $.each(files, function(i, file) {
4856
- if (file._chunkmerged) {
4857
- formData.append('chunk', file._chunkmerged);
4858
- formData.append('upload[]', file._name);
4859
- formData.append('mtime[]', file._mtime);
4860
- xhr.timeout = 0;
4861
- } else {
4862
- if (file._chunkfail) {
4863
- formData.append('upload[]', 'chunkfail');
4864
- formData.append('mimes', 'chunkfail');
 
 
 
4865
  } else {
4866
- formData.append('upload[]', file);
4867
- }
4868
- if (file._chunk) {
4869
- formData.append('chunk', file._chunk);
4870
- formData.append('cid' , file._cid);
4871
- formData.append('range', file._range);
 
 
 
 
4872
  }
4873
- formData.append('mtime[]', file.lastModified? Math.round(file.lastModified/1000) : 0);
4874
- }
4875
- if (fm.UA.iOS) {
4876
- formData.append('overwrite', 0);
4877
  }
4878
  });
4879
-
4880
- if (isDataType) {
4881
- $.each(paths, function(i, path) {
4882
- formData.append('upload_path[]', path);
 
 
 
 
 
 
 
 
 
 
 
 
4883
  });
 
4884
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4885
 
4886
- xhr.send(formData);
4887
-
4888
- return true;
4889
- };
4890
-
4891
- if (! isDataType) {
4892
- if (files.length > 0) {
4893
- if (renames == null) {
4894
- renames = [];
4895
- hashes = {};
4896
- self.uploads.checkExists(files, target, fm).done(
4897
- function(res, res2){
4898
- if (fm.options.overwriteUploadConfirm && ! fm.UA.iOS && fm.option('uploadOverwrite', target)) {
4899
- renames = res;
4900
- hashes = res2;
4901
- files = $.map(files, function(file){return !file._remove? file : null ;});
4902
- }
4903
- cnt = files.length;
4904
- if (cnt > 0) {
4905
- if (! send(files)) {
4906
- dfrd.reject();
4907
- }
4908
- } else {
4909
- dfrd.reject();
4910
- }
4911
- }
4912
- );
4913
- } else {
4914
- if (! send(files)) {
4915
- dfrd.reject();
4916
- }
4917
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4918
  } else {
4919
- dfrd.reject();
 
 
4920
  }
4921
  } else {
4922
- if (dataChecked) {
4923
- send(files[0], files[1]);
4924
- } else {
4925
- files.done(function(result) { // result: [files, paths, renames, hashes, mkdirs]
4926
- renames = [];
4927
- cnt = result[0].length;
4928
- if (cnt) {
4929
- if (result[4] && result[4].length) {
4930
- // ensure directories
4931
- fm.request({
4932
- data : {cmd : 'mkdir', target : target, dirs : result[4]},
4933
- notify : {type : 'mkdir', cnt : result[4].length}
4934
- })
4935
- .fail(function(error) {
4936
- error = error || ['errUnknown'];
4937
- if (error[0] === 'errCmdParams') {
4938
- multiMax = 1;
4939
- } else {
4940
- multiMax = 0;
4941
- dfrd.reject(error);
4942
- }
4943
- })
4944
- .done(function(data) {
4945
- if (data.hashes) {
4946
- result[1] = $.map(result[1], function(p) {
4947
- p = p.replace(/\/[^\/]*$/, '');
4948
- if (p === '') {
4949
- return target;
4950
- } else {
4951
- return data.hashes[p];
4952
- }
4953
- });
4954
- }
4955
- })
4956
- .always(function(data) {
4957
- if (multiMax) {
4958
- renames = result[2];
4959
- hashes = result[3];
4960
- send(result[0], result[1]);
4961
- }
4962
- });
4963
- return;
4964
- } else {
4965
- result[1] = $.map(result[1], function() { return target; });
 
 
 
 
 
 
 
4966
  }
4967
- renames = result[2];
4968
- hashes = result[3];
4969
- send(result[0], result[1]);
4970
- } else {
4971
- dfrd.reject(['errUploadNoFiles']);
4972
  }
4973
- }).fail(function(){
4974
- dfrd.reject();
4975
- });
4976
- }
4977
- }
4978
 
4979
- return dfrd;
4980
- },
4981
-
4982
- // upload transport using iframe
4983
- iframe : function(data, fm) {
4984
- var self = fm ? fm : this,
4985
- input = data.input? data.input : false,
4986
- files = !input ? self.uploads.checkFile(data, self) : false,
4987
- dfrd = $.Deferred()
4988
- .fail(function(error) {
4989
- error && self.error(error);
4990
- }),
4991
- name = 'iframe-'+fm.namespace+(++self.iframeCnt),
4992
- form = $('<form action="'+self.uploadURL+'" method="post" enctype="multipart/form-data" encoding="multipart/form-data" target="'+name+'" style="display:none"><input type="hidden" name="cmd" value="upload" /></form>'),
4993
- msie = this.UA.IE,
4994
- // clear timeouts, close notification dialog, remove form/iframe
4995
- onload = function() {
4996
- abortto && clearTimeout(abortto);
4997
- notifyto && clearTimeout(notifyto);
4998
- notify && self.notify({type : 'upload', cnt : -cnt});
4999
-
5000
- setTimeout(function() {
5001
- msie && $('<iframe src="javascript:false;"/>').appendTo(form);
5002
- form.remove();
5003
- iframe.remove();
5004
- }, 100);
5005
- },
5006
- iframe = $('<iframe src="'+(msie ? 'javascript:false;' : 'about:blank')+'" name="'+name+'" style="position:absolute;left:-1000px;top:-1000px" />')
5007
- .on('load', function() {
5008
- iframe.off('load')
5009
- .on('load', function() {
5010
- onload();
5011
- // data will be processed in callback response or window onmessage
5012
- dfrd.resolve();
5013
- });
5014
-
5015
- // notify dialog
5016
- notifyto = setTimeout(function() {
5017
- notify = true;
5018
- self.notify({type : 'upload', cnt : cnt});
5019
- }, self.options.notifyDelay);
5020
-
5021
- // emulate abort on timeout
5022
- if (self.options.iframeTimeout > 0) {
5023
- abortto = setTimeout(function() {
5024
- onload();
5025
- dfrd.reject([errors.connect, errors.timeout]);
5026
- }, self.options.iframeTimeout);
5027
- }
5028
-
5029
- form.submit();
5030
- }),
5031
- target = (data.target || self.cwd().hash),
5032
- names = [],
5033
- dfds = [],
5034
- renames = [],
5035
- hashes = {},
5036
- cnt, notify, notifyto, abortto;
5037
 
5038
- if (files && files.length) {
5039
- $.each(files, function(i, val) {
5040
- form.append('<input type="hidden" name="upload[]" value="'+val+'"/>');
5041
- });
5042
- cnt = 1;
5043
- } else if (input && $(input).is(':file') && $(input).val()) {
5044
- if (fm.options.overwriteUploadConfirm && ! fm.UA.iOS && fm.option('uploadOverwrite', target)) {
5045
- names = input.files? input.files : [{ name: $(input).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/, '$1') }];
5046
- //names = $.map(names, function(file){return file.name? { name: file.name } : null ;});
5047
- dfds.push(self.uploads.checkExists(names, target, self).done(
5048
- function(res, res2){
5049
- renames = res;
5050
- hashes = res2;
5051
- cnt = $.map(names, function(file){return !file._remove? file : null ;}).length;
5052
- if (cnt != names.length) {
5053
- cnt = 0;
5054
- }
5055
  }
5056
- ));
5057
- }
5058
- cnt = input.files ? input.files.length : 1;
5059
- form.append(input);
5060
- } else {
5061
- return dfrd.reject();
 
 
 
 
 
 
 
 
5062
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5063
 
5064
- $.when.apply($, dfds).done(function() {
5065
- if (cnt < 1) {
5066
- return dfrd.reject();
5067
- }
5068
- form.append('<input type="hidden" name="'+(self.newAPI ? 'target' : 'current')+'" value="'+target+'"/>')
5069
- .append('<input type="hidden" name="html" value="1"/>')
5070
- .append('<input type="hidden" name="node" value="'+self.id+'"/>')
5071
- .append($(input).attr('name', 'upload[]'));
5072
-
5073
- if (renames.length > 0) {
5074
- $.each(renames, function(i, rename) {
5075
- form.append('<input type="hidden" name="renames[]" value="'+self.escape(rename)+'"/>');
5076
- });
5077
- form.append('<input type="hidden" name="suffix" value="'+fm.options.backupSuffix+'"/>');
5078
- }
5079
- if (hashes) {
5080
- $.each(renames, function(i, v) {
5081
- form.append('<input type="hidden" name="['+i+']" value="'+self.escape(v)+'"/>');
5082
- });
5083
- }
5084
-
5085
- $.each(self.options.onlyMimes||[], function(i, mime) {
5086
- form.append('<input type="hidden" name="mimes[]" value="'+self.escape(mime)+'"/>');
5087
- });
5088
-
5089
- $.each(self.options.customData, function(key, val) {
5090
- form.append('<input type="hidden" name="'+key+'" value="'+self.escape(val)+'"/>');
5091
- });
5092
-
5093
- form.appendTo('body');
5094
- iframe.appendTo('body');
5095
- });
5096
-
5097
- return dfrd;
5098
  }
 
 
 
 
 
 
5099
  },
5100
 
5101
-
5102
  /**
5103
- * Bind callback to event(s) The callback is executed at most once per event.
5104
- * To bind to multiply events at once, separate events names by space
5105
  *
5106
- * @param String event name
5107
- * @param Function callback
5108
- * @return elFinder
5109
  */
5110
- one : function(event, callback) {
5111
- var self = this,
5112
- h = function(e, f) {
5113
- setTimeout(function() {self.unbind(event, h);}, 3);
5114
- return callback.apply(self.getListeners(e.type), arguments);
5115
- };
5116
- return this.bind(event, h);
5117
  },
5118
 
5119
  /**
5120
- * Set/get data into/from localStorage
 
5121
  *
5122
- * @param String key
5123
- * @param String|void value
5124
- * @return String
 
 
 
 
 
 
 
 
5125
  */
5126
- localStorage : function(key, val) {
5127
- var s = window.localStorage,
5128
- oldkey = 'elfinder-'+key+this.id, // old key of elFinder < 2.1.6
5129
- retval, oldval,t;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5130
 
5131
- // new key of elFinder >= 2.1.6
5132
- key = window.location.pathname+'-elfinder-'+key+this.id;
5133
-
5134
- if (val === null) {
5135
- return s.removeItem(key);
5136
  }
5137
 
5138
- if (val === void(0) && !(retval = s.getItem(key)) && (oldval = s.getItem(oldkey))) {
5139
- val = oldval;
5140
- s.removeItem(oldkey);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5141
  }
 
 
5142
 
5143
- if (val !== void(0)) {
5144
- t = typeof val;
5145
- if (t !== 'string' && t !== 'number') {
5146
- val = JSON.stringify(val);
5147
- }
5148
- try {
5149
- s.setItem(key, val);
5150
- } catch (e) {
5151
- try {
5152
- s.clear();
5153
- s.setItem(key, val);
5154
- } catch (e) {
5155
- self.debug('error', e.toString());
 
 
 
 
 
 
 
5156
  }
5157
  }
5158
- retval = s.getItem(key);
5159
- }
 
 
 
 
 
 
5160
 
5161
- if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) {
5162
- try {
5163
- return JSON.parse(retval);
5164
- } catch(e) {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5165
  }
5166
- return retval;
 
5167
  },
5168
 
5169
  /**
5170
- * Get/set cookie
5171
  *
5172
- * @param String cookie name
5173
- * @param String|void cookie value
5174
- * @return String
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5175
  */
5176
- cookie : function(name, value) {
5177
- var d, o, c, i, retval, t;
5178
-
5179
- name = 'elfinder-'+name+this.id;
 
 
 
 
 
 
 
 
 
 
 
 
5180
 
5181
- if (value === void(0)) {
5182
- if (document.cookie && document.cookie != '') {
5183
- c = document.cookie.split(';');
5184
- name += '=';
5185
- for (i=0; i<c.length; i++) {
5186
- c[i] = $.trim(c[i]);
5187
- if (c[i].substring(0, name.length) == name) {
5188
- retval = decodeURIComponent(c[i].substring(name.length));
5189
- if (retval.substr(0,1) === '{' || retval.substr(0,1) === '[') {
5190
- try {
5191
- return JSON.parse(retval);
5192
- } catch(e) {}
5193
- }
5194
- return retval;
5195
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5196
  }
5197
- }
5198
- return '';
5199
  }
5200
-
5201
- o = $.extend({}, this.options.cookie);
5202
- if (value === null) {
5203
- value = '';
5204
- o.expires = -1;
5205
- } else {
5206
- t = typeof value;
5207
- if (t !== 'string' && t !== 'number') {
5208
- value = JSON.stringify(value);
5209
- }
 
 
 
5210
  }
5211
- if (typeof(o.expires) == 'number') {
5212
- d = new Date();
5213
- d.setTime(d.getTime()+(o.expires * 86400000));
5214
- o.expires = d;
5215
  }
5216
- document.cookie = name+'='+encodeURIComponent(value)+'; expires='+o.expires.toUTCString()+(o.path ? '; path='+o.path : '')+(o.domain ? '; domain='+o.domain : '')+(o.secure ? '; secure' : '');
5217
- return value;
5218
  },
5219
 
5220
  /**
5221
- * Get start directory (by location.hash or last opened directory)
5222
  *
 
 
 
5223
  * @return String
5224
  */
5225
- startDir : function() {
5226
- var locHash = window.location.hash;
5227
- if (locHash && locHash.match(/^#elf_/)) {
5228
- return locHash.replace(/^#elf_/, '');
5229
- } else if (this.options.startPathHash) {
5230
- return this.options.startPathHash;
5231
- } else {
5232
- return this.lastDir();
 
 
5233
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
5234
  },
5235
 
5236
  /**
5237
- * Get/set last opened directory
5238
- *
5239
- * @param String|undefined dir hash
 
 
5240
  * @return String
5241
- */
5242
- lastDir : function(hash) {
5243
- return this.options.rememberLastDir ? this.storage('lastdir', hash) : '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5244
  },
5245
 
5246
  /**
5247
- * Node for escape html entities in texts
5248
  *
5249
- * @type jQuery
 
5250
  */
5251
- _node : $('<span/>'),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5252
 
5253
  /**
5254
- * Replace not html-safe symbols to html entities
5255
  *
5256
- * @param String text to escape
5257
  * @return String
5258
  */
5259
- escape : function(name) {
5260
- return this._node.text(name).html().replace(/"/g, '&quot;').replace(/'/g, '&#039;');
 
 
 
 
 
 
 
 
 
 
 
5261
  },
5262
 
5263
  /**
5264
- * Cleanup ajax data.
5265
- * For old api convert data into new api format
5266
  *
5267
- * @param String command name
5268
- * @param Object data from backend
5269
- * @return Object
5270
  */
5271
- normalize : function(data) {
5272
- var self = this,
5273
- filter = function(file) {
5274
- var vid, targetOptions;
5275
-
5276
- if (file && file.hash && file.name && file.mime) {
5277
- if (file.mime == 'application/x-empty') {
5278
- file.mime = 'text/plain';
5279
- }
5280
-
5281
- if (! file.phash || file.mime === 'directory') {
5282
- // set options, tmbUrls for each volume
5283
- if (file.volumeid) {
5284
- vid = file.volumeid;
5285
-
5286
- if (self.isRoot(file)) {
5287
- if (! self.volOptions[vid]) {
5288
- self.volOptions[vid] = {};
5289
- }
5290
-
5291
- targetOptions = self.volOptions[vid];
5292
-
5293
- if (file.options) {
5294
- // >= v.2.1.14 has file.options
5295
- targetOptions = $.extend(targetOptions, file.options);
5296
- }
5297
-
5298
- // for compat <= v2.1.13
5299
- if (file.disabled) {
5300
- targetOptions.disabled = file.disabled;
5301
- }
5302
- if (file.tmbUrl) {
5303
- targetOptions.tmbUrl = file.tmbUrl;
5304
- }
5305
-
5306
- // set immediate properties
5307
- $.each(self.optionProperties, function(i, k) {
5308
- if (targetOptions[k]) {
5309
- file[k] = targetOptions[k];
5310
- }
5311
- });
5312
- self.roots[vid] = file.hash;
5313
- }
5314
-
5315
- if (prevId !== vid) {
5316
- prevId = vid;
5317
- i18nFolderName = self.option('i18nFolderName', vid);
5318
- }
5319
- }
5320
-
5321
- // volume root i18n name
5322
- if (! file.i18 && self.isRoot(file)) {
5323
- name = 'volume_' + file.name,
5324
- i18 = self.i18n(false, name);
5325
-
5326
- if (name !== i18) {
5327
- file.i18 = i18;
5328
- }
5329
- }
5330
-
5331
- // i18nFolderName
5332
- if (i18nFolderName && ! file.i18) {
5333
- name = 'folder_' + file.name,
5334
- i18 = self.i18n(false, name);
5335
-
5336
- if (name !== i18) {
5337
- file.i18 = i18;
5338
- }
5339
- }
5340
-
5341
- if (self.leafRoots[file.hash]) {
5342
- // has leaf root to `dirs: 1`
5343
- if (! file.dirs) {
5344
- file.dirs = 1;
5345
- }
5346
- // set ts
5347
- $.each(self.leafRoots[file.hash], function() {
5348
- var f = self.file(this);
5349
- if (f && f.ts && (file.ts || 0) < f.ts) {
5350
- file.ts = f.ts;
5351
- }
5352
- });
5353
- }
5354
- }
5355
-
5356
- return file;
5357
- }
5358
- return null;
5359
- },
5360
- name, i18, i18nFolderName, prevId;
5361
 
5362
 
5363
- if (data.cwd) {
5364
- if (data.cwd.volumeid && data.options && Object.keys(data.options).length) {
5365
- self.volOptions[data.cwd.volumeid] = data.options;
 
 
 
 
5366
  }
5367
- data.cwd = filter(data.cwd);
5368
- }
5369
- if (data.files) {
5370
- data.files = $.map(data.files, filter);
5371
- }
5372
- if (data.tree) {
5373
- data.tree = $.map(data.tree, filter);
5374
- }
5375
- if (data.added) {
5376
- data.added = $.map(data.added, filter);
5377
- }
5378
- if (data.changed) {
5379
- data.changed = $.map(data.changed, filter);
5380
  }
5381
- if (data.api) {
5382
- data.init = true;
 
 
 
 
 
 
 
 
 
 
 
 
5383
  }
5384
- return data;
 
5385
  },
5386
 
5387
  /**
5388
- * Update sort options
5389
- *
5390
- * @param {String} sort type
5391
- * @param {String} sort order
5392
- * @param {Boolean} show folder first
5393
  */
5394
- setSort : function(type, order, stickFolders, alsoTreeview) {
5395
- this.storage('sortType', (this.sortType = this.sortRules[type] ? type : 'name'));
5396
- this.storage('sortOrder', (this.sortOrder = /asc|desc/.test(order) ? order : 'asc'));
5397
- this.storage('sortStickFolders', (this.sortStickFolders = !!stickFolders) ? 1 : '');
5398
- this.storage('sortAlsoTreeview', (this.sortAlsoTreeview = !!alsoTreeview) ? 1 : '');
5399
- this.trigger('sortchange');
5400
  },
5401
 
5402
- _sortRules : {
5403
- name : function(file1, file2) {
5404
- return elFinder.prototype.naturalCompare(file1.i18 || file1.name, file2.i18 || file2.name);
5405
- },
5406
- size : function(file1, file2) {
5407
- var size1 = parseInt(file1.size) || 0,
5408
- size2 = parseInt(file2.size) || 0;
5409
-
5410
- return size1 === size2 ? 0 : size1 > size2 ? 1 : -1;
5411
- },
5412
- kind : function(file1, file2) {
5413
- return elFinder.prototype.naturalCompare(file1.mime, file2.mime);
5414
- },
5415
- date : function(file1, file2) {
5416
- var date1 = file1.ts || file1.date,
5417
- date2 = file2.ts || file2.date;
5418
-
5419
- return date1 === date2 ? 0 : date1 > date2 ? 1 : -1
5420
- },
5421
- perm : function(file1, file2) {
5422
- var val = function(file) { return (file.write? 2 : 0) + (file.read? 1 : 0); },
5423
- v1 = val(file1),
5424
- v2 = val(file2);
5425
- return v1 === v2 ? 0 : v1 > v2 ? 1 : -1
5426
- },
5427
- mode : function(file1, file2) {
5428
- var v1 = file1.mode || (file1.perm || ''),
5429
- v2 = file2.mode || (file2.perm || '');
5430
- return elFinder.prototype.naturalCompare(v1, v2);
5431
- },
5432
- owner : function(file1, file2) {
5433
- var v1 = file1.owner || '',
5434
- v2 = file2.owner || '';
5435
- return elFinder.prototype.naturalCompare(v1, v2);
5436
- },
5437
- group : function(file1, file2) {
5438
- var v1 = file1.group || '',
5439
- v2 = file2.group || '';
5440
- return elFinder.prototype.naturalCompare(v1, v2);
5441
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5442
  },
5443
 
5444
  /**
5445
- * Valid sort rule names
5446
  *
5447
- * @type Array
 
5448
  */
5449
- sorters : [],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5450
 
5451
  /**
5452
- * Compare strings for natural sort
5453
- *
5454
- * @param String
5455
- * @param String
5456
- * @return Number
5457
  */
5458
- naturalCompare : function(a, b) {
5459
- var self = elFinder.prototype.naturalCompare;
5460
- if (typeof self.loc == 'undefined') {
5461
- self.loc = (navigator.userLanguage || navigator.browserLanguage || navigator.language || 'en-US');
5462
- }
5463
- if (typeof self.sort == 'undefined') {
5464
- if ('11'.localeCompare('2', self.loc, {numeric: true}) > 0) {
5465
- // Native support
5466
- if (window.Intl && window.Intl.Collator) {
5467
- self.sort = new Intl.Collator(self.loc, {numeric: true}).compare;
5468
- } else {
5469
- self.sort = function(a, b) {
5470
- return a.localeCompare(b, self.loc, {numeric: true});
5471
- };
5472
- }
5473
  } else {
5474
- /*
5475
- * Edited for elFinder (emulates localeCompare() by numeric) by Naoki Sawada aka nao-pon
5476
- */
5477
- /*
5478
- * Huddle/javascript-natural-sort (https://github.com/Huddle/javascript-natural-sort)
5479
- */
5480
- /*
5481
- * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
5482
- * Author: Jim Palmer (based on chunking idea from Dave Koelle)
5483
- * http://opensource.org/licenses/mit-license.php
5484
- */
5485
- self.sort = function(a, b) {
5486
- var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
5487
- sre = /(^[ ]*|[ ]*$)/g,
5488
- dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
5489
- hre = /^0x[0-9a-f]+$/i,
5490
- ore = /^0/,
5491
- syre = /^[\x01\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]/, // symbol first - (Naoki Sawada)
5492
- i = function(s) { return self.sort.insensitive && (''+s).toLowerCase() || ''+s },
5493
- // convert all to strings strip whitespace
5494
- // first character is "_", it's smallest - (Naoki Sawada)
5495
- x = i(a).replace(sre, '').replace(/^_/, "\x01") || '',
5496
- y = i(b).replace(sre, '').replace(/^_/, "\x01") || '',
5497
- // chunk/tokenize
5498
- xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
5499
- yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
5500
- // numeric, hex or date detection
5501
- xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
5502
- yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null,
5503
- oFxNcL, oFyNcL,
5504
- locRes = 0;
5505
-
5506
- // first try and sort Hex codes or Dates
5507
- if (yD) {
5508
- if ( xD < yD ) return -1;
5509
- else if ( xD > yD ) return 1;
5510
- }
5511
- // natural sorting through split numeric strings and default strings
5512
- for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
5513
-
5514
- // find floats not starting with '0', string or 0 if not defined (Clint Priest)
5515
- oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
5516
- oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
5517
-
5518
- // handle numeric vs string comparison - number < string - (Kyle Adams)
5519
- // but symbol first < number - (Naoki Sawada)
5520
- if (isNaN(oFxNcL) !== isNaN(oFyNcL)) {
5521
- if (isNaN(oFxNcL) && (typeof oFxNcL !== 'string' || ! oFxNcL.match(syre))) {
5522
- return 1;
5523
- } else if (typeof oFyNcL !== 'string' || ! oFyNcL.match(syre)) {
5524
- return -1;
5525
- }
5526
- }
5527
-
5528
- // use decimal number comparison if either value is string zero
5529
- if (parseInt(oFxNcL, 10) === 0) oFxNcL = 0;
5530
- if (parseInt(oFyNcL, 10) === 0) oFyNcL = 0;
5531
-
5532
- // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
5533
- if (typeof oFxNcL !== typeof oFyNcL) {
5534
- oFxNcL += '';
5535
- oFyNcL += '';
5536
- }
5537
-
5538
- // use locale sensitive sort for strings when case insensitive
5539
- // note: localeCompare interleaves uppercase with lowercase (e.g. A,a,B,b)
5540
- if (self.sort.insensitive && typeof oFxNcL === 'string' && typeof oFyNcL === 'string') {
5541
- locRes = oFxNcL.localeCompare(oFyNcL, self.loc);
5542
- if (locRes !== 0) return locRes;
5543
- }
5544
-
5545
- if (oFxNcL < oFyNcL) return -1;
5546
- if (oFxNcL > oFyNcL) return 1;
5547
- }
5548
- return 0;
5549
- };
5550
- self.sort.insensitive = true;
5551
  }
5552
  }
5553
- return self.sort(a, b);
5554
  },
5555
 
5556
  /**
5557
- * Compare files based on elFinder.sort
5558
- *
5559
- * @param Object file
5560
- * @param Object file
5561
- * @return Number
5562
  */
5563
- compare : function(file1, file2) {
5564
- var self = this,
5565
- type = self.sortType,
5566
- asc = self.sortOrder == 'asc',
5567
- stick = self.sortStickFolders,
5568
- rules = self.sortRules,
5569
- sort = rules[type],
5570
- d1 = file1.mime == 'directory',
5571
- d2 = file2.mime == 'directory',
5572
- res;
5573
-
5574
- if (stick) {
5575
- if (d1 && !d2) {
5576
- return -1;
5577
- } else if (!d1 && d2) {
5578
- return 1;
5579
- }
5580
  }
5581
 
5582
- res = asc ? sort(file1, file2) : sort(file2, file1);
 
 
5583
 
5584
- return type !== 'name' && res === 0
5585
- ? res = asc ? rules.name(file1, file2) : rules.name(file2, file1)
5586
- : res;
5587
  },
5588
 
5589
  /**
5590
- * Sort files based on config
5591
- *
5592
- * @param Array files
5593
- * @return Array
5594
  */
5595
- sortFiles : function(files) {
5596
- return files.sort(this.compare);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5597
  },
5598
 
5599
  /**
5600
- * Open notification dialog
5601
- * and append/update message for required notification type.
5602
- *
5603
- * @param Object options
5604
- * @example
5605
- * this.notify({
5606
- * type : 'copy',
5607
- * msg : 'Copy files', // not required for known types @see this.notifyType
5608
- * cnt : 3,
5609
- * hideCnt : false, // true for not show count
5610
- * progress : 10, // progress bar percents (use cnt : 0 to update progress bar)
5611
- * cancel : callback // callback function for cancel button
5612
- * })
5613
- * @return elFinder
5614
  */
5615
- notify : function(opts) {
5616
- var type = opts.type,
5617
- msg = this.i18n((typeof opts.msg !== 'undefined')? opts.msg : (this.messages['ntf'+type] ? 'ntf'+type : 'ntfsmth')),
5618
- ndialog = this.ui.notify,
5619
- notify = ndialog.children('.elfinder-notify-'+type),
5620
- button = notify.children('div.elfinder-notify-cancel').children('button'),
5621
- ntpl = '<div class="elfinder-notify elfinder-notify-{type}"><span class="elfinder-dialog-icon elfinder-dialog-icon-{type}"/><span class="elfinder-notify-msg">{msg}</span> <span class="elfinder-notify-cnt"/><div class="elfinder-notify-progressbar"><div class="elfinder-notify-progress"/></div><div class="elfinder-notify-cancel"/></div>',
5622
- delta = opts.cnt,
5623
- size = (typeof opts.size != 'undefined')? parseInt(opts.size) : null,
5624
- progress = (typeof opts.progress != 'undefined' && opts.progress >= 0) ? opts.progress : null,
5625
- cancel = opts.cancel,
5626
- clhover = 'ui-state-hover',
5627
- close = function() {
5628
- notify._esc && $(document).off('keydown', notify._esc);
5629
- notify.remove();
5630
- !ndialog.children().length && ndialog.elfinderdialog('close');
5631
- },
5632
- cnt, total, prc;
5633
-
5634
- if (!type) {
5635
- return this;
5636
- }
5637
 
5638
- if (!notify.length) {
5639
- notify = $(ntpl.replace(/\{type\}/g, type).replace(/\{msg\}/g, msg))
5640
- .appendTo(ndialog)
5641
- .data('cnt', 0);
5642
-
5643
- if (progress != null) {
5644
- notify.data({progress : 0, total : 0});
5645
- }
5646
-
5647
- if (cancel) {
5648
- button = $('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text">'+this.i18n('btnCancel')+'</span></button>')
5649
- .hover(function(e) {
5650
- $(this).toggleClass(clhover, e.type == 'mouseenter');
5651
- });
5652
- notify.children('div.elfinder-notify-cancel').append(button);
5653
- }
5654
- } else if (typeof opts.msg !== 'undefined') {
5655
- notify.children('span.elfinder-notify-msg').html(msg);
5656
  }
5657
-
5658
- cnt = delta + parseInt(notify.data('cnt'));
5659
-
5660
- if (cnt > 0) {
5661
- if (cancel && button.length) {
5662
- if ($.isFunction(cancel) || (typeof cancel === 'object' && cancel.promise)) {
5663
- notify._esc = function(e) {
5664
- if (e.type == 'keydown' && e.keyCode != $.ui.keyCode.ESCAPE) {
5665
- return;
5666
- }
5667
- e.preventDefault();
5668
- e.stopPropagation();
5669
- close();
5670
- if (cancel.promise) {
5671
- if (cancel.xhr) {
5672
- cancel.xhr.quiet = true;
5673
- cancel.xhr.abort();
5674
- }
5675
- cancel.reject();
5676
- } else {
5677
- cancel(e);
 
 
 
 
 
5678
  }
5679
- };
5680
- button.on('click', function(e) {
5681
- notify._esc(e);
5682
- });
5683
- $(document).on('keydown.' + this.namespace, notify._esc);
5684
  }
 
5685
  }
5686
-
5687
- !opts.hideCnt && notify.children('.elfinder-notify-cnt').text('('+cnt+')');
5688
- ndialog.is(':hidden') && ndialog.elfinderdialog('open', this);
5689
- notify.data('cnt', cnt);
5690
-
5691
- if ((progress != null)
5692
- && (total = notify.data('total')) >= 0
5693
- && (prc = notify.data('progress')) >= 0) {
5694
-
5695
- total += size != null? size : delta;
5696
- prc += progress;
5697
- (size == null && delta < 0) && (prc += delta * 100);
5698
- notify.data({progress : prc, total : total});
5699
- if (size != null) {
5700
- prc *= 100;
5701
- total = Math.max(1, total);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5702
  }
5703
- progress = parseInt(prc/total);
5704
-
5705
- notify.find('.elfinder-notify-progress')
5706
- .animate({
5707
- width : (progress < 100 ? progress : 100)+'%'
5708
- }, 20);
5709
  }
5710
-
 
 
 
 
5711
  } else {
5712
- close();
5713
  }
5714
-
5715
- return this;
5716
  },
5717
 
5718
  /**
5719
- * Open confirmation dialog
5720
- *
5721
- * @param Object options
5722
- * @example
5723
- * this.confirm({
5724
- * title : 'Remove files',
5725
- * text : 'Here is question text',
5726
- * accept : { // accept callback - required
5727
- * label : 'Continue',
5728
- * callback : function(applyToAll) { fm.log('Ok') }
5729
- * },
5730
- * cancel : { // cancel callback - required
5731
- * label : 'Cancel',
5732
- * callback : function() { fm.log('Cancel')}
5733
- * },
5734
- * reject : { // reject callback - optionally
5735
- * label : 'No',
5736
- * callback : function(applyToAll) { fm.log('No')}
5737
- * },
5738
- * buttons : [ // additional buttons callback - optionally
5739
- * {
5740
- * label : 'Btn1',
5741
- * callback : function(applyToAll) { fm.log('Btn1')}
5742
- * }
5743
- * ],
5744
- * all : true // display checkbox "Apply to all"
5745
- * })
5746
- * @return elFinder
5747
  */
5748
- confirm : function(opts) {
5749
- var self = this,
5750
- complete = false,
5751
- options = {
5752
- cssClass : 'elfinder-dialog-confirm',
5753
- modal : true,
5754
- resizable : false,
5755
- title : this.i18n(opts.title || 'confirmReq'),
5756
- buttons : {},
5757
- close : function() {
5758
- !complete && opts.cancel.callback();
5759
- $(this).elfinderdialog('destroy');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5760
  }
5761
- },
5762
- apply = this.i18n('apllyAll'),
5763
- label, checkbox;
5764
-
5765
-
5766
- options.buttons[this.i18n(opts.accept.label)] = function() {
5767
- opts.accept.callback(!!(checkbox && checkbox.prop('checked')))
5768
- complete = true;
5769
- $(this).elfinderdialog('close');
5770
- };
5771
-
5772
- if (opts.reject) {
5773
- options.buttons[this.i18n(opts.reject.label)] = function() {
5774
- opts.reject.callback(!!(checkbox && checkbox.prop('checked')))
5775
- complete = true;
5776
- $(this).elfinderdialog('close');
5777
  };
5778
- }
5779
-
5780
- if (opts.buttons && opts.buttons.length > 0) {
5781
- $.each(opts.buttons, function(i, v){
5782
- options.buttons[self.i18n(v.label)] = function() {
5783
- v.callback(!!(checkbox && checkbox.prop('checked')))
5784
- complete = true;
5785
- $(this).elfinderdialog('close');
5786
- };
5787
- });
5788
- }
5789
-
5790
- options.buttons[this.i18n(opts.cancel.label)] = function() {
5791
- $(this).elfinderdialog('close');
5792
- };
5793
-
5794
- if (opts.all) {
5795
- options.create = function() {
5796
- var base = $('<div class="elfinder-dialog-confirm-applyall"/>');
5797
- checkbox = $('<input type="checkbox" />');
5798
- $(this).next().find('.ui-dialog-buttonset')
5799
- .prepend(base.append($('<label>'+apply+'</label>').prepend(checkbox)));
5800
  }
5801
  }
5802
-
5803
- return this.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-confirm"/>' + this.i18n(opts.text), options);
5804
  },
5805
 
5806
  /**
5807
- * Create unique file name in required dir
5808
  *
5809
- * @param String file name
5810
- * @param String parent dir hash
5811
- * @param String glue
5812
- * @return String
5813
  */
5814
- uniqueName : function(prefix, phash, glue) {
5815
- var i = 0, ext = '', p, name;
5816
-
5817
- prefix = this.i18n(prefix);
5818
- phash = phash || this.cwd().hash;
5819
- glue = (typeof glue === 'undefined')? ' ' : glue;
5820
-
5821
- if (p = prefix.match(/^(.+)(\.[^.]+)$/)) {
5822
- ext = p[2];
5823
- prefix = p[1];
5824
- }
5825
-
5826
- name = prefix+ext;
5827
-
5828
- if (!this.fileByName(name, phash)) {
5829
- return name;
5830
  }
5831
- while (i < 10000) {
5832
- name = prefix + glue + (++i) + ext;
5833
- if (!this.fileByName(name, phash)) {
5834
- return name;
5835
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5836
  }
5837
- return prefix + Math.random() + ext;
5838
  },
5839
 
5840
  /**
5841
- * Return message translated onto current language
5842
- * Allowed accept HTML element that was wrapped in jQuery object
5843
- * To be careful to XSS vulnerability of HTML element Ex. You should use `fm.escape(file.name)`
5844
- *
5845
- * @param String|Array message[s]|Object jQuery
5846
- * @return String
5847
- **/
5848
- i18n : function() {
5849
- var self = this,
5850
- messages = this.messages,
5851
- input = [],
5852
- ignore = [],
5853
- message = function(m) {
5854
- var file;
5855
- if (m.indexOf('#') === 0) {
5856
- if ((file = self.file(m.substr(1)))) {
5857
- return file.name;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5858
  }
 
 
 
 
 
 
 
 
 
 
 
 
5859
  }
5860
- return m;
5861
  },
5862
- i, j, m, escFunc, start = 0;
5863
-
5864
- if (arguments.length && arguments[0] === false) {
5865
- escFunc = function(m){ return m; };
5866
- start = 1;
5867
- }
5868
- for (i = start; i< arguments.length; i++) {
5869
- m = arguments[i];
5870
-
5871
- if ($.isArray(m)) {
5872
- for (j = 0; j < m.length; j++) {
5873
- if (m[j] instanceof jQuery) {
5874
- // jQuery object is HTML element
5875
- input.push(m[j]);
5876
- } else if (typeof m[j] !== 'undefined'){
5877
- input.push(message('' + m[j]));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5878
  }
 
 
 
5879
  }
5880
- } else if (m instanceof jQuery) {
5881
- // jQuery object is HTML element
5882
- input.push(m[j]);
5883
- } else if (typeof m !== 'undefined'){
5884
- input.push(message('' + m));
5885
- }
5886
- }
5887
-
5888
- for (i = 0; i < input.length; i++) {
5889
- // dont translate placeholders
5890
- if ($.inArray(i, ignore) !== -1) {
5891
- continue;
5892
- }
5893
- m = input[i];
5894
- if (typeof m == 'string') {
5895
- // translate message
5896
- m = messages[m] || (escFunc? escFunc(m) : self.escape(m));
5897
- // replace placeholders in message
5898
- m = m.replace(/\$(\d+)/g, function(match, placeholder) {
5899
- placeholder = i + parseInt(placeholder);
5900
- if (placeholder > 0 && input[placeholder]) {
5901
- ignore.push(placeholder)
5902
- }
5903
- return escFunc? escFunc(input[placeholder]) : self.escape(input[placeholder]);
5904
- });
5905
- } else {
5906
- // get HTML from jQuery object
5907
- m = m.get(0).outerHTML;
5908
- }
5909
-
5910
- input[i] = m;
5911
- }
5912
-
5913
- return $.map(input, function(m, i) { return $.inArray(i, ignore) === -1 ? m : null; }).join('<br>');
5914
  },
5915
 
5916
  /**
5917
- * Convert mimetype into css classes
5918
  *
5919
- * @param String file mimetype
5920
- * @return String
5921
  */
5922
- mime2class : function(mime) {
5923
- var prefix = 'elfinder-cwd-icon-';
 
 
 
5924
 
5925
- mime = mime.split('/');
5926
 
5927
- return prefix+mime[0]+(mime[0] != 'image' && mime[1] ? ' '+prefix+mime[1].replace(/(\.|\+)/g, '-') : '');
 
 
 
 
 
 
 
 
 
5928
  },
5929
 
5930
  /**
5931
- * Return localized kind of file
5932
  *
5933
- * @param Object|String file or file mimetype
5934
  * @return String
5935
  */
5936
- mime2kind : function(f) {
5937
- var isObj = typeof(f) == 'object' ? true : false,
5938
- mime = isObj ? f.mime : f,
5939
- kind;
5940
-
5941
-
5942
- if (isObj && f.alias && mime != 'symlink-broken') {
5943
- kind = 'Alias';
5944
- } else if (this.kinds[mime]) {
5945
- if (isObj && mime === 'directory' && (! f.phash || f.isroot)) {
5946
- kind = 'Root';
5947
- } else {
5948
- kind = this.kinds[mime];
5949
- }
5950
  }
5951
- if (! kind) {
5952
- if (mime.indexOf('text') === 0) {
5953
- kind = 'Text';
5954
- } else if (mime.indexOf('image') === 0) {
5955
- kind = 'Image';
5956
- } else if (mime.indexOf('audio') === 0) {
5957
- kind = 'Audio';
5958
- } else if (mime.indexOf('video') === 0) {
5959
- kind = 'Video';
5960
- } else if (mime.indexOf('application') === 0) {
5961
- kind = 'App';
5962
- } else {
5963
- kind = mime;
5964
- }
5965
  }
5966
-
5967
- return this.messages['kind'+kind] ? this.i18n('kind'+kind) : mime;
 
 
 
 
 
 
 
 
 
 
 
5968
  },
5969
 
5970
  /**
5971
- * Return localized date
5972
  *
5973
- * @param Object file object
5974
- * @return String
5975
  */
5976
- formatDate : function(file, ts) {
5977
- var self = this,
5978
- ts = ts || file.ts,
5979
- i18 = self.i18,
5980
- date, format, output, d, dw, m, y, h, g, i, s;
5981
-
5982
- if (self.options.clientFormatDate && ts > 0) {
5983
-
5984
- date = new Date(ts*1000);
5985
-
5986
- h = date[self.getHours]();
5987
- g = h > 12 ? h - 12 : h;
5988
- i = date[self.getMinutes]();
5989
- s = date[self.getSeconds]();
5990
- d = date[self.getDate]();
5991
- dw = date[self.getDay]();
5992
- m = date[self.getMonth]() + 1;
5993
- y = date[self.getFullYear]();
5994
-
5995
- format = ts >= this.yesterday
5996
- ? this.fancyFormat
5997
- : this.dateFormat;
5998
-
5999
- output = format.replace(/[a-z]/gi, function(val) {
6000
- switch (val) {
6001
- case 'd': return d > 9 ? d : '0'+d;
6002
- case 'j': return d;
6003
- case 'D': return self.i18n(i18.daysShort[dw]);
6004
- case 'l': return self.i18n(i18.days[dw]);
6005
- case 'm': return m > 9 ? m : '0'+m;
6006
- case 'n': return m;
6007
- case 'M': return self.i18n(i18.monthsShort[m-1]);
6008
- case 'F': return self.i18n(i18.months[m-1]);
6009
- case 'Y': return y;
6010
- case 'y': return (''+y).substr(2);
6011
- case 'H': return h > 9 ? h : '0'+h;
6012
- case 'G': return h;
6013
- case 'g': return g;
6014
- case 'h': return g > 9 ? g : '0'+g;
6015
- case 'a': return h >= 12 ? 'pm' : 'am';
6016
- case 'A': return h >= 12 ? 'PM' : 'AM';
6017
- case 'i': return i > 9 ? i : '0'+i;
6018
- case 's': return s > 9 ? s : '0'+s;
6019
- }
6020
- return val;
6021
- });
6022
-
6023
- return ts >= this.yesterday
6024
- ? output.replace('$1', this.i18n(ts >= this.today ? 'Today' : 'Yesterday'))
6025
- : output;
6026
- } else if (file.date) {
6027
- return file.date.replace(/([a-z]+)\s/i, function(a1, a2) { return self.i18n(a2)+' '; });
6028
  }
6029
-
6030
- return self.i18n('dateUnknown');
 
6031
  },
6032
 
6033
- /**
6034
- * Return css class marks file permissions
6035
- *
6036
- * @param Object file
6037
- * @return String
6038
- */
6039
- perms2class : function(o) {
6040
- var c = '';
6041
-
6042
- if (!o.read && !o.write) {
6043
- c = 'elfinder-na';
6044
- } else if (!o.read) {
6045
- c = 'elfinder-wo';
6046
- } else if (!o.write) {
6047
- c = 'elfinder-ro';
6048
- }
6049
-
6050
- if (o.type) {
6051
- c += ' elfinder-' + this.escape(o.type);
6052
- }
6053
-
6054
- return c;
6055
  },
6056
 
6057
  /**
6058
- * Return localized string with file permissions
6059
- *
6060
- * @param Object file
6061
- * @return String
6062
  */
6063
- formatPermissions : function(f) {
6064
- var p = [];
6065
-
6066
- f.read && p.push(this.i18n('read'));
6067
- f.write && p.push(this.i18n('write'));
6068
-
6069
- return p.length ? p.join(' '+this.i18n('and')+' ') : this.i18n('noaccess');
6070
  },
6071
-
6072
  /**
6073
- * Return formated file size
6074
- *
6075
- * @param Number file size
6076
- * @return String
6077
  */
6078
- formatSize : function(s) {
6079
- var n = 1, u = 'b';
6080
-
6081
- if (s == 'unknown') {
6082
- return this.i18n('unknown');
 
 
 
6083
  }
6084
-
6085
- if (s > 1073741824) {
6086
- n = 1073741824;
6087
- u = 'GB';
6088
- } else if (s > 1048576) {
6089
- n = 1048576;
6090
- u = 'MB';
6091
- } else if (s > 1024) {
6092
- n = 1024;
6093
- u = 'KB';
6094
  }
6095
- s = s/n;
6096
- return (s > 0 ? n >= 1048576 ? s.toFixed(2) : Math.round(s) : 0) +' '+u;
6097
  },
6098
 
6099
  /**
6100
- * Return formated file mode by options.fileModeStyle
6101
  *
6102
- * @param String file mode
6103
- * @param String format style
6104
- * @return String
6105
  */
6106
- formatFileMode : function(p, style) {
6107
- var i, o, s, b, sticy, suid, sgid, str, oct;
6108
-
6109
- if (!style) {
6110
- style = this.options.fileModeStyle.toLowerCase();
6111
- }
6112
- p = $.trim(p);
6113
- if (p.match(/[rwxs-]{9}$/i)) {
6114
- str = p = p.substr(-9);
6115
- if (style == 'string') {
6116
- return str;;
6117
- }
6118
- oct = '';
6119
- s = 0;
6120
- for (i=0; i<7; i=i+3) {
6121
- o = p.substr(i, 3);
6122
- b = 0;
6123
- if (o.match(/[r]/i)) {
6124
- b += 4;
6125
- }
6126
- if (o.match(/[w]/i)) {
6127
- b += 2;
6128
  }
6129
- if (o.match(/[xs]/i)) {
6130
- if (o.match(/[xs]/)) {
6131
- b += 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6132
  }
6133
- if (o.match(/[s]/i)) {
6134
- if (i == 0) {
6135
- s += 4;
6136
- } else if (i == 3) {
6137
- s += 2;
 
 
 
 
 
 
 
 
 
 
 
 
6138
  }
6139
  }
6140
- }
6141
- oct += b.toString(8);
6142
- }
6143
- if (s) {
6144
- oct = s.toString(8) + oct;
6145
- }
6146
- } else {
6147
- p = parseInt(p, 8);
6148
- oct = p? p.toString(8) : '';
6149
- if (!p || style == 'octal') {
6150
- return oct;
6151
- }
6152
- o = p.toString(8);
6153
- s = 0;
6154
- if (o.length > 3) {
6155
- o = o.substr(-4);
6156
- s = parseInt(o.substr(0, 1), 8);
6157
- o = o.substr(1);
6158
- }
6159
- sticy = ((s & 1) == 1); // not support
6160
- sgid = ((s & 2) == 2);
6161
- suid = ((s & 4) == 4);
6162
- str = '';
6163
- for(i=0; i<3; i++) {
6164
- if ((parseInt(o.substr(i, 1), 8) & 4) == 4) {
6165
- str += 'r';
6166
- } else {
6167
- str += '-';
6168
- }
6169
- if ((parseInt(o.substr(i, 1), 8) & 2) == 2) {
6170
- str += 'w';
6171
- } else {
6172
- str += '-';
6173
- }
6174
- if ((parseInt(o.substr(i, 1), 8) & 1) == 1) {
6175
- str += ((i==0 && suid)||(i==1 && sgid))? 's' : 'x';
6176
  } else {
6177
- str += '-';
 
 
6178
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6179
  }
6180
  }
6181
- if (style == 'both') {
6182
- return str + ' (' + oct + ')';
6183
- } else if (style == 'string') {
6184
- return str;
6185
- } else {
6186
- return oct;
6187
- }
6188
  },
6189
 
6190
  /**
6191
- * Return boolean that uploadable MIME type into target folder
6192
  *
6193
- * @param String mime MIME type
6194
- * @param String target target folder hash
6195
- * @return Bool
6196
  */
6197
- uploadMimeCheck : function(mime, target) {
6198
- target = target || this.cwd().hash;
6199
- var res = true, // default is allow
6200
- mimeChecker = this.option('uploadMime', target),
6201
- allow,
6202
- deny,
6203
- check = function(checker) {
6204
- var ret = false;
6205
- if (typeof checker === 'string' && checker.toLowerCase() === 'all') {
6206
- ret = true;
6207
- } else if ($.isArray(checker) && checker.length) {
6208
- $.each(checker, function(i, v) {
6209
- v = v.toLowerCase();
6210
- if (v === 'all' || mime.indexOf(v) === 0) {
6211
- ret = true;
6212
- return false;
6213
- }
6214
- });
6215
- }
6216
- return ret;
6217
- };
6218
- if (mime && $.isPlainObject(mimeChecker)) {
6219
- mime = mime.toLowerCase();
6220
- allow = check(mimeChecker.allow);
6221
- deny = check(mimeChecker.deny);
6222
- if (mimeChecker.firstOrder === 'allow') {
6223
- res = false; // default is deny
6224
- if (! deny && allow === true) { // match only allow
6225
- res = true;
 
 
 
 
 
 
6226
  }
 
6227
  } else {
6228
- res = true; // default is allow
6229
- if (deny === true && ! allow) { // match only deny
6230
- res = false;
6231
- }
6232
  }
 
 
 
 
 
 
 
6233
  }
6234
- return res;
6235
  },
6236
 
6237
  /**
6238
- * call chained sequence of async deferred functions
6239
  *
6240
- * @param Array tasks async functions
6241
- * @return Object jQuery.Deferred
 
 
 
6242
  */
6243
- sequence : function(tasks) {
6244
- var l = tasks.length,
6245
- chain = function(task, idx) {
6246
- ++idx;
6247
- if (tasks[idx]) {
6248
- return chain(task.then(tasks[idx]), idx);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6249
  } else {
6250
- return task;
6251
  }
6252
  };
6253
- if (l > 1) {
6254
- return chain(tasks[0](), 0);
 
 
 
6255
  } else {
6256
- return tasks[0]();
6257
  }
 
6258
  },
6259
 
6260
- /**
6261
- * Reload contents of target URL for clear browser cache
6262
- *
6263
- * @param String url target URL
6264
- * @return Object jQuery.Deferred
6265
- */
6266
- reloadContents : function(url) {
6267
- var dfd = $.Deferred(),
6268
- ifm;
6269
- try {
6270
- ifm = $('<iframe width="1" height="1" scrolling="no" frameborder="no" style="position:absolute; top:-1px; left:-1px" crossorigin="use-credentials">')
6271
- .attr('src', url)
6272
- .one('load', function() {
6273
- var ifm = $(this);
6274
- try {
6275
- this.contentDocument.location.reload(true);
6276
- ifm.one('load', function() {
6277
- ifm.remove();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6278
  dfd.resolve();
6279
  });
6280
- } catch(e) {
6281
- ifm.attr('src', '').attr('src', url).one('load', function() {
6282
- ifm.remove();
6283
- dfd.resolve();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6284
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6285
  }
6286
- })
6287
- .appendTo('body');
6288
- } catch(e) {
6289
- ifm && ifm.remove();
6290
- dfd.reject();
6291
- }
6292
- return dfd;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6293
  },
6294
 
6295
  /**
6296
- * Make netmount option for OAuth2
6297
- *
6298
- * @param String protocol
6299
- * @param String name
6300
- * @param String host
6301
- * @param Boolean noOffline
6302
- *
6303
- * @return Object
6304
  */
6305
- makeNetmountOptionOauth : function(protocol, name, host, noOffline) {
6306
- return {
6307
- vars : {},
6308
- name : name,
6309
- inputs: {
6310
- offline : $('<input type="checkbox"/>').on('change', function() {
6311
- $(this).parents('table.elfinder-netmount-tb').find('select:first').trigger('change', 'reset');
6312
- }),
6313
- host : $('<span><span class="elfinder-info-spinner"/></span><input type="hidden"/>'),
6314
- path : $('<input type="text" value="root"/>'),
6315
- user : $('<input type="hidden"/>'),
6316
- pass : $('<input type="hidden"/>')
6317
- },
6318
- select: function(fm, ev, data){
6319
- var f = this.inputs,
6320
- oline = f.offline,
6321
- f0 = $(f.host[0]),
6322
- data = data || null;
6323
- this.vars.mbtn = f.host.closest('.ui-dialog').children('.ui-dialog-buttonpane:first').find('button.elfinder-btncnt-0');
6324
- if (! f0.data('inrequest')
6325
- && (f0.find('span.elfinder-info-spinner').length
6326
- || data === 'reset'
6327
- || (data === 'winfocus' && ! f0.siblings('span.elfinder-button-icon-reload').length))
6328
- )
6329
- {
6330
- if (oline.parent().children().length === 1) {
6331
- f.path.parent().prev().html(fm.i18n('folderId'));
6332
- oline.attr('title', fm.i18n('offlineAccess'));
6333
- oline.uniqueId().after($('<label/>').attr('for', oline.attr('id')).html(' '+fm.i18n('offlineAccess')));
6334
- }
6335
- f0.data('inrequest', true).empty().addClass('elfinder-info-spinner')
6336
- .parent().find('span.elfinder-button-icon').remove();
6337
- fm.request({
6338
- data : {cmd : 'netmount', protocol: protocol, host: host, user: 'init', options: {id: fm.id, offline: oline.prop('checked')? 1:0, pass: f.host[1].value}},
6339
- preventDefault : true
6340
- }).done(function(data){
6341
- f0.removeClass("elfinder-info-spinner").html(data.body.replace(/\{msg:([^}]+)\}/g, function(whole,s1){return fm.i18n(s1, host);}));
6342
  });
6343
- noOffline && oline.closest('tr').hide();
6344
  } else {
6345
- oline.closest('tr')[(noOffline || f.user.val())? 'hide':'show']();
6346
- f0.data('funcexpup') && f0.data('funcexpup')();
6347
  }
6348
- this.vars.mbtn[$(f.host[1]).val()? 'show':'hide']();
6349
  },
6350
- done: function(fm, data){
6351
- var f = this.inputs,
6352
- p = this.protocol,
6353
- f0 = $(f.host[0]),
6354
- f1 = $(f.host[1]),
6355
- expires = '&nbsp;';
6356
-
6357
- noOffline && f.offline.closest('tr').hide();
6358
- if (data.mode == 'makebtn') {
6359
- f0.removeClass('elfinder-info-spinner').removeData('expires').removeData('funcexpup');
6360
- f.host.find('input').hover(function(){$(this).toggleClass('ui-state-hover');});
6361
- f1.val('');
6362
- f.path.val('root').next().remove();
6363
- f.user.val('');
6364
- f.pass.val('');
6365
- ! noOffline && f.offline.closest('tr').show();
6366
- this.vars.mbtn.hide();
6367
  } else {
6368
- if (data.expires) {
6369
- expires = '()';
6370
- f0.data('expires', data.expires);
6371
- }
6372
- f0.html(host + expires).removeClass('elfinder-info-spinner');
6373
- if (data.expires) {
6374
- f0.data('funcexpup', function() {
6375
- var rem = Math.floor((f0.data('expires') - (+new Date()) / 1000) / 60);
6376
- if (rem < 3) {
6377
- f0.parent().children('.elfinder-button-icon-reload').click();
6378
- } else {
6379
- f0.text(f0.text().replace(/\(.*\)/, '('+fm.i18n(['minsLeft', rem])+')'));
6380
- setTimeout(function() {
6381
- if (f0.is(':visible')) {
6382
- f0.data('funcexpup')();
6383
- }
6384
- }, 60000);
6385
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6386
  });
6387
- f0.data('funcexpup')();
6388
- }
6389
- if (data.reset) {
6390
- p.trigger('change', 'reset');
6391
- return;
6392
- }
6393
- f0.parent().append($('<span class="elfinder-button-icon elfinder-button-icon-reload" title="'+fm.i18n('reAuth')+'">')
6394
- .on('click', function() {
6395
- f1.val('reauth');
6396
- p.trigger('change', 'reset');
6397
- }));
6398
- f1.val(protocol);
6399
- this.vars.mbtn.show();
6400
- if (data.folders) {
6401
- f.path.next().remove().end().after(
6402
- $('<div/>').append(
6403
- $('<select class="ui-corner-all" style="max-width:200px;">').append(
6404
- $($.map(data.folders, function(n,i){return '<option value="'+(i+'').trim()+'">'+fm.escape(n)+'</option>'}).join(''))
6405
- ).on('change', function(){f.path.val($(this).val());})
6406
- )
6407
- );
6408
  }
6409
- f.user.val('done');
6410
- f.pass.val('done');
6411
- f.offline.closest('tr').hide();
6412
- }
6413
- f0.removeData('inrequest');
6414
- },
6415
- fail: function(fm, err){
6416
- $(this.inputs.host[0]).removeData('inrequest');
6417
- this.protocol.trigger('change', 'reset');
6418
  }
6419
- };
 
6420
  },
6421
-
6422
  /**
6423
- * Find cwd's nodes from files
 
 
 
6424
  *
6425
- * @param Array files
6426
- * @param Object opts {firstOnly: true|false}
6427
  */
6428
- findCwdNodes : function(files, opts) {
6429
- var self = this,
6430
- cwd = this.getUI('cwd'),
6431
- cwdHash = this.cwd().hash,
6432
- newItem = $();
6433
-
6434
- opts = opts || {};
6435
-
6436
- $.each(files, function(i, f) {
6437
- if (f.phash === cwdHash) {
6438
- newItem = newItem.add(cwd.find('#'+self.cwdHash2Id(f.hash)));
6439
- if (opts.firstOnly) {
6440
- return false;
6441
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6442
  }
6443
  });
6444
-
6445
- return newItem;
 
 
 
6446
  },
6447
-
6448
- navHash2Id : function(hash) {
6449
- return this.navPrefix + hash;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6450
  },
6451
-
6452
- navId2Hash : function(id) {
6453
- return typeof(id) == 'string' ? id.substr(this.navPrefix.length) : false;
 
 
 
 
 
6454
  },
6455
 
6456
- cwdHash2Id : function(hash) {
6457
- return this.cwdPrefix + hash;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6458
  },
6459
 
6460
- cwdId2Hash : function(id) {
6461
- return typeof(id) == 'string' ? id.substr(this.cwdPrefix.length) : false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6462
  },
6463
 
6464
- isInWindow : function(elem, nochkHide) {
6465
- if (! nochkHide && elem.is(':hidden')) {
6466
- return false;
 
 
 
 
 
 
 
 
 
 
6467
  }
6468
- var elm, rect;
6469
- if (! (elm = elem.get(0))) {
6470
- return false;
 
 
 
6471
  }
6472
- rect = elm.getBoundingClientRect();
6473
- return document.elementFromPoint(rect.left, rect.top)? true : false;
 
 
 
 
6474
  },
6475
-
6476
  log : function(m) { window.console && window.console.log && window.console.log(m); return this; },
6477
 
6478
  debug : function(type, m) {
6479
  var d = this.options.debug;
6480
 
6481
- if (d == 'all' || d === true || ($.isArray(d) && $.inArray(type, d) != -1)) {
6482
  window.console && window.console.log && window.console.log('elfinder debug: ['+type+'] ['+this.id+']', m);
6483
  }
6484
 
6485
- if (type === 'backend-debug') {
 
 
 
 
 
6486
  this.trigger('backenddebug', m);
6487
  }
6488
 
@@ -6492,7 +9972,7 @@ elFinder.prototype = {
6492
  timeEnd : function(l) { window.console && window.console.timeEnd && window.console.timeEnd(l); }
6493
 
6494
 
6495
- }
6496
 
6497
  /**
6498
  * for conpat ex. ie8...
@@ -6513,26 +9993,138 @@ if (!Object.keys) {
6513
  'propertyIsEnumerable',
6514
  'constructor'
6515
  ],
6516
- dontEnumsLength = dontEnums.length
6517
 
6518
  return function (obj) {
6519
- if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object')
6520
 
6521
- var result = []
6522
 
6523
  for (var prop in obj) {
6524
- if (hasOwnProperty.call(obj, prop)) result.push(prop)
6525
  }
6526
 
6527
  if (hasDontEnumBug) {
6528
  for (var i=0; i < dontEnumsLength; i++) {
6529
- if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i])
6530
  }
6531
  }
6532
- return result
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6533
  }
6534
- })()
6535
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6536
 
6537
 
6538
  /*
@@ -6544,7 +10136,7 @@ if (!Object.keys) {
6544
  *
6545
  * @type String
6546
  **/
6547
- elFinder.prototype.version = '2.1.18';
6548
 
6549
 
6550
 
@@ -6563,8 +10155,8 @@ if ($.ui) {
6563
  return true;
6564
  }
6565
  var rect = elem[0].getBoundingClientRect();
6566
- return document.elementFromPoint(rect.left, rect.top)? false : true;
6567
- }
6568
 
6569
  if (event.type === 'mousedown' || t.options.elfRefresh) {
6570
  var i, d,
@@ -6578,13 +10170,76 @@ if ($.ui) {
6578
  }
6579
  }
6580
  }
6581
-
6582
- // call origin function
6583
- return origin( t, event );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6584
  };
6585
  }
6586
- }
6587
- })();
6588
 
6589
  /*!
6590
  * jQuery UI Touch Punch 0.2.3
@@ -6702,7 +10357,7 @@ if ($.ui) {
6702
  var x = event.originalEvent.changedTouches[0].screenX.toFixed(0);
6703
  var y = event.originalEvent.changedTouches[0].screenY.toFixed(0);
6704
  // Ignore if it's a "false" move (position not changed)
6705
- if (Math.abs(posX - x) <= 2 && Math.abs(posY - y) <= 2) {
6706
  return;
6707
  }
6708
 
@@ -6754,7 +10409,7 @@ if ($.ui) {
6754
 
6755
  if (self.element.hasClass('touch-punch')) {
6756
  // Delegate the touch handlers to the widget's element
6757
- self.element.bind({
6758
  touchstart: $.proxy(self, '_touchStart'),
6759
  touchmove: $.proxy(self, '_touchMove'),
6760
  touchend: $.proxy(self, '_touchEnd')
@@ -6774,7 +10429,7 @@ if ($.ui) {
6774
 
6775
  if (self.element.hasClass('touch-punch')) {
6776
  // Delegate the touch handlers to the widget's element
6777
- self.element.unbind({
6778
  touchstart: $.proxy(self, '_touchStart'),
6779
  touchmove: $.proxy(self, '_touchMove'),
6780
  touchend: $.proxy(self, '_touchEnd')
@@ -6787,36 +10442,57 @@ if ($.ui) {
6787
 
6788
  })(jQuery);
6789
 
6790
- $.fn.elfinder = function(o) {
6791
 
6792
- if (o == 'instance') {
6793
  return this.getElFinder();
 
 
6794
  }
6795
 
6796
  return this.each(function() {
6797
 
6798
- var cmd = typeof(o) == 'string' ? o : '';
6799
- if (!this.elfinder) {
6800
- new elFinder(this, typeof(o) == 'object' ? o : {});
6801
- }
6802
 
6803
- switch(cmd) {
6804
- case 'close':
6805
- case 'hide':
6806
- this.elfinder.hide();
6807
- break;
6808
-
6809
- case 'open':
6810
- case 'show':
6811
- this.elfinder.show();
6812
- break;
 
 
 
 
 
 
 
 
 
6813
 
6814
- case'destroy':
6815
- this.elfinder.destroy();
6816
- break;
 
 
 
 
 
 
 
 
 
 
 
6817
  }
6818
-
6819
- })
6820
  };
6821
 
6822
  $.fn.getElFinder = function() {
@@ -6845,6 +10521,38 @@ $.fn.elfUiWidgetInstance = function(name) {
6845
  }
6846
  };
6847
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /*!
2
  * elFinder - file manager for web
3
+ * Version 2.1.46 (2019-02-21)
4
  * http://elfinder.org
5
  *
6
+ * Copyright 2009-2019, Studio 42
7
  * Licensed under a 3-clauses BSD license
8
  */
9
+ (function(root, factory) {
10
+ if (typeof define === 'function' && define.amd) {
11
+ // AMD
12
+ define(['jquery','jquery-ui'], factory);
13
+ } else if (typeof exports !== 'undefined') {
14
+ // CommonJS
15
+ var $, ui;
16
+ try {
17
+ $ = require('jquery');
18
+ ui = require('jquery-ui');
19
+ } catch (e) {}
20
+ module.exports = factory($, ui);
21
+ } else {
22
+ // Browser globals (Note: root is window)
23
+ factory(root.jQuery, root.jQuery.ui, true);
24
+ }
25
+ }(this, function($, _ui, toGlobal) {
26
+ toGlobal = toGlobal || false;
27
 
28
 
29
  /*
35
  *
36
  * @author Dmitry (dio) Levashov
37
  **/
38
+ var elFinder = function(elm, opts, bootCallback) {
39
+ //this.time('load');
 
40
  var self = this,
41
 
42
  /**
43
+ * Objects array of jQuery.Deferred that calls before elFinder boot up
44
+ *
45
+ * @type Array
46
+ */
47
+ dfrdsBeforeBootup = [],
48
+
49
+ /**
50
+ * Plugin name to check for conflicts with bootstrap etc
51
  *
52
+ * @type Array
53
  **/
54
+ conflictChecks = ['button', 'tooltip'],
55
 
56
  /**
57
+ * Node on which elfinder creating
58
  *
 
59
  * @type jQuery
60
  **/
61
+ node = $(elm),
62
+
63
+ /**
64
+ * Object of events originally registered in this node
65
+ *
66
+ * @type Object
67
+ */
68
+ prevEvents = $.extend(true, {}, $._data(node.get(0), 'events')),
69
 
70
  /**
71
+ * Store node contents.
72
  *
73
  * @see this.destroy
74
+ * @type jQuery
75
  **/
76
+ prevContent = $('<div/>').append(node.contents()).attr('class', node.attr('class') || '').attr('style', node.attr('style') || ''),
77
 
78
  /**
79
  * Instance ID. Required to get/set cookie
80
  *
81
  * @type String
82
  **/
83
+ id = node.attr('id') || node.attr('id', 'elfauto' + $('.elfinder').length).attr('id'),
84
 
85
  /**
86
  * Events namespace
87
  *
88
  * @type String
89
  **/
90
+ namespace = 'elfinder-' + id,
91
 
92
  /**
93
  * Mousedown event
110
  **/
111
  keypress = 'keypress.'+namespace,
112
 
113
+ /**
114
+ * Keypup event
115
+ *
116
+ * @type String
117
+ **/
118
+ keyup = 'keyup.'+namespace,
119
+
120
  /**
121
  * Is shortcuts/commands enabled
122
  *
123
  * @type Boolean
124
  **/
125
+ enabled = false,
126
 
127
  /**
128
+ * Store enabled value before ajax request
129
  *
130
  * @type Boolean
131
  **/
132
+ prevEnabled = false,
133
 
134
  /**
135
  * List of build-in events which mapped into methods with same names
153
  cwd = '',
154
 
155
  /**
156
+ * Current working directory options default
157
  *
158
  * @type Object
159
  **/
160
+ cwdOptionsDefault = {
161
  path : '',
162
  url : '',
163
  tmbUrl : '',
173
  tmb : false // old API
174
  },
175
 
176
+ /**
177
+ * Current working directory options
178
+ *
179
+ * @type Object
180
+ **/
181
+ cwdOptions = {},
182
+
183
  /**
184
  * Files/dirs cache
185
  *
187
  **/
188
  files = {},
189
 
190
+ /**
191
+ * Hidden Files/dirs cache
192
+ *
193
+ * @type Object
194
+ **/
195
+ hiddenFiles = {},
196
+
197
+ /**
198
+ * Files/dirs hash cache of each dirs
199
+ *
200
+ * @type Object
201
+ **/
202
+ ownFiles = {},
203
+
204
  /**
205
  * Selected files hashes
206
  *
234
  * Prevent from remove its from cache.
235
  * Required for dispaly correct files names in error messages
236
  *
237
+ * @type Object
238
  **/
239
+ remember = {},
240
 
241
  /**
242
  * Queue for 'open' requests
269
 
270
  /**
271
  * elFinder node height
272
+ * Number: pixcel or String: Number + "%"
273
  *
274
+ * @type Number | String
275
  * @default 400
276
  **/
277
  height = 400,
278
 
279
+ /**
280
+ * Base node object or selector
281
+ * Element which is the reference of the height percentage
282
+ *
283
+ * @type Object|String
284
+ * @default null | $(window) (if height is percentage)
285
+ **/
286
+ heightBase = null,
287
+
288
+ /**
289
+ * MIME type list(Associative array) handled as a text file
290
+ *
291
+ * @type Object|null
292
+ */
293
+ textMimes = null,
294
+
295
  /**
296
  * elfinder path for sound played on remove
297
  * @type String
298
  * @default ./sounds/
299
  **/
300
+ soundPath = 'sounds/',
301
+
302
+ /**
303
+ * JSON.stringify of previous fm.sorters
304
+ * @type String
305
+ */
306
+ prevSorterStr = '',
307
+
308
+ /**
309
+ * Map table of file extention to MIME-Type
310
+ * @type Object
311
+ */
312
+ extToMimeTable,
313
+
314
+ /**
315
+ * Disabled page unload function
316
+ * @type Boolean
317
+ */
318
+ diableUnloadCheck = false,
319
+
320
  beeper = $(document.createElement('audio')).hide().appendTo('body')[0],
321
 
322
  syncInterval,
324
 
325
  uiCmdMapPrev = '',
326
 
327
+ gcJobRes = null,
328
+
329
  open = function(data) {
330
  // NOTES: Do not touch data object
331
 
332
  var volumeid, contextmenu, emptyDirs = {}, stayDirs = {},
333
+ rmClass, hashes, calc, gc, collapsed, prevcwd, sorterStr;
334
 
335
  if (self.api >= 2.1) {
 
 
336
  // support volume driver option `uiCmdMap`
337
+ self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {};
338
  if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) {
339
  uiCmdMapPrev = JSON.stringify(self.commandMap);
 
 
 
 
 
 
 
 
 
 
 
340
  }
341
  } else {
342
  self.options.sync = 0;
345
  if (data.init) {
346
  // init - reset cache
347
  files = {};
348
+ ownFiles = {};
349
  } else {
350
  // remove only files from prev cwd
351
  // and collapsed directory (included 100+ directories) to empty for perfomance tune in DnD
353
  rmClass = 'elfinder-subtree-loaded ' + self.res('class', 'navexpand');
354
  collapsed = self.res('class', 'navcollapse');
355
  hashes = Object.keys(files);
356
+ calc = function(i) {
357
  if (!files[i]) {
358
  return true;
359
  }
361
  var isDir = (files[i].mime === 'directory'),
362
  phash = files[i].phash,
363
  pnav;
364
+
365
  if (
366
  (!isDir
367
  || emptyDirs[phash]
368
  || (!stayDirs[phash]
369
+ && self.navHash2Elm(files[i].hash).is(':hidden')
370
+ && self.navHash2Elm(phash).next('.elfinder-navbar-subtree').children().length > 100
371
  )
372
  )
373
  && (isDir || phash !== cwd)
374
+ && ! remember[i]
375
  ) {
376
  if (isDir && !emptyDirs[phash]) {
377
  emptyDirs[phash] = true;
378
+ self.navHash2Elm(phash)
379
  .removeClass(rmClass)
380
  .next('.elfinder-navbar-subtree').empty();
381
  }
382
+ deleteCache(files[i]);
383
  } else if (isDir) {
384
  stayDirs[phash] = true;
385
  }
386
  };
387
  gc = function() {
388
  if (hashes.length) {
389
+ gcJobRes && gcJobRes._abort();
390
+ gcJobRes = self.asyncJob(calc, hashes, {
391
+ interval : 20,
392
+ numPerOnce : 100
393
+ }).done(function() {
394
+ var hd = self.storage('hide') || {items: {}};
395
+ if (Object.keys(hiddenFiles).length) {
396
+ $.each(hiddenFiles, function(h) {
397
+ if (!hd.items[h]) {
398
+ delete hiddenFiles[h];
399
+ }
400
+ });
401
+ }
402
+ });
403
  }
404
  };
405
 
418
  });
419
  }
420
 
421
+ self.sorters = {};
422
  cwd = data.cwd.hash;
423
  cache(data.files);
424
  if (!files[cwd]) {
425
  cache([data.cwd]);
426
  }
427
+
428
+ // trigger event 'sorterupdate'
429
+ sorterStr = JSON.stringify(self.sorters);
430
+ if (prevSorterStr !== sorterStr) {
431
+ self.trigger('sorterupdate');
432
+ prevSorterStr = sorterStr;
433
+ }
434
+
435
  self.lastDir(cwd);
436
 
437
  self.autoSync();
441
  * Store info about files/dirs in "files" object.
442
  *
443
  * @param Array files
444
+ * @param String data type
445
  * @return void
446
  **/
447
+ cache = function(data, type) {
448
  var defsorter = { name: true, perm: true, date: true, size: true, kind: true },
449
+ sorterChk = !self.sorters._checked,
450
  l = data.length,
451
+ setSorter = function(file) {
452
+ var f = file || {},
453
+ sorters = [];
454
+ $.each(self.sortRules, function(key) {
455
+ if (defsorter[key] || typeof f[key] !== 'undefined' || (key === 'mode' && typeof f.perm !== 'undefined')) {
456
+ sorters.push(key);
457
+ }
458
+ });
459
+ self.sorters = self.arrayFlip(sorters, true);
460
+ self.sorters._checked = true;
461
+ },
462
+ keeps = ['sizeInfo'],
463
+ changedParents = {},
464
+ hideData = self.storage('hide') || {},
465
+ hides = hideData.items || {},
466
+ f, i, keepProp, parents, hidden;
467
 
468
  for (i = 0; i < l; i++) {
469
+ f = Object.assign({}, data[i]);
470
+ hidden = (!hideData.show && hides[f.hash])? true : false;
471
  if (f.name && f.hash && f.mime) {
472
+ if (!hidden) {
473
+ if (sorterChk && f.phash === cwd) {
474
+ setSorter(f);
475
+ sorterChk = false;
476
+ }
477
+
478
+ if (f.phash && (type === 'add' || type === 'change')) {
479
+ if (parents = self.parents(f.phash)) {
480
+ $.each(parents, function() {
481
+ changedParents[this] = true;
482
+ });
483
+ }
484
+ }
485
+ }
486
+
487
+ if (files[f.hash]) {
488
+ $.each(keeps, function() {
489
+ if(files[f.hash][this] && ! f[this]) {
490
+ f[this] = files[f.hash][this];
491
  }
492
  });
493
+ if (f.sizeInfo && !f.size) {
494
+ f.size = f.sizeInfo.size;
495
+ }
496
+ deleteCache(files[f.hash], true);
497
  }
498
+ if (hides[f.hash]) {
499
+ hiddenFiles[f.hash] = f;
500
+ }
501
+ if (hidden) {
502
+ l--;
503
+ data.splice(i--, 1);
504
+ } else {
505
+ files[f.hash] = f;
506
+ if (f.mime === 'directory' && !ownFiles[f.hash]) {
507
+ ownFiles[f.hash] = {};
508
+ }
509
+ if (f.phash) {
510
+ if (!ownFiles[f.phash]) {
511
+ ownFiles[f.phash] = {};
512
  }
513
+ ownFiles[f.phash][f.hash] = true;
514
  }
515
+ }
516
+ }
517
+ }
518
+ // delete sizeInfo cache
519
+ $.each(Object.keys(changedParents), function() {
520
+ var target = files[this];
521
+ if (target && target.sizeInfo) {
522
+ delete target.sizeInfo;
523
+ }
524
+ });
525
+
526
+ // for empty folder
527
+ sorterChk && setSorter();
528
+ },
529
+
530
+ /**
531
+ * Delete file object from files caches
532
+ *
533
+ * @param Array removed hashes
534
+ * @return void
535
+ */
536
+ remove = function(removed) {
537
+ var l = removed.length,
538
+ roots = {},
539
+ rm = function(hash) {
540
+ var file = files[hash], i;
541
+ if (file) {
542
+ if (file.mime === 'directory') {
543
+ if (roots[hash]) {
544
+ delete self.roots[roots[hash]];
545
+ }
546
+ // restore stats of deleted root parent directory
547
+ $.each(self.leafRoots, function(phash, roots) {
548
+ var idx, pdir;
549
+ if ((idx = $.inArray(hash, roots))!== -1) {
550
+ if (roots.length === 1) {
551
+ if ((pdir = Object.assign({}, files[phash])) && pdir._realStats) {
552
+ $.each(pdir._realStats, function(k, v) {
553
+ pdir[k] = v;
554
+ });
555
+ remove(files[phash]._realStats);
556
+ self.change({ changed: [pdir] });
557
+ }
558
+ delete self.leafRoots[phash];
559
+ } else {
560
+ self.leafRoots[phash].splice(idx, 1);
561
+ }
562
+ }
563
+ });
564
+ if (self.searchStatus.state < 2) {
565
+ $.each(files, function(h, f) {
566
+ f.phash == hash && rm(h);
567
+ });
568
  }
569
+ }
570
+ if (file.phash) {
571
+ if (parents = self.parents(file.phash)) {
572
+ $.each(parents, function() {
573
+ changedParents[this] = true;
574
+ });
575
  }
576
  }
577
+ deleteCache(files[hash]);
578
  }
579
+ },
580
+ changedParents = {},
581
+ parents;
582
+
583
+ $.each(self.roots, function(k, v) {
584
+ roots[v] = k;
585
+ });
586
+ while (l--) {
587
+ rm(removed[l]);
588
+ }
589
+ // delete sizeInfo cache
590
+ $.each(Object.keys(changedParents), function() {
591
+ var target = files[this];
592
+ if (target && target.sizeInfo) {
593
+ delete target.sizeInfo;
594
+ }
595
+ });
596
+ },
597
+
598
+ /**
599
+ * Update file object in files caches
600
+ *
601
+ * @param Array changed file objects
602
+ * @return void
603
+ */
604
+ change = function(changed) {
605
+ $.each(changed, function(i, file) {
606
+ var hash = file.hash;
607
+ if (files[hash]) {
608
+ $.each(Object.keys(files[hash]), function(i, v){
609
+ if (typeof file[v] === 'undefined') {
610
+ delete files[hash][v];
611
+ }
612
+ });
613
+ }
614
+ files[hash] = files[hash] ? Object.assign(files[hash], file) : file;
615
+ });
616
+ },
617
+
618
+ /**
619
+ * Delete cache data of files, ownFiles and self.optionsByHashes
620
+ *
621
+ * @param Object file
622
+ * @param Boolean update
623
+ * @return void
624
+ */
625
+ deleteCache = function(file, update) {
626
+ var hash = file.hash,
627
+ phash = file.phash;
628
+
629
+ if (phash && ownFiles[phash]) {
630
+ delete ownFiles[phash][hash];
631
+ }
632
+ if (!update) {
633
+ ownFiles[hash] && delete ownFiles[hash];
634
+ self.optionsByHashes[hash] && delete self.optionsByHashes[hash];
635
  }
636
+ delete files[hash];
637
  },
638
 
639
+ /**
640
+ * Maximum number of concurrent connections on request
641
+ *
642
+ * @type Number
643
+ */
644
+ requestMaxConn,
645
+
646
+ /**
647
+ * Current number of connections
648
+ *
649
+ * @type Number
650
+ */
651
+ requestCnt = 0,
652
+
653
+ /**
654
+ * Queue waiting for connection
655
+ *
656
+ * @type Array
657
+ */
658
+ requestQueue = [],
659
+
660
+ /**
661
+ * Flag to cancel the `open` command waiting for connection
662
+ *
663
+ * @type Boolean
664
+ */
665
+ requestQueueSkipOpen = false,
666
+
667
  /**
668
  * Exec shortcut
669
  *
673
  execShortcut = function(e) {
674
  var code = e.keyCode,
675
  ctrlKey = !!(e.ctrlKey || e.metaKey),
676
+ isMousedown = e.type === 'mousedown',
677
  ddm;
678
 
679
+ !isMousedown && (self.keyState.keyCode = code);
680
+ self.keyState.ctrlKey = ctrlKey;
681
+ self.keyState.shiftKey = e.shiftKey;
682
+ self.keyState.metaKey = e.metaKey;
683
+ self.keyState.altKey = e.altKey;
684
+ if (isMousedown) {
685
+ return;
686
+ } else if (e.type === 'keyup') {
687
+ self.keyState.keyCode = null;
688
+ return;
689
+ }
690
+
691
  if (enabled) {
692
 
693
  $.each(shortcuts, function(i, shortcut) {
720
  ddm && ddm.helper && ddm.cancel();
721
  }
722
  // button menus
723
+ self.toHide(node.find('.ui-widget.elfinder-button-menu.elfinder-frontmost:visible'));
724
+ // trigger keydownEsc
725
+ self.trigger('keydownEsc', e);
726
  }
727
 
728
  }
747
  } catch(e) {}
748
  }
749
  return pifm;
750
+ })(),
751
+ /**
752
+ * elFinder boot up function
753
+ *
754
+ * @type Function
755
+ */
756
+ bootUp,
757
+ /**
758
+ * Original function of XMLHttpRequest.prototype.send
759
+ *
760
+ * @type Function
761
+ */
762
+ savedXhrSend;
763
+
764
+ // opts must be an object
765
+ if (!opts) {
766
+ opts = {};
767
+ }
768
+
769
+ // set UA.Angle, UA.Rotated for mobile devices
770
+ if (self.UA.Mobile) {
771
+ $(window).on('orientationchange.'+namespace, function() {
772
+ var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0;
773
+ if (a === -90) {
774
+ a = 270;
775
+ }
776
+ self.UA.Angle = a;
777
+ self.UA.Rotated = a % 180 === 0? false : true;
778
+ }).trigger('orientationchange.'+namespace);
779
+ }
780
+
781
+ // check opt.bootCallback
782
+ if (opts.bootCallback && typeof opts.bootCallback === 'function') {
783
+ (function() {
784
+ var func = bootCallback,
785
+ opFunc = opts.bootCallback;
786
+ bootCallback = function(fm, extraObj) {
787
+ func && typeof func === 'function' && func.call(this, fm, extraObj);
788
+ opFunc.call(this, fm, extraObj);
789
+ };
790
  })();
791
+ }
792
+ delete opts.bootCallback;
793
 
794
  /**
795
  * Protocol version
820
  this.netDrivers = [];
821
 
822
  /**
823
+ * Base URL of elfFinder library starting from Manager HTML
824
+ *
825
+ * @type String
826
+ */
827
+ this.baseUrl = '';
828
 
829
  /**
830
+ * Base URL of i18n js files
831
+ * baseUrl + "js/i18n/" when empty value
832
  *
833
+ * @type String
834
  */
835
+ this.i18nBaseUrl = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
836
 
 
 
 
 
837
  /**
838
+ * Is elFinder CSS loaded
839
+ *
840
  * @type Boolean
841
+ */
842
+ this.cssloaded = false;
843
 
844
+ /**
845
+ * Current theme object
846
+ *
847
+ * @type Object|Null
848
+ */
849
+ this.theme = null;
850
+
851
+ this.mimesCanMakeEmpty = {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
852
 
 
 
853
  /**
854
+ * Callback function at boot up that option specified at elFinder starting
855
+ *
856
+ * @type Function
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
857
  */
858
+ this.bootCallback;
859
 
860
  /**
861
+ * Callback function at reload(restart) elFinder
862
+ *
863
+ * @type Function
 
 
864
  */
865
+ this.reloadCallback;
866
 
867
  /**
868
  * ID. Required to create unique cookie name
870
  * @type String
871
  **/
872
  this.id = id;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
873
 
874
  /**
875
  * Method to store/fetch data
878
  **/
879
  this.storage = (function() {
880
  try {
881
+ if ('localStorage' in window && window.localStorage !== null) {
882
  if (self.UA.Safari) {
883
  // check for Mac/iOS safari private browsing mode
884
  window.localStorage.setItem('elfstoragecheck', 1);
893
  }
894
  })();
895
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
896
  /**
897
+ * Set pause page unload check function or Get state
898
  *
899
+ * @param Boolean state To set state
900
+ * @param Boolean keep Keep disabled
901
+ * @return Boolean|void
902
+ */
903
+ this.pauseUnloadCheck = function(state, keep) {
904
+ if (typeof state === 'undefined') {
905
+ return diableUnloadCheck;
906
+ } else {
907
+ diableUnloadCheck = !!state;
908
+ if (state && !keep) {
909
+ requestAnimationFrame(function() {
910
+ diableUnloadCheck = false;
911
+ });
912
+ }
913
+ }
914
+ };
915
+
916
  /**
917
+ * Configuration options
918
  *
919
+ * @type Object
920
  **/
921
+ //this.options = $.extend(true, {}, this._options, opts);
922
+ this.options = Object.assign({}, this._options);
923
+
924
+ // for old type configuration
925
+ if (opts.uiOptions) {
926
+ if (opts.uiOptions.toolbar && Array.isArray(opts.uiOptions.toolbar)) {
927
+ if ($.isPlainObject(opts.uiOptions.toolbar[opts.uiOptions.toolbar.length - 1])) {
928
+ self.options.uiOptions.toolbarExtra = Object.assign(self.options.uiOptions.toolbarExtra || {}, opts.uiOptions.toolbar.pop());
929
+ }
930
+ }
931
+ }
932
 
933
+ // Overwrite if opts value is an array
934
  (function() {
935
+ var arrOv = function(obj, base) {
936
+ if ($.isPlainObject(obj)) {
937
+ $.each(obj, function(k, v) {
938
+ if ($.isPlainObject(v)) {
939
+ if (!base[k]) {
940
+ base[k] = {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
941
  }
942
+ arrOv(v, base[k]);
943
+ } else {
944
+ base[k] = v;
945
  }
946
  });
 
 
947
  }
948
  };
949
+ arrOv(opts, self.options);
950
  })();
951
 
952
+ // join toolbarExtra to toolbar
953
+ this.options.uiOptions.toolbar.push(this.options.uiOptions.toolbarExtra);
954
+ delete this.options.uiOptions.toolbarExtra;
955
+
956
  /**
957
+ * Arrays that has to unbind events
958
+ *
959
  * @type Object
960
+ */
961
+ this.toUnbindEvents = {};
962
+
963
+ /**
964
+ * Attach listener to events
965
+ * To bind to multiply events at once, separate events names by space
966
+ *
967
+ * @param String event(s) name(s)
968
+ * @param Object event handler or {done: handler}
969
+ * @param Boolean priority first
970
+ * @return elFinder
971
+ */
972
+ this.bind = function(event, callback, priorityFirst) {
973
+ var i, len;
974
+
975
+ if (callback && (typeof callback === 'function' || typeof callback.done === 'function')) {
976
+ event = ('' + event).toLowerCase().replace(/^\s+|\s+$/g, '').split(/\s+/);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
977
 
978
+ len = event.length;
979
+ for (i = 0; i < len; i++) {
980
+ if (listeners[event[i]] === void(0)) {
981
+ listeners[event[i]] = [];
 
 
 
982
  }
983
+ listeners[event[i]][priorityFirst? 'unshift' : 'push'](callback);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
984
  }
985
  }
986
+ return this;
987
  };
988
 
989
  /**
990
+ * Remove event listener if exists
991
+ * To un-bind to multiply events at once, separate events names by space
992
  *
993
+ * @param String event(s) name(s)
994
+ * @param Function callback
995
+ * @return elFinder
996
+ */
997
+ this.unbind = function(event, callback) {
998
+ var i, len, l, ci;
999
+
1000
+ event = ('' + event).toLowerCase().split(/\s+/);
1001
+
1002
+ len = event.length;
1003
+ for (i = 0; i < len; i++) {
1004
+ if (l = listeners[event[i]]) {
1005
+ ci = $.inArray(callback, l);
1006
+ ci > -1 && l.splice(ci, 1);
1007
+ }
1008
+ }
1009
+
1010
+ callback = null;
1011
+ return this;
1012
  };
1013
 
1014
  /**
1015
+ * Fire event - send notification to all event listeners
1016
+ * In the callback `this` becames an event object
1017
  *
1018
+ * @param String event type
1019
+ * @param Object data to send across event
1020
+ * @param Boolean allow modify data (call by reference of data) default: true
1021
+ * @return elFinder
 
 
 
 
 
 
 
1022
  */
1023
+ this.trigger = function(evType, data, allowModify) {
1024
+ var type = evType.toLowerCase(),
1025
+ isopen = (type === 'open'),
1026
+ dataIsObj = (typeof data === 'object'),
1027
+ handlers = listeners[type] || [],
1028
+ dones = [],
1029
+ i, l, jst, event;
1030
+
1031
+ this.debug('event-'+type, data);
1032
+
1033
+ if (! dataIsObj || typeof allowModify === 'undefined') {
1034
+ allowModify = true;
1035
+ }
1036
+ if (l = handlers.length) {
1037
+ event = $.Event(type);
1038
+ if (data) {
1039
+ data._event = event;
1040
+ }
1041
+ if (allowModify) {
1042
+ event.data = data;
1043
+ }
1044
+
1045
+ for (i = 0; i < l; i++) {
1046
+ if (! handlers[i]) {
1047
+ // probably un-binded this handler
1048
+ continue;
1049
+ }
1050
+
1051
+ // handler is $.Deferred(), call all functions upon completion
1052
+ if (handlers[i].done) {
1053
+ dones.push(handlers[i].done);
1054
+ continue;
1055
+ }
1056
+
1057
+ // set `event.data` only callback has argument
1058
+ if (handlers[i].length) {
1059
+ if (!allowModify) {
1060
+ // to avoid data modifications. remember about "sharing" passing arguments in js :)
1061
+ if (typeof jst === 'undefined') {
1062
+ try {
1063
+ jst = JSON.stringify(data);
1064
+ } catch(e) {
1065
+ jst = false;
1066
+ }
1067
+ }
1068
+ event.data = jst? JSON.parse(jst) : data;
1069
+ }
1070
+ }
1071
+
1072
+ try {
1073
+ if (handlers[i].call(event, event, this) === false || event.isDefaultPrevented()) {
1074
+ this.debug('event-stoped', event.type);
1075
+ break;
1076
+ }
1077
+ } catch (ex) {
1078
+ window.console && window.console.log && window.console.log(ex);
1079
+ }
1080
+
1081
+ }
1082
+
1083
+ // call done functions
1084
+ if (l = dones.length) {
1085
+ for (i = 0; i < l; i++) {
1086
+ try {
1087
+ if (dones[i].call(event, event, this) === false || event.isDefaultPrevented()) {
1088
+ this.debug('event-stoped', event.type + '(done)');
1089
+ break;
1090
+ }
1091
+ } catch (ex) {
1092
+ window.console && window.console.log && window.console.log(ex);
1093
+ }
1094
+ }
1095
+ }
1096
+
1097
+ if (this.toUnbindEvents[type] && this.toUnbindEvents[type].length) {
1098
+ $.each(this.toUnbindEvents[type], function(i, v) {
1099
+ self.unbind(v.type, v.callback);
1100
+ });
1101
+ delete this.toUnbindEvents[type];
1102
+ }
1103
+ }
1104
+ return this;
1105
+ };
1106
 
1107
  /**
1108
+ * Get event listeners
1109
+ *
1110
+ * @param String event type
1111
+ * @return Array listed event functions
 
1112
  */
1113
+ this.getListeners = function(event) {
1114
+ return event? listeners[event.toLowerCase()] : listeners;
1115
+ };
1116
+
1117
+ // set fm.baseUrl
1118
+ this.baseUrl = (function() {
1119
+ var myTag, myCss, base, baseUrl;
1120
 
1121
+ if (self.options.baseUrl) {
1122
+ return self.options.baseUrl;
1123
+ } else {
1124
+ baseUrl = '';
1125
+ //myTag = $('head > script[src$="js/elfinder.min.js"],script[src$="js/elfinder.full.js"]:first');
1126
+ myTag = null;
1127
+ $('head > script').each(function() {
1128
+ if (this.src && this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js$/i)) {
1129
+ myTag = $(this);
1130
  return false;
1131
  }
1132
  });
1133
+ if (myTag) {
1134
+ myCss = $('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length;
1135
+ if (! myCss) {
1136
+ // to request CSS auto loading
1137
+ self.cssloaded = null;
1138
+ }
1139
+ baseUrl = myTag.attr('src').replace(/js\/[^\/]+$/, '');
1140
+ if (! baseUrl.match(/^(https?\/\/|\/)/)) {
1141
+ // check <base> tag
1142
+ if (base = $('head > base[href]').attr('href')) {
1143
+ baseUrl = base.replace(/\/$/, '') + '/' + baseUrl;
1144
+ }
1145
+ }
1146
  }
1147
+ if (baseUrl !== '') {
1148
+ self.options.baseUrl = baseUrl;
1149
+ } else {
1150
+ if (! self.options.baseUrl) {
1151
+ self.options.baseUrl = './';
1152
+ }
1153
+ baseUrl = self.options.baseUrl;
 
 
 
 
 
 
 
1154
  }
1155
+ return baseUrl;
1156
  }
1157
+ })();
1158
+
1159
+ this.i18nBaseUrl = (this.options.i18nBaseUrl || this.baseUrl + 'js/i18n').replace(/\/$/, '') + '/';
1160
+
1161
+ this.options.maxErrorDialogs = Math.max(1, parseInt(this.options.maxErrorDialogs || 5));
1162
+
1163
+ // set dispInlineRegex
1164
+ cwdOptionsDefault.dispInlineRegex = this.options.dispInlineRegex;
1165
+
1166
+ // auto load required CSS
1167
+ if (this.options.cssAutoLoad) {
1168
+ (function() {
1169
+ var baseUrl = self.baseUrl;
1170
+
1171
+ // additional CSS files
1172
+ if (Array.isArray(self.options.cssAutoLoad)) {
1173
+ if (self.cssloaded === true) {
1174
+ self.loadCss(self.options.cssAutoLoad);
1175
+ } else {
1176
+ self.bind('cssloaded', function() {
1177
+ self.loadCss(self.options.cssAutoLoad);
1178
+ });
1179
+ }
1180
+ }
1181
+
1182
+ // try to load main css
1183
+ if (self.cssloaded === null) {
1184
+ // hide elFinder node while css loading
1185
+ node.data('cssautoloadHide', $('<style>.elfinder{visibility:hidden;overflow:hidden}</style>'));
1186
+ $('head').append(node.data('cssautoloadHide'));
1187
+
1188
+ // set default theme
1189
+ if (!self.options.themes.default) {
1190
+ self.options.themes = Object.assign({
1191
+ 'default' : {
1192
+ 'name': 'default',
1193
+ 'cssurls': 'css/theme.css',
1194
+ 'author': 'elFinder Project',
1195
+ 'license': '3-clauses BSD'
1196
+ }
1197
+ }, self.options.themes);
1198
+ if (!self.options.theme) {
1199
+ self.options.theme = 'default';
1200
+ }
1201
+ }
1202
+
1203
+ // load CSS
1204
+ self.loadCss([baseUrl+'css/elfinder.min.css'], {
1205
+ dfd: $.Deferred().always(function() {
1206
+ if (node.data('cssautoloadHide')) {
1207
+ node.data('cssautoloadHide').remove();
1208
+ node.removeData('cssautoloadHide');
1209
+ }
1210
+ }).done(function() {
1211
+ if (!self.cssloaded) {
1212
+ self.cssloaded = true;
1213
+ self.trigger('cssloaded');
1214
+ }
1215
+ }).fail(function() {
1216
+ self.cssloaded = false;
1217
+ self.error(['errRead', 'CSS (elfinder or theme)']);
1218
+ })
1219
+ });
1220
+ }
1221
+ self.options.cssAutoLoad = false;
1222
+ })();
1223
+ }
1224
+
1225
+ // load theme if exists
1226
+ this.changeTheme(this.storage('theme') || this.options.theme);
1227
 
1228
  /**
1229
+ * Volume option to set the properties of the root Stat
1230
  *
1231
+ * @type Object
1232
  */
1233
+ this.optionProperties = {
1234
+ icon: void(0),
1235
+ csscls: void(0),
1236
+ tmbUrl: void(0),
1237
+ uiCmdMap: {},
1238
+ netkey: void(0),
1239
+ disabled: []
1240
  };
1241
 
1242
+ if (! inFrame && ! this.options.enableAlways && $('body').children().length === 2) { // only node and beeper
1243
+ this.options.enableAlways = true;
1244
+ }
1245
+
1246
+ // make options.debug
1247
+ if (this.options.debug === true) {
1248
+ this.options.debug = 'all';
1249
+ } else if (Array.isArray(this.options.debug)) {
1250
+ (function() {
1251
+ var d = {};
1252
+ $.each(self.options.debug, function() {
1253
+ d[this] = true;
 
 
 
1254
  });
1255
+ self.options.debug = d;
1256
+ })();
1257
+ } else {
1258
+ this.options.debug = false;
1259
+ }
1260
 
1261
  /**
1262
+ * Original functions evacuated by conflict check
1263
  *
1264
+ * @type Object
 
1265
  */
1266
+ this.noConflicts = {};
 
 
1267
 
1268
  /**
1269
+ * Check and save conflicts with bootstrap etc
1270
  *
1271
+ * @type Function
1272
  */
1273
+ this.noConflict = function() {
1274
+ $.each(conflictChecks, function(i, p) {
1275
+ if ($.fn[p] && typeof $.fn[p].noConflict === 'function') {
1276
+ self.noConflicts[p] = $.fn[p].noConflict();
1277
+ }
1278
+ });
1279
  };
1280
+ // do check conflict
1281
+ this.noConflict();
1282
 
1283
  /**
1284
+ * Is elFinder over CORS
1285
+ *
1286
+ * @type Boolean
1287
+ **/
1288
+ this.isCORS = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1289
 
1290
+ // configure for CORS
1291
+ (function(){
1292
+ if (typeof self.options.cors !== 'undefined' && self.options.cors !== null) {
1293
+ self.isCORS = self.options.cors? true : false;
 
 
 
 
 
 
 
 
 
 
1294
  } else {
1295
+ var parseUrl = document.createElement('a'),
1296
+ parseUploadUrl,
1297
+ selfProtocol = window.location.protocol,
1298
+ portReg = function(protocol) {
1299
+ protocol = (!protocol || protocol === ':')? selfProtocol : protocol;
1300
+ return protocol === 'https:'? /\:443$/ : /\:80$/;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1301
  },
1302
+ selfHost = window.location.host.replace(portReg(selfProtocol), '');
1303
+ parseUrl.href = opts.url;
1304
+ if (opts.urlUpload && (opts.urlUpload !== opts.url)) {
1305
+ parseUploadUrl = document.createElement('a');
1306
+ parseUploadUrl.href = opts.urlUpload;
1307
+ }
1308
+ if (selfHost !== parseUrl.host.replace(portReg(parseUrl.protocol), '')
1309
+ || (parseUrl.protocol !== ':'&& parseUrl.protocol !== '' && (selfProtocol !== parseUrl.protocol))
1310
+ || (parseUploadUrl &&
1311
+ (selfHost !== parseUploadUrl.host.replace(portReg(parseUploadUrl.protocol), '')
1312
+ || (parseUploadUrl.protocol !== ':' && parseUploadUrl.protocol !== '' && (selfProtocol !== parseUploadUrl.protocol))
1313
+ )
1314
+ )
1315
+ ) {
1316
+ self.isCORS = true;
 
 
 
1317
  }
1318
  }
1319
+ if (self.isCORS) {
1320
+ if (!$.isPlainObject(self.options.customHeaders)) {
1321
+ self.options.customHeaders = {};
1322
+ }
1323
+ if (!$.isPlainObject(self.options.xhrFields)) {
1324
+ self.options.xhrFields = {};
1325
+ }
1326
+ self.options.requestType = 'post';
1327
+ self.options.customHeaders['X-Requested-With'] = 'XMLHttpRequest';
1328
+ self.options.xhrFields['withCredentials'] = true;
1329
+ }
1330
+ })();
1331
+
1332
+ /**
1333
+ * Ajax request type
1334
+ *
1335
+ * @type String
1336
+ * @default "get"
1337
+ **/
1338
+ this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get';
1339
+
1340
+ // set `requestMaxConn` by option
1341
+ requestMaxConn = Math.max(parseInt(this.options.requestMaxConn), 1);
1342
 
1343
  /**
1344
+ * Custom data that given as options
1345
  *
1346
+ * @type Object
1347
+ * @default {}
1348
  */
1349
+ this.optsCustomData = $.isPlainObject(this.options.customData) ? this.options.customData : {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1350
 
 
 
 
 
 
 
 
 
 
 
 
1351
  /**
1352
+ * Any data to send across every ajax request
1353
+ *
1354
+ * @type Object
1355
+ * @default {}
1356
+ **/
1357
+ this.customData = Object.assign({}, this.optsCustomData);
1358
+
1359
+ /**
1360
+ * Previous custom data from connector
1361
  *
1362
+ * @type Object|null
 
1363
  */
1364
+ this.prevCustomData = null;
1365
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1366
  /**
1367
+ * Any custom headers to send across every ajax request
1368
+ *
1369
+ * @type Object
1370
+ * @default {}
1371
+ */
1372
+ this.customHeaders = $.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {};
1373
+
1374
+ /**
1375
+ * Any custom xhrFields to send across every ajax request
1376
+ *
1377
+ * @type Object
1378
+ * @default {}
1379
+ */
1380
+ this.xhrFields = $.isPlainObject(this.options.xhrFields) ? this.options.xhrFields : {};
1381
+
1382
+ /**
1383
+ * Replace XMLHttpRequest.prototype.send to extended function for 3rd party libs XHR request etc.
1384
  *
1385
+ * @type Function
 
 
1386
  */
1387
+ this.replaceXhrSend = function() {
1388
+ if (! savedXhrSend) {
1389
+ savedXhrSend = XMLHttpRequest.prototype.send;
 
 
 
1390
  }
1391
+ XMLHttpRequest.prototype.send = function() {
1392
+ var xhr = this;
1393
+ // set request headers
1394
+ if (self.customHeaders) {
1395
+ $.each(self.customHeaders, function(key) {
1396
+ xhr.setRequestHeader(key, this);
1397
+ });
 
1398
  }
1399
+ // set xhrFields
1400
+ if (self.xhrFields) {
1401
+ $.each(self.xhrFields, function(key) {
1402
+ if (key in xhr) {
1403
+ xhr[key] = this;
1404
+ }
1405
+ });
1406
+ }
1407
+ return savedXhrSend.apply(this, arguments);
1408
+ };
 
 
 
 
 
 
1409
  };
1410
 
1411
  /**
1412
+ * Restore saved original XMLHttpRequest.prototype.send
1413
  *
1414
+ * @type Function
 
1415
  */
1416
+ this.restoreXhrSend = function() {
1417
+ savedXhrSend && (XMLHttpRequest.prototype.send = savedXhrSend);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1418
  };
1419
+
1420
  /**
1421
+ * command names for into queue for only cwd requests
1422
+ * these commands aborts before `open` request
1423
  *
1424
+ * @type Array
1425
+ * @default ['tmb', 'parents']
1426
+ */
1427
+ this.abortCmdsOnOpen = this.options.abortCmdsOnOpen || ['tmb', 'parents'];
1428
+
1429
+ /**
1430
+ * ui.nav id prefix
1431
+ *
1432
+ * @type String
1433
+ */
1434
+ this.navPrefix = 'nav' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-';
1435
 
1436
  /**
1437
+ * ui.cwd id prefix
1438
  *
1439
+ * @type String
1440
  */
1441
+ this.cwdPrefix = elFinder.prototype.uniqueid? ('cwd' + elFinder.prototype.uniqueid + '-') : '';
1442
+
1443
+ // Increment elFinder.prototype.uniqueid
1444
+ ++elFinder.prototype.uniqueid;
1445
 
1446
  /**
1447
+ * URL to upload files
1448
+ *
1449
+ * @type String
1450
+ **/
1451
+ this.uploadURL = opts.urlUpload || opts.url;
1452
+
1453
+ /**
1454
+ * Events namespace
1455
+ *
1456
+ * @type String
1457
+ **/
1458
+ this.namespace = namespace;
1459
+
1460
+ /**
1461
+ * Today timestamp
1462
+ *
1463
+ * @type Number
1464
+ **/
1465
+ this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000;
1466
+
1467
+ /**
1468
+ * Yesterday timestamp
1469
+ *
1470
+ * @type Number
1471
+ **/
1472
+ this.yesterday = this.today - 86400;
1473
+
1474
+ utc = this.options.UTCDate ? 'UTC' : '';
1475
+
1476
+ this.getHours = 'get'+utc+'Hours';
1477
+ this.getMinutes = 'get'+utc+'Minutes';
1478
+ this.getSeconds = 'get'+utc+'Seconds';
1479
+ this.getDate = 'get'+utc+'Date';
1480
+ this.getDay = 'get'+utc+'Day';
1481
+ this.getMonth = 'get'+utc+'Month';
1482
+ this.getFullYear = 'get'+utc+'FullYear';
1483
+
1484
+ /**
1485
+ * elFinder node z-index (auto detect on elFinder load)
1486
+ *
1487
+ * @type null | Number
1488
+ **/
1489
+ this.zIndex;
1490
+
1491
+ /**
1492
+ * Current search status
1493
  *
1494
+ * @type Object
 
 
1495
  */
1496
+ this.searchStatus = {
1497
+ state : 0, // 0: search ended, 1: search started, 2: in search result
1498
+ query : '',
1499
+ target : '',
1500
+ mime : '',
1501
+ mixed : false, // in multi volumes search: false or Array that target volume ids
1502
+ ininc : false // in incremental search
1503
+ };
1504
+
1505
+ /**
1506
+ * Interface language
1507
+ *
1508
+ * @type String
1509
+ * @default "en"
1510
+ **/
1511
+ this.lang = this.storage('lang') || this.options.lang;
1512
+ if (this.lang === 'jp') {
1513
+ this.lang = this.options.lang = 'ja';
1514
+ }
1515
+
1516
+ this.viewType = this.storage('view') || this.options.defaultView || 'icons';
1517
+
1518
+ this.sortType = this.storage('sortType') || this.options.sortType || 'name';
1519
 
1520
+ this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc';
1521
+
1522
+ this.sortStickFolders = this.storage('sortStickFolders');
1523
+ if (this.sortStickFolders === null) {
1524
+ this.sortStickFolders = !!this.options.sortStickFolders;
1525
+ } else {
1526
+ this.sortStickFolders = !!this.sortStickFolders;
1527
+ }
1528
+
1529
+ this.sortAlsoTreeview = this.storage('sortAlsoTreeview');
1530
+ if (this.sortAlsoTreeview === null || this.options.sortAlsoTreeview === null) {
1531
+ this.sortAlsoTreeview = !!this.options.sortAlsoTreeview;
1532
+ } else {
1533
+ this.sortAlsoTreeview = !!this.sortAlsoTreeview;
1534
+ }
1535
+
1536
+ this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortRules);
1537
+
1538
+ $.each(this.sortRules, function(name, method) {
1539
+ if (typeof method != 'function') {
1540
+ delete self.sortRules[name];
1541
+ }
1542
+ });
1543
+
1544
+ this.compare = $.proxy(this.compare, this);
1545
+
1546
+ /**
1547
+ * Delay in ms before open notification dialog
1548
+ *
1549
+ * @type Number
1550
+ * @default 500
1551
+ **/
1552
+ this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500;
1553
+
1554
+ /**
1555
+ * Dragging UI Helper object
1556
+ *
1557
+ * @type jQuery | null
1558
+ **/
1559
+ this.draggingUiHelper = null;
1560
+
1561
+ /**
1562
+ * Base droppable options
1563
+ *
1564
+ * @type Object
1565
+ **/
1566
+ this.droppable = {
1567
+ greedy : true,
1568
+ tolerance : 'pointer',
1569
+ accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename',
1570
+ hoverClass : this.res('class', 'adroppable'),
1571
+ classes : { // Deprecated hoverClass jQueryUI>=1.12.0
1572
+ 'ui-droppable-hover': this.res('class', 'adroppable')
1573
+ },
1574
+ autoDisable: true, // elFinder original, see jquery.elfinder.js
1575
+ drop : function(e, ui) {
1576
+ var dst = $(this),
1577
+ targets = $.grep(ui.helper.data('files')||[], function(h) { return h? true : false; }),
1578
+ result = [],
1579
+ dups = [],
1580
+ faults = [],
1581
+ isCopy = ui.helper.hasClass('elfinder-drag-helper-plus'),
1582
+ c = 'class',
1583
+ cnt, hash, i, h;
1584
+
1585
+ if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) {
1586
+ return false;
1587
+ }
1588
+ if (dst.hasClass(self.res(c, 'cwdfile'))) {
1589
+ hash = self.cwdId2Hash(dst.attr('id'));
1590
+ } else if (dst.hasClass(self.res(c, 'navdir'))) {
1591
+ hash = self.navId2Hash(dst.attr('id'));
1592
+ } else {
1593
+ hash = cwd;
1594
+ }
1595
+
1596
+ cnt = targets.length;
1597
+
1598
+ while (cnt--) {
1599
+ h = targets[cnt];
1600
+ // ignore drop into itself or in own location
1601
+ if (h != hash && files[h].phash != hash) {
1602
+ result.push(h);
1603
+ } else {
1604
+ ((isCopy && h !== hash && files[hash].write)? dups : faults).push(h);
1605
+ }
1606
+ }
1607
+
1608
+ if (faults.length) {
1609
+ return false;
1610
+ }
1611
+
1612
+ ui.helper.data('droped', true);
1613
+
1614
+ if (dups.length) {
1615
+ ui.helper.hide();
1616
+ self.exec('duplicate', dups, {_userAction: true});
1617
+ }
1618
+
1619
+ if (result.length) {
1620
+ ui.helper.hide();
1621
+ self.clipboard(result, !isCopy);
1622
+ self.exec('paste', hash, {_userAction: true}, hash).always(function(){
1623
+ self.clipboard([]);
1624
+ self.trigger('unlockfiles', {files : targets});
1625
+ });
1626
+ self.trigger('drop', {files : targets});
1627
  }
1628
  }
1629
  };
1630
 
1631
  /**
1632
+ * Return true if filemanager is active
1633
+ *
1634
+ * @return Boolean
1635
+ **/
1636
+ this.enabled = function() {
1637
+ return enabled && this.visible();
1638
+ };
1639
+
1640
+ /**
1641
+ * Return true if filemanager is visible
1642
+ *
1643
+ * @return Boolean
1644
+ **/
1645
+ this.visible = function() {
1646
+ return node[0].elfinder && node.is(':visible');
1647
+ };
1648
+
1649
+ /**
1650
+ * Return file is root?
1651
  *
1652
+ * @param Object target file object
 
1653
  * @return Boolean
1654
  */
1655
+ this.isRoot = function(file) {
1656
+ return (file.isroot || ! file.phash)? true : false;
1657
  };
1658
 
1659
  /**
1660
+ * Return root dir hash for current working directory
1661
  *
1662
+ * @param String target hash
1663
+ * @param Boolean include fake parent (optional)
1664
+ * @return String
1665
  */
1666
+ this.root = function(hash, fake) {
1667
+ hash = hash || cwd;
1668
+ var dir, i;
1669
+
1670
+ if (! fake) {
1671
+ $.each(self.roots, function(id, rhash) {
1672
+ if (hash.indexOf(id) === 0) {
1673
+ dir = rhash;
1674
+ return false;
1675
+ }
1676
+ });
1677
+ if (dir) {
1678
+ return dir;
1679
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1680
  }
1681
 
1682
+ dir = files[hash];
1683
+ while (dir && dir.phash && (fake || ! dir.isroot)) {
1684
+ dir = files[dir.phash];
1685
  }
1686
+ if (dir) {
1687
+ return dir.hash;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1688
  }
1689
 
1690
+ while (i in files && files.hasOwnProperty(i)) {
1691
+ dir = files[i];
1692
+ if (dir.mime === 'directory' && !dir.phash && dir.read) {
1693
+ return dir.hash;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1694
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1695
  }
1696
 
1697
+ return '';
 
 
 
 
 
 
1698
  };
1699
 
1700
  /**
1701
+ * Return current working directory info
1702
  *
 
 
 
1703
  * @return Object
1704
  */
1705
+ this.cwd = function() {
1706
+ return files[cwd] || {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1707
  };
1708
 
1709
  /**
1710
+ * Return required cwd option
1711
  *
1712
+ * @param String option name
1713
+ * @param String target hash (optional)
1714
+ * @return mixed
1715
  */
1716
+ this.option = function(name, target) {
1717
+ var res, item;
1718
+ target = target || cwd;
1719
+ if (self.optionsByHashes[target] && typeof self.optionsByHashes[target][name] !== 'undefined') {
1720
+ return self.optionsByHashes[target][name];
1721
+ }
1722
+ if (self.hasVolOptions && cwd !== target && (!(item = self.file(target)) || item.phash !== cwd)) {
1723
+ res = '';
1724
+ $.each(self.volOptions, function(id, opt) {
1725
+ if (target.indexOf(id) === 0) {
1726
+ res = opt[name] || '';
1727
+ return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1728
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
1729
  });
1730
+ return res;
1731
+ } else {
1732
+ return cwdOptions[name] || '';
1733
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1734
  };
1735
 
1736
  /**
1737
+ * Return disabled commands by each folder
 
1738
  *
1739
+ * @param Array target hashes
1740
+ * @return Array
 
1741
  */
1742
+ this.getDisabledCmds = function(targets, flip) {
1743
+ var disabled = {'hidden': true};
1744
+ if (! Array.isArray(targets)) {
1745
+ targets = [ targets ];
 
 
 
 
 
 
 
 
1746
  }
1747
+ $.each(targets, function(i, h) {
1748
+ var disCmds = self.option('disabledFlip', h);
1749
+ if (disCmds) {
1750
+ Object.assign(disabled, disCmds);
1751
+ }
1752
+ });
1753
+ return flip? disabled : Object.keys(disabled);
1754
  };
1755
 
1756
  /**
1757
+ * Return file data from current dir or tree by it's hash
1758
+ *
1759
+ * @param String file hash
1760
+ * @return Object
 
 
1761
  */
1762
+ this.file = function(hash, alsoHidden) {
1763
+ return hash? (files[hash] || (alsoHidden? hiddenFiles[hash] : void(0))) : void(0);
 
 
 
 
 
 
 
 
 
 
 
1764
  };
1765
 
1766
  /**
1767
+ * Return all cached files
1768
+ *
1769
+ * @param String parent hash
1770
+ * @return Object
 
 
1771
  */
1772
+ this.files = function(phash) {
1773
+ var items = {};
1774
+ if (phash) {
1775
+ if (!ownFiles[phash]) {
1776
+ return {};
 
 
 
 
 
 
 
 
 
 
1777
  }
1778
+ $.each(ownFiles[phash], function(h) {
1779
+ if (files[h]) {
1780
+ items[h] = files[h];
1781
+ } else {
1782
+ delete ownFiles[phash][h];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1783
  }
1784
+ });
1785
+ return Object.assign({}, items);
1786
  }
1787
+ return Object.assign({}, files);
1788
  };
1789
 
1790
  /**
1791
+ * Return list of file parents hashes include file hash
1792
+ *
1793
+ * @param String file hash
1794
+ * @return Array
1795
  */
1796
+ this.parents = function(hash) {
1797
+ var parents = [],
1798
+ dir;
1799
+
1800
+ while (hash && (dir = this.file(hash))) {
1801
+ parents.unshift(dir.hash);
1802
+ hash = dir.phash;
1803
+ }
1804
+ return parents;
1805
  };
1806
 
1807
+ this.path2array = function(hash, i18) {
1808
+ var file,
1809
+ path = [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1810
 
1811
+ while (hash) {
1812
+ if ((file = files[hash]) && file.hash) {
1813
+ path.unshift(i18 && file.i18 ? file.i18 : file.name);
1814
+ hash = file.isroot? null : file.phash;
1815
+ } else {
1816
+ path = [];
1817
+ break;
 
 
 
 
 
 
 
 
 
 
 
 
1818
  }
1819
  }
1820
+
1821
+ return path;
 
 
 
 
 
 
 
 
 
 
 
 
 
1822
  };
1823
 
1824
  /**
1825
+ * Return file path or Get path async with jQuery.Deferred
 
 
 
 
 
1826
  *
1827
+ * @param Object file
1828
+ * @param Boolean i18
1829
+ * @param Object asyncOpt
1830
+ * @return String|jQuery.Deferred
1831
  */
1832
+ this.path = function(hash, i18, asyncOpt) {
1833
+ var path = files[hash] && files[hash].path
1834
+ ? files[hash].path
1835
+ : this.path2array(hash, i18).join(cwdOptions.separator);
1836
+ if (! asyncOpt || ! files[hash]) {
1837
+ return path;
1838
+ } else {
1839
+ asyncOpt = Object.assign({notify: {type : 'parents', cnt : 1, hideCnt : true}}, asyncOpt);
1840
 
1841
+ var dfd = $.Deferred(),
1842
+ notify = asyncOpt.notify,
1843
+ noreq = false,
1844
+ req = function() {
1845
+ self.request({
1846
+ data : {cmd : 'parents', target : files[hash].phash},
1847
+ notify : notify,
1848
+ preventFail : true
1849
+ })
1850
+ .done(done)
1851
+ .fail(function() {
1852
+ dfd.reject();
1853
+ });
1854
+ },
1855
+ done = function() {
1856
+ self.one('parentsdone', function() {
1857
+ path = self.path(hash, i18);
1858
+ if (path === '' && noreq) {
1859
+ //retry with request
1860
+ noreq = false;
1861
+ req();
1862
+ } else {
1863
+ if (notify) {
1864
+ clearTimeout(ntftm);
1865
+ notify.cnt = -(parseInt(notify.cnt || 0));
1866
+ self.notify(notify);
1867
+ }
1868
+ dfd.resolve(path);
1869
+ }
1870
+ });
1871
+ },
1872
+ ntftm;
1873
+
1874
+ if (path) {
1875
+ return dfd.resolve(path);
1876
+ } else {
1877
+ if (self.ui['tree']) {
1878
+ // try as no request
1879
+ if (notify) {
1880
+ ntftm = setTimeout(function() {
1881
+ self.notify(notify);
1882
+ }, self.notifyDelay);
1883
  }
1884
+ noreq = true;
1885
+ done(true);
1886
+ } else {
1887
+ req();
1888
  }
1889
+ return dfd;
1890
+ }
 
 
1891
  }
 
 
 
1892
  };
1893
 
1894
  /**
1895
+ * Return file url if set
1896
  *
1897
+ * @param String file hash
1898
+ * @param Object Options
1899
+ * @return String|Object of jQuery Deferred
1900
  */
1901
+ this.url = function(hash, o) {
1902
+ var file = files[hash],
1903
+ opts = o || {},
1904
+ async = opts.async || false,
1905
+ temp = opts.temporary || false,
1906
+ onetm = (opts.onetime && self.option('onetimeUrl', hash)) || false,
1907
+ absurl = opts.absurl || false,
1908
+ dfrd = (async || onetm)? $.Deferred() : null,
1909
+ filter = function(url) {
1910
+ if (url && absurl) {
1911
+ url = self.convAbsUrl(url);
1912
+ }
1913
+ return url;
1914
+ },
1915
+ getUrl = function(url) {
1916
+ if (url) {
1917
+ return filter(url);
1918
+ }
1919
+ if (file.url) {
1920
+ return filter(file.url);
1921
+ }
1922
+
1923
+ if (typeof baseUrl === 'undefined') {
1924
+ baseUrl = self.option('url', (!self.isRoot(file) && file.phash) || file.hash);
1925
+ }
1926
+
1927
+ if (baseUrl) {
1928
+ return filter(baseUrl + $.map(self.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/'));
1929
+ }
1930
+
1931
+ var params = Object.assign({}, self.customData, {
1932
+ cmd: 'file',
1933
+ target: file.hash
1934
+ });
1935
+ if (self.oldAPI) {
1936
+ params.cmd = 'open';
1937
+ params.current = file.phash;
1938
+ }
1939
+ return filter(self.options.url + (self.options.url.indexOf('?') === -1 ? '?' : '&') + $.param(params, true));
1940
+ },
1941
+ baseUrl, res;
1942
+
1943
+ if (!file || !file.read) {
1944
+ return async? dfrd.resolve('') : '';
1945
  }
1946
+
1947
+ if (onetm) {
1948
+ async = true;
1949
+ this.request({
1950
+ data : { cmd : 'url', target : hash, options : { onetime: 1 } },
1951
+ preventDefault : true,
1952
+ options: {async: async},
1953
+ notify: {type : 'file', cnt : 1, hideCnt : true}
1954
+ }).done(function(data) {
1955
+ dfrd.resolve(filter(data.url || ''));
1956
+ }).fail(function() {
1957
+ dfrd.resolve('');
1958
+ });
1959
+ } else {
1960
+ if (file.url == '1' || (temp && !file.url && !(baseUrl = self.option('url', (!self.isRoot(file) && file.phash) || file.hash)))) {
1961
+ this.request({
1962
+ data : { cmd : 'url', target : hash, options : { temporary: temp? 1 : 0 } },
1963
+ preventDefault : true,
1964
+ options: {async: async},
1965
+ notify: async? {type : temp? 'file' : 'url', cnt : 1, hideCnt : true} : {}
1966
+ })
1967
+ .done(function(data) {
1968
+ file.url = data.url || '';
1969
+ })
1970
+ .fail(function() {
1971
+ file.url = '';
1972
+ })
1973
+ .always(function() {
1974
+ var url;
1975
+ if (file.url && temp) {
1976
+ url = file.url;
1977
+ file.url = '1'; // restore
1978
+ }
1979
+ if (async) {
1980
+ dfrd.resolve(getUrl(url));
1981
+ } else {
1982
+ return getUrl(url);
1983
+ }
1984
+ });
1985
+ } else {
1986
+ if (async) {
1987
+ dfrd.resolve(getUrl());
1988
+ } else {
1989
+ return getUrl();
1990
+ }
1991
  }
 
1992
  }
1993
+ if (async) {
1994
+ return dfrd;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1995
  }
 
 
 
 
 
 
 
 
 
 
 
1996
  };
1997
 
1998
  /**
1999
+ * Return file url for the extarnal service
2000
  *
2001
+ * @param String hash The hash
2002
+ * @param Object options The options
2003
+ * @return Object jQuery Deferred
2004
  */
2005
+ this.forExternalUrl = function(hash, options) {
2006
+ var onetime = self.option('onetimeUrl', hash),
2007
+ opts = {
2008
+ async: true,
2009
+ absurl: true
2010
+ };
2011
+
2012
+ opts[onetime? 'onetime' : 'temporary'] = true;
2013
+ return self.url(hash, Object.assign({}, options, opts));
2014
  };
2015
+
2016
  /**
2017
+ * Return file url for open in elFinder
2018
+ *
2019
+ * @param String file hash
2020
+ * @param Boolean for download link
2021
+ * @return String
2022
  */
2023
+ this.openUrl = function(hash, download) {
2024
+ var file = files[hash],
2025
+ url = '';
2026
+
2027
+ if (!file || !file.read) {
2028
+ return '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2029
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2030
 
2031
+ if (!download) {
2032
+ if (file.url) {
2033
+ if (file.url != 1) {
2034
+ url = file.url;
2035
+ }
2036
+ } else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) {
2037
+ url = cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/');
2038
+ }
2039
+ if (url) {
2040
+ url += (url.match(/\?/)? '&' : '?') + '_'.repeat((url.match(/[\?&](_+)t=/g) || ['&t=']).sort().shift().match(/[\?&](_*)t=/)[1].length + 1) + 't=' + (file.ts || parseInt(+new Date()/1000));
2041
+ return url;
2042
+ }
2043
+ }
2044
 
2045
+ url = this.options.url;
2046
+ url = url + (url.indexOf('?') === -1 ? '?' : '&')
2047
+ + (this.oldAPI ? 'cmd=open&current='+file.phash : 'cmd=file')
2048
+ + '&target=' + file.hash
2049
+ + '&_t=' + (file.ts || parseInt(+new Date()/1000));
2050
 
2051
+ if (download) {
2052
+ url += '&download=1';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2053
  }
2054
+
2055
+ $.each(this.customData, function(key, val) {
2056
+ url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val);
2057
+ });
2058
+
2059
+ return url;
2060
  };
2061
 
2062
  /**
2063
+ * Return thumbnail url
2064
  *
2065
+ * @param Object file object
2066
+ * @return String
2067
  */
2068
+ this.tmb = function(file) {
2069
+ var tmbUrl, tmbCrop,
2070
+ cls = 'elfinder-cwd-bgurl',
2071
+ url = '';
2072
+
2073
+ if ($.isPlainObject(file)) {
2074
+ if (self.searchStatus.state && file.hash.indexOf(self.cwd().volumeid) !== 0) {
2075
+ tmbUrl = self.option('tmbUrl', file.hash);
2076
+ tmbCrop = self.option('tmbCrop', file.hash);
 
 
2077
  } else {
2078
+ tmbUrl = cwdOptions['tmbUrl'];
2079
+ tmbCrop = cwdOptions['tmbCrop'];
2080
  }
2081
+ if (tmbCrop) {
2082
+ cls += ' elfinder-cwd-bgurl-crop';
2083
+ }
2084
+ if (tmbUrl === 'self' && file.mime.indexOf('image/') === 0) {
2085
+ url = self.openUrl(file.hash);
2086
+ cls += ' elfinder-cwd-bgself';
2087
+ } else if ((self.oldAPI || tmbUrl) && file && file.tmb && file.tmb != 1) {
2088
+ url = tmbUrl + file.tmb;
2089
+ } else if (self.newAPI && file && file.tmb && file.tmb != 1) {
2090
+ url = file.tmb;
2091
+ }
2092
+ if (url) {
2093
+ if (file.ts && tmbUrl !== 'self') {
2094
+ url += (url.match(/\?/)? '&' : '?') + '_t=' + file.ts;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2095
  }
2096
+ return { url: url, className: cls };
2097
+ }
2098
  }
2099
+
2100
+ return false;
2101
  };
2102
 
2103
  /**
2104
+ * Return selected files hashes
2105
+ *
2106
+ * @return Array
2107
+ **/
2108
+ this.selected = function() {
2109
+ return selected.slice(0);
 
 
 
 
 
 
 
 
 
 
 
2110
  };
2111
 
2112
  /**
2113
+ * Return selected files info
2114
  *
2115
+ * @return Array
2116
  */
2117
+ this.selectedFiles = function() {
2118
+ return $.map(selected, function(hash) { return files[hash] ? Object.assign({}, files[hash]) : null; });
 
 
 
 
2119
  };
2120
 
2121
  /**
2122
+ * Return true if file with required name existsin required folder
2123
  *
2124
+ * @param String file name
2125
+ * @param String parent folder hash
2126
+ * @return Boolean
2127
  */
2128
+ this.fileByName = function(name, phash) {
2129
+ var hash;
2130
+
2131
+ for (hash in files) {
2132
+ if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) {
2133
+ return files[hash];
2134
+ }
2135
+ }
 
 
 
 
2136
  };
2137
 
2138
+ /**
2139
+ * Valid data for required command based on rules
2140
+ *
2141
+ * @param String command name
2142
+ * @param Object cammand's data
2143
+ * @return Boolean
2144
+ */
2145
+ this.validResponse = function(cmd, data) {
2146
+ return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data);
2147
+ };
2148
+
2149
+ /**
2150
+ * Return bytes from ini formated size
2151
+ *
2152
+ * @param String ini formated size
2153
+ * @return Integer
2154
+ */
2155
+ this.returnBytes = function(val) {
2156
+ var last;
2157
+ if (isNaN(val)) {
2158
+ if (! val) {
2159
+ val = '';
2160
+ }
2161
+ // for ex. 1mb, 1KB
2162
+ val = val.replace(/b$/i, '');
2163
+ last = val.charAt(val.length - 1).toLowerCase();
2164
+ val = val.replace(/[tgmk]$/i, '');
2165
+ if (last == 't') {
2166
+ val = val * 1024 * 1024 * 1024 * 1024;
2167
+ } else if (last == 'g') {
2168
+ val = val * 1024 * 1024 * 1024;
2169
+ } else if (last == 'm') {
2170
+ val = val * 1024 * 1024;
2171
+ } else if (last == 'k') {
2172
+ val = val * 1024;
2173
  }
2174
+ val = isNaN(val)? 0 : parseInt(val);
2175
+ } else {
2176
+ val = parseInt(val);
2177
+ if (val < 1) val = 0;
2178
  }
2179
+ return val;
2180
+ };
2181
+
2182
+ /**
2183
+ * Process ajax request.
2184
+ * Fired events :
2185
+ * @todo
2186
+ * @example
2187
+ * @todo
2188
+ * @return $.Deferred
2189
+ */
2190
+ this.request = function(opts) {
2191
+ var self = this,
2192
+ o = this.options,
2193
+ dfrd = $.Deferred(),
2194
+ // request ID
2195
+ reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16),
2196
+ // request data
2197
+ data = Object.assign({}, self.customData, {mimes : o.onlyMimes}, opts.data || opts),
2198
+ // command name
2199
+ cmd = data.cmd,
2200
+ // request type is binary
2201
+ isBinary = (opts.options || {}).dataType === 'binary',
2202
+ // current cmd is "open"
2203
+ isOpen = (!opts.asNotOpen && cmd === 'open'),
2204
+ // call default fail callback (display error dialog) ?
2205
+ deffail = !(isBinary || opts.preventDefault || opts.preventFail),
2206
+ // call default success callback ?
2207
+ defdone = !(isBinary || opts.preventDefault || opts.preventDone),
2208
+ // options for notify dialog
2209
+ notify = Object.assign({}, opts.notify),
2210
+ // make cancel button
2211
+ cancel = !!opts.cancel,
2212
+ // do not normalize data - return as is
2213
+ raw = isBinary || !!opts.raw,
2214
+ // sync files on request fail
2215
+ syncOnFail = opts.syncOnFail,
2216
+ // use lazy()
2217
+ lazy = !!opts.lazy,
2218
+ // prepare function before done()
2219
+ prepare = opts.prepare,
2220
+ // navigate option object when cmd done
2221
+ navigate = opts.navigate,
2222
+ // open notify dialog timeout
2223
+ timeout,
2224
+ // use browser cache
2225
+ useCache = (opts.options || {}).cache,
2226
+ // request options
2227
+ options = Object.assign({
2228
+ url : o.url,
2229
+ async : true,
2230
+ type : this.requestType,
2231
+ dataType : 'json',
2232
+ cache : (self.api >= 2.1029), // api >= 2.1029 has unique request ID
2233
+ data : data,
2234
+ headers : this.customHeaders,
2235
+ xhrFields: this.xhrFields
2236
+ }, opts.options || {}),
2237
+ /**
2238
+ * Default success handler.
2239
+ * Call default data handlers and fire event with command name.
2240
+ *
2241
+ * @param Object normalized response data
2242
+ * @return void
2243
+ **/
2244
+ done = function(data) {
2245
+ data.warning && self.error(data.warning);
2246
+
2247
+ if (isOpen) {
2248
+ open(data);
2249
+ } else {
2250
+ self.updateCache(data);
2251
+ }
2252
+
2253
+ data.changed && data.changed.length && change(data.changed);
2254
+
2255
+ self.lazy(function() {
2256
+ // fire some event to update cache/ui
2257
+ data.removed && data.removed.length && self.remove(data);
2258
+ data.added && data.added.length && self.add(data);
2259
+ data.changed && data.changed.length && self.change(data);
2260
+ }).then(function() {
2261
+ // fire event with command name
2262
+ return self.lazy(function() {
2263
+ self.trigger(cmd, data, false);
2264
+ });
2265
+ }).then(function() {
2266
+ // fire event with command name + 'done'
2267
+ return self.lazy(function() {
2268
+ self.trigger(cmd + 'done');
2269
+ });
2270
+ }).then(function() {
2271
+ // make toast message
2272
+ if (data.toasts && Array.isArray(data.toasts)) {
2273
+ $.each(data.toasts, function() {
2274
+ this.msg && self.toast(this);
2275
+ });
2276
  }
2277
+ // force update content
2278
+ data.sync && self.sync();
2279
  });
2280
  },
2281
+ /**
2282
+ * Request error handler. Reject dfrd with correct error message.
2283
+ *
2284
+ * @param jqxhr request object
2285
+ * @param String request status
2286
+ * @return void
2287
+ **/
2288
+ error = function(xhr, status) {
2289
+ var error, data,
2290
+ d = self.options.debug;
2291
 
2292
+ switch (status) {
2293
+ case 'abort':
2294
+ error = xhr.quiet ? '' : ['errConnect', 'errAbort'];
2295
+ break;
2296
+ case 'timeout':
2297
+ error = ['errConnect', 'errTimeout'];
2298
+ break;
2299
+ case 'parsererror':
2300
+ error = ['errResponse', 'errDataNotJSON'];
2301
+ if (xhr.responseText) {
2302
+ if (! cwd || (d && (d === 'all' || d['backend-error']))) {
2303
+ error.push(xhr.responseText);
2304
+ }
2305
+ }
2306
+ break;
2307
+ default:
2308
+ if (xhr.responseText) {
2309
+ // check responseText, Is that JSON?
2310
+ try {
2311
+ data = JSON.parse(xhr.responseText);
2312
+ if (data && data.error) {
2313
+ error = data.error;
2314
+ }
2315
+ } catch(e) {}
2316
+ }
2317
+ if (! error) {
2318
+ if (xhr.status == 403) {
2319
+ error = ['errConnect', 'errAccess', 'HTTP error ' + xhr.status];
2320
+ } else if (xhr.status == 404) {
2321
+ error = ['errConnect', 'errNotFound', 'HTTP error ' + xhr.status];
2322
+ } else if (xhr.status >= 500) {
2323
+ error = ['errResponse', 'errServerError', 'HTTP error ' + xhr.status];
2324
+ } else {
2325
+ if (xhr.status == 414 && options.type === 'get') {
2326
+ // retry by POST method
2327
+ options.type = 'post';
2328
+ self.abortXHR(xhr);
2329
+ dfrd.xhr = xhr = self.transport.send(options).fail(error).done(success);
2330
+ return;
2331
+ }
2332
+ error = xhr.quiet ? '' : ['errConnect', 'HTTP error ' + xhr.status];
2333
+ }
2334
+ }
2335
+ }
2336
+
2337
+ self.trigger(cmd + 'done');
2338
+ dfrd.reject({error: error}, xhr, status);
2339
+ },
2340
+ /**
2341
+ * Request success handler. Valid response data and reject/resolve dfrd.
2342
+ *
2343
+ * @param Object response data
2344
+ * @param String request status
2345
+ * @return void
2346
+ **/
2347
+ success = function(response) {
2348
+ var d = self.options.debug;
2349
 
2350
+ // Set currrent request command name
2351
+ self.currentReqCmd = cmd;
2352
+
2353
+ if (response.debug && (!d || d !== 'all')) {
2354
+ if (!d) {
2355
+ d = self.options.debug = {};
 
 
 
2356
  }
2357
+ d['backend-error'] = true;
2358
+ d['warning'] = true;
2359
+ }
2360
+
2361
+ if (raw) {
2362
+ self.abortXHR(xhr);
2363
+ response && response.debug && self.debug('backend-debug', response);
2364
+ return dfrd.resolve(response);
2365
+ }
2366
 
2367
+ if (!response) {
2368
+ return dfrd.reject({error :['errResponse', 'errDataEmpty']}, xhr, response);
2369
+ } else if (!$.isPlainObject(response)) {
2370
+ return dfrd.reject({error :['errResponse', 'errDataNotJSON']}, xhr, response);
2371
+ } else if (response.error) {
2372
+ if (isOpen) {
2373
+ // check leafRoots
2374
+ $.each(self.leafRoots, function(phash, roots) {
2375
+ self.leafRoots[phash] = $.grep(roots, function(h) { return h !== data.target; });
2376
+ });
2377
  }
2378
+ return dfrd.reject({error :response.error}, xhr, response);
2379
  }
 
 
2380
 
2381
+ var resolve = function() {
2382
+ var pushLeafRoots = function(name) {
2383
+ if (self.leafRoots[data.target] && response[name]) {
2384
+ $.each(self.leafRoots[data.target], function(i, h) {
2385
+ var root;
2386
+ if (root = self.file(h)) {
2387
+ response[name].push(root);
2388
+ }
2389
+ });
2390
  }
2391
+ },
2392
+ setTextMimes = function() {
2393
+ self.textMimes = {};
2394
+ $.each(self.res('mimes', 'text'), function() {
2395
+ self.textMimes[this.toLowerCase()] = true;
2396
+ });
2397
+ },
2398
+ actionTarget;
2399
+
2400
+ if (isOpen) {
2401
+ pushLeafRoots('files');
2402
+ } else if (cmd === 'tree') {
2403
+ pushLeafRoots('tree');
2404
  }
 
 
 
 
 
2405
 
2406
+ response = self.normalize(response);
2407
+
2408
+ if (!self.validResponse(cmd, response)) {
2409
+ return dfrd.reject({error :(response.norError || 'errResponse')}, xhr, response);
2410
  }
 
2411
 
2412
+ if (isOpen) {
2413
+ if (!self.api) {
2414
+ self.api = response.api || 1;
2415
+ if (self.api == '2.0' && typeof response.options.uploadMaxSize !== 'undefined') {
2416
+ self.api = '2.1';
2417
+ }
2418
+ self.newAPI = self.api >= 2;
2419
+ self.oldAPI = !self.newAPI;
2420
+ }
2421
+
2422
+ if (response.textMimes && Array.isArray(response.textMimes)) {
2423
+ self.resources.mimes.text = response.textMimes;
2424
+ setTextMimes();
2425
+ }
2426
+ !self.textMimes && setTextMimes();
2427
+
2428
+ if (response.options) {
2429
+ cwdOptions = Object.assign({}, cwdOptionsDefault, response.options);
2430
+ }
2431
+
2432
+ if (response.netDrivers) {
2433
+ self.netDrivers = response.netDrivers;
2434
+ }
2435
+
2436
+ if (response.maxTargets) {
2437
+ self.maxTargets = response.maxTargets;
2438
+ }
2439
+
2440
+ if (!!data.init) {
2441
+ self.uplMaxSize = self.returnBytes(response.uplMaxSize);
2442
+ self.uplMaxFile = !!response.uplMaxFile? Math.min(parseInt(response.uplMaxFile), 50) : 20;
2443
+ }
2444
+ }
2445
+
2446
+ if (typeof prepare === 'function') {
2447
+ prepare(response);
2448
  }
2449
 
2450
+ if (navigate) {
2451
+ actionTarget = navigate.target || 'added';
2452
+ if (response[actionTarget] && response[actionTarget].length) {
2453
+ self.one(cmd + 'done', function() {
2454
+ var targets = response[actionTarget],
2455
+ newItems = self.findCwdNodes(targets),
2456
+ inCwdHashes = function() {
2457
+ var cwdHash = self.cwd().hash;
2458
+ return $.map(targets, function(f) { return (f.phash && cwdHash === f.phash)? f.hash : null; });
2459
+ },
2460
+ hashes = inCwdHashes(),
2461
+ makeToast = function(t) {
2462
+ var node = void(0),
2463
+ data = t.action? t.action.data : void(0),
2464
+ cmd, msg, done;
2465
+ if ((data || hashes.length) && t.action && (msg = t.action.msg) && (cmd = t.action.cmd) && (!t.action.cwdNot || t.action.cwdNot !== self.cwd().hash)) {
2466
+ done = t.action.done;
2467
+ data = t.action.data;
2468
+ node = $('<div/>')
2469
+ .append(
2470
+ $('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all elfinder-tabstop"><span class="ui-button-text">'
2471
+ +self.i18n(msg)
2472
+ +'</span></button>')
2473
+ .on('mouseenter mouseleave', function(e) {
2474
+ $(this).toggleClass('ui-state-hover', e.type == 'mouseenter');
2475
+ })
2476
+ .on('click', function() {
2477
+ self.exec(cmd, data || hashes, {_userAction: true, _currentType: 'toast', _currentNode: $(this) });
2478
+ if (done) {
2479
+ self.one(cmd+'done', function() {
2480
+ if (typeof done === 'function') {
2481
+ done();
2482
+ } else if (done === 'select') {
2483
+ self.trigger('selectfiles', {files : inCwdHashes()});
2484
+ }
2485
+ });
2486
+ }
2487
+ })
2488
+ );
2489
+ }
2490
+ delete t.action;
2491
+ t.extNode = node;
2492
+ return t;
2493
+ };
2494
+
2495
+ if (! navigate.toast) {
2496
+ navigate.toast = {};
2497
+ }
2498
+
2499
+ !navigate.noselect && self.trigger('selectfiles', {files : self.searchStatus.state > 1 ? $.map(targets, function(f) { return f.hash; }) : hashes});
2500
+
2501
+ if (newItems.length) {
2502
+ if (!navigate.noscroll) {
2503
+ newItems.first().trigger('scrolltoview', {blink : false});
2504
+ self.resources.blink(newItems, 'lookme');
2505
+ }
2506
+ if ($.isPlainObject(navigate.toast.incwd)) {
2507
+ self.toast(makeToast(navigate.toast.incwd));
2508
+ }
2509
+ } else {
2510
+ if ($.isPlainObject(navigate.toast.inbuffer)) {
2511
+ self.toast(makeToast(navigate.toast.inbuffer));
2512
+ }
2513
+ }
2514
+ });
2515
+ }
2516
+ }
2517
 
2518
+ dfrd.resolve(response);
2519
 
2520
+ response.debug && self.debug('backend-debug', response);
2521
+ };
2522
+ self.abortXHR(xhr);
2523
+ lazy? self.lazy(resolve) : resolve();
2524
+ },
2525
+ xhr, _xhr,
2526
+ xhrAbort = function(e) {
2527
+ if (xhr && xhr.state() === 'pending') {
2528
+ self.abortXHR(xhr, { quiet: true , abort: true });
2529
+ if (!e || (e.type !== 'unload' && e.type !== 'destroy')) {
2530
+ self.autoSync();
2531
+ }
2532
  }
2533
  },
2534
+ abort = function(e){
2535
+ self.trigger(cmd + 'done');
2536
+ if (e.type == 'autosync') {
2537
+ if (e.data.action != 'stop') return;
2538
+ } else if (e.type != 'unload' && e.type != 'destroy' && e.type != 'openxhrabort') {
2539
+ if (!e.data.added || !e.data.added.length) {
2540
+ return;
2541
+ }
2542
  }
2543
+ xhrAbort(e);
2544
  },
2545
+ request = function(mode) {
2546
+ var queueAbort = function() {
2547
+ syncOnFail = false;
2548
+ dfrd.reject();
2549
+ };
2550
+
2551
+ if (mode) {
2552
+ if (mode === 'cmd') {
2553
+ return cmd;
2554
+ }
2555
  }
 
 
 
 
 
 
2556
 
2557
+ if (isOpen) {
2558
+ if (requestQueueSkipOpen) {
2559
+ return dfrd.reject();
 
 
 
 
2560
  }
2561
+ requestQueueSkipOpen = true;
 
 
 
 
 
2562
  }
2563
+
2564
+ dfrd.always(function() {
2565
+ delete options.headers['X-elFinderReqid'];
2566
+ }).fail(function(error, xhr, response) {
2567
+ var errData = {
2568
+ cmd: cmd,
2569
+ err: error,
2570
+ xhr: xhr,
2571
+ rc: response
2572
+ };
2573
+
2574
+ // unset this cmd queue when user canceling
2575
+ // see notify : function - `cancel.reject(0);`
2576
+ if (error === 0) {
2577
+ if (requestQueue.length) {
2578
+ requestQueue = $.grep(requestQueue, function(req) {
2579
+ return (req('cmd') === cmd) ? false : true;
2580
+ });
2581
+ }
 
2582
  }
2583
+ // trigger "requestError" event
2584
+ self.trigger('requestError', errData);
2585
+ if (errData._event && errData._event.isDefaultPrevented()) {
2586
+ deffail = false;
2587
+ syncOnFail = false;
2588
+ if (error) {
2589
+ error.error = '';
2590
+ }
2591
+ }
2592
+ // abort xhr
2593
+ xhrAbort();
2594
+ if (isOpen) {
2595
+ openDir = self.file(data.target);
2596
+ openDir && openDir.volumeid && self.isRoot(openDir) && delete self.volumeExpires[openDir.volumeid];
2597
  }
2598
+ self.trigger(cmd + 'fail', response);
2599
+ if (error) {
2600
+ deffail ? self.error(error) : self.debug('error', self.i18n(error));
2601
+ }
2602
+ syncOnFail && self.sync();
2603
+ });
2604
+
2605
+ if (!cmd) {
2606
+ syncOnFail = false;
2607
+ return dfrd.reject({error :'errCmdReq'});
2608
  }
2609
+
2610
+ if (self.maxTargets && data.targets && data.targets.length > self.maxTargets) {
2611
+ syncOnFail = false;
2612
+ return dfrd.reject({error :['errMaxTargets', self.maxTargets]});
 
2613
  }
2614
+
2615
+ defdone && dfrd.done(done);
2616
+
2617
+ // quiet abort not completed "open" requests
2618
+ if (isOpen) {
2619
+ while ((_xhr = queue.pop())) {
2620
+ _xhr.queueAbort();
2621
+ }
2622
+ if (cwd !== data.target) {
2623
+ while ((_xhr = cwdQueue.pop())) {
2624
+ _xhr.queueAbort();
2625
+ }
2626
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2627
  }
2628
+
2629
+ // trigger abort autoSync for commands to add the item
2630
+ if ($.inArray(cmd, (self.cmdsToAdd + ' autosync').split(' ')) !== -1) {
2631
+ if (cmd !== 'autosync') {
2632
+ self.autoSync('stop');
2633
+ dfrd.always(function() {
2634
+ self.autoSync();
2635
+ });
2636
+ }
2637
+ self.trigger('openxhrabort');
2638
  }
 
 
 
 
 
 
 
 
 
 
 
2639
 
2640
+ delete options.preventFail;
 
 
 
 
 
 
 
2641
 
2642
+ if (self.api >= 2.1029) {
2643
+ if (useCache) {
2644
+ options.headers['X-elFinderReqid'] = reqId;
2645
+ } else {
2646
+ Object.assign(options.data, { reqid : reqId });
2647
+ }
2648
+ }
2649
+
2650
+ // function for set value of this syncOnFail
2651
+ dfrd.syncOnFail = function(state) {
2652
+ syncOnFail = !!state;
2653
+ };
 
 
 
 
 
 
 
 
 
2654
 
2655
+ requestCnt++;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2656
 
2657
+ dfrd.xhr = xhr = self.transport.send(options).always(function() {
2658
+ // set responseURL from native xhr object
2659
+ if (options._xhr && typeof options._xhr.responseURL !== 'undefined') {
2660
+ xhr.responseURL = options._xhr.responseURL || '';
2661
+ }
2662
+ --requestCnt;
2663
+ if (requestQueue.length) {
2664
+ requestQueue.shift()();
2665
+ } else {
2666
+ requestQueueSkipOpen = false;
2667
+ }
2668
+ }).fail(error).done(success);
2669
+
2670
+ if (self.api >= 2.1029) {
2671
+ xhr._requestId = reqId;
2672
+ }
2673
+
2674
+ if (isOpen || (data.compare && cmd === 'info')) {
2675
+ // regist function queueAbort
2676
+ xhr.queueAbort = queueAbort;
2677
+ // add autoSync xhr into queue
2678
+ queue.unshift(xhr);
2679
+ // bind abort()
2680
+ data.compare && self.bind(self.cmdsToAdd + ' autosync openxhrabort', abort);
2681
+ dfrd.always(function() {
2682
+ var ndx = $.inArray(xhr, queue);
2683
+ data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort);
2684
+ ndx !== -1 && queue.splice(ndx, 1);
2685
+ });
2686
+ } else if ($.inArray(cmd, self.abortCmdsOnOpen) !== -1) {
2687
+ // regist function queueAbort
2688
+ xhr.queueAbort = queueAbort;
2689
+ // add "open" xhr, only cwd xhr into queue
2690
+ cwdQueue.unshift(xhr);
2691
+ dfrd.always(function() {
2692
+ var ndx = $.inArray(xhr, cwdQueue);
2693
+ ndx !== -1 && cwdQueue.splice(ndx, 1);
2694
+ });
2695
+ }
2696
+
2697
+ // abort pending xhr on window unload or elFinder destroy
2698
+ self.bind('unload destroy', abort);
2699
+ dfrd.always(function() {
2700
+ self.unbind('unload destroy', abort);
2701
+ });
2702
+
2703
+ return dfrd;
2704
+ },
2705
+ queueingRequest = function() {
2706
+ // show notify
2707
+ if (notify.type && notify.cnt) {
2708
+ if (cancel) {
2709
+ notify.cancel = dfrd;
2710
+ opts.eachCancel && (notify.id = +new Date());
2711
+ }
2712
+ timeout = setTimeout(function() {
2713
+ self.notify(notify);
2714
+ dfrd.always(function() {
2715
+ notify.cnt = -(parseInt(notify.cnt)||0);
2716
+ self.notify(notify);
2717
+ });
2718
+ }, self.notifyDelay);
2719
+
2720
+ dfrd.always(function() {
2721
+ clearTimeout(timeout);
2722
+ });
2723
+ }
2724
+ // queueing
2725
+ if (isOpen) {
2726
+ requestQueueSkipOpen = false;
2727
+ }
2728
+ if (requestCnt < requestMaxConn) {
2729
+ // do request
2730
+ return request();
2731
  } else {
2732
+ if (isOpen) {
2733
+ requestQueue.unshift(request);
2734
+ } else {
2735
+ requestQueue.push(request);
2736
+ }
2737
+ return dfrd;
2738
  }
2739
+ },
2740
+ bindData = {opts: opts, result: true},
2741
+ openDir;
2742
 
2743
+ // prevent request initial request is completed
2744
+ if (!self.api && !data.init) {
2745
+ syncOnFail = false;
2746
+ return dfrd.reject();
2747
+ }
2748
 
2749
+ // trigger "request.cmd" that callback be able to cancel request by substituting "false" for "event.data.result"
2750
+ self.trigger('request.' + cmd, bindData, true);
2751
+
2752
+ if (! bindData.result) {
2753
+ self.trigger(cmd + 'done');
2754
+ return dfrd.reject();
2755
+ } else if (typeof bindData.result === 'object' && bindData.result.promise) {
2756
+ bindData.result
2757
+ .done(queueingRequest)
2758
+ .fail(function() {
2759
+ self.trigger(cmd + 'done');
2760
+ dfrd.reject();
2761
+ });
2762
+ return dfrd;
2763
+ }
2764
+
2765
+ return queueingRequest();
2766
+ };
2767
+
2768
  /**
2769
+ * Call cache()
2770
+ * Store info about files/dirs in "files" object.
2771
  *
2772
+ * @param Array files
2773
+ * @return void
2774
+ */
2775
+ this.cache = function(dataArray) {
2776
+ if (! Array.isArray(dataArray)) {
2777
+ dataArray = [ dataArray ];
2778
+ }
2779
+ cache(dataArray);
 
2780
  };
2781
 
2782
+ /**
2783
+ * Update file object caches by respose data object
2784
+ *
2785
+ * @param Object respose data object
2786
+ * @return void
2787
+ */
2788
+ this.updateCache = function(data) {
2789
+ if ($.isPlainObject(data)) {
2790
+ data.files && data.files.length && cache(data.files, 'files');
2791
+ data.tree && data.tree.length && cache(data.tree, 'tree');
2792
+ data.removed && data.removed.length && remove(data.removed);
2793
+ data.added && data.added.length && cache(data.added, 'add');
2794
+ data.changed && data.changed.length && change(data.changed, 'change');
2795
  }
2796
+ };
2797
 
2798
+ /**
2799
+ * Compare current files cache with new files and return diff
2800
+ *
2801
+ * @param Array new files
2802
+ * @param String target folder hash
2803
+ * @param Array exclude properties to compare
2804
+ * @return Object
2805
+ */
2806
+ this.diff = function(incoming, onlydir, excludeProps) {
2807
+ var raw = {},
2808
+ added = [],
2809
+ removed = [],
2810
+ changed = [],
2811
+ excludes = null,
2812
+ isChanged = function(hash) {
2813
+ var l = changed.length;
2814
+
2815
+ while (l--) {
2816
+ if (changed[l].hash == hash) {
2817
+ return true;
2818
+ }
 
 
 
 
 
2819
  }
2820
+ };
2821
+
2822
+ $.each(incoming, function(i, f) {
2823
+ raw[f.hash] = f;
2824
+ });
2825
+
2826
+ // make excludes object
2827
+ if (excludeProps && excludeProps.length) {
2828
+ excludes = {};
2829
+ $.each(excludeProps, function() {
2830
+ excludes[this] = true;
2831
  });
2832
+ }
2833
+
2834
+ // find removed
2835
+ $.each(files, function(hash, f) {
2836
+ if (! raw[hash] && (! onlydir || f.phash === onlydir)) {
2837
+ removed.push(hash);
2838
  }
2839
+ });
2840
+
2841
+ // compare files
2842
+ $.each(raw, function(hash, file) {
2843
+ var origin = files[hash],
2844
+ orgKeys = {},
2845
+ chkKeyLen;
 
 
 
 
2846
 
2847
+ if (!origin) {
2848
+ added.push(file);
2849
+ } else {
2850
+ // make orgKeys object
2851
+ $.each(Object.keys(origin), function() {
2852
+ orgKeys[this] = true;
2853
+ });
2854
+ $.each(file, function(prop) {
2855
+ delete orgKeys[prop];
2856
+ if (! excludes || ! excludes[prop]) {
2857
+ if (file[prop] !== origin[prop]) {
2858
+ changed.push(file);
2859
+ orgKeys = {};
2860
+ return false;
2861
+ }
2862
+ }
2863
+ });
2864
+ chkKeyLen = Object.keys(orgKeys).length;
2865
+ if (chkKeyLen !== 0) {
2866
+ if (excludes) {
2867
+ $.each(orgKeys, function(prop) {
2868
+ if (excludes[prop]) {
2869
+ --chkKeyLen;
2870
+ }
2871
+ });
2872
+ }
2873
+ (chkKeyLen !== 0) && changed.push(file);
2874
+ }
2875
  }
2876
+ });
2877
+
2878
+ // parents of removed dirs mark as changed (required for tree correct work)
2879
+ $.each(removed, function(i, hash) {
2880
+ var file = files[hash],
2881
+ phash = file.phash;
2882
 
2883
+ if (phash
2884
+ && file.mime == 'directory'
2885
+ && $.inArray(phash, removed) === -1
2886
+ && raw[phash]
2887
+ && !isChanged(phash)) {
2888
+ changed.push(raw[phash]);
2889
+ }
2890
+ });
2891
+
2892
+ return {
2893
+ added : added,
2894
+ removed : removed,
2895
+ changed : changed
2896
+ };
2897
+ };
2898
+
2899
+ /**
2900
+ * Sync content
2901
+ *
2902
+ * @return jQuery.Deferred
2903
+ */
2904
+ this.sync = function(onlydir, polling) {
2905
+ this.autoSync('stop');
2906
+ var self = this,
2907
+ compare = function(){
2908
+ var c = '', cnt = 0, mtime = 0;
2909
+ if (onlydir && polling) {
2910
+ $.each(files, function(h, f) {
2911
+ if (f.phash && f.phash === onlydir) {
2912
+ ++cnt;
2913
+ mtime = Math.max(mtime, f.ts);
2914
  }
2915
+ c = cnt+':'+mtime;
2916
  });
2917
  }
2918
+ return c;
2919
+ },
2920
+ comp = compare(),
2921
+ dfrd = $.Deferred().done(function() { self.trigger('sync'); }),
2922
+ opts = [this.request({
2923
+ data : {cmd : 'open', reload : 1, target : cwd, tree : (! onlydir && this.ui.tree) ? 1 : 0, compare : comp},
2924
+ preventDefault : true
2925
+ })],
2926
+ exParents = function() {
2927
+ var parents = [],
2928
+ curRoot = self.file(self.root(cwd)),
2929
+ curId = curRoot? curRoot.volumeid : null,
2930
+ phash = self.cwd().phash,
2931
+ isroot,pdir;
2932
+
2933
+ while(phash) {
2934
+ if (pdir = self.file(phash)) {
2935
+ if (phash.indexOf(curId) !== 0) {
2936
+ parents.push( {target: phash, cmd: 'tree'} );
2937
+ if (! self.isRoot(pdir)) {
2938
+ parents.push( {target: phash, cmd: 'parents'} );
2939
  }
2940
+ curRoot = self.file(self.root(phash));
2941
+ curId = curRoot? curRoot.volumeid : null;
 
2942
  }
2943
+ phash = pdir.phash;
2944
+ } else {
2945
+ phash = null;
2946
  }
2947
+ }
2948
+ return parents;
2949
+ };
2950
 
2951
+ if (! onlydir && self.api >= 2) {
2952
+ (cwd !== this.root()) && opts.push(this.request({
2953
+ data : {cmd : 'parents', target : cwd},
2954
+ preventDefault : true
2955
+ }));
2956
+ $.each(exParents(), function(i, data) {
2957
+ opts.push(self.request({
2958
+ data : {cmd : data.cmd, target : data.target},
2959
+ preventDefault : true
2960
+ }));
2961
  });
2962
+ }
2963
+ $.when.apply($, opts)
2964
+ .fail(function(error, xhr) {
2965
+ if (! polling || $.inArray('errOpen', error) !== -1) {
2966
+ dfrd.reject(error);
2967
+ self.parseError(error) && self.request({
2968
+ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1},
2969
+ notify : {type : 'open', cnt : 1, hideCnt : true}
2970
+ });
2971
+ } else {
2972
+ dfrd.reject((error && xhr.status != 0)? error : void 0);
2973
  }
 
 
 
 
 
 
 
 
 
2974
  })
2975
+ .done(function(odata) {
2976
+ var pdata, argLen, i;
2977
+
2978
+ if (odata.cwd.compare) {
2979
+ if (comp === odata.cwd.compare) {
2980
+ return dfrd.reject();
2981
+ }
2982
+ }
2983
+
2984
+ // for 2nd and more requests
2985
+ pdata = {tree : []};
2986
+
2987
+ // results marge of 2nd and more requests
2988
+ argLen = arguments.length;
2989
+ if (argLen > 1) {
2990
+ for(i = 1; i < argLen; i++) {
2991
+ if (arguments[i].tree && arguments[i].tree.length) {
2992
+ pdata.tree.push.apply(pdata.tree, arguments[i].tree);
2993
+ }
2994
+ }
2995
+ }
2996
+
2997
+ if (self.api < 2.1) {
2998
+ if (! pdata.tree) {
2999
+ pdata.tree = [];
3000
+ }
3001
+ pdata.tree.push(odata.cwd);
3002
+ }
3003
+
3004
+ // data normalize
3005
+ odata = self.normalize(odata);
3006
+ if (!self.validResponse('open', odata)) {
3007
+ return dfrd.reject((odata.norError || 'errResponse'));
3008
+ }
3009
+ pdata = self.normalize(pdata);
3010
+ if (!self.validResponse('tree', pdata)) {
3011
+ return dfrd.reject((pdata.norError || 'errResponse'));
3012
+ }
3013
+
3014
+ var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir);
3015
+
3016
+ diff.added.push(odata.cwd);
3017
+
3018
+ self.updateCache(diff);
3019
+
3020
+ // trigger events
3021
+ diff.removed.length && self.remove(diff);
3022
+ diff.added.length && self.add(diff);
3023
+ diff.changed.length && self.change(diff);
3024
+ return dfrd.resolve(diff);
3025
  })
3026
+ .always(function() {
3027
+ self.autoSync();
3028
+ });
3029
 
3030
+ return dfrd;
3031
+ };
3032
+
3033
+ this.upload = function(files) {
3034
+ return this.transport.upload(files, this);
3035
+ };
3036
+
3037
+ /**
3038
+ * Bind keybord shortcut to keydown event
3039
+ *
3040
+ * @example
3041
+ * elfinder.shortcut({
3042
+ * pattern : 'ctrl+a',
3043
+ * description : 'Select all files',
3044
+ * callback : function(e) { ... },
3045
+ * keypress : true|false (bind to keypress instead of keydown)
3046
+ * })
3047
+ *
3048
+ * @param Object shortcut config
3049
+ * @return elFinder
3050
+ */
3051
+ this.shortcut = function(s) {
3052
+ var patterns, pattern, code, i, parts;
3053
 
3054
+ if (this.options.allowShortcuts && s.pattern && $.isFunction(s.callback)) {
3055
+ patterns = s.pattern.toUpperCase().split(/\s+/);
3056
+
3057
+ for (i= 0; i < patterns.length; i++) {
3058
+ pattern = patterns[i];
3059
+ parts = pattern.split('+');
3060
+ code = (code = parts.pop()).length == 1
3061
+ ? (code > 0 ? code : code.charCodeAt(0))
3062
+ : (code > 0 ? code : $.ui.keyCode[code]);
3063
 
3064
+ if (code && !shortcuts[pattern]) {
3065
+ shortcuts[pattern] = {
3066
+ keyCode : code,
3067
+ altKey : $.inArray('ALT', parts) != -1,
3068
+ ctrlKey : $.inArray('CTRL', parts) != -1,
3069
+ shiftKey : $.inArray('SHIFT', parts) != -1,
3070
+ type : s.type || 'keydown',
3071
+ callback : s.callback,
3072
+ description : s.description,
3073
+ pattern : pattern
3074
+ };
3075
+ }
3076
+ }
3077
+ }
3078
+ return this;
3079
+ };
3080
+
3081
  /**
3082
+ * Registered shortcuts
3083
  *
3084
  * @type Object
3085
  **/
3086
+ this.shortcuts = function() {
3087
+ var ret = [];
3088
+
3089
+ $.each(shortcuts, function(i, s) {
3090
+ ret.push([s.pattern, self.i18n(s.description)]);
3091
+ });
3092
+ return ret;
3093
+ };
3094
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3095
  /**
3096
+ * Get/set clipboard content.
3097
+ * Return new clipboard content.
3098
+ *
3099
+ * @example
3100
+ * this.clipboard([]) - clean clipboard
3101
+ * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted
3102
  *
3103
+ * @param Array new files hashes
3104
+ * @param Boolean cut files?
3105
+ * @return Array
3106
  */
3107
+ this.clipboard = function(hashes, cut) {
3108
+ var map = function() { return $.map(clipboard, function(f) { return f.hash; }); };
3109
+
3110
+ if (hashes !== void(0)) {
3111
+ clipboard.length && this.trigger('unlockfiles', {files : map()});
3112
+ remember = {};
3113
+
3114
+ clipboard = $.map(hashes||[], function(hash) {
3115
+ var file = files[hash];
3116
+ if (file) {
3117
+
3118
+ remember[hash] = true;
3119
+
3120
+ return {
3121
+ hash : hash,
3122
+ phash : file.phash,
3123
+ name : file.name,
3124
+ mime : file.mime,
3125
+ read : file.read,
3126
+ locked : file.locked,
3127
+ cut : !!cut
3128
+ };
3129
+ }
3130
+ return null;
3131
+ });
3132
+ this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)});
3133
+ cut && this.trigger('lockfiles', {files : map()});
3134
+ }
3135
+
3136
+ // return copy of clipboard instead of refrence
3137
+ return clipboard.slice(0, clipboard.length);
3138
+ };
3139
 
3140
  /**
3141
+ * Return true if command enabled
3142
  *
3143
+ * @param String command name
3144
+ * @param String|void hash for check of own volume's disabled cmds
3145
+ * @return Boolean
3146
  */
3147
+ this.isCommandEnabled = function(name, dstHash) {
3148
+ var disabled, cmd,
3149
+ cvid = self.cwd().volumeid || '';
3150
+
3151
+ // In serach results use selected item hash to check
3152
+ if (!dstHash && self.searchStatus.state > 1 && self.selected().length) {
3153
+ dstHash = self.selected()[0];
3154
+ }
3155
+ if (dstHash && (! cvid || dstHash.indexOf(cvid) !== 0)) {
3156
+ disabled = self.option('disabledFlip', dstHash);
3157
+ //if (! disabled) {
3158
+ // disabled = {};
3159
+ //}
3160
+ } else {
3161
+ disabled = cwdOptions.disabledFlip/* || {}*/;
3162
+ }
3163
+ cmd = this._commands[name];
3164
+ return cmd ? (cmd.alwaysEnabled || !disabled[name]) : false;
3165
+ };
3166
 
3167
  /**
3168
+ * Exec command and return result;
3169
  *
3170
+ * @param String command name
3171
+ * @param String|Array usualy files hashes
3172
+ * @param String|Array command options
3173
+ * @param String|void hash for enabled check of own volume's disabled cmds
3174
+ * @return $.Deferred
3175
+ */
3176
+ this.exec = function(cmd, files, opts, dstHash) {
3177
+ var dfrd, resType;
3178
+
3179
+ // apply commandMap for keyboard shortcut
3180
+ if (!dstHash && this.commandMap[cmd] && this.commandMap[cmd] !== 'hidden') {
3181
+ cmd = this.commandMap[cmd];
3182
+ }
3183
+
3184
+ if (cmd === 'open') {
3185
+ if (this.searchStatus.state || this.searchStatus.ininc) {
3186
+ this.trigger('searchend', { noupdate: true });
3187
+ }
3188
+ this.autoSync('stop');
3189
+ }
3190
+ if (!dstHash && files) {
3191
+ if ($.isArray(files)) {
3192
+ if (files.length) {
3193
+ dstHash = files[0];
3194
  }
3195
  } else {
3196
+ dstHash = files;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3197
  }
3198
  }
3199
+ dfrd = this._commands[cmd] && this.isCommandEnabled(cmd, dstHash)
3200
+ ? this._commands[cmd].exec(files, opts)
3201
+ : $.Deferred().reject('errUnknownCmd');
3202
+
3203
+ resType = typeof dfrd;
3204
+ if (!(resType === 'object' && dfrd.promise)) {
3205
+ self.debug('warning', '"cmd.exec()" should be returned "$.Deferred" but cmd "' + cmd + '" returned "' + resType + '"');
3206
+ dfrd = $.Deferred().resolve();
3207
+ }
3208
+
3209
+ this.trigger('exec', { dfrd : dfrd, cmd : cmd, files : files, opts : opts, dstHash : dstHash });
3210
+ return dfrd;
3211
+ };
3212
 
3213
  /**
3214
+ * Create and return dialog.
3215
  *
3216
+ * @param String|DOMElement dialog content
3217
+ * @param Object dialog options
3218
+ * @return jQuery
3219
+ */
3220
+ this.dialog = function(content, options) {
3221
+ var dialog = $('<div/>').append(content).appendTo(node).elfinderdialog(options, self),
3222
+ dnode = dialog.closest('.ui-dialog'),
3223
+ resize = function(){
3224
+ ! dialog.data('draged') && dialog.is(':visible') && dialog.elfinderdialog('posInit');
3225
+ };
3226
+ if (dnode.length) {
3227
+ self.bind('resize', resize);
3228
+ dnode.on('remove', function() {
3229
+ self.unbind('resize', resize);
3230
+ });
3231
+ }
3232
+ return dialog;
3233
+ };
3234
 
3235
  /**
3236
+ * Create and return toast.
3237
+ *
3238
+ * @param Object toast options - see ui/toast.js
3239
+ * @return jQuery
 
3240
  */
3241
+ this.toast = function(options) {
3242
+ return $('<div class="ui-front"/>').appendTo(this.ui.toast).elfindertoast(options || {}, this);
3243
+ };
 
 
 
 
3244
 
3245
  /**
3246
+ * Return UI widget or node
3247
  *
3248
+ * @param String ui name
3249
+ * @return jQuery
3250
+ */
3251
+ this.getUI = function(ui) {
3252
+ return ui? (this.ui[ui] || $()) : node;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3253
  };
3254
 
3255
  /**
3256
+ * Return elFinder.command instance or instances array
 
3257
  *
3258
+ * @param String command name
3259
+ * @return Object | Array
3260
+ */
3261
+ this.getCommand = function(name) {
3262
+ return name === void(0) ? this._commands : this._commands[name];
3263
+ };
3264
 
3265
+ /**
3266
+ * Resize elfinder node
3267
+ *
3268
+ * @param String|Number width
3269
+ * @param String|Number height
3270
+ * @return void
3271
+ */
3272
+ this.resize = function(w, h) {
3273
+ var getMargin = function() {
3274
+ var m = node.outerHeight(true) - node.innerHeight(),
3275
+ p = node;
3276
+
3277
+ while(p.get(0) !== heightBase.get(0)) {
3278
+ p = p.parent();
3279
+ m += p.outerHeight(true) - p.innerHeight();
3280
+ if (! p.parent().length) {
3281
+ // reached the document
3282
+ break;
3283
+ }
3284
+ }
3285
+ return m;
3286
+ },
3287
+ fit = ! node.hasClass('ui-resizable'),
3288
+ prv = node.data('resizeSize') || {w: 0, h: 0},
3289
+ mt, size = {};
3290
+
3291
+ if (heightBase && heightBase.data('resizeTm')) {
3292
+ clearTimeout(heightBase.data('resizeTm'));
3293
  }
3294
+
3295
+ if (typeof h === 'string') {
3296
+ if (mt = h.match(/^([0-9.]+)%$/)) {
3297
+ // setup heightBase
3298
+ if (! heightBase || ! heightBase.length) {
3299
+ heightBase = $(window);
3300
+ }
3301
+ if (! heightBase.data('marginToMyNode')) {
3302
+ heightBase.data('marginToMyNode', getMargin());
3303
+ }
3304
+ if (! heightBase.data('fitToBaseFunc')) {
3305
+ heightBase.data('fitToBaseFunc', function(e) {
3306
+ var tm = heightBase.data('resizeTm');
3307
+ e.preventDefault();
3308
+ e.stopPropagation();
3309
+ tm && cancelAnimationFrame(tm);
3310
+ if (! node.hasClass('elfinder-fullscreen') && (!self.UA.Mobile || heightBase.data('rotated') !== self.UA.Rotated)) {
3311
+ heightBase.data('rotated', self.UA.Rotated);
3312
+ heightBase.data('resizeTm', requestAnimationFrame(function() {
3313
+ self.restoreSize();
3314
+ }));
3315
+ }
3316
+ });
3317
+ }
3318
+ if (typeof heightBase.data('rotated') === 'undefined') {
3319
+ heightBase.data('rotated', self.UA.Rotated);
3320
+ }
3321
+ h = heightBase.height() * (mt[1] / 100) - heightBase.data('marginToMyNode');
3322
+
3323
+ heightBase.off('resize.' + self.namespace, heightBase.data('fitToBaseFunc'));
3324
+ fit && heightBase.on('resize.' + self.namespace, heightBase.data('fitToBaseFunc'));
3325
+ }
3326
  }
3327
+
3328
+ node.css({ width : w, height : parseInt(h) });
3329
+ size.w = Math.round(node.width());
3330
+ size.h = Math.round(node.height());
3331
+ node.data('resizeSize', size);
3332
+ if (size.w !== prv.w || size.h !== prv.h) {
3333
+ node.trigger('resize');
3334
+ this.trigger('resize', {width : size.w, height : size.h});
 
 
 
3335
  }
3336
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3337
 
3338
+ /**
3339
+ * Restore elfinder node size
3340
+ *
3341
+ * @return elFinder
3342
+ */
3343
+ this.restoreSize = function() {
3344
+ this.resize(width, height);
3345
+ };
3346
 
3347
+ this.show = function() {
3348
+ node.show();
3349
+ this.enable().trigger('show');
3350
+ };
3351
 
3352
+ this.hide = function() {
3353
+ if (this.options.enableAlways) {
3354
+ prevEnabled = enabled;
3355
+ enabled = false;
3356
+ }
3357
+ this.disable();
3358
+ this.trigger('hide');
3359
+ node.hide();
3360
+ };
 
 
 
 
 
 
 
 
 
 
 
3361
 
3362
+ /**
3363
+ * Lazy execution function
3364
+ *
3365
+ * @param Object function
3366
+ * @param Number delay
3367
+ * @param Object options
3368
+ * @return Object jQuery.Deferred
3369
+ */
3370
+ this.lazy = function(func, delay, opts) {
3371
+ var busy = function(state) {
3372
+ var cnt = node.data('lazycnt'),
3373
+ repaint;
3374
+
3375
+ if (state) {
3376
+ repaint = node.data('lazyrepaint')? false : opts.repaint;
3377
+ if (! cnt) {
3378
+ node.data('lazycnt', 1)
3379
+ .addClass('elfinder-processing');
3380
+ } else {
3381
+ node.data('lazycnt', ++cnt);
 
 
 
 
 
 
3382
  }
3383
+ if (repaint) {
3384
+ node.data('lazyrepaint', true).css('display'); // force repaint
3385
+ }
3386
+ } else {
3387
+ if (cnt && cnt > 1) {
3388
+ node.data('lazycnt', --cnt);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3389
  } else {
3390
+ repaint = node.data('lazyrepaint');
3391
+ node.data('lazycnt', 0)
3392
+ .removeData('lazyrepaint')
3393
+ .removeClass('elfinder-processing');
3394
+ repaint && node.css('display'); // force repaint;
3395
+ self.trigger('lazydone');
 
 
 
3396
  }
3397
  }
3398
+ },
3399
+ dfd = $.Deferred(),
3400
+ callFunc = function() {
3401
+ dfd.resolve(func.call(dfd));
3402
+ busy(false);
3403
+ };
3404
+
3405
+ delay = delay || 0;
3406
+ opts = opts || {};
3407
+ busy(true);
3408
+
3409
+ if (delay) {
3410
+ setTimeout(callFunc, delay);
3411
+ } else {
3412
+ requestAnimationFrame(callFunc);
3413
  }
3414
+
3415
+ return dfd;
3416
+ };
3417
+
3418
+ /**
3419
+ * Destroy this elFinder instance
3420
+ *
3421
+ * @return void
3422
+ **/
3423
+ this.destroy = function() {
3424
+ if (node && node[0].elfinder) {
3425
+ node.hasClass('elfinder-fullscreen') && self.toggleFullscreen(node);
3426
+ this.options.syncStart = false;
3427
+ this.autoSync('forcestop');
3428
+ this.trigger('destroy').disable();
3429
+ clipboard = [];
3430
+ selected = [];
3431
+ listeners = {};
3432
+ shortcuts = {};
3433
+ $(window).off('.' + namespace);
3434
+ $(document).off('.' + namespace);
3435
+ self.trigger = function(){};
3436
+ $(beeper).remove();
3437
+ node.off()
3438
+ .removeData()
3439
+ .empty()
3440
+ .append(prevContent.contents())
3441
+ .attr('class', prevContent.attr('class'))
3442
+ .attr('style', prevContent.attr('style'));
3443
+ delete node[0].elfinder;
3444
+ // restore kept events
3445
+ $.each(prevEvents, function(n, arr) {
3446
+ $.each(arr, function(i, o) {
3447
+ node.on(o.type + (o.namespace? '.'+o.namespace : ''), o.selector, o.handler);
3448
+ });
3449
  });
3450
  }
3451
+ };
3452
+
3453
+ /**
3454
+ * Start or stop auto sync
3455
+ *
3456
+ * @param String|Bool stop
3457
+ * @return void
3458
+ */
3459
+ this.autoSync = function(mode) {
3460
+ var sync;
3461
+ if (self.options.sync >= 1000) {
3462
+ if (syncInterval) {
3463
+ clearTimeout(syncInterval);
3464
+ syncInterval = null;
3465
+ self.trigger('autosync', {action : 'stop'});
3466
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3467
 
3468
+ if (mode === 'stop') {
3469
+ ++autoSyncStop;
3470
+ } else {
3471
+ autoSyncStop = Math.max(0, --autoSyncStop);
3472
+ }
3473
+
3474
+ if (autoSyncStop || mode === 'forcestop' || ! self.options.syncStart) {
3475
+ return;
3476
+ }
3477
+
3478
+ // run interval sync
3479
+ sync = function(start){
3480
+ var timeout;
3481
+ if (cwdOptions.syncMinMs && (start || syncInterval)) {
3482
+ start && self.trigger('autosync', {action : 'start'});
3483
+ timeout = Math.max(self.options.sync, cwdOptions.syncMinMs);
3484
+ syncInterval && clearTimeout(syncInterval);
3485
+ syncInterval = setTimeout(function() {
3486
+ var dosync = true, hash = cwd, cts;
3487
+ if (cwdOptions.syncChkAsTs && files[hash] && (cts = files[hash].ts)) {
3488
+ self.request({
3489
+ data : {cmd : 'info', targets : [hash], compare : cts, reload : 1},
3490
+ preventDefault : true
3491
+ })
3492
+ .done(function(data){
3493
+ var ts;
3494
+ dosync = true;
3495
+ if (data.compare) {
3496
+ ts = data.compare;
3497
+ if (ts == cts) {
3498
+ dosync = false;
3499
+ }
3500
+ }
3501
+ if (dosync) {
3502
+ self.sync(hash).always(function(){
3503
+ if (ts) {
3504
+ // update ts for cache clear etc.
3505
+ files[hash].ts = ts;
3506
+ }
3507
+ sync();
3508
+ });
3509
  } else {
3510
+ sync();
3511
  }
3512
+ })
3513
+ .fail(function(error, xhr){
3514
+ var err = self.parseError(error);
3515
+ if (err && xhr.status != 0) {
3516
+ self.error(err);
3517
+ if (Array.isArray(err) && $.inArray('errOpen', err) !== -1) {
3518
+ self.request({
3519
+ data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1},
3520
+ notify : {type : 'open', cnt : 1, hideCnt : true}
3521
+ });
3522
+ }
3523
+ } else {
3524
+ syncInterval = setTimeout(function() {
3525
+ sync();
3526
+ }, timeout);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3527
  }
3528
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3529
  } else {
3530
+ self.sync(cwd, true).always(function(){
3531
+ sync();
3532
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3533
  }
3534
+ }, timeout);
3535
  }
3536
+ };
3537
+ sync(true);
3538
+ }
3539
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3540
 
3541
  /**
3542
+ * Return bool is inside work zone of specific point
3543
  *
3544
+ * @param Number event.pageX
3545
+ * @param Number event.pageY
3546
+ * @return Bool
3547
  */
3548
+ this.insideWorkzone = function(x, y, margin) {
3549
+ var rectangle = this.getUI('workzone').data('rectangle');
3550
+
3551
+ margin = margin || 1;
3552
+ if (x < rectangle.left + margin
3553
+ || x > rectangle.left + rectangle.width + margin
3554
+ || y < rectangle.top + margin
3555
+ || y > rectangle.top + rectangle.height + margin) {
3556
+ return false;
3557
+ }
3558
+ return true;
3559
+ };
3560
 
3561
  /**
3562
+ * Target ui node move to last of children of elFinder node fot to show front
3563
  *
3564
+ * @param Object target Target jQuery node object
3565
  */
3566
+ this.toFront = function(target) {
3567
+ var nodes = node.children('.ui-front').removeClass('elfinder-frontmost'),
3568
+ lastnode = nodes.last();
3569
+ nodes.css('z-index', '');
3570
+ $(target).addClass('ui-front elfinder-frontmost').css('z-index', lastnode.css('z-index') + 1);
3571
+ };
 
 
 
 
 
 
 
 
 
3572
 
3573
  /**
3574
+ * Remove class 'elfinder-frontmost' and hide() to target ui node
3575
+ *
3576
+ * @param Object target Target jQuery node object
3577
+ * @param Boolean nohide Do not hide
3578
  */
3579
+ this.toHide =function(target, nohide) {
3580
+ var tgt = $(target),
3581
+ last;
3582
+
3583
+ !nohide && tgt.hide();
3584
+ if (tgt.hasClass('elfinder-frontmost')) {
3585
+ tgt.removeClass('elfinder-frontmost');
3586
+ last = node.children('.ui-front:visible:not(.elfinder-frontmost)').last();
3587
+ if (last.length) {
3588
+ requestAnimationFrame(function() {
3589
+ if (!node.children('.elfinder-frontmost:visible').length) {
3590
+ self.toFront(last);
3591
+ last.trigger('frontmost');
3592
+ }
3593
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3594
  }
3595
+ }
3596
+ };
3597
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3598
  /**
3599
+ * Return css object for maximize
3600
  *
3601
+ * @return Object
3602
  */
3603
+ this.getMaximizeCss = function() {
3604
+ return {
3605
+ width : '100%',
3606
+ height : '100%',
3607
+ margin : 0,
3608
+ top : 0,
3609
+ left : 0,
3610
+ display : 'block',
3611
+ position: 'fixed',
3612
+ zIndex : Math.max(self.zIndex? (self.zIndex + 1) : 0 , 1000),
3613
+ maxWidth : '',
3614
+ maxHeight: ''
3615
+ };
3616
+ };
3617
 
3618
+ // Closure for togglefullscreen
3619
+ (function() {
3620
+ // check is in iframe
3621
+ if (inFrame && self.UA.Fullscreen) {
3622
+ self.UA.Fullscreen = false;
3623
+ if (parentIframe && typeof parentIframe.attr('allowfullscreen') !== 'undefined') {
3624
+ self.UA.Fullscreen = true;
3625
+ }
 
 
 
 
 
 
 
3626
  }
3627
+
3628
+ var orgStyle, bodyOvf, resizeTm, fullElm, exitFull, toFull, funcObj,
3629
+ cls = 'elfinder-fullscreen',
3630
+ clsN = 'elfinder-fullscreen-native',
3631
+ checkDialog = function() {
3632
+ var t = 0,
3633
+ l = 0;
3634
+ $.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) {
3635
+ var $d = $(d),
3636
+ pos = $d.position();
3637
+
3638
+ if (pos.top < 0) {
3639
+ $d.css('top', t);
3640
+ t += 20;
3641
+ }
3642
+ if (pos.left < 0) {
3643
+ $d.css('left', l);
3644
+ l += 20;
3645
+ }
3646
+ });
3647
+ },
3648
+ setFuncObj = function() {
3649
+ var useFullscreen = self.storage('useFullscreen');
3650
+ funcObj = self.UA.Fullscreen && (useFullscreen? useFullscreen > 0 : self.options.commandsOptions.fullscreen.mode === 'screen') ? {
3651
+ // native full screen mode
3652
+
3653
+ fullElm: function() {
3654
+ return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || null;
3655
+ },
3656
+
3657
+ exitFull: function() {
3658
+ if (document.exitFullscreen) {
3659
+ return document.exitFullscreen();
3660
+ } else if (document.webkitExitFullscreen) {
3661
+ return document.webkitExitFullscreen();
3662
+ } else if (document.mozCancelFullScreen) {
3663
+ return document.mozCancelFullScreen();
3664
+ } else if (document.msExitFullscreen) {
3665
+ return document.msExitFullscreen();
3666
+ }
3667
+ },
3668
+
3669
+ toFull: function(elem) {
3670
+ if (elem.requestFullscreen) {
3671
+ return elem.requestFullscreen();
3672
+ } else if (elem.webkitRequestFullscreen) {
3673
+ return elem.webkitRequestFullscreen();
3674
+ } else if (elem.mozRequestFullScreen) {
3675
+ return elem.mozRequestFullScreen();
3676
+ } else if (elem.msRequestFullscreen) {
3677
+ return elem.msRequestFullscreen();
3678
+ }
3679
+ return false;
3680
+ }
3681
+ } : {
3682
+ // node element maximize mode
3683
+
3684
+ fullElm: function() {
3685
+ var full;
3686
+ if (node.hasClass(cls)) {
3687
+ return node.get(0);
3688
+ } else {
3689
+ full = node.find('.' + cls);
3690
+ if (full.length) {
3691
+ return full.get(0);
3692
+ }
3693
+ }
3694
+ return null;
3695
+ },
3696
+
3697
+ exitFull: function() {
3698
+ var elm;
3699
+
3700
+ $(window).off('resize.' + namespace, resize);
3701
+ if (bodyOvf !== void(0)) {
3702
+ $('body').css('overflow', bodyOvf);
3703
+ }
3704
+ bodyOvf = void(0);
3705
+
3706
+ if (orgStyle) {
3707
+ elm = orgStyle.elm;
3708
+ restoreStyle(elm);
3709
+ $(elm).trigger('resize', {fullscreen: 'off'});
3710
+ }
3711
+
3712
+ $(window).trigger('resize');
3713
+ },
3714
+
3715
+ toFull: function(elem) {
3716
+ bodyOvf = $('body').css('overflow') || '';
3717
+ $('body').css('overflow', 'hidden');
3718
+
3719
+ $(elem).css(self.getMaximizeCss())
3720
+ .addClass(cls)
3721
+ .trigger('resize', {fullscreen: 'on'});
3722
+
3723
+ checkDialog();
3724
+
3725
+ $(window).on('resize.' + namespace, resize).trigger('resize');
3726
+
3727
+ return true;
3728
+ }
3729
+ };
3730
+ },
3731
+ restoreStyle = function(elem) {
3732
+ if (orgStyle && orgStyle.elm == elem) {
3733
+ $(elem).removeClass(cls + ' ' + clsN).attr('style', orgStyle.style);
3734
+ orgStyle = null;
3735
+ }
3736
+ },
3737
+ resize = function(e) {
3738
+ var elm;
3739
+ if (e.target === window) {
3740
+ resizeTm && cancelAnimationFrame(resizeTm);
3741
+ resizeTm = requestAnimationFrame(function() {
3742
+ if (elm = funcObj.fullElm()) {
3743
+ $(elm).trigger('resize', {fullscreen: 'on'});
3744
+ }
3745
+ });
3746
+ }
3747
+ };
3748
+
3749
+ setFuncObj();
3750
+
3751
+ $(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){
3752
+ if (self.UA.Fullscreen) {
3753
+ var elm = funcObj.fullElm(),
3754
+ win = $(window);
3755
+
3756
+ resizeTm && cancelAnimationFrame(resizeTm);
3757
+ if (elm === null) {
3758
+ win.off('resize.' + namespace, resize);
3759
+ if (orgStyle) {
3760
+ elm = orgStyle.elm;
3761
+ restoreStyle(elm);
3762
+ $(elm).trigger('resize', {fullscreen: 'off'});
3763
+ }
3764
+ } else {
3765
+ $(elm).addClass(cls + ' ' + clsN)
3766
+ .attr('style', 'width:100%; height:100%; margin:0; padding:0;')
3767
+ .trigger('resize', {fullscreen: 'on'});
3768
+ win.on('resize.' + namespace, resize);
3769
+ checkDialog();
3770
+ }
3771
+ win.trigger('resize');
3772
+ }
3773
+ });
3774
+
3775
+ /**
3776
+ * Toggle Full Scrren Mode
3777
+ *
3778
+ * @param Object target
3779
+ * @param Bool full
3780
+ * @return Object | Null DOM node object of current full scrren
3781
+ */
3782
+ self.toggleFullscreen = function(target, full) {
3783
+ var elm = $(target).get(0),
3784
+ curElm = null;
3785
+
3786
+ curElm = funcObj.fullElm();
3787
+ if (curElm) {
3788
+ if (curElm == elm) {
3789
+ if (full === true) {
3790
+ return curElm;
3791
+ }
3792
+ } else {
3793
+ if (full === false) {
3794
+ return curElm;
3795
+ }
3796
+ }
3797
+ funcObj.exitFull();
3798
+ return null;
3799
+ } else {
3800
+ if (full === false) {
3801
+ return null;
3802
+ }
3803
+ }
3804
+
3805
+ setFuncObj();
3806
+ orgStyle = {elm: elm, style: $(elm).attr('style')};
3807
+ if (funcObj.toFull(elm) !== false) {
3808
+ return elm;
3809
+ } else {
3810
+ orgStyle = null;
3811
+ return null;
3812
+ }
3813
+ };
3814
+ })();
3815
+
3816
+ // Closure for toggleMaximize
3817
+ (function(){
3818
+ var cls = 'elfinder-maximized',
3819
+ resizeTm,
3820
+ resize = function(e) {
3821
+ if (e.target === window && e.data && e.data.elm) {
3822
+ var elm = e.data.elm;
3823
+ resizeTm && cancelAnimationFrame(resizeTm);
3824
+ resizeTm = requestAnimationFrame(function() {
3825
+ elm.trigger('resize', {maximize: 'on'});
3826
+ });
3827
+ }
3828
+ },
3829
+ exitMax = function(elm) {
3830
+ $(window).off('resize.' + namespace, resize);
3831
+ $('body').css('overflow', elm.data('bodyOvf'));
3832
+ elm.removeClass(cls)
3833
+ .attr('style', elm.data('orgStyle'))
3834
+ .removeData('bodyOvf')
3835
+ .removeData('orgStyle');
3836
+ elm.trigger('resize', {maximize: 'off'});
3837
+ },
3838
+ toMax = function(elm) {
3839
+ elm.data('bodyOvf', $('body').css('overflow') || '')
3840
+ .data('orgStyle', elm.attr('style'))
3841
+ .addClass(cls)
3842
+ .css(self.getMaximizeCss());
3843
+ $('body').css('overflow', 'hidden');
3844
+ $(window).on('resize.' + namespace, {elm: elm}, resize);
3845
+ elm.trigger('resize', {maximize: 'on'});
3846
+ };
3847
+
3848
+ /**
3849
+ * Toggle Maximize target node
3850
+ *
3851
+ * @param Object target
3852
+ * @param Bool max
3853
+ * @return void
3854
+ */
3855
+ self.toggleMaximize = function(target, max) {
3856
+ var elm = $(target),
3857
+ maximized = elm.hasClass(cls);
3858
+
3859
+ if (maximized) {
3860
+ if (max === true) {
3861
+ return;
3862
+ }
3863
+ exitMax(elm);
3864
+ } else {
3865
+ if (max === false) {
3866
+ return;
3867
+ }
3868
+ toMax(elm);
3869
+ }
3870
+ };
3871
+ })();
3872
+
3873
+ /************* init stuffs ****************/
3874
+ Object.assign($.ui.keyCode, {
3875
+ 'F1' : 112,
3876
+ 'F2' : 113,
3877
+ 'F3' : 114,
3878
+ 'F4' : 115,
3879
+ 'F5' : 116,
3880
+ 'F6' : 117,
3881
+ 'F7' : 118,
3882
+ 'F8' : 119,
3883
+ 'F9' : 120,
3884
+ 'F10' : 121,
3885
+ 'F11' : 122,
3886
+ 'F12' : 123,
3887
+ 'DIG0' : 48,
3888
+ 'DIG1' : 49,
3889
+ 'DIG2' : 50,
3890
+ 'DIG3' : 51,
3891
+ 'DIG4' : 52,
3892
+ 'DIG5' : 53,
3893
+ 'DIG6' : 54,
3894
+ 'DIG7' : 55,
3895
+ 'DIG8' : 56,
3896
+ 'DIG9' : 57,
3897
+ 'NUM0' : 96,
3898
+ 'NUM1' : 97,
3899
+ 'NUM2' : 98,
3900
+ 'NUM3' : 99,
3901
+ 'NUM4' : 100,
3902
+ 'NUM5' : 101,
3903
+ 'NUM6' : 102,
3904
+ 'NUM7' : 103,
3905
+ 'NUM8' : 104,
3906
+ 'NUM9' : 105,
3907
+ 'CONTEXTMENU' : 93,
3908
+ 'DOT' : 190
3909
+ });
3910
+
3911
+ this.dragUpload = false;
3912
+ this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined';
3913
+
3914
+ // configure transport object
3915
+ this.transport = {};
3916
+
3917
+ if (typeof(this.options.transport) == 'object') {
3918
+ this.transport = this.options.transport;
3919
+ if (typeof(this.transport.init) == 'function') {
3920
+ this.transport.init(this);
3921
+ }
3922
+ }
3923
+
3924
+ if (typeof(this.transport.send) != 'function') {
3925
+ this.transport.send = function(opts) {
3926
+ if (!self.UA.IE) {
3927
+ // keep native xhr object for handling property responseURL
3928
+ opts._xhr = new XMLHttpRequest();
3929
+ opts.xhr = function() { return opts._xhr; };
3930
+ }
3931
+ return $.ajax(opts);
3932
+ };
3933
+ }
3934
+
3935
+ if (this.transport.upload == 'iframe') {
3936
+ this.transport.upload = $.proxy(this.uploads.iframe, this);
3937
+ } else if (typeof(this.transport.upload) == 'function') {
3938
+ this.dragUpload = !!this.options.dragUploadAllow;
3939
+ } else if (this.xhrUpload && !!this.options.dragUploadAllow) {
3940
+ this.transport.upload = $.proxy(this.uploads.xhr, this);
3941
+ this.dragUpload = true;
3942
+ } else {
3943
+ this.transport.upload = $.proxy(this.uploads.iframe, this);
3944
+ }
3945
+
3946
+ /**
3947
+ * Decoding 'raw' string converted to unicode
3948
+ *
3949
+ * @param String str
3950
+ * @return String
3951
+ */
3952
+ this.decodeRawString = function(str) {
3953
+ var charCodes = function(str) {
3954
+ var i, len, arr;
3955
+ for (i=0,len=str.length,arr=[]; i<len; i++) {
3956
+ arr.push(str.charCodeAt(i));
3957
+ }
3958
+ return arr;
3959
+ },
3960
+ scalarValues = function(arr) {
3961
+ var scalars = [], i, len, c;
3962
+ if (typeof arr === 'string') {arr = charCodes(arr);}
3963
+ for (i=0,len=arr.length; c=arr[i],i<len; i++) {
3964
+ if (c >= 0xd800 && c <= 0xdbff) {
3965
+ scalars.push((c & 1023) + 64 << 10 | arr[++i] & 1023);
3966
+ } else {
3967
+ scalars.push(c);
3968
+ }
3969
+ }
3970
+ return scalars;
3971
+ },
3972
+ decodeUTF8 = function(arr) {
3973
+ var i, len, c, str, char = String.fromCharCode;
3974
+ for (i=0,len=arr.length,str=""; c=arr[i],i<len; i++) {
3975
+ if (c <= 0x7f) {
3976
+ str += char(c);
3977
+ } else if (c <= 0xdf && c >= 0xc2) {
3978
+ str += char((c&31)<<6 | arr[++i]&63);
3979
+ } else if (c <= 0xef && c >= 0xe0) {
3980
+ str += char((c&15)<<12 | (arr[++i]&63)<<6 | arr[++i]&63);
3981
+ } else if (c <= 0xf7 && c >= 0xf0) {
3982
+ str += char(
3983
+ 0xd800 | ((c&7)<<8 | (arr[++i]&63)<<2 | arr[++i]>>>4&3) - 64,
3984
+ 0xdc00 | (arr[i++]&15)<<6 | arr[i]&63
3985
+ );
3986
+ } else {
3987
+ str += char(0xfffd);
3988
+ }
3989
+ }
3990
+ return str;
3991
+ };
3992
+
3993
+ return decodeUTF8(scalarValues(str));
3994
+ };
3995
+
3996
+ /**
3997
+ * Gets target file contents by file.hash
3998
+ *
3999
+ * @param String hash The hash
4000
+ * @param String responseType 'blob' or 'arraybuffer' (default)
4001
+ * @return arraybuffer|blob The contents.
4002
+ */
4003
+ this.getContents = function(hash, responseType) {
4004
+ var self = this,
4005
+ dfd = $.Deferred(),
4006
+ type = responseType || 'arraybuffer',
4007
+ url, req;
4008
+
4009
+ dfd.fail(function() {
4010
+ req && req.state() === 'pending' && req.reject();
4011
+ });
4012
+
4013
+ url = self.openUrl(hash);
4014
+ if (!self.isSameOrigin(url)) {
4015
+ url = self.openUrl(hash, true);
4016
+ }
4017
+ req = self.request({
4018
+ data : {cmd : 'get'},
4019
+ options : {
4020
+ url: url,
4021
+ type: 'get',
4022
+ cache : true,
4023
+ dataType : 'binary',
4024
+ responseType : type,
4025
+ processData: false
4026
+ }
4027
+ })
4028
+ .fail(function() {
4029
+ dfd.reject();
4030
+ })
4031
+ .done(function(data) {
4032
+ dfd.resolve(data);
4033
+ });
4034
+
4035
+ return dfd;
4036
+ };
4037
+
4038
+ this.getMimetype = function(name, orgMime) {
4039
+ var mime = orgMime,
4040
+ ext, m;
4041
+ m = (name + '').match(/\.([^.]+)$/);
4042
+ if (m && (ext = m[1])) {
4043
+ if (!extToMimeTable) {
4044
+ extToMimeTable = self.arrayFlip(self.mimeTypes);
4045
+ }
4046
+ if (!(mime = extToMimeTable[ext.toLowerCase()])) {
4047
+ mime = orgMime;
4048
+ }
4049
+ }
4050
+ return mime;
4051
+ };
4052
+
4053
+ /**
4054
+ * Supported check hash algorisms
4055
+ *
4056
+ * @type Array
4057
+ */
4058
+ self.hashCheckers = [];
4059
+
4060
+ /**
4061
+ * Closure of getContentsHashes()
4062
+ */
4063
+ (function(self) {
4064
+ var hashLibs = {
4065
+ check : true
4066
+ },
4067
+ md5Calc = function(arr) {
4068
+ var spark = new hashLibs.SparkMD5.ArrayBuffer(),
4069
+ job;
4070
+
4071
+ job = self.asyncJob(function(buf) {
4072
+ spark.append(buf);
4073
+ }, arr).done(function() {
4074
+ job._md5 = spark.end();
4075
+ });
4076
+
4077
+ return job;
4078
+ },
4079
+ shaCalc = function(arr, length) {
4080
+ var sha, job;
4081
+
4082
+ try {
4083
+ sha = new hashLibs.jsSHA('SHA' + (length.substr(0, 1) === '3'? length : ('-' + length)), 'ARRAYBUFFER');
4084
+ job = self.asyncJob(function(buf) {
4085
+ sha.update(buf);
4086
+ }, arr).done(function() {
4087
+ job._sha = sha.getHash('HEX');
4088
+ });
4089
+ } catch(e) {
4090
+ job = $.Deferred.reject();
4091
+ }
4092
+
4093
+ return job;
4094
+ };
4095
+
4096
+ // make fm.hashCheckers
4097
+ if (self.options.cdns.sparkmd5) {
4098
+ self.hashCheckers.push('md5');
4099
+ }
4100
+ if (self.options.cdns.jssha) {
4101
+ self.hashCheckers = self.hashCheckers.concat(['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128', 'shake256']);
4102
+ }
4103
+
4104
+ /**
4105
+ * Gets the contents hashes.
4106
+ *
4107
+ * @param String target target file.hash
4108
+ * @param Object needHashes need hash lib names
4109
+ * @return Object hashes with lib name as key
4110
+ */
4111
+ self.getContentsHashes = function(target, needHashes) {
4112
+ var dfd = $.Deferred(),
4113
+ needs = self.arrayFlip(needHashes || ['md5'], true),
4114
+ libs = [],
4115
+ jobs = [],
4116
+ res = {},
4117
+ req;
4118
+
4119
+ dfd.fail(function() {
4120
+ req && req.reject();
4121
+ });
4122
+
4123
+ if (hashLibs.check) {
4124
+
4125
+ delete hashLibs.check;
4126
+
4127
+ // load SparkMD5
4128
+ var libsmd5 = $.Deferred();
4129
+ if (window.ArrayBuffer && self.options.cdns.sparkmd5) {
4130
+ libs.push(libsmd5);
4131
+ self.loadScript([self.options.cdns.sparkmd5],
4132
+ function(res) {
4133
+ var SparkMD5 = res || window.SparkMD5;
4134
+ window.SparkMD5 && delete window.SparkMD5;
4135
+ libsmd5.resolve();
4136
+ if (SparkMD5) {
4137
+ hashLibs.SparkMD5 = SparkMD5;
4138
+ }
4139
+ },
4140
+ {
4141
+ tryRequire: true,
4142
+ error: function() {
4143
+ libsmd5.reject();
4144
+ }
4145
+ }
4146
+ );
4147
+ }
4148
+
4149
+ // load jsSha
4150
+ var libssha = $.Deferred();
4151
+ if (window.ArrayBuffer && self.options.cdns.jssha) {
4152
+ libs.push(libssha);
4153
+ self.loadScript([self.options.cdns.jssha],
4154
+ function(res) {
4155
+ var jsSHA = res || window.jsSHA;
4156
+ window.jsSHA && delete window.jsSHA;
4157
+ libssha.resolve();
4158
+ if (jsSHA) {
4159
+ hashLibs.jsSHA = jsSHA;
4160
+ }
4161
+ },
4162
+ {
4163
+ tryRequire: true,
4164
+ error: function() {
4165
+ libssha.reject();
4166
+ }
4167
+ }
4168
+ );
4169
+ }
4170
+ }
4171
+
4172
+ $.when.apply(null, libs).always(function() {
4173
+ if (Object.keys(hashLibs).length) {
4174
+ req = self.getContents(target).done(function(arrayBuffer) {
4175
+ var arr = (arrayBuffer instanceof ArrayBuffer && arrayBuffer.byteLength > 0)? self.sliceArrayBuffer(arrayBuffer, 1048576) : false,
4176
+ i;
4177
+
4178
+ if (needs.md5 && hashLibs.SparkMD5) {
4179
+ jobs.push(function() {
4180
+ var job = md5Calc(arr).done(function() {
4181
+ var f;
4182
+ res.md5 = job._md5;
4183
+ if (f = self.file(target)) {
4184
+ f.md5 = job._md5;
4185
+ }
4186
+ dfd.notify(res);
4187
+ });
4188
+ dfd.fail(function() {
4189
+ job.reject();
4190
+ });
4191
+ return job;
4192
+ });
4193
+ }
4194
+ if (hashLibs.jsSHA) {
4195
+ $.each(['1', '224', '256', '384', '512', '3-224', '3-256', '3-384', '3-512', 'ke128', 'ke256'], function(i, v) {
4196
+ if (needs['sha' + v]) {
4197
+ jobs.push(function() {
4198
+ var job = shaCalc(arr, v).done(function() {
4199
+ var f;
4200
+ res['sha' + v] = job._sha;
4201
+ if (f = self.file(target)) {
4202
+ f['sha' + v] = job._sha;
4203
+ }
4204
+ dfd.notify(res);
4205
+ });
4206
+ return job;
4207
+ });
4208
+ }
4209
+ });
4210
+ }
4211
+ if (jobs.length) {
4212
+ self.sequence(jobs).always(function() {
4213
+ dfd.resolve(res);
4214
+ });
4215
+ } else {
4216
+ dfd.reject();
4217
+ }
4218
+ }).fail(function() {
4219
+ dfd.reject();
4220
+ });
4221
+ } else {
4222
+ dfd.reject();
4223
+ }
4224
+ });
4225
+
4226
+ return dfd;
4227
+ };
4228
+ })(this);
4229
+
4230
+ /**
4231
+ * Parse error value to display
4232
+ *
4233
+ * @param Mixed error
4234
+ * @return Mixed parsed error
4235
+ */
4236
+ this.parseError = function(error) {
4237
+ var arg = error;
4238
+ if ($.isPlainObject(arg)) {
4239
+ arg = arg.error;
4240
+ }
4241
+ return arg;
4242
+ };
4243
+
4244
+ /**
4245
+ * Alias for this.trigger('error', {error : 'message'})
4246
+ *
4247
+ * @param String error message
4248
+ * @return elFinder
4249
+ **/
4250
+ this.error = function() {
4251
+ var arg = arguments[0],
4252
+ opts = arguments[1] || null,
4253
+ err;
4254
+ if (arguments.length == 1 && typeof(arg) === 'function') {
4255
+ return self.bind('error', arg);
4256
+ } else {
4257
+ err = this.parseError(arg);
4258
+ return (err === true || !err)? this : self.trigger('error', {error: err, opts : opts});
4259
+ }
4260
+ };
4261
+
4262
+ // create bind/trigger aliases for build-in events
4263
+ $.each(events, function(i, name) {
4264
+ self[name] = function() {
4265
+ var arg = arguments[0];
4266
+ return arguments.length == 1 && typeof(arg) == 'function'
4267
+ ? self.bind(name, arg)
4268
+ : self.trigger(name, $.isPlainObject(arg) ? arg : {});
4269
+ };
4270
+ });
4271
+
4272
+ // bind core event handlers
4273
+ this
4274
+ .enable(function() {
4275
+ if (!enabled && self.api && self.visible() && self.ui.overlay.is(':hidden') && ! node.children('.elfinder-dialog.' + self.res('class', 'editing') + ':visible').length) {
4276
+ enabled = true;
4277
+ document.activeElement && document.activeElement.blur();
4278
+ node.removeClass('elfinder-disabled');
4279
+ }
4280
+ })
4281
+ .disable(function() {
4282
+ prevEnabled = enabled;
4283
+ enabled = false;
4284
+ node.addClass('elfinder-disabled');
4285
+ })
4286
+ .open(function() {
4287
+ selected = [];
4288
+ })
4289
+ .select(function(e) {
4290
+ var cnt = 0,
4291
+ unselects = [];
4292
+ selected = $.grep(e.data.selected || e.data.value|| [], function(hash) {
4293
+ if (unselects.length || (self.maxTargets && ++cnt > self.maxTargets)) {
4294
+ unselects.push(hash);
4295
+ return false;
4296
+ } else {
4297
+ return files[hash] ? true : false;
4298
+ }
4299
+ });
4300
+ if (unselects.length) {
4301
+ self.trigger('unselectfiles', {files: unselects, inselect: true});
4302
+ self.toast({mode: 'warning', msg: self.i18n(['errMaxTargets', self.maxTargets])});
4303
+ }
4304
+ })
4305
+ .error(function(e) {
4306
+ var opts = {
4307
+ cssClass : 'elfinder-dialog-error',
4308
+ title : self.i18n('error'),
4309
+ resizable : false,
4310
+ destroyOnClose : true,
4311
+ buttons : {}
4312
+ },
4313
+ node = self.getUI(),
4314
+ cnt = node.children('.elfinder-dialog-error').length,
4315
+ last, counter;
4316
+
4317
+ if (cnt < self.options.maxErrorDialogs) {
4318
+ opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { $(this).elfinderdialog('close'); };
4319
+
4320
+ if (e.data.opts && $.isPlainObject(e.data.opts)) {
4321
+ Object.assign(opts, e.data.opts);
4322
+ }
4323
+
4324
+ self.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-error"/>'+self.i18n(e.data.error), opts);
4325
+ } else {
4326
+ last = node.children('.elfinder-dialog-error:last').children('.ui-dialog-content:first');
4327
+ counter = last.children('.elfinder-error-counter');
4328
+ if (counter.length) {
4329
+ counter.data('cnt', parseInt(counter.data('cnt')) + 1).html(self.i18n(['moreErrors', counter.data('cnt')]));
4330
+ } else {
4331
+ counter = $('<span class="elfinder-error-counter">'+ self.i18n(['moreErrors', 1]) +'</span>').data('cnt', 1);
4332
+ last.append('<br/>', counter);
4333
+ }
4334
+ }
4335
+ })
4336
+ .bind('tmb', function(e) {
4337
+ $.each(e.data.images||[], function(hash, tmb) {
4338
+ if (files[hash]) {
4339
+ files[hash].tmb = tmb;
4340
+ }
4341
+ });
4342
+ })
4343
+ .bind('searchstart', function(e) {
4344
+ Object.assign(self.searchStatus, e.data);
4345
+ self.searchStatus.state = 1;
4346
+ })
4347
+ .bind('search', function(e) {
4348
+ self.searchStatus.state = 2;
4349
+ })
4350
+ .bind('searchend', function() {
4351
+ self.searchStatus.state = 0;
4352
+ self.searchStatus.ininc = false;
4353
+ self.searchStatus.mixed = false;
4354
+ })
4355
+ .bind('canMakeEmptyFile', function(e) {
4356
+ var data = e.data,
4357
+ obj = {};
4358
+ if (data && Array.isArray(data.mimes)) {
4359
+ if (!data.unshift) {
4360
+ obj = self.mimesCanMakeEmpty;
4361
+ }
4362
+ $.each(data.mimes, function() {
4363
+ if (!obj[this]) {
4364
+ obj[this] = self.mimeTypes[this];
4365
+ }
4366
+ });
4367
+ if (data.unshift) {
4368
+ self.mimesCanMakeEmpty = Object.assign(obj, self.mimesCanMakeEmpty);
4369
+ }
4370
+ }
4371
+ })
4372
+ .bind('themechange', function() {
4373
+ requestAnimationFrame(function() {
4374
+ self.trigger('uiresize');
4375
+ });
4376
+ })
4377
+ ;
4378
+
4379
+ // We listen and emit a sound on delete according to option
4380
+ if (true === this.options.sound) {
4381
+ this.bind('playsound', function(e) {
4382
+ var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"'),
4383
+ file = e.data && e.data.soundFile;
4384
+
4385
+ play && file && play != '' && play != 'no' && $(beeper).html('<source src="' + soundPath + file + '" type="audio/wav">')[0].play();
4386
+ });
4387
+ }
4388
+
4389
+ // bind external event handlers
4390
+ $.each(this.options.handlers, function(event, callback) {
4391
+ self.bind(event, callback);
4392
+ });
4393
+
4394
+ /**
4395
+ * History object. Store visited folders
4396
+ *
4397
+ * @type Object
4398
+ **/
4399
+ this.history = new this.history(this);
4400
+
4401
+ /**
4402
+ * Root hashed
4403
+ *
4404
+ * @type Object
4405
+ */
4406
+ this.roots = {};
4407
+
4408
+ /**
4409
+ * leaf roots
4410
+ *
4411
+ * @type Object
4412
+ */
4413
+ this.leafRoots = {};
4414
+
4415
+ this.volumeExpires = {};
4416
+
4417
+ /**
4418
+ * Loaded commands
4419
+ *
4420
+ * @type Object
4421
+ **/
4422
+ this._commands = {};
4423
+
4424
+ if (!Array.isArray(this.options.commands)) {
4425
+ this.options.commands = [];
4426
+ }
4427
+
4428
+ if ($.inArray('*', this.options.commands) !== -1) {
4429
+ this.options.commands = Object.keys(this.commands);
4430
+ }
4431
+
4432
+ /**
4433
+ * UI command map of cwd volume ( That volume driver option `uiCmdMap` )
4434
+ *
4435
+ * @type Object
4436
+ **/
4437
+ this.commandMap = {};
4438
+
4439
+ /**
4440
+ * cwd options of each volume
4441
+ * key: volumeid
4442
+ * val: options object
4443
+ *
4444
+ * @type Object
4445
+ */
4446
+ this.volOptions = {};
4447
+
4448
+ /**
4449
+ * Has volOptions data
4450
+ *
4451
+ * @type Boolean
4452
+ */
4453
+ this.hasVolOptions = false;
4454
+
4455
+ /**
4456
+ * Hash of trash holders
4457
+ * key: trash folder hash
4458
+ * val: source volume hash
4459
+ *
4460
+ * @type Object
4461
+ */
4462
+ this.trashes = {};
4463
+
4464
+ /**
4465
+ * cwd options of each folder/file
4466
+ * key: hash
4467
+ * val: options object
4468
+ *
4469
+ * @type Object
4470
+ */
4471
+ this.optionsByHashes = {};
4472
+
4473
+ /**
4474
+ * UI Auto Hide Functions
4475
+ * Each auto hide function mast be call to `fm.trigger('uiautohide')` at end of process
4476
+ *
4477
+ * @type Array
4478
+ **/
4479
+ this.uiAutoHide = [];
4480
+
4481
+ // trigger `uiautohide`
4482
+ this.one('open', function() {
4483
+ if (self.uiAutoHide.length) {
4484
+ setTimeout(function() {
4485
+ self.trigger('uiautohide');
4486
+ }, 500);
4487
+ }
4488
+ });
4489
+
4490
+ // Auto Hide Functions sequential processing start
4491
+ this.bind('uiautohide', function() {
4492
+ if (self.uiAutoHide.length) {
4493
+ self.uiAutoHide.shift()();
4494
+ }
4495
+ });
4496
+
4497
+ if (this.options.width) {
4498
+ width = this.options.width;
4499
+ }
4500
+
4501
+ if (this.options.height) {
4502
+ height = this.options.height;
4503
+ }
4504
+
4505
+ if (this.options.heightBase) {
4506
+ heightBase = $(this.options.heightBase);
4507
+ }
4508
+
4509
+ if (this.options.soundPath) {
4510
+ soundPath = this.options.soundPath.replace(/\/+$/, '') + '/';
4511
+ } else {
4512
+ soundPath = this.baseUrl + soundPath;
4513
+ }
4514
+
4515
+ self.one('opendone', function() {
4516
+ var tm;
4517
+ // attach events to document
4518
+ $(document)
4519
+ // disable elfinder on click outside elfinder
4520
+ .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !$(e.target).closest(node).length && self.disable(); })
4521
+ // exec shortcuts
4522
+ .on(keydown+' '+keypress+' '+keyup+' '+mousedown, execShortcut);
4523
+
4524
+ // attach events to window
4525
+ self.options.useBrowserHistory && $(window)
4526
+ .on('popstate.' + namespace, function(ev) {
4527
+ var state = ev.originalEvent.state || {},
4528
+ hasThash = state.thash? true : false,
4529
+ dialog = node.find('.elfinder-frontmost:visible'),
4530
+ input = node.find('.elfinder-navbar-dir,.elfinder-cwd-filename').find('input,textarea'),
4531
+ onOpen, toast;
4532
+ if (!hasThash) {
4533
+ state = { thash: self.cwd().hash };
4534
+ // scroll to elFinder node
4535
+ $('html,body').animate({ scrollTop: node.offset().top });
4536
+ }
4537
+ if (dialog.length || input.length) {
4538
+ history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash);
4539
+ if (dialog.length) {
4540
+ if (!dialog.hasClass(self.res('class', 'preventback'))) {
4541
+ if (dialog.hasClass('elfinder-contextmenu')) {
4542
+ $(document).trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false }));
4543
+ } else if (dialog.hasClass('elfinder-dialog')) {
4544
+ dialog.elfinderdialog('close');
4545
+ } else {
4546
+ dialog.trigger('close');
4547
+ }
4548
+ }
4549
+ } else {
4550
+ input.trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false }));
4551
+ }
4552
+ } else {
4553
+ if (hasThash) {
4554
+ !$.isEmptyObject(self.files()) && self.request({
4555
+ data : {cmd : 'open', target : state.thash, onhistory : 1},
4556
+ notify : {type : 'open', cnt : 1, hideCnt : true},
4557
+ syncOnFail : true
4558
+ });
4559
+ } else {
4560
+ onOpen = function() {
4561
+ toast.trigger('click');
4562
+ };
4563
+ self.one('open', onOpen, true);
4564
+ toast = self.toast({
4565
+ msg: self.i18n('pressAgainToExit'),
4566
+ onHidden: function() {
4567
+ self.unbind('open', onOpen);
4568
+ history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash);
4569
+ }
4570
+ });
4571
+ }
4572
+ }
4573
+ });
4574
+
4575
+ $(window).on('resize.' + namespace, function(e){
4576
+ if (e.target === this) {
4577
+ tm && cancelAnimationFrame(tm);
4578
+ tm = requestAnimationFrame(function() {
4579
+ var prv = node.data('resizeSize') || {w: 0, h: 0},
4580
+ size = {w: Math.round(node.width()), h: Math.round(node.height())};
4581
+ node.data('resizeSize', size);
4582
+ if (size.w !== prv.w || size.h !== prv.h) {
4583
+ node.trigger('resize');
4584
+ self.trigger('resize', {width : size.w, height : size.h});
4585
+ }
4586
+ });
4587
+ }
4588
+ })
4589
+ .on('beforeunload.' + namespace,function(e){
4590
+ var msg, cnt;
4591
+ if (!self.pauseUnloadCheck()) {
4592
+ if (node.is(':visible')) {
4593
+ if (self.ui.notify.children().length && $.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) {
4594
+ msg = self.i18n('ntfsmth');
4595
+ } else if (node.find('.'+self.res('class', 'editing')).length && $.inArray('editingFile', self.options.windowCloseConfirm) !== -1) {
4596
+ msg = self.i18n('editingFile');
4597
+ } else if ((cnt = Object.keys(self.selected()).length) && $.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) {
4598
+ msg = self.i18n('hasSelected', ''+cnt);
4599
+ } else if ((cnt = Object.keys(self.clipboard()).length) && $.inArray('hasClipboardData', self.options.windowCloseConfirm) !== -1) {
4600
+ msg = self.i18n('hasClipboard', ''+cnt);
4601
+ }
4602
+ if (msg) {
4603
+ e.returnValue = msg;
4604
+ return msg;
4605
+ }
4606
+ }
4607
+ self.trigger('unload');
4608
+ }
4609
+ });
4610
+
4611
+ // bind window onmessage for CORS
4612
+ $(window).on('message.' + namespace, function(e){
4613
+ var res = e.originalEvent || null,
4614
+ obj, data;
4615
+ if (res && self.uploadURL.indexOf(res.origin) === 0) {
4616
+ try {
4617
+ obj = JSON.parse(res.data);
4618
+ data = obj.data || null;
4619
+ if (data) {
4620
+ if (data.error) {
4621
+ if (obj.bind) {
4622
+ self.trigger(obj.bind+'fail', data);
4623
+ }
4624
+ self.error(data.error);
4625
+ } else {
4626
+ data.warning && self.error(data.warning);
4627
+ self.updateCache(data);
4628
+ data.removed && data.removed.length && self.remove(data);
4629
+ data.added && data.added.length && self.add(data);
4630
+ data.changed && data.changed.length && self.change(data);
4631
+ if (obj.bind) {
4632
+ self.trigger(obj.bind, data);
4633
+ self.trigger(obj.bind+'done');
4634
+ }
4635
+ data.sync && self.sync();
4636
+ }
4637
+ }
4638
+ } catch (e) {
4639
+ self.sync();
4640
+ }
4641
+ }
4642
+ });
4643
+
4644
+ // elFinder enable always
4645
+ if (self.options.enableAlways) {
4646
+ $(window).on('focus.' + namespace, function(e){
4647
+ (e.target === this) && self.enable();
4648
+ });
4649
+ if (inFrame) {
4650
+ $(window.top).on('focus.' + namespace, function() {
4651
+ if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) {
4652
+ requestAnimationFrame(function() {
4653
+ $(window).trigger('focus');
4654
+ });
4655
+ }
4656
+ });
4657
+ }
4658
+ } else if (inFrame) {
4659
+ $(window).on('blur.' + namespace, function(e){
4660
+ enabled && e.target === this && self.disable();
4661
+ });
4662
+ }
4663
+
4664
+ // return focus to the window on click (elFInder in the frame)
4665
+ if (inFrame) {
4666
+ node.on('click', function(e) {
4667
+ $(window).trigger('focus');
4668
+ });
4669
+ }
4670
+
4671
+ // elFinder to enable by mouse over
4672
+ if (self.options.enableByMouseOver) {
4673
+ node.on('mouseenter touchstart', function(e) {
4674
+ (inFrame) && $(window).trigger('focus');
4675
+ ! self.enabled() && self.enable();
4676
+ });
4677
+ }
4678
+ });
4679
+
4680
+ // store instance in node
4681
+ node[0].elfinder = this;
4682
+
4683
+ // auto load language file
4684
+ dfrdsBeforeBootup.push((function() {
4685
+ var lang = self.lang,
4686
+ langJs = self.i18nBaseUrl + 'elfinder.' + lang + '.js',
4687
+ dfd = $.Deferred().done(function() {
4688
+ if (self.i18[lang]) {
4689
+ self.lang = lang;
4690
+ }
4691
+ self.trigger('i18load');
4692
+ i18n = self.lang === 'en'
4693
+ ? self.i18['en']
4694
+ : $.extend(true, {}, self.i18['en'], self.i18[self.lang]);
4695
+ });
4696
+
4697
+ if (!self.i18[lang]) {
4698
+ self.lang = 'en';
4699
+ if (self.hasRequire) {
4700
+ require([langJs], function() {
4701
+ dfd.resolve();
4702
+ }, function() {
4703
+ dfd.resolve();
4704
+ });
4705
+ } else {
4706
+ self.loadScript([langJs], function() {
4707
+ dfd.resolve();
4708
+ }, {
4709
+ loadType: 'tag',
4710
+ error : function() {
4711
+ dfd.resolve();
4712
+ }
4713
+ });
4714
+ }
4715
+ } else {
4716
+ dfd.resolve();
4717
+ }
4718
+ return dfd;
4719
+ })());
4720
+
4721
+ // elFinder boot up function
4722
+ bootUp = function() {
4723
+ var columnNames;
4724
+
4725
+ /**
4726
+ * i18 messages
4727
+ *
4728
+ * @type Object
4729
+ **/
4730
+ self.messages = i18n.messages;
4731
+
4732
+ // check jquery ui
4733
+ if (!($.fn.selectable && $.fn.draggable && $.fn.droppable && $.fn.resizable && $.fn.button && $.fn.slider)) {
4734
+ return alert(self.i18n('errJqui'));
4735
+ }
4736
+
4737
+ // check node
4738
+ if (!node.length) {
4739
+ return alert(self.i18n('errNode'));
4740
+ }
4741
+ // check connector url
4742
+ if (!self.options.url) {
4743
+ return alert(self.i18n('errURL'));
4744
+ }
4745
+
4746
+ // column key/name map for fm.getColumnName()
4747
+ columnNames = Object.assign({
4748
+ name : self.i18n('name'),
4749
+ perm : self.i18n('perms'),
4750
+ date : self.i18n('modify'),
4751
+ size : self.i18n('size'),
4752
+ kind : self.i18n('kind'),
4753
+ modestr : self.i18n('mode'),
4754
+ modeoct : self.i18n('mode'),
4755
+ modeboth : self.i18n('mode')
4756
+ }, self.options.uiOptions.cwd.listView.columnsCustomName);
4757
+
4758
+ /**
4759
+ * Gets the column name of cwd list view
4760
+ *
4761
+ * @param String key The key
4762
+ * @return String The column name.
4763
+ */
4764
+ self.getColumnName = function(key) {
4765
+ return columnNames[key] || self.i18n(key);
4766
+ };
4767
+
4768
+ /**
4769
+ * Interface direction
4770
+ *
4771
+ * @type String
4772
+ * @default "ltr"
4773
+ **/
4774
+ self.direction = i18n.direction;
4775
+
4776
+ /**
4777
+ * Date/time format
4778
+ *
4779
+ * @type String
4780
+ * @default "m.d.Y"
4781
+ **/
4782
+ self.dateFormat = self.options.dateFormat || i18n.dateFormat;
4783
+
4784
+ /**
4785
+ * Date format like "Yesterday 10:20:12"
4786
+ *
4787
+ * @type String
4788
+ * @default "{day} {time}"
4789
+ **/
4790
+ self.fancyFormat = self.options.fancyDateFormat || i18n.fancyDateFormat;
4791
+
4792
+ /**
4793
+ * Date format for if upload file has not original unique name
4794
+ * e.g. Clipboard image data, Image data taken with iOS
4795
+ *
4796
+ * @type String
4797
+ * @default "ymd-His"
4798
+ **/
4799
+ self.nonameDateFormat = (self.options.nonameDateFormat || i18n.nonameDateFormat).replace(/[\/\\]/g, '_');
4800
+
4801
+ /**
4802
+ * Css classes
4803
+ *
4804
+ * @type String
4805
+ **/
4806
+ self.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-'
4807
+ +(self.direction == 'rtl' ? 'rtl' : 'ltr')
4808
+ +(self.UA.Touch? (' elfinder-touch' + (self.options.resizable ? ' touch-punch' : '')) : '')
4809
+ +(self.UA.Mobile? ' elfinder-mobile' : '')
4810
+ +(self.UA.iOS? ' elfinder-ios' : '')
4811
+ +' '+self.options.cssClass;
4812
+
4813
+ // prepare node
4814
+ node.addClass(self.cssClass)
4815
+ .on(mousedown, function() {
4816
+ !enabled && self.enable();
4817
+ });
4818
+
4819
+ // draggable closure
4820
+ (function() {
4821
+ var ltr, wzRect, wzBottom, wzBottom2, nodeStyle,
4822
+ keyEvt = keydown + 'draggable' + ' keyup.' + namespace + 'draggable';
4823
+
4824
+ /**
4825
+ * Base draggable options
4826
+ *
4827
+ * @type Object
4828
+ **/
4829
+ self.draggable = {
4830
+ appendTo : node,
4831
+ addClasses : false,
4832
+ distance : 4,
4833
+ revert : true,
4834
+ refreshPositions : false,
4835
+ cursor : 'crosshair',
4836
+ cursorAt : {left : 50, top : 47},
4837
+ scroll : false,
4838
+ start : function(e, ui) {
4839
+ var helper = ui.helper,
4840
+ targets = $.grep(helper.data('files')||[], function(h) {
4841
+ if (h) {
4842
+ remember[h] = true;
4843
+ return true;
4844
+ }
4845
+ return false;
4846
+ }),
4847
+ locked = false,
4848
+ cnt, h;
4849
+
4850
+ // fix node size
4851
+ nodeStyle = node.attr('style');
4852
+ node.width(node.width()).height(node.height());
4853
+
4854
+ // set var for drag()
4855
+ ltr = (self.direction === 'ltr');
4856
+ wzRect = self.getUI('workzone').data('rectangle');
4857
+ wzBottom = wzRect.top + wzRect.height;
4858
+ wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true);
4859
+
4860
+ self.draggingUiHelper = helper;
4861
+ cnt = targets.length;
4862
+ while (cnt--) {
4863
+ h = targets[cnt];
4864
+ if (files[h].locked) {
4865
+ locked = true;
4866
+ helper.data('locked', true);
4867
+ break;
4868
+ }
4869
+ }
4870
+ !locked && self.trigger('lockfiles', {files : targets});
4871
+
4872
+ helper.data('autoScrTm', setInterval(function() {
4873
+ if (helper.data('autoScr')) {
4874
+ self.autoScroll[helper.data('autoScr')](helper.data('autoScrVal'));
4875
+ }
4876
+ }, 50));
4877
+ },
4878
+ drag : function(e, ui) {
4879
+ var helper = ui.helper,
4880
+ autoScr, autoUp, bottom;
4881
+
4882
+ if ((autoUp = wzRect.top > e.pageY) || wzBottom2 < e.pageY) {
4883
+ if (wzRect.cwdEdge > e.pageX) {
4884
+ autoScr = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down');
4885
+ } else {
4886
+ autoScr = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down');
4887
+ }
4888
+ if (!autoUp) {
4889
+ if (autoScr.substr(0, 3) === 'cwd') {
4890
+ if (wzBottom < e.pageY) {
4891
+ bottom = wzBottom;
4892
+ } else {
4893
+ autoScr = null;
4894
+ }
4895
+ } else {
4896
+ bottom = wzBottom2;
4897
+ }
4898
+ }
4899
+ if (autoScr) {
4900
+ helper.data('autoScr', autoScr);
4901
+ helper.data('autoScrVal', Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - bottom), 1.3));
4902
+ }
4903
+ }
4904
+ if (! autoScr) {
4905
+ if (helper.data('autoScr')) {
4906
+ helper.data('refreshPositions', 1).data('autoScr', null);
4907
+ }
4908
+ }
4909
+ if (helper.data('refreshPositions') && $(this).elfUiWidgetInstance('draggable')) {
4910
+ if (helper.data('refreshPositions') > 0) {
4911
+ $(this).draggable('option', { refreshPositions : true, elfRefresh : true });
4912
+ helper.data('refreshPositions', -1);
4913
+ } else {
4914
+ $(this).draggable('option', { refreshPositions : false, elfRefresh : false });
4915
+ helper.data('refreshPositions', null);
4916
+ }
4917
+ }
4918
+ },
4919
+ stop : function(e, ui) {
4920
+ var helper = ui.helper,
4921
+ files;
4922
+
4923
+ $(document).off(keyEvt);
4924
+ $(this).elfUiWidgetInstance('draggable') && $(this).draggable('option', { refreshPositions : false });
4925
+ self.draggingUiHelper = null;
4926
+ self.trigger('focus').trigger('dragstop');
4927
+ if (! helper.data('droped')) {
4928
+ files = $.grep(helper.data('files')||[], function(h) { return h? true : false ;});
4929
+ self.trigger('unlockfiles', {files : files});
4930
+ self.trigger('selectfiles', {files : self.selected()});
4931
+ }
4932
+ self.enable();
4933
+
4934
+ // restore node style
4935
+ node.attr('style', nodeStyle);
4936
+
4937
+ helper.data('autoScrTm') && clearInterval(helper.data('autoScrTm'));
4938
+ },
4939
+ helper : function(e, ui) {
4940
+ var element = this.id ? $(this) : $(this).parents('[id]:first'),
4941
+ helper = $('<div class="elfinder-drag-helper"><span class="elfinder-drag-helper-icon-status"/></div>'),
4942
+ icon = function(f) {
4943
+ var mime = f.mime, i, tmb = self.tmb(f);
4944
+ i = '<div class="elfinder-cwd-icon elfinder-cwd-icon-drag '+self.mime2class(mime)+' ui-corner-all"/>';
4945
+ if (tmb) {
4946
+ i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML;
4947
+ } else if (f.icon) {
4948
+ i = $(i).css(self.getIconStyle(f, true)).get(0).outerHTML;
4949
+ }
4950
+ if (f.csscls) {
4951
+ i = '<div class="'+f.csscls+'">' + i + '</div>';
4952
+ }
4953
+ return i;
4954
+ },
4955
+ hashes, l, ctr;
4956
+
4957
+ self.draggingUiHelper && self.draggingUiHelper.stop(true, true);
4958
+
4959
+ self.trigger('dragstart', {target : element[0], originalEvent : e}, true);
4960
+
4961
+ hashes = element.hasClass(self.res('class', 'cwdfile'))
4962
+ ? self.selected()
4963
+ : [self.navId2Hash(element.attr('id'))];
4964
+
4965
+ helper.append(icon(files[hashes[0]])).data('files', hashes).data('locked', false).data('droped', false).data('namespace', namespace).data('dropover', 0);
4966
+
4967
+ if ((l = hashes.length) > 1) {
4968
+ helper.append(icon(files[hashes[l-1]]) + '<span class="elfinder-drag-num">'+l+'</span>');
4969
+ }
4970
+
4971
+ $(document).on(keyEvt, function(e){
4972
+ var chk = (e.shiftKey||e.ctrlKey||e.metaKey);
4973
+ if (ctr !== chk) {
4974
+ ctr = chk;
4975
+ if (helper.is(':visible') && helper.data('dropover') && ! helper.data('droped')) {
4976
+ helper.toggleClass('elfinder-drag-helper-plus', helper.data('locked')? true : ctr);
4977
+ self.trigger(ctr? 'unlockfiles' : 'lockfiles', {files : hashes, helper: helper});
4978
+ }
4979
+ }
4980
+ });
4981
+
4982
+ return helper;
4983
+ }
4984
+ };
4985
+ })();
4986
+
4987
+ // in getFileCallback set - change default actions on double click/enter/ctrl+enter
4988
+ if (self.commands.getfile) {
4989
+ if (typeof(self.options.getFileCallback) == 'function') {
4990
+ self.bind('dblclick', function(e) {
4991
+ e.preventDefault();
4992
+ self.exec('getfile').fail(function() {
4993
+ self.exec('open', e.data && e.data.file? [ e.data.file ]: void(0));
4994
+ });
4995
+ });
4996
+ self.shortcut({
4997
+ pattern : 'enter',
4998
+ description : self.i18n('cmdgetfile'),
4999
+ callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); }); }
5000
+ })
5001
+ .shortcut({
5002
+ pattern : 'ctrl+enter',
5003
+ description : self.i18n(self.OS == 'mac' ? 'cmdrename' : 'cmdopen'),
5004
+ callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); }
5005
+ });
5006
+ } else {
5007
+ self.options.getFileCallback = null;
5008
+ }
5009
+ }
5010
+
5011
+ // load commands
5012
+ $.each(self.commands, function(name, cmd) {
5013
+ var proto = Object.assign({}, cmd.prototype),
5014
+ extendsCmd, opts;
5015
+ if ($.isFunction(cmd) && !self._commands[name] && (cmd.prototype.forceLoad || $.inArray(name, self.options.commands) !== -1)) {
5016
+ extendsCmd = cmd.prototype.extendsCmd || '';
5017
+ if (extendsCmd) {
5018
+ if ($.isFunction(self.commands[extendsCmd])) {
5019
+ cmd.prototype = Object.assign({}, base, new self.commands[extendsCmd](), cmd.prototype);
5020
+ } else {
5021
+ return true;
5022
+ }
5023
+ } else {
5024
+ cmd.prototype = Object.assign({}, base, cmd.prototype);
5025
+ }
5026
+ self._commands[name] = new cmd();
5027
+ cmd.prototype = proto;
5028
+ opts = self.options.commandsOptions[name] || {};
5029
+ if (extendsCmd && self.options.commandsOptions[extendsCmd]) {
5030
+ opts = $.extend(true, {}, self.options.commandsOptions[extendsCmd], opts);
5031
+ }
5032
+ self._commands[name].setup(name, opts);
5033
+ // setup linked commands
5034
+ if (self._commands[name].linkedCmds.length) {
5035
+ $.each(self._commands[name].linkedCmds, function(i, n) {
5036
+ var lcmd = self.commands[n];
5037
+ if ($.isFunction(lcmd) && !self._commands[n]) {
5038
+ lcmd.prototype = base;
5039
+ self._commands[n] = new lcmd();
5040
+ self._commands[n].setup(n, self.options.commandsOptions[n]||{});
5041
+ }
5042
+ });
5043
+ }
5044
+ }
5045
+ });
5046
+
5047
+ /**
5048
+ * UI nodes
5049
+ *
5050
+ * @type Object
5051
+ **/
5052
+ self.ui = {
5053
+ // container for nav panel and current folder container
5054
+ workzone : $('<div/>').appendTo(node).elfinderworkzone(self),
5055
+ // container for folders tree / places
5056
+ navbar : $('<div/>').appendTo(node).elfindernavbar(self, self.options.uiOptions.navbar || {}),
5057
+ // container for for preview etc at below the navbar
5058
+ navdock : $('<div/>').appendTo(node).elfindernavdock(self, self.options.uiOptions.navdock || {}),
5059
+ // contextmenu
5060
+ contextmenu : $('<div/>').appendTo(node).elfindercontextmenu(self),
5061
+ // overlay
5062
+ overlay : $('<div/>').appendTo(node).elfinderoverlay({
5063
+ show : function() { self.disable(); },
5064
+ hide : function() { prevEnabled && self.enable(); }
5065
+ }),
5066
+ // current folder container
5067
+ cwd : $('<div/>').appendTo(node).elfindercwd(self, self.options.uiOptions.cwd || {}),
5068
+ // notification dialog window
5069
+ notify : self.dialog('', {
5070
+ cssClass : 'elfinder-dialog-notify',
5071
+ position : self.options.notifyDialog.position,
5072
+ absolute : true,
5073
+ resizable : false,
5074
+ autoOpen : false,
5075
+ closeOnEscape : false,
5076
+ title : '&nbsp;',
5077
+ width : self.options.notifyDialog.width? parseInt(self.options.notifyDialog.width) : null,
5078
+ minHeight : null
5079
+ }),
5080
+ statusbar : $('<div class="ui-widget-header ui-helper-clearfix ui-corner-bottom elfinder-statusbar"/>').hide().appendTo(node),
5081
+ toast : $('<div class="elfinder-toast"/>').appendTo(node),
5082
+ bottomtray : $('<div class="elfinder-bottomtray">').appendTo(node)
5083
+ };
5084
+
5085
+ self.trigger('uiready');
5086
+
5087
+ // load required ui
5088
+ $.each(self.options.ui || [], function(i, ui) {
5089
+ var name = 'elfinder'+ui,
5090
+ opts = self.options.uiOptions[ui] || {};
5091
+
5092
+ if (!self.ui[ui] && $.fn[name]) {
5093
+ // regist to self.ui before make instance
5094
+ self.ui[ui] = $('<'+(opts.tag || 'div')+'/>').appendTo(node);
5095
+ self.ui[ui][name](self, opts);
5096
+ }
5097
+ });
5098
+
5099
+ // update size
5100
+ self.resize(width, height);
5101
+
5102
+ // make node resizable
5103
+ if (self.options.resizable) {
5104
+ node.resizable({
5105
+ resize : function(e, ui) {
5106
+ self.resize(ui.size.width, ui.size.height);
5107
+ },
5108
+ handles : 'se',
5109
+ minWidth : 300,
5110
+ minHeight : 200
5111
+ });
5112
+ if (self.UA.Touch) {
5113
+ node.addClass('touch-punch');
5114
+ }
5115
+ }
5116
+
5117
+ (function() {
5118
+ var navbar = self.getUI('navbar'),
5119
+ cwd = self.getUI('cwd').parent();
5120
+
5121
+ self.autoScroll = {
5122
+ navbarUp : function(v) {
5123
+ navbar.scrollTop(Math.max(0, navbar.scrollTop() - v));
5124
+ },
5125
+ navbarDown : function(v) {
5126
+ navbar.scrollTop(navbar.scrollTop() + v);
5127
+ },
5128
+ cwdUp : function(v) {
5129
+ cwd.scrollTop(Math.max(0, cwd.scrollTop() - v));
5130
+ },
5131
+ cwdDown : function(v) {
5132
+ cwd.scrollTop(cwd.scrollTop() + v);
5133
+ }
5134
+ };
5135
+ })();
5136
+
5137
+ // Swipe on the touch devices to show/hide of toolbar or navbar
5138
+ if (self.UA.Touch) {
5139
+ (function() {
5140
+ var lastX, lastY, nodeOffset, nodeWidth, nodeTop, navbarW, toolbarH,
5141
+ navbar = self.getUI('navbar'),
5142
+ toolbar = self.getUI('toolbar'),
5143
+ moveEv = 'touchmove.stopscroll',
5144
+ moveTm,
5145
+ moveUpOn = function(e) {
5146
+ var touches = e.originalEvent.touches || [{}],
5147
+ y = touches[0].pageY || null;
5148
+ if (!lastY || y < lastY) {
5149
+ e.preventDefault();
5150
+ moveTm && clearTimeout(moveTm);
5151
+ }
5152
+ },
5153
+ moveDownOn = function(e) {
5154
+ e.preventDefault();
5155
+ moveTm && clearTimeout(moveTm);
5156
+ },
5157
+ moveOff = function() {
5158
+ moveTm = setTimeout(function() {
5159
+ node.off(moveEv);
5160
+ }, 100);
5161
+ },
5162
+ handleW, handleH = 50;
5163
+
5164
+ navbar = navbar.children().length? navbar : null;
5165
+ toolbar = toolbar.length? toolbar : null;
5166
+ node.on('touchstart touchmove touchend', function(e) {
5167
+ if (e.type === 'touchend') {
5168
+ lastX = false;
5169
+ lastY = false;
5170
+ moveOff();
5171
+ return;
5172
+ }
5173
+
5174
+ var touches = e.originalEvent.touches || [{}],
5175
+ x = touches[0].pageX || null,
5176
+ y = touches[0].pageY || null,
5177
+ ltr = (self.direction === 'ltr'),
5178
+ navbarMode, treeWidth, swipeX, moveX, toolbarT, mode;
5179
+
5180
+ if (x === null || y === null || (e.type === 'touchstart' && touches.length > 1)) {
5181
+ return;
5182
+ }
5183
+
5184
+ if (e.type === 'touchstart') {
5185
+ nodeOffset = node.offset();
5186
+ nodeWidth = node.width();
5187
+ if (navbar) {
5188
+ lastX = false;
5189
+ if (navbar.is(':hidden')) {
5190
+ if (! handleW) {
5191
+ handleW = Math.max(50, nodeWidth / 10);
5192
+ }
5193
+ if ((ltr? (x - nodeOffset.left) : (nodeWidth + nodeOffset.left - x)) < handleW) {
5194
+ lastX = x;
5195
+ }
5196
+ } else if (! e.originalEvent._preventSwipeX) {
5197
+ navbarW = navbar.width();
5198
+ if (ltr) {
5199
+ swipeX = (x < nodeOffset.left + navbarW);
5200
+ } else {
5201
+ swipeX = (x > nodeOffset.left + nodeWidth - navbarW);
5202
+ }
5203
+ if (swipeX) {
5204
+ handleW = Math.max(50, nodeWidth / 10);
5205
+ lastX = x;
5206
+ } else {
5207
+ lastX = false;
5208
+ }
5209
+ }
5210
+ }
5211
+ if (toolbar) {
5212
+ lastY = false;
5213
+ if (! e.originalEvent._preventSwipeY) {
5214
+ toolbarH = toolbar.height();
5215
+ nodeTop = nodeOffset.top;
5216
+ if (y - nodeTop < (toolbar.is(':hidden')? handleH : (toolbarH + 30))) {
5217
+ lastY = y;
5218
+ node.on(moveEv, toolbar.is(':hidden')? moveDownOn: moveUpOn);
5219
+ }
5220
+ }
5221
+ }
5222
+ } else {
5223
+ if (navbar && lastX !== false) {
5224
+ navbarMode = (ltr? (lastX > x) : (lastX < x))? 'navhide' : 'navshow';
5225
+ moveX = Math.abs(lastX - x);
5226
+ if (navbarMode === 'navhide' && moveX > navbarW * 0.6
5227
+ || (moveX > (navbarMode === 'navhide'? navbarW / 3 : 45)
5228
+ && (navbarMode === 'navshow'
5229
+ || (ltr? x < nodeOffset.left + 20 : x > nodeOffset.left + nodeWidth - 20)
5230
+ ))
5231
+ ) {
5232
+ self.getUI('navbar').trigger(navbarMode, {handleW: handleW});
5233
+ lastX = false;
5234
+ }
5235
+ }
5236
+ if (toolbar && lastY !== false ) {
5237
+ toolbarT = toolbar.offset().top;
5238
+ if (Math.abs(lastY - y) > Math.min(45, toolbarH / 3)) {
5239
+ mode = (lastY > y)? 'slideUp' : 'slideDown';
5240
+ if (mode === 'slideDown' || toolbarT + 20 > y) {
5241
+ if (toolbar.is(mode === 'slideDown' ? ':hidden' : ':visible')) {
5242
+ toolbar.stop(true, true).trigger('toggle', {duration: 100, handleH: handleH});
5243
+ }
5244
+ lastY = false;
5245
+ }
5246
+ }
5247
+ }
5248
+ }
5249
+ });
5250
+ })();
5251
+ }
5252
+
5253
+ if (self.dragUpload) {
5254
+ // add event listener for HTML5 DnD upload
5255
+ (function() {
5256
+ var isin = function(e) {
5257
+ return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && $(e.target).closest('div.ui-dialog-content').length === 0);
5258
+ },
5259
+ ent = 'native-drag-enter',
5260
+ disable = 'native-drag-disable',
5261
+ c = 'class',
5262
+ navdir = self.res(c, 'navdir'),
5263
+ droppable = self.res(c, 'droppable'),
5264
+ dropover = self.res(c, 'adroppable'),
5265
+ arrow = self.res(c, 'navarrow'),
5266
+ clDropActive = self.res(c, 'adroppable'),
5267
+ wz = self.getUI('workzone'),
5268
+ ltr = (self.direction === 'ltr'),
5269
+ clearTm = function() {
5270
+ autoScrTm && cancelAnimationFrame(autoScrTm);
5271
+ autoScrTm = null;
5272
+ },
5273
+ wzRect, autoScrFn, autoScrTm;
5274
+
5275
+ node.on('dragenter', function(e) {
5276
+ clearTm();
5277
+ if (isin(e)) {
5278
+ e.preventDefault();
5279
+ e.stopPropagation();
5280
+ wzRect = wz.data('rectangle');
5281
+ }
5282
+ })
5283
+ .on('dragleave', function(e) {
5284
+ clearTm();
5285
+ if (isin(e)) {
5286
+ e.preventDefault();
5287
+ e.stopPropagation();
5288
+ }
5289
+ })
5290
+ .on('dragover', function(e) {
5291
+ var autoUp;
5292
+ if (isin(e)) {
5293
+ e.preventDefault();
5294
+ e.stopPropagation();
5295
+ e.originalEvent.dataTransfer.dropEffect = 'none';
5296
+ if (! autoScrTm) {
5297
+ autoScrTm = requestAnimationFrame(function() {
5298
+ var wzBottom = wzRect.top + wzRect.height,
5299
+ wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true),
5300
+ fn;
5301
+ if ((autoUp = e.pageY < wzRect.top) || e.pageY > wzBottom2 ) {
5302
+ if (wzRect.cwdEdge > e.pageX) {
5303
+ fn = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down');
5304
+ } else {
5305
+ fn = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down');
5306
+ }
5307
+ if (!autoUp) {
5308
+ if (fn.substr(0, 3) === 'cwd') {
5309
+ if (wzBottom < e.pageY) {
5310
+ wzBottom2 = wzBottom;
5311
+ } else {
5312
+ fn = '';
5313
+ }
5314
+ }
5315
+ }
5316
+ fn && self.autoScroll[fn](Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom2), 1.3));
5317
+ }
5318
+ autoScrTm = null;
5319
+ });
5320
+ }
5321
+ } else {
5322
+ clearTm();
5323
+ }
5324
+ })
5325
+ .on('drop', function(e) {
5326
+ clearTm();
5327
+ if (isin(e)) {
5328
+ e.stopPropagation();
5329
+ e.preventDefault();
5330
+ }
5331
+ });
5332
+
5333
+ node.on('dragenter', '.native-droppable', function(e){
5334
+ if (e.originalEvent.dataTransfer) {
5335
+ var $elm = $(e.currentTarget),
5336
+ id = e.currentTarget.id || null,
5337
+ cwd = null,
5338
+ elfFrom;
5339
+ if (!id) { // target is cwd
5340
+ cwd = self.cwd();
5341
+ $elm.data(disable, false);
5342
+ try {
5343
+ $.each(e.originalEvent.dataTransfer.types, function(i, v){
5344
+ if (v.substr(0, 13) === 'elfinderfrom:') {
5345
+ elfFrom = v.substr(13).toLowerCase();
5346
+ }
5347
+ });
5348
+ } catch(e) {}
5349
+ }
5350
+ if (!cwd || (cwd.write && (!elfFrom || elfFrom !== (window.location.href + cwd.hash).toLowerCase()))) {
5351
+ e.preventDefault();
5352
+ e.stopPropagation();
5353
+ $elm.data(ent, true);
5354
+ $elm.addClass(clDropActive);
5355
+ } else {
5356
+ $elm.data(disable, true);
5357
+ }
5358
+ }
5359
+ })
5360
+ .on('dragleave', '.native-droppable', function(e){
5361
+ if (e.originalEvent.dataTransfer) {
5362
+ var $elm = $(e.currentTarget);
5363
+ e.preventDefault();
5364
+ e.stopPropagation();
5365
+ if ($elm.data(ent)) {
5366
+ $elm.data(ent, false);
5367
+ } else {
5368
+ $elm.removeClass(clDropActive);
5369
+ }
5370
+ }
5371
+ })
5372
+ .on('dragover', '.native-droppable', function(e){
5373
+ if (e.originalEvent.dataTransfer) {
5374
+ var $elm = $(e.currentTarget);
5375
+ e.preventDefault();
5376
+ e.stopPropagation();
5377
+ e.originalEvent.dataTransfer.dropEffect = $elm.data(disable)? 'none' : 'copy';
5378
+ $elm.data(ent, false);
5379
+ }
5380
+ })
5381
+ .on('drop', '.native-droppable', function(e){
5382
+ if (e.originalEvent && e.originalEvent.dataTransfer) {
5383
+ var $elm = $(e.currentTarget),
5384
+ id;
5385
+ e.preventDefault();
5386
+ e.stopPropagation();
5387
+ $elm.removeClass(clDropActive);
5388
+ if (e.currentTarget.id) {
5389
+ id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id);
5390
+ } else {
5391
+ id = self.cwd().hash;
5392
+ }
5393
+ e.originalEvent._target = id;
5394
+ self.exec('upload', {dropEvt: e.originalEvent, target: id}, void 0, id);
5395
+ }
5396
+ });
5397
+ })();
5398
+ }
5399
+
5400
+ // trigger event cssloaded if cddAutoLoad disabled
5401
+ if (self.cssloaded === null) {
5402
+ // check css loaded and remove hide
5403
+ (function() {
5404
+ var loaded = function() {
5405
+ if (node.data('cssautoloadHide')) {
5406
+ node.data('cssautoloadHide').remove();
5407
+ node.removeData('cssautoloadHide');
5408
+ }
5409
+ self.cssloaded = true;
5410
+ requestAnimationFrame(function() {
5411
+ self.trigger('cssloaded');
5412
+ });
5413
+ },
5414
+ cnt, fi;
5415
+ if (node.css('visibility') === 'hidden') {
5416
+ cnt = 1000; // timeout 10 secs
5417
+ fi = setInterval(function() {
5418
+ if (--cnt < 0 || node.css('visibility') !== 'hidden') {
5419
+ clearInterval(fi);
5420
+ loaded();
5421
+ }
5422
+ }, 10);
5423
+ } else {
5424
+ loaded();
5425
+ }
5426
+ })();
5427
+ } else {
5428
+ self.cssloaded = true;
5429
+ self.trigger('cssloaded');
5430
+ }
5431
+
5432
+ // calculate elFinder node z-index
5433
+ self.zIndexCalc();
5434
+
5435
+ // send initial request and start to pray >_<
5436
+ self.trigger('init')
5437
+ .request({
5438
+ data : {cmd : 'open', target : self.startDir(), init : 1, tree : 1},
5439
+ preventDone : true,
5440
+ notify : {type : 'open', cnt : 1, hideCnt : true},
5441
+ freeze : true
5442
+ })
5443
+ .fail(function() {
5444
+ self.trigger('fail').disable().lastDir('');
5445
+ listeners = {};
5446
+ shortcuts = {};
5447
+ $(document).add(node).off('.'+namespace);
5448
+ self.trigger = function() { };
5449
+ })
5450
+ .done(function(data) {
5451
+ var trashDisable = function(th) {
5452
+ var src = self.file(self.trashes[th]),
5453
+ d = self.options.debug,
5454
+ error;
5455
+
5456
+ if (src && src.volumeid) {
5457
+ delete self.volOptions[src.volumeid].trashHash;
5458
+ }
5459
+ self.trashes[th] = false;
5460
+ self.debug('backend-error', 'Trash hash "'+th+'" was not found or not writable.');
5461
+ },
5462
+ toChkTh = {};
5463
+
5464
+ // regist rawStringDecoder
5465
+ if (self.options.rawStringDecoder) {
5466
+ self.registRawStringDecoder(self.options.rawStringDecoder);
5467
+ }
5468
+
5469
+ // re-calculate elFinder node z-index
5470
+ self.zIndexCalc();
5471
+
5472
+ self.load().debug('api', self.api);
5473
+ // update ui's size after init
5474
+ node.trigger('resize');
5475
+ // initial open
5476
+ open(data);
5477
+ self.trigger('open', data, false);
5478
+ self.trigger('opendone');
5479
+
5480
+ if (inFrame && self.options.enableAlways) {
5481
+ $(window).trigger('focus');
5482
+ }
5483
+
5484
+ // check self.trashes
5485
+ $.each(self.trashes, function(th) {
5486
+ var dir = self.file(th),
5487
+ src;
5488
+ if (! dir) {
5489
+ toChkTh[th] = true;
5490
+ } else if (dir.mime !== 'directory' || ! dir.write) {
5491
+ trashDisable(th);
5492
+ }
5493
+ });
5494
+ if (Object.keys(toChkTh).length) {
5495
+ self.request({
5496
+ data : {cmd : 'info', targets : Object.keys(toChkTh)},
5497
+ preventDefault : true
5498
+ }).done(function(data) {
5499
+ if (data && data.files) {
5500
+ $.each(data.files, function(i, dir) {
5501
+ if (dir.mime === 'directory' && dir.write) {
5502
+ delete toChkTh[dir.hash];
5503
+ }
5504
+ });
5505
+ }
5506
+ }).always(function() {
5507
+ $.each(toChkTh, trashDisable);
5508
+ });
5509
+ }
5510
+ // to enable / disable
5511
+ self[self.options.enableAlways? 'enable' : 'disable']();
5512
+ });
5513
+
5514
+ // self.timeEnd('load');
5515
+ // End of bootUp()
5516
+ };
5517
+
5518
+ // call bootCallback function with elFinder instance, extraObject - { dfrdsBeforeBootup: dfrdsBeforeBootup }
5519
+ if (bootCallback && typeof bootCallback === 'function') {
5520
+ self.bootCallback = bootCallback;
5521
+ bootCallback.call(node.get(0), self, { dfrdsBeforeBootup: dfrdsBeforeBootup });
5522
+ }
5523
+
5524
+ // call dfrdsBeforeBootup functions then boot up elFinder
5525
+ $.when.apply(null, dfrdsBeforeBootup).done(function() {
5526
+ bootUp();
5527
+ }).fail(function(error) {
5528
+ self.error(error);
5529
+ });
5530
+ };
5531
+
5532
+ //register elFinder to global scope
5533
+ if (typeof toGlobal === 'undefined' || toGlobal) {
5534
+ window.elFinder = elFinder;
5535
+ }
5536
+
5537
+ /**
5538
+ * Prototype
5539
+ *
5540
+ * @type Object
5541
+ */
5542
+ elFinder.prototype = {
5543
+
5544
+ uniqueid : 0,
5545
+
5546
+ res : function(type, id) {
5547
+ return this.resources[type] && this.resources[type][id];
5548
+ },
5549
+
5550
+ /**
5551
+ * User os. Required to bind native shortcuts for open/rename
5552
+ *
5553
+ * @type String
5554
+ **/
5555
+ OS : navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other',
5556
+
5557
+ /**
5558
+ * User browser UA.
5559
+ * jQuery.browser: version deprecated: 1.3, removed: 1.9
5560
+ *
5561
+ * @type Object
5562
+ **/
5563
+ UA : (function(){
5564
+ var self = this,
5565
+ webkit = !document.unqueID && !window.opera && !window.sidebar && window.localStorage && 'WebkitAppearance' in document.documentElement.style,
5566
+ chrome = webkit && window.chrome,
5567
+ /*setRotated = function() {
5568
+ var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0;
5569
+ if (a === -90) {
5570
+ a = 270;
5571
+ }
5572
+ UA.Angle = a;
5573
+ UA.Rotated = a % 180 === 0? false : true;
5574
+ },*/
5575
+ UA = {
5576
+ // Browser IE <= IE 6
5577
+ ltIE6 : typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined",
5578
+ // Browser IE <= IE 7
5579
+ ltIE7 : typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined",
5580
+ // Browser IE <= IE 8
5581
+ ltIE8 : typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined",
5582
+ // Browser IE <= IE 9
5583
+ ltIE9 : document.uniqueID && document.documentMode <= 9,
5584
+ // Browser IE <= IE 10
5585
+ ltIE10 : document.uniqueID && document.documentMode <= 10,
5586
+ // Browser IE >= IE 11
5587
+ gtIE11 : document.uniqueID && document.documentMode >= 11,
5588
+ IE : document.uniqueID,
5589
+ Firefox : window.sidebar,
5590
+ Opera : window.opera,
5591
+ Webkit : webkit,
5592
+ Chrome : chrome,
5593
+ Edge : (chrome && window.msCredentials)? true : false,
5594
+ Safari : webkit && !window.chrome,
5595
+ Mobile : typeof window.orientation != "undefined",
5596
+ Touch : typeof window.ontouchstart != "undefined",
5597
+ iOS : navigator.platform.match(/^iP(?:[ao]d|hone)/),
5598
+ Fullscreen : (typeof (document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen) !== 'undefined'),
5599
+ Angle : 0,
5600
+ Rotated : false,
5601
+ CSS : (function() {
5602
+ var aStyle = document.createElement('a').style,
5603
+ pStyle = document.createElement('p').style,
5604
+ css;
5605
+ css = 'position:sticky;position:-webkit-sticky;';
5606
+ css += 'width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;';
5607
+ aStyle.cssText = css;
5608
+ return {
5609
+ positionSticky : aStyle.position.indexOf('sticky')!==-1,
5610
+ widthMaxContent : aStyle.width.indexOf('max-content')!==-1,
5611
+ flex : typeof pStyle.flex !== 'undefined'
5612
+ };
5613
+ })()
5614
+ };
5615
+ return UA;
5616
+ })(),
5617
+
5618
+ /**
5619
+ * Has RequireJS?
5620
+ *
5621
+ * @type Boolean
5622
+ */
5623
+ hasRequire : (typeof define === 'function' && define.amd),
5624
+
5625
+ /**
5626
+ * Current request command
5627
+ *
5628
+ * @type String
5629
+ */
5630
+ currentReqCmd : '',
5631
+
5632
+ /**
5633
+ * Current keyboard state
5634
+ *
5635
+ * @type Object
5636
+ */
5637
+ keyState : {},
5638
+
5639
+ /**
5640
+ * Internationalization object
5641
+ *
5642
+ * @type Object
5643
+ */
5644
+ i18 : {
5645
+ en : {
5646
+ translator : '',
5647
+ language : 'English',
5648
+ direction : 'ltr',
5649
+ dateFormat : 'd.m.Y H:i',
5650
+ fancyDateFormat : '$1 H:i',
5651
+ nonameDateFormat : 'ymd-His',
5652
+ messages : {}
5653
+ },
5654
+ months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
5655
+ monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'],
5656
+
5657
+ days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
5658
+ daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
5659
+ },
5660
+
5661
+ /**
5662
+ * File mimetype to kind mapping
5663
+ *
5664
+ * @type Object
5665
+ */
5666
+ kinds : {
5667
+ 'unknown' : 'Unknown',
5668
+ 'directory' : 'Folder',
5669
+ 'group' : 'Selects',
5670
+ 'symlink' : 'Alias',
5671
+ 'symlink-broken' : 'AliasBroken',
5672
+ 'application/x-empty' : 'TextPlain',
5673
+ 'application/postscript' : 'Postscript',
5674
+ 'application/vnd.ms-office' : 'MsOffice',
5675
+ 'application/msword' : 'MsWord',
5676
+ 'application/vnd.ms-word' : 'MsWord',
5677
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord',
5678
+ 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord',
5679
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord',
5680
+ 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord',
5681
+ 'application/vnd.ms-excel' : 'MsExcel',
5682
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel',
5683
+ 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel',
5684
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel',
5685
+ 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel',
5686
+ 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel',
5687
+ 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel',
5688
+ 'application/vnd.ms-powerpoint' : 'MsPP',
5689
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP',
5690
+ 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP',
5691
+ 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP',
5692
+ 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP',
5693
+ 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP',
5694
+ 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP',
5695
+ 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP',
5696
+ 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP',
5697
+ 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP',
5698
+ 'application/pdf' : 'PDF',
5699
+ 'application/xml' : 'XML',
5700
+ 'application/vnd.oasis.opendocument.text' : 'OO',
5701
+ 'application/vnd.oasis.opendocument.text-template' : 'OO',
5702
+ 'application/vnd.oasis.opendocument.text-web' : 'OO',
5703
+ 'application/vnd.oasis.opendocument.text-master' : 'OO',
5704
+ 'application/vnd.oasis.opendocument.graphics' : 'OO',
5705
+ 'application/vnd.oasis.opendocument.graphics-template' : 'OO',
5706
+ 'application/vnd.oasis.opendocument.presentation' : 'OO',
5707
+ 'application/vnd.oasis.opendocument.presentation-template' : 'OO',
5708
+ 'application/vnd.oasis.opendocument.spreadsheet' : 'OO',
5709
+ 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO',
5710
+ 'application/vnd.oasis.opendocument.chart' : 'OO',
5711
+ 'application/vnd.oasis.opendocument.formula' : 'OO',
5712
+ 'application/vnd.oasis.opendocument.database' : 'OO',
5713
+ 'application/vnd.oasis.opendocument.image' : 'OO',
5714
+ 'application/vnd.openofficeorg.extension' : 'OO',
5715
+ 'application/x-shockwave-flash' : 'AppFlash',
5716
+ 'application/flash-video' : 'Flash video',
5717
+ 'application/x-bittorrent' : 'Torrent',
5718
+ 'application/javascript' : 'JS',
5719
+ 'application/rtf' : 'RTF',
5720
+ 'application/rtfd' : 'RTF',
5721
+ 'application/x-font-ttf' : 'TTF',
5722
+ 'application/x-font-otf' : 'OTF',
5723
+ 'application/x-rpm' : 'RPM',
5724
+ 'application/x-web-config' : 'TextPlain',
5725
+ 'application/xhtml+xml' : 'HTML',
5726
+ 'application/docbook+xml' : 'DOCBOOK',
5727
+ 'application/x-awk' : 'AWK',
5728
+ 'application/x-gzip' : 'GZIP',
5729
+ 'application/x-bzip2' : 'BZIP',
5730
+ 'application/x-xz' : 'XZ',
5731
+ 'application/zip' : 'ZIP',
5732
+ 'application/x-zip' : 'ZIP',
5733
+ 'application/x-rar' : 'RAR',
5734
+ 'application/x-tar' : 'TAR',
5735
+ 'application/x-7z-compressed' : '7z',
5736
+ 'application/x-jar' : 'JAR',
5737
+ 'text/plain' : 'TextPlain',
5738
+ 'text/x-php' : 'PHP',
5739
+ 'text/html' : 'HTML',
5740
+ 'text/javascript' : 'JS',
5741
+ 'text/css' : 'CSS',
5742
+ 'text/rtf' : 'RTF',
5743
+ 'text/rtfd' : 'RTF',
5744
+ 'text/x-c' : 'C',
5745
+ 'text/x-csrc' : 'C',
5746
+ 'text/x-chdr' : 'CHeader',
5747
+ 'text/x-c++' : 'CPP',
5748
+ 'text/x-c++src' : 'CPP',
5749
+ 'text/x-c++hdr' : 'CPPHeader',
5750
+ 'text/x-shellscript' : 'Shell',
5751
+ 'application/x-csh' : 'Shell',
5752
+ 'text/x-python' : 'Python',
5753
+ 'text/x-java' : 'Java',
5754
+ 'text/x-java-source' : 'Java',
5755
+ 'text/x-ruby' : 'Ruby',
5756
+ 'text/x-perl' : 'Perl',
5757
+ 'text/x-sql' : 'SQL',
5758
+ 'text/xml' : 'XML',
5759
+ 'text/x-comma-separated-values' : 'CSV',
5760
+ 'text/x-markdown' : 'Markdown',
5761
+ 'image/x-ms-bmp' : 'BMP',
5762
+ 'image/jpeg' : 'JPEG',
5763
+ 'image/gif' : 'GIF',
5764
+ 'image/png' : 'PNG',
5765
+ 'image/tiff' : 'TIFF',
5766
+ 'image/x-targa' : 'TGA',
5767
+ 'image/vnd.adobe.photoshop' : 'PSD',
5768
+ 'image/xbm' : 'XBITMAP',
5769
+ 'image/pxm' : 'PXM',
5770
+ 'audio/mpeg' : 'AudioMPEG',
5771
+ 'audio/midi' : 'AudioMIDI',
5772
+ 'audio/ogg' : 'AudioOGG',
5773
+ 'audio/mp4' : 'AudioMPEG4',
5774
+ 'audio/x-m4a' : 'AudioMPEG4',
5775
+ 'audio/wav' : 'AudioWAV',
5776
+ 'audio/x-mp3-playlist' : 'AudioPlaylist',
5777
+ 'video/x-dv' : 'VideoDV',
5778
+ 'video/mp4' : 'VideoMPEG4',
5779
+ 'video/mpeg' : 'VideoMPEG',
5780
+ 'video/x-msvideo' : 'VideoAVI',
5781
+ 'video/quicktime' : 'VideoMOV',
5782
+ 'video/x-ms-wmv' : 'VideoWM',
5783
+ 'video/x-flv' : 'VideoFlash',
5784
+ 'video/x-matroska' : 'VideoMKV',
5785
+ 'video/ogg' : 'VideoOGG'
5786
+ },
5787
+
5788
+ /**
5789
+ * File mimetype to file extention mapping
5790
+ *
5791
+ * @type Object
5792
+ * @see elFinder.mimetypes.js
5793
+ */
5794
+ mimeTypes : {},
5795
+
5796
+ /**
5797
+ * Ajax request data validation rules
5798
+ *
5799
+ * @type Object
5800
+ */
5801
+ rules : {
5802
+ defaults : function(data) {
5803
+ if (!data
5804
+ || (data.added && !Array.isArray(data.added))
5805
+ || (data.removed && !Array.isArray(data.removed))
5806
+ || (data.changed && !Array.isArray(data.changed))) {
5807
+ return false;
5808
+ }
5809
+ return true;
5810
+ },
5811
+ open : function(data) { return data && data.cwd && data.files && $.isPlainObject(data.cwd) && Array.isArray(data.files); },
5812
+ tree : function(data) { return data && data.tree && Array.isArray(data.tree); },
5813
+ parents : function(data) { return data && data.tree && Array.isArray(data.tree); },
5814
+ tmb : function(data) { return data && data.images && ($.isPlainObject(data.images) || Array.isArray(data.images)); },
5815
+ upload : function(data) { return data && ($.isPlainObject(data.added) || Array.isArray(data.added));},
5816
+ search : function(data) { return data && data.files && Array.isArray(data.files); }
5817
+ },
5818
+
5819
+ /**
5820
+ * Commands costructors
5821
+ *
5822
+ * @type Object
5823
+ */
5824
+ commands : {},
5825
+
5826
+ /**
5827
+ * Commands to add the item (space delimited)
5828
+ *
5829
+ * @type String
5830
+ */
5831
+ cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload',
5832
+
5833
+ parseUploadData : function(text) {
5834
+ var self = this,
5835
+ data;
5836
+
5837
+ if (!$.trim(text)) {
5838
+ return {error : ['errResponse', 'errDataEmpty']};
5839
+ }
5840
+
5841
+ try {
5842
+ data = JSON.parse(text);
5843
+ } catch (e) {
5844
+ return {error : ['errResponse', 'errDataNotJSON']};
5845
+ }
5846
+
5847
+ data = self.normalize(data);
5848
+ if (!self.validResponse('upload', data)) {
5849
+ return {error : (response.norError || ['errResponse'])};
5850
+ }
5851
+ data.removed = $.merge((data.removed || []), $.map(data.added || [], function(f) { return self.file(f.hash)? f.hash : null; }));
5852
+ return data;
5853
+
5854
+ },
5855
+
5856
+ iframeCnt : 0,
5857
+
5858
+ uploads : {
5859
+ // xhr muiti uploading flag
5860
+ xhrUploading: false,
5861
+
5862
+ // Timer of request fail to sync
5863
+ failSyncTm: null,
5864
+
5865
+ // current chunkfail requesting chunk
5866
+ chunkfailReq: {},
5867
 
5868
  // check file/dir exists
5869
+ checkExists: function(files, target, fm, isDir) {
5870
  var dfrd = $.Deferred(),
5871
+ names, renames = [], hashes = {}, chkFiles = [],
5872
  cancel = function() {
5873
  var i = files.length;
5874
  while (--i > -1) {
5875
  files[i]._remove = true;
5876
  }
5877
+ },
5878
+ resolve = function() {
5879
+ dfrd.resolve(renames, hashes);
5880
+ },
5881
+ check = function() {
5882
+ var existed = [], exists = [], i, c,
5883
+ pathStr = target !== fm.cwd().hash? fm.path(target, true) + fm.option('separator', target) : '',
5884
+ confirm = function(ndx) {
5885
+ var last = ndx == exists.length-1,
5886
+ opts = {
5887
+ cssClass : 'elfinder-confirm-upload',
5888
+ title : fm.i18n('cmdupload'),
5889
+ text : ['errExists', pathStr + exists[ndx].name, 'confirmRepl'],
5890
+ all : !last,
5891
+ accept : {
5892
+ label : 'btnYes',
5893
+ callback : function(all) {
5894
+ !last && !all
5895
+ ? confirm(++ndx)
5896
+ : resolve();
5897
+ }
5898
+ },
5899
+ reject : {
5900
+ label : 'btnNo',
5901
+ callback : function(all) {
5902
+ var i;
5903
+
5904
+ if (all) {
5905
+ i = exists.length;
5906
+ while (ndx < i--) {
5907
+ files[exists[i].i]._remove = true;
5908
+ }
5909
+ } else {
5910
+ files[exists[ndx].i]._remove = true;
5911
+ }
5912
+
5913
+ !last && !all
5914
+ ? confirm(++ndx)
5915
+ : resolve();
5916
+ }
5917
+ },
5918
+ cancel : {
5919
+ label : 'btnCancel',
5920
+ callback : function() {
5921
+ cancel();
5922
+ resolve();
5923
+ }
5924
+ },
5925
+ buttons : [
5926
+ {
5927
+ label : 'btnBackup',
5928
+ cssClass : 'elfinder-confirm-btn-backup',
5929
+ callback : function(all) {
5930
+ var i;
5931
+ if (all) {
5932
+ i = exists.length;
5933
+ while (ndx < i--) {
5934
+ renames.push(exists[i].name);
5935
+ }
5936
+ } else {
5937
+ renames.push(exists[ndx].name);
5938
+ }
5939
+ !last && !all
5940
+ ? confirm(++ndx)
5941
+ : resolve();
5942
+ }
5943
+ }
5944
+ ]
5945
+ };
5946
+
5947
+ if (!isDir) {
5948
+ opts.buttons.push({
5949
+ label : 'btnRename' + (last? '' : 'All'),
5950
+ cssClass : 'elfinder-confirm-btn-rename',
5951
+ callback : function() {
5952
+ renames = null;
5953
+ resolve();
5954
+ }
5955
+ });
5956
+ }
5957
+ if (fm.iframeCnt > 0) {
5958
+ delete opts.reject;
5959
+ }
5960
+ fm.confirm(opts);
5961
+ };
5962
+
5963
+ if (! fm.file(target).read) {
5964
+ // for dropbox type
5965
+ resolve();
5966
+ return;
5967
+ }
5968
+
5969
+ names = $.map(files, function(file, i) { return file.name && (!fm.UA.iOS || file.name !== 'image.jpg')? {i: i, name: file.name} : null ;});
5970
+
5971
+ fm.request({
5972
+ data : {cmd : 'ls', target : target, intersect : $.map(names, function(item) { return item.name;})},
5973
+ notify : {type : 'preupload', cnt : 1, hideCnt : true},
5974
+ preventDefault : true
5975
+ })
5976
+ .done(function(data) {
5977
+ var existedArr, cwdItems;
5978
+ if (data) {
5979
+ if (data.error) {
5980
+ cancel();
5981
+ } else {
5982
+ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) {
5983
+ if (data.list) {
5984
+ if (Array.isArray(data.list)) {
5985
+ existed = data.list || [];
5986
+ } else {
5987
+ existedArr = [];
5988
+ existed = $.map(data.list, function(n) {
5989
+ if (typeof n === 'string') {
5990
+ return n;
5991
+ } else {
5992
+ // support to >=2.1.11 plugin Normalizer, Sanitizer
5993
+ existedArr = existedArr.concat(n);
5994
+ return false;
5995
+ }
5996
+ });
5997
+ if (existedArr.length) {
5998
+ existed = existed.concat(existedArr);
5999
+ }
6000
+ hashes = data.list;
6001
+ }
6002
+ exists = $.grep(names, function(name){
6003
+ return $.inArray(name.name, existed) !== -1 ? true : false ;
6004
+ });
6005
+ if (exists.length && existed.length && target == fm.cwd().hash) {
6006
+ cwdItems = $.map(fm.files(target), function(file) { return file.name; } );
6007
+ if ($.grep(existed, function(n) {
6008
+ return $.inArray(n, cwdItems) === -1? true : false;
6009
+ }).length){
6010
+ fm.sync();
6011
+ }
6012
+ }
6013
+ }
6014
+ }
6015
+ }
6016
+ }
6017
+ if (exists.length > 0) {
6018
+ confirm(0);
6019
+ } else {
6020
+ resolve();
6021
+ }
6022
+ })
6023
+ .fail(function(error) {
6024
+ cancel();
6025
+ resolve();
6026
+ error && fm.error(error);
6027
+ });
6028
+ };
6029
+ if (fm.api >= 2.1 && typeof files[0] == 'object') {
6030
+ check();
6031
+ } else {
6032
+ resolve();
6033
+ }
6034
+ return dfrd;
6035
+ },
6036
+
6037
+ // check droped contents
6038
+ checkFile : function(data, fm, target) {
6039
+ if (!!data.checked || data.type == 'files') {
6040
+ return data.files;
6041
+ } else if (data.type == 'data') {
6042
+ var dfrd = $.Deferred(),
6043
+ scanDfd = $.Deferred(),
6044
+ files = [],
6045
+ paths = [],
6046
+ dirctorys = [],
6047
+ processing = 0,
6048
+ items,
6049
+ mkdirs = [],
6050
+ cancel = false,
6051
+ toArray = function(list) {
6052
+ return Array.prototype.slice.call(list || [], 0);
6053
+ },
6054
+ doScan = function(items) {
6055
+ var entry, readEntries,
6056
+ excludes = fm.options.folderUploadExclude[fm.OS] || null,
6057
+ length = items.length,
6058
+ check = function() {
6059
+ if (--processing < 1 && scanDfd.state() === 'pending') {
6060
+ scanDfd.resolve();
6061
+ }
6062
+ },
6063
+ pushItem = function(file) {
6064
+ if (! excludes || ! file.name.match(excludes)) {
6065
+ paths.push(entry.fullPath || '');
6066
+ files.push(file);
6067
+ }
6068
+ check();
6069
+ },
6070
+ readEntries = function(dirReader) {
6071
+ var entries = [],
6072
+ read = function() {
6073
+ dirReader.readEntries(function(results) {
6074
+ if (cancel || !results.length) {
6075
+ for (var i = 0; i < entries.length; i++) {
6076
+ if (cancel) {
6077
+ scanDfd.reject();
6078
+ break;
6079
+ }
6080
+ doScan([entries[i]]);
6081
+ }
6082
+ check();
6083
+ } else {
6084
+ entries = entries.concat(toArray(results));
6085
+ read();
6086
+ }
6087
+ }, check);
6088
+ };
6089
+ read();
6090
+ };
6091
+
6092
+ processing++;
6093
+ for (var i = 0; i < length; i++) {
6094
+ if (cancel) {
6095
+ scanDfd.reject();
6096
+ break;
6097
+ }
6098
+ entry = items[i];
6099
+ if (entry) {
6100
+ if (entry.isFile) {
6101
+ processing++;
6102
+ entry.file(pushItem, check);
6103
+ } else if (entry.isDirectory) {
6104
+ if (fm.api >= 2.1) {
6105
+ processing++;
6106
+ mkdirs.push(entry.fullPath);
6107
+ readEntries(entry.createReader()); // Start reading dirs.
6108
+ }
6109
+ }
6110
+ }
6111
+ }
6112
+ check();
6113
+ return scanDfd;
6114
+ }, hasDirs;
6115
+
6116
+ items = $.map(data.files.items, function(item){
6117
+ return item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry();
6118
+ });
6119
+ $.each(items, function(i, item) {
6120
+ if (item.isDirectory) {
6121
+ hasDirs = true;
6122
+ return false;
6123
+ }
6124
+ });
6125
+ if (items.length > 0) {
6126
+ fm.uploads.checkExists(items, target, fm, hasDirs).done(function(renames, hashes){
6127
+ var dfds = [];
6128
+ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) {
6129
+ if (renames === null) {
6130
+ data.overwrite = 0;
6131
+ renames = [];
6132
+ }
6133
+ items = $.grep(items, function(item){
6134
+ var i, bak, hash, dfd, hi;
6135
+ if (item.isDirectory && renames.length) {
6136
+ i = $.inArray(item.name, renames);
6137
+ if (i !== -1) {
6138
+ renames.splice(i, 1);
6139
+ bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, '');
6140
+ $.each(hashes, function(h, name) {
6141
+ if (item.name == name) {
6142
+ hash = h;
6143
+ return false;
6144
+ }
6145
+ });
6146
+ if (! hash) {
6147
+ hash = fm.fileByName(item.name, target).hash;
6148
+ }
6149
+ fm.lockfiles({files : [hash]});
6150
+ dfd = fm.request({
6151
+ data : {cmd : 'rename', target : hash, name : bak},
6152
+ notify : {type : 'rename', cnt : 1}
6153
+ })
6154
+ .fail(function() {
6155
+ item._remove = true;
6156
+ fm.sync();
6157
+ })
6158
+ .always(function() {
6159
+ fm.unlockfiles({files : [hash]});
6160
+ });
6161
+ dfds.push(dfd);
6162
+ }
6163
+ }
6164
+ return !item._remove? true : false;
6165
+ });
6166
+ }
6167
+ $.when.apply($, dfds).done(function(){
6168
+ var notifyto, msg,
6169
+ id = +new Date();
6170
+
6171
+ if (items.length > 0) {
6172
+ msg = fm.escape(items[0].name);
6173
+ if (items.length > 1) {
6174
+ msg += ' ... ' + items.length + fm.i18n('items');
6175
+ }
6176
+ notifyto = setTimeout(function() {
6177
+ fm.notify({
6178
+ type : 'readdir',
6179
+ id : id,
6180
+ cnt : 1,
6181
+ hideCnt: true,
6182
+ msg : fm.i18n('ntfreaddir') + ' (' + msg + ')',
6183
+ cancel: function() {
6184
+ cancel = true;
6185
+ }
6186
+ });
6187
+ }, fm.options.notifyDelay);
6188
+ doScan(items).done(function() {
6189
+ notifyto && clearTimeout(notifyto);
6190
+ fm.notify({type : 'readdir', id: id, cnt : -1});
6191
+ if (cancel) {
6192
+ dfrd.reject();
6193
+ } else {
6194
+ dfrd.resolve([files, paths, renames, hashes, mkdirs]);
6195
+ }
6196
+ }).fail(function() {
6197
+ dfrd.reject();
6198
+ });
6199
+ } else {
6200
+ dfrd.reject();
6201
+ }
6202
+ });
6203
+ });
6204
+ return dfrd.promise();
6205
+ } else {
6206
+ return dfrd.reject();
6207
+ }
6208
+ } else {
6209
+ var ret = [];
6210
+ var check = [];
6211
+ var str = data.files[0];
6212
+ if (data.type == 'html') {
6213
+ var tmp = $("<html/>").append($.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))),
6214
+ atag;
6215
+ $('img[_elfsrc]', tmp).each(function(){
6216
+ var url, purl,
6217
+ self = $(this),
6218
+ pa = self.closest('a');
6219
+ if (pa && pa.attr('href') && pa.attr('href').match(/\.(?:jpe?g|gif|bmp|png)/i)) {
6220
+ purl = pa.attr('href');
6221
+ }
6222
+ url = self.attr('_elfsrc');
6223
+ if (url) {
6224
+ if (purl) {
6225
+ $.inArray(purl, ret) == -1 && ret.push(purl);
6226
+ $.inArray(url, check) == -1 && check.push(url);
6227
+ } else {
6228
+ $.inArray(url, ret) == -1 && ret.push(url);
6229
+ }
6230
+ }
6231
+ // Probably it's clipboard data
6232
+ if (ret.length === 1 && ret[0].match(/^data:image\/png/)) {
6233
+ data.clipdata = true;
6234
+ }
6235
+ });
6236
+ atag = $('a[href]', tmp);
6237
+ atag.each(function(){
6238
+ var text, loc,
6239
+ parseUrl = function(url) {
6240
+ var a = document.createElement('a');
6241
+ a.href = url;
6242
+ return a;
6243
+ };
6244
+ if (text = $(this).text()) {
6245
+ loc = parseUrl($(this).attr('href'));
6246
+ if (loc.href && loc.href.match(/^(?:ht|f)tp/i) && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i) || $.trim(text).match(/\.[a-z0-9-]{1,10}$/i))) {
6247
+ if ($.inArray(loc.href, ret) == -1 && $.inArray(loc.href, check) == -1) ret.push(loc.href);
6248
+ }
6249
+ }
6250
+ });
6251
+ } else {
6252
+ var regex, m, url;
6253
+ regex = /((?:ht|f)tps?:\/\/[-_.!~*\'()a-z0-9;/?:\@&=+\$,%#\*\[\]]+)/ig;
6254
+ while (m = regex.exec(str)) {
6255
+ url = m[1].replace(/&amp;/g, '&');
6256
+ if ($.inArray(url, ret) == -1) ret.push(url);
6257
+ }
6258
+ }
6259
+ return ret;
6260
+ }
6261
+ },
6262
+
6263
+ // upload transport using XMLHttpRequest
6264
+ xhr : function(data, fm) {
6265
+ var self = fm ? fm : this,
6266
+ node = self.getUI(),
6267
+ xhr = new XMLHttpRequest(),
6268
+ notifyto = null, notifyto2 = null,
6269
+ dataChecked = data.checked,
6270
+ isDataType = (data.isDataType || data.type == 'data'),
6271
+ target = (data.target || self.cwd().hash),
6272
+ dropEvt = (data.dropEvt || null),
6273
+ extraData = data.extraData || null,
6274
+ chunkEnable = (self.option('uploadMaxConn', target) != -1),
6275
+ multiMax = Math.min(5, Math.max(1, self.option('uploadMaxConn', target))),
6276
+ retryWait = 10000, // 10 sec
6277
+ retryMax = 30, // 10 sec * 30 = 300 secs (Max 5 mins)
6278
+ retry = 0,
6279
+ getFile = function(files) {
6280
+ var dfd = $.Deferred(),
6281
+ file;
6282
+ if (files.promise) {
6283
+ files.always(function(f) {
6284
+ dfd.resolve(Array.isArray(f) && f.length? (isDataType? f[0][0] : f[0]) : {});
6285
+ });
6286
+ } else {
6287
+ dfd.resolve(files.length? (isDataType? files[0][0] : files[0]) : {});
6288
+ }
6289
+ return dfd;
6290
+ },
6291
+ dfrd = $.Deferred()
6292
+ .fail(function(err) {
6293
+ var error = self.parseError(err),
6294
+ userAbort;
6295
+ if (error === 'userabort') {
6296
+ userAbort = true;
6297
+ error = void 0;
6298
+ }
6299
+ if (files && (self.uploads.xhrUploading || userAbort)) {
6300
+ // send request om fail
6301
+ getFile(files).done(function(file) {
6302
+ if (!userAbort) {
6303
+ triggerError(error, file);
6304
+ }
6305
+ if (! file._cid) {
6306
+ // send sync request
6307
+ self.uploads.failSyncTm && clearTimeout(self.uploads.failSyncTm);
6308
+ self.uploads.failSyncTm = setTimeout(function() {
6309
+ self.sync(target);
6310
+ }, 1000);
6311
+ } else if (! self.uploads.chunkfailReq[file._cid]) {
6312
+ // send chunkfail request
6313
+ self.uploads.chunkfailReq[file._cid] = true;
6314
+ setTimeout(function() {
6315
+ fm.request({
6316
+ data : {
6317
+ cmd: 'upload',
6318
+ target: target,
6319
+ chunk: file._chunk,
6320
+ cid: file._cid,
6321
+ upload: ['chunkfail'],
6322
+ mimes: 'chunkfail'
6323
+ },
6324
+ options : {
6325
+ type: 'post',
6326
+ url: self.uploadURL
6327
+ },
6328
+ preventDefault: true
6329
+ }).always(function() {
6330
+ delete self.uploads.chunkfailReq[file._chunk];
6331
+ });
6332
+ }, 1000);
6333
+ }
6334
+ });
6335
+ } else {
6336
+ triggerError(error);
6337
+ }
6338
+ !userAbort && self.sync();
6339
+ self.uploads.xhrUploading = false;
6340
+ files = null;
6341
+ })
6342
+ .done(function(data) {
6343
+ self.uploads.xhrUploading = false;
6344
+ files = null;
6345
+ if (data) {
6346
+ self.currentReqCmd = 'upload';
6347
+ data.warning && triggerError(data.warning);
6348
+ self.updateCache(data);
6349
+ data.removed && data.removed.length && self.remove(data);
6350
+ data.added && data.added.length && self.add(data);
6351
+ data.changed && data.changed.length && self.change(data);
6352
+ self.trigger('upload', data, false);
6353
+ self.trigger('uploaddone');
6354
+ if (data.toasts && Array.isArray(data.toasts)) {
6355
+ $.each(data.toasts, function() {
6356
+ this.msg && self.toast(this);
6357
+ });
6358
+ }
6359
+ data.sync && self.sync();
6360
+ data.debug && fm.debug('backend-debug', data);
6361
+ }
6362
+ })
6363
+ .always(function() {
6364
+ self.abortXHR(xhr);
6365
+ // unregist fnAbort function
6366
+ node.off('uploadabort', fnAbort);
6367
+ $(window).off('unload', fnAbort);
6368
+ notifyto && clearTimeout(notifyto);
6369
+ notifyto2 && clearTimeout(notifyto2);
6370
+ dataChecked && !data.multiupload && checkNotify() && self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0});
6371
+ chunkMerge && notifyElm.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1});
6372
+ }),
6373
+ formData = new FormData(),
6374
+ files = data.input ? data.input.files : self.uploads.checkFile(data, self, target),
6375
+ cnt = data.checked? (isDataType? files[0].length : files.length) : files.length,
6376
+ loaded = 0,
6377
+ prev = 0,
6378
+ filesize = 0,
6379
+ notify = false,
6380
+ notifyElm = self.ui.notify,
6381
+ cancelBtn = true,
6382
+ abort = false,
6383
+ checkNotify = function() {
6384
+ if (!notify && (ntfUpload = notifyElm.children('.elfinder-notify-upload')).length) {
6385
+ notify = true;
6386
+ }
6387
+ return notify;
6388
+ },
6389
+ fnAbort = function(e, error) {
6390
+ abort = true;
6391
+ self.abortXHR(xhr, { quiet: true, abort: true });
6392
+ dfrd.reject(error);
6393
+ if (checkNotify()) {
6394
+ self.notify({type : 'upload', cnt : ntfUpload.data('cnt') * -1, progress : 0, size : 0});
6395
+ }
6396
+ },
6397
+ cancelToggle = function(show) {
6398
+ ntfUpload.children('.elfinder-notify-cancel')[show? 'show':'hide']();
6399
+ },
6400
+ startNotify = function(size) {
6401
+ if (!size) size = filesize;
6402
+ return setTimeout(function() {
6403
+ notify = true;
6404
+ self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size,
6405
+ cancel: function() {
6406
+ node.trigger('uploadabort', 'userabort');
6407
+ }
6408
+ });
6409
+ ntfUpload = notifyElm.children('.elfinder-notify-upload');
6410
+ prev = loaded;
6411
+ if (data.multiupload) {
6412
+ cancelBtn && cancelToggle(true);
6413
+ } else {
6414
+ cancelToggle(cancelBtn && loaded < size);
6415
+ }
6416
+ }, self.options.notifyDelay);
6417
+ },
6418
+ doRetry = function() {
6419
+ if (retry++ <= retryMax) {
6420
+ if (checkNotify() && prev) {
6421
+ self.notify({type : 'upload', cnt : 0, progress : 0, size : prev});
6422
+ }
6423
+ self.abortXHR(xhr, { quiet: true });
6424
+ prev = loaded = 0;
6425
+ setTimeout(function() {
6426
+ var reqId;
6427
+ if (! abort) {
6428
+ xhr.open('POST', self.uploadURL, true);
6429
+ if (self.api >= 2.1029) {
6430
+ reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16);
6431
+ (typeof formData['delete'] === 'function') && formData['delete']('reqid');
6432
+ formData.append('reqid', reqId);
6433
+ xhr._requestId = reqId;
6434
+ }
6435
+ xhr.send(formData);
6436
+ }
6437
+ }, retryWait);
6438
+ } else {
6439
+ node.trigger('uploadabort', ['errAbort', 'errTimeout']);
6440
+ }
6441
+ },
6442
+ progress = function() {
6443
+ var node;
6444
+ if (notify) {
6445
+ dfrd.notifyWith(ntfUpload, [{
6446
+ cnt: ntfUpload.data('cnt'),
6447
+ progress: ntfUpload.data('progress'),
6448
+ total: ntfUpload.data('total')
6449
+ }]);
6450
+ }
6451
+ },
6452
+ triggerError = function(err, file, unite) {
6453
+ err && self.trigger('xhruploadfail', { error: err, file: file });
6454
+ if (unite) {
6455
+ if (err) {
6456
+ if (errCnt < self.options.maxErrorDialogs) {
6457
+ if (Array.isArray(err)) {
6458
+ errors = errors.concat(err);
6459
+ } else {
6460
+ errors.push(err);
6461
+ }
6462
+ }
6463
+ errCnt++;
6464
+ }
6465
+ } else {
6466
+ if (err) {
6467
+ self.error(err);
6468
+ } else {
6469
+ if (errors.length) {
6470
+ if (errCnt >= self.options.maxErrorDialogs) {
6471
+ errors = errors.concat('moreErrors', errCnt - self.options.maxErrorDialogs);
6472
+ }
6473
+ self.error(errors);
6474
+ }
6475
+ errors = [];
6476
+ errCnt = 0;
6477
+ }
6478
+ }
6479
+ },
6480
+ errors = [],
6481
+ errCnt = 0,
6482
+ renames = (data.renames || null),
6483
+ hashes = (data.hashes || null),
6484
+ chunkMerge = false,
6485
+ ntfUpload = $();
6486
+
6487
+ // regist fnAbort function
6488
+ node.one('uploadabort', fnAbort);
6489
+ $(window).one('unload.' + fm.namespace, fnAbort);
6490
+
6491
+ !chunkMerge && (prev = loaded);
6492
+
6493
+ if (!isDataType && !cnt) {
6494
+ return dfrd.reject(['errUploadNoFiles']);
6495
+ }
6496
+
6497
+ xhr.addEventListener('error', function() {
6498
+ if (xhr.status == 0) {
6499
+ if (abort) {
6500
+ dfrd.reject();
6501
+ } else {
6502
+ // ff bug while send zero sized file
6503
+ // for safari - send directory
6504
+ if (!isDataType && data.files && $.grep(data.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) {
6505
+ dfrd.reject(['errAbort', 'errFolderUpload']);
6506
+ } else if (data.input && $.grep(data.input.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) {
6507
+ dfrd.reject(['errUploadNoFiles']);
6508
+ } else {
6509
+ doRetry();
6510
+ }
6511
+ }
6512
+ } else {
6513
+ node.trigger('uploadabort', 'errConnect');
6514
+ }
6515
+ }, false);
6516
+
6517
+ xhr.addEventListener('load', function(e) {
6518
+ var status = xhr.status, res, curr = 0, error = '', errData, errObj;
6519
+
6520
+ if (status >= 400) {
6521
+ if (status > 500) {
6522
+ error = 'errResponse';
6523
+ } else {
6524
+ error = ['errResponse', 'errServerError'];
6525
+ }
6526
+ } else {
6527
+ if (!xhr.responseText) {
6528
+ error = ['errResponse', 'errDataEmpty'];
6529
+ }
6530
+ }
6531
+
6532
+ if (error) {
6533
+ node.trigger('uploadabort');
6534
+ getFile(files).done(function(file) {
6535
+ return dfrd.reject(file._cid? null : error);
6536
+ });
6537
+ }
6538
+
6539
+ loaded = filesize;
6540
+
6541
+ if (checkNotify() && (curr = loaded - prev)) {
6542
+ self.notify({type : 'upload', cnt : 0, progress : curr, size : 0});
6543
+ progress();
6544
+ }
6545
+
6546
+ res = self.parseUploadData(xhr.responseText);
6547
+
6548
+ // chunked upload commit
6549
+ if (res._chunkmerged) {
6550
+ formData = new FormData();
6551
+ var _file = [{_chunkmerged: res._chunkmerged, _name: res._name, _mtime: res._mtime}];
6552
+ chunkMerge = true;
6553
+ node.off('uploadabort', fnAbort);
6554
+ notifyto2 = setTimeout(function() {
6555
+ self.notify({type : 'chunkmerge', cnt : 1});
6556
+ }, self.options.notifyDelay);
6557
+ isDataType? send(_file, files[1]) : send(_file);
6558
+ return;
6559
+ }
6560
+
6561
+ res._multiupload = data.multiupload? true : false;
6562
+ if (res.error) {
6563
+ errData = {
6564
+ cmd: 'upload',
6565
+ err: res,
6566
+ xhr: xhr,
6567
+ rc: xhr.status
6568
+ };
6569
+ self.trigger('uploadfail', res);
6570
+ // trigger "requestError" event
6571
+ self.trigger('requestError', errData);
6572
+ if (errData._event && errData._event.isDefaultPrevented()) {
6573
+ res.error = '';
6574
+ }
6575
+ if (res._chunkfailure || res._multiupload) {
6576
+ abort = true;
6577
+ self.uploads.xhrUploading = false;
6578
+ notifyto && clearTimeout(notifyto);
6579
+ if (ntfUpload.length) {
6580
+ self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0});
6581
+ dfrd.reject(res);
6582
+ } else {
6583
+ // for multi connection
6584
+ dfrd.reject();
6585
+ }
6586
+ } else {
6587
+ dfrd.reject(res);
6588
+ }
6589
+ } else {
6590
+ dfrd.resolve(res);
6591
+ }
6592
+ }, false);
6593
+
6594
+ xhr.upload.addEventListener('loadstart', function(e) {
6595
+ if (!chunkMerge && e.lengthComputable) {
6596
+ loaded = e.loaded;
6597
+ retry && (loaded = 0);
6598
+ filesize = e.total;
6599
+ if (!loaded) {
6600
+ loaded = parseInt(filesize * 0.05);
6601
+ }
6602
+ if (checkNotify()) {
6603
+ self.notify({type : 'upload', cnt : 0, progress : loaded - prev, size : data.multiupload? 0 : filesize});
6604
+ prev = loaded;
6605
+ progress();
6606
+ }
6607
+ }
6608
+ }, false);
6609
+
6610
+ xhr.upload.addEventListener('progress', function(e) {
6611
+ var curr;
6612
+
6613
+ if (e.lengthComputable && !chunkMerge && xhr.readyState < 2) {
6614
+
6615
+ loaded = e.loaded;
6616
+
6617
+ // to avoid strange bug in safari (not in chrome) with drag&drop.
6618
+ // bug: macos finder opened in any folder,
6619
+ // reset safari cache (option+command+e), reload elfinder page,
6620
+ // drop file from finder
6621
+ // on first attempt request starts (progress callback called ones) but never ends.
6622
+ // any next drop - successfull.
6623
+ if (!data.checked && loaded > 0 && !notifyto) {
6624
+ notifyto = startNotify(xhr._totalSize - loaded);
6625
+ }
6626
 
6627
+ if (!filesize) {
6628
+ filesize = e.total;
6629
+ if (!loaded) {
6630
+ loaded = parseInt(filesize * 0.05);
6631
+ }
6632
+ }
6633
+
6634
+ curr = loaded - prev;
6635
+ if (checkNotify() && (curr/e.total) >= 0.05) {
6636
+ self.notify({type : 'upload', cnt : 0, progress : curr, size : 0});
6637
+ prev = loaded;
6638
+ progress();
6639
+ }
6640
+
6641
+ if (! data.multiupload && loaded >= filesize) {
6642
+ cancelBtn = false;
6643
+ cancelToggle(false);
6644
+ }
6645
+ }
6646
+ }, false);
6647
+
6648
+ var send = function(files, paths){
6649
+ var size = 0,
6650
+ fcnt = 1,
6651
+ sfiles = [],
6652
+ c = 0,
6653
+ total = cnt,
6654
+ maxFileSize,
6655
+ totalSize = 0,
6656
+ chunked = [],
6657
+ chunkID = new Date().getTime().toString().substr(-9), // for take care of the 32bit backend system
6658
+ BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize
6659
+ blobSlice = chunkEnable? false : '',
6660
+ blobSize, blobMtime, blobName, i, start, end, chunks, blob, chunk, added, done, last, failChunk,
6661
+ multi = function(files, num){
6662
+ var sfiles = [], cid, sfilesLen = 0, cancelChk;
6663
+ if (!abort) {
6664
+ while(files.length && sfiles.length < num) {
6665
+ sfiles.push(files.shift());
6666
+ }
6667
+ sfilesLen = sfiles.length;
6668
+ if (sfilesLen) {
6669
+ cancelChk = sfilesLen;
6670
+ for (var i=0; i < sfilesLen; i++) {
6671
+ if (abort) {
6672
+ break;
6673
  }
6674
+ cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null);
6675
+ if (!!failChunk[cid]) {
6676
+ last--;
6677
+ continue;
6678
+ }
6679
+ fm.exec('upload', {
6680
+ type: data.type,
6681
+ isDataType: isDataType,
6682
+ files: sfiles[i],
6683
+ checked: true,
6684
+ target: target,
6685
+ dropEvt: dropEvt,
6686
+ renames: renames,
6687
+ hashes: hashes,
6688
+ multiupload: true,
6689
+ overwrite: data.overwrite === 0? 0 : void 0,
6690
+ clipdata: data.clipdata
6691
+ }, void 0, target)
6692
+ .fail(function(error) {
6693
+ if (error && error === 'No such command') {
6694
+ abort = true;
6695
+ fm.error(['errUpload', 'errPerm']);
6696
+ }
6697
+ if (cid) {
6698
+ failChunk[cid] = true;
6699
+ }
6700
+ })
6701
+ .always(function(e) {
6702
+ if (e && e.added) added = $.merge(added, e.added);
6703
+ if (last <= ++done) {
6704
+ fm.trigger('multiupload', {added: added});
6705
+ notifyto && clearTimeout(notifyto);
6706
+ if (checkNotify()) {
6707
+ self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0});
6708
  }
6709
+ }
6710
+ if (files.length) {
6711
+ multi(files, 1); // Next one
6712
  } else {
6713
+ if (--cancelChk <= 1) {
6714
+ cancelBtn = false;
6715
+ cancelToggle(false);
6716
+ }
6717
+ }
6718
+ });
6719
+ }
6720
+ }
6721
+ }
6722
+ if (sfiles.length < 1 || abort) {
6723
+ if (abort) {
6724
+ notifyto && clearTimeout(notifyto);
6725
+ if (cid) {
6726
+ failChunk[cid] = true;
6727
+ }
6728
+ dfrd.reject();
6729
+ } else {
6730
+ dfrd.resolve();
6731
+ self.uploads.xhrUploading = false;
6732
+ }
6733
+ }
6734
+ },
6735
+ check = function(){
6736
+ if (!self.uploads.xhrUploading) {
6737
+ self.uploads.xhrUploading = true;
6738
+ multi(sfiles, multiMax); // Max connection: 3
6739
+ } else {
6740
+ setTimeout(check, 100);
6741
+ }
6742
+ },
6743
+ reqId, err;
6744
+
6745
+ if (! dataChecked && (isDataType || data.type == 'files')) {
6746
+ if (! (maxFileSize = fm.option('uploadMaxSize', target))) {
6747
+ maxFileSize = 0;
6748
+ }
6749
+ for (i=0; i < files.length; i++) {
6750
+ try {
6751
+ blob = files[i];
6752
+ blobSize = blob.size;
6753
+ if (blobSlice === false) {
6754
+ blobSlice = '';
6755
+ if (self.api >= 2.1) {
6756
+ if ('slice' in blob) {
6757
+ blobSlice = 'slice';
6758
+ } else if ('mozSlice' in blob) {
6759
+ blobSlice = 'mozSlice';
6760
+ } else if ('webkitSlice' in blob) {
6761
+ blobSlice = 'webkitSlice';
6762
  }
 
 
 
 
6763
  }
6764
+ }
6765
+ } catch(e) {
6766
+ cnt--;
6767
+ total--;
6768
+ continue;
6769
+ }
6770
+
6771
+ // file size check
6772
+ if ((maxFileSize && blobSize > maxFileSize) || (!blobSlice && fm.uplMaxSize && blobSize > fm.uplMaxSize)) {
6773
+ triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true);
6774
+ cnt--;
6775
+ total--;
6776
+ continue;
6777
+ }
6778
+
6779
+ // file mime check
6780
+ if (blob.type && ! self.uploadMimeCheck(blob.type, target)) {
6781
+ triggerError(['errUploadFile', blob.name, 'errUploadMime', '(' + blob.type + ')'], blob, true);
6782
+ cnt--;
6783
+ total--;
6784
+ continue;
6785
+ }
6786
+
6787
+ if (blobSlice && blobSize > BYTES_PER_CHUNK) {
6788
+ start = 0;
6789
+ end = BYTES_PER_CHUNK;
6790
+ chunks = -1;
6791
+ total = Math.floor((blobSize - 1) / BYTES_PER_CHUNK);
6792
+ blobMtime = blob.lastModified? Math.round(blob.lastModified/1000) : 0;
6793
+ blobName = data.clipdata? fm.date(fm.nonameDateFormat) + '.png' : blob.name;
6794
+
6795
+ totalSize += blobSize;
6796
+ chunked[chunkID] = 0;
6797
+ while(start < blobSize) {
6798
+ chunk = blob[blobSlice](start, end);
6799
+ chunk._chunk = blobName + '.' + (++chunks) + '_' + total + '.part';
6800
+ chunk._cid = chunkID;
6801
+ chunk._range = start + ',' + chunk.size + ',' + blobSize;
6802
+ chunk._mtime = blobMtime;
6803
+ chunked[chunkID]++;
6804
+
6805
+ if (size) {
6806
+ c++;
6807
  }
6808
+ if (typeof sfiles[c] == 'undefined') {
6809
+ sfiles[c] = [];
6810
+ if (isDataType) {
6811
+ sfiles[c][0] = [];
6812
+ sfiles[c][1] = [];
 
 
 
 
 
 
 
 
 
 
 
 
6813
  }
6814
  }
6815
+ size = BYTES_PER_CHUNK;
6816
+ fcnt = 1;
6817
+ if (isDataType) {
6818
+ sfiles[c][0].push(chunk);
6819
+ sfiles[c][1].push(paths[i]);
6820
+ } else {
6821
+ sfiles[c].push(chunk);
6822
+ }
6823
+
6824
+ start = end;
6825
+ end = start + BYTES_PER_CHUNK;
6826
+ }
6827
+ if (chunk == null) {
6828
+ triggerError(['errUploadFile', blob.name, 'errUploadFileSize'], blob, true);
6829
+ cnt--;
6830
+ total--;
6831
+ } else {
6832
+ total += chunks;
6833
+ size = 0;
6834
+ fcnt = 1;
6835
+ c++;
6836
+ }
6837
+ continue;
6838
  }
6839
+ if ((fm.uplMaxSize && size + blobSize > fm.uplMaxSize) || fcnt > fm.uplMaxFile) {
6840
+ size = 0;
6841
+ fcnt = 1;
6842
+ c++;
6843
+ }
6844
+ if (typeof sfiles[c] == 'undefined') {
6845
+ sfiles[c] = [];
6846
+ if (isDataType) {
6847
+ sfiles[c][0] = [];
6848
+ sfiles[c][1] = [];
6849
+ }
6850
+ }
6851
+ if (isDataType) {
6852
+ sfiles[c][0].push(blob);
6853
+ sfiles[c][1].push(paths[i]);
6854
+ } else {
6855
+ sfiles[c].push(blob);
6856
+ }
6857
+ size += blobSize;
6858
+ totalSize += blobSize;
6859
+ fcnt++;
6860
+ }
6861
 
6862
+ if (errors.length) {
6863
+ triggerError();
6864
+ }
6865
+
6866
+ if (sfiles.length == 0) {
6867
+ // no data
6868
+ data.checked = true;
6869
+ return false;
6870
  }
6871
 
6872
+ if (sfiles.length > 1) {
6873
+ // multi upload
6874
+ notifyto = startNotify(totalSize);
6875
+ added = [];
6876
+ done = 0;
6877
+ last = sfiles.length;
6878
+ failChunk = [];
6879
+ check();
6880
+ return true;
6881
+ }
6882
 
6883
+ // single upload
6884
+ if (isDataType) {
6885
+ files = sfiles[0][0];
6886
+ paths = sfiles[0][1];
6887
+ } else {
6888
+ files = sfiles[0];
6889
+ }
6890
+ }
6891
+
6892
+ if (!dataChecked) {
6893
+ if (!fm.UA.Safari || !data.files) {
6894
+ notifyto = startNotify(totalSize);
6895
+ } else {
6896
+ xhr._totalSize = totalSize;
6897
+ }
6898
+ }
6899
+
6900
+ dataChecked = true;
6901
+
6902
+ if (! files.length) {
6903
+ dfrd.reject(['errUploadNoFiles']);
6904
+ }
6905
+
6906
+ xhr.open('POST', self.uploadURL, true);
6907
+
6908
+ // set request headers
6909
+ if (fm.customHeaders) {
6910
+ $.each(fm.customHeaders, function(key) {
6911
+ xhr.setRequestHeader(key, this);
6912
+ });
6913
+ }
6914
+
6915
+ // set xhrFields
6916
+ if (fm.xhrFields) {
6917
+ $.each(fm.xhrFields, function(key) {
6918
+ if (key in xhr) {
6919
+ xhr[key] = this;
6920
+ }
6921
+ });
6922
+ }
6923
+
6924
+ if (self.api >= 2.1029) {
6925
+ // request ID
6926
+ reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16);
6927
+ formData.append('reqid', reqId);
6928
+ xhr._requestId = reqId;
6929
+ }
6930
+ formData.append('cmd', 'upload');
6931
+ formData.append(self.newAPI ? 'target' : 'current', target);
6932
+ if (renames && renames.length) {
6933
+ $.each(renames, function(i, v) {
6934
+ formData.append('renames[]', v);
6935
+ });
6936
+ formData.append('suffix', fm.options.backupSuffix);
6937
+ }
6938
+ if (hashes) {
6939
+ $.each(hashes, function(i, v) {
6940
+ formData.append('hashes['+ i +']', v);
6941
+ });
6942
+ }
6943
+ $.each(self.customData, function(key, val) {
6944
+ formData.append(key, val);
6945
+ });
6946
+ $.each(self.options.onlyMimes, function(i, mime) {
6947
+ formData.append('mimes[]', mime);
6948
+ });
6949
+
6950
+ $.each(files, function(i, file) {
6951
+ var name;
6952
+ if (file._chunkmerged) {
6953
+ formData.append('chunk', file._chunkmerged);
6954
+ formData.append('upload[]', file._name);
6955
+ formData.append('mtime[]', file._mtime);
6956
+ data.clipdata && formData.append('overwrite', 0);
6957
+ } else {
6958
+ if (file._chunkfail) {
6959
+ formData.append('upload[]', 'chunkfail');
6960
+ formData.append('mimes', 'chunkfail');
6961
+ } else {
6962
+ if (data.clipdata) {
6963
+ if (!file._chunk) {
6964
+ data.overwrite = 0;
6965
+ name = fm.date(fm.nonameDateFormat) + '.png';
6966
+ }
6967
  } else {
6968
+ if (file.name) {
6969
+ name = file.name;
6970
+ if (fm.UA.iOS) {
6971
+ if (name.match(/^image\.jpe?g$/i)) {
6972
+ data.overwrite = 0;
6973
+ name = fm.date(fm.nonameDateFormat) + '.jpg';
6974
+ } else if (name.match(/^capturedvideo\.mov$/i)) {
6975
+ data.overwrite = 0;
6976
+ name = fm.date(fm.nonameDateFormat) + '.mov';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6977
  }
6978
  }
6979
  }
6980
  }
6981
+ name? formData.append('upload[]', file, name) : formData.append('upload[]', file);
6982
  }
6983
+ if (file._chunk) {
6984
+ formData.append('chunk', file._chunk);
6985
+ formData.append('cid' , file._cid);
6986
+ formData.append('range', file._range);
6987
+ formData.append('mtime[]', file._mtime);
6988
  } else {
6989
+ formData.append('mtime[]', file.lastModified? Math.round(file.lastModified/1000) : 0);
6990
  }
6991
+ }
6992
+ });
6993
+
6994
+ if (isDataType) {
6995
+ $.each(paths, function(i, path) {
6996
+ formData.append('upload_path[]', path);
6997
  });
6998
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6999
 
7000
+ if (data.overwrite === 0) {
7001
+ formData.append('overwrite', 0);
7002
+ }
 
 
7003
 
7004
+ // send int value that which meta key was pressed when dropped as `dropWith`
7005
+ if (dropEvt) {
7006
+ formData.append('dropWith', parseInt(
7007
+ (dropEvt.altKey ? '1' : '0')+
7008
+ (dropEvt.ctrlKey ? '1' : '0')+
7009
+ (dropEvt.metaKey ? '1' : '0')+
7010
+ (dropEvt.shiftKey? '1' : '0'), 2));
7011
+ }
7012
+
7013
+ // set extraData on current request
7014
+ if (extraData) {
7015
+ $.each(extraData, function(key, val) {
7016
+ formData.append(key, val);
7017
+ });
7018
+ }
7019
+
7020
+ xhr.send(formData);
7021
+
7022
+ return true;
7023
+ };
7024
+
7025
+ if (! isDataType) {
7026
+ if (files.length > 0) {
7027
+ if (! data.clipdata && renames == null) {
7028
+ var mkdirs = [],
7029
+ paths = [],
7030
+ excludes = fm.options.folderUploadExclude[fm.OS] || null;
7031
+ $.each(files, function(i, file) {
7032
+ var relPath = file.webkitRelativePath || file.relativePath || '',
7033
+ idx, rootDir;
7034
+ if (! relPath) {
7035
+ return false;
7036
+ }
7037
+ if (excludes && file.name.match(excludes)) {
7038
+ file._remove = true;
7039
+ relPath = void(0);
7040
+ } else {
7041
+ // add '/' as prefix to make same to folder uploading with DnD, see #2607
7042
+ relPath = '/' + relPath.replace(/\/[^\/]*$/, '').replace(/^\//, '');
7043
+ if (relPath && $.inArray(relPath, mkdirs) === -1) {
7044
+ mkdirs.push(relPath);
7045
+ // checking the root directory to supports <input type="file" webkitdirectory> see #2378
7046
+ idx = relPath.substr(1).indexOf('/');
7047
+ if (idx !== -1 && (rootDir = relPath.substr(0, idx + 1)) && $.inArray(rootDir, mkdirs) === -1) {
7048
+ mkdirs.unshift(rootDir);
7049
  }
7050
+ }
7051
+ }
7052
+ paths.push(relPath);
7053
+ });
7054
+ renames = [];
7055
+ hashes = {};
7056
+ if (mkdirs.length) {
7057
+ (function() {
7058
+ var checkDirs = $.map(mkdirs, function(name) { return name.substr(1).indexOf('/') === -1 ? {name: name.substr(1)} : null;}),
7059
+ cancelDirs = [];
7060
+ fm.uploads.checkExists(checkDirs, target, fm, true).done(
7061
+ function(res, res2) {
7062
+ var dfds = [], dfd, bak, hash;
7063
+ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) {
7064
+ cancelDirs = $.map(checkDirs, function(dir) { return dir._remove? dir.name : null ;} );
7065
+ checkDirs = $.grep(checkDirs, function(dir) { return !dir._remove? true : false ;} );
7066
+ }
7067
+ if (cancelDirs.length) {
7068
+ $.each(paths.concat(), function(i, path) {
7069
+ if ($.inArray(path, cancelDirs) === 0) {
7070
+ files[i]._remove = true;
7071
+ paths[i] = void(0);
7072
  }
7073
+ });
7074
+ }
7075
+ files = $.grep(files, function(file) { return file._remove? false : true; });
7076
+ paths = $.grep(paths, function(path) { return path === void 0 ? false : true; });
7077
+ if (checkDirs.length) {
7078
+ dfd = $.Deferred();
7079
+ if (res.length) {
7080
+ $.each(res, function(i, existName) {
7081
+ // backup
7082
+ bak = fm.uniqueName(existName + fm.options.backupSuffix , null, '');
7083
+ $.each(res2, function(h, name) {
7084
+ if (res[0] == name) {
7085
+ hash = h;
7086
+ return false;
7087
+ }
7088
+ });
7089
+ if (! hash) {
7090
+ hash = fm.fileByName(res[0], target).hash;
7091
+ }
7092
+ fm.lockfiles({files : [hash]});
7093
+ dfds.push(
7094
+ fm.request({
7095
+ data : {cmd : 'rename', target : hash, name : bak},
7096
+ notify : {type : 'rename', cnt : 1}
7097
+ })
7098
+ .fail(function(error) {
7099
+ dfrd.reject(error);
7100
+ fm.sync();
7101
+ })
7102
+ .always(function() {
7103
+ fm.unlockfiles({files : [hash]});
7104
+ })
7105
+ );
7106
+ });
7107
  } else {
7108
+ dfds.push(null);
 
7109
  }
7110
+
7111
+ $.when.apply($, dfds).done(function() {
7112
+ // ensure directories
7113
+ fm.request({
7114
+ data : {cmd : 'mkdir', target : target, dirs : mkdirs},
7115
+ notify : {type : 'mkdir', cnt : mkdirs.length},
7116
+ preventFail: true
7117
+ })
7118
+ .fail(function(error) {
7119
+ error = error || ['errUnknown'];
7120
+ if (error[0] === 'errCmdParams') {
7121
+ multiMax = 1;
7122
+ } else {
7123
+ multiMax = 0;
7124
+ dfrd.reject(error);
7125
+ }
7126
+ })
7127
+ .done(function(data) {
7128
+ var rm = false;
7129
+ if (!data.hashes) {
7130
+ data.hashes = {};
7131
+ }
7132
+ paths = $.map(paths.concat(), function(p, i) {
7133
+ if (p === '/') {
7134
+ return target;
7135
+ } else {
7136
+ if (data.hashes[p]) {
7137
+ return data.hashes[p];
7138
+ } else {
7139
+ rm = true;
7140
+ files[i]._remove = true;
7141
+ return null;
7142
+ }
7143
+ }
7144
+ });
7145
+ if (rm) {
7146
+ files = $.grep(files, function(file) { return file._remove? false : true; });
7147
+ }
7148
+ })
7149
+ .always(function(data) {
7150
+ if (multiMax) {
7151
+ isDataType = true;
7152
+ if (! send(files, paths)) {
7153
+ dfrd.reject();
7154
+ }
7155
+ }
7156
+ });
7157
+ });
7158
+ } else {
7159
+ dfrd.reject();
7160
+ }
7161
+ }
7162
+ );
7163
+ })();
7164
+ } else {
7165
+ fm.uploads.checkExists(files, target, fm).done(
7166
+ function(res, res2){
7167
+ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) {
7168
+ hashes = res2;
7169
+ if (res === null) {
7170
+ data.overwrite = 0;
7171
+ } else {
7172
+ renames = res;
7173
+ }
7174
+ files = $.grep(files, function(file){return !file._remove? true : false ;});
7175
+ }
7176
+ cnt = files.length;
7177
+ if (cnt > 0) {
7178
+ if (! send(files)) {
7179
+ dfrd.reject();
7180
+ }
7181
+ } else {
7182
+ dfrd.reject();
7183
+ }
7184
  }
7185
+ );
7186
+ }
7187
+ } else {
7188
+ if (! send(files)) {
7189
+ dfrd.reject();
7190
  }
7191
  }
7192
+ } else {
7193
+ dfrd.reject();
7194
+ }
7195
+ } else {
7196
+ if (dataChecked) {
7197
+ send(files[0], files[1]);
7198
+ } else {
7199
+ files.done(function(result) { // result: [files, paths, renames, hashes, mkdirs]
7200
+ renames = [];
7201
+ cnt = result[0].length;
7202
+ if (cnt) {
7203
+ if (result[4] && result[4].length) {
7204
+ // ensure directories
7205
+ fm.request({
7206
+ data : {cmd : 'mkdir', target : target, dirs : result[4]},
7207
+ notify : {type : 'mkdir', cnt : result[4].length},
7208
+ preventFail: true
7209
+ })
7210
+ .fail(function(error) {
7211
+ error = error || ['errUnknown'];
7212
+ if (error[0] === 'errCmdParams') {
7213
+ multiMax = 1;
7214
+ } else {
7215
+ multiMax = 0;
7216
+ dfrd.reject(error);
7217
+ }
7218
+ })
7219
+ .done(function(data) {
7220
+ var rm = false;
7221
+ if (!data.hashes) {
7222
+ data.hashes = {};
7223
+ }
7224
+ result[1] = $.map(result[1], function(p, i) {
7225
+ p = p.replace(/\/[^\/]*$/, '');
7226
+ if (p === '') {
7227
+ return target;
7228
+ } else {
7229
+ if (data.hashes[p]) {
7230
+ return data.hashes[p];
7231
+ } else {
7232
+ rm = true;
7233
+ result[0][i]._remove = true;
7234
+ return null;
7235
  }
 
 
 
7236
  }
7237
+ });
7238
+ if (rm) {
7239
+ result[0] = $.grep(result[0], function(file) { return file._remove? false : true; });
 
 
 
 
 
 
 
 
 
 
7240
  }
7241
+ })
7242
+ .always(function(data) {
7243
+ if (multiMax) {
7244
+ renames = result[2];
7245
+ hashes = result[3];
7246
+ send(result[0], result[1]);
 
 
 
 
 
 
 
 
 
 
 
7247
  }
7248
+ });
7249
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7250
  } else {
7251
+ result[1] = $.map(result[1], function() { return target; });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7252
  }
7253
+ renames = result[2];
7254
+ hashes = result[3];
7255
+ send(result[0], result[1]);
7256
+ } else {
7257
+ dfrd.reject(['errUploadNoFiles']);
7258
  }
7259
+ }).fail(function(){
7260
+ dfrd.reject();
7261
  });
 
 
 
 
 
 
 
7262
  }
 
7263
  }
 
7264
 
7265
+ return dfrd;
7266
+ },
7267
+
7268
+ // upload transport using iframe
7269
+ iframe : function(data, fm) {
7270
  var self = fm ? fm : this,
7271
+ input = data.input? data.input : false,
7272
+ files = !input ? self.uploads.checkFile(data, self) : false,
 
 
 
 
 
 
 
 
 
 
7273
  dfrd = $.Deferred()
7274
  .fail(function(error) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7275
  error && self.error(error);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7276
  }),
7277
+ name = 'iframe-'+fm.namespace+(++self.iframeCnt),
7278
+ form = $('<form action="'+self.uploadURL+'" method="post" enctype="multipart/form-data" encoding="multipart/form-data" target="'+name+'" style="display:none"><input type="hidden" name="cmd" value="upload" /></form>'),
7279
+ msie = this.UA.IE,
7280
+ // clear timeouts, close notification dialog, remove form/iframe
7281
+ onload = function() {
7282
+ abortto && clearTimeout(abortto);
7283
+ notifyto && clearTimeout(notifyto);
7284
+ notify && self.notify({type : 'upload', cnt : -cnt});
7285
+
7286
+ setTimeout(function() {
7287
+ msie && $('<iframe src="javascript:false;"/>').appendTo(form);
7288
+ form.remove();
7289
+ iframe.remove();
7290
+ }, 100);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7291
  },
7292
+ iframe = $('<iframe src="'+(msie ? 'javascript:false;' : 'about:blank')+'" name="'+name+'" style="position:absolute;left:-1000px;top:-1000px" />')
7293
+ .on('load', function() {
7294
+ iframe.off('load')
7295
+ .on('load', function() {
7296
+ onload();
7297
+ // data will be processed in callback response or window onmessage
7298
+ dfrd.resolve();
7299
+ });
7300
+
7301
+ // notify dialog
7302
+ notifyto = setTimeout(function() {
7303
+ notify = true;
7304
+ self.notify({type : 'upload', cnt : cnt});
7305
+ }, self.options.notifyDelay);
7306
+
7307
+ // emulate abort on timeout
7308
+ if (self.options.iframeTimeout > 0) {
7309
+ abortto = setTimeout(function() {
7310
+ onload();
7311
+ dfrd.reject(['errConnect', 'errTimeout']);
7312
+ }, self.options.iframeTimeout);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7313
  }
7314
+
7315
+ form.submit();
7316
+ }),
7317
+ target = (data.target || self.cwd().hash),
7318
+ names = [],
7319
+ dfds = [],
7320
+ renames = [],
7321
+ hashes = {},
7322
+ cnt, notify, notifyto, abortto;
7323
+
7324
+ if (files && files.length) {
7325
+ $.each(files, function(i, val) {
7326
+ form.append('<input type="hidden" name="upload[]" value="'+val+'"/>');
7327
+ });
7328
+ cnt = 1;
7329
+ } else if (input && $(input).is(':file') && $(input).val()) {
7330
+ if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) {
7331
+ names = input.files? input.files : [{ name: $(input).val().replace(/^(?:.+[\\\/])?([^\\\/]+)$/, '$1') }];
7332
+ //names = $.map(names, function(file){return file.name? { name: file.name } : null ;});
7333
+ dfds.push(self.uploads.checkExists(names, target, self).done(
7334
+ function(res, res2){
7335
+ hashes = res2;
7336
+ if (res === null) {
7337
+ data.overwrite = 0;
7338
+ } else{
7339
+ renames = res;
7340
+ cnt = $.grep(names, function(file){return !file._remove? true : false ;}).length;
7341
+ if (cnt != names.length) {
7342
+ cnt = 0;
7343
+ }
7344
+ }
7345
+ }
7346
+ ));
7347
  }
7348
+ cnt = input.files ? input.files.length : 1;
7349
+ form.append(input);
7350
+ } else {
7351
+ return dfrd.reject();
7352
+ }
7353
 
7354
+ $.when.apply($, dfds).done(function() {
7355
+ if (cnt < 1) {
7356
+ return dfrd.reject();
7357
+ }
7358
+ form.append('<input type="hidden" name="'+(self.newAPI ? 'target' : 'current')+'" value="'+target+'"/>')
7359
+ .append('<input type="hidden" name="html" value="1"/>')
7360
+ .append('<input type="hidden" name="node" value="'+self.id+'"/>')
7361
+ .append($(input).attr('name', 'upload[]'));
7362
 
7363
+ if (renames.length > 0) {
7364
+ $.each(renames, function(i, rename) {
7365
+ form.append('<input type="hidden" name="renames[]" value="'+self.escape(rename)+'"/>');
7366
+ });
7367
+ form.append('<input type="hidden" name="suffix" value="'+fm.options.backupSuffix+'"/>');
7368
+ }
7369
+ if (hashes) {
7370
+ $.each(renames, function(i, v) {
7371
+ form.append('<input type="hidden" name="['+i+']" value="'+self.escape(v)+'"/>');
7372
+ });
 
 
 
7373
  }
7374
 
7375
+ if (data.overwrite === 0) {
7376
+ form.append('<input type="hidden" name="overwrite" value="0"/>');
 
 
7377
  }
7378
 
7379
+ $.each(self.options.onlyMimes||[], function(i, mime) {
7380
+ form.append('<input type="hidden" name="mimes[]" value="'+self.escape(mime)+'"/>');
7381
+ });
7382
 
7383
+ $.each(self.customData, function(key, val) {
7384
+ form.append('<input type="hidden" name="'+key+'" value="'+self.escape(val)+'"/>');
7385
+ });
 
 
7386
 
7387
+ form.appendTo('body');
7388
+ iframe.appendTo('body');
7389
+ });
7390
+
7391
+ return dfrd;
7392
+ }
7393
+ },
7394
+
7395
+
7396
+ /**
7397
+ * Bind callback to event(s) The callback is executed at most once per event.
7398
+ * To bind to multiply events at once, separate events names by space
7399
+ *
7400
+ * @param String event name
7401
+ * @param Function callback
7402
+ * @param Boolan priority first
7403
+ * @return elFinder
7404
+ */
7405
+ one : function(ev, callback, priorityFirst) {
7406
+ var self = this,
7407
+ event = ev.toLowerCase(),
7408
+ h = function(e, f) {
7409
+ if (!self.toUnbindEvents[event]) {
7410
+ self.toUnbindEvents[event] = [];
7411
+ }
7412
+ self.toUnbindEvents[event].push({
7413
+ type: event,
7414
+ callback: h
7415
+ });
7416
+ return (callback.done? callback.done : callback).apply(this, arguments);
7417
+ };
7418
+ if (callback.done) {
7419
+ h = {done: h};
7420
+ }
7421
+ return this.bind(event, h, priorityFirst);
7422
+ },
7423
+
7424
+ /**
7425
+ * Set/get data into/from localStorage
7426
+ *
7427
+ * @param String key
7428
+ * @param String|void value
7429
+ * @return String|null
7430
+ */
7431
+ localStorage : function(key, val) {
7432
+ var self = this,
7433
+ s = window.localStorage,
7434
+ oldkey = 'elfinder-'+(key || '')+this.id, // old key of elFinder < 2.1.6
7435
+ prefix = window.location.pathname+'-elfinder-',
7436
+ suffix = this.id,
7437
+ clrs = [],
7438
+ retval, oldval, t, precnt, sufcnt;
7439
+
7440
+ // reset this node data
7441
+ if (typeof(key) === 'undefined') {
7442
+ precnt = prefix.length;
7443
+ sufcnt = suffix.length * -1;
7444
+ $.each(s, function(key) {
7445
+ if (key.substr(0, precnt) === prefix && key.substr(sufcnt) === suffix) {
7446
+ clrs.push(key);
7447
  }
7448
+ });
7449
+ $.each(clrs, function(i, key) {
7450
+ s.removeItem(key);
7451
+ });
7452
+ return true;
7453
+ }
7454
+
7455
+ // new key of elFinder >= 2.1.6
7456
+ key = prefix+key+suffix;
7457
+
7458
+ if (val === null) {
7459
+ return s.removeItem(key);
7460
+ }
7461
+
7462
+ if (val === void(0) && !(retval = s.getItem(key)) && (oldval = s.getItem(oldkey))) {
7463
+ val = oldval;
7464
+ s.removeItem(oldkey);
7465
+ }
7466
+
7467
+ if (val !== void(0)) {
7468
+ t = typeof val;
7469
+ if (t !== 'string' && t !== 'number') {
7470
+ val = JSON.stringify(val);
7471
+ }
7472
+ try {
7473
+ s.setItem(key, val);
7474
+ } catch (e) {
7475
+ try {
7476
+ s.clear();
7477
+ s.setItem(key, val);
7478
+ } catch (e) {
7479
+ self.debug('error', e.toString());
7480
+ }
7481
+ }
7482
+ retval = s.getItem(key);
7483
+ }
7484
+
7485
+ if (retval && (retval.substr(0,1) === '{' || retval.substr(0,1) === '[')) {
7486
+ try {
7487
+ return JSON.parse(retval);
7488
+ } catch(e) {}
7489
+ }
7490
+ return retval;
7491
+ },
7492
+
7493
+ /**
7494
+ * Get/set cookie
7495
+ *
7496
+ * @param String cookie name
7497
+ * @param String|void cookie value
7498
+ * @return String|null
7499
+ */
7500
+ cookie : function(name, value) {
7501
+ var d, o, c, i, retval, t;
7502
+
7503
+ name = 'elfinder-'+name+this.id;
7504
+
7505
+ if (value === void(0)) {
7506
+ if (document.cookie && document.cookie != '') {
7507
+ c = document.cookie.split(';');
7508
+ name += '=';
7509
+ for (i=0; i<c.length; i++) {
7510
+ c[i] = $.trim(c[i]);
7511
+ if (c[i].substring(0, name.length) == name) {
7512
+ retval = decodeURIComponent(c[i].substring(name.length));
7513
+ if (retval.substr(0,1) === '{' || retval.substr(0,1) === '[') {
7514
+ try {
7515
+ return JSON.parse(retval);
7516
+ } catch(e) {}
7517
  }
7518
+ return retval;
 
7519
  }
 
 
7520
  }
7521
+ }
7522
+ return null;
7523
+ }
7524
+
7525
+ o = Object.assign({}, this.options.cookie);
7526
+ if (value === null) {
7527
+ value = '';
7528
+ o.expires = -1;
7529
+ } else {
7530
+ t = typeof value;
7531
+ if (t !== 'string' && t !== 'number') {
7532
+ value = JSON.stringify(value);
7533
+ }
7534
+ }
7535
+ if (typeof(o.expires) == 'number') {
7536
+ d = new Date();
7537
+ d.setTime(d.getTime()+(o.expires * 86400000));
7538
+ o.expires = d;
7539
+ }
7540
+ document.cookie = name+'='+encodeURIComponent(value)+'; expires='+o.expires.toUTCString()+(o.path ? '; path='+o.path : '')+(o.domain ? '; domain='+o.domain : '')+(o.secure ? '; secure' : '');
7541
+ if (value && (value.substr(0,1) === '{' || value.substr(0,1) === '[')) {
7542
+ try {
7543
+ return JSON.parse(value);
7544
+ } catch(e) {}
7545
+ }
7546
+ return value;
7547
+ },
7548
+
7549
+ /**
7550
+ * Get start directory (by location.hash or last opened directory)
7551
+ *
7552
+ * @return String
7553
+ */
7554
+ startDir : function() {
7555
+ var locHash = window.location.hash;
7556
+ if (locHash && locHash.match(/^#elf_/)) {
7557
+ return locHash.replace(/^#elf_/, '');
7558
+ } else if (this.options.startPathHash) {
7559
+ return this.options.startPathHash;
7560
+ } else {
7561
+ return this.lastDir();
7562
+ }
7563
+ },
7564
+
7565
+ /**
7566
+ * Get/set last opened directory
7567
+ *
7568
+ * @param String|undefined dir hash
7569
+ * @return String
7570
+ */
7571
+ lastDir : function(hash) {
7572
+ return this.options.rememberLastDir ? this.storage('lastdir', hash) : '';
7573
+ },
7574
+
7575
+ /**
7576
+ * Node for escape html entities in texts
7577
+ *
7578
+ * @type jQuery
7579
+ */
7580
+ _node : $('<span/>'),
7581
+
7582
+ /**
7583
+ * Replace not html-safe symbols to html entities
7584
+ *
7585
+ * @param String text to escape
7586
+ * @return String
7587
+ */
7588
+ escape : function(name) {
7589
+ return this._node.text(name).html().replace(/"/g, '&quot;').replace(/'/g, '&#039;');
7590
+ },
7591
+
7592
+ /**
7593
+ * Cleanup ajax data.
7594
+ * For old api convert data into new api format
7595
+ *
7596
+ * @param String command name
7597
+ * @param Object data from backend
7598
+ * @return Object
7599
+ */
7600
+ normalize : function(data) {
7601
+ var self = this,
7602
+ fileFilter = (function() {
7603
+ var func, filter;
7604
+ if (filter = self.options.fileFilter) {
7605
+ if (typeof filter === 'function') {
7606
+ func = function(file) {
7607
+ return filter.call(self, file);
7608
+ };
7609
+ } else if (filter instanceof RegExp) {
7610
+ func = function(file) {
7611
+ return filter.test(file.name);
7612
+ };
7613
  }
7614
+ }
7615
+ return func? func : null;
7616
+ })(),
7617
+ chkCmdMap = function(opts) {
7618
+ // Disable command to replace with other command
7619
+ var disabled;
7620
+ if (opts.uiCmdMap) {
7621
+ if ($.isPlainObject(opts.uiCmdMap) && Object.keys(opts.uiCmdMap).length) {
7622
+ if (!opts.disabledFlip) {
7623
+ opts.disabledFlip = {};
7624
+ }
7625
+ disabled = opts.disabledFlip;
7626
+ $.each(opts.uiCmdMap, function(f, t) {
7627
+ if (t === 'hidden' && !disabled[f]) {
7628
+ opts.disabled.push(f);
7629
+ opts.disabledFlip[f] = true;
7630
+ }
7631
+ });
7632
+ } else {
7633
+ delete opts.uiCmdMap;
7634
  }
7635
  }
7636
+ },
7637
+ normalizeOptions = function(opts) {
7638
+ var getType = function(v) {
7639
+ var type = typeof v;
7640
+ if (type === 'object' && Array.isArray(v)) {
7641
+ type = 'array';
 
 
 
 
 
 
 
 
 
 
 
7642
  }
7643
+ return type;
7644
+ };
7645
+ $.each(self.optionProperties, function(k, empty) {
7646
+ if (empty !== void(0)) {
7647
+ if (opts[k] && getType(opts[k]) !== getType(empty)) {
7648
+ opts[k] = empty;
7649
  }
7650
  }
7651
+ });
7652
+ if (opts['disabled']) {
7653
+ opts['disabledFlip'] = self.arrayFlip(opts['disabled'], true);
7654
+ } else {
7655
+ opts['disabledFlip'] = {};
7656
+ }
7657
+ return opts;
7658
+ },
7659
+ filter = function(file, asMap, type) {
7660
+ var res = asMap? file : true,
7661
+ ign = asMap? null : false,
7662
+ vid, targetOptions, isRoot, rootNames;
7663
+
7664
+ if (file && file.hash && file.name && file.mime) {
7665
+ if (file.mime === 'application/x-empty') {
7666
+ file.mime = 'text/plain';
7667
  }
7668
 
7669
+ isRoot = self.isRoot(file);
7670
+ if (isRoot && ! file.volumeid) {
7671
+ self.debug('warning', 'The volume root statuses requires `volumeid` property.');
7672
+ }
7673
+ if (isRoot || file.mime === 'directory') {
7674
+ // Prevention of circular reference
7675
+ if (file.phash) {
7676
+ if (file.phash === file.hash) {
7677
+ error = error.concat(['Parent folder of "$1" is itself.', file.name]);
7678
+ return ign;
7679
+ }
7680
+ if (isRoot && file.volumeid && file.phash.indexOf(file.volumeid) === 0) {
7681
+ error = error.concat(['Parent folder of "$1" is inner itself.', file.name]);
7682
+ return ign;
7683
+ }
 
 
 
 
 
 
 
 
 
 
7684
  }
7685
+
7686
+ // set options, tmbUrls for each volume
7687
+ if (file.volumeid) {
7688
+ vid = file.volumeid;
7689
+
7690
+ if (isRoot) {
7691
+ // make or update of leaf roots cache
7692
+ if (file.phash) {
7693
+ if (! self.leafRoots[file.phash]) {
7694
+ self.leafRoots[file.phash] = [ file.hash ];
7695
+ } else {
7696
+ if ($.inArray(file.hash, self.leafRoots[file.phash]) === -1) {
7697
+ self.leafRoots[file.phash].push(file.hash);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7698
  }
7699
  }
7700
+ }
7701
+
7702
+ self.hasVolOptions = true;
7703
+ if (! self.volOptions[vid]) {
7704
+ self.volOptions[vid] = {
7705
+ // set dispInlineRegex
7706
+ dispInlineRegex: self.options.dispInlineRegex
7707
+ };
7708
+ }
7709
+
7710
+ targetOptions = self.volOptions[vid];
7711
+
7712
+ if (file.options) {
7713
+ // >= v.2.1.14 has file.options
7714
+ Object.assign(targetOptions, file.options);
7715
+ }
7716
+
7717
+ // for compat <= v2.1.13
7718
+ if (file.disabled) {
7719
+ targetOptions.disabled = file.disabled;
7720
+ targetOptions.disabledFlip = self.arrayFlip(file.disabled, true);
7721
+ }
7722
+ if (file.tmbUrl) {
7723
+ targetOptions.tmbUrl = file.tmbUrl;
7724
+ }
7725
+
7726
+ // '/' required at the end of url
7727
+ if (targetOptions.url && targetOptions.url.substr(-1) !== '/') {
7728
+ targetOptions.url += '/';
7729
+ }
7730
+
7731
+ // check uiCmdMap
7732
+ chkCmdMap(targetOptions);
7733
+
7734
+ // check trash bin hash
7735
+ if (targetOptions.trashHash) {
7736
+ if (self.trashes[targetOptions.trashHash] === false) {
7737
+ delete targetOptions.trashHash;
7738
  } else {
7739
+ self.trashes[targetOptions.trashHash] = file.hash;
7740
+ }
7741
+ }
7742
+
7743
+ // set immediate properties
7744
+ $.each(self.optionProperties, function(k) {
7745
+ if (targetOptions[k]) {
7746
+ file[k] = targetOptions[k];
7747
  }
7748
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7749
 
7750
+ // regist fm.roots
7751
+ if (type !== 'cwd') {
7752
+ self.roots[vid] = file.hash;
7753
+ }
7754
+
7755
+ // regist fm.volumeExpires
7756
+ if (file.expires) {
7757
+ self.volumeExpires[vid] = file.expires;
 
 
 
 
 
 
 
 
7758
  }
7759
  }
7760
+
7761
+ if (prevId !== vid) {
7762
+ prevId = vid;
7763
+ i18nFolderName = self.option('i18nFolderName', vid);
7764
+ }
7765
  }
7766
 
7767
+ // volume root i18n name
7768
+ if (isRoot && ! file.i18) {
7769
+ name = 'volume_' + file.name,
7770
+ i18 = self.i18n(false, name);
7771
+
7772
+ if (name !== i18) {
7773
+ file.i18 = i18;
7774
+ }
 
 
 
 
 
 
7775
  }
7776
 
7777
+ // i18nFolderName
7778
+ if (i18nFolderName && ! file.i18) {
7779
+ name = 'folder_' + file.name,
7780
+ i18 = self.i18n(false, name);
7781
+
7782
+ if (name !== i18) {
7783
+ file.i18 = i18;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7784
  }
7785
+ }
7786
+
7787
+ if (isRoot) {
7788
+ if (rootNames = self.storage('rootNames')) {
7789
+ if (rootNames[file.hash]) {
7790
+ file._name = file.name;
7791
+ file._i18 = file.i18;
7792
+ file.name = rootNames[file.hash] = rootNames[file.hash];
7793
+ delete file.i18;
7794
+ }
7795
+ self.storage('rootNames', rootNames);
7796
  }
 
7797
  }
7798
+
7799
+ // lock trash bins holder
7800
+ if (self.trashes[file.hash]) {
7801
+ file.locked = true;
7802
  }
7803
+ } else {
7804
+ if (fileFilter) {
7805
+ try {
7806
+ if (! fileFilter(file)) {
7807
+ return ign;
7808
+ }
7809
+ } catch(e) {
7810
+ self.debug(e);
7811
  }
7812
  }
7813
+ if (file.size == 0) {
7814
+ file.mime = self.getMimetype(file.name, file.mime);
 
 
 
7815
  }
 
 
 
7816
  }
7817
 
7818
+ if (file.options) {
7819
+ self.optionsByHashes[file.hash] = normalizeOptions(file.options);
 
 
7820
  }
7821
 
7822
+ delete file.options;
 
 
 
 
 
 
 
 
 
7823
 
7824
+ return res;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7825
  }
7826
+ return ign;
7827
+ },
7828
+ getDescendants = function(hashes) {
7829
+ var res = [];
7830
+ $.each(self.files(), function(h, f) {
7831
+ $.each(self.parents(h), function(i, ph) {
7832
+ if ($.inArray(ph, hashes) !== -1 && $.inArray(h, hashes) === -1) {
7833
+ res.push(h);
7834
+ return false;
7835
  }
7836
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7837
  });
7838
+ return res;
7839
+ },
7840
+ applyLeafRootStats = function(dataArr, type) {
7841
+ $.each(dataArr, function(i, f) {
7842
+ var pfile, done;
7843
+ if (self.leafRoots[f.hash]) {
7844
+ self.applyLeafRootStats(f);
7845
+ }
7846
+ // update leaf root parent stat
7847
+ if (type !== 'change' && f.phash && self.isRoot(f) && (pfile = self.file(f.phash))) {
7848
+ self.applyLeafRootStats(pfile);
7849
+ // add to data.changed
7850
+ if (!data.changed) {
7851
+ data.changed = [pfile];
7852
  } else {
7853
+ $.each(data.changed, function(i, f) {
7854
+ if (f.hash === pfile.hash) {
7855
+ data.changed[i] = pfile;
7856
+ done = true;
7857
+ return false;
7858
+ }
7859
+ });
7860
+ if (!done) {
7861
+ data.changed.push(pfile);
7862
+ }
7863
  }
 
 
 
 
7864
  }
7865
  });
7866
+ },
7867
+ error = [],
7868
+ name, i18, i18nFolderName, prevId, cData;
7869
+
7870
+ // set cunstom data
7871
+ if (data.customData && data.customData !== self.prevCustomData) {
7872
+ self.prevCustomData = data.customData;
7873
+ try {
7874
+ cData = JSON.parse(data.customData);
7875
+ if ($.isPlainObject(cData)) {
7876
+ self.prevCustomData = cData;
7877
+ $.each(Object.keys(cData), function(i, key) {
7878
+ if (cData[key] === null) {
7879
+ delete cData[key];
7880
+ delete self.optsCustomData[key];
7881
+ }
7882
  });
7883
+ self.customData = Object.assign({}, self.optsCustomData, cData);
7884
  }
7885
+ } catch(e) {}
7886
+ }
7887
+
7888
+ if (data.options) {
7889
+ normalizeOptions(data.options);
7890
+ }
7891
+
7892
+ if (data.cwd) {
7893
+ if (data.cwd.volumeid && data.options && Object.keys(data.options).length && self.isRoot(data.cwd)) {
7894
+ self.hasVolOptions = true;
7895
+ self.volOptions[data.cwd.volumeid] = data.options;
7896
+ }
7897
+ data.cwd = filter(data.cwd, true, 'cwd');
7898
+ }
7899
+ if (data.files) {
7900
+ data.files = $.grep(data.files, filter);
7901
+ }
7902
+ if (data.tree) {
7903
+ data.tree = $.grep(data.tree, filter);
7904
+ }
7905
+ if (data.added) {
7906
+ data.added = $.grep(data.added, filter);
7907
+ }
7908
+ if (data.changed) {
7909
+ data.changed = $.grep(data.changed, filter);
7910
+ }
7911
+ if (data.removed && data.removed.length && self.searchStatus.state === 2) {
7912
+ data.removed = data.removed.concat(getDescendants(data.removed));
7913
+ }
7914
+ if (data.api) {
7915
+ data.init = true;
7916
+ }
7917
+
7918
+ if (Object.keys(self.leafRoots).length) {
7919
+ data.files && applyLeafRootStats(data.files);
7920
+ data.tree && applyLeafRootStats(data.tree);
7921
+ data.added && applyLeafRootStats(data.added);
7922
+ data.changed && applyLeafRootStats(data.changed, 'change');
7923
+ }
7924
+
7925
+ // merge options that apply only to cwd
7926
+ if (data.cwd && data.cwd.options && data.options) {
7927
+ Object.assign(data.options, normalizeOptions(data.cwd.options));
7928
+ }
7929
+
7930
+ // '/' required at the end of url
7931
+ if (data.options && data.options.url && data.options.url.substr(-1) !== '/') {
7932
+ data.options.url += '/';
7933
+ }
7934
+
7935
+ // check error
7936
+ if (error.length) {
7937
+ data.norError = ['errResponse'].concat(error);
7938
+ }
7939
+
7940
+ return data;
7941
+ },
7942
+
7943
+ /**
7944
+ * Update sort options
7945
+ *
7946
+ * @param {String} sort type
7947
+ * @param {String} sort order
7948
+ * @param {Boolean} show folder first
7949
+ */
7950
+ setSort : function(type, order, stickFolders, alsoTreeview) {
7951
+ this.storage('sortType', (this.sortType = this.sortRules[type] ? type : 'name'));
7952
+ this.storage('sortOrder', (this.sortOrder = /asc|desc/.test(order) ? order : 'asc'));
7953
+ this.storage('sortStickFolders', (this.sortStickFolders = !!stickFolders) ? 1 : '');
7954
+ this.storage('sortAlsoTreeview', (this.sortAlsoTreeview = !!alsoTreeview) ? 1 : '');
7955
+ this.trigger('sortchange');
7956
+ },
7957
+
7958
+ _sortRules : {
7959
+ name : function(file1, file2) {
7960
+ return elFinder.prototype.naturalCompare(file1.i18 || file1.name, file2.i18 || file2.name);
7961
+ },
7962
+ size : function(file1, file2) {
7963
+ var size1 = parseInt(file1.size) || 0,
7964
+ size2 = parseInt(file2.size) || 0;
7965
 
7966
+ return size1 === size2 ? 0 : size1 > size2 ? 1 : -1;
7967
+ },
7968
+ kind : function(file1, file2) {
7969
+ return elFinder.prototype.naturalCompare(file1.mime, file2.mime);
7970
+ },
7971
+ date : function(file1, file2) {
7972
+ var date1 = file1.ts || file1.date || 0,
7973
+ date2 = file2.ts || file2.date || 0;
7974
+
7975
+ return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
7976
+ },
7977
+ perm : function(file1, file2) {
7978
+ var val = function(file) { return (file.write? 2 : 0) + (file.read? 1 : 0); },
7979
+ v1 = val(file1),
7980
+ v2 = val(file2);
7981
+ return v1 === v2 ? 0 : v1 > v2 ? 1 : -1;
7982
+ },
7983
+ mode : function(file1, file2) {
7984
+ var v1 = file1.mode || (file1.perm || ''),
7985
+ v2 = file2.mode || (file2.perm || '');
7986
+ return elFinder.prototype.naturalCompare(v1, v2);
7987
+ },
7988
+ owner : function(file1, file2) {
7989
+ var v1 = file1.owner || '',
7990
+ v2 = file2.owner || '';
7991
+ return elFinder.prototype.naturalCompare(v1, v2);
7992
+ },
7993
+ group : function(file1, file2) {
7994
+ var v1 = file1.group || '',
7995
+ v2 = file2.group || '';
7996
+ return elFinder.prototype.naturalCompare(v1, v2);
7997
+ }
7998
+ },
7999
+
8000
+ /**
8001
+ * Valid sort rule names
8002
+ *
8003
+ * @type Object
8004
+ */
8005
+ sorters : {},
8006
+
8007
+ /**
8008
+ * Compare strings for natural sort
8009
+ *
8010
+ * @param String
8011
+ * @param String
8012
+ * @return Number
8013
+ */
8014
+ naturalCompare : function(a, b) {
8015
+ var self = elFinder.prototype.naturalCompare;
8016
+ if (typeof self.loc == 'undefined') {
8017
+ self.loc = (navigator.userLanguage || navigator.browserLanguage || navigator.language || 'en-US');
8018
+ }
8019
+ if (typeof self.sort == 'undefined') {
8020
+ if ('11'.localeCompare('2', self.loc, {numeric: true}) > 0) {
8021
+ // Native support
8022
+ if (window.Intl && window.Intl.Collator) {
8023
+ self.sort = new Intl.Collator(self.loc, {numeric: true}).compare;
8024
  } else {
8025
+ self.sort = function(a, b) {
8026
+ return a.localeCompare(b, self.loc, {numeric: true});
8027
+ };
8028
  }
8029
  } else {
8030
+ /*
8031
+ * Edited for elFinder (emulates localeCompare() by numeric) by Naoki Sawada aka nao-pon
8032
+ */
8033
+ /*
8034
+ * Huddle/javascript-natural-sort (https://github.com/Huddle/javascript-natural-sort)
8035
+ */
8036
+ /*
8037
+ * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
8038
+ * Author: Jim Palmer (based on chunking idea from Dave Koelle)
8039
+ * http://opensource.org/licenses/mit-license.php
8040
+ */
8041
+ self.sort = function(a, b) {
8042
+ var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
8043
+ sre = /(^[ ]*|[ ]*$)/g,
8044
+ dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
8045
+ hre = /^0x[0-9a-f]+$/i,
8046
+ ore = /^0/,
8047
+ syre = /^[\x01\x21-\x2f\x3a-\x40\x5b-\x60\x7b-\x7e]/, // symbol first - (Naoki Sawada)
8048
+ i = function(s) { return self.sort.insensitive && (''+s).toLowerCase() || ''+s; },
8049
+ // convert all to strings strip whitespace
8050
+ // first character is "_", it's smallest - (Naoki Sawada)
8051
+ x = i(a).replace(sre, '').replace(/^_/, "\x01") || '',
8052
+ y = i(b).replace(sre, '').replace(/^_/, "\x01") || '',
8053
+ // chunk/tokenize
8054
+ xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
8055
+ yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
8056
+ // numeric, hex or date detection
8057
+ xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
8058
+ yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null,
8059
+ oFxNcL, oFyNcL,
8060
+ locRes = 0;
8061
+
8062
+ // first try and sort Hex codes or Dates
8063
+ if (yD) {
8064
+ if ( xD < yD ) return -1;
8065
+ else if ( xD > yD ) return 1;
8066
+ }
8067
+ // natural sorting through split numeric strings and default strings
8068
+ for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
8069
+
8070
+ // find floats not starting with '0', string or 0 if not defined (Clint Priest)
8071
+ oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
8072
+ oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
8073
+
8074
+ // handle numeric vs string comparison - number < string - (Kyle Adams)
8075
+ // but symbol first < number - (Naoki Sawada)
8076
+ if (isNaN(oFxNcL) !== isNaN(oFyNcL)) {
8077
+ if (isNaN(oFxNcL) && (typeof oFxNcL !== 'string' || ! oFxNcL.match(syre))) {
8078
+ return 1;
8079
+ } else if (typeof oFyNcL !== 'string' || ! oFyNcL.match(syre)) {
8080
+ return -1;
8081
  }
 
 
 
 
 
8082
  }
 
 
 
 
 
8083
 
8084
+ // use decimal number comparison if either value is string zero
8085
+ if (parseInt(oFxNcL, 10) === 0) oFxNcL = 0;
8086
+ if (parseInt(oFyNcL, 10) === 0) oFyNcL = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8087
 
8088
+ // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
8089
+ if (typeof oFxNcL !== typeof oFyNcL) {
8090
+ oFxNcL += '';
8091
+ oFyNcL += '';
 
 
 
 
 
 
 
 
 
 
 
 
 
8092
  }
8093
+
8094
+ // use locale sensitive sort for strings when case insensitive
8095
+ // note: localeCompare interleaves uppercase with lowercase (e.g. A,a,B,b)
8096
+ if (self.sort.insensitive && typeof oFxNcL === 'string' && typeof oFyNcL === 'string') {
8097
+ locRes = oFxNcL.localeCompare(oFyNcL, self.loc);
8098
+ if (locRes !== 0) return locRes;
8099
+ }
8100
+
8101
+ if (oFxNcL < oFyNcL) return -1;
8102
+ if (oFxNcL > oFyNcL) return 1;
8103
+ }
8104
+ return 0;
8105
+ };
8106
+ self.sort.insensitive = true;
8107
  }
8108
+ }
8109
+ return self.sort(a, b);
8110
+ },
8111
+
8112
+ /**
8113
+ * Compare files based on elFinder.sort
8114
+ *
8115
+ * @param Object file
8116
+ * @param Object file
8117
+ * @return Number
8118
+ */
8119
+ compare : function(file1, file2) {
8120
+ var self = this,
8121
+ type = self.sortType,
8122
+ asc = self.sortOrder == 'asc',
8123
+ stick = self.sortStickFolders,
8124
+ rules = self.sortRules,
8125
+ sort = rules[type],
8126
+ d1 = file1.mime == 'directory',
8127
+ d2 = file2.mime == 'directory',
8128
+ res;
8129
 
8130
+ if (stick) {
8131
+ if (d1 && !d2) {
8132
+ return -1;
8133
+ } else if (!d1 && d2) {
8134
+ return 1;
8135
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8136
  }
8137
+
8138
+ res = asc ? sort(file1, file2) : sort(file2, file1);
8139
+
8140
+ return type !== 'name' && res === 0
8141
+ ? res = asc ? rules.name(file1, file2) : rules.name(file2, file1)
8142
+ : res;
8143
  },
8144
 
 
8145
  /**
8146
+ * Sort files based on config
 
8147
  *
8148
+ * @param Array files
8149
+ * @return Array
 
8150
  */
8151
+ sortFiles : function(files) {
8152
+ return files.sort(this.compare);
 
 
 
 
 
8153
  },
8154
 
8155
  /**
8156
+ * Open notification dialog
8157
+ * and append/update message for required notification type.
8158
  *
8159
+ * @param Object options
8160
+ * @example
8161
+ * this.notify({
8162
+ * type : 'copy',
8163
+ * msg : 'Copy files', // not required for known types @see this.notifyType
8164
+ * cnt : 3,
8165
+ * hideCnt : false, // true for not show count
8166
+ * progress : 10, // progress bar percents (use cnt : 0 to update progress bar)
8167
+ * cancel : callback // callback function for cancel button
8168
+ * })
8169
+ * @return elFinder
8170
  */
8171
+ notify : function(opts) {
8172
+ var type = opts.type,
8173
+ id = opts.id? 'elfinder-notify-'+opts.id : '',
8174
+ msg = this.i18n((typeof opts.msg !== 'undefined')? opts.msg : (this.messages['ntf'+type] ? 'ntf'+type : 'ntfsmth')),
8175
+ ndialog = this.ui.notify,
8176
+ notify = ndialog.children('.elfinder-notify-'+type+(id? ('.'+id) : '')),
8177
+ button = notify.children('div.elfinder-notify-cancel').children('button'),
8178
+ ntpl = '<div class="elfinder-notify elfinder-notify-{type}'+(id? (' '+id) : '')+'"><span class="elfinder-dialog-icon elfinder-dialog-icon-{type}"/><span class="elfinder-notify-msg">{msg}</span> <span class="elfinder-notify-cnt"/><div class="elfinder-notify-progressbar"><div class="elfinder-notify-progress"/></div><div class="elfinder-notify-cancel"/></div>',
8179
+ delta = opts.cnt,
8180
+ size = (typeof opts.size != 'undefined')? parseInt(opts.size) : null,
8181
+ progress = (typeof opts.progress != 'undefined' && opts.progress >= 0) ? opts.progress : null,
8182
+ cancel = opts.cancel,
8183
+ clhover = 'ui-state-hover',
8184
+ close = function() {
8185
+ notify._esc && $(document).off('keydown', notify._esc);
8186
+ notify.remove();
8187
+ !ndialog.children().length && ndialog.elfinderdialog('close');
8188
+ },
8189
+ cnt, total, prc;
8190
 
8191
+ if (!type) {
8192
+ return this;
 
 
 
8193
  }
8194
 
8195
+ if (!notify.length) {
8196
+ notify = $(ntpl.replace(/\{type\}/g, type).replace(/\{msg\}/g, msg))
8197
+ .appendTo(ndialog)
8198
+ .data('cnt', 0);
8199
+
8200
+ if (progress != null) {
8201
+ notify.data({progress : 0, total : 0});
8202
+ }
8203
+
8204
+ if (cancel) {
8205
+ button = $('<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text">'+this.i18n('btnCancel')+'</span></button>')
8206
+ .on('mouseenter mouseleave', function(e) {
8207
+ $(this).toggleClass(clhover, e.type === 'mouseenter');
8208
+ });
8209
+ notify.children('div.elfinder-notify-cancel').append(button);
8210
+ }
8211
+ } else if (typeof opts.msg !== 'undefined') {
8212
+ notify.children('span.elfinder-notify-msg').html(msg);
8213
  }
8214
+
8215
+ cnt = delta + parseInt(notify.data('cnt'));
8216
 
8217
+ if (cnt > 0) {
8218
+ if (cancel && button.length) {
8219
+ if ($.isFunction(cancel) || (typeof cancel === 'object' && cancel.promise)) {
8220
+ notify._esc = function(e) {
8221
+ if (e.type == 'keydown' && e.keyCode != $.ui.keyCode.ESCAPE) {
8222
+ return;
8223
+ }
8224
+ e.preventDefault();
8225
+ e.stopPropagation();
8226
+ close();
8227
+ if (cancel.promise) {
8228
+ cancel.reject(0); // 0 is canceling flag
8229
+ } else {
8230
+ cancel(e);
8231
+ }
8232
+ };
8233
+ button.on('click', function(e) {
8234
+ notify._esc(e);
8235
+ });
8236
+ $(document).on('keydown.' + this.namespace, notify._esc);
8237
  }
8238
  }
8239
+
8240
+ !opts.hideCnt && notify.children('.elfinder-notify-cnt').text('('+cnt+')');
8241
+ ndialog.is(':hidden') && ndialog.elfinderdialog('open', this).height('auto');
8242
+ notify.data('cnt', cnt);
8243
+
8244
+ if ((progress != null)
8245
+ && (total = notify.data('total')) >= 0
8246
+ && (prc = notify.data('progress')) >= 0) {
8247
 
8248
+ total += size != null? size : delta;
8249
+ prc += progress;
8250
+ (size == null && delta < 0) && (prc += delta * 100);
8251
+ notify.data({progress : prc, total : total});
8252
+ if (size != null) {
8253
+ prc *= 100;
8254
+ total = Math.max(1, total);
8255
+ }
8256
+ progress = parseInt(prc/total);
8257
+
8258
+ notify.find('.elfinder-notify-progress')
8259
+ .animate({
8260
+ width : (progress < 100 ? progress : 100)+'%'
8261
+ }, 20);
8262
+ }
8263
+
8264
+ } else {
8265
+ close();
8266
  }
8267
+
8268
+ return this;
8269
  },
8270
 
8271
  /**
8272
+ * Open confirmation dialog
8273
  *
8274
+ * @param Object options
8275
+ * @example
8276
+ * this.confirm({
8277
+ * cssClass : 'elfinder-confirm-mydialog',
8278
+ * title : 'Remove files',
8279
+ * text : 'Here is question text',
8280
+ * accept : { // accept callback - required
8281
+ * label : 'Continue',
8282
+ * callback : function(applyToAll) { fm.log('Ok') }
8283
+ * },
8284
+ * cancel : { // cancel callback - required
8285
+ * label : 'Cancel',
8286
+ * callback : function() { fm.log('Cancel')}
8287
+ * },
8288
+ * reject : { // reject callback - optionally
8289
+ * label : 'No',
8290
+ * callback : function(applyToAll) { fm.log('No')}
8291
+ * },
8292
+ * buttons : [ // additional buttons callback - optionally
8293
+ * {
8294
+ * label : 'Btn1',
8295
+ * callback : function(applyToAll) { fm.log('Btn1')}
8296
+ * }
8297
+ * ],
8298
+ * all : true // display checkbox "Apply to all"
8299
+ * })
8300
+ * @return elFinder
8301
  */
8302
+ confirm : function(opts) {
8303
+ var self = this,
8304
+ complete = false,
8305
+ options = {
8306
+ cssClass : 'elfinder-dialog-confirm',
8307
+ modal : true,
8308
+ resizable : false,
8309
+ title : this.i18n(opts.title || 'confirmReq'),
8310
+ buttons : {},
8311
+ close : function() {
8312
+ !complete && opts.cancel.callback();
8313
+ $(this).elfinderdialog('destroy');
8314
+ }
8315
+ },
8316
+ apply = this.i18n('apllyAll'),
8317
+ label, checkbox, btnNum;
8318
 
8319
+ if (opts.cssClass) {
8320
+ options.cssClass += ' ' + opts.cssClass;
8321
+ }
8322
+ options.buttons[this.i18n(opts.accept.label)] = function() {
8323
+ opts.accept.callback(!!(checkbox && checkbox.prop('checked')));
8324
+ complete = true;
8325
+ $(this).elfinderdialog('close');
8326
+ };
8327
+ options.buttons[this.i18n(opts.accept.label)]._cssClass = 'elfinder-confirm-accept';
8328
+
8329
+ if (opts.reject) {
8330
+ options.buttons[this.i18n(opts.reject.label)] = function() {
8331
+ opts.reject.callback(!!(checkbox && checkbox.prop('checked')));
8332
+ complete = true;
8333
+ $(this).elfinderdialog('close');
8334
+ };
8335
+ options.buttons[this.i18n(opts.reject.label)]._cssClass = 'elfinder-confirm-reject';
8336
+ }
8337
+
8338
+ if (opts.buttons && opts.buttons.length > 0) {
8339
+ btnNum = 1;
8340
+ $.each(opts.buttons, function(i, v){
8341
+ options.buttons[self.i18n(v.label)] = function() {
8342
+ v.callback(!!(checkbox && checkbox.prop('checked')));
8343
+ complete = true;
8344
+ $(this).elfinderdialog('close');
8345
+ };
8346
+ options.buttons[self.i18n(v.label)]._cssClass = 'elfinder-confirm-extbtn' + (btnNum++);
8347
+ if (v.cssClass) {
8348
+ options.buttons[self.i18n(v.label)]._cssClass += ' ' + v.cssClass;
8349
  }
8350
+ });
 
8351
  }
8352
+
8353
+ options.buttons[this.i18n(opts.cancel.label)] = function() {
8354
+ $(this).elfinderdialog('close');
8355
+ };
8356
+ options.buttons[this.i18n(opts.cancel.label)]._cssClass = 'elfinder-confirm-cancel';
8357
+
8358
+ if (opts.all) {
8359
+ options.create = function() {
8360
+ var base = $('<div class="elfinder-dialog-confirm-applyall"/>');
8361
+ checkbox = $('<input type="checkbox" />');
8362
+ $(this).next().find('.ui-dialog-buttonset')
8363
+ .prepend(base.append($('<label>'+apply+'</label>').prepend(checkbox)));
8364
+ };
8365
  }
8366
+
8367
+ if (opts.optionsCallback && $.isFunction(opts.optionsCallback)) {
8368
+ opts.optionsCallback(options);
 
8369
  }
8370
+
8371
+ return this.dialog('<span class="elfinder-dialog-icon elfinder-dialog-icon-confirm"/>' + this.i18n(opts.text), options);
8372
  },
8373
 
8374
  /**
8375
+ * Create unique file name in required dir
8376
  *
8377
+ * @param String file name
8378
+ * @param String parent dir hash
8379
+ * @param String glue
8380
  * @return String
8381
  */
8382
+ uniqueName : function(prefix, phash, glue) {
8383
+ var i = 0, ext = '', p, name;
8384
+
8385
+ prefix = this.i18n(false, prefix);
8386
+ phash = phash || this.cwd().hash;
8387
+ glue = (typeof glue === 'undefined')? ' ' : glue;
8388
+
8389
+ if (p = prefix.match(/^(.+)(\.[^.]+)$/)) {
8390
+ ext = p[2];
8391
+ prefix = p[1];
8392
  }
8393
+
8394
+ name = prefix+ext;
8395
+
8396
+ if (!this.fileByName(name, phash)) {
8397
+ return name;
8398
+ }
8399
+ while (i < 10000) {
8400
+ name = prefix + glue + (++i) + ext;
8401
+ if (!this.fileByName(name, phash)) {
8402
+ return name;
8403
+ }
8404
+ }
8405
+ return prefix + Math.random() + ext;
8406
  },
8407
 
8408
  /**
8409
+ * Return message translated onto current language
8410
+ * Allowed accept HTML element that was wrapped in jQuery object
8411
+ * To be careful to XSS vulnerability of HTML element Ex. You should use `fm.escape(file.name)`
8412
+ *
8413
+ * @param String|Array message[s]|Object jQuery
8414
  * @return String
8415
+ **/
8416
+ i18n : function() {
8417
+ var self = this,
8418
+ messages = this.messages,
8419
+ input = [],
8420
+ ignore = [],
8421
+ message = function(m) {
8422
+ var file;
8423
+ if (m.indexOf('#') === 0) {
8424
+ if ((file = self.file(m.substr(1)))) {
8425
+ return file.name;
8426
+ }
8427
+ }
8428
+ return m;
8429
+ },
8430
+ i, j, m, escFunc, start = 0, isErr;
8431
+
8432
+ if (arguments.length && arguments[0] === false) {
8433
+ escFunc = function(m){ return m; };
8434
+ start = 1;
8435
+ }
8436
+ for (i = start; i< arguments.length; i++) {
8437
+ m = arguments[i];
8438
+
8439
+ if (Array.isArray(m)) {
8440
+ for (j = 0; j < m.length; j++) {
8441
+ if (m[j] instanceof jQuery) {
8442
+ // jQuery object is HTML element
8443
+ input.push(m[j]);
8444
+ } else if (typeof m[j] !== 'undefined'){
8445
+ input.push(message('' + m[j]));
8446
+ }
8447
+ }
8448
+ } else if (m instanceof jQuery) {
8449
+ // jQuery object is HTML element
8450
+ input.push(m[j]);
8451
+ } else if (typeof m !== 'undefined'){
8452
+ input.push(message('' + m));
8453
+ }
8454
+ }
8455
+
8456
+ for (i = 0; i < input.length; i++) {
8457
+ // dont translate placeholders
8458
+ if ($.inArray(i, ignore) !== -1) {
8459
+ continue;
8460
+ }
8461
+ m = input[i];
8462
+ if (typeof m == 'string') {
8463
+ isErr = !!(messages[m] && m.match(/^err/));
8464
+ // translate message
8465
+ m = messages[m] || (escFunc? escFunc(m) : self.escape(m));
8466
+ // replace placeholders in message
8467
+ m = m.replace(/\$(\d+)/g, function(match, placeholder) {
8468
+ var res;
8469
+ placeholder = i + parseInt(placeholder);
8470
+ if (placeholder > 0 && input[placeholder]) {
8471
+ ignore.push(placeholder);
8472
+ }
8473
+ res = escFunc? escFunc(input[placeholder]) : self.escape(input[placeholder]);
8474
+ if (isErr) {
8475
+ res = '<span class="elfinder-err-var elfinder-err-var' + placeholder + '">' + res + '</span>';
8476
+ }
8477
+ return res;
8478
+ });
8479
+ } else {
8480
+ // get HTML from jQuery object
8481
+ m = m.get(0).outerHTML;
8482
+ }
8483
+
8484
+ input[i] = m;
8485
+ }
8486
+
8487
+ return $.grep(input, function(m, i) { return $.inArray(i, ignore) === -1 ? true : false; }).join('<br>');
8488
  },
8489
 
8490
  /**
8491
+ * Get icon style from file.icon
8492
  *
8493
+ * @param Object elFinder file object
8494
+ * @return String|Object
8495
  */
8496
+ getIconStyle : function(file, asObject) {
8497
+ var self = this,
8498
+ template = {
8499
+ 'background' : 'url(\'{url}\') 0 0 no-repeat',
8500
+ 'background-size' : 'contain'
8501
+ },
8502
+ style = '',
8503
+ cssObj = {},
8504
+ i = 0;
8505
+ if (file.icon) {
8506
+ style = 'style="';
8507
+ $.each(template, function(k, v) {
8508
+ if (i++ === 0) {
8509
+ v = v.replace('{url}', self.escape(file.icon));
8510
+ }
8511
+ if (asObject) {
8512
+ cssObj[k] = v;
8513
+ } else {
8514
+ style += k+':'+v+';';
8515
+ }
8516
+ });
8517
+ style += '"';
8518
+ }
8519
+ return asObject? cssObj : style;
8520
+ },
8521
 
8522
  /**
8523
+ * Convert mimetype into css classes
8524
  *
8525
+ * @param String file mimetype
8526
  * @return String
8527
  */
8528
+ mime2class : function(mimeType) {
8529
+ var prefix = 'elfinder-cwd-icon-',
8530
+ mime = mimeType.toLowerCase(),
8531
+ isText = this.textMimes[mime];
8532
+
8533
+ mime = mime.split('/');
8534
+ if (isText) {
8535
+ mime[0] += ' ' + prefix + 'text';
8536
+ } else if (mime[1] && mime[1].match(/\+xml$/)) {
8537
+ mime[0] += ' ' + prefix + 'xml';
8538
+ }
8539
+
8540
+ return prefix + mime[0] + (mime[1] ? ' ' + prefix + mime[1].replace(/(\.|\+)/g, '-') : '');
8541
  },
8542
 
8543
  /**
8544
+ * Return localized kind of file
 
8545
  *
8546
+ * @param Object|String file or file mimetype
8547
+ * @return String
 
8548
  */
8549
+ mime2kind : function(f) {
8550
+ var isObj = typeof(f) == 'object' ? true : false,
8551
+ mime = isObj ? f.mime : f,
8552
+ kind;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8553
 
8554
 
8555
+ if (isObj && f.alias && mime != 'symlink-broken') {
8556
+ kind = 'Alias';
8557
+ } else if (this.kinds[mime]) {
8558
+ if (isObj && mime === 'directory' && (! f.phash || f.isroot)) {
8559
+ kind = 'Root';
8560
+ } else {
8561
+ kind = this.kinds[mime];
8562
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
8563
  }
8564
+ if (! kind) {
8565
+ if (mime.indexOf('text') === 0) {
8566
+ kind = 'Text';
8567
+ } else if (mime.indexOf('image') === 0) {
8568
+ kind = 'Image';
8569
+ } else if (mime.indexOf('audio') === 0) {
8570
+ kind = 'Audio';
8571
+ } else if (mime.indexOf('video') === 0) {
8572
+ kind = 'Video';
8573
+ } else if (mime.indexOf('application') === 0) {
8574
+ kind = 'App';
8575
+ } else {
8576
+ kind = mime;
8577
+ }
8578
  }
8579
+
8580
+ return this.messages['kind'+kind] ? this.i18n('kind'+kind) : mime;
8581
  },
8582
 
8583
  /**
8584
+ * Return boolean Is mime-type text file
8585
+ *
8586
+ * @param String mime-type
8587
+ * @return Boolean
 
8588
  */
8589
+ mimeIsText : function(mime) {
8590
+ return (this.textMimes[mime.toLowerCase()] || (mime.indexOf('text/') === 0 && mime.substr(5, 3) !== 'rtf') || mime.match(/^application\/.+\+xml$/))? true : false;
 
 
 
 
8591
  },
8592
 
8593
+ /**
8594
+ * Returns a date string formatted according to the given format string
8595
+ *
8596
+ * @param String format string
8597
+ * @param Object Date object
8598
+ * @return String
8599
+ */
8600
+ date : function(format, date) {
8601
+ var self = this,
8602
+ output, d, dw, m, y, h, g, i, s;
8603
+
8604
+ if (! date) {
8605
+ date = new Date();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8606
  }
8607
+
8608
+ h = date[self.getHours]();
8609
+ g = h > 12 ? h - 12 : h;
8610
+ i = date[self.getMinutes]();
8611
+ s = date[self.getSeconds]();
8612
+ d = date[self.getDate]();
8613
+ dw = date[self.getDay]();
8614
+ m = date[self.getMonth]() + 1;
8615
+ y = date[self.getFullYear]();
8616
+
8617
+ output = format.replace(/[a-z]/gi, function(val) {
8618
+ switch (val) {
8619
+ case 'd': return d > 9 ? d : '0'+d;
8620
+ case 'j': return d;
8621
+ case 'D': return self.i18n(self.i18.daysShort[dw]);
8622
+ case 'l': return self.i18n(self.i18.days[dw]);
8623
+ case 'm': return m > 9 ? m : '0'+m;
8624
+ case 'n': return m;
8625
+ case 'M': return self.i18n(self.i18.monthsShort[m-1]);
8626
+ case 'F': return self.i18n(self.i18.months[m-1]);
8627
+ case 'Y': return y;
8628
+ case 'y': return (''+y).substr(2);
8629
+ case 'H': return h > 9 ? h : '0'+h;
8630
+ case 'G': return h;
8631
+ case 'g': return g;
8632
+ case 'h': return g > 9 ? g : '0'+g;
8633
+ case 'a': return h >= 12 ? 'pm' : 'am';
8634
+ case 'A': return h >= 12 ? 'PM' : 'AM';
8635
+ case 'i': return i > 9 ? i : '0'+i;
8636
+ case 's': return s > 9 ? s : '0'+s;
8637
+ }
8638
+ return val;
8639
+ });
8640
+
8641
+ return output;
8642
  },
8643
 
8644
  /**
8645
+ * Return localized date
8646
  *
8647
+ * @param Object file object
8648
+ * @return String
8649
  */
8650
+ formatDate : function(file, t) {
8651
+ var self = this,
8652
+ ts = t || file.ts,
8653
+ i18 = self.i18,
8654
+ date, format, output, d, dw, m, y, h, g, i, s;
8655
+
8656
+ if (self.options.clientFormatDate && ts > 0) {
8657
+
8658
+ date = new Date(ts*1000);
8659
+ format = ts >= this.yesterday
8660
+ ? this.fancyFormat
8661
+ : this.dateFormat;
8662
+
8663
+ output = self.date(format, date);
8664
+
8665
+ return ts >= this.yesterday
8666
+ ? output.replace('$1', this.i18n(ts >= this.today ? 'Today' : 'Yesterday'))
8667
+ : output;
8668
+ } else if (file.date) {
8669
+ return file.date.replace(/([a-z]+)\s/i, function(a1, a2) { return self.i18n(a2)+' '; });
8670
+ }
8671
+
8672
+ return self.i18n('dateUnknown');
8673
+ },
8674
 
8675
  /**
8676
+ * Return localized number string
8677
+ *
8678
+ * @param Number
8679
+ * @return String
 
8680
  */
8681
+ toLocaleString : function(num) {
8682
+ var v = new Number(num);
8683
+ if (v) {
8684
+ if (v.toLocaleString) {
8685
+ return v.toLocaleString();
 
 
 
 
 
 
 
 
 
 
8686
  } else {
8687
+ return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8688
  }
8689
  }
8690
+ return num;
8691
  },
8692
 
8693
  /**
8694
+ * Return css class marks file permissions
8695
+ *
8696
+ * @param Object file
8697
+ * @return String
 
8698
  */
8699
+ perms2class : function(o) {
8700
+ var c = '';
8701
+
8702
+ if (!o.read && !o.write) {
8703
+ c = 'elfinder-na';
8704
+ } else if (!o.read) {
8705
+ c = 'elfinder-wo';
8706
+ } else if (!o.write) {
8707
+ c = 'elfinder-ro';
 
 
 
 
 
 
 
 
8708
  }
8709
 
8710
+ if (o.type) {
8711
+ c += ' elfinder-' + this.escape(o.type);
8712
+ }
8713
 
8714
+ return c;
 
 
8715
  },
8716
 
8717
  /**
8718
+ * Return localized string with file permissions
8719
+ *
8720
+ * @param Object file
8721
+ * @return String
8722
  */
8723
+ formatPermissions : function(f) {
8724
+ var p = [];
8725
+
8726
+ f.read && p.push(this.i18n('read'));
8727
+ f.write && p.push(this.i18n('write'));
8728
+
8729
+ return p.length ? p.join(' '+this.i18n('and')+' ') : this.i18n('noaccess');
8730
+ },
8731
+
8732
+ /**
8733
+ * Return formated file size
8734
+ *
8735
+ * @param Number file size
8736
+ * @return String
8737
+ */
8738
+ formatSize : function(s) {
8739
+ var n = 1, u = 'b';
8740
+
8741
+ if (s == 'unknown') {
8742
+ return this.i18n('unknown');
8743
+ }
8744
+
8745
+ if (s > 1073741824) {
8746
+ n = 1073741824;
8747
+ u = 'GB';
8748
+ } else if (s > 1048576) {
8749
+ n = 1048576;
8750
+ u = 'MB';
8751
+ } else if (s > 1024) {
8752
+ n = 1024;
8753
+ u = 'KB';
8754
+ }
8755
+ s = s/n;
8756
+ return (s > 0 ? n >= 1048576 ? s.toFixed(2) : Math.round(s) : 0) +' '+u;
8757
  },
8758
 
8759
  /**
8760
+ * Return formated file mode by options.fileModeStyle
8761
+ *
8762
+ * @param String file mode
8763
+ * @param String format style
8764
+ * @return String
 
 
 
 
 
 
 
 
 
8765
  */
8766
+ formatFileMode : function(p, style) {
8767
+ var i, o, s, b, sticy, suid, sgid, str, oct;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8768
 
8769
+ if (!style) {
8770
+ style = this.options.fileModeStyle.toLowerCase();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8771
  }
8772
+ p = $.trim(p);
8773
+ if (p.match(/[rwxs-]{9}$/i)) {
8774
+ str = p = p.substr(-9);
8775
+ if (style == 'string') {
8776
+ return str;
8777
+ }
8778
+ oct = '';
8779
+ s = 0;
8780
+ for (i=0; i<7; i=i+3) {
8781
+ o = p.substr(i, 3);
8782
+ b = 0;
8783
+ if (o.match(/[r]/i)) {
8784
+ b += 4;
8785
+ }
8786
+ if (o.match(/[w]/i)) {
8787
+ b += 2;
8788
+ }
8789
+ if (o.match(/[xs]/i)) {
8790
+ if (o.match(/[xs]/)) {
8791
+ b += 1;
8792
+ }
8793
+ if (o.match(/[s]/i)) {
8794
+ if (i == 0) {
8795
+ s += 4;
8796
+ } else if (i == 3) {
8797
+ s += 2;
8798
  }
8799
+ }
 
 
 
 
8800
  }
8801
+ oct += b.toString(8);
8802
  }
8803
+ if (s) {
8804
+ oct = s.toString(8) + oct;
8805
+ }
8806
+ } else {
8807
+ p = parseInt(p, 8);
8808
+ oct = p? p.toString(8) : '';
8809
+ if (!p || style == 'octal') {
8810
+ return oct;
8811
+ }
8812
+ o = p.toString(8);
8813
+ s = 0;
8814
+ if (o.length > 3) {
8815
+ o = o.substr(-4);
8816
+ s = parseInt(o.substr(0, 1), 8);
8817
+ o = o.substr(1);
8818
+ }
8819
+ sticy = ((s & 1) == 1); // not support
8820
+ sgid = ((s & 2) == 2);
8821
+ suid = ((s & 4) == 4);
8822
+ str = '';
8823
+ for(i=0; i<3; i++) {
8824
+ if ((parseInt(o.substr(i, 1), 8) & 4) == 4) {
8825
+ str += 'r';
8826
+ } else {
8827
+ str += '-';
8828
+ }
8829
+ if ((parseInt(o.substr(i, 1), 8) & 2) == 2) {
8830
+ str += 'w';
8831
+ } else {
8832
+ str += '-';
8833
+ }
8834
+ if ((parseInt(o.substr(i, 1), 8) & 1) == 1) {
8835
+ str += ((i==0 && suid)||(i==1 && sgid))? 's' : 'x';
8836
+ } else {
8837
+ str += '-';
8838
  }
 
 
 
 
 
 
8839
  }
8840
+ }
8841
+ if (style == 'both') {
8842
+ return str + ' (' + oct + ')';
8843
+ } else if (style == 'string') {
8844
+ return str;
8845
  } else {
8846
+ return oct;
8847
  }
 
 
8848
  },
8849
 
8850
  /**
8851
+ * Regist this.decodeRawString function
8852
+ *
8853
+ * @return void
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8854
  */
8855
+ registRawStringDecoder : function(rawStringDecoder) {
8856
+ if ($.isFunction(rawStringDecoder)) {
8857
+ this.decodeRawString = this.options.rawStringDecoder = rawStringDecoder;
8858
+ }
8859
+ },
8860
+
8861
+ /**
8862
+ * Return boolean that uploadable MIME type into target folder
8863
+ *
8864
+ * @param String mime MIME type
8865
+ * @param String target target folder hash
8866
+ * @return Bool
8867
+ */
8868
+ uploadMimeCheck : function(mime, target) {
8869
+ target = target || this.cwd().hash;
8870
+ var res = true, // default is allow
8871
+ mimeChecker = this.option('uploadMime', target),
8872
+ allow,
8873
+ deny,
8874
+ check = function(checker) {
8875
+ var ret = false;
8876
+ if (typeof checker === 'string' && checker.toLowerCase() === 'all') {
8877
+ ret = true;
8878
+ } else if (Array.isArray(checker) && checker.length) {
8879
+ $.each(checker, function(i, v) {
8880
+ v = v.toLowerCase();
8881
+ if (v === 'all' || mime.indexOf(v) === 0) {
8882
+ ret = true;
8883
+ return false;
8884
+ }
8885
+ });
8886
  }
8887
+ return ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8888
  };
8889
+ if (mime && $.isPlainObject(mimeChecker)) {
8890
+ mime = mime.toLowerCase();
8891
+ allow = check(mimeChecker.allow);
8892
+ deny = check(mimeChecker.deny);
8893
+ if (mimeChecker.firstOrder === 'allow') {
8894
+ res = false; // default is deny
8895
+ if (! deny && allow === true) { // match only allow
8896
+ res = true;
8897
+ }
8898
+ } else {
8899
+ res = true; // default is allow
8900
+ if (deny === true && ! allow) { // match only deny
8901
+ res = false;
8902
+ }
 
 
 
 
 
 
 
 
8903
  }
8904
  }
8905
+ return res;
 
8906
  },
8907
 
8908
  /**
8909
+ * call chained sequence of async deferred functions
8910
  *
8911
+ * @param Array tasks async functions
8912
+ * @return Object jQuery.Deferred
 
 
8913
  */
8914
+ sequence : function(tasks) {
8915
+ var l = tasks.length,
8916
+ chain = function(task, idx) {
8917
+ ++idx;
8918
+ if (tasks[idx]) {
8919
+ return chain(task.then(tasks[idx]), idx);
8920
+ } else {
8921
+ return task;
8922
+ }
8923
+ };
8924
+ if (l > 1) {
8925
+ return chain(tasks[0](), 0);
8926
+ } else {
8927
+ return tasks[0]();
 
 
8928
  }
8929
+ },
8930
+
8931
+ /**
8932
+ * Reload contents of target URL for clear browser cache
8933
+ *
8934
+ * @param String url target URL
8935
+ * @return Object jQuery.Deferred
8936
+ */
8937
+ reloadContents : function(url) {
8938
+ var dfd = $.Deferred(),
8939
+ ifm;
8940
+ try {
8941
+ ifm = $('<iframe width="1" height="1" scrolling="no" frameborder="no" style="position:absolute; top:-1px; left:-1px" crossorigin="use-credentials">')
8942
+ .attr('src', url)
8943
+ .one('load', function() {
8944
+ var ifm = $(this);
8945
+ try {
8946
+ this.contentDocument.location.reload(true);
8947
+ ifm.one('load', function() {
8948
+ ifm.remove();
8949
+ dfd.resolve();
8950
+ });
8951
+ } catch(e) {
8952
+ ifm.attr('src', '').attr('src', url).one('load', function() {
8953
+ ifm.remove();
8954
+ dfd.resolve();
8955
+ });
8956
+ }
8957
+ })
8958
+ .appendTo('body');
8959
+ } catch(e) {
8960
+ ifm && ifm.remove();
8961
+ dfd.reject();
8962
  }
8963
+ return dfd;
8964
  },
8965
 
8966
  /**
8967
+ * Make netmount option for OAuth2
8968
+ *
8969
+ * @param String protocol
8970
+ * @param String name
8971
+ * @param String host
8972
+ * @param Object opts Default {noOffline: false, root: 'root', pathI18n: 'folderId', folders: true}
8973
+ }
8974
+ *
8975
+ * @return Object
8976
+ */
8977
+ makeNetmountOptionOauth : function(protocol, name, host, opt) {
8978
+ var noOffline = typeof opt === 'boolean'? opt : null, // for backward compat
8979
+ opts = Object.assign({
8980
+ noOffline : false,
8981
+ root : 'root',
8982
+ pathI18n : 'folderId',
8983
+ folders : true
8984
+ }, (noOffline === null? (opt || {}) : {noOffline : noOffline})),
8985
+ addFolders = function(fm, bro, folders) {
8986
+ var self = this,
8987
+ cnt = Object.keys($.isPlainObject(folders)? folders : {}).length,
8988
+ select;
8989
+
8990
+ bro.next().remove();
8991
+ if (cnt) {
8992
+ select = $('<select class="ui-corner-all elfinder-tabstop" style="max-width:200px;">').append(
8993
+ $($.map(folders, function(n,i){return '<option value="'+fm.escape((i+'').trim())+'">'+fm.escape(n)+'</option>';}).join(''))
8994
+ ).on('change click', function(e){
8995
+ var node = $(this),
8996
+ path = node.val(),
8997
+ spn;
8998
+ self.inputs.path.val(path);
8999
+ if (opts.folders && (e.type === 'change' || node.data('current') !== path)) {
9000
+ node.next().remove();
9001
+ node.data('current', path);
9002
+ if (path != opts.root) {
9003
+ spn = spinner();
9004
+ if (xhr && xhr.state() === 'pending') {
9005
+ fm.abortXHR(xhr, { quiet: true , abort: true });
9006
+ }
9007
+ node.after(spn);
9008
+ xhr = fm.request({
9009
+ data : {cmd : 'netmount', protocol: protocol, host: host, user: 'init', path: path, pass: 'folders'},
9010
+ preventDefault : true
9011
+ }).done(function(data){
9012
+ addFolders.call(self, fm, node, data.folders);
9013
+ }).always(function() {
9014
+ fm.abortXHR(xhr, { quiet: true });
9015
+ spn.remove();
9016
+ }).xhr;
9017
+ }
9018
+ }
9019
+ });
9020
+ bro.after($('<div/>').append(select))
9021
+ .closest('.ui-dialog').trigger('tabstopsInit');
9022
+ select.trigger('focus');
9023
+ }
9024
+ },
9025
+ spinner = function() {
9026
+ return $('<div class="elfinder-netmount-spinner"/>').append('<span class="elfinder-spinner"/>');
9027
+ },
9028
+ xhr;
9029
+ return {
9030
+ vars : {},
9031
+ name : name,
9032
+ inputs: {
9033
+ offline : $('<input type="checkbox"/>').on('change', function() {
9034
+ $(this).parents('table.elfinder-netmount-tb').find('select:first').trigger('change', 'reset');
9035
+ }),
9036
+ host : $('<span><span class="elfinder-spinner"/></span><input type="hidden"/>'),
9037
+ path : $('<input type="text" value="'+opts.root+'"/>'),
9038
+ user : $('<input type="hidden"/>'),
9039
+ pass : $('<input type="hidden"/>')
9040
+ },
9041
+ select: function(fm, ev, d){
9042
+ var f = this.inputs,
9043
+ oline = f.offline,
9044
+ f0 = $(f.host[0]),
9045
+ data = d || null;
9046
+ this.vars.mbtn = f.host.closest('.ui-dialog').children('.ui-dialog-buttonpane:first').find('button.elfinder-btncnt-0');
9047
+ if (! f0.data('inrequest')
9048
+ && (f0.find('span.elfinder-spinner').length
9049
+ || data === 'reset'
9050
+ || (data === 'winfocus' && ! f0.siblings('span.elfinder-button-icon-reload').length))
9051
+ )
9052
+ {
9053
+ if (oline.parent().children().length === 1) {
9054
+ f.path.parent().prev().html(fm.i18n(opts.pathI18n));
9055
+ oline.attr('title', fm.i18n('offlineAccess'));
9056
+ oline.uniqueId().after($('<label/>').attr('for', oline.attr('id')).html(' '+fm.i18n('offlineAccess')));
9057
  }
9058
+ f0.data('inrequest', true).empty().addClass('elfinder-spinner')
9059
+ .parent().find('span.elfinder-button-icon').remove();
9060
+ fm.request({
9061
+ data : {cmd : 'netmount', protocol: protocol, host: host, user: 'init', options: {id: fm.id, offline: oline.prop('checked')? 1:0, pass: f.host[1].value}},
9062
+ preventDefault : true
9063
+ }).done(function(data){
9064
+ f0.removeClass("elfinder-spinner").html(data.body.replace(/\{msg:([^}]+)\}/g, function(whole,s1){return fm.i18n(s1, host);}));
9065
+ });
9066
+ opts.noOffline && oline.closest('tr').hide();
9067
+ } else {
9068
+ oline.closest('tr')[(opts.noOffline || f.user.val())? 'hide':'show']();
9069
+ f0.data('funcexpup') && f0.data('funcexpup')();
9070
  }
9071
+ this.vars.mbtn[$(f.host[1]).val()? 'show':'hide']();
9072
  },
9073
+ done: function(fm, data){
9074
+ var f = this.inputs,
9075
+ p = this.protocol,
9076
+ f0 = $(f.host[0]),
9077
+ f1 = $(f.host[1]),
9078
+ expires = '&nbsp;';
9079
+
9080
+ opts.noOffline && f.offline.closest('tr').hide();
9081
+ if (data.mode == 'makebtn') {
9082
+ f0.removeClass('elfinder-spinner').removeData('expires').removeData('funcexpup');
9083
+ f.host.find('input').on('mouseenter mouseleave', function(){$(this).toggleClass('ui-state-hover');});
9084
+ f1.val('');
9085
+ f.path.val(opts.root).next().remove();
9086
+ f.user.val('');
9087
+ f.pass.val('');
9088
+ ! opts.noOffline && f.offline.closest('tr').show();
9089
+ this.vars.mbtn.hide();
9090
+ } else if (data.mode == 'folders') {
9091
+ if (data.folders) {
9092
+ addFolders.call(this, fm, f.path.nextAll(':last'), data.folders);
9093
+ }
9094
+ } else {
9095
+ if (data.expires) {
9096
+ expires = '()';
9097
+ f0.data('expires', data.expires);
9098
+ }
9099
+ f0.html(host + expires).removeClass('elfinder-spinner');
9100
+ if (data.expires) {
9101
+ f0.data('funcexpup', function() {
9102
+ var rem = Math.floor((f0.data('expires') - (+new Date()) / 1000) / 60);
9103
+ if (rem < 3) {
9104
+ f0.parent().children('.elfinder-button-icon-reload').click();
9105
+ } else {
9106
+ f0.text(f0.text().replace(/\(.*\)/, '('+fm.i18n(['minsLeft', rem])+')'));
9107
+ setTimeout(function() {
9108
+ if (f0.is(':visible')) {
9109
+ f0.data('funcexpup')();
9110
+ }
9111
+ }, 60000);
9112
+ }
9113
+ });
9114
+ f0.data('funcexpup')();
9115
+ }
9116
+ if (data.reset) {
9117
+ p.trigger('change', 'reset');
9118
+ return;
9119
+ }
9120
+ f0.parent().append($('<span class="elfinder-button-icon elfinder-button-icon-reload" title="'+fm.i18n('reAuth')+'">')
9121
+ .on('click', function() {
9122
+ f1.val('reauth');
9123
+ p.trigger('change', 'reset');
9124
+ }));
9125
+ f1.val(protocol);
9126
+ this.vars.mbtn.show();
9127
+ if (data.folders) {
9128
+ addFolders.call(this, fm, f.path, data.folders);
9129
  }
9130
+ f.user.val('done');
9131
+ f.pass.val('done');
9132
+ f.offline.closest('tr').hide();
9133
  }
9134
+ f0.removeData('inrequest');
9135
+ },
9136
+ fail: function(fm, err){
9137
+ $(this.inputs.host[0]).removeData('inrequest');
9138
+ this.protocol.trigger('change', 'reset');
9139
+ },
9140
+ integrateInfo: opts.integrate
9141
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9142
  },
9143
 
9144
  /**
9145
+ * Find cwd's nodes from files
9146
  *
9147
+ * @param Array files
9148
+ * @param Object opts {firstOnly: true|false}
9149
  */
9150
+ findCwdNodes : function(files, opts) {
9151
+ var self = this,
9152
+ cwd = this.getUI('cwd'),
9153
+ cwdHash = this.cwd().hash,
9154
+ newItem = $();
9155
 
9156
+ opts = opts || {};
9157
 
9158
+ $.each(files, function(i, f) {
9159
+ if (f.phash === cwdHash || self.searchStatus.state > 1) {
9160
+ newItem = newItem.add(self.cwdHash2Elm(f.hash));
9161
+ if (opts.firstOnly) {
9162
+ return false;
9163
+ }
9164
+ }
9165
+ });
9166
+
9167
+ return newItem;
9168
  },
9169
 
9170
  /**
9171
+ * Convert from relative URL to abstract URL based on current URL
9172
  *
9173
+ * @param String URL
9174
  * @return String
9175
  */
9176
+ convAbsUrl : function(url) {
9177
+ if (url.match(/^http/i)) {
9178
+ return url;
 
 
 
 
 
 
 
 
 
 
 
9179
  }
9180
+ if (url.substr(0,2) === '//') {
9181
+ return window.location.protocol + url;
 
 
 
 
 
 
 
 
 
 
 
 
9182
  }
9183
+ var root = window.location.protocol + '//' + window.location.host,
9184
+ reg = /[^\/]+\/\.\.\//,
9185
+ ret;
9186
+ if (url.substr(0, 1) === '/') {
9187
+ ret = root + url;
9188
+ } else {
9189
+ ret = root + window.location.pathname.replace(/\/[^\/]+$/, '/') + url;
9190
+ }
9191
+ ret = ret.replace('/./', '/');
9192
+ while(reg.test(ret)) {
9193
+ ret = ret.replace(reg, '');
9194
+ }
9195
+ return ret;
9196
  },
9197
 
9198
  /**
9199
+ * Is same origin to current site
9200
  *
9201
+ * @param String check url
9202
+ * @return Boolean
9203
  */
9204
+ isSameOrigin : function (checkUrl) {
9205
+ var url;
9206
+ checkUrl = this.convAbsUrl(checkUrl);
9207
+ if (location.origin && window.URL) {
9208
+ try {
9209
+ url = new URL(checkUrl);
9210
+ return location.origin === url.origin;
9211
+ } catch(e) {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9212
  }
9213
+ url = document.createElement('a');
9214
+ url.href = checkUrl;
9215
+ return location.protocol === url.protocol && location.host === url.host && location.port && url.port;
9216
  },
9217
 
9218
+ navHash2Id : function(hash) {
9219
+ return this.navPrefix + hash;
9220
+ },
9221
+
9222
+ navId2Hash : function(id) {
9223
+ return typeof(id) == 'string' ? id.substr(this.navPrefix.length) : false;
9224
+ },
9225
+
9226
+ cwdHash2Id : function(hash) {
9227
+ return this.cwdPrefix + hash;
9228
+ },
9229
+
9230
+ cwdId2Hash : function(id) {
9231
+ return typeof(id) == 'string' ? id.substr(this.cwdPrefix.length) : false;
 
 
 
 
 
 
 
 
9232
  },
9233
 
9234
  /**
9235
+ * navHash to jQuery element object
9236
+ *
9237
+ * @param String hash nav hash
9238
+ * @return Object jQuery element object
9239
  */
9240
+ navHash2Elm : function(hash) {
9241
+ return $(document.getElementById(this.navHash2Id(hash)));
 
 
 
 
 
9242
  },
9243
+
9244
  /**
9245
+ * cwdHash to jQuery element object
9246
+ *
9247
+ * @param String hash cwd hash
9248
+ * @return Object jQuery element object
9249
  */
9250
+ cwdHash2Elm : function(hash) {
9251
+ return $(document.getElementById(this.cwdHash2Id(hash)));
9252
+ },
9253
+
9254
+ isInWindow : function(elem, nochkHide) {
9255
+ var elm, rect;
9256
+ if (! (elm = elem.get(0))) {
9257
+ return false;
9258
  }
9259
+ if (! nochkHide && elm.offsetParent === null) {
9260
+ return false;
 
 
 
 
 
 
 
 
9261
  }
9262
+ rect = elm.getBoundingClientRect();
9263
+ return document.elementFromPoint(rect.left, rect.top)? true : false;
9264
  },
9265
 
9266
  /**
9267
+ * calculate elFinder node z-index
9268
  *
9269
+ * @return void
 
 
9270
  */
9271
+ zIndexCalc : function() {
9272
+ var self = this,
9273
+ node = this.getUI(),
9274
+ ni = node.css('z-index');
9275
+ if (ni && ni !== 'auto' && ni !== 'inherit') {
9276
+ self.zIndex = ni;
9277
+ } else {
9278
+ node.parents().each(function(i, n) {
9279
+ var z = $(n).css('z-index');
9280
+ if (z !== 'auto' && z !== 'inherit' && (z = parseInt(z))) {
9281
+ self.zIndex = z;
9282
+ return false;
 
 
 
 
 
 
 
 
 
 
9283
  }
9284
+ });
9285
+ }
9286
+ },
9287
+
9288
+ /**
9289
+ * Load JavaScript files
9290
+ *
9291
+ * @param Array urls to load JavaScript file URLs
9292
+ * @param Function callback call back function on script loaded
9293
+ * @param Object opts Additional options to $.ajax OR {loadType: 'tag'} to load by script tag
9294
+ * @param Object check { obj: (Object)ParentObject, name: (String)"Attribute name", timeout: (Integer)milliseconds }
9295
+ * @return elFinder
9296
+ */
9297
+ loadScript : function(urls, callback, opts, check) {
9298
+ var defOpts = {
9299
+ dataType : 'script',
9300
+ cache : true
9301
+ },
9302
+ success, cnt, scripts = {}, results = {};
9303
+
9304
+ opts = opts || {};
9305
+ if (opts.tryRequire && this.hasRequire) {
9306
+ require(urls, callback, opts.error);
9307
+ } else {
9308
+ success = function() {
9309
+ var cnt, fi, hasError;
9310
+ $.each(results, function(i, status) {
9311
+ if (status !== 'success' && status !== 'notmodified') {
9312
+ hasError = true;
9313
+ return false;
9314
  }
9315
+ });
9316
+ if (!hasError) {
9317
+ if ($.isFunction(callback)) {
9318
+ if (check) {
9319
+ if (typeof check.obj[check.name] === 'undefined') {
9320
+ cnt = check.timeout? (check.timeout / 10) : 1;
9321
+ fi = setInterval(function() {
9322
+ if (--cnt < 0 || typeof check.obj[check.name] !== 'undefined') {
9323
+ clearInterval(fi);
9324
+ callback();
9325
+ }
9326
+ }, 10);
9327
+ } else {
9328
+ callback();
9329
+ }
9330
+ } else {
9331
+ callback();
9332
  }
9333
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9334
  } else {
9335
+ if (opts.error && $.isFunction(opts.error)) {
9336
+ opts.error({ loadResults: results });
9337
+ }
9338
  }
9339
+ };
9340
+
9341
+ if (opts.loadType === 'tag') {
9342
+ $('head > script').each(function() {
9343
+ scripts[this.src] = this;
9344
+ });
9345
+ cnt = urls.length;
9346
+ $.each(urls, function(i, url) {
9347
+ var done = false,
9348
+ script;
9349
+
9350
+ if (scripts[url]) {
9351
+ results[i] = scripts[url]._error || 'success';
9352
+ (--cnt < 1) && success();
9353
+ } else {
9354
+ script = document.createElement('script');
9355
+ script.charset = opts.charset || 'UTF-8';
9356
+ $('head').append(script);
9357
+ script.onload = script.onreadystatechange = function() {
9358
+ if ( !done && (!this.readyState ||
9359
+ this.readyState === 'loaded' || this.readyState === 'complete') ) {
9360
+ done = true;
9361
+ results[i] = 'success';
9362
+ (--cnt < 1) && success();
9363
+ }
9364
+ };
9365
+ script.onerror = function(err) {
9366
+ results[i] = script._error = (err && err.type)? err.type : 'error';
9367
+ (--cnt < 1) && success();
9368
+ };
9369
+ script.src = url;
9370
+ }
9371
+ });
9372
+ } else {
9373
+ opts = $.isPlainObject(opts)? Object.assign(defOpts, opts) : defOpts;
9374
+ cnt = 0;
9375
+ (function appendScript(d, status) {
9376
+ if (d !== void(0)) {
9377
+ results[cnt++] = status;
9378
+ }
9379
+ if (urls.length) {
9380
+ $.ajax(Object.assign({}, opts, {
9381
+ url: urls.shift(),
9382
+ success: appendScript,
9383
+ error: appendScript
9384
+ }));
9385
+ } else {
9386
+ success();
9387
+ }
9388
+ })();
9389
  }
9390
  }
9391
+ return this;
 
 
 
 
 
 
9392
  },
9393
 
9394
  /**
9395
+ * Load CSS files
9396
  *
9397
+ * @param Array to load CSS file URLs
9398
+ * @param Object options
9399
+ * @return elFinder
9400
  */
9401
+ loadCss : function(urls, opts) {
9402
+ var self = this,
9403
+ clName, dfds;
9404
+ if (typeof urls === 'string') {
9405
+ urls = [ urls ];
9406
+ }
9407
+ if (opts) {
9408
+ if (opts.className) {
9409
+ clName = opts.className;
9410
+ }
9411
+ if (opts.dfd && opts.dfd.promise) {
9412
+ dfds = [];
9413
+ }
9414
+ }
9415
+ $.each(urls, function(i, url) {
9416
+ var link, df;
9417
+ url = self.convAbsUrl(url).replace(/^https?:/i, '');
9418
+ if (dfds) {
9419
+ dfds[i] = $.Deferred();
9420
+ }
9421
+ if (! $("head > link[href='+url+']").length) {
9422
+ link = document.createElement('link');
9423
+ link.type = 'text/css';
9424
+ link.rel = 'stylesheet';
9425
+ link.href = url;
9426
+ if (clName) {
9427
+ link.className = clName;
9428
+ }
9429
+ if (dfds) {
9430
+ link.onload = function() {
9431
+ dfds[i].resolve();
9432
+ };
9433
+ link.onerror = function() {
9434
+ dfds[i].reject();
9435
+ };
9436
  }
9437
+ $('head').append(link);
9438
  } else {
9439
+ dfds && dfds[i].resolve();
 
 
 
9440
  }
9441
+ });
9442
+ if (dfds) {
9443
+ $.when.apply(null, dfds).done(function() {
9444
+ opts.dfd.resolve();
9445
+ }).fail(function() {
9446
+ opts.dfd.reject();
9447
+ });
9448
  }
9449
+ return this;
9450
  },
9451
 
9452
  /**
9453
+ * Abortable async job performer
9454
  *
9455
+ * @param func Function
9456
+ * @param arr Array
9457
+ * @param opts Object
9458
+ *
9459
+ * @return Object $.Deferred that has an extended method _abort()
9460
  */
9461
+ asyncJob : function(func, arr, opts) {
9462
+ var dfrd = $.Deferred(),
9463
+ abortFlg = false,
9464
+ parms = Object.assign({
9465
+ interval : 0,
9466
+ numPerOnce : 1
9467
+ }, opts || {}),
9468
+ resArr = [],
9469
+ vars =[],
9470
+ curVars = [],
9471
+ exec,
9472
+ tm;
9473
+
9474
+ dfrd._abort = function(resolve) {
9475
+ tm && clearTimeout(tm);
9476
+ vars = [];
9477
+ abortFlg = true;
9478
+ if (dfrd.state() === 'pending') {
9479
+ dfrd[resolve? 'resolve' : 'reject'](resArr);
9480
+ }
9481
+ };
9482
+
9483
+ dfrd.fail(function() {
9484
+ dfrd._abort();
9485
+ }).always(function() {
9486
+ dfrd._abort = function() {};
9487
+ });
9488
+
9489
+ if (typeof func === 'function' && Array.isArray(arr)) {
9490
+ vars = arr.concat();
9491
+ exec = function() {
9492
+ var i, len, res;
9493
+ if (abortFlg) {
9494
+ return;
9495
+ }
9496
+ curVars = vars.splice(0, parms.numPerOnce);
9497
+ len = curVars.length;
9498
+ for (i = 0; i < len; i++) {
9499
+ if (abortFlg) {
9500
+ break;
9501
+ }
9502
+ res = func(curVars[i]);
9503
+ (res !== null) && resArr.push(res);
9504
+ }
9505
+ if (abortFlg) {
9506
+ return;
9507
+ }
9508
+ if (vars.length) {
9509
+ tm = setTimeout(exec, parms.interval);
9510
  } else {
9511
+ dfrd.resolve(resArr);
9512
  }
9513
  };
9514
+ if (vars.length) {
9515
+ tm = setTimeout(exec, 0);
9516
+ } else {
9517
+ dfrd.resolve(resArr);
9518
+ }
9519
  } else {
9520
+ dfrd.reject();
9521
  }
9522
+ return dfrd;
9523
  },
9524
 
9525
+ getSize : function(targets) {
9526
+ var self = this,
9527
+ reqs = [],
9528
+ tgtlen = targets.length,
9529
+ dfrd = $.Deferred().fail(function() {
9530
+ $.each(reqs, function(i, req) {
9531
+ if (req) {
9532
+ req.syncOnFail && req.syncOnFail(false);
9533
+ req.reject();
9534
+ }
9535
+ });
9536
+ }),
9537
+ getLeafRoots = function(file) {
9538
+ var targets = [];
9539
+ if (file.mime === 'directory') {
9540
+ $.each(self.leafRoots, function(hash, roots) {
9541
+ var phash;
9542
+ if (hash === file.hash) {
9543
+ targets.push.apply(targets, roots);
9544
+ } else {
9545
+ phash = (self.file(hash) || {}).phash;
9546
+ while(phash) {
9547
+ if (phash === file.hash) {
9548
+ targets.push.apply(targets, roots);
9549
+ }
9550
+ phash = (self.file(phash) || {}).phash;
9551
+ }
9552
+ }
9553
+ });
9554
+ }
9555
+ return targets;
9556
+ },
9557
+ checkPhash = function(hash) {
9558
+ var dfd = $.Deferred(),
9559
+ dir = self.file(hash),
9560
+ target = dir? dir.phash : hash;
9561
+ if (target && ! self.file(target)) {
9562
+ self.request({
9563
+ data : {
9564
+ cmd : 'parents',
9565
+ target : target
9566
+ },
9567
+ preventFail : true
9568
+ }).done(function() {
9569
+ self.one('parentsdone', function() {
9570
  dfd.resolve();
9571
  });
9572
+ }).fail(function() {
9573
+ dfd.resolve();
9574
+ });
9575
+ } else {
9576
+ dfd.resolve();
9577
+ }
9578
+ return dfd;
9579
+ },
9580
+ cache = function() {
9581
+ var dfd = $.Deferred(),
9582
+ cnt = Object.keys(self.leafRoots).length;
9583
+
9584
+ if (cnt > 0) {
9585
+ $.each(self.leafRoots, function(hash) {
9586
+ checkPhash(hash).done(function() {
9587
+ --cnt;
9588
+ if (cnt < 1) {
9589
+ dfd.resolve();
9590
+ }
9591
  });
9592
+ });
9593
+ } else {
9594
+ dfd.resolve();
9595
+ }
9596
+ return dfd;
9597
+ };
9598
+
9599
+ self.autoSync('stop');
9600
+ cache().done(function() {
9601
+ var files = [], grps = {}, dfds = [], cache = [], singles = {};
9602
+
9603
+ $.each(targets, function() {
9604
+ files.push.apply(files, getLeafRoots(self.file(this)));
9605
+ });
9606
+ targets.push.apply(targets, files);
9607
+
9608
+ $.each(targets, function() {
9609
+ var root = self.root(this),
9610
+ file = self.file(this);
9611
+ if (file && (file.sizeInfo || file.mime !== 'directory')) {
9612
+ cache.push($.Deferred().resolve(file.sizeInfo? file.sizeInfo : {size: file.size, dirCnt: 0, fileCnt : 1}));
9613
+ } else {
9614
+ if (! grps[root]) {
9615
+ grps[root] = [ this.toString() ];
9616
+ } else {
9617
+ grps[root].push(this.toString());
9618
  }
9619
+ }
9620
+ });
9621
+
9622
+ $.each(grps, function() {
9623
+ var idx = dfds.length;
9624
+ if (this.length === 1) {
9625
+ singles[idx] = this[0];
9626
+ }
9627
+ dfds.push(self.request({
9628
+ data : {cmd : 'size', targets : this},
9629
+ preventDefault : true
9630
+ }));
9631
+ });
9632
+ reqs.push.apply(reqs, dfds);
9633
+ dfds.push.apply(dfds, cache);
9634
+
9635
+ $.when.apply($, dfds).fail(function() {
9636
+ dfrd.reject();
9637
+ }).done(function() {
9638
+ var cache = function(h, data) {
9639
+ var file;
9640
+ if (file = self.file(h)) {
9641
+ file.sizeInfo = { isCache: true };
9642
+ $.each(['size', 'dirCnt', 'fileCnt'], function() {
9643
+ file.sizeInfo[this] = data[this] || 0;
9644
+ });
9645
+ file.size = parseInt(file.sizeInfo.size);
9646
+ changed.push(file);
9647
+ }
9648
+ },
9649
+ size = 0,
9650
+ fileCnt = 0,
9651
+ dirCnt = 0,
9652
+ argLen = arguments.length,
9653
+ cnts = [],
9654
+ cntsTxt = '',
9655
+ changed = [],
9656
+ i, file, data;
9657
+
9658
+ for (i = 0; i < argLen; i++) {
9659
+ data = arguments[i];
9660
+ file = null;
9661
+ if (!data.isCache) {
9662
+ if (singles[i] && (file = self.file(singles[i]))) {
9663
+ cache(singles[i], data);
9664
+ } else if (data.sizes && $.isPlainObject(data.sizes)) {
9665
+ $.each(data.sizes, function(h, sizeInfo) {
9666
+ cache(h, sizeInfo);
9667
+ });
9668
+ }
9669
+ }
9670
+ size += parseInt(data.size);
9671
+ if (fileCnt !== false) {
9672
+ if (typeof data.fileCnt === 'undefined') {
9673
+ fileCnt = false;
9674
+ }
9675
+ fileCnt += parseInt(data.fileCnt || 0);
9676
+ }
9677
+ if (dirCnt !== false) {
9678
+ if (typeof data.dirCnt === 'undefined') {
9679
+ dirCnt = false;
9680
+ }
9681
+ dirCnt += parseInt(data.dirCnt || 0);
9682
+ }
9683
+ }
9684
+ changed.length && self.change({changed: changed});
9685
+
9686
+ if (dirCnt !== false){
9687
+ cnts.push(self.i18n('folders') + ': ' + (dirCnt - (tgtlen > 1? 0 : 1)));
9688
+ }
9689
+ if (fileCnt !== false){
9690
+ cnts.push(self.i18n('files') + ': ' + fileCnt);
9691
+ }
9692
+ if (cnts.length) {
9693
+ cntsTxt = '<br>' + cnts.join(', ');
9694
+ }
9695
+ dfrd.resolve({
9696
+ size: size,
9697
+ fileCnt: fileCnt,
9698
+ dirCnt: dirCnt,
9699
+ formated: (size >= 0 ? self.formatSize(size) : self.i18n('unknown')) + cntsTxt
9700
+ });
9701
+ });
9702
+
9703
+ self.autoSync();
9704
+ });
9705
+
9706
+ return dfrd;
9707
  },
9708
 
9709
  /**
9710
+ * Gets the theme object by settings of options.themes
9711
+ *
9712
+ * @param String themeid The themeid
9713
+ * @return Object jQuery.Deferred
 
 
 
 
9714
  */
9715
+ getTheme : function(themeid) {
9716
+ var self = this,
9717
+ dfd = $.Deferred(),
9718
+ absUrl = function(url, base) {
9719
+ if (!base) {
9720
+ base = self.convAbsUrl(self.baseUrl);
9721
+ }
9722
+ if (Array.isArray(url)) {
9723
+ return $.map(url, function(v) {
9724
+ return absUrl(v, base);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9725
  });
 
9726
  } else {
9727
+ return url.match(/^(?:http|\/\/)/i)? url : base + url.replace(/^(?:\.\/|\/)/, '');
 
9728
  }
 
9729
  },
9730
+ themeObj, m;
9731
+ if (themeid && (themeObj = self.options.themes[themeid])) {
9732
+ if (typeof themeObj === 'string') {
9733
+ url = absUrl(themeObj);
9734
+ if (m = url.match(/^(.+\/)[^/]+\.json$/i)) {
9735
+ $.getJSON(url).done(function(data) {
9736
+ themeObj = data;
9737
+ themeObj.id = themeid;
9738
+ if (themeObj.cssurls) {
9739
+ themeObj.cssurls = absUrl(themeObj.cssurls, m[1]);
9740
+ }
9741
+ dfd.resolve(themeObj);
9742
+ }).fail(function() {
9743
+ dfd.reject();
9744
+ });
 
 
9745
  } else {
9746
+ dfd.resolve({
9747
+ id: themeid,
9748
+ name: themeid,
9749
+ cssurls: [url]
9750
+ });
9751
+ }
9752
+ } else if ($.isPlainObject(themeObj) && themeObj.cssurls) {
9753
+ themeObj.id = themeid;
9754
+ themeObj.cssurls = absUrl(themeObj.cssurls);
9755
+ if (!Array.isArray(themeObj.cssurls)) {
9756
+ themeObj.cssurls = [themeObj.cssurls];
9757
+ }
9758
+ if (!themeObj.name) {
9759
+ themeObj.name = themeid;
9760
+ }
9761
+ dfd.resolve(themeObj);
9762
+ } else {
9763
+ dfd.reject();
9764
+ }
9765
+ } else {
9766
+ dfd.reject();
9767
+ }
9768
+ return dfd;
9769
+ },
9770
+
9771
+ /**
9772
+ * Change current theme
9773
+ *
9774
+ * @param String themeid The themeid
9775
+ * @return Object this elFinder instance
9776
+ */
9777
+ changeTheme : function(themeid) {
9778
+ var self = this;
9779
+ if (themeid) {
9780
+ if (self.options.themes[themeid] && (!self.theme || self.theme.id !== themeid)) {
9781
+ self.getTheme(themeid).done(function(themeObj) {
9782
+ if (themeObj.cssurls) {
9783
+ $('head>link.elfinder-theme-ext').remove();
9784
+ self.loadCss(themeObj.cssurls, {
9785
+ className: 'elfinder-theme-ext',
9786
+ dfd: $.Deferred().done(function() {
9787
+ self.theme = themeObj;
9788
+ self.trigger && self.trigger('themechange');
9789
+ })
9790
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9791
  }
9792
+ });
9793
+ } else if (themeid === 'default' && self.theme) {
9794
+ $('head>link.elfinder-theme-ext').remove();
9795
+ self.theme = null;
9796
+ self.trigger && self.trigger('themechange');
 
 
 
 
9797
  }
9798
+ }
9799
+ return this;
9800
  },
9801
+
9802
  /**
9803
+ * Apply leaf root stats to target directory
9804
+ *
9805
+ * @param object dir object of target directory
9806
+ * @param boolean update is force update
9807
  *
9808
+ * @return boolean dir object was chenged
 
9809
  */
9810
+ applyLeafRootStats : function(dir, update) {
9811
+ var self = this,
9812
+ prev = update? dir : (self.file(dir.hash) || dir),
9813
+ prevTs = prev.ts,
9814
+ change = false;
9815
+ // backup original stats
9816
+ if (update || !dir._realStats) {
9817
+ dir._realStats = {
9818
+ locked: dir.locked || 0,
9819
+ dirs: dir.dirs || 0,
9820
+ ts: dir.ts
9821
+ };
9822
+ }
9823
+ // set lock
9824
+ dir.locked = 1;
9825
+ if (!prev.locked) {
9826
+ change = true;
9827
+ }
9828
+ // has leaf root to `dirs: 1`
9829
+ dir.dirs = 1;
9830
+ if (!prev.dirs) {
9831
+ change = true;
9832
+ }
9833
+ // set ts
9834
+ $.each(self.leafRoots[dir.hash], function() {
9835
+ var f = self.file(this);
9836
+ if (f && f.ts && (dir.ts || 0) < f.ts) {
9837
+ dir.ts = f.ts;
9838
  }
9839
  });
9840
+ if (prevTs !== dir.ts) {
9841
+ change = true;
9842
+ }
9843
+
9844
+ return change;
9845
  },
9846
+
9847
+ /**
9848
+ * To aborted XHR object
9849
+ *
9850
+ * @param Object xhr
9851
+ * @param Object opts
9852
+ *
9853
+ * @return void
9854
+ */
9855
+ abortXHR : function(xhr, o) {
9856
+ var opts = o || {};
9857
+
9858
+ if (xhr) {
9859
+ opts.quiet && (xhr.quiet = true);
9860
+ if (opts.abort && xhr._requestId) {
9861
+ this.request({
9862
+ data: {
9863
+ cmd: 'abort',
9864
+ id: xhr._requestId
9865
+ },
9866
+ preventDefault: true
9867
+ });
9868
+ }
9869
+ xhr.abort();
9870
+ xhr = void 0;
9871
+ }
9872
  },
9873
+
9874
+ /**
9875
+ * Gets the request identifier
9876
+ *
9877
+ * @return String The request identifier.
9878
+ */
9879
+ getRequestId : function() {
9880
+ return (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16);
9881
  },
9882
 
9883
+ /**
9884
+ * Flip key and value of array or object
9885
+ *
9886
+ * @param Array | Object { a: 1, b: 1, c: 2 }
9887
+ * @param Mixed Static value
9888
+ * @return Object { 1: "b", 2: "c" }
9889
+ */
9890
+ arrayFlip : function (trans, val) {
9891
+ var key,
9892
+ tmpArr = {},
9893
+ isArr = $.isArray(trans);
9894
+ for (key in trans) {
9895
+ if (isArr || trans.hasOwnProperty(key)) {
9896
+ tmpArr[trans[key]] = val || key;
9897
+ }
9898
+ }
9899
+ return tmpArr;
9900
  },
9901
 
9902
+ /**
9903
+ * Return array ["name without extention", "extention"]
9904
+ *
9905
+ * @param String name
9906
+ *
9907
+ * @return Array
9908
+ *
9909
+ */
9910
+ splitFileExtention : function(name) {
9911
+ var m;
9912
+ if (m = name.match(/^(.+?)?\.((?:tar\.(?:gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(?:gz|bz2)|[a-z0-9]{1,10})$/i)) {
9913
+ if (typeof m[1] === 'undefined') {
9914
+ m[1] = '';
9915
+ }
9916
+ return [m[1], m[2]];
9917
+ } else {
9918
+ return [name, ''];
9919
+ }
9920
  },
9921
 
9922
+ /**
9923
+ * Slice the ArrayBuffer by sliceSize
9924
+ *
9925
+ * @param arraybuffer arrayBuffer The array buffer
9926
+ * @param Number sliceSize The slice size
9927
+ * @return Array Array of sleced arraybuffer
9928
+ */
9929
+ sliceArrayBuffer : function(arrayBuffer, sliceSize) {
9930
+ var segments= [],
9931
+ fi = 0;
9932
+ while(fi * sliceSize < arrayBuffer.byteLength){
9933
+ segments.push(arrayBuffer.slice(fi * sliceSize, (fi + 1) * sliceSize));
9934
+ fi++;
9935
  }
9936
+ return segments;
9937
+ },
9938
+
9939
+ arrayBufferToBase64 : function(ab) {
9940
+ if (!window.btoa) {
9941
+ return '';
9942
  }
9943
+ var dView = new Uint8Array(ab), // Get a byte view
9944
+ arr = Array.prototype.slice.call(dView), // Create a normal array
9945
+ arr1 = arr.map(function(item) {
9946
+ return String.fromCharCode(item); // Convert
9947
+ });
9948
+ return window.btoa(arr1.join('')); // Form a string
9949
  },
9950
+
9951
  log : function(m) { window.console && window.console.log && window.console.log(m); return this; },
9952
 
9953
  debug : function(type, m) {
9954
  var d = this.options.debug;
9955
 
9956
+ if (d && (d === 'all' || d[type])) {
9957
  window.console && window.console.log && window.console.log('elfinder debug: ['+type+'] ['+this.id+']', m);
9958
  }
9959
 
9960
+ if (type === 'backend-error') {
9961
+ if (! this.cwd().hash || (d && (d === 'all' || d['backend-error']))) {
9962
+ m = Array.isArray(m)? m : [ m ];
9963
+ this.error(m);
9964
+ }
9965
+ } else if (type === 'backend-debug') {
9966
  this.trigger('backenddebug', m);
9967
  }
9968
 
9972
  timeEnd : function(l) { window.console && window.console.timeEnd && window.console.timeEnd(l); }
9973
 
9974
 
9975
+ };
9976
 
9977
  /**
9978
  * for conpat ex. ie8...
9993
  'propertyIsEnumerable',
9994
  'constructor'
9995
  ],
9996
+ dontEnumsLength = dontEnums.length;
9997
 
9998
  return function (obj) {
9999
+ if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
10000
 
10001
+ var result = [];
10002
 
10003
  for (var prop in obj) {
10004
+ if (hasOwnProperty.call(obj, prop)) result.push(prop);
10005
  }
10006
 
10007
  if (hasDontEnumBug) {
10008
  for (var i=0; i < dontEnumsLength; i++) {
10009
+ if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
10010
  }
10011
  }
10012
+ return result;
10013
+ };
10014
+ })();
10015
+ }
10016
+ // Array.isArray
10017
+ if (!Array.isArray) {
10018
+ Array.isArray = function(arr) {
10019
+ return jQuery.isArray(arr);
10020
+ };
10021
+ }
10022
+ // Object.assign
10023
+ if (!Object.assign) {
10024
+ Object.assign = function() {
10025
+ return jQuery.extend.apply(null, arguments);
10026
+ };
10027
+ }
10028
+ // String.repeat
10029
+ if (!String.prototype.repeat) {
10030
+ String.prototype.repeat = function(count) {
10031
+ 'use strict';
10032
+ if (this == null) {
10033
+ throw new TypeError('can\'t convert ' + this + ' to object');
10034
  }
10035
+ var str = '' + this;
10036
+ count = +count;
10037
+ if (count != count) {
10038
+ count = 0;
10039
+ }
10040
+ if (count < 0) {
10041
+ throw new RangeError('repeat count must be non-negative');
10042
+ }
10043
+ if (count == Infinity) {
10044
+ throw new RangeError('repeat count must be less than infinity');
10045
+ }
10046
+ count = Math.floor(count);
10047
+ if (str.length == 0 || count == 0) {
10048
+ return '';
10049
+ }
10050
+ // Ensuring count is a 31-bit integer allows us to heavily optimize the
10051
+ // main part. But anyway, most current (August 2014) browsers can't handle
10052
+ // strings 1 << 28 chars or longer, so:
10053
+ if (str.length * count >= 1 << 28) {
10054
+ throw new RangeError('repeat count must not overflow maximum string size');
10055
+ }
10056
+ var rpt = '';
10057
+ for (var i = 0; i < count; i++) {
10058
+ rpt += str;
10059
+ }
10060
+ return rpt;
10061
+ };
10062
+ }
10063
+ // String.trim
10064
+ if (!String.prototype.trim) {
10065
+ String.prototype.trim = function() {
10066
+ return this.replace(/^\s+|\s+$/g, '');
10067
+ };
10068
+ }
10069
+ // Array.apply
10070
+ (function () {
10071
+ try {
10072
+ Array.apply(null, {});
10073
+ return;
10074
+ } catch (e) { }
10075
+
10076
+ var toString = Object.prototype.toString,
10077
+ arrayType = '[object Array]',
10078
+ _apply = Function.prototype.apply,
10079
+ slice = /*@cc_on @if (@_jscript_version <= 5.8)
10080
+ function () {
10081
+ var a = [], i = this.length;
10082
+ while (i-- > 0) a[i] = this[i];
10083
+ return a;
10084
+ }@else@*/Array.prototype.slice/*@end@*/;
10085
+
10086
+ Function.prototype.apply = function apply(thisArg, argArray) {
10087
+ return _apply.call(this, thisArg,
10088
+ toString.call(argArray) === arrayType ? argArray : slice.call(argArray));
10089
+ };
10090
+ })();
10091
+ // Array.from
10092
+ if (!Array.from) {
10093
+ Array.from = function(obj) {
10094
+ return obj.length === 1 ? [obj[0]] : Array.apply(null, obj);
10095
+ };
10096
+ }
10097
+ // window.requestAnimationFrame and window.cancelAnimationFrame
10098
+ if (!window.cancelAnimationFrame) {
10099
+ // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
10100
+ // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
10101
+ // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
10102
+ // MIT license
10103
+ (function() {
10104
+ var lastTime = 0;
10105
+ var vendors = ['ms', 'moz', 'webkit', 'o'];
10106
+ for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
10107
+ window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
10108
+ window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']
10109
+ || window[vendors[x]+'CancelRequestAnimationFrame'];
10110
+ }
10111
+
10112
+ if (!window.requestAnimationFrame)
10113
+ window.requestAnimationFrame = function(callback, element) {
10114
+ var currTime = new Date().getTime();
10115
+ var timeToCall = Math.max(0, 16 - (currTime - lastTime));
10116
+ var id = window.setTimeout(function() { callback(currTime + timeToCall); },
10117
+ timeToCall);
10118
+ lastTime = currTime + timeToCall;
10119
+ return id;
10120
+ };
10121
+
10122
+ if (!window.cancelAnimationFrame)
10123
+ window.cancelAnimationFrame = function(id) {
10124
+ clearTimeout(id);
10125
+ };
10126
+ }());
10127
+ }
10128
 
10129
 
10130
  /*
10136
  *
10137
  * @type String
10138
  **/
10139
+ elFinder.prototype.version = '2.1.46';
10140
 
10141
 
10142
 
10155
  return true;
10156
  }
10157
  var rect = elem[0].getBoundingClientRect();
10158
+ return document.elementFromPoint(rect.left, rect.top) || document.elementFromPoint(rect.left + rect.width, rect.top + rect.height)? false : true;
10159
+ };
10160
 
10161
  if (event.type === 'mousedown' || t.options.elfRefresh) {
10162
  var i, d,
10170
  }
10171
  }
10172
  }
10173
+
10174
+ // call origin function
10175
+ return origin( t, event );
10176
+ };
10177
+ }
10178
+ }
10179
+ })();
10180
+
10181
+ /**
10182
+ *
10183
+ * jquery.binarytransport.js
10184
+ *
10185
+ * @description. jQuery ajax transport for making binary data type requests.
10186
+ * @version 1.0
10187
+ * @author Henry Algus <henryalgus@gmail.com>
10188
+ *
10189
+ */
10190
+
10191
+ // use this transport for "binary" data type
10192
+ $.ajaxTransport('+binary', function(options, originalOptions, jqXHR) {
10193
+ // check for conditions and support for blob / arraybuffer response type
10194
+ if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob)))))
10195
+ {
10196
+ var xhr;
10197
+ return {
10198
+ // create new XMLHttpRequest
10199
+ send: function(headers, callback){
10200
+ // setup all variables
10201
+ xhr = new XMLHttpRequest();
10202
+ var url = options.url,
10203
+ type = options.type,
10204
+ async = options.async || true,
10205
+ // blob or arraybuffer. Default is blob
10206
+ dataType = options.responseType || 'blob',
10207
+ data = options.data || null,
10208
+ username = options.username,
10209
+ password = options.password;
10210
+
10211
+ xhr.addEventListener('load', function(){
10212
+ var data = {};
10213
+ data[options.dataType] = xhr.response;
10214
+ // make callback and send data
10215
+ callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders());
10216
+ });
10217
+
10218
+ xhr.open(type, url, async, username, password);
10219
+
10220
+ // setup custom headers
10221
+ for (var i in headers ) {
10222
+ xhr.setRequestHeader(i, headers[i] );
10223
+ }
10224
+
10225
+ // setuo xhrFields
10226
+ if (options.xhrFields) {
10227
+ for (var key in options.xhrFields) {
10228
+ if (key in xhr) {
10229
+ xhr[key] = options.xhrFields[key];
10230
+ }
10231
+ }
10232
+ }
10233
+
10234
+ xhr.responseType = dataType;
10235
+ xhr.send(data);
10236
+ },
10237
+ abort: function(){
10238
+ xhr.abort();
10239
+ }
10240
  };
10241
  }
10242
+ });
 
10243
 
10244
  /*!
10245
  * jQuery UI Touch Punch 0.2.3
10357
  var x = event.originalEvent.changedTouches[0].screenX.toFixed(0);
10358
  var y = event.originalEvent.changedTouches[0].screenY.toFixed(0);
10359
  // Ignore if it's a "false" move (position not changed)
10360
+ if (Math.abs(posX - x) <= 4 && Math.abs(posY - y) <= 4) {
10361
  return;
10362
  }
10363
 
10409
 
10410
  if (self.element.hasClass('touch-punch')) {
10411
  // Delegate the touch handlers to the widget's element
10412
+ self.element.on({
10413
  touchstart: $.proxy(self, '_touchStart'),
10414
  touchmove: $.proxy(self, '_touchMove'),
10415
  touchend: $.proxy(self, '_touchEnd')
10429
 
10430
  if (self.element.hasClass('touch-punch')) {
10431
  // Delegate the touch handlers to the widget's element
10432
+ self.element.off({
10433
  touchstart: $.proxy(self, '_touchStart'),
10434
  touchmove: $.proxy(self, '_touchMove'),
10435
  touchend: $.proxy(self, '_touchEnd')
10442
 
10443
  })(jQuery);
10444
 
10445
+ $.fn.elfinder = function(o, o2) {
10446
 
10447
+ if (o === 'instance') {
10448
  return this.getElFinder();
10449
+ } else if (o === 'ondemand') {
10450
+
10451
  }
10452
 
10453
  return this.each(function() {
10454
 
10455
+ var cmd = typeof o === 'string' ? o : '',
10456
+ bootCallback = typeof o2 === 'function'? o2 : void(0),
10457
+ elfinder = this.elfinder,
10458
+ opts, reloadCallback;
10459
 
10460
+ if (!elfinder) {
10461
+ if ($.isPlainObject(o)) {
10462
+ new elFinder(this, o, bootCallback);
10463
+ }
10464
+ } else {
10465
+ switch(cmd) {
10466
+ case 'close':
10467
+ case 'hide':
10468
+ elfinder.hide();
10469
+ break;
10470
+
10471
+ case 'open':
10472
+ case 'show':
10473
+ elfinder.show();
10474
+ break;
10475
+
10476
+ case 'destroy':
10477
+ elfinder.destroy();
10478
+ break;
10479
 
10480
+ case 'reload':
10481
+ case 'restart':
10482
+ if (elfinder) {
10483
+ opts = $.extend(true, elfinder.options, $.isPlainObject(o2)? o2 : {});
10484
+ bootCallback = elfinder.bootCallback;
10485
+ if (elfinder.reloadCallback && $.isFunction(elfinder.reloadCallback)) {
10486
+ elfinder.reloadCallback(opts, bootCallback);
10487
+ } else {
10488
+ elfinder.destroy();
10489
+ new elFinder(this, opts, bootCallback);
10490
+ }
10491
+ }
10492
+ break;
10493
+ }
10494
  }
10495
+ });
 
10496
  };
10497
 
10498
  $.fn.getElFinder = function() {
10521
  }
10522
  };
10523
 
10524
+ // function scrollRight
10525
+ if (! $.fn.scrollRight) {
10526
+ $.fn.extend({
10527
+ scrollRight: function (val) {
10528
+ var node = this.get(0);
10529
+ if (val === undefined) {
10530
+ return Math.max(0, node.scrollWidth - (node.scrollLeft + node.clientWidth));
10531
+ }
10532
+ return this.scrollLeft(node.scrollWidth - node.clientWidth - val);
10533
+ }
10534
+ });
10535
+ }
10536
+
10537
+ // function scrollBottom
10538
+ if (! $.fn.scrollBottom) {
10539
+ $.fn.extend({
10540
+ scrollBottom: function(val) {
10541
+ var node = this.get(0);
10542
+ if (val === undefined) {
10543
+ return Math.max(0, node.scrollHeight - (node.scrollTop + node.clientHeight));
10544
+ }
10545
+ return this.scrollTop(node.scrollHeight - node.clientHeight - val);
10546
+ }
10547
+ });
10548
+ }
10549
+
10550
+
10551
+ /*
10552
+ * File: /js/elFinder.mimetypes.js
10553
+ */
10554
+
10555
+ elFinder.prototype.mimeTypes = {"application\/x-executable":"exe","application\/x-jar":"jar","application\/x-gzip":"gz","application\/x-bzip2":"tbz","application\/x-rar":"rar","text\/x-php":"php","text\/javascript":"js","application\/rtfd":"rtfd","text\/x-python":"py","text\/x-ruby":"rb","text\/x-shellscript":"sh","text\/x-perl":"pl","text\/xml":"xml","text\/x-csrc":"c","text\/x-chdr":"h","text\/x-c++src":"cpp","text\/x-c++hdr":"hh","text\/x-markdown":"md","text\/x-yaml":"yml","image\/x-ms-bmp":"bmp","image\/x-targa":"tga","image\/xbm":"xbm","image\/pxm":"pxm","audio\/wav":"wav","video\/x-dv":"dv","video\/x-ms-wmv":"wm","video\/ogg":"ogm","video\/MP2T":"m2ts","application\/x-mpegURL":"m3u8","application\/dash+xml":"mpd","application\/andrew-inset":"ez","application\/applixware":"aw","application\/atom+xml":"atom","application\/atomcat+xml":"atomcat","application\/atomsvc+xml":"atomsvc","application\/ccxml+xml":"ccxml","application\/cdmi-capability":"cdmia","application\/cdmi-container":"cdmic","application\/cdmi-domain":"cdmid","application\/cdmi-object":"cdmio","application\/cdmi-queue":"cdmiq","application\/cu-seeme":"cu","application\/davmount+xml":"davmount","application\/docbook+xml":"dbk","application\/dssc+der":"dssc","application\/dssc+xml":"xdssc","application\/ecmascript":"ecma","application\/emma+xml":"emma","application\/epub+zip":"epub","application\/exi":"exi","application\/font-tdpfr":"pfr","application\/gml+xml":"gml","application\/gpx+xml":"gpx","application\/gxf":"gxf","application\/hyperstudio":"stk","application\/inkml+xml":"ink","application\/ipfix":"ipfix","application\/java-serialized-object":"ser","application\/java-vm":"class","application\/json":"json","application\/jsonml+json":"jsonml","application\/lost+xml":"lostxml","application\/mac-binhex40":"hqx","application\/mac-compactpro":"cpt","application\/mads+xml":"mads","application\/marc":"mrc","application\/marcxml+xml":"mrcx","application\/mathematica":"ma","application\/mathml+xml":"mathml","application\/mbox":"mbox","application\/mediaservercontrol+xml":"mscml","application\/metalink+xml":"metalink","application\/metalink4+xml":"meta4","application\/mets+xml":"mets","application\/mods+xml":"mods","application\/mp21":"m21","application\/mp4":"mp4s","application\/msword":"doc","application\/mxf":"mxf","application\/octet-stream":"bin","application\/oda":"oda","application\/oebps-package+xml":"opf","application\/ogg":"ogx","application\/omdoc+xml":"omdoc","application\/onenote":"onetoc","application\/oxps":"oxps","application\/patch-ops-error+xml":"xer","application\/pdf":"pdf","application\/pgp-encrypted":"pgp","application\/pgp-signature":"asc","application\/pics-rules":"prf","application\/pkcs10":"p10","application\/pkcs7-mime":"p7m","application\/pkcs7-signature":"p7s","application\/pkcs8":"p8","application\/pkix-attr-cert":"ac","application\/pkix-cert":"cer","application\/pkix-crl":"crl","application\/pkix-pkipath":"pkipath","application\/pkixcmp":"pki","application\/pls+xml":"pls","application\/postscript":"ai","application\/prs.cww":"cww","application\/pskc+xml":"pskcxml","application\/rdf+xml":"rdf","application\/reginfo+xml":"rif","application\/relax-ng-compact-syntax":"rnc","application\/resource-lists+xml":"rl","application\/resource-lists-diff+xml":"rld","application\/rls-services+xml":"rs","application\/rpki-ghostbusters":"gbr","application\/rpki-manifest":"mft","application\/rpki-roa":"roa","application\/rsd+xml":"rsd","application\/rss+xml":"rss","application\/rtf":"rtf","application\/sbml+xml":"sbml","application\/scvp-cv-request":"scq","application\/scvp-cv-response":"scs","application\/scvp-vp-request":"spq","application\/scvp-vp-response":"spp","application\/sdp":"sdp","application\/set-payment-initiation":"setpay","application\/set-registration-initiation":"setreg","application\/shf+xml":"shf","application\/smil+xml":"smi","application\/sparql-query":"rq","application\/sparql-results+xml":"srx","application\/srgs":"gram","application\/srgs+xml":"grxml","application\/sru+xml":"sru","application\/ssdl+xml":"ssdl","application\/ssml+xml":"ssml","application\/tei+xml":"tei","application\/thraud+xml":"tfi","application\/timestamped-data":"tsd","application\/vnd.3gpp.pic-bw-large":"plb","application\/vnd.3gpp.pic-bw-small":"psb","application\/vnd.3gpp.pic-bw-var":"pvb","application\/vnd.3gpp2.tcap":"tcap","application\/vnd.3m.post-it-notes":"pwn","application\/vnd.accpac.simply.aso":"aso","application\/vnd.accpac.simply.imp":"imp","application\/vnd.acucobol":"acu","application\/vnd.acucorp":"atc","application\/vnd.adobe.air-application-installer-package+zip":"air","application\/vnd.adobe.formscentral.fcdt":"fcdt","application\/vnd.adobe.fxp":"fxp","application\/vnd.adobe.xdp+xml":"xdp","application\/vnd.adobe.xfdf":"xfdf","application\/vnd.ahead.space":"ahead","application\/vnd.airzip.filesecure.azf":"azf","application\/vnd.airzip.filesecure.azs":"azs","application\/vnd.amazon.ebook":"azw","application\/vnd.americandynamics.acc":"acc","application\/vnd.amiga.ami":"ami","application\/vnd.android.package-archive":"apk","application\/vnd.anser-web-certificate-issue-initiation":"cii","application\/vnd.anser-web-funds-transfer-initiation":"fti","application\/vnd.antix.game-component":"atx","application\/vnd.apple.installer+xml":"mpkg","application\/vnd.aristanetworks.swi":"swi","application\/vnd.astraea-software.iota":"iota","application\/vnd.audiograph":"aep","application\/vnd.blueice.multipass":"mpm","application\/vnd.bmi":"bmi","application\/vnd.businessobjects":"rep","application\/vnd.chemdraw+xml":"cdxml","application\/vnd.chipnuts.karaoke-mmd":"mmd","application\/vnd.cinderella":"cdy","application\/vnd.claymore":"cla","application\/vnd.cloanto.rp9":"rp9","application\/vnd.clonk.c4group":"c4g","application\/vnd.cluetrust.cartomobile-config":"c11amc","application\/vnd.cluetrust.cartomobile-config-pkg":"c11amz","application\/vnd.commonspace":"csp","application\/vnd.contact.cmsg":"cdbcmsg","application\/vnd.cosmocaller":"cmc","application\/vnd.crick.clicker":"clkx","application\/vnd.crick.clicker.keyboard":"clkk","application\/vnd.crick.clicker.palette":"clkp","application\/vnd.crick.clicker.template":"clkt","application\/vnd.crick.clicker.wordbank":"clkw","application\/vnd.criticaltools.wbs+xml":"wbs","application\/vnd.ctc-posml":"pml","application\/vnd.cups-ppd":"ppd","application\/vnd.curl.car":"car","application\/vnd.curl.pcurl":"pcurl","application\/vnd.dart":"dart","application\/vnd.data-vision.rdz":"rdz","application\/vnd.dece.data":"uvf","application\/vnd.dece.ttml+xml":"uvt","application\/vnd.dece.unspecified":"uvx","application\/vnd.dece.zip":"uvz","application\/vnd.denovo.fcselayout-link":"fe_launch","application\/vnd.dna":"dna","application\/vnd.dolby.mlp":"mlp","application\/vnd.dpgraph":"dpg","application\/vnd.dreamfactory":"dfac","application\/vnd.ds-keypoint":"kpxx","application\/vnd.dvb.ait":"ait","application\/vnd.dvb.service":"svc","application\/vnd.dynageo":"geo","application\/vnd.ecowin.chart":"mag","application\/vnd.enliven":"nml","application\/vnd.epson.esf":"esf","application\/vnd.epson.msf":"msf","application\/vnd.epson.quickanime":"qam","application\/vnd.epson.salt":"slt","application\/vnd.epson.ssf":"ssf","application\/vnd.eszigno3+xml":"es3","application\/vnd.ezpix-album":"ez2","application\/vnd.ezpix-package":"ez3","application\/vnd.fdf":"fdf","application\/vnd.fdsn.mseed":"mseed","application\/vnd.fdsn.seed":"seed","application\/vnd.flographit":"gph","application\/vnd.fluxtime.clip":"ftc","application\/vnd.framemaker":"fm","application\/vnd.frogans.fnc":"fnc","application\/vnd.frogans.ltf":"ltf","application\/vnd.fsc.weblaunch":"fsc","application\/vnd.fujitsu.oasys":"oas","application\/vnd.fujitsu.oasys2":"oa2","application\/vnd.fujitsu.oasys3":"oa3","application\/vnd.fujitsu.oasysgp":"fg5","application\/vnd.fujitsu.oasysprs":"bh2","application\/vnd.fujixerox.ddd":"ddd","application\/vnd.fujixerox.docuworks":"xdw","application\/vnd.fujixerox.docuworks.binder":"xbd","application\/vnd.fuzzysheet":"fzs","application\/vnd.genomatix.tuxedo":"txd","application\/vnd.geogebra.file":"ggb","application\/vnd.geogebra.tool":"ggt","application\/vnd.geometry-explorer":"gex","application\/vnd.geonext":"gxt","application\/vnd.geoplan":"g2w","application\/vnd.geospace":"g3w","application\/vnd.gmx":"gmx","application\/vnd.google-earth.kml+xml":"kml","application\/vnd.google-earth.kmz":"kmz","application\/vnd.grafeq":"gqf","application\/vnd.groove-account":"gac","application\/vnd.groove-help":"ghf","application\/vnd.groove-identity-message":"gim","application\/vnd.groove-injector":"grv","application\/vnd.groove-tool-message":"gtm","application\/vnd.groove-tool-template":"tpl","application\/vnd.groove-vcard":"vcg","application\/vnd.hal+xml":"hal","application\/vnd.handheld-entertainment+xml":"zmm","application\/vnd.hbci":"hbci","application\/vnd.hhe.lesson-player":"les","application\/vnd.hp-hpgl":"hpgl","application\/vnd.hp-hpid":"hpid","application\/vnd.hp-hps":"hps","application\/vnd.hp-jlyt":"jlt","application\/vnd.hp-pcl":"pcl","application\/vnd.hp-pclxl":"pclxl","application\/vnd.hydrostatix.sof-data":"sfd-hdstx","application\/vnd.ibm.minipay":"mpy","application\/vnd.ibm.modcap":"afp","application\/vnd.ibm.rights-management":"irm","application\/vnd.ibm.secure-container":"sc","application\/vnd.iccprofile":"icc","application\/vnd.igloader":"igl","application\/vnd.immervision-ivp":"ivp","application\/vnd.immervision-ivu":"ivu","application\/vnd.insors.igm":"igm","application\/vnd.intercon.formnet":"xpw","application\/vnd.intergeo":"i2g","application\/vnd.intu.qbo":"qbo","application\/vnd.intu.qfx":"qfx","application\/vnd.ipunplugged.rcprofile":"rcprofile","application\/vnd.irepository.package+xml":"irp","application\/vnd.is-xpr":"xpr","application\/vnd.isac.fcs":"fcs","application\/vnd.jam":"jam","application\/vnd.jcp.javame.midlet-rms":"rms","application\/vnd.jisp":"jisp","application\/vnd.joost.joda-archive":"joda","application\/vnd.kahootz":"ktz","application\/vnd.kde.karbon":"karbon","application\/vnd.kde.kchart":"chrt","application\/vnd.kde.kformula":"kfo","application\/vnd.kde.kivio":"flw","application\/vnd.kde.kontour":"kon","application\/vnd.kde.kpresenter":"kpr","application\/vnd.kde.kspread":"ksp","application\/vnd.kde.kword":"kwd","application\/vnd.kenameaapp":"htke","application\/vnd.kidspiration":"kia","application\/vnd.kinar":"kne","application\/vnd.koan":"skp","application\/vnd.kodak-descriptor":"sse","application\/vnd.las.las+xml":"lasxml","application\/vnd.llamagraphics.life-balance.desktop":"lbd","application\/vnd.llamagraphics.life-balance.exchange+xml":"lbe","application\/vnd.lotus-1-2-3":123,"application\/vnd.lotus-approach":"apr","application\/vnd.lotus-freelance":"pre","application\/vnd.lotus-notes":"nsf","application\/vnd.lotus-organizer":"org","application\/vnd.lotus-screencam":"scm","application\/vnd.lotus-wordpro":"lwp","application\/vnd.macports.portpkg":"portpkg","application\/vnd.mcd":"mcd","application\/vnd.medcalcdata":"mc1","application\/vnd.mediastation.cdkey":"cdkey","application\/vnd.mfer":"mwf","application\/vnd.mfmp":"mfm","application\/vnd.micrografx.flo":"flo","application\/vnd.micrografx.igx":"igx","application\/vnd.mif":"mif","application\/vnd.mobius.daf":"daf","application\/vnd.mobius.dis":"dis","application\/vnd.mobius.mbk":"mbk","application\/vnd.mobius.mqy":"mqy","application\/vnd.mobius.msl":"msl","application\/vnd.mobius.plc":"plc","application\/vnd.mobius.txf":"txf","application\/vnd.mophun.application":"mpn","application\/vnd.mophun.certificate":"mpc","application\/vnd.mozilla.xul+xml":"xul","application\/vnd.ms-artgalry":"cil","application\/vnd.ms-cab-compressed":"cab","application\/vnd.ms-excel":"xls","application\/vnd.ms-excel.addin.macroenabled.12":"xlam","application\/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb","application\/vnd.ms-excel.sheet.macroenabled.12":"xlsm","application\/vnd.ms-excel.template.macroenabled.12":"xltm","application\/vnd.ms-fontobject":"eot","application\/vnd.ms-htmlhelp":"chm","application\/vnd.ms-ims":"ims","application\/vnd.ms-lrm":"lrm","application\/vnd.ms-officetheme":"thmx","application\/vnd.ms-pki.seccat":"cat","application\/vnd.ms-pki.stl":"stl","application\/vnd.ms-powerpoint":"ppt","application\/vnd.ms-powerpoint.addin.macroenabled.12":"ppam","application\/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm","application\/vnd.ms-powerpoint.slide.macroenabled.12":"sldm","application\/vnd.ms-powerpoint.slideshow.macroenabled.12":"ppsm","application\/vnd.ms-powerpoint.template.macroenabled.12":"potm","application\/vnd.ms-project":"mpp","application\/vnd.ms-word.document.macroenabled.12":"docm","application\/vnd.ms-word.template.macroenabled.12":"dotm","application\/vnd.ms-works":"wps","application\/vnd.ms-wpl":"wpl","application\/vnd.ms-xpsdocument":"xps","application\/vnd.mseq":"mseq","application\/vnd.musician":"mus","application\/vnd.muvee.style":"msty","application\/vnd.mynfc":"taglet","application\/vnd.neurolanguage.nlu":"nlu","application\/vnd.nitf":"ntf","application\/vnd.noblenet-directory":"nnd","application\/vnd.noblenet-sealer":"nns","application\/vnd.noblenet-web":"nnw","application\/vnd.nokia.n-gage.data":"ngdat","application\/vnd.nokia.n-gage.symbian.install":"n-gage","application\/vnd.nokia.radio-preset":"rpst","application\/vnd.nokia.radio-presets":"rpss","application\/vnd.novadigm.edm":"edm","application\/vnd.novadigm.edx":"edx","application\/vnd.novadigm.ext":"ext","application\/vnd.oasis.opendocument.chart":"odc","application\/vnd.oasis.opendocument.chart-template":"otc","application\/vnd.oasis.opendocument.database":"odb","application\/vnd.oasis.opendocument.formula":"odf","application\/vnd.oasis.opendocument.formula-template":"odft","application\/vnd.oasis.opendocument.graphics":"odg","application\/vnd.oasis.opendocument.graphics-template":"otg","application\/vnd.oasis.opendocument.image":"odi","application\/vnd.oasis.opendocument.image-template":"oti","application\/vnd.oasis.opendocument.presentation":"odp","application\/vnd.oasis.opendocument.presentation-template":"otp","application\/vnd.oasis.opendocument.spreadsheet":"ods","application\/vnd.oasis.opendocument.spreadsheet-template":"ots","application\/vnd.oasis.opendocument.text":"odt","application\/vnd.oasis.opendocument.text-master":"odm","application\/vnd.oasis.opendocument.text-template":"ott","application\/vnd.oasis.opendocument.text-web":"oth","application\/vnd.olpc-sugar":"xo","application\/vnd.oma.dd2+xml":"dd2","application\/vnd.openofficeorg.extension":"oxt","application\/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","application\/vnd.openxmlformats-officedocument.presentationml.slide":"sldx","application\/vnd.openxmlformats-officedocument.presentationml.slideshow":"ppsx","application\/vnd.openxmlformats-officedocument.presentationml.template":"potx","application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application\/vnd.openxmlformats-officedocument.spreadsheetml.template":"xltx","application\/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application\/vnd.openxmlformats-officedocument.wordprocessingml.template":"dotx","application\/vnd.osgeo.mapguide.package":"mgp","application\/vnd.osgi.dp":"dp","application\/vnd.osgi.subsystem":"esa","application\/vnd.palm":"pdb","application\/vnd.pawaafile":"paw","application\/vnd.pg.format":"str","application\/vnd.pg.osasli":"ei6","application\/vnd.picsel":"efif","application\/vnd.pmi.widget":"wg","application\/vnd.pocketlearn":"plf","application\/vnd.powerbuilder6":"pbd","application\/vnd.previewsystems.box":"box","application\/vnd.proteus.magazine":"mgz","application\/vnd.publishare-delta-tree":"qps","application\/vnd.pvi.ptid1":"ptid","application\/vnd.quark.quarkxpress":"qxd","application\/vnd.realvnc.bed":"bed","application\/vnd.recordare.musicxml":"mxl","application\/vnd.recordare.musicxml+xml":"musicxml","application\/vnd.rig.cryptonote":"cryptonote","application\/vnd.rim.cod":"cod","application\/vnd.rn-realmedia":"rm","application\/vnd.rn-realmedia-vbr":"rmvb","application\/vnd.route66.link66+xml":"link66","application\/vnd.sailingtracker.track":"st","application\/vnd.seemail":"see","application\/vnd.sema":"sema","application\/vnd.semd":"semd","application\/vnd.semf":"semf","application\/vnd.shana.informed.formdata":"ifm","application\/vnd.shana.informed.formtemplate":"itp","application\/vnd.shana.informed.interchange":"iif","application\/vnd.shana.informed.package":"ipk","application\/vnd.simtech-mindmapper":"twd","application\/vnd.smaf":"mmf","application\/vnd.smart.teacher":"teacher","application\/vnd.solent.sdkm+xml":"sdkm","application\/vnd.spotfire.dxp":"dxp","application\/vnd.spotfire.sfs":"sfs","application\/vnd.stardivision.calc":"sdc","application\/vnd.stardivision.draw":"sda","application\/vnd.stardivision.impress":"sdd","application\/vnd.stardivision.math":"smf","application\/vnd.stardivision.writer":"sdw","application\/vnd.stardivision.writer-global":"sgl","application\/vnd.stepmania.package":"smzip","application\/vnd.stepmania.stepchart":"sm","application\/vnd.sun.xml.calc":"sxc","application\/vnd.sun.xml.calc.template":"stc","application\/vnd.sun.xml.draw":"sxd","application\/vnd.sun.xml.draw.template":"std","application\/vnd.sun.xml.impress":"sxi","application\/vnd.sun.xml.impress.template":"sti","application\/vnd.sun.xml.math":"sxm","application\/vnd.sun.xml.writer":"sxw","application\/vnd.sun.xml.writer.global":"sxg","application\/vnd.sun.xml.writer.template":"stw","application\/vnd.sus-calendar":"sus","application\/vnd.svd":"svd","application\/vnd.symbian.install":"sis","application\/vnd.syncml+xml":"xsm","application\/vnd.syncml.dm+wbxml":"bdm","application\/vnd.syncml.dm+xml":"xdm","application\/vnd.tao.intent-module-archive":"tao","application\/vnd.tcpdump.pcap":"pcap","application\/vnd.tmobile-livetv":"tmo","application\/vnd.trid.tpt":"tpt","application\/vnd.triscape.mxs":"mxs","application\/vnd.trueapp":"tra","application\/vnd.ufdl":"ufd","application\/vnd.uiq.theme":"utz","application\/vnd.umajin":"umj","application\/vnd.unity":"unityweb","application\/vnd.uoml+xml":"uoml","application\/vnd.vcx":"vcx","application\/vnd.visio":"vsd","application\/vnd.visionary":"vis","application\/vnd.vsf":"vsf","application\/vnd.wap.wbxml":"wbxml","application\/vnd.wap.wmlc":"wmlc","application\/vnd.wap.wmlscriptc":"wmlsc","application\/vnd.webturbo":"wtb","application\/vnd.wolfram.player":"nbp","application\/vnd.wordperfect":"wpd","application\/vnd.wqd":"wqd","application\/vnd.wt.stf":"stf","application\/vnd.xara":"xar","application\/vnd.xfdl":"xfdl","application\/vnd.yamaha.hv-dic":"hvd","application\/vnd.yamaha.hv-script":"hvs","application\/vnd.yamaha.hv-voice":"hvp","application\/vnd.yamaha.openscoreformat":"osf","application\/vnd.yamaha.openscoreformat.osfpvg+xml":"osfpvg","application\/vnd.yamaha.smaf-audio":"saf","application\/vnd.yamaha.smaf-phrase":"spf","application\/vnd.yellowriver-custom-menu":"cmp","application\/vnd.zul":"zir","application\/vnd.zzazz.deck+xml":"zaz","application\/voicexml+xml":"vxml","application\/widget":"wgt","application\/winhlp":"hlp","application\/wsdl+xml":"wsdl","application\/wspolicy+xml":"wspolicy","application\/x-7z-compressed":"7z","application\/x-abiword":"abw","application\/x-ace-compressed":"ace","application\/x-apple-diskimage":"dmg","application\/x-authorware-bin":"aab","application\/x-authorware-map":"aam","application\/x-authorware-seg":"aas","application\/x-bcpio":"bcpio","application\/x-bittorrent":"torrent","application\/x-blorb":"blb","application\/x-bzip":"bz","application\/x-cbr":"cbr","application\/x-cdlink":"vcd","application\/x-cfs-compressed":"cfs","application\/x-chat":"chat","application\/x-chess-pgn":"pgn","application\/x-conference":"nsc","application\/x-cpio":"cpio","application\/x-csh":"csh","application\/x-debian-package":"deb","application\/x-dgc-compressed":"dgc","application\/x-director":"dir","application\/x-doom":"wad","application\/x-dtbncx+xml":"ncx","application\/x-dtbook+xml":"dtb","application\/x-dtbresource+xml":"res","application\/x-dvi":"dvi","application\/x-envoy":"evy","application\/x-eva":"eva","application\/x-font-bdf":"bdf","application\/x-font-ghostscript":"gsf","application\/x-font-linux-psf":"psf","application\/x-font-pcf":"pcf","application\/x-font-snf":"snf","application\/x-font-type1":"pfa","application\/x-freearc":"arc","application\/x-futuresplash":"spl","application\/x-gca-compressed":"gca","application\/x-glulx":"ulx","application\/x-gnumeric":"gnumeric","application\/x-gramps-xml":"gramps","application\/x-gtar":"gtar","application\/x-hdf":"hdf","application\/x-install-instructions":"install","application\/x-iso9660-image":"iso","application\/x-java-jnlp-file":"jnlp","application\/x-latex":"latex","application\/x-lzh-compressed":"lzh","application\/x-mie":"mie","application\/x-mobipocket-ebook":"prc","application\/x-ms-application":"application","application\/x-ms-shortcut":"lnk","application\/x-ms-wmd":"wmd","application\/x-ms-wmz":"wmz","application\/x-ms-xbap":"xbap","application\/x-msaccess":"mdb","application\/x-msbinder":"obd","application\/x-mscardfile":"crd","application\/x-msclip":"clp","application\/x-msdownload":"dll","application\/x-msmediaview":"mvb","application\/x-msmetafile":"wmf","application\/x-msmoney":"mny","application\/x-mspublisher":"pub","application\/x-msschedule":"scd","application\/x-msterminal":"trm","application\/x-mswrite":"wri","application\/x-netcdf":"nc","application\/x-nzb":"nzb","application\/x-pkcs12":"p12","application\/x-pkcs7-certificates":"p7b","application\/x-pkcs7-certreqresp":"p7r","application\/x-research-info-systems":"ris","application\/x-shar":"shar","application\/x-shockwave-flash":"swf","application\/x-silverlight-app":"xap","application\/x-sql":"sql","application\/x-stuffit":"sit","application\/x-stuffitx":"sitx","application\/x-subrip":"srt","application\/x-sv4cpio":"sv4cpio","application\/x-sv4crc":"sv4crc","application\/x-t3vm-image":"t3","application\/x-tads":"gam","application\/x-tar":"tar","application\/x-tcl":"tcl","application\/x-tex":"tex","application\/x-tex-tfm":"tfm","application\/x-texinfo":"texinfo","application\/x-tgif":"obj","application\/x-ustar":"ustar","application\/x-wais-source":"src","application\/x-x509-ca-cert":"der","application\/x-xfig":"fig","application\/x-xliff+xml":"xlf","application\/x-xpinstall":"xpi","application\/x-xz":"xz","application\/x-zmachine":"z1","application\/xaml+xml":"xaml","application\/xcap-diff+xml":"xdf","application\/xenc+xml":"xenc","application\/xhtml+xml":"xhtml","application\/xml":"xsl","application\/xml-dtd":"dtd","application\/xop+xml":"xop","application\/xproc+xml":"xpl","application\/xslt+xml":"xslt","application\/xspf+xml":"xspf","application\/xv+xml":"mxml","application\/yang":"yang","application\/yin+xml":"yin","application\/zip":"zip","audio\/adpcm":"adp","audio\/basic":"au","audio\/midi":"mid","audio\/mp4":"m4a","audio\/mpeg":"mpga","audio\/ogg":"oga","audio\/s3m":"s3m","audio\/silk":"sil","audio\/vnd.dece.audio":"uva","audio\/vnd.digital-winds":"eol","audio\/vnd.dra":"dra","audio\/vnd.dts":"dts","audio\/vnd.dts.hd":"dtshd","audio\/vnd.lucent.voice":"lvp","audio\/vnd.ms-playready.media.pya":"pya","audio\/vnd.nuera.ecelp4800":"ecelp4800","audio\/vnd.nuera.ecelp7470":"ecelp7470","audio\/vnd.nuera.ecelp9600":"ecelp9600","audio\/vnd.rip":"rip","audio\/webm":"weba","audio\/x-aac":"aac","audio\/x-aiff":"aif","audio\/x-caf":"caf","audio\/x-flac":"flac","audio\/x-matroska":"mka","audio\/x-mpegurl":"m3u","audio\/x-ms-wax":"wax","audio\/x-ms-wma":"wma","audio\/x-pn-realaudio":"ram","audio\/x-pn-realaudio-plugin":"rmp","audio\/xm":"xm","chemical\/x-cdx":"cdx","chemical\/x-cif":"cif","chemical\/x-cmdf":"cmdf","chemical\/x-cml":"cml","chemical\/x-csml":"csml","chemical\/x-xyz":"xyz","font\/collection":"ttc","font\/otf":"otf","font\/ttf":"ttf","font\/woff":"woff","font\/woff2":"woff2","image\/cgm":"cgm","image\/g3fax":"g3","image\/gif":"gif","image\/ief":"ief","image\/jpeg":"jpeg","image\/ktx":"ktx","image\/png":"png","image\/prs.btif":"btif","image\/sgi":"sgi","image\/svg+xml":"svg","image\/tiff":"tiff","image\/vnd.adobe.photoshop":"psd","image\/vnd.dece.graphic":"uvi","image\/vnd.djvu":"djvu","image\/vnd.dvb.subtitle":"sub","image\/vnd.dwg":"dwg","image\/vnd.dxf":"dxf","image\/vnd.fastbidsheet":"fbs","image\/vnd.fpx":"fpx","image\/vnd.fst":"fst","image\/vnd.fujixerox.edmics-mmr":"mmr","image\/vnd.fujixerox.edmics-rlc":"rlc","image\/vnd.ms-modi":"mdi","image\/vnd.ms-photo":"wdp","image\/vnd.net-fpx":"npx","image\/vnd.wap.wbmp":"wbmp","image\/vnd.xiff":"xif","image\/webp":"webp","image\/x-3ds":"3ds","image\/x-cmu-raster":"ras","image\/x-cmx":"cmx","image\/x-freehand":"fh","image\/x-icon":"ico","image\/x-mrsid-image":"sid","image\/x-pcx":"pcx","image\/x-pict":"pic","image\/x-portable-anymap":"pnm","image\/x-portable-bitmap":"pbm","image\/x-portable-graymap":"pgm","image\/x-portable-pixmap":"ppm","image\/x-rgb":"rgb","image\/x-xpixmap":"xpm","image\/x-xwindowdump":"xwd","message\/rfc822":"eml","model\/iges":"igs","model\/mesh":"msh","model\/vnd.collada+xml":"dae","model\/vnd.dwf":"dwf","model\/vnd.gdl":"gdl","model\/vnd.gtw":"gtw","model\/vnd.vtu":"vtu","model\/vrml":"wrl","model\/x3d+binary":"x3db","model\/x3d+vrml":"x3dv","model\/x3d+xml":"x3d","text\/cache-manifest":"appcache","text\/calendar":"ics","text\/css":"css","text\/csv":"csv","text\/html":"html","text\/n3":"n3","text\/plain":"txt","text\/prs.lines.tag":"dsc","text\/richtext":"rtx","text\/sgml":"sgml","text\/tab-separated-values":"tsv","text\/troff":"t","text\/turtle":"ttl","text\/uri-list":"uri","text\/vcard":"vcard","text\/vnd.curl":"curl","text\/vnd.curl.dcurl":"dcurl","text\/vnd.curl.mcurl":"mcurl","text\/vnd.curl.scurl":"scurl","text\/vnd.fly":"fly","text\/vnd.fmi.flexstor":"flx","text\/vnd.graphviz":"gv","text\/vnd.in3d.3dml":"3dml","text\/vnd.in3d.spot":"spot","text\/vnd.sun.j2