From ccab226e12eea9566546f77f54c9360fa90eb6e3 Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Tue, 4 Dec 2018 20:35:06 +0100 Subject: [PATCH] added elfinder module --- sites/all/libraries/elfinder/.gitignore | 12 + sites/all/libraries/elfinder/Changelog | 1012 + sites/all/libraries/elfinder/LICENSE.md | 15 + sites/all/libraries/elfinder/README.md | 214 + sites/all/libraries/elfinder/bower.json | 28 + sites/all/libraries/elfinder/composer.json | 39 + .../libraries/elfinder/css/elfinder.full.css | 5117 +++ .../libraries/elfinder/css/elfinder.min.css | 9 + sites/all/libraries/elfinder/css/theme.css | 349 + sites/all/libraries/elfinder/elfinder.html | 73 + .../libraries/elfinder/elfinder.legacy.html | 91 + sites/all/libraries/elfinder/files/.gitkeep | 0 .../libraries/elfinder/files/.trash/.gitkeep | 0 .../libraries/elfinder/img/arrows-active.png | Bin 0 -> 152 bytes .../libraries/elfinder/img/arrows-normal.png | Bin 0 -> 169 bytes sites/all/libraries/elfinder/img/crop.gif | Bin 0 -> 323 bytes sites/all/libraries/elfinder/img/dialogs.png | Bin 0 -> 5818 bytes .../libraries/elfinder/img/edit_aceeditor.png | Bin 0 -> 514 bytes .../libraries/elfinder/img/edit_ckeditor.png | Bin 0 -> 729 bytes .../libraries/elfinder/img/edit_ckeditor5.png | Bin 0 -> 141 bytes .../elfinder/img/edit_codemirror.png | Bin 0 -> 528 bytes .../elfinder/img/edit_creativecloud.png | Bin 0 -> 659 bytes .../elfinder/img/edit_onlineconvert.png | Bin 0 -> 934 bytes .../elfinder/img/edit_pixlreditor.png | Bin 0 -> 882 bytes .../elfinder/img/edit_pixlrexpress.png | Bin 0 -> 927 bytes .../libraries/elfinder/img/edit_simplemde.png | Bin 0 -> 144 bytes .../libraries/elfinder/img/edit_tinymce.png | Bin 0 -> 242 bytes .../elfinder/img/edit_tuiimgedit.png | Bin 0 -> 189 bytes .../elfinder/img/edit_zohooffice.png | Bin 0 -> 460 bytes .../libraries/elfinder/img/editor-icons.png | Bin 0 -> 2629 bytes .../all/libraries/elfinder/img/icons-big.png | Bin 0 -> 5920 bytes .../all/libraries/elfinder/img/icons-big.svg | 292 + .../libraries/elfinder/img/icons-small.png | Bin 0 -> 3325 bytes sites/all/libraries/elfinder/img/logo.png | Bin 0 -> 4893 bytes sites/all/libraries/elfinder/img/progress.gif | Bin 0 -> 667 bytes .../libraries/elfinder/img/quicklook-bg.png | Bin 0 -> 71 bytes .../elfinder/img/quicklook-icons.png | Bin 0 -> 1604 bytes sites/all/libraries/elfinder/img/resize.png | Bin 0 -> 83 bytes .../libraries/elfinder/img/spinner-mini.gif | Bin 0 -> 1434 bytes sites/all/libraries/elfinder/img/toolbar.png | Bin 0 -> 7506 bytes .../all/libraries/elfinder/img/trashmesh.png | Bin 0 -> 164 bytes .../all/libraries/elfinder/img/tui-icon-a.svg | 235 + .../all/libraries/elfinder/img/tui-icon-b.svg | 224 + .../all/libraries/elfinder/img/tui-icon-c.svg | 224 + .../all/libraries/elfinder/img/tui-icon-d.svg | 224 + .../elfinder/img/ui-icons_ffffff_256x240.png | Bin 0 -> 3759 bytes .../elfinder/img/volume_icon_box.png | Bin 0 -> 621 bytes .../elfinder/img/volume_icon_box.svg | 1 + .../elfinder/img/volume_icon_dropbox.png | Bin 0 -> 413 bytes .../elfinder/img/volume_icon_dropbox.svg | 1 + .../elfinder/img/volume_icon_ftp.png | Bin 0 -> 371 bytes .../elfinder/img/volume_icon_ftp.svg | 1 + .../elfinder/img/volume_icon_googledrive.png | Bin 0 -> 663 bytes .../elfinder/img/volume_icon_googledrive.svg | 1 + .../elfinder/img/volume_icon_local.png | Bin 0 -> 357 bytes .../elfinder/img/volume_icon_local.svg | 1 + .../elfinder/img/volume_icon_network.png | Bin 0 -> 872 bytes .../elfinder/img/volume_icon_network.svg | 1 + .../elfinder/img/volume_icon_onedrive.png | Bin 0 -> 204 bytes .../elfinder/img/volume_icon_onedrive.svg | 1 + .../elfinder/img/volume_icon_sql.png | Bin 0 -> 572 bytes .../elfinder/img/volume_icon_sql.svg | 1 + .../elfinder/img/volume_icon_trash.png | Bin 0 -> 706 bytes .../elfinder/img/volume_icon_trash.svg | 1 + .../elfinder/img/volume_icon_zip.png | Bin 0 -> 475 bytes .../elfinder/img/volume_icon_zip.svg | 1 + .../libraries/elfinder/js/elfinder.full.js | 34270 ++++++++++++++++ .../all/libraries/elfinder/js/elfinder.min.js | 25 + .../elfinder/js/extras/editors.default.js | 2631 ++ .../elfinder/js/extras/editors.default.min.js | 2 + .../js/extras/quicklook.googledocs.js | 75 + .../js/extras/quicklook.googledocs.min.js | 1 + .../elfinder/js/i18n/elfinder.LANG.js | 580 + .../libraries/elfinder/js/i18n/elfinder.ar.js | 516 + .../libraries/elfinder/js/i18n/elfinder.bg.js | 559 + .../libraries/elfinder/js/i18n/elfinder.ca.js | 375 + .../libraries/elfinder/js/i18n/elfinder.cs.js | 566 + .../libraries/elfinder/js/i18n/elfinder.da.js | 374 + .../libraries/elfinder/js/i18n/elfinder.de.js | 550 + .../libraries/elfinder/js/i18n/elfinder.el.js | 374 + .../libraries/elfinder/js/i18n/elfinder.es.js | 546 + .../libraries/elfinder/js/i18n/elfinder.fa.js | 555 + .../elfinder/js/i18n/elfinder.fallback.js | 11 + .../libraries/elfinder/js/i18n/elfinder.fo.js | 419 + .../libraries/elfinder/js/i18n/elfinder.fr.js | 551 + .../libraries/elfinder/js/i18n/elfinder.he.js | 375 + .../libraries/elfinder/js/i18n/elfinder.hr.js | 434 + .../libraries/elfinder/js/i18n/elfinder.hu.js | 447 + .../libraries/elfinder/js/i18n/elfinder.id.js | 498 + .../libraries/elfinder/js/i18n/elfinder.it.js | 552 + .../libraries/elfinder/js/i18n/elfinder.ja.js | 574 + .../libraries/elfinder/js/i18n/elfinder.ko.js | 551 + .../libraries/elfinder/js/i18n/elfinder.nl.js | 419 + .../libraries/elfinder/js/i18n/elfinder.no.js | 374 + .../libraries/elfinder/js/i18n/elfinder.pl.js | 574 + .../elfinder/js/i18n/elfinder.pt_BR.js | 438 + .../libraries/elfinder/js/i18n/elfinder.ro.js | 417 + .../libraries/elfinder/js/i18n/elfinder.ru.js | 575 + .../libraries/elfinder/js/i18n/elfinder.si.js | 537 + .../libraries/elfinder/js/i18n/elfinder.sk.js | 566 + .../libraries/elfinder/js/i18n/elfinder.sl.js | 374 + .../libraries/elfinder/js/i18n/elfinder.sr.js | 374 + .../libraries/elfinder/js/i18n/elfinder.sv.js | 375 + .../libraries/elfinder/js/i18n/elfinder.tr.js | 576 + .../elfinder/js/i18n/elfinder.ug_CN.js | 374 + .../libraries/elfinder/js/i18n/elfinder.uk.js | 391 + .../libraries/elfinder/js/i18n/elfinder.vi.js | 374 + .../elfinder/js/i18n/elfinder.zh_CN.js | 534 + .../elfinder/js/i18n/elfinder.zh_TW.js | 520 + .../elfinder/js/i18n/help/cs.html.js | 10 + .../elfinder/js/i18n/help/en.html.js | 10 + .../elfinder/js/i18n/help/es.html.js | 10 + .../elfinder/js/i18n/help/ja.html.js | 10 + .../elfinder/js/i18n/help/ko.html.js | 10 + .../elfinder/js/i18n/help/pl.html.js | 10 + .../elfinder/js/i18n/help/ru.html.js | 10 + .../elfinder/js/i18n/help/sk.html.js | 10 + .../elfinder/js/proxy/elFinderSupportVer1.js | 408 + sites/all/libraries/elfinder/main.default.js | 160 + sites/all/libraries/elfinder/package.json | 13 + .../all/libraries/elfinder/php/.tmp/.htaccess | 2 + sites/all/libraries/elfinder/php/autoload.php | 54 + .../elfinder/php/connector.minimal.php-dist | 152 + .../php/editors/OnlineConvert/editor.php | 112 + .../php/editors/ZipArchive/editor.php | 12 + .../php/editors/ZohoOffice/editor.php | 136 + .../libraries/elfinder/php/editors/editor.php | 64 + .../libraries/elfinder/php/elFinder.class.php | 4529 ++ .../elfinder/php/elFinderConnector.class.php | 355 + .../elFinderFlysystemGoogleDriveNetmount.php | 334 + .../libraries/elfinder/php/elFinderPlugin.php | 106 + .../elfinder/php/elFinderSession.php | 237 + .../elfinder/php/elFinderSessionInterface.php | 59 + .../elfinder/php/elFinderVolumeBox.class.php | 1856 + .../php/elFinderVolumeDriver.class.php | 6982 ++++ .../php/elFinderVolumeDropbox.class.php | 1464 + .../php/elFinderVolumeDropbox2.class.php | 1492 + .../elfinder/php/elFinderVolumeFTP.class.php | 1704 + .../php/elFinderVolumeGoogleDrive.class.php | 2152 + .../php/elFinderVolumeGroup.class.php | 283 + .../elFinderVolumeLocalFileSystem.class.php | 1284 + .../php/elFinderVolumeMySQL.class.php | 938 + .../php/elFinderVolumeOneDrive.class.php | 2031 + .../php/elFinderVolumeTrash.class.php | 50 + .../php/elFinderVolumeTrashMySQL.class.php | 50 + .../all/libraries/elfinder/php/libs/GdBmp.php | 447 + sites/all/libraries/elfinder/php/mime.types | 781 + .../php/plugins/AutoResize/plugin.php | 141 + .../php/plugins/AutoRotate/plugin.php | 132 + .../php/plugins/Normalizer/plugin.php | 197 + .../elfinder/php/plugins/Sanitizer/plugin.php | 153 + .../elfinder/php/plugins/Watermark/logo.png | Bin 0 -> 8931 bytes .../elfinder/php/plugins/Watermark/plugin.php | 420 + .../elfinder/php/resources/image.png | Bin 0 -> 3626 bytes .../elfinder/php/resources/video.png | Bin 0 -> 2289 bytes sites/all/libraries/elfinder/sounds/rm.wav | Bin 0 -> 92204 bytes .../contrib/files/elfinder/CHANGELOG.txt | 11 + .../contrib/files/elfinder/LICENSE.txt | 339 + .../modules/contrib/files/elfinder/README.txt | 83 + .../files/elfinder/css/elfinder.admin.css | 5 + .../files/elfinder/css/elfinder.common.css | 27 + .../contrib/files/elfinder/css/elfinder.css | 6 + .../files/elfinder/css/elfinder.d7.css | 9 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../ui-themes/smoothness/jquery-ui.custom.css | 5 + .../ui-themes/smoothness/jquery-ui.min.css | 7 + .../smoothness/jquery-ui.structure.min.css | 5 + .../smoothness/jquery-ui.theme.min.css | 5 + .../editors/bueditor/bueditor.callback.js | 1 + .../elfinder/editors/bueditor/bueditor.inc | 23 + .../elfinder/editors/bueditor/bueditor.js | 12 + .../editors/ckeditor/ckeditor.callback.js | 30 + .../elfinder/editors/ckeditor/ckeditor.inc | 25 + .../editors/ckeditor/ckeditor.upload.inc | 53 + .../drupalnodeattach.callback.js | 5 + .../editors/fckeditor/fckeditor.callback.js | 1 + .../elfinder/editors/fckeditor/fckeditor.inc | 34 + .../editors/fckeditor/fckeditor.upload.inc | 54 + .../editors/jwysiwyg/jwysiwyg.callback.js | 1 + .../elfinder/editors/jwysiwyg/jwysiwyg.inc | 29 + .../elfinder/editors/jwysiwyg/jwysiwyg.js | 34 + .../editors/tinymce/tinymce.callback.js | 1 + .../elfinder/editors/tinymce/tinymce.inc | 24 + .../files/elfinder/editors/tinymce/tinymce.js | 27 + .../editors/wymeditor/wymeditor.callback.js | 4 + .../elfinder/editors/wymeditor/wymeditor.inc | 23 + .../elfinder/editors/wymeditor/wymeditor.js | 52 + .../elfinder/editors/yui/yui.callback.js | 5 + .../files/elfinder/editors/yui/yui.inc | 21 + .../contrib/files/elfinder/editors/yui/yui.js | 33 + .../contrib/files/elfinder/elfinder.info | 13 + .../contrib/files/elfinder/elfinder.install | 168 + .../contrib/files/elfinder/elfinder.module | 1364 + .../files/elfinder/inc/elfinder.admin.inc | 401 + .../elfinder/inc/elfinder.admin.profiles.inc | 563 + .../files/elfinder/inc/elfinder.drupal.inc | 265 + .../elfinder/inc/elfinder.drupalfs.acl.inc | 108 + .../elfinder/inc/elfinder.drupalfs.driver.inc | 652 + .../files/elfinder/js/elfinder.callback.js | 239 + .../elfinder/js/elfinder.jquery-ui.min.js | 13 + .../files/elfinder/js/elfinder.jquery.min.js | 5 + .../elfinder/js/elfinder.wysiwyg.init.js | 4 + .../contrib/files/elfinder/js/helper.js | 7 + .../modules/contrib/files/elfinder/js/info.js | 295 + .../elfinder_bueditor/elfinder_bueditor.info | 14 + .../elfinder_bueditor.module | 24 + .../elfinder_ffsel/elfinder_ffsel.info | 13 + .../elfinder_ffsel/elfinder_ffsel.module | 310 + .../modules/elfinder_ffsel/ffs.callback.js | 26 + .../tpl/elfinder-page-backend.tpl.php | 9 + .../files/elfinder/tpl/elfinder-page.tpl.php | 26 + 223 files changed, 97254 insertions(+) create mode 100644 sites/all/libraries/elfinder/.gitignore create mode 100644 sites/all/libraries/elfinder/Changelog create mode 100644 sites/all/libraries/elfinder/LICENSE.md create mode 100644 sites/all/libraries/elfinder/README.md create mode 100644 sites/all/libraries/elfinder/bower.json create mode 100644 sites/all/libraries/elfinder/composer.json create mode 100644 sites/all/libraries/elfinder/css/elfinder.full.css create mode 100644 sites/all/libraries/elfinder/css/elfinder.min.css create mode 100644 sites/all/libraries/elfinder/css/theme.css create mode 100644 sites/all/libraries/elfinder/elfinder.html create mode 100644 sites/all/libraries/elfinder/elfinder.legacy.html create mode 100644 sites/all/libraries/elfinder/files/.gitkeep create mode 100644 sites/all/libraries/elfinder/files/.trash/.gitkeep create mode 100644 sites/all/libraries/elfinder/img/arrows-active.png create mode 100644 sites/all/libraries/elfinder/img/arrows-normal.png create mode 100644 sites/all/libraries/elfinder/img/crop.gif create mode 100644 sites/all/libraries/elfinder/img/dialogs.png create mode 100644 sites/all/libraries/elfinder/img/edit_aceeditor.png create mode 100644 sites/all/libraries/elfinder/img/edit_ckeditor.png create mode 100644 sites/all/libraries/elfinder/img/edit_ckeditor5.png create mode 100644 sites/all/libraries/elfinder/img/edit_codemirror.png create mode 100644 sites/all/libraries/elfinder/img/edit_creativecloud.png create mode 100644 sites/all/libraries/elfinder/img/edit_onlineconvert.png create mode 100644 sites/all/libraries/elfinder/img/edit_pixlreditor.png create mode 100644 sites/all/libraries/elfinder/img/edit_pixlrexpress.png create mode 100644 sites/all/libraries/elfinder/img/edit_simplemde.png create mode 100644 sites/all/libraries/elfinder/img/edit_tinymce.png create mode 100644 sites/all/libraries/elfinder/img/edit_tuiimgedit.png create mode 100644 sites/all/libraries/elfinder/img/edit_zohooffice.png create mode 100644 sites/all/libraries/elfinder/img/editor-icons.png create mode 100644 sites/all/libraries/elfinder/img/icons-big.png create mode 100644 sites/all/libraries/elfinder/img/icons-big.svg create mode 100644 sites/all/libraries/elfinder/img/icons-small.png create mode 100644 sites/all/libraries/elfinder/img/logo.png create mode 100644 sites/all/libraries/elfinder/img/progress.gif create mode 100644 sites/all/libraries/elfinder/img/quicklook-bg.png create mode 100644 sites/all/libraries/elfinder/img/quicklook-icons.png create mode 100644 sites/all/libraries/elfinder/img/resize.png create mode 100644 sites/all/libraries/elfinder/img/spinner-mini.gif create mode 100644 sites/all/libraries/elfinder/img/toolbar.png create mode 100644 sites/all/libraries/elfinder/img/trashmesh.png create mode 100644 sites/all/libraries/elfinder/img/tui-icon-a.svg create mode 100644 sites/all/libraries/elfinder/img/tui-icon-b.svg create mode 100644 sites/all/libraries/elfinder/img/tui-icon-c.svg create mode 100644 sites/all/libraries/elfinder/img/tui-icon-d.svg create mode 100644 sites/all/libraries/elfinder/img/ui-icons_ffffff_256x240.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_box.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_box.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_dropbox.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_dropbox.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_ftp.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_ftp.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_googledrive.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_googledrive.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_local.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_local.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_network.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_network.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_onedrive.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_onedrive.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_sql.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_sql.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_trash.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_trash.svg create mode 100644 sites/all/libraries/elfinder/img/volume_icon_zip.png create mode 100644 sites/all/libraries/elfinder/img/volume_icon_zip.svg create mode 100644 sites/all/libraries/elfinder/js/elfinder.full.js create mode 100644 sites/all/libraries/elfinder/js/elfinder.min.js create mode 100644 sites/all/libraries/elfinder/js/extras/editors.default.js create mode 100644 sites/all/libraries/elfinder/js/extras/editors.default.min.js create mode 100644 sites/all/libraries/elfinder/js/extras/quicklook.googledocs.js create mode 100644 sites/all/libraries/elfinder/js/extras/quicklook.googledocs.min.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.LANG.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.ar.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.bg.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.ca.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.cs.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.da.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.de.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.el.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.es.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.fa.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.fallback.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.fo.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.fr.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.he.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.hr.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.hu.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.id.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.it.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.ja.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.ko.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.nl.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.no.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.pl.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.pt_BR.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.ro.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.ru.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.si.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.sk.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.sl.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.sr.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.sv.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.tr.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.ug_CN.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.uk.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.vi.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.zh_CN.js create mode 100644 sites/all/libraries/elfinder/js/i18n/elfinder.zh_TW.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/cs.html.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/en.html.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/es.html.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/ja.html.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/ko.html.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/pl.html.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/ru.html.js create mode 100644 sites/all/libraries/elfinder/js/i18n/help/sk.html.js create mode 100644 sites/all/libraries/elfinder/js/proxy/elFinderSupportVer1.js create mode 100644 sites/all/libraries/elfinder/main.default.js create mode 100644 sites/all/libraries/elfinder/package.json create mode 100644 sites/all/libraries/elfinder/php/.tmp/.htaccess create mode 100644 sites/all/libraries/elfinder/php/autoload.php create mode 100644 sites/all/libraries/elfinder/php/connector.minimal.php-dist create mode 100644 sites/all/libraries/elfinder/php/editors/OnlineConvert/editor.php create mode 100644 sites/all/libraries/elfinder/php/editors/ZipArchive/editor.php create mode 100644 sites/all/libraries/elfinder/php/editors/ZohoOffice/editor.php create mode 100644 sites/all/libraries/elfinder/php/editors/editor.php create mode 100644 sites/all/libraries/elfinder/php/elFinder.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderConnector.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderFlysystemGoogleDriveNetmount.php create mode 100644 sites/all/libraries/elfinder/php/elFinderPlugin.php create mode 100644 sites/all/libraries/elfinder/php/elFinderSession.php create mode 100644 sites/all/libraries/elfinder/php/elFinderSessionInterface.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeBox.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeDriver.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeDropbox.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeDropbox2.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeFTP.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeGoogleDrive.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeGroup.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeLocalFileSystem.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeMySQL.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeOneDrive.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeTrash.class.php create mode 100644 sites/all/libraries/elfinder/php/elFinderVolumeTrashMySQL.class.php create mode 100644 sites/all/libraries/elfinder/php/libs/GdBmp.php create mode 100644 sites/all/libraries/elfinder/php/mime.types create mode 100644 sites/all/libraries/elfinder/php/plugins/AutoResize/plugin.php create mode 100644 sites/all/libraries/elfinder/php/plugins/AutoRotate/plugin.php create mode 100644 sites/all/libraries/elfinder/php/plugins/Normalizer/plugin.php create mode 100644 sites/all/libraries/elfinder/php/plugins/Sanitizer/plugin.php create mode 100644 sites/all/libraries/elfinder/php/plugins/Watermark/logo.png create mode 100644 sites/all/libraries/elfinder/php/plugins/Watermark/plugin.php create mode 100644 sites/all/libraries/elfinder/php/resources/image.png create mode 100644 sites/all/libraries/elfinder/php/resources/video.png create mode 100644 sites/all/libraries/elfinder/sounds/rm.wav create mode 100644 sites/all/modules/contrib/files/elfinder/CHANGELOG.txt create mode 100644 sites/all/modules/contrib/files/elfinder/LICENSE.txt create mode 100644 sites/all/modules/contrib/files/elfinder/README.txt create mode 100644 sites/all/modules/contrib/files/elfinder/css/elfinder.admin.css create mode 100644 sites/all/modules/contrib/files/elfinder/css/elfinder.common.css create mode 100644 sites/all/modules/contrib/files/elfinder/css/elfinder.css create mode 100644 sites/all/modules/contrib/files/elfinder/css/elfinder.d7.css create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-icons_222222_256x240.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-icons_454545_256x240.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-icons_888888_256x240.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.custom.css create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.min.css create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.structure.min.css create mode 100644 sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.theme.min.css create mode 100644 sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.upload.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/drupalnodeattach/drupalnodeattach.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/fckeditor/fckeditor.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/fckeditor/fckeditor.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/fckeditor/fckeditor.upload.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/tinymce/tinymce.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/tinymce/tinymce.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/tinymce/tinymce.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/wymeditor/wymeditor.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/wymeditor/wymeditor.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/wymeditor/wymeditor.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/yui/yui.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/editors/yui/yui.inc create mode 100644 sites/all/modules/contrib/files/elfinder/editors/yui/yui.js create mode 100644 sites/all/modules/contrib/files/elfinder/elfinder.info create mode 100644 sites/all/modules/contrib/files/elfinder/elfinder.install create mode 100644 sites/all/modules/contrib/files/elfinder/elfinder.module create mode 100644 sites/all/modules/contrib/files/elfinder/inc/elfinder.admin.inc create mode 100644 sites/all/modules/contrib/files/elfinder/inc/elfinder.admin.profiles.inc create mode 100644 sites/all/modules/contrib/files/elfinder/inc/elfinder.drupal.inc create mode 100644 sites/all/modules/contrib/files/elfinder/inc/elfinder.drupalfs.acl.inc create mode 100644 sites/all/modules/contrib/files/elfinder/inc/elfinder.drupalfs.driver.inc create mode 100644 sites/all/modules/contrib/files/elfinder/js/elfinder.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/js/elfinder.jquery-ui.min.js create mode 100644 sites/all/modules/contrib/files/elfinder/js/elfinder.jquery.min.js create mode 100644 sites/all/modules/contrib/files/elfinder/js/elfinder.wysiwyg.init.js create mode 100644 sites/all/modules/contrib/files/elfinder/js/helper.js create mode 100644 sites/all/modules/contrib/files/elfinder/js/info.js create mode 100644 sites/all/modules/contrib/files/elfinder/modules/elfinder_bueditor/elfinder_bueditor.info create mode 100644 sites/all/modules/contrib/files/elfinder/modules/elfinder_bueditor/elfinder_bueditor.module create mode 100644 sites/all/modules/contrib/files/elfinder/modules/elfinder_ffsel/elfinder_ffsel.info create mode 100644 sites/all/modules/contrib/files/elfinder/modules/elfinder_ffsel/elfinder_ffsel.module create mode 100644 sites/all/modules/contrib/files/elfinder/modules/elfinder_ffsel/ffs.callback.js create mode 100644 sites/all/modules/contrib/files/elfinder/tpl/elfinder-page-backend.tpl.php create mode 100644 sites/all/modules/contrib/files/elfinder/tpl/elfinder-page.tpl.php diff --git a/sites/all/libraries/elfinder/.gitignore b/sites/all/libraries/elfinder/.gitignore new file mode 100644 index 00000000..a7f48027 --- /dev/null +++ b/sites/all/libraries/elfinder/.gitignore @@ -0,0 +1,12 @@ +*~ +._* +_* +.DS_Store +php-old +extensions +build +files2 +elFinderVolumeSVN.class.php +connector-svn.php +node_modules +connector.php diff --git a/sites/all/libraries/elfinder/Changelog b/sites/all/libraries/elfinder/Changelog new file mode 100644 index 00000000..46174ee1 --- /dev/null +++ b/sites/all/libraries/elfinder/Changelog @@ -0,0 +1,1012 @@ +2018-11-24 Naoki Sawada + + * elFinder (2.1.43): + + - [VD:abstract,cmd:info] Fixed #2646 volume roots option `'dirUrlOwn'` accepts value `'hide'` + - [php:plugin] Fixed #2649 disable content editing plugin when saving data in OnlineConvert + - [cmd:open] Fixed #2651 add an option `selectAction` + - [php:core] Fixed #2657 add a connector main option `throwErrorOnExec` + - [ui:cwd] Fixed #2653 correction of event handling of `input:checkbox` + - [js:core] Fixed #2660 add `requestError` event and make error message controlable + - [js:core,ui:cwd,tree] Fixed #2664 problem of handling of connector option `maxTargets` + - [php:autoload] Fixed #2672 simplified class map + - [js:core] Fixed #2674 'tooltip' conflict with Bootstrap + - [VD:abstract] Fixed #2687 add public method `getSession()` + - [ui:cwd] Fixed #2687, #2694 prevent select action of the item with CSS class "elfinder-cwd-nonselect" + - [php:core,VD] Fixed #2695 improved redundant check of archivers + - [ui:cwd] Fixed #2701 correction of oldScholl function + - [VD:abstract] Fixed #2704 correction of `mimetype()` & add an option `mimeTypeUnknown` + - [VD:abstract] Fixed #2704 use MIME-Type notified by the volume driver if detected as unknown + - [css:cwd] Fixed #2707 typo + - [js:core] Fixed #2706 add an option `i18nBaseUrl` + - [ui:toolbar] Fixed #2710 add an option `uiOptions.toolbarExtra.preferenceInContextmenu` + - [cmd:netmount] Fixed #2714 disable command if there is no protocols + - [cmd:info] Fixed #2712 remove ZWSP of the Path value with mousedown event + - [cmd:edit] Fixed #2717 encoding select box move to footer + - [css:toolbar] Fixed #2721 duplicated class name + - [js:command] Fixed #2718 add a method `fmDialog()` to add cmd class name to dialog + - [js:core] Fixed #2720 implementation of theme changer + - [cmd:empty] Fixed #2729 add check that folder is readable in getstate() + - [cmd:upload] Fixed #2725 problem of contextmenu (target selector) handling + - [VD:Group] Fixed #2730 set `copy` to disabled command + - [js:core,ui:cwd] Fixed #2730 correction of dragging icon + - [cmd:preference] Fixed #2731 add options `width`, `height` + - [cmd:rm] Fixed #2733 correction of spinner position + - [css:cwd] Fixed #2724 problem of position of perm marker in rtl + - [js:core] Fixed #2744 add class name "elfinder-err-var" to replaced word of error message + - [css:dialog] rel #2724 correction style of `td.elfinder-info-hash` + - [ui:navdock] Fixed #2747 theme support of CSS fine tuning part + - [ui:navdock] rel #2747 correction of the ui size adjustment + - [css:commands] Fixed #2748 fix spinner position in rtl and unify `elfinder-info-spinner` to `elfinder-spinner` + - [css:command] rel #2748 typo fix of "spiner" to "spinner" + - [cmd:quicklook] Fixed #2742 ViewerJS integration for PDF,ODT,ODS,ODP + - [ui:toolbar] Fixed #2751 correction rtl-toolbar (float icons in group) + - [css:toolbar] rel #2751 mirroring some icons for rtl + - [ui:cwd] Fixed #2749 show an unnecessary context menu on touch to the list header + - [cmd:resize] Fixed #2718 duplicate CSS class name + - [ui:cwd] Fixed #2749 show an unnecessary context menu on touch to the list header + - [ui:dialog] rel #2739 use CSS class `ui-corner-top` instead `ui-corner-all` + - [css:navbar] rel #2748 integrate "elfinder-navbar-spinner" into "elfinder-spinner" + - [API:upload] Fixed #2753 uploading multiple items continues uploading except error items + - [js:core] Fixed #2762 prevent useless requests when chunks uploading + - [cmd:quickllok] Fixed #2752 title bar HTML structure as well as other dialogs + - [js:core] Fixed #2764 delete padding specification by inline to maximize element + - [js:core] Fixed #2766 correction upload file size judgment + - And some minor bug fixes + + +2018-08-29 Naoki Sawada + + * elFinder (2.1.42): + - [VD:abstract] Fixed #2624 "application/xml" determines the MIME-Type with the file extension + - [cmd:quicklook] Fixed #2627 kml, kmz preview with GoogleMaps API + - [ui:statusbar] Fixed #2635 positioning design with CSS flexible box + - [cmd:rename] Fixed #2639 change cmd title to "Alias (Preference)" of the volume root + - [php:core] Fixed #2641 problem of overwrite upload of folder uploading + - [php] Fixed #2642 Measures of Ghostscript security vulnerabilities + - And some minor bug fixes + + +2018-08-19 Naoki Sawada + + * elFinder (2.1.41): + - [ui:cwd] Fixed #2583 `uiOptions.cwd.oldSchool` is no longer working + - [VD:abstract] change type from `protected` to `public` of `mimeTypeNormalize()` + - [js:core] Fixed #2591 show the toast message according with the response of connector + - [cmd:edit] Fixed #2592 to make ediable as text that the media file composed of text + - [cmd:undo/redo] Fixed #2596 bug of not updating status when elFinder into enable + - [cmd:hide] Fixed #2595 make to be able to hide selected items as personal setting + - [cmd:edit] Fixed #2565 Integrate the TUI Image Editor + - [cmd:quicklook] Fixed #2599 add controls option of HTML5 media , PDF preview + - [cmd:edit] set integrate of the "TUI Image Editor" + - [php:core] Fixed #2603 options path settings convert to absolute path + - [cmd:edit] Fixed #2569 add the photopea.com editor integration + - [cmd:upload] Fixed #2607 hash@undefined on select folder upload + - [cmd:mkfile] Fixed #2609 allow creation of various file types + - [img] Fixed #2503 make icons-big.svg and use it + - [VD:Dropbox2] Fixed options definition test (PR #2619) + - [js:core] Fixed #2616 can't close dialogelfinder if can't connect to the connector + - [php:plugin:Watermark] Fixed #2621 add option `ratio`, `position`, `marginX` and `marginY` + - And some minor bug fixes + + +2018-07-14 Naoki Sawada + + * elFinder (2.1.40): + - [php:plugin] Fixed #2532 perform folder name filtering on folder upload + - [VD:abstract] Fixed #2534 bugfix of `doSerach()` method + - [API,ui:cwd] Fixed #2535 show the remaining time until the volume expires into cwd + - [js:core] bugfix of click problem of select element of netmount oauth dialog + - [cmd:rm] Fixed #2541 to be able to customize the action of to put in the trash + - [VD:abstract] fallback imgLib to 'gd' when error in Imagick (#2544) + - [ui:dialog] Fixed #2545 problem of the mousedown event of the form element + - [VD:abstract] Fixed #2549 freezes while creating and extracting a zip/7zip archive + - [ui:dialog] Fixed #2551 trigger `dialogopen` event before open the dialog + - [ui:dialog] Fixed #2558 autoopen after creation of dialog if it has open callback + - [cmd:upload] Fixed #2559 since 2.1.30, broken paste upload on iOS + - [ui:dialog] Fixed #2560 corection of restore dialog size on maximize/minimize + - [cmd:edit,preference] Fixed #2566 add preference 'Open the maximized editor window' + - [cmd:quicklook] Fixed #2567 support Microsoft Office Online viewer + - [VD:abstract] Fixed #2564 bugfix of MIME-Type detection + - [cmd:quicklook,VD:abstract] Fixed #2575 add CAD-Files and 3D-Models online viewer on sharecad.org + - [cmd:edit] Fixed #2570 add online-convert.com integration + - [cmd:edit] Fixed #2580 fix detectation of current enabled editors + - [cmd:help] Add a tab "Integrations" to listing external services + - [cmd:edit:images] Fixed #2568 open one format save to another + - [js:core] Fixed #2582 sync size of list view column headers on browser resize + - And some minor bug fixes + + +2018-06-05 Naoki Sawada + + * elFinder (2.1.39): + - [cmd:preference] Fixed #2497 add a preference "Icon Size (Icons View)" + - [cmd:mkdir] Fixed #2466 mkdir 'Into new folder' always on + - [css] Fixed #2499 style correction to the Firefox browser + - [css] replace volume_icon_* to SVG image + - [cmd:edit] Fixed #2507 not work if the "commandsOptions.edit.editors" is empty + - [php:core] Fixed #2515 support multi Level directory creation when uploading + - [VD:abstract] Fixed #2523 thumbnail file name may exceed 255 bytes + - [VD:abstract] re-Fixed #2523 add volume id as prefix to tmbname of fallback + - [API,cmd:download] Fixed #2525 show notification dialog until browser starts downloading + - [ui:cwd] Fixed #2526 connector option `'tmbURL' => 'self'` does not work currently + - [cmd:upload] Fixed #2528 show error message "errFolderUpload" + - [ui:fullscreenbutton] Fixed #2530 wrong toolbar icon of re-fullscreen + - [VD:abstract,security] add "pht:*", "php7:*" to default option `staticMineMap` + - [cmd:upload] Fixed #2531 upload buttons are not working in Firefox + - And some minor bug fixes + + +2018-05-05 Naoki Sawada + + * elFinder (2.1.38): + - [js:dialogelfinder] Re-fixed #2401 remove deprecated functions of jQuery + - [cmd:info,help] Fixed #2445 add user preference `Info Items (Selection Info Panel)` + - [php:core] More secure processing of `zipdl()` + - [VD:abstract] Fixed #2450 correction of `getContentUrl()` (when $this->root is "/") + - [js:core] Fixed #2453 handling back button press to close dialog + - [cmd:opennew] Fixed #2457 new command "Open in new window" for the folder + - [cmd:preference] Fixed #2458 move settings from "Preference" tab + - [cmd:mkdir] Fixed #2466 'Into new folder' always on (toolbar button) + - [css:common] Fixed #2469 to disable resizable in fullscreen mode + - [cmd:sort] Fixed #2472 keep stay the context menu when choosing the sort menu + - [VD:GoogleDrive] Fixed #2473 not use undefined variable + - [ui:tree] Fixed #2485 add an option `uiOptions.tree.durations` + - [ui:toast] Fixed #2487 add an option `uiOptions.toast.defaults` + - [js] Performance tuning + - [VD,cmd:search] Fixed #2490 support custom search method + - [cmd:quicklook] support AMR Audio, FLV Video preview + - And some minor bug fixes + + +2018-03-28 Naoki Sawada + + * elFinder (2.1.37): + - [php:security] re-fix directory traversal vulnerability for windows server + + +2018-03-28 Naoki Sawada + + * elFinder (2.1.36): + - [js:core] Fixed #2433 cwdOptions becomes trash folder's options when folder restoring + - [php:plugin:sanitizer] add on option `callBack` (#2432) + - [ui:uploadbutton] Fixed #2435 can't upload + - [cmd:upload] Fixed #2436 can’t upload with state that one file selected in cwd + - [VD:abstract] Fixed #2425 adjustment of `internal_encoding` setting + - [php:security] correction of symbolic link determination + - [cmd:rename] bugfix of undo/redo functions + - [php:plugin] add option onDropWith for plugin function iaEnabled (#2442) + - [cmd:paste] Fixed #2439 missing `src` param on API < 2.1 + - [proxy:Ver1] correction of response data normalization on paste + - [php:security] fix directory traversal vulnerability + - And some minor bug fixes + + +2018-03-21 Naoki Sawada + + * elFinder (2.1.35): + - [cmd:upload] notify progress data to dfrd.progress in uploading + - [VD:LocalFileSystem,OneDrive] fix wrong result of isNameExists() + - [ui:dialog] Fixed #2431 form elements can not get focus with mouse down + - And some minor bug fixes + + +2018-03-18 Naoki Sawada + + * elFinder (2.1.34): + - [VD:abstract] Fixed #2423 no longer running under PHP < 5.4 + - [cmd:mkdir] Fixed #2422 bugfix of behavior of mkdir on navbar + - And some minor bug fixes + + +2018-03-14 Naoki Sawada + + * elFinder (2.1.33): + - [cmd:upload] Fixed #2379 icon of target folder list is not shown + - [js:core] Fixed #2378 sometime can't upload from directory selector + - [cmd:edit] Fixed #2381 trigger event "editEditorPrepare" before build editor + - [cmd:edit] Fixed #2382 can't reopen editor on return from canceling SaveAs from cancel action + - [cmd:edit] Fixed #2383 can't use CodeMirror, SimpleMDE with require.js + - [VD:MySQL] Fixed #2384 infinitely loop on search if root has parent_id + - [js:extras:editors] add CKEditor5 editor + - [js,css] Fixed #2390 optimization to mobile devices + - [cmd:search] Fixed #2392 broken search design in current nightlty + - [php:core] Fixed #2393 strange corruption of PHP internal_encoding + - [js] Fixed #2401 remove deprecated functions of jQuery + - [js] Fixed #2401 change `on('hover')` to `on('mouseenter mouseleave')` + - [php:core] Fixed #2402 add an option `memoryLimitGD` to connector main options + - [js:core] Fixed #2403 backward compatibility with API 2.0 is broken + - [cmd:edit] Fixed #2405 mount the zip archive to edit archive contents + - [VD:abstract] Fixed #2407 include the leaf root into search results + - [VD:abstract] Fixed #2408 have the generic archive function for remote volume + - [js:core] optimization of handling of leafRoots + - [cmd:netmount] also unmount volumes included in volume to be unmounted + - [i18n:LANG] add 'reflectOnImmediate','reflectOnUnmount','unmountChildren' + - [cmd:netmount] follow the tree in reverse and unmount them in order + - [php:core] add 'netmount' to `sessionUseCmds` for handle requests synchronously on unmount + - [VD:Group] correction of `dirs` result of root stat + - [VD] allow uploading all file types to the net mount volume + - [cmd:quicklook] add the MarkDown viewer with marked.js + - [js:core] Fixed #2413 problem that unnecessary "remove" event fires on upload + - [cmd:info] show the md5, sha256 contents hashes + - [cmd:help] add preference "Algorithms to show the file hash" + - [js:rename] Fixed #2419 allow rename of the volume root name + - And some minor bug fixes + + +2018-02-07 Naoki Sawada + + * elFinder (2.1.32): + - [js:extras:editors.default] Fixed problem of initial widh of Zoho editor + - [cmd:quicklook] Fixed #2346 conflict of `update` event with prototype.js + - [php:core] Fixed #2345 aFixeddd the warning about object injection attacks + - [VD:Dropbox2] Fixed #2348 edit File not respecting filename capitalization + - [js:extras:editors] Fixed #2319 supports local CKEditor + - [js:core] bugfix of sort by timestamp about unknown values + - [ui:dialog] Fixed size restoration problem from maximized dialog + - [ui:dialog] bugfix of when closes editing dialog of maximized + - [VD:abstract] Fixed #2352 problem of detect MIME-Type as 'unknown' with the empty file + - [cmd:open] Fixed #2359 can't open with "open" of "Action when select file" + - [VD:abstract] update `mimeMap` of default options + - [VD:TrashMySQL] add a new volume "TrashMySQL" + - [php:core] Fixed #2365 make custom data controllable from the connector side + - [VD:MySQL] bugfix that it was not possible to set as root path other than the root id + - [api:put] allow puts by the self item hash + - [i18n] correction of confirm message when duplicate upload + - [i18n] Fixed #2369 modify wording of 'confirmRepl' + - [cmd:help] Fixed #2370 add "Column setting" to Preferences tab + - [i18n:LANG] add `'columnPref': 'Columns settings (List view)'` + - And some minor bug fixes + + +2017-12-27 Naoki Sawada + + * elFinder (2.1.31): + - [ui:dialog] bugfix that used dialog is not removed + - [cmd:rename,resources:mixin] bugfix that can't access filename edit area with mobile devices + - [ui:cwd,ui:tree] Fixed #2303 UX at rename is not good + - [cmd:rename] Fixed #2308 rename multiple items at once + - [cmd:rename] Fixed #2315 add batch rename function + - [js:core] Fixed #2320 problem that rename on upload don't work with FormData + - [cmd:rm] fix problem of contentmenu extra button "Remove" not work on tree + - [cmd:quicklook] add "RAR Archive" preview + - [js:core] bugfix of registration `of fm.decodeRawString` by `fm.options.rawStringDecoder` + - [php:core] Fixed #2312 can't upload by "paste url or images" on IE + - [cmd:mkdir] fixed #2326 became can not be create folder on the tree + - [VD:abstract] Fixed #2329 problem of getFullPath() with without folder name + - [js:core] Fixed #2332 CORS detection gives false positive on IE11 + - [ui:dialog] Fixed #2331 add CSS class name to dialog buttons + - [cmd:quicklook] show file size of the Archive preview + - [js:core] fix problem that options.drawString encoder does not effect + - Fixed #2336 'jp' isn't a Japanese in ISO-639 correctly it's a 'ja' + - [js:core] Fixed #2337 prevent request initial request is completed + - [js:options] allow empty value of cdns to disable it + - [js:resouces,cmd:rename] Fixed #2343 can't close error dialog in item name editing + - And some minor bug fixes + + +2017-11-29 Naoki Sawada + + * elFinder (2.1.30): + - [js:core] Fixed #2238 always same filename on upload with some iOS devices + - [js:core] Fixed #2240 correspond to parallel request in "Cancel" in notify dialog + - [VD:FTP] Fixed #2243 problem of symlink handling + - [ui:cwd] bug fix of contextmenu on the "Old School" + - [cmd:quicklook] Fixed #2249 close-able docked preview window + - [api] cmd `size` can return size infomation of each targets as `sizes` + - [api] accept HTTP header "X-elFinderReqid" + - [cmd:quicklook:plain text] show all contents with click an element `charsLeft` + - [VD:abstract] Fixed #2253 `elFinderVolumeDriver::getWorkFile()` dose not work + - [cmd:resize] Fixed #2251 add an option `commandsOptions.resize.getDimThreshold` for rapid starting + - [VD:abstract] Fixed #2257 save as progressive JPEG on image editing + - [VD:abstract] bug fix of detecting of `tmpLinkPath` and `tmpLinkUrl` + - [cmd:resize] Fixed #2265 show the jpeg image save file size + - [ui:dialog] Fixed #2264 add an option `uiOptions.dualog.focusOnMouseOver` + - [cmd:resize] make rotatable directly with mobile devices + - [js:options] change default value of `commandsOptions.resize.grid8px` to 'disable' + - [ui:cwd] Fixed #2271 JavaScript stops when adding item count exceeding the option showFiles + - [api] add an cmd `editor` that getway for custom contents editor + - [cmd:edit] Fixed #2280 add plugin to edit with Zoho Office Editor + - [VD:GoogleDrive] Fixed #2281 class load error with constant `ELFINDER_GOOGLEDRIVE_GOOGLEAPICLIENT` + - [js:core] Fixed #2283 thumbnails not displayed with newAPI + - [VD:FTP] Fixed #2289 add support for FTP+SSL + - [cmd:help] Fixed #2286 add user preferences "Action when select file", "Open with the editor used last time" + - And some minor bug fixes + + +2017-10-07 Naoki Sawada + + * elFinder (2.1.29): + - [cmd:quicklook.plugins] Fixed #2149 support Data URI scheme contents of the text file + - [cmd:quicklook] Fixed #2151 tmb icon don't appear at file addition + - [ui:cwd] Fixed #2152 table header position unmatch in the rtl language + - [jquery.elfinder] add jQuery function `$.fn.scrollRight()` + - [ui:navbar] correction position of navbar resize handle in + - [js:core] Fixed #2153 correction of `mime2class()` also give sub-type of "image/*" + - [ui:cwd] Fixed #2158 add file type badge in icons view with CSS + - [VD:abstract,plugin] Fixed #2160 animation of apng is lost + - [php:core] bugfix of passing tagetHash to callback 'upload.presave' + - [api] configurable MIME-types to handle as text on the connector side + - [VD:MySQL] Fixed #2164, Fixed #2166 problem with MySQL > 5.6 + - [ui:navbar,cmd:quicklook] Fixed #2171 allow to display the preview on the navbar + - [js:options] add an option `fileFilter` cf. #2176, #2178 + - [ui:contextmenu] Fixed #2183 problem of selecting submenu on touch devices + - [js:core] add a unique query param to thumbnail url + - [cmd:quicklook] Fixed #2191 add an option `commandsOptions.quicklook.contain` + - [cmd:quicklook] Fixed #2192 show cwd info when unselect item + - [cmd:quicklook] add PSD preview plugin + - [VD:FTP] Fixed the permissions when the ftp deamon uses a Virtual User that it isn't a passwd user + - [php:plugins] Fixed #2198 AutoResize/AutoRotate/Watermark fail if php fileinfo module not loaded + - [php:core,VD:abstarct] Fixed #2199 remove `create_function()` for PHP>=7.2 + - [js:core] Fixed #2201 bugfix that language setting of options stores in browser + - [ui:dialog] Fixed #2203 option `dialogContained` to contained in the elFinder node + - [js:core] Fixed #2210 send `mimes` as Array (not Object) on upload + - [VD:FTP] Fixed Using epsv4 off with Pure-ftpd servers creates a timeout + - [js:core] Fixed #2216 to destruction completely of used XHR objects + - [cmd:quicklook,rm] Fixed #2221 show folder size info into the each + - [api] Fixed #2222 abort on the client side then notify it to the connector side + - [js:cwd] Fixed #2224 problems that cause discrepancies on displaying + - [VD:LocalFileSystem] Fixed #2226 problem on save empty file + - [i18n:LANG] add "Sum" for the caption of recursive folder size + - [cmd:download] bugfix of non-alphabetic characters in download filename + - [php:core] add a main option `connectionFlagsPath` + - [i18n:LANG] add "Sum" for the caption of recursive folder size + - [js:core] Fixed #2236 show target path in upload confirm dialog at non-cwd + - And some minor bug fixes + + +2017-08-16 Naoki Sawada + + * elFinder (2.1.28): + - [ui:cwd] Fixed #2140 sync problem of col-width of table header when item add/remove + - [cmd] Fixed #2144 add cmds `select(all|none|invert)` + - [php:core] Fixed #2143 locale dependent version number problem + - And some minor bug fixes + + +2017-08-10 Naoki Sawada + + * elFinder (2.1.27): + - [php:core] Fixed #2104 notice error in `getIniBytes()` with php 7.1 + - [cmd:download] Fixed #2106 add an option `commandOptions.download.minFilesZipdl` + - [VD:abstract] enable to specify the path of server commands as constant + - [cmd:quicklook] Fixed #2108 support HLS, DASH video preview + - [cmd:open,quicklook] MIME type determination to case incentive + - [cmd:undo,redo] Fixed #2115 implement the Undo/Redo command + - [VD] Fixed #2120 item copy between volumes is incomplete + - [VD:Box,OneDrive] Fixed #2122 to be able to know the access token in debug mode + - [VD:abstract] Fixed #2107 do clearstatcache() in abstract class + - [cmd:help] Fixed #2118 controling to show/hide toolbar icons in preference tab + - [ui:dialog] Fixed #2123 problem in maximaize on fullscreen mode + - [ui:toolbar] add an option `showPreferenceButton` + - [cmd:rm] Fixed #2087 rm command not disable on unselect items + - [ui:dialog] Fixed #2124 missing dialog on fullscreen mode + - [cmd:resize] Fixed #2127 don't show "SaveAs" if new image saving is not allowed + - [VD:OneDrive] Fixed #2131 causes an infinite loop at the copy command + - And some minor bug fixes + + +2017-07-17 Naoki Sawada + + * elFinder (2.1.26): + - [php:core] Fixed #2069 add static method `elFinder::getApiFullVersion()` + - [js:core] Fixed #2073 auto loading of language files implemented in core + - [cmd:help] Fixed #2074 add the Preference tab + - [js:core] Fixed #2079 lost binded user functions with node.elfinder('reload') + - [cmd:help] Fixed #2076 problem of content area height synchronization + - [js:core] Fixed #2081 problem that updating of `uiCmdMap` + - [cmd:resize] Fixed #2085 "Save As" dose not work in 2.1.25 + - [cmd:rm] Fixed #2086 problem of cmd mode sync on the item selected + - [js:core] Fixed #2076 cancel full screen mode on `destroy` + - [cmd:rm] Fixed #2087 JavaScript error when hide `rm` icon in toolbar + - [cmd:netmount] Fixed #2088 problem of shows error dialog behind this dialog + - [cmd:rm] Fixed #2087 button icon label is wrong until boot up + - [php:connector] Supports X-Sendfile and similar file-download accelerators + - And some minor bug fixes + + +2017-06-23 Naoki Sawada + + * elFinder (2.1.25): + - [php] Fixed #2014 "Parse error" on PHP < 5.3 + - [core,API] Fixed #1431 cmd `edit` supports Data Uri Scheme + - [cmd:edit] Added Pixlr Editor, Pixlr Express, Cleative Cloud Image editor, Ace Editor, CodeMirror, SimpleMDE, CKEditor and TinyMCE as default editors + - [cmd:edit] Fixed #2020 add "Save As" button + - [cmd:resize] Fixed #2016 add Preset size buttons + - [cmd:resize] Fixed #2019 conflict with the bootstrap.js + - [CD:abstract] Fixed #2025 cannot edit any files with `memory_limit` = -1 + - [cmd:edit] Fixed #2027 make it selectable from multiple editors + - [VD:abstract,LocalFileSystem] Fixed #2035 support multipart rar extraction + - [VD:abstract] Fixed #2040 Fatal error on create the item with PHP>=7.1 + - [cmd:rm] Fixed #2042 add command options `infoCheckWait`, `toTrashMaxItems` + - [cmd:resize] Fixed #2043 add "Save As" button into the resize dialog + - [js:core] Fixed #2050 handling server errors during upload + - [VD:abstract] Fixed #2054 to use the same hash value as Linux on Windows server + - [js:restore] Fixed #2057 problem of empty folder handling + - [cmd:empty] Fixed #2061 add a new command `empty` - "Empty the folder" + - And some minor bug fixes + + +2017-05-19 Naoki Sawada + + * elFinder (2.1.24): + - [js:options] Fixed #1947 add client option `dispInlineRegex` for legacy connectors + - [js:options] Fixed #1948 separate uiOptions.toolbar extra options to uiOptions.toolbarExtra + - [js:core,php:core] Fixed #1951 set name to uploaded items from clipboard data + - [js:core,php:core] Fixed #1951 to IE and correction to Firefox + - [js:core] Fixed #1953 to selectable "Rename" when item name exists on upload + - [VD:abstract] Fixed #1952 urlencode of results file.url on upload + - [VD:abstract] Fixed #1959 add connector roots option `acceptedDirname` + - [js:core] Fixed #1965 add an option `heightBase` to client configuration + - [VD:abstract] Fixed #1974 add an option `driverId` (prefix of volumeid) + - [php:connector] Fixed #1975 possible XSS issue on debug mode of connector + - [VD:FTP] Fixed #1982 problem with connect to Pure-FTPd + - [php:plugin:Normalizer,Sanitizer] Fixed #1983 upload fails due to unnecessary conversion + - [cmd:quicklook] Fixed #1985 seek and volume change disabled in Firefox + - [js:core,cmd:rm,VD:trash] Fixed #1065 add "Trash" feature + - [php:core] Fixed #1990 sometimes in initial request, pass to bind callback `$volume` is empty + - [cmd:rm,trash,restore] Fixed #1991 implementation of restore function + - [js:core] Fixed #1996 pass an event object as `this` into binded callback + - [ui:tree] Fixed #1999 split display of many directories + - [js:core] Fixed #2005 prevent folder switching heavy as folders increase + - [VD:abstract] Fixed #2000 `elFinderVolumeDriver::imageUtil()` is not working properly + - [plugin:normalizer] Fixed #2004 add an option `umlauts + - [VD:LocalFileSystem] Fixed #2009 corrention of an option `keepTimestamp`(upload)` + - [ui:cwd,stat] Fixed #2010 sync problem when deleted any items in search results view + - And some minor bug fixes + + +2017-03-31 Naoki Sawada + + * elFinder (2.1.23): + - [VD:Dropbox2] Fixed #1598 add a driver of Dropbox APIv2 + - [js:core] change option `abortCmdsOnOpen` default value to `['tmb', 'parents'] + - [php:core,VD:abstract] add a command `subdirs` + - [js:core] add new method `asyncJob` + - [quicklook] optimize of HTML5 audio/video player + - [php:core,VD:abstract] Fixed problem of caching of subdirs + - [ui:tree] trigger `check subdirs()` if necessary of change targets + - [cmd:netmount] Fixed #1925 allow selection of multi-level hierarchy + - [ui,cmd] Fixed #1931 cmd.disabled is not working in multi-volume search + - [VD:GoogleDrive] Fixed #1932 support to auth type "JSON service account credentials" + - [VD:GoogleDrive] Fixed #1933 sometimes infinite loop if root path is other than root on GoogleDrive + - [js:core,ui:cwd,tree] add core method fm.getIconStyle() and use + - [cmd:quicklook,info] Fixed #1926 support i18 name, file.icon + - [Vd:abstract] allow -1 as value of option `checkSubfolders` for check asynchronously + - [ui:cwd] Fixed #1923 first letter search & navigation in cwd + - [VD:LocalFileSystem,FTP] Make success `extract()` by excluding unallowed items + - [ui:cwd] Fixed #1941 performance deterioration of the thumbnail attach process + - [js:core] Supports tag + - And some minor bug fixes + + +2017-02-25 Naoki Sawada + + * elFinder (2.1.22): + - [VD:LocalFileSystem] Fixed #1882 option `copyJoin` does not work on extract + - [cmd:help] Fixed #1898 error ".tabs is not a function" without JqUI tabs widget + - [VD:abstract] Fixed #1899 rotating image breaks itself without exiftran and jpegtran + - [VD:LocalFileSystem] Fixed #1910 `startPath` dose not work currently + - [VD:abstract] Fixed #1911 unable to rename folder + - And some minor bug fixes + + +2017-02-25 Naoki Sawada + + * elFinder (2.0.9): + - [VD:abstract] Fixed #1911 unable to rename folder + + +2017-02-09 Naoki Sawada + + * elFinder (2.0.8): + - [VD:security] Fixed #1891 MIME-type check of unknown item is not execute + + +2017-02-07 Naoki Sawada + + * elFinder (2.1.21): + - [cmd:open] Fixed #1844 make configurable to open into tab(s) + - [php:core] Fixed #1846 target folder may be stay locked by adding items + - [cmd:download] Fixed #1868 fixed up timeouts for bad connection download + - [proxy:v1] Fixed #1880 error on command `paste` + - [v1 support] Fixed #1884 error on command `reload` + - [cmd:upload] Fixed #1885 Error on upload.ui = 'uploadbutton' + - [VD:security] Fixed #1891 MIME-type check of unknown item is not execute + - And some minor bug fixes + + +2017-01-11 Naoki Sawada + + * elFinder (2.1.20): + - [php:core] Fixed #1800 session write before umount of the volume + - [cmd:upload] Fixed #1804 add folder upload button into upload dialog + - [php:plugin] Fixed #1807 enable/disable plugin by pressing meta key on DnD upload + - [cmd:rename] Fixed #1814 trigger event blur of input on item unselect + - [js:core] Fixed #1817 add "execpre.[cmd]" event and make cmd exec cancelable + - [js:core] Fixed #1818 mtime not defined for chunk upload + - [js:core] Fixed #1826 allow command invalidation by each item(folder/file) + - [ui:dialog] Fixed #1824 empty dialog on elfinder load + - [cmd:resize] Fixed #1834 configurable default state of `8px Grid` + - [VD] Fixed #1841 published files security issues + - [js:core] Fixed #1832 allow to set error message on HTTP status code 4/5xx + - [js:cmd] Fixed #1842 disable shortcut that specified to `disabled` + - [php:core] Fixed #1843 security vulnerability fix + + +2016-12-10 Naoki Sawada + + * elFinder (2.1.19): + - [js] Fixed #1000 Wrap compiled code in UMD (for commonJs and AMD support) + - [VD:OneDrive,Box] Fixed #1774 dose not work when PHP has `open_basedir` + - [cmd:edit,php:core] Fixed #1779 save contents with original character encoding + - [ui:toolbar] Fixed #1778 displayTextLabel option not works + - [cmd:edit] add encoding select box rel. #1779 + - [cmd:search] Fixed #1782 search by mimetype dose not work (>=2.1.16) + - [ui:dialog] Fixed #1785 trigger resize event with `maximize:on` in minimize element + - [VD:abstract] Fixed #1783 Illegal duplicate data as bind in duplicate command + - [cmd:edit] include elFinder instance as `fm` into `ta.editor` property + - [js:core] Fixed #1791 implement JS, CSS loader and auto load of elFinder CSS + - [cmd:resize] Fixed #1789 bug that crop image size is change while dragging + - [js:core] Fixed #1788 bug that chunked upload timeout processing is invalid + - [VD:abstract] Fixed #1799 uses `link()` in exec `zipdl` to more faster + - And some minor bug fixes + + +2016-11-21 Naoki Sawada + + * elFinder (2.1.18): + + - [VD:FTP] Fixed #1757 cause infinite loop with getting stat of second level items from system root + - [js:core] Fixed #1761 problem of chunk merge request on 2.1.17 + - [php:core] Fixed #1762 broken backward compatibility of PHP < 5.4 on 2.1.17 + - And some minor bug fixes + + +2016-11-19 Naoki Sawada + + * elFinder (2.1.17): + + - [cmd:upload] Fixed #1695 disabled check doesn't work in other than CWD volume + - [js:core] Fixed #1698 abort the file upload at network error occurs + - [ui:toolbar] Fixed #1699 add an option `displayTextLabel` (default: `false`) + - [css:toolbar] Fixed #1700 correction of button label for touch devices + - [ui:toolbar] add contextmenu to show/hide the text label + - [ui:workzone] Fixed #1702 cwd size fits to the workzone at resize + - [VD:abstract] Fixed #1703 problem of make the video thumbnail + - [core] Fixed #1706 configurable to limit max number of selectable items + - Added an option `maxTargets` of connector main option. + - [ui:cwd] Fixed #1701 No thumbnails after added the item (v 2.1.16) + - [cmd:download] Fixed #1707 allow zip download in multi volume searching + - Added native driver for GoogleDrive, OneDrive and Box (Special thanks to Raja Sharma) + - [cmd:netmount] Fixed #1713 OAuth of procedure is not completed on MS Edge + - [css:quicklook] Fixed #1717 preview html file won't scroll on IOS + - [cmd:upload] Fixed #1718 File upload on paste does not work + - [js:core] Fixed #1724 add client option `enableByMouseOver` + - [js:core] Fixed #1724 disable event `disable` with option `enableAlways=true` + - [js:core] Fixed #1724 optimize switching enable/disable for elf in iframe + - [cmd:getfile] Fixed #1727 wrong path when the tree is not loaded + - [cmd:quicklook] Fixed #1737 select next item after an item deleted + - [cmd:mkdir] Fixed #1739 Add 'new folder' action to tree context menu + - [VD:abstract,LocalFileSystem] Fixed #1744 results `url` must be urlencoded + - [js:core] Fixed #1738 retry uploading only on connection aborted + - [cmd:search] Fixed #1745 "onlyMimes" option invalid in search results + - [js:core] Fixed #1738 bug in the retry function on chunked uploading + - [php:plugin:AutoResize] Fixed #1746 add an option `forceEffect` (default:false) + - [js:core,cmd:quicklook] Fixed #1748 add client option `rawStringDecoder` + - And some minor bug fixes + + +2016-10-11 Naoki Sawada + + * elFinder (2.1.16): + - [cmd:info] Fixed #1652 add CSS class name `file.csscls` to icon + - [ui:cwd] Fixed #1653 JQUI.selectable does not work on items that has been added + - [js:core,cmd:info] Fixed #1652 add the item type `Volume Root` + - [js:core] Fixed #1656 wrong result `fm.convAbsUrl()` with location basename + - [php:core] Fixed #1658 to allow cancel cmd exec by [cmd].pre callback + - [js:code] Fixed #1659 not work in Mac/iOS safari private browsing mode + - [js:core] Fixed #1662 `[cmd]fail` event is fired at fail cmd execution + - [php:core] Fixed #1669 Fatal error in `detectFileExtension()` when URL upload + - [ui:dialog] Fixed #1670 add the minimize button into the editing dialog + - [ui:navbar] Fixed #1684 rtl right-panel resize bug + - [cmd:resize] Fixed #1685 to enable specify bgcolor in the image rotation + - [cmd:resize] Fixed #1686 add "Aspect ratio" button into crop panel + - [cmd:resize] add button "8px Grid" Enabled/Disabled for JPEG image + - [js:core] Fixed #1689 initialized to an undefined property + - [js:core] Fixed #1692 optimize function of swipe to close navbar + - [cmd:quicklook] Fixed #1693 `dispInlineRegex` doesn't reflect in multi volume searching + - And some minor bug fixes + + +2016-09-12 Naoki Sawada + + * elFinder (2.1.15): + - [js:command] inheritable elFinder.command object rel. #1545 + - [VD:abstract] Fixed #1550 option `uiCmdMap` dose not work on 2.1.14 + - [VD:abstract] Fixed #1553 root stat not refresh when do chmod of root + - [php:core] fix make netkey problem - support multiple array options + - [js:core] Fixed #1554 can not unmount netvolume when done auto sync + - [js:core] Fixed #1555 can not upload to unreadable folder + - [php:core] parent dir sets to changed when upload, paste, rm, mkfile, mkdir etc + - [js:core] Fixed #1560 to possible to apply sort mode in tree in navbar + - [js:ui,cmd:fullscreen] Fixed #1563 add ui command "fullscrren" + - [cmd:edit] Fixed #1561 add to fullscreen button + - [js:core] Fixed #1562 sort with i18 name if exist + - [js:options] ui option `commands` accepts "*" as all of commands + - [VD:LocalFileSystem] Fixed #1565 dose not support volume option `searchTimeout` + - [VD:FTP] Fixed #1571 cause infinite loop during auto-sync of the volume root + - [php:core] Fixed #1572 unable to DnD upload the folder named "0" + - [VD:abstract] Fixed #1575 can not rename "0" to "00", "000"... + - [cmd:rename] Fixed #1573 input text stay in there at rename error in tree view + - [ui:cwd] Fixed #1576 reset the column width may not applied to the header + - [ui:conttextmenu] Fixed #1578 to the contextmenu draggable + - [php,cmd:open] Fixed #1586 RFC7233 violation, add `commandsOptions.open.method` + - [ui:navbar,cwd] Fixed #1590 auto scroll on HTML5 native dragging + - [VD:Dropbox] Fixed #1596 correction of `basename`, `dirname` on the windows server + - [cmd:upload] Fixed #1600 add target folder selector into upload dialog + - [ui] Fixed #1609 toast notification on complete of upload/paste into any folder + - [cmd:getfile] Fixed #1610 getFileCallback to supports the jQuery.Deferred + - [cmd:rename] Fixed #1613 correction of error handling + - [js:core] Fixed #1614 correction of upload mixed chunks and normal file + - [ui:cwd] Fixed #1615 break the lazy rendering when it delete items + - [ui:tree] Fixed #1617 other volumes cmds doesn't work when it disabled in cwd + - [core] Fixed #1622 added an option `phash` to the volume roots for implement feature of volume group + - [ui:toolbar] Fixed #1619 use fm.trigger('toolbarload') instead toolbar.tigger('load') + - [js:options] Fixed #1624 add a new option `overwriteUploadConfirm` + - [cmd:search] Fixed #1635 support parallel requests for multi volumes + - [contextmenu] Fixed #1645 to enable the operation of the keyboard + - [ui:cwd] Fixed #1646 selected targets by ctrl+shift are wrong + - [ui:dialog] Fixed #1647 controlling tabstop by `elfinder-tabstop` css class name + - And some minor bug fixes + +2016-07-25 Naoki Sawada + + * elFinder (2.1.14): + - [js:core,VD:abstract] Fixed #1525 do MIME check before file upload + - [API] Accept the root options data as an attribute `options` of the root stat + - [ui:cwd] Fixed #1532 can not use the `_` in custom column name + - [js:command] Fixed #1533 update the cmd status at `sync` + - [core] Fixed #1012 support i18n folder name + - [ui:cwd] Fixed #1544 jQuery backward compatibility (fix DnD problem) + - [proxy:APIv1] Fixed #178 correction of command `paste` + - And some minor bug fixes + + +2016-07-11 Naoki Sawada + + * elFinder (2.1.13): + - [ui:cwd] Fixed #1433 create a thumbnail of the video file with ffmpeg + - [js:core] Fixed #1435 bug of getFileCallback on multi instances + - [ui:cwd] Fixed #1440 bug that not become disabled on multi instance + - [cmd:quicklook] Fixed #1441 hide the prev/next button on first/last item + - [js:core] Fixed #1439 show window close confirm dialog while editing file + - [ui:cwd] Fixed #1450 missing contextmenu on touch up on iOS devices + - [js] Fixed #1455 duplicate registration of command change event + - [ui:cwd] Fixed #1461 resizable table column width + - [cmd:sort] Fixed #1464 to enable more sort options + - [cmd:chmod] Fixed #1465 remove unnecessary `this` reference + - [ui:toolbar,navbar] Fixed #1473 memorize state of open/close by swipe + - [ui:cwd] Fixed #1475 make custom column sortable on list view + - [cmd:quicklook] Fixed #1478 preview broken with old jQuery + - [js:core] Fixed #1480 broken compatibility with protocol API v1 + - [cmd:opendir] Fixed #1481 broken in elFinder 2.1.12 + - [ui:cwd] Fixed #1479 can't be moved to the right edge at column sort + - [ui:cwd] Fixed #1485 add an option of template placeholders replacement rules + - [php:core] Fixed #1490 configurable root options of the network mounting volume + - [js] Fixed #1491 jQuery 3.0 supports + - [cmd:search] Fixed #1499 incremental search from current view items + - [cmd;resize] Fixed #1498 img-edit dialog layout disordered when resizing window + - [VD:abstract] Fixed #1505 configurable duplicate's suffix, unique numbe format + - [VD:abstract] Fixed #1507 add a volume option `dirUrlOwn` + - [VD:abstract] Fixed #1514 security vulnerability in the archive command + - And some minor bug fixes + + +2016-07-11 Naoki Sawada + + * elFinder (2.0.7): + - [VD:abstract] Fixed #1514 security vulnerability in the archive command + + +2016-05-30 Naoki Sawada + + * elFinder (2.1.12): + - Fixed #1321 Not trim white spaces on editing the text file + - Fixed #1320 Supported operation in the modal dialog + - Correction of the context menu (Mobile devices, Right-to-Left Language etc.) + - Correction of Quicklook (Supported 'video/quicktime', improvement of IFRAME, For Mobile devices etc) + - Fixed #1272 Correct detection of timestamp on FTP volume + - Fixed #1315 Implement function for `copyJoin` of the volume root option + - Fixed #1344 Use self image as thumbnail when without `imgLib` + - Fixed #1342 Bugfix of method `getFullPath` that was problems relative path can not be resolved + - Added a volume root option `uploadMaxConn` + - Maximum number of chunked upload connection. `-1` to disable chunked upload. + - Changed default value of volume root option `tmbBgColor` to 'transparent' + - Added a volume root option `bgColorFb` + - Image rotate fallback background color (defalt: #ffffff). Uses this color if it can not specify to transparent. + - Fixed #935 Supports `'convert'`(imagemagick) as `imgLib` + - Fixed #1363 Bugfix of FTP connect from windows localhost to remote server + - Fixed #1367 Bugfix of backward compatible to jQuery UI < 1.11 + - Mobile devices friendly + - Swipe to navbar/toolbar show/hide on touch devices + - Hide toolbar on mobile devices at initial view + - A little bigger icons + - Added item select checkboxes + - Path breadcrumbs move to top of workzone when hide navbar + - To enable resizing/cropping by touch events + - UX enhancements + - Fixed #1311 CWD list table with fixed fixed header + - UI path apply text-ellipsis in each holder name + - Fixed #1370 implemented function keep timestamp into LocalFileSystem volume driver + - Added PHP error handler and removed all `@` error-control operator + - Fixed #1391 take care 32bit system of chunked file uploading arg `cid` + - Fixed #1393 Added PHP class auto loader + - Fixed #1412 Enable auto scroll when navbar/cwd drag over + - And some minor bug fixes + + +2016-04-11 Naoki Sawada + + * elFinder (2.1.11): + - Added Archive(zip|gzip|tar) quicklook preview plugin + - DnD upload supports Microsoft Edge + - Fixed problem which directory is not detected in the LocalFileSystem driver (Bug of 2.1.10) + - And some minor bug fixes + + +2016-04-02 Naoki Sawada + + * elFinder (2.1.10): + - Fixed #1061, #1231 Supported controllable folder icons + - Fixed #1240 LocalFileSystem search files it was still follow symlinks + - Added new volume root option `searchExDirReg` for exclusion serach + - Return file.url in result on file upload for 3rd party uploader + - Supported elFinder API version 1 + - Added a new volume driver FlysystemGoogleDriveNetmount that based on flysystem-google-drive + - Added a new connector plugin "AutoRotate" + - And some minor bug fixes + + +2016-03-11 Naoki Sawada + + * elFinder (2.1.9): + - Fixed enbug of 2.1.6-2.1.7 PHP error undefind valiable/array to string conversion + - The function to make thumbnail supports more image types when Imagick enabled + - Correction of the problem that Archive / Extract function don't work well under some environment + - Added a quicklook plugin that is the Google docs online viewer + - Default is disabled. Set `commandsOptions.quicklook.googleDocsMimes` to enable this plugin. + ```javascript + commandsOptions : { + // "quicklook" command options. + quicklook : { + autoplay : true, + jplayer : 'extensions/jplayer', + // MIME types to use Google Docs online viewer + // Example array value + // ['application/pdf', 'image/tiff', 'application/msword', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'] + googleDocsMimes : [] + } + } + ``` + - And some minor bug fixes + + +2016-03-07 Naoki Sawada + + * elFinder (2.1.8): + - Added a new volume driver `MsSQL` + - Fixed #1226 problem of sort by clicking on cloumn headers + - Fixed #1229 bug of selection after sorting in list view + - Replaceable session handling wrapper (elFinderSessionInterface) + - Added Connector main config `defaultMimefile` () + - update mime.types + - Added LocalFileSystem volume root config `followSymLinks` (defailt true) + - And some minor bug fixes + + +2016-02-21 Naoki Sawada + + * elFinder (2.1.7): + - Added connector main options `commonTempPath` and `maxArcFilesSize` + - Fixed #353 It can download files/folders as an archve file + - Fixed #1195 Supported BMP in GD image resize + - Became possible to cancellation while searching + - Supported API protocol version 2.0 for the legacy connector + - Fixed #1206 Configurable places(favorites) (https://github.com/Studio-42/elFinder/issues/1206) + - Fixed #1211 Remove deprecated method jQueryUI.zIndex() + - Supported jQueryUI 1.12.0 + - Fixed #1213 infinite loop in PHP connector + - Cmd:mkdir to callable "New Folder with Selected items" as "Into New Folder" + - Supported nao-pon/flysystem-google-drive with barryvdh/elfinder-flysystem-driver + - barryvdh/elfinder-flysystem-driver (https://github.com/barryvdh/elfinder-flysystem-driver) + - nao-pon/flysystem-google-drive (https://github.com/nao-pon/flysystem-google-drive) + - UX improvement of in Touch devices + - And some minor bug fixes + + +2015-02-21 Naoki Sawada + + * elFinder (2.0.6): + - Fixed #1213 infinite loop in PHP connector + + +2016-01-19 Naoki Sawada + + * elFinder (2.1.6): + - Fixed #1074 startPath for multi volumes + - Fixed #1172 enbug-fix of rename command + - Fixed #1174 support for multi-instance on the same connector + - Plugin: AutoResize New option `preserveExif` + - Fixed #179 JPEG quality specifiable + - Fixed #1176 auto-sync check with HTTP long polling/inotifywait + - Fixed #1181 case insensitive search problem of LocalFileSystem driver + - Added an autosync button into contextmenu `Reload` + - Added new client configuration `syncStart` + - Search result view optimization + - Adddd new volume root option `searchTimeout` (default 30s) + - Added new crient command `opendir` - opens selected item's parent folder at search result + - Sortable "Places" (your favorites) + - Fixed #1193 open the file at direct URL if possible + - And some minor bug fixes + + +2015-12-26 Naoki Sawada + + * elFinder (2.1.5): + - Fixed bug that can't in writable with `chmod` + - Show remove item info in confirm dialog on `rm` action + - Fixed #1165, MIME types maintenance (doc, dot, xlt, xla) + - Fixed problem if filename included character that can't be json encode + - Added option `convmap` to Normalizer plugin + - And some minor bug fixes + + +2015-12-26 Naoki Sawada + + * elFinder (2.0.5): + - Fixed problem if filename included character that can't be json encode + + +2015-12-16 Naoki Sawada + + * elFinder (2.1.4): + - Fixed #1163 Dropbox driver supported windows server + - Fixed search problem on Windows server + + +2015-12-13 Naoki Sawada + + * elFinder (2.1.3): + - Auto configure `customHeaders`, `xhrFields` for CORS + - Allow set elFinder::$volumesCnt by HTTP header "X-elFinder-VolumesCntStart" + - Resolved #1145, Configurable keyboard shortcuts of any command + - Force non-overwrite on URL uploading + - Supported Drag out function with [Shift] + Drag of file item (with out IE) + - Drag and Drop copy from elFinder(A) to elFinder(B) + - Make list of download url to Text editor + - Drag and Drop download with Chrome (Single file only) + - etc. + - Choosable "backup" at pasting of same name files + - Show confirm at uploading of same name file exists + - Show URL link icon on Download menu in contextmenu + - This icon is clickable as normal link, shows context menu and drag out + - Added more feedback sign of jQuery DnD drag icon + - Others, some minor bug fixes + + +2015-11-23 Naoki Sawada + + * elFinder (2.1.2): + - [security-fix] vulnerability of the MIME type quarantine + - Multi-line filename editing on icon view + - Auto expands filename editing on list view + - Fixed #1124, Uploading problem exactly 20MiB/30MiB/40MiB... + - Marged #1125, Fix file permissions for MySQL LOAD_FILE command + - Fixed #1127, Supported full path including the drive letter of the Windows server + - Marged #1131, #1132, Complete Romanian(ro) translation + - Fixed symbolic link file stats `mtime`, `size` + - Marged #1133, Complete German(de) translation + - Marged #1139, Complete Türkçe(tr) translation + - Marged #1141, Plugin Normalizer function: make filename lowercase + - Others, some minor bug fixes + + +2015-11-23 Naoki Sawada + + * elFinder (2.0.4): + - [security-fix] vulnerability of the MIME type quarantine + + +2015-11-10 Naoki Sawada + + * elFinder (2.1.1): + - More High performance server backend and light client UI + - Connector plugin + - AutoResize : Auto resize on file upload. + - Normalizer : UTF-8 Normalizer of file-name and file-path etc. + - Sanitizer : Sanitizer of file-name and file-path etc. + - Watermark : Print watermark on file upload. + - Folder upload with Chrome + - Chunked file upload + - Upload directly to the folder + - Creating the archive by specifying the file name + - Direct extraction to the current working directory (you do not want to create a folder) + - Support Dropbox.com© (Configurable & As network volume) + - Supports custom information in info dialog + - Configuable columns of list view + - Supports custom CSS class function of tree view + + +2015-11-10 Naoki Sawada + + * elFinder (2.0.3): + - jQuery 1.9+ support + - 350+ bugs fixed since rc1 version + - Modify translations and some new translations + - Netmount volume function + + +2012-04-10 Troex Nevelin + + * elFinder (2.0 rc1): + - Major code refactor + - 200+ bugs fixed since beta version + - 14 new translations + - FTP volume driver + - Advanced image editing dialog + + +2011-07-10 Troex Nevelin + + * elFinder (2.0 beta): + - New branch 2.x, total rewrite from scratch + - MySQL volume driver support (as file storage) + - Full drag & drop support with HTML5 upload + + +2011-06-20 Troex Nevelin + + * elFinder (1.2): + - jQuery and UI updated + - Python connector improvements + - QuickLook fixed + - CSS fixes + - New icons from http://pixel-mixer.com/ + - New languages: Czech, Dutch, German, Greek, French, Hungarian, + Italian, Japanese, Latvian, Polish, Brazilian Portuguese, + Slovak, Thai, Turkish, Vietnamese, Simplified Chinese, + Traditional Chinese + + +2010-03-11 Troex Nevelin + + * elFinder (1.1): + - Total rewrite from scratch. + - New PHP connector. + - Python connector. + - Create/Extract archives. + - QuickLook. + - "Places" for favorites. + - Background thumbnails creation. + - Exteneded configuration options of connector and client. + - Spanish localization. + - JSON API description. + - Full documentation in English, Russian and Spanish. + - No more use of jquery plugins. + - Website update. + - [bugfix] All known bugs fixed. + + +2009-11-09 Dmitry Levashov + + * elFinder (1.0.1): + - In directory tree panel added arrows to open/close directories + without entering in. + - Added shortcut support for copy/cut/paste/delete files and + folders. For Mac users added Command+Backspace support. + - Added context menu to current directory. + - Added help. + - [bugfix] invalid determing files/folders permissions using + "perms" options in php connector + diff --git a/sites/all/libraries/elfinder/LICENSE.md b/sites/all/libraries/elfinder/LICENSE.md new file mode 100644 index 00000000..a8ccb0b4 --- /dev/null +++ b/sites/all/libraries/elfinder/LICENSE.md @@ -0,0 +1,15 @@ +elFinder is issued under a 3-clauses BSD license. + +Copyright (c) 2009-2018, Studio 42 +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the Studio 42 Ltd. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL "STUDIO 42" OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/sites/all/libraries/elfinder/README.md b/sites/all/libraries/elfinder/README.md new file mode 100644 index 00000000..72db8505 --- /dev/null +++ b/sites/all/libraries/elfinder/README.md @@ -0,0 +1,214 @@ +elFinder +======== + +**WARNING: IF YOU HAVE OLDER (IN PARTICULAR 2.1.38 OR EARLIER) VERSIONS OF ELFINDER ON PUBLIC SERVERS, IT MAY CAUSE SERIOUS DAMAGE TO YOUR SERVER AND VISITED USER. YOU SHOULD UPDATE TO THE LATEST VERSION OR REMOVE IT FROM THE SERVER.** + +[![elFinder file manager for the Web](https://studio-42.github.io/elFinder/images/elFinderScr.png "elFinder file manager for the Web")](https://studio-42.github.io/elFinder/) + +elFinder is an open-source file manager for web, written in JavaScript using +jQuery UI. Creation is inspired by simplicity and convenience of Finder program +used in Mac OS X operating system. + +[![Download now!](https://studio-42.github.io/elFinder/images/download-icon.png)](https://github.com/Studio-42/elFinder/releases/latest) +[![Packagist License](https://poser.pugx.org/studio-42/elfinder/license.png)](https://choosealicense.com/licenses/bsd-3-clause/) +[![Latest Stable Version](https://poser.pugx.org/studio-42/elfinder/version.png)](https://packagist.org/packages/studio-42/elfinder) +[![Total Downloads](https://poser.pugx.org/studio-42/elfinder/d/total.png)](https://packagist.org/packages/studio-42/elfinder) +[![CDNJS version](https://img.shields.io/cdnjs/v/elfinder.svg)](https://cdnjs.com/libraries/elfinder) +[![Donate Paypal(nao-pon)](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FF5FKRSMKYDVA) +[![Donate Bitcoin(nao-pon)](https://img.shields.io/badge/Donate-Bitcoin-orange.svg)](https://studio-42.github.io/elFinder/tools/donate-bitcoin/) + +Contents +-------- +* [Branches](#branches) +* [Features](#features) +* [Requirements](#requirements) +* [Installation](#installation) +* [Downloads](#downloads) +* [Demo Sites](#demo-sites) +* [FAQs](#faqs) +* [3rd Party Connectors](#3rd-party-connectors) +* [3rd Party Volume Drivers](#3rd-party-volume-drivers) +* [3rd Party Themes](#3rd-party-themes) +* [Support](#support) +* [Authors](#authors) +* [License](#license) + +Branches +-------- +- [master](https://github.com/Studio-42/elFinder/tree/master) - Main development branch +- [2.1-src](https://github.com/Studio-42/elFinder/tree/2.1-src) - 2.1 development branch, auto build to 2.1 on commit +- [2.1](https://github.com/Studio-42/elFinder/tree/2.1) - 2.1 nightly build branch + +Features +-------- + * Usability like the MacOS Finder or Windows Explorer + * Mobile friendly view for touch devices + * All operations with files and folders on a remote server (copy, move, + upload, create folder/file, rename, etc.) + * High performance server backend and light client UI + * Multi-root support + * Local file system, MySQL, FTP, Box, Dropbox, GoogleDrive and OneDrive volume storage drivers + * Support AWS S3, Azure, Digital Ocean Spaces and more with [League\Flysystem](https://github.com/barryvdh/elfinder-flysystem-driver) Flysystem driver + * Cloud storage (Box, Dropbox, GoogleDrive and OneDrive) drivers + * Background file/folder upload with Drag & Drop HTML5 support + * Chunked file upload for large file + * Upload directly to the folder + * Upload form URL (or list) + * List and Icons view + * Keyboard shortcuts + * Standard methods of file/group selection using mouse or keyboard + * Move/Copy files with Drag & Drop + * Drag & Drop to outside by starting drag with alt/option key press + * Archives create/extract (zip, rar, 7z, tar, gzip, bzip2) + * Rich context menu and toolbar + * Quicklook, preview for common file types + * Edit text files and images + * "Places" for your favorites + * Calculate directory sizes + * Thumbnails for image, movie files + * Easy to integrate with web editors (elRTE, CKEditor, TinyMCE) + * Flexible configuration of access rights, upload file types, user interface + and other + * Extensibility by event handling of backend and client side + * Simple client-server API based on JSON + * Supports custom information in info dialog + * Configuable columns of list view + * Supports custom CSS class function for the custom folder icon + * Connector plugin + * [AutoRotate](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/AutoRotate/plugin.php) : Auto rotation on file upload of JPEG file by EXIF Orientation. + * [AutoResize](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/AutoResize/plugin.php) : Auto resize on file upload. + * [Normalizer](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/Normalizer/plugin.php) : UTF-8 Normalizer of file-name and file-path etc. + * [Sanitizer](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/Sanitizer/plugin.php) : Sanitizer of file-name and file-path etc. + * [Watermark](https://github.com/Studio-42/elFinder/blob/2.1-src/php/plugins/Watermark/plugin.php) : Print watermark on file upload. + * For more details, see the [Changelog](https://github.com/Studio-42/elFinder/blob/master/Changelog) + +Requirements +------------ +### jQuery / jQuery UI + * jQuery 1.8.0+ + * jQuery UI 1.9.0+ (require draggable, droppable, resizable, selectable and slider) + +**However, we recommend newest version.** + +### Client + * Modern browsers both of desktop or mobile. elFinder was tested in newest Chrome, Edge, Firefox, IE and Opera + - **Caution**: Web App mode ("apple-mobile-web-app-capable" meta tag) on iOS is not work perfectly in elFinder + +### Server + * Any web server + * PHP 5.2+ (Recommend PHP 5.4 or higher) And for thumbnails - GD / Imagick module / convert(imagemagick) require + * Recommend PHP 7.1 or higher to supports non-ASCII character of file path/name on the Windows server + +Installation +------------ +### Builds (compressed) + 1. Download and unzip one of the [builds](#downloads) below to your PHP server + 2. Rename `/php/connector.minimal.php-dist` to `/php/connector.minimal.php` + 3. Load `/elfinder.html` in your browser to run elFinder + +### Source (uncompressed) + 1. Clone this repository to your PHP server + + ``` + $ git clone https://github.com/Studio-42/elFinder.git + ``` + + 2. Rename `/php/connector.minimal.php-dist` to `/php/connector.minimal.php` + 3. Load `/elfinder.src.html` in your browser to run elFinder + +### Installer + - [Setup elFinder 2.1.x nightly with Composer](https://github.com/Studio-42/elFinder/tree/gh-pages/tools/installer/setup_with_composer) + +Downloads +------------ +**Stable releases** ([Changelog](https://github.com/Studio-42/elFinder/blob/master/Changelog)) + + [elFinder 2.1.43](https://github.com/Studio-42/elFinder/archive/2.1.43.zip) + + [elFinder 2.0.9](https://github.com/Studio-42/elFinder/archive/2.0.9.zip) (deprecated) + +**Nightly builds** + + [elFinder 2.1.x (Nightly)](https://github.com/Studio-42/elFinder/archive/2.1.zip) + +Demo sites +------------ +**2.1.x Nightly** + + https://studio-42.github.io/elFinder/ (with CORS) + + https://hypweb.net/elFinder-nightly/demo/2.1/ + +FAQs +------------ + +### Should I use elFinder builds (compressed) or source (uncompressed)? + +For debugging and development, use the [source](#source-uncompressed). For production, use [builds](#builds-compressed). + +### How do I integrate elFinder with CKEditor/TinyMCE/elRTE/etc...? +Check out the [wiki](https://github.com/studio-42/elFinder/wiki#howtos) for individual instructions. + +### The procedure of language files created or modified? + +You can create or modify the language file to use translation tool. Please refer to the pull request the results to the respective branch. + * [2.1 branch translation tool](http://studio-42.github.io/elFinder/tools/langman/#2.1) + + +3rd party connectors +-------------------- + * [ASP.NET Core](https://github.com/gordon-matt/elFinder.NetCore) + * [ASP.NET](https://github.com/leniel/elFinder.Net) + * [Java Servlet](https://github.com/trustsystems/elfinder-java-connector) + * [JavaScript/Efw](https://github.com/efwGrp/efw3.X/blob/master/help/api_efw_tag.md#elfinder-tag) + * [Nodejs](https://github.com/dekyfin/elfinder-node) + * [Python](https://github.com/Studio-42/elfinder-python) + * [Ruby/Rails](https://github.com/phallstrom/el_finder) + +3rd party Volume Drivers +-------------------- + * [League\Flysystem (PHP)](https://github.com/barryvdh/elfinder-flysystem-driver) (for elFinder 2.1+) driver for the [Flysystem](https://github.com/thephpleague/flysystem) + +3rd party Themes +-------------------- +Hint: [How to load CSS with RequireJS?](https://github.com/Studio-42/elFinder/wiki/How-to-load-CSS-with-RequireJS%3F) + + * [lokothodida/elfinder-theme-moono](https://github.com/lokothodida/elfinder-theme-moono) + * [lokothodida/elfinder-theme-windows-10](https://github.com/lokothodida/elfinder-theme-windows-10) + * [RobiNN1/elFinder-Material-Theme](https://github.com/RobiNN1/elFinder-Material-Theme) + * [StudioJunkyard/elfinder-boostrap-theme](https://github.com/StudioJunkyard/LibreICONS/tree/master/themes/elFinder) + +3rd party Integrations +-------------------- + * [Django](https://github.com/mikery/django-elfinder) + * [Drupal](https://www.drupal.org/project/elfinder) + * [Laravel](https://github.com/barryvdh/laravel-elfinder) + * [Roundcube](https://github.com/Offerel/roundcube_elfinder) + * [Symfony](https://github.com/helios-ag/FMElfinderBundle) + * [Tiki Wiki](https://doc.tiki.org/elFinder) + * [WordPress](https://wordpress.org/plugins/file-manager/) + * [XOOPS](https://github.com/nao-pon/xelfinder) + * [Yii](http://www.yiiframework.com/extension/elfinder/) + * [Zenphoto](http://www.zenphoto.org/news/elfinder/) + +Support +------- + + * [Homepage](http://elfinder.org) + * [Wiki](https://github.com/Studio-42/elFinder/wiki) + * [Issues](https://github.com/Studio-42/elFinder/issues) + * + + +Authors +------- + + * Chief developer: Dmitry "dio" Levashov + * Maintainer: Troex Nevelin + * Developers: Alexey Sukhotin , Naoki Sawada + * Icons: PixelMixer, [Yusuke Kamiyamane](http://p.yusukekamiyamane.com), [Icons8](https://icons8.com) + +We hope our tools will be helpful for you. + + +License +------- + +elFinder is issued under a 3-clauses BSD license. + + * [License terms](https://github.com/Studio-42/elFinder/blob/master/LICENSE.md) diff --git a/sites/all/libraries/elfinder/bower.json b/sites/all/libraries/elfinder/bower.json new file mode 100644 index 00000000..67edd8e5 --- /dev/null +++ b/sites/all/libraries/elfinder/bower.json @@ -0,0 +1,28 @@ +{ + "name": "elfinder", + "authors": [ + "Dmitry \"dio\" Levashov ", + "Troex Nevelin ", + "Alexey Sukhotin ", + "Naoki Sawada " + ], + "description": "Open-source file manager for web, written in JavaScript using jQuery and jQuery UI.", + "dependencies": { + "jquery": "1.8.0 - 3", + "jquery-ui": "^1.9.x" + }, + "keywords": [ + "filemanager", + "jquery", + "jquery-ui", + "javascript", + "php" + ], + "license": "BSD-3-Clause", + "homepage": "https://github.com/Studio-42/elFinder", + "ignore": [ + "**/.*", + "jquery", + "php" + ] +} diff --git a/sites/all/libraries/elfinder/composer.json b/sites/all/libraries/elfinder/composer.json new file mode 100644 index 00000000..a79093fd --- /dev/null +++ b/sites/all/libraries/elfinder/composer.json @@ -0,0 +1,39 @@ +{ + "name": "studio-42/elfinder", + "description": "File manager for web", + "license": "BSD-3-Clause", + "homepage": "http://elfinder.org", + "authors": [ + { + "name": "Dmitry Levashov", + "homepage": "http://std42.ru", + "email": "dio@std42.ru" + }, + { + "name": "Troex Nevelin", + "homepage": "http://std42.ru", + "email": "troex@fury.scancode.ru" + }, + { + "name": "Naoki Sawada", + "homepage": "http://xoops.hypweb.net", + "email": "hypweb+elfinder@gmail.com" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/Studio-42/elFinder/contributors" + } + ], + "require": { + "php": ">=5.2" + }, + "suggest": { + "kunalvarma05/dropbox-php-sdk": "VolumeDriver `Dropbox`2 require `kunalvarma05/dropbox-php-sdk.", + "google/apiclient": "VolumeDriver GoogleDrive require `google/apiclient:^2.0.", + "barryvdh/elfinder-flysystem-driver": "VolumeDriver for elFinder to use Flysystem as a root.", + "nao-pon/flysystem-google-drive": "require in GoogleDrive network volume mounting with Flysystem." + }, + "autoload": { + "classmap": ["php"] + } +} diff --git a/sites/all/libraries/elfinder/css/elfinder.full.css b/sites/all/libraries/elfinder/css/elfinder.full.css new file mode 100644 index 00000000..c87501ff --- /dev/null +++ b/sites/all/libraries/elfinder/css/elfinder.full.css @@ -0,0 +1,5117 @@ +/*! + * elFinder - file manager for web + * Version 2.1.43 (2018-11-24) + * http://elfinder.org + * + * Copyright 2009-2018, Studio 42 + * Licensed under a 3-clauses BSD license + */ + +/* File: /css/commands.css */ +/******************************************************************/ +/* COMMANDS STYLES */ +/******************************************************************/ + +/********************** COMMAND "RESIZE" ****************************/ +.elfinder-resize-container { + margin-top: .3em; +} + +.elfinder-resize-type { + float: left; + margin-bottom: .4em; +} + +.elfinder-resize-control { + float: left; +} + +.elfinder-resize-control input[type=number] { + border: 1px solid #aaa; + text-align: right; + width: 4.5em; +} + +.elfinder-mobile .elfinder-resize-control input[type=number] { + width: 3.5em; +} + +.elfinder-resize-control input.elfinder-resize-bg { + text-align: center; + width: 5em; + direction: ltr; +} + +.elfinder-dialog-resize .elfinder-resize-control-panel { + margin-top: 10px; +} + +.elfinder-dialog-resize .elfinder-resize-imgrotate, +.elfinder-dialog-resize .elfinder-resize-pallet { + cursor: pointer; +} + +.elfinder-dialog-resize .elfinder-resize-picking { + cursor: crosshair; +} + +.elfinder-dialog-resize .elfinder-resize-grid8 + button { + padding-top: 2px; + padding-bottom: 2px; +} + +.elfinder-resize-preview { + width: 400px; + height: 400px; + padding: 10px; + background: #fff; + border: 1px solid #aaa; + float: right; + position: relative; + overflow: hidden; + text-align: left; + direction: ltr; +} + +.elfinder-resize-handle { + position: relative; +} + +.elfinder-resize-handle-hline, +.elfinder-resize-handle-vline { + position: absolute; + background-image: url("../img/crop.gif"); +} + +.elfinder-resize-handle-hline { + width: 100%; + height: 1px !important; + background-repeat: repeat-x; +} + +.elfinder-resize-handle-vline { + width: 1px !important; + height: 100%; + background-repeat: repeat-y; +} + +.elfinder-resize-handle-hline-top { + top: 0; + left: 0; +} + +.elfinder-resize-handle-hline-bottom { + bottom: 0; + left: 0; +} + +.elfinder-resize-handle-vline-left { + top: 0; + left: 0; +} + +.elfinder-resize-handle-vline-right { + top: 0; + right: 0; +} + +.elfinder-resize-handle-point { + position: absolute; + width: 8px; + height: 8px; + border: 1px solid #777; + background: transparent; +} + +.elfinder-resize-handle-point-n { + top: 0; + left: 50%; + margin-top: -5px; + margin-left: -5px; +} + +.elfinder-resize-handle-point-ne { + top: 0; + right: 0; + margin-top: -5px; + margin-right: -5px; +} + +.elfinder-resize-handle-point-e { + top: 50%; + right: 0; + margin-top: -5px; + margin-right: -5px; +} + +.elfinder-resize-handle-point-se { + bottom: 0; + right: 0; + margin-bottom: -5px; + margin-right: -5px; +} + +.elfinder-resize-handle-point-s { + bottom: 0; + left: 50%; + margin-bottom: -5px; + margin-left: -5px; +} + +.elfinder-resize-handle-point-sw { + bottom: 0; + left: 0; + margin-bottom: -5px; + margin-left: -5px; +} + +.elfinder-resize-handle-point-w { + top: 50%; + left: 0; + margin-top: -5px; + margin-left: -5px; +} + +.elfinder-resize-handle-point-nw { + top: 0; + left: 0; + margin-top: -5px; + margin-left: -5px; +} + +.elfinder-resize-loading { + position: absolute; + width: 200px; + height: 30px; + top: 50%; + margin-top: -25px; + left: 50%; + margin-left: -100px; + text-align: center; + background: url(../img/progress.gif) center bottom repeat-x; +} + +.elfinder-resize-row { + margin-bottom: 9px; + position: relative; +} + +.elfinder-resize-label { + float: left; + width: 80px; + padding-top: 3px; +} + +.elfinder-resize-checkbox-label { + border: 1px solid transparent; +} + +.elfinder-dialog-resize .elfinder-resize-whctrls { + margin: -20px 5px 0 5px; +} + +.elfinder-ltr .elfinder-dialog-resize .elfinder-resize-whctrls { + float: right; +} + +.elfinder-rtl .elfinder-dialog-resize .elfinder-resize-whctrls { + float: left; +} + +.elfinder-dialog-resize .ui-resizable-e, +.elfinder-dialog-resize .ui-resizable-w { + height: 100%; + width: 10px; +} + +.elfinder-dialog-resize .ui-resizable-s, +.elfinder-dialog-resize .ui-resizable-n { + width: 100%; + height: 10px; +} + +.elfinder-dialog-resize .ui-resizable-e { + margin-right: -7px; +} + +.elfinder-dialog-resize .ui-resizable-w { + margin-left: -7px; +} + +.elfinder-dialog-resize .ui-resizable-s { + margin-bottom: -7px; +} + +.elfinder-dialog-resize .ui-resizable-n { + margin-top: -7px; +} + +.elfinder-dialog-resize .ui-resizable-se, +.elfinder-dialog-resize .ui-resizable-sw, +.elfinder-dialog-resize .ui-resizable-ne, +.elfinder-dialog-resize .ui-resizable-nw { + width: 10px; + height: 10px; +} + +.elfinder-dialog-resize .ui-resizable-se { + background: transparent; + bottom: 0; + right: 0; + margin-right: -7px; + margin-bottom: -7px; +} + +.elfinder-dialog-resize .ui-resizable-sw { + margin-left: -7px; + margin-bottom: -7px; +} + +.elfinder-dialog-resize .ui-resizable-ne { + margin-right: -7px; + margin-top: -7px; +} + +.elfinder-dialog-resize .ui-resizable-nw { + margin-left: -7px; + margin-top: -7px; +} + +.elfinder-touch .elfinder-dialog-resize .ui-resizable-s, +.elfinder-touch .elfinder-dialog-resize .ui-resizable-n { + height: 20px; +} + +.elfinder-touch .elfinder-dialog-resize .ui-resizable-e, +.elfinder-touch .elfinder-dialog-resize .ui-resizable-w { + width: 20px; +} + +.elfinder-touch .elfinder-dialog-resize .ui-resizable-se, +.elfinder-touch .elfinder-dialog-resize .ui-resizable-sw, +.elfinder-touch .elfinder-dialog-resize .ui-resizable-ne, +.elfinder-touch .elfinder-dialog-resize .ui-resizable-nw { + width: 30px; + height: 30px; +} + +.elfinder-touch .elfinder-dialog-resize .elfinder-resize-preview .ui-resizable-se { + width: 30px; + height: 30px; + margin: 0; +} + +.elfinder-dialog-resize .ui-icon-grip-solid-vertical { + position: absolute; + top: 50%; + right: 0; + margin-top: -8px; + margin-right: -11px; +} + +.elfinder-dialog-resize .ui-icon-grip-solid-horizontal { + position: absolute; + left: 50%; + bottom: 0; + margin-left: -8px; + margin-bottom: -11px;; +} + +.elfinder-dialog-resize .elfinder-resize-row .ui-buttonset { + float: right; +} + +.elfinder-dialog-resize .elfinder-resize-degree input, +.elfinder-dialog-resize input.elfinder-resize-quality { + width: 3.5em; +} + +.elfinder-mobile .elfinder-dialog-resize .elfinder-resize-degree input, +.elfinder-mobile .elfinder-dialog-resize input.elfinder-resize-quality { + width: 2.5em; +} + +.elfinder-dialog-resize .elfinder-resize-degree button.ui-button { + padding: 6px 8px; +} + +.elfinder-dialog-resize button.ui-button span { + padding: 0; +} + +.elfinder-dialog-resize .elfinder-resize-jpgsize { + font-size: 90%; +} + +.ui-widget-content .elfinder-resize-container .elfinder-resize-rotate-slider { + width: 195px; + margin: 10px 7px; + background-color: #fafafa; +} + +.elfinder-dialog-resize .elfinder-resize-type span.ui-checkboxradio-icon { + display: none; +} + +.elfinder-resize-preset-container { + box-sizing: border-box; + border-radius: 5px; +} + +/********************** COMMAND "EDIT" ****************************/ +/* edit text file textarea */ +.elfinder-file-edit { + width: 100%; + height: 100%; + margin: 0; + padding: 2px; + border: 1px solid #ccc; + box-sizing: border-box; + resize: none; +} + +.elfinder-touch .elfinder-file-edit { + font-size: 16px; +} + +/* edit area */ +.ui-dialog .ui-dialog-content.elfinder-edit-editor { + background-color: #fff; +} + +.ui-dialog .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor { + width: 100%; + height: 300px; + max-height: 100%; + text-align: center; +} + +.ui-dialog .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; +} + +/* bottom margen for softkeyboard on fullscreen mode */ +.elfinder-touch.elfinder-fullscreen-native textarea.elfinder-file-edit { + padding-bottom: 20em; + margin-bottom: -20em; +} + +.std42-dialog .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; +} + +.ui-dialog-buttonpane .ui-icon { + cursor: pointer; +} + +.elfinder-edit-spinner { + position: absolute; + top: 50%; + text-align: center; + width: 100%; + font-size: 16pt; +} + +.elfinder-dialog .elfinder-edit-spinner .elfinder-spinner, +.elfinder-dialog .elfinder-edit-spinner .elfinder-spinner-text { + float: none; +} + +.elfinder-edit-onlineconvert-button { + display: inline-block; + width: 180px; + min-height: 30px; + vertical-align: top; +} +.elfinder-edit-onlineconvert-button button, +.elfinder-edit-onlineconvert-bottom-btn button { + cursor: pointer; +} +.elfinder-edit-onlineconvert-bottom-btn button.elfinder-button-ios-multiline { + -webkit-appearance: none; + border-radius: 16px; + color: #000; + text-align: center; + padding: 8px; + background-color: #eee; + background-image: -webkit-linear-gradient(top, hsl(0,0%,98%) 0%,hsl(0,0%,77%) 100%); + background-image: linear-gradient(to bottom, hsl(0,0%,98%) 0%,hsl(0,0%,77%) 100%); +} +.elfinder-edit-onlineconvert-button .elfinder-button-icon { + margin: 0 10px; + vertical-align: middle; + cursor: pointer; +} +.elfinder-edit-onlineconvert-bottom-btn { + text-align: center; + margin: 10px 0 0; +} + +.elfinder-edit-onlineconvert-link { + margin-top: 1em; + text-align: center; +} +.elfinder-edit-onlineconvert-link .elfinder-button-icon { + background-image: url("../img/editor-icons.png"); + background-repeat: no-repeat; + background-position: 0 -144px; + margin-bottom: -3px; +} +.elfinder-edit-onlineconvert-link a { + text-decoration: none; +} + +/********************** COMMAND "SORT" ****************************/ +/* for list table header sort triangle icon */ +div.elfinder-cwd-wrapper-list tr.ui-state-default td { + position: relative; +} + +div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon { + position: absolute; + top: 4px; + left: 0; + right: 0; + margin: auto 0px auto auto; +} + +.elfinder-touch div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon { + top: 7px; +} + +.elfinder-rtl div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon { + margin: auto auto auto 0px; +} + +/********************** COMMAND "HELP" ****************************/ +/* help dialog */ +.elfinder-help { + margin-bottom: .5em; + -webkit-overflow-scrolling: touch; +} + +/* fix tabs */ +.elfinder-help .ui-tabs-panel { + padding: .5em; + overflow: auto; + padding: 10px; +} + +.elfinder-dialog .ui-tabs .ui-tabs-nav li { + overflow: hidden; +} + +.elfinder-dialog .ui-tabs .ui-tabs-nav li a { + padding: .2em .8em; + display: inline-block; +} + +.elfinder-touch .elfinder-dialog .ui-tabs .ui-tabs-nav li a { + padding: .5em .5em; +} + +.elfinder-dialog .ui-tabs-active a { + background: inherit; +} + +.elfinder-help-shortcuts { + height: auto; + padding: 10px; + margin: 0; + box-sizing: border-box; +} + +.elfinder-help-shortcut { + white-space: nowrap; + clear: both; +} + +.elfinder-help-shortcut-pattern { + float: left; + width: 160px; +} + +.elfinder-help-logo { + width: 100px; + height: 96px; + float: left; + margin-right: 1em; + background: url('../img/logo.png') center center no-repeat; +} + +.elfinder-help h3 { + font-size: 1.5em; + margin: .2em 0 .3em 0; +} + +.elfinder-help-separator { + clear: both; + padding: .5em; +} + +.elfinder-help-link { + display: inline-block; + margin-right: 12px; + padding: 2px 0; + white-space: nowrap; +} + +.elfinder-rtl .elfinder-help-link { + margin-right: 0; + margin-left: 12px; +} + +.elfinder-help .ui-priority-secondary { + font-size: .9em; +} + +.elfinder-help .ui-priority-primary { + margin-bottom: 7px; +} + +.elfinder-help-team { + clear: both; + text-align: right; + border-bottom: 1px solid #ccc; + margin: .5em 0; + font-size: .9em; +} + +.elfinder-help-team div { + float: left; +} + +.elfinder-help-license { + font-size: .9em; +} + +.elfinder-help-disabled { + font-weight: bold; + text-align: center; + margin: 90px 0; +} + +.elfinder-help .elfinder-dont-panic { + display: block; + border: 1px solid transparent; + width: 200px; + height: 200px; + margin: 30px auto; + text-decoration: none; + text-align: center; + position: relative; + background: #d90004; + -moz-box-shadow: 5px 5px 9px #111; + -webkit-box-shadow: 5px 5px 9px #111; + box-shadow: 5px 5px 9px #111; + background: -moz-radial-gradient(80px 80px, circle farthest-corner, #d90004 35%, #960004 100%); + background: -webkit-gradient(radial, 80 80, 60, 80 80, 120, from(#d90004), to(#960004)); + -moz-border-radius: 100px; + -webkit-border-radius: 100px; + border-radius: 100px; + outline: none; +} + +.elfinder-help .elfinder-dont-panic span { + font-size: 3em; + font-weight: bold; + text-align: center; + color: #fff; + position: absolute; + left: 0; + top: 45px; +} + +ul.elfinder-help-integrations ul { + margin-bottom: 1em; + padding: 0; + margin: 0 1em 1em; +} + +ul.elfinder-help-integrations a { + text-decoration: none; +} + +ul.elfinder-help-integrations a:hover { + text-decoration: underline; +} + +.elfinder-help-debug { + height: 100%; + padding: 0; + margin: 0; + overflow: none; + border: none; +} + +.elfinder-help-debug .ui-tabs-panel { + padding: 0; + margin: 0; + overflow: auto; +} + +.elfinder-help-debug fieldset { + margin-bottom: 10px; + border-color: #778899; + border-radius: 10px; +} + +.elfinder-help-debug legend { + font-size: 1.2em; + font-weight: bold; + color: #2e8b57; +} + +.elfinder-help-debug dl { + margin: 0; +} + +.elfinder-help-debug dt { + color: #778899; +} + +.elfinder-help-debug dt:before { + content: "["; +} + +.elfinder-help-debug dt:after { + content: "]"; +} + +.elfinder-help-debug dd { + margin-left: 1em; +} + +.elfinder-help-debug dd span { + /*font-size: 1.2em;*/ +} + +/********************** COMMAND "PREFERENCE" ****************************/ +.elfinder-preference .ui-tabs-nav { + margin-bottom: 1px; +} + +/* fix tabs */ +.elfinder-preference .ui-tabs-panel { + padding: 10px 10px 0; + overflow: auto; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; +} + +.elfinder-preference a.ui-state-hover, +.elfinder-preference label.ui-state-hover { + border: none; +} + +.elfinder-preference dl { + width: 100%; + display: inline-block; + margin: .5em 0; +} + +.elfinder-preference dt { + display: block; + width: 200px; + clear: left; + float: left; + max-width: 50%; +} + +.elfinder-rtl .elfinder-preference dt { + clear: right; + float: right; +} + +.elfinder-preference dd { + margin-bottom: 1em; +} + +.elfinder-preference dt label { + cursor: pointer; +} + +.elfinder-preference dd label, +.elfinder-preference dd input[type=checkbox] { + white-space: nowrap; + display: inline-block; + cursor: pointer; +} + +.elfinder-preference dt.elfinder-preference-checkboxes { + width: 100%; + max-width: none; +} + +.elfinder-preference dd.elfinder-preference-checkboxes { + padding-top: 3ex; +} + +.elfinder-preference select { + max-width: 100%; +} + +.elfinder-preference dd.elfinder-preference-iconSize .ui-slider { + width: 50%; + max-width: 100px; + display: inline-block; + margin: 0 10px; +} + +.elfinder-preference button { + margin: 0 16px; +} + +.elfinder-preference button + button { + margin: 0 -10px; +} + +.elfinder-preference .elfinder-preference-taball .elfinder-reference-hide-taball { + display: none; +} + +.elfinder-preference-theme fieldset { + margin-bottom: 10px; +} + +.elfinder-preference-theme legend a { + font-size: 1.8em; + text-decoration: none; + cursor: pointer; +} + +.elfinder-preference-theme dt { + width: 20%; + word-break: break-all; +} + +.elfinder-preference-theme dt:after { + content: " :"; +} + +.elfinder-preference-theme dd { + margin-inline-start: 20%; +} + +.elfinder-preference img.elfinder-preference-theme-image { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 90%; + max-height: 200px; + cursor: pointer; +} + +.elfinder-preference-theme-btn { + text-align: center; +} + +.elfinder-preference-theme button.elfinder-preference-theme-default { + display: inline; + margin: 0 10px; + font-size: 8pt; +} + +/********************** COMMAND "INFO" ****************************/ +.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon:before { + right: 33px; + left: auto; +} + +.elfinder-info-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after { + content: none; +} + +/********************** COMMAND "UPLOAD" ****************************/ +.elfinder-upload-dialog-wrapper .elfinder-upload-dirselect { + position: absolute; + bottom: 2px; + width: 16px; + height: 16px; + padding: 10px; + border: none; + overflow: hidden; + cursor: pointer; +} + +.elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect { + left: 2px; +} + +.elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect { + right: 2px; +} + +/********************** COMMAND "RM" ****************************/ +.elfinder-ltr .elfinder-rm-title .elfinder-cwd-icon:before { + left: 38px; +} + +.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon:before { + right: 86px; + left: auto; +} + +.elfinder-rm-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after { + content: none; +} + +/********************** COMMAND "RENAME" ****************************/ +.elfinder-rename-batch div { + margin: 5px 8px; +} + +.elfinder-rename-batch .elfinder-rename-batch-name input { + width: 100%; + font-size: 1.6em; +} + +.elfinder-rename-batch-type { + text-align: center; +} + +.elfinder-rename-batch .elfinder-rename-batch-type label { + margin: 2px; + font-size: .9em; +} + +.elfinder-rename-batch-preview { + padding: 0 8px; + font-size: 1.1em; + min-height: 4ex; +} + + +/* File: /css/common.css */ +/*********************************************/ +/* COMMON ELFINDER STUFFS */ +/*********************************************/ + +/* for old jQuery UI */ +.ui-front { + z-index: 100; +} + +/* common container */ +.elfinder { + padding: 0; + position: relative; + display: block; + visibility: visible; + font-size: 18px; + font-family: Verdana, Arial, Helvetica, sans-serif; +} + +/* prevent auto zoom on iOS */ +.elfinder-ios input, +.elfinder-ios select, +.elfinder-ios textarea { + font-size: 16px !important; +} + +/* full screen mode */ +.elfinder.elfinder-fullscreen > .ui-resizable-handle { + display: none; +} + +.elfinder-font-mono { + line-height: 2ex; +} + +/* in lazy execution status */ +.elfinder.elfinder-processing * { + cursor: progress !important +} + +.elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after { + position: absolute; + top: 0; + width: 100%; + height: 3px; + content: ''; + left: 0; + background-image: url(../img/progress.gif); + opacity: .6; + pointer-events: none; +} + +/* for disable select of Touch devices */ +.elfinder *:not(input):not(textarea):not(select):not([contenteditable=true]), +.elfinder-contextmenu *:not(input):not(textarea):not(select):not([contenteditable=true]) { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + /*-webkit-touch-callout:none;*/ + -webkit-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; + user-select: none; +} + +.elfinder .overflow-scrolling-touch { + -webkit-overflow-scrolling: touch; +} + +/* right to left enviroment */ +.elfinder-rtl { + text-align: right; + direction: rtl; +} + +/* nav and cwd container */ +.elfinder-workzone { + padding: 0; + position: relative; + overflow: hidden; +} + +/* dir/file permissions and symlink markers */ +.elfinder-lock, +.elfinder-perms, +.elfinder-symlink { + position: absolute; + width: 16px; + height: 16px; + background-image: url(../img/toolbar.png); + background-repeat: no-repeat; + background-position: 0 -528px; +} + +.elfinder-symlink { +} + +/* noaccess */ +.elfinder-na .elfinder-perms { + background-position: 0 -96px; +} + +/* read only */ +.elfinder-ro .elfinder-perms { + background-position: 0 -64px; +} + +/* write only */ +.elfinder-wo .elfinder-perms { + background-position: 0 -80px; +} + +/* volume type group */ +.elfinder-group .elfinder-perms { + background-position: 0 0px; +} + +/* locked */ +.elfinder-lock { + background-position: 0 -656px; +} + +/* drag helper */ +.elfinder-drag-helper { + top: 0px; + left: 0px; + width: 70px; + height: 60px; + padding: 0 0 0 25px; + z-index: 100000; + will-change: left, top; +} + +.elfinder-drag-helper.html5-native { + position: absolute; + top: -1000px; + left: -1000px; +} + +/* drag helper status icon (default no-drop) */ +.elfinder-drag-helper-icon-status { + position: absolute; + width: 16px; + height: 16px; + left: 42px; + top: 60px; + background: url('../img/toolbar.png') 0 -96px no-repeat; + display: block; +} + +/* show "up-arrow" icon for move item */ +.elfinder-drag-helper-move .elfinder-drag-helper-icon-status { + background-position: 0 -720px; +} + +/* show "plus" icon when ctrl/shift pressed */ +.elfinder-drag-helper-plus .elfinder-drag-helper-icon-status { + background-position: 0 -544px; +} + +/* files num in drag helper */ +.elfinder-drag-num { + display: inline-box; + position: absolute; + top: 0; + left: 0; + width: auto; + height: 14px; + text-align: center; + padding: 1px 3px 1px 3px; + + font-weight: bold; + color: #fff; + background-color: red; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +/* icon in drag helper */ +.elfinder-drag-helper .elfinder-cwd-icon { + margin: 0 0 0 -24px; + float: left; +} + +/* transparent overlay */ +.elfinder-overlay { + position: absolute; + opacity: .2; + filter: Alpha(Opacity=20); +} + +/* panels under/below cwd (for search field etc) */ +.elfinder .elfinder-panel { + position: relative; + background-image: none; + padding: 7px 12px; +} + +/* for html5 drag and drop */ +[draggable=true] { + -khtml-user-drag: element; +} + +/* for place holder to content editable elements */ +.elfinder [contentEditable=true]:empty:not(:focus):before { + content: attr(data-ph); +} + +/* bottom tray */ +.elfinder div.elfinder-bottomtray { + position: fixed; + bottom: 0; + max-width: 100%; + opacity: .8; +} + +.elfinder.elfinder-ltr div.elfinder-bottomtray { + left: 0; +} + +.elfinder.elfinder-rtl div.elfinder-bottomtray { + right: 0; +} + +/* tooltip */ +.elfinder-ui-tooltip, +.elfinder .elfinder-ui-tooltip { + font-size: 14px; + padding: 2px 4px; +} + +/* File: /css/contextmenu.css */ +/* menu and submenu */ +.elfinder .elfinder-contextmenu, +.elfinder .elfinder-contextmenu-sub { + position: absolute; + border: 1px solid #aaa; + background: #fff; + color: #555; + padding: 4px 0; + top: 0; + left: 0; +} + +/* submenu */ +.elfinder .elfinder-contextmenu-sub { + top: 5px; +} + +/* submenu in rtl/ltr enviroment */ +.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub { + margin-left: -5px; +} + +.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub { + margin-right: -5px; +} + +/* menu item */ +.elfinder .elfinder-contextmenu-header { + margin-top: -4px; + padding: 0 .5em .2ex; + border: none; + text-align: center; +} + +.elfinder .elfinder-contextmenu-header span { + font-weight: normal; + font-size: 0.8em; + font-weight: bolder; +} + +.elfinder .elfinder-contextmenu-item { + position: relative; + display: block; + padding: 4px 30px; + text-decoration: none; + white-space: nowrap; + cursor: default; +} + +.elfinder .elfinder-contextmenu-item.ui-state-active { + border: none; +} + +.elfinder .elfinder-contextmenu-item .ui-icon { + width: 16px; + height: 16px; + position: absolute; + left: auto; + right: auto; + top: 50%; + margin-top: -8px; +} + +.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon { + left: 2px; +} + +.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon { + right: 2px; +} + +.elfinder-touch .elfinder-contextmenu-item { + padding: 12px 38px; +} + +/* root icon of each volume */ +.elfinder-navbar-root-local.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_local.svg"); + background-size: contain; +} + +.elfinder-navbar-root-trash.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_trash.svg"); + background-size: contain; +} + +.elfinder-navbar-root-ftp.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_ftp.svg"); + background-size: contain; +} + +.elfinder-navbar-root-sql.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_sql.svg"); + background-size: contain; +} + +.elfinder-navbar-root-dropbox.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_dropbox.svg"); + background-size: contain; +} + +.elfinder-navbar-root-googledrive.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_googledrive.svg"); + background-size: contain; +} + +.elfinder-navbar-root-onedrive.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_onedrive.svg"); + background-size: contain; +} + +.elfinder-navbar-root-box.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_box.svg"); + background-size: contain; +} + +.elfinder-navbar-root-zip.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_zip.svg"); + background-size: contain; +} + +.elfinder-navbar-root-network.elfinder-contextmenu-icon { + background-image: url("../img/volume_icon_network.svg"); + background-size: contain; +} + +/* text in item */ +.elfinder .elfinder-contextmenu .elfinder-contextmenu-item span { + display: block; +} + +/* submenu item in rtl/ltr enviroment */ +.elfinder .elfinder-contextmenu-sub .elfinder-contextmenu-item { + padding-left: 12px; + padding-right: 12px; +} + +.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item { + text-align: left; +} + +.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item { + text-align: right; +} + +.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { + padding-left: 28px; +} + +.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { + padding-right: 28px; +} + +.elfinder-touch .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { + padding-left: 36px; +} + +.elfinder-touch .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon { + padding-right: 36px; +} + +/* command/submenu icon */ +.elfinder .elfinder-contextmenu-extra-icon, +.elfinder .elfinder-contextmenu-arrow, +.elfinder .elfinder-contextmenu-icon { + position: absolute; + top: 50%; + margin-top: -8px; + overflow: hidden; +} + +/* command icon in rtl/ltr enviroment */ +.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon { + left: 8px; +} + +.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon { + right: 8px; +} + +.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon { + right: 8px; +} + +.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon { + left: 8px; +} + +/* arrow icon */ +.elfinder .elfinder-contextmenu-arrow { + width: 16px; + height: 16px; + background: url('../img/arrows-normal.png') 5px 4px no-repeat; +} + +/* arrow icon in rtl/ltr enviroment */ +.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow { + right: 5px; +} + +.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow { + left: 5px; + background-position: 0 -10px; +} + +/* command extra icon's , tag */ +.elfinder .elfinder-contextmenu-extra-icon a, +.elfinder .elfinder-contextmenu-extra-icon span { + display: inline-block; + width: 100%; + height: 100%; + padding: 20px; + margin: 0; + color: transparent !important; + text-decoration: none; + cursor: pointer; +} + +/* disable ui border/bg image on hover */ +.elfinder .elfinder-contextmenu .ui-state-hover { + border: 0 solid; + background-image: none; +} + +/* separator */ +.elfinder .elfinder-contextmenu-separator { + height: 0px; + border-top: 1px solid #ccc; + margin: 0 1px; +} + +/* for CSS style priority to ui-state-disabled - "background-image: none" */ +.elfinder .elfinder-contextmenu-item .elfinder-button-icon.ui-state-disabled { + background-image: url('../img/toolbar.png'); +} + +/* File: /css/cwd.css */ +/******************************************************************/ +/* CURRENT DIRECTORY STYLES */ +/******************************************************************/ +/* cwd container to avoid selectable on scrollbar */ +.elfinder-cwd-wrapper { + overflow: auto; + position: relative; + padding: 2px; + margin: 0; +} + +.elfinder-cwd-wrapper-list { + padding: 0; +} + +/* container */ +.elfinder-cwd { + position: absolute; + top: 0; + cursor: default; + padding: 0; + margin: 0; + -ms-touch-action: auto; + touch-action: auto; + min-width: 100%; +} + +.elfinder-ltr .elfinder-cwd { + left: 0; +} + +.elfinder-rtl .elfinder-cwd { + right: 0; +} + +.elfinder-cwd.elfinder-table-header-sticky { + position: -webkit-sticky; + position: -ms-sticky; + position: sticky; + top: 0; + left: auto; + right: auto; + width: -webkit-max-content; + width: -moz-max-content; + width: -ms-max-content; + width: max-content; + height: 0; + overflow: visible; +} + +.elfinder-cwd.elfinder-table-header-sticky table { + border-top: 2px solid; + padding-top: 0; +} + +.elfinder-cwd.elfinder-table-header-sticky td { + display: inline-block; +} + +.elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table { + border-top: 2px solid transparent; +} + +/* fixed table header container */ +.elfinder-cwd-fixheader .elfinder-cwd { + position: relative; +} + +/* container active on dropenter */ +.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active { + outline: 2px solid #8cafed; + outline-offset: -2px; +} + +.elfinder-cwd-wrapper-empty .elfinder-cwd:after { + display: block; + position: absolute; + height: auto; + width: 90%; + width: calc(100% - 20px); + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translateY(-50%) translateX(-50%); + -webkit-transform: translateY(-50%) translateX(-50%); + transform: translateY(-50%) translateX(-50%); + line-height: 1.5em; + text-align: center; + white-space: pre-wrap; + opacity: 0.6; + filter: Alpha(Opacity=60); + font-weight: bold; +} + +.elfinder-cwd-file .elfinder-cwd-select { + position: absolute; + top: 0px; + left: 0px; + background-color: transparent; + opacity: .4; + filter: Alpha(Opacity=40); +} + +.elfinder-mobile .elfinder-cwd-file .elfinder-cwd-select { + width: 30px; + height: 30px; +} + +.elfinder-cwd-file.ui-selected .elfinder-cwd-select { + opacity: .8; + filter: Alpha(Opacity=80); +} + +.elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select { + left: auto; + right: 0px; +} + +.elfinder .elfinder-cwd-selectall { + position: absolute; + width: 30px; + height: 30px; + top: 0px; + opacity: .8; + filter: Alpha(Opacity=80); +} + +.elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall { + display: none; +} + +/************************** ICONS VIEW ********************************/ + +.elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall { + text-align: right; + right: 18px; + left: auto; +} + +.elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall { + text-align: left; + right: auto; + left: 18px; +} + +.elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall { + right: 0px; +} + +.elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall { + left: 0px; +} + +.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover { + background-color: transparent; +} + +/* file container */ +.elfinder-cwd-view-icons .elfinder-cwd-file { + width: 120px; + height: 90px; + padding-bottom: 2px; + cursor: default; + border: none; + position: relative; +} + +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active { + border: none; +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file { + float: left; + margin: 0 3px 2px 0; +} + +.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file { + float: right; + margin: 0 0 5px 3px; +} + +/* remove ui hover class border */ +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { + border: 0 solid; +} + +/* icon wrapper to create selected highlight around icon */ +.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper { + width: 52px; + height: 52px; + margin: 1px auto 1px auto; + padding: 2px; + position: relative; +} + +/*** Custom Icon Size size1 - size3 ***/ +/* type badge */ +.elfinder-cwd-size1 .elfinder-cwd-icon:before, +.elfinder-cwd-size2 .elfinder-cwd-icon:before, +.elfinder-cwd-size3 .elfinder-cwd-icon:before { + top: 3px; + display: block; +} + +/* size1 */ +.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file { + width: 120px; + height: 112px; +} + +.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper { + width: 74px; + height: 74px; +} + +.elfinder-cwd-size1 .elfinder-cwd-icon { + -ms-transform-origin: top center; + -ms-transform: scale(1.5); + -webkit-transform-origin: top center; + -webkit-transform: scale(1.5); + transform-origin: top center; + transform: scale(1.5); +} + +.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before { + -ms-transform-origin: top left; + -ms-transform: scale(1.35) translate(-4px, 15%); + -webkit-transform-origin: top left; + -webkit-transform: scale(1.35) translate(-4px, 15%); + transform-origin: top left; + transform: scale(1.35) translate(-4px, 15%); +} + +.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:after { + -ms-transform: scale(1) translate(10px, -5px); + -webkit-transform: scale(1) translate(10px, -5px); + transform: scale(1) translate(10px, -5px); +} + +.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl { + -ms-transform-origin: center center; + -ms-transform: scale(1); + -webkit-transform-origin: center center; + -webkit-transform: scale(1); + transform-origin: center center; + transform: scale(1); + width: 72px; + height: 72px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; +} + +/* size2 */ +.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file { + width: 140px; + height: 134px; +} + +.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper { + width: 98px; + height: 98px; +} + +.elfinder-cwd-size2 .elfinder-cwd-icon { + -ms-transform-origin: top center; + -ms-transform: scale(2); + -webkit-transform-origin: top center; + -webkit-transform: scale(2); + transform-origin: top center; + transform: scale(2); +} + +.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before { + -ms-transform-origin: top left; + -ms-transform: scale(1.8) translate(-5px, 18%); + -webkit-transform-origin: top left; + -webkit-transform: scale(1.8) translate(-5px, 18%); + transform-origin: top left; + transform: scale(1.8) translate(-5px, 18%); +} + +.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:after { + -ms-transform: scale(1.1) translate(0px, 10px); + -webkit-transform: scale(1.1) translate(0px, 10px); + transform: scale(1.1) translate(0px, 10px); +} + +.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl { + -ms-transform-origin: center center; + -ms-transform: scale(1); + -webkit-transform-origin: center center; + -webkit-transform: scale(1); + transform-origin: center center; + transform: scale(1); + width: 96px; + height: 96px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +/* size3 */ +.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file { + width: 174px; + height: 158px; +} + +.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper { + width: 122px; + height: 122px; +} + +.elfinder-cwd-size3 .elfinder-cwd-icon { + -ms-transform-origin: top center; + -ms-transform: scale(2.5); + -webkit-transform-origin: top center; + -webkit-transform: scale(2.5); + transform-origin: top center; + transform: scale(2.5); +} + +.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before { + -ms-transform-origin: top left; + -ms-transform: scale(2.25) translate(-6px, 20%); + -webkit-transform-origin: top left; + -webkit-transform: scale(2.25) translate(-6px, 20%); + transform-origin: top left; + transform: scale(2.25) translate(-6px, 20%); +} + +.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:after { + -ms-transform: scale(1.2) translate(-9px, 22px); + -webkit-transform: scale(1.2) translate(-9px, 22px); + transform: scale(1.2) translate(-9px, 22px); +} + +.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl { + -ms-transform-origin: center center; + -ms-transform: scale(1); + -webkit-transform-origin: center center; + -webkit-transform: scale(1); + transform-origin: center center; + transform: scale(1); + width: 120px; + height: 120px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; +} + +/* file name place */ +.elfinder-cwd-view-icons .elfinder-cwd-filename { + text-align: center; + max-height: 2.4em; + line-height: 1.2em; + white-space: pre-line; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + margin: 3px 1px 0 1px; + padding: 1px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + /* for webkit CSS3 */ + word-break: break-word; + overflow-wrap: break-word; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +/* permissions/symlink markers */ +.elfinder-cwd-view-icons .elfinder-perms { + bottom: 4px; + right: 2px; +} + +.elfinder-cwd-view-icons .elfinder-lock { + top: -3px; + right: -2px; +} + +.elfinder-cwd-view-icons .elfinder-symlink { + bottom: 6px; + left: 0px; +} + +/* icon/thumbnail */ +.elfinder-cwd-icon { + display: block; + width: 48px; + height: 48px; + margin: 0 auto; + background-image: url('../img/icons-big.svg'); + background-image: url('../img/icons-big.png') \9; + background-position: 0 0; + background-repeat: no-repeat; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} + +/* volume icon of root in folder */ +.elfinder-navbar-root-local .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_local.svg"); + background-image: url("../img/volume_icon_local.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon { + background-position: 1px -1px; +} + +.elfinder-navbar-root-trash .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_trash.svg"); + background-image: url("../img/volume_icon_trash.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon { + background-position: 1px -1px; +} + +.elfinder-navbar-root-ftp .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_ftp.svg"); + background-image: url("../img/volume_icon_ftp.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon { + background-position: 1px -1px; +} + +.elfinder-navbar-root-sql .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_sql.svg"); + background-image: url("../img/volume_icon_sql.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon { + background-position: 1px -1px; +} + +.elfinder-navbar-root-dropbox .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_dropbox.svg"); + background-image: url("../img/volume_icon_dropbox.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon { + background-position: 1px -1px; +} + +.elfinder-navbar-root-googledrive .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_googledrive.svg"); + background-image: url("../img/volume_icon_googledrive.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-navbar-root-onedrive .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_onedrive.svg"); + background-image: url("../img/volume_icon_onedrive.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-navbar-root-box .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_box.svg"); + background-image: url("../img/volume_icon_box.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-navbar-root-zip .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-zip.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_zip.svg"); + background-image: url("../img/volume_icon_zip.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon { + background-position: 1px -1px; +} + +.elfinder-navbar-root-network .elfinder-cwd-icon, +.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon, +.elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon { + background-image: url("../img/volume_icon_network.svg"); + background-image: url("../img/volume_icon_network.png") \9; + background-position: 0 0; + background-size: contain; +} + +.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon { + background-position: 1px -1px; +} + +/* type badge in "icons" view */ +.elfinder-cwd-icon:before { + content: none; + position: absolute; + left: 0px; + top: 5px; + min-width: 20px; + max-width: 84px; + text-align: center; + padding: 0px 4px 1px; + border-radius: 4px; + font-family: Verdana; + font-size: 10px; + line-height: 1.3em; + -webkit-transform: scale(0.9); + -moz-transform: scale(0.9); + -ms-transform: scale(0.9); + -o-transform: scale(0.9); + transform: scale(0.9); +} + +.elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before { + left: -10px; +} + +/* addtional type badge name */ +.elfinder-cwd-icon.elfinder-cwd-icon-mp2t:before { + content: 'ts' +} + +.elfinder-cwd-icon.elfinder-cwd-icon-dash-xml:before { + content: 'dash' +} + +.elfinder-cwd-icon.elfinder-cwd-icon-x-mpegurl:before { + content: 'hls' +} + +.elfinder-cwd-icon.elfinder-cwd-icon-x-c:before { + content: 'c++' +} + +/* thumbnail image */ +.elfinder-cwd-icon.elfinder-cwd-bgurl { + background-position: center center; + background-repeat: no-repeat; + -moz-background-size: contain; + background-size: contain; +} + +/* thumbnail self */ +.elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself { + -moz-background-size: cover; + background-size: cover; +} + +/* thumbnail crop*/ +.elfinder-cwd-icon.elfinder-cwd-bgurl { + -moz-background-size: cover; + background-size: cover; +} + +.elfinder-cwd-icon.elfinder-cwd-bgurl:after { + content: ' '; +} + +.elfinder-cwd-bgurl:after { + position: relative; + display: inline-block; + top: 36px; + left: -38px; + width: 48px; + height: 48px; + background-image: url('../img/icons-big.svg'); + background-image: url('../img/icons-big.png') \9; + background-repeat: no-repeat; + background-size: auto !important; + opacity: .8; + filter: Alpha(Opacity=60); + -webkit-transform-origin: 54px -24px; + -webkit-transform: scale(.6); + -moz-transform-origin: 54px -24px; + -moz-transform: scale(.6); + -ms-transform-origin: 54px -24px; + -ms-transform: scale(.6); + -o-transform-origin: 54px -24px; + -o-transform: scale(.6); + transform-origin: 54px -24px; + transform: scale(.6); +} + +/* thumbnail image and draging icon */ +.elfinder-cwd-icon.elfinder-cwd-icon-drag { + width: 48px; + height: 48px; +} + +/* thumbnail image and draging icon overlay none */ +.elfinder-cwd-icon.elfinder-cwd-icon-drag:before, +.elfinder-cwd-icon.elfinder-cwd-icon-drag:after, +.elfinder-cwd-icon-image.elfinder-cwd-bgurl:after, +.elfinder-cwd-icon-directory.elfinder-cwd-bgurl:after { + content: none; +} + +/* "opened folder" icon on dragover */ +.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon { + background-position: 0 -100px; +} + +.elfinder-cwd .elfinder-droppable-active { + outline: 2px solid #8cafed; + outline-offset: -2px; +} + +/* mimetypes icons */ +.elfinder-cwd-icon-directory { + background-position: 0 -50px; +} + +.elfinder-cwd-icon-application:after, +.elfinder-cwd-icon-application { + background-position: 0 -150px; +} + +.elfinder-cwd-icon-text:after, +.elfinder-cwd-icon-text { + background-position: 0 -1350px; +} + +.elfinder-cwd-icon-plain:after, +.elfinder-cwd-icon-plain, +.elfinder-cwd-icon-x-empty:after, +.elfinder-cwd-icon-x-empty { + background-position: 0 -200px; +} + +.elfinder-cwd-icon-image:after, +.elfinder-cwd-icon-vnd-adobe-photoshop:after, +.elfinder-cwd-icon-image, +.elfinder-cwd-icon-vnd-adobe-photoshop { + background-position: 0 -250px; +} + +.elfinder-cwd-icon-postscript:after, +.elfinder-cwd-icon-postscript { + background-position: 0 -1550px; +} + +.elfinder-cwd-icon-audio:after, +.elfinder-cwd-icon-audio { + background-position: 0 -300px; +} + +.elfinder-cwd-icon-video:after, +.elfinder-cwd-icon-video, +.elfinder-cwd-icon-flash-video, +.elfinder-cwd-icon-dash-xml, +.elfinder-cwd-icon-vnd-apple-mpegurl, +.elfinder-cwd-icon-x-mpegurl { + background-position: 0 -350px; +} + +.elfinder-cwd-icon-rtf:after, +.elfinder-cwd-icon-rtfd:after, +.elfinder-cwd-icon-rtf, +.elfinder-cwd-icon-rtfd { + background-position: 0 -400px; +} + +.elfinder-cwd-icon-pdf:after, +.elfinder-cwd-icon-pdf { + background-position: 0 -450px; +} + +.elfinder-cwd-icon-ms-excel, +.elfinder-cwd-icon-ms-excel:after, +.elfinder-cwd-icon-vnd-ms-excel, +.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after, +.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after, +.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after, +.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after, +.elfinder-cwd-icon-vnd-ms-excel:after, +.elfinder-cwd-icon-vnd-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-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-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-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-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-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-ms-office, +.elfinder-cwd-icon-vnd-ms-office: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-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 { + background-position: 0 -500px +} + +.elfinder-cwd-icon-html:after, +.elfinder-cwd-icon-html { + background-position: 0 -550px; +} + +.elfinder-cwd-icon-css:after, +.elfinder-cwd-icon-css { + background-position: 0 -600px; +} + +.elfinder-cwd-icon-javascript:after, +.elfinder-cwd-icon-x-javascript:after, +.elfinder-cwd-icon-javascript, +.elfinder-cwd-icon-x-javascript { + background-position: 0 -650px; +} + +.elfinder-cwd-icon-x-perl:after, +.elfinder-cwd-icon-x-perl { + background-position: 0 -700px; +} + +.elfinder-cwd-icon-x-python:after, +.elfinder-cwd-icon-x-python { + background-position: 0 -750px; +} + +.elfinder-cwd-icon-x-ruby:after, +.elfinder-cwd-icon-x-ruby { + background-position: 0 -800px; +} + +.elfinder-cwd-icon-x-sh:after, +.elfinder-cwd-icon-x-shellscript:after, +.elfinder-cwd-icon-x-sh, +.elfinder-cwd-icon-x-shellscript { + background-position: 0 -850px; +} + +.elfinder-cwd-icon-x-c:after, +.elfinder-cwd-icon-x-csrc:after, +.elfinder-cwd-icon-x-chdr:after, +.elfinder-cwd-icon-x-c--:after, +.elfinder-cwd-icon-x-c--src:after, +.elfinder-cwd-icon-x-c--hdr:after, +.elfinder-cwd-icon-x-java:after, +.elfinder-cwd-icon-x-java-source:after, +.elfinder-cwd-icon-x-c, +.elfinder-cwd-icon-x-csrc, +.elfinder-cwd-icon-x-chdr, +.elfinder-cwd-icon-x-c--, +.elfinder-cwd-icon-x-c--src, +.elfinder-cwd-icon-x-c--hdr, +.elfinder-cwd-icon-x-java, +.elfinder-cwd-icon-x-java-source { + background-position: 0 -900px; +} + +.elfinder-cwd-icon-x-php:after, +.elfinder-cwd-icon-x-php { + background-position: 0 -950px; +} + +.elfinder-cwd-icon-xml:after, +.elfinder-cwd-icon-xml { + background-position: 0 -1000px; +} + +.elfinder-cwd-icon-zip:after, +.elfinder-cwd-icon-x-zip:after, +.elfinder-cwd-icon-x-xz:after, +.elfinder-cwd-icon-x-7z-compressed:after, +.elfinder-cwd-icon-zip, +.elfinder-cwd-icon-x-zip, +.elfinder-cwd-icon-x-xz, +.elfinder-cwd-icon-x-7z-compressed { + background-position: 0 -1050px; +} + +.elfinder-cwd-icon-x-gzip:after, +.elfinder-cwd-icon-x-tar:after, +.elfinder-cwd-icon-x-gzip, +.elfinder-cwd-icon-x-tar { + background-position: 0 -1100px; +} + +.elfinder-cwd-icon-x-bzip:after, +.elfinder-cwd-icon-x-bzip2:after, +.elfinder-cwd-icon-x-bzip, +.elfinder-cwd-icon-x-bzip2 { + background-position: 0 -1150px; +} + +.elfinder-cwd-icon-x-rar:after, +.elfinder-cwd-icon-x-rar-compressed:after, +.elfinder-cwd-icon-x-rar, +.elfinder-cwd-icon-x-rar-compressed { + background-position: 0 -1200px; +} + +.elfinder-cwd-icon-x-shockwave-flash:after, +.elfinder-cwd-icon-x-shockwave-flash { + background-position: 0 -1250px; +} + +.elfinder-cwd-icon-group { + background-position: 0 -1300px; +} + +/* textfield inside icon */ +.elfinder-cwd-filename input { + width: 100%; + border: none; + margin: 0; + padding: 0; +} + +.elfinder-cwd-view-icons input { + text-align: center; +} + +.elfinder-cwd-view-icons textarea { + width: 100%; + border: 0px solid; + margin: 0; + padding: 0; + text-align: center; + overflow: hidden; + resize: none; +} + +.elfinder-cwd-view-icons { + text-align: center; +} + +/************************************ LIST VIEW ************************************/ + +/*.elfinder-cwd-view-list { padding:0 0 4px 0; }*/ + +.elfinder-cwd-wrapper.elfinder-cwd-fixheader .elfinder-cwd::after { + display: none; +} + +.elfinder-cwd table { + width: 100%; + border-collapse: separate; + border: 0 solid; + margin: 0 0 10px 0; + border-spacing: 0; + box-sizing: padding-box; + padding: 2px; + position: relative; +} + +.elfinder-cwd table td { + /* fix conflict with Bootstrap CSS */ + box-sizing: content-box; +} + +.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader { + position: absolute; + overflow: hidden; +} + +.elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before { + content: ''; + position: absolute; + width: 100%; + top: 0; + height: 3px; + background-color: white; +} + +.elfinder-droppable-active + .elfinder-cwd-wrapper-list.elfinder-cwd-fixheader:before { + background-color: #8cafed; +} + +.elfinder .elfinder-workzone div.elfinder-cwd-fixheader table { + table-layout: fixed; +} + +.elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader { + position: relative; +} + +.elfinder-ltr .elfinder-cwd thead .elfinder-cwd-selectall { + text-align: left; + right: auto; + left: 0px; + padding-top: 3px; +} + +.elfinder-rtl .elfinder-cwd thead .elfinder-cwd-selectall { + text-align: right; + right: 0px; + left: auto; + padding-top: 3px; +} + +.elfinder-touch .elfinder-cwd thead .elfinder-cwd-selectall { + padding-top: 4px; +} + +.elfinder .elfinder-cwd table thead tr { + border-left: 0 solid; + border-top: 0 solid; + border-right: 0 solid; +} + +.elfinder .elfinder-cwd table thead td { + padding: 4px 14px; +} + +.elfinder-ltr .elfinder-cwd.elfinder-has-checkbox table thead td:first-child { + padding: 4px 14px 4px 22px; +} + +.elfinder-rtl .elfinder-cwd.elfinder-has-checkbox table thead td:first-child { + padding: 4px 22px 4px 14px; +} + +.elfinder-touch .elfinder-cwd table thead td, +.elfinder-touch .elfinder-cwd.elfinder-has-checkbox table thead td:first-child { + padding-top: 8px; + padding-bottom: 8px; +} + +.elfinder .elfinder-cwd table thead td.ui-state-active { + background: #ebf1f6; + background: -moz-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ebf1f6), color-stop(50%, #abd3ee), color-stop(51%, #89c3eb), color-stop(100%, #d5ebfb)); + background: -webkit-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%); + background: -o-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%); + background: -ms-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%); + background: linear-gradient(to bottom, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebf1f6', endColorstr='#d5ebfb', GradientType=0); +} + +.elfinder .elfinder-cwd table td { + padding: 4px 12px; + white-space: pre; + overflow: hidden; + text-align: right; + cursor: default; + border: 0 solid; +} + +.elfinder .elfinder-cwd table tbody td:first-child { + position: relative +} + +.elfinder .elfinder-cwd table td div { + box-sizing: content-box; +} + +tr.elfinder-cwd-file td .elfinder-cwd-select { + padding-top: 3px; +} + +.elfinder-mobile tr.elfinder-cwd-file td .elfinder-cwd-select { + width: 40px; +} + +.elfinder-touch tr.elfinder-cwd-file td .elfinder-cwd-select { + padding-top: 10px; +} + +.elfinder-touch .elfinder-cwd tr td { + padding: 10px 12px; +} + +.elfinder-touch .elfinder-cwd tr.elfinder-cwd-file td { + padding: 13px 12px; +} + +.elfinder-ltr .elfinder-cwd table td { + text-align: right; +} + +.elfinder-ltr .elfinder-cwd table td:first-child { + text-align: left; +} + +.elfinder-rtl .elfinder-cwd table td { + text-align: left; +} + +.elfinder-rtl .elfinder-cwd table td:first-child { + text-align: right; +} + +.elfinder-odd-row { + background: #eee; +} + +/* filename container */ +.elfinder-cwd-view-list .elfinder-cwd-file-wrapper { + width: 97%; + position: relative; +} + +/* filename container in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper { + margin-left: 8px; +} + +.elfinder-rtl .elfinder-cwd-view-list.elfinder-has-checkbox .elfinder-cwd-file-wrapper { + margin-right: 8px; +} + +.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename { + padding-left: 23px; +} + +.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-filename { + padding-right: 23px; +} + +/* premissions/symlink marker */ +.elfinder-cwd-view-list .elfinder-perms, +.elfinder-cwd-view-list .elfinder-lock, +.elfinder-cwd-view-list .elfinder-symlink { + margin-top: -6px; + opacity: .6; + filter: Alpha(Opacity=60); +} + +.elfinder-cwd-view-list .elfinder-perms { + bottom: -4px; +} + +.elfinder-cwd-view-list .elfinder-lock { + top: 0px; +} + +.elfinder-cwd-view-list .elfinder-symlink { + bottom: -4px; +} + +/* markers in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms { + left: 8px; +} + +.elfinder-rtl .elfinder-cwd-view-list .elfinder-perms { + right: -8px; +} + +.elfinder-ltr .elfinder-cwd-view-list .elfinder-lock { + left: 10px; +} + +.elfinder-rtl .elfinder-cwd-view-list .elfinder-lock { + right: -10px; +} + +.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink { + left: -7px; +} + +.elfinder-rtl .elfinder-cwd-view-list .elfinder-symlink { + right: 7px; +} + +/* file icon */ +.elfinder-cwd-view-list td .elfinder-cwd-icon { + width: 16px; + height: 16px; + position: absolute; + top: 50%; + margin-top: -8px; + background-image: url(../img/icons-small.png); +} + +/* icon in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon { + left: 0; +} + +.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon { + right: 0; +} + +/* type badge, thumbnail image overlay */ +.elfinder-cwd-view-list .elfinder-cwd-icon:before, +.elfinder-cwd-view-list .elfinder-cwd-icon:after { + content: none; +} + +/* table header resize handle */ +.elfinder-cwd-view-list thead td .ui-resizable-handle { + height: 100%; + top: 6px; +} + +.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-handle { + top: -4px; + margin: 10px; +} + +.elfinder-cwd-view-list thead td .ui-resizable-e { + right: -7px; +} + +.elfinder-cwd-view-list thead td .ui-resizable-w { + left: -7px; +} + +.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-e { + right: -16px; +} + +.elfinder-touch .elfinder-cwd-view-list thead td .ui-resizable-w { + left: -16px; +} + +/* empty message */ +.elfinder-cwd-wrapper-empty .elfinder-cwd-view-list.elfinder-cwd:after { + margin-top: 0; +} + +/* overlay message board */ +.elfinder-cwd-message-board { + position: absolute; + position: -webkit-sticky; + position: sticky; + width: 100%; + height: calc(100% - 0.01px); /* for Firefox scroll problem */ + top: 0; + left: 0; + margin: 0; + padding: 0; + pointer-events: none; + background-color: transparent; +} + +/* overlay message board for trash */ +.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board { + background-image: url(../img/trashmesh.png); +} + +.elfinder-cwd-message-board .elfinder-cwd-trash { + position: absolute; + bottom: 0; + font-size: 30px; + width: 100%; + text-align: right; + display: none; +} + +.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-trash { + text-align: left; +} + +.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-trash { + font-size: 20px; +} + +.elfinder-cwd-wrapper-trash .elfinder-cwd-message-board .elfinder-cwd-trash { + display: block; + opacity: .3; +} + +/* overlay message board for expires */ +.elfinder-cwd-message-board .elfinder-cwd-expires { + position: absolute; + bottom: 0; + font-size: 24px; + width: 100%; + text-align: right; + opacity: .25; +} + +.elfinder-rtl .elfinder-cwd-message-board .elfinder-cwd-expires { + text-align: left; +} + +.elfinder-mobile .elfinder-cwd-message-board .elfinder-cwd-expires { + font-size: 20px; +} + +/* File: /css/dialog.css */ +/*********************************************/ +/* DIALOGS STYLES */ +/*********************************************/ + +/* common dialogs class */ +.std42-dialog { + padding: 0; + position: absolute; + left: auto; + right: auto; + box-sizing: border-box; +} + +.std42-dialog.elfinder-dialog-minimized { + overFlow: hidden; + position: relative; + float: left; + width: auto; + cursor: pointer; +} + +.elfinder-rtl .std42-dialog.elfinder-dialog-minimized { + float: right; +} + +.std42-dialog input { + border: 1px solid; +} + +/* titlebar */ +.std42-dialog .ui-dialog-titlebar { + border-left: 0 solid transparent; + border-top: 0 solid transparent; + border-right: 0 solid transparent; + font-weight: normal; + padding: .2em 1em; +} + +.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar { + padding: 0 .5em; + height: 20px; +} + +.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar { + padding: .3em .5em; +} + +.std42-dialog.ui-draggable-disabled .ui-dialog-titlebar { + cursor: default; +} + +.std42-dialog .ui-dialog-titlebar .ui-widget-header { + border: none; + cursor: pointer; +} + +.std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title { + display: inherit; + word-break: break-all; +} + +.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title { + display: list-item; + display: -moz-inline-box; + white-space: nowrap; + word-break: normal; + overflow: hidden; + word-wrap: normal; + overflow-wrap: normal; + max-width: -webkit-calc(100% - 24px); + max-width: -moz-calc(100% - 24px); + max-width: calc(100% - 24px); +} + +.elfinder-touch .std42-dialog .ui-dialog-titlebar span.elfinder-dialog-title { + padding-top: .15em; +} + +.elfinder-touch .std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar span.elfinder-dialog-title { + max-width: -webkit-calc(100% - 36px); + max-width: -moz-calc(100% - 36px); + max-width: calc(100% - 36px); +} + +.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button { + position: relative; + float: left; + top: 10px; + left: -10px; + right: 10px; + width: 20px; + height: 20px; + padding: 1px; + margin: -10px 1px 0 1px; + background-color: transparent; + background-image: none; +} + +.elfinder-touch .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button { + -moz-transform: scale(1.2); + zoom: 1.2; + padding-left: 6px; + padding-right: 6px; + height: 24px; +} + +.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button-right { + float: right; +} + +.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right { + left: 10px; + right: -10px; +} + +.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon { + width: 17px; + height: 17px; + border-width: 1px; + opacity: .7; + filter: Alpha(Opacity=70); + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon { + opacity: .5; + filter: Alpha(Opacity=50); +} + +.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon { + opacity: 1; + filter: Alpha(Opacity=100); +} + +.std42-dialog.elfinder-dialog-minimized .ui-dialog-titlebar select { + display: none; +} + +.elfinder-spinner { + width: 14px; + height: 14px; + background: url("../img/spinner-mini.gif") center center no-repeat; + margin: 0 5px; + display: inline-block; + vertical-align: middle; +} + +.elfinder-ltr .elfinder-spinner, +.elfinder-ltr .elfinder-spinner-text { + float: left; +} + +.elfinder-rtl .elfinder-spinner, +.elfinder-rtl .elfinder-spinner-text { + float: right; +} + + + +/* resize handle for touch devices */ +.elfinder-touch .std42-dialog.ui-dialog:not(ui-resizable-disabled) .ui-resizable-se { + width: 12px; + height: 12px; + -moz-transform-origin: bottom right; + -moz-transform: scale(1.5); + zoom: 1.5; + right: -7px; + bottom: -7px; + margin: 3px 7px 7px 3px; + background-position: -64px -224px; +} + +.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar { + text-align: right; +} + +/* content */ +.std42-dialog .ui-dialog-content { + padding: .3em .5em; + box-sizing: border-box; +} + +.elfinder .std42-dialog .ui-dialog-content, +.elfinder .std42-dialog .ui-dialog-content * { + -webkit-user-select: auto; + -moz-user-select: text; + -khtml-user-select: text; + user-select: text; +} + +.elfinder .std42-dialog .ui-dialog-content label { + border: none; +} + +/* buttons */ +.std42-dialog .ui-dialog-buttonpane { + border: 0 solid; + margin: 0; + padding: .5em; + text-align: right; +} + +.elfinder-rtl .std42-dialog .ui-dialog-buttonpane { + text-align: left; +} + +.std42-dialog .ui-dialog-buttonpane button { + margin: .2em 0 0 .4em; + padding: .2em; + outline: 0px solid; +} + +.std42-dialog .ui-dialog-buttonpane button span { + padding: 2px 9px; +} + +.std42-dialog .ui-dialog-buttonpane button span.ui-icon { + padding: 2px; +} + +.elfinder-dialog .ui-resizable-e, +.elfinder-dialog .ui-resizable-s { + width: 0; + height: 0; +} + +.std42-dialog .ui-button input { + cursor: pointer; +} + +.std42-dialog select { + border: 1px solid #ccc; +} + +/* error/notify/confirm dialogs icon */ +.elfinder-dialog-icon { + position: absolute; + width: 32px; + height: 32px; + left: 10px; + top: 50%; + margin-top: -15px; + background: url("../img/dialogs.png") 0 0 no-repeat; +} + +.elfinder-rtl .elfinder-dialog-icon { + left: auto; + right: 10px; +} + +/*********************** ERROR DIALOG **************************/ + +.elfinder-dialog-error .ui-dialog-content, +.elfinder-dialog-confirm .ui-dialog-content { + padding-left: 56px; + min-height: 35px; +} + +.elfinder-rtl .elfinder-dialog-error .ui-dialog-content, +.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content { + padding-left: 0; + padding-right: 56px; +} + +.elfinder-dialog-error .elfinder-err-var { + word-break: break-all; +} + +/*********************** NOTIFY DIALOG **************************/ + +.elfinder-dialog-notify { + top : 36px; + width : 280px; +} + +.elfinder-ltr .elfinder-dialog-notify { + right : 12px; +} + +.elfinder-rtl .elfinder-dialog-notify { + left : 12px; +} + +.elfinder-dialog-notify .ui-dialog-titlebar { + height: 5px; +} + +.elfinder-dialog-notify .ui-dialog-titlebar-close { + display: none; +} + +.elfinder-dialog-notify .ui-dialog-content { + padding: 0; +} + +/* one notification container */ +.elfinder-notify { + border-bottom: 1px solid #ccc; + position: relative; + padding: .5em; + + text-align: center; + overflow: hidden; +} + +.elfinder-ltr .elfinder-notify { + padding-left: 36px; +} + +.elfinder-rtl .elfinder-notify { + padding-right: 36px; +} + +.elfinder-notify:last-child { + border: 0 solid; +} + +/* progressbar */ +.elfinder-notify-progressbar { + width: 180px; + height: 8px; + border: 1px solid #aaa; + background: #f5f5f5; + margin: 5px auto; + overflow: hidden; +} + +.elfinder-notify-progress { + width: 100%; + height: 8px; + background: url(../img/progress.gif) center center repeat-x; +} + +.elfinder-notify-progressbar, .elfinder-notify-progress { + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +/* icons */ +.elfinder-dialog-icon-open, +.elfinder-dialog-icon-readdir, +.elfinder-dialog-icon-file { + background-position: 0 -225px; +} + +.elfinder-dialog-icon-reload { + background-position: 0 -225px; +} + +.elfinder-dialog-icon-mkdir { + background-position: 0 -64px; +} + +.elfinder-dialog-icon-mkfile { + background-position: 0 -96px; +} + +.elfinder-dialog-icon-copy, +.elfinder-dialog-icon-prepare, +.elfinder-dialog-icon-move { + background-position: 0 -128px; +} + +.elfinder-dialog-icon-upload { + background-position: 0 -160px; +} + +.elfinder-dialog-icon-chunkmerge { + background-position: 0 -160px; +} + +.elfinder-dialog-icon-rm { + background-position: 0 -192px; +} + +.elfinder-dialog-icon-download { + background-position: 0 -260px; +} + +.elfinder-dialog-icon-save { + background-position: 0 -295px; +} + +.elfinder-dialog-icon-rename, +.elfinder-dialog-icon-chkcontent { + background-position: 0 -330px; +} + +.elfinder-dialog-icon-zipdl, +.elfinder-dialog-icon-archive, +.elfinder-dialog-icon-extract { + background-position: 0 -365px; +} + +.elfinder-dialog-icon-search { + background-position: 0 -402px; +} + +.elfinder-dialog-icon-resize, +.elfinder-dialog-icon-loadimg, +.elfinder-dialog-icon-netmount, +.elfinder-dialog-icon-netunmount, +.elfinder-dialog-icon-chmod, +.elfinder-dialog-icon-preupload, +.elfinder-dialog-icon-url, +.elfinder-dialog-icon-dim { + background-position: 0 -434px; +} + +/*********************** CONFIRM DIALOG **************************/ + +.elfinder-dialog-confirm-applyall, +.elfinder-dialog-confirm-encoding { + padding: 0 1em; + margin: 0; +} + +.elfinder-ltr .elfinder-dialog-confirm-applyall, +.elfinder-ltr .elfinder-dialog-confirm-encoding { + text-align: left; +} + +.elfinder-rtl .elfinder-dialog-confirm-applyall, +.elfinder-rtl .elfinder-dialog-confirm-encoding { + text-align: right; +} + +.elfinder-dialog-confirm .elfinder-dialog-icon { + background-position: 0 -32px; +} + +.elfinder-dialog-confirm .ui-dialog-buttonset { + width: auto; +} + +/*********************** FILE INFO DIALOG **************************/ + +.elfinder-info-title .elfinder-cwd-icon { + float: left; + width: 48px; + height: 48px; + margin-right: 1em; +} + +.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon { + float: right; + margin-right: 0; + margin-left: 1em; +} + +.elfinder-info-title strong { + display: block; + padding: .3em 0 .5em 0; +} + +.elfinder-info-tb { + min-width: 200px; + border: 0 solid; + margin: 1em .2em 1em .2em; + width: 100%; +} + +.elfinder-info-tb td { + white-space: pre-wrap; + padding: 2px; +} + +.elfinder-info-tb td.elfinder-info-label { + white-space: nowrap; +} + +.elfinder-info-tb td.elfinder-info-hash { + display: inline-block; + word-break: break-all; + max-width: 32ch; +} + +.elfinder-ltr .elfinder-info-tb tr td:first-child { + text-align: right; +} + +.elfinder-ltr .elfinder-info-tb span { + float: left; +} + +.elfinder-rtl .elfinder-info-tb tr td:first-child { + text-align: left; +} + +.elfinder-rtl .elfinder-info-tb span { + float: right; +} + +.elfinder-info-tb a { + outline: none; + text-decoration: underline; +} + +.elfinder-info-tb a:hover { + text-decoration: none; +} + +.elfinder-netmount-tb { + margin: 0 auto; +} + +.elfinder-netmount-tb select, +.elfinder-netmount-tb .elfinder-button-icon { + cursor: pointer; +} + +button.elfinder-info-button { + margin: -3.5px 0; + cursor: pointer; +} + +/*********************** UPLOAD DIALOG **************************/ + +.elfinder-upload-dropbox { + display: table-cell; + text-align: center; + vertical-align: middle; + padding: 0.5em; + border: 3px dashed #aaa; + width: 9999px; + height: 80px; + overflow: hidden; + word-break: keep-all; +} + +.elfinder-upload-dropbox.ui-state-hover { + background: #dfdfdf; + border: 3px dashed #555; +} + +.elfinder-upload-dialog-or { + margin: .3em 0; + text-align: center; +} + +.elfinder-upload-dialog-wrapper { + text-align: center; +} + +.elfinder-upload-dialog-wrapper .ui-button { + position: relative; + overflow: hidden; +} + +.elfinder-upload-dialog-wrapper .ui-button form { + position: absolute; + right: 0; + top: 0; + width: 100%; + opacity: 0; + filter: Alpha(Opacity=0); +} + +.elfinder-upload-dialog-wrapper .ui-button form input { + padding: 50px 0 0; + font-size: 3em; + width: 100%; +} + +/* dialog for elFinder itself */ +.dialogelfinder .dialogelfinder-drag { + border-left: 0 solid; + border-top: 0 solid; + border-right: 0 solid; + font-weight: normal; + padding: 2px 12px; + cursor: move; + position: relative; + text-align: left; +} + +.elfinder-rtl .dialogelfinder-drag { + text-align: right; +} + +.dialogelfinder-drag-close { + position: absolute; + top: 50%; + margin-top: -8px; +} + +.elfinder-ltr .dialogelfinder-drag-close { + right: 12px; +} + +.elfinder-rtl .dialogelfinder-drag-close { + left: 12px; +} + +/*********************** RM CONFIRM **************************/ +.elfinder-rm-title { + margin-bottom: .5ex; +} + +.elfinder-rm-title .elfinder-cwd-icon { + float: left; + width: 48px; + height: 48px; + margin-right: 1em; +} + +.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon { + float: right; + margin-right: 0; + margin-left: 1em; +} + +.elfinder-rm-title strong { + display: block; + /*word-wrap: break-word;*/ + white-space: pre-wrap; + word-break: normal; + overflow: hidden; + text-overflow: ellipsis; +} + +.elfinder-rm-title + br { + display: none; +} + +/* File: /css/fonts.css */ +.elfinder-font-mono { + font-family: "Ricty Diminished", "Myrica M", Consolas, "Courier New", Courier, Monaco, monospace; + font-size: 1.1em; +} + +.elfinder-contextmenu .elfinder-contextmenu-item span { + font-size: .72em; +} + +.elfinder-cwd-view-icons .elfinder-cwd-filename { + font-size: .7em; +} + +.elfinder-cwd-view-list td { + font-size: .7em; +} + +.std42-dialog .ui-dialog-titlebar { + font-size: .82em; +} + +.std42-dialog .ui-dialog-content { + font-size: .72em; +} + +.std42-dialog .ui-dialog-buttonpane { + font-size: .76em; +} + +.elfinder-info-tb { + font-size: .9em; +} + +.elfinder-upload-dropbox { + font-size: 1.2em; +} + +.elfinder-upload-dialog-or { + font-size: 1.2em; +} + +.dialogelfinder .dialogelfinder-drag { + font-size: .9em; +} + +.elfinder .elfinder-navbar { + font-size: .72em; +} + +.elfinder-place-drag .elfinder-navbar-dir { + font-size: .9em; +} + +.elfinder-quicklook-title { + font-size: .7em; + font-weight: normal; +} + +.elfinder-quicklook-info-data { + font-size: .72em; +} + +.elfinder-quicklook-preview-text-wrapper { + font-size: .9em; +} + +.elfinder-button-menu-item { + font-size: .72em; +} + +.elfinder-button-search input { + font-size: .8em; +} + +.elfinder-statusbar div { + font-size: .7em; +} + +.elfinder-drag-num { + font-size: 12px; +} + +.elfinder-toast { + font-size: .76em; +} + + +/* File: /css/navbar.css */ +/*********************************************/ +/* NAVIGATION PANEL */ +/*********************************************/ + +/* container */ +.elfinder .elfinder-navbar { + /*box-sizing: border-box;*/ + width: 230px; + padding: 3px 5px; + background-image: none; + border-top: 0 solid; + border-bottom: 0 solid; + overflow: auto; + position: relative; +} + +.elfinder .elfinder-navdock { + box-sizing: border-box; + width: 230px; + height: auto; + position: absolute; + bottom: 0; + overflow: auto; +} + +.elfinder-navdock .ui-resizable-n { + top: 0; + height: 20px; +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar { + float: left; + border-left: 0 solid; +} + +.elfinder-rtl .elfinder-navbar { + float: right; + border-right: 0 solid; +} + +.elfinder-ltr .ui-resizable-e { + margin-left: 10px; +} + +/* folders tree container */ +.elfinder-tree { + display: table; + width: 100%; + margin: 0 0 .5em 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/* one folder wrapper */ +.elfinder-navbar-wrapper, .elfinder-place-wrapper { +} + +/* folder */ +.elfinder-navbar-dir { + position: relative; + display: block; + white-space: nowrap; + padding: 3px 12px; + margin: 0; + outline: 0px solid; + border: 1px solid transparent; + cursor: default; +} + +.elfinder-touch .elfinder-navbar-dir { + padding: 12px 12px; +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-dir { + padding-left: 35px; +} + +.elfinder-rtl .elfinder-navbar-dir { + padding-right: 35px; +} + +/* arrow before icon */ +.elfinder-navbar-arrow { + width: 12px; + height: 14px; + position: absolute; + display: none; + top: 50%; + margin-top: -8px; + background-image: url("../img/arrows-normal.png"); + background-repeat: no-repeat; + /* border:1px solid #111;*/ +} + +.elfinder-ltr .elfinder-navbar-arrow { + left: 0; +} + +.elfinder-rtl .elfinder-navbar-arrow { + right: 0; +} + +.elfinder-touch .elfinder-navbar-arrow { + -moz-transform-origin: top left; + -moz-transform: scale(1.4); + zoom: 1.4; + margin-bottom: 7px; +} + +.elfinder-ltr.elfinder-touch .elfinder-navbar-arrow { + left: -3px; + margin-right: 20px; +} + +.elfinder-rtl.elfinder-touch .elfinder-navbar-arrow { + right: -3px; + margin-left: 20px; +} + +.ui-state-active .elfinder-navbar-arrow { + background-image: url("../img/arrows-active.png"); +} + +/* collapsed/expanded arrow view */ +.elfinder-navbar-collapsed .elfinder-navbar-arrow { + display: block; +} + +.elfinder-subtree-chksubdir .elfinder-navbar-arrow { + opacity: .25; + filter: Alpha(Opacity=25); +} + +/* arrow ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow { + background-position: 0 4px; +} + +.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow { + background-position: 0 -10px; +} + +.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow, +.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow { + background-position: 0 -21px; +} + +/* folder icon */ +.elfinder-navbar-icon { + width: 16px; + height: 16px; + position: absolute; + top: 50%; + margin-top: -8px; + background-image: url("../img/toolbar.png"); + background-repeat: no-repeat; + background-position: 0 -16px; +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-icon { + left: 14px; +} + +.elfinder-rtl .elfinder-navbar-icon { + right: 14px; +} + +/* places icon */ +.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon { + background-position: 0 -704px; +} + +/* root folder */ +.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon, +.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon { + background-position: 0 0; + background-size: contain; +} + +/* root icon of each volume "\9" for IE8 trick */ +.elfinder-tree .elfinder-navbar-root-local .elfinder-navbar-icon { + background-image: url("../img/volume_icon_local.svg"); + background-image: url("../img/volume_icon_local.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-trash .elfinder-navbar-icon { + background-image: url("../img/volume_icon_trash.svg"); + background-image: url("../img/volume_icon_trash.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-ftp .elfinder-navbar-icon { + background-image: url("../img/volume_icon_ftp.svg"); + background-image: url("../img/volume_icon_ftp.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-sql .elfinder-navbar-icon { + background-image: url("../img/volume_icon_sql.svg"); + background-image: url("../img/volume_icon_sql.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-dropbox .elfinder-navbar-icon { + background-image: url("../img/volume_icon_dropbox.svg"); + background-image: url("../img/volume_icon_dropbox.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-googledrive .elfinder-navbar-icon { + background-image: url("../img/volume_icon_googledrive.svg"); + background-image: url("../img/volume_icon_googledrive.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-onedrive .elfinder-navbar-icon { + background-image: url("../img/volume_icon_onedrive.svg"); + background-image: url("../img/volume_icon_onedrive.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-box .elfinder-navbar-icon { + background-image: url("../img/volume_icon_box.svg"); + background-image: url("../img/volume_icon_box.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-zip .elfinder-navbar-icon { + background-image: url("../img/volume_icon_zip.svg"); + background-image: url("../img/volume_icon_zip.png") \9; +} + +.elfinder-tree .elfinder-navbar-root-network .elfinder-navbar-icon { + background-image: url("../img/volume_icon_network.svg"); + background-image: url("../img/volume_icon_network.png") \9; +} + +/* icon in active/hove/dropactive state */ +.ui-state-active .elfinder-navbar-icon, +.elfinder-droppable-active .elfinder-navbar-icon, +.ui-state-hover .elfinder-navbar-icon { + background-position: 0 -32px; +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-subtree { + margin-left: 12px; +} + +.elfinder-rtl .elfinder-navbar-subtree { + margin-right: 12px; +} + +/* spinner */ +.elfinder-tree .elfinder-spinner { + position: absolute; + top: 50%; + margin: -7px 0 0; +} + +/* spinner ltr/rtl enviroment */ +.elfinder-ltr .elfinder-tree .elfinder-spinner { + left: 0; + margin-left: -2px; +} + +.elfinder-rtl .elfinder-tree .elfinder-spinner { + right: 0; + margin-right: -2px; +} + +/* marker */ +.elfinder-navbar .elfinder-perms, +.elfinder-navbar .elfinder-lock, +.elfinder-navbar .elfinder-symlink { + opacity: .6; + filter: Alpha(Opacity=60); +} + +/* permissions marker */ +.elfinder-navbar .elfinder-perms { + bottom: -1px; + margin-top: -8px; +} + +/* locked marker */ +.elfinder-navbar .elfinder-lock { + top: -2px; +} + +/* permissions/symlink markers ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar .elfinder-perms { + left: 20px; + transform: scale(0.8); +} + +.elfinder-rtl .elfinder-navbar .elfinder-perms { + right: 20px; + transform: scale(0.8); +} + +.elfinder-ltr .elfinder-navbar .elfinder-lock { + left: 20px; + transform: scale(0.8); +} + +.elfinder-rtl .elfinder-navbar .elfinder-lock { + right: 20px; + transform: scale(0.8); +} + +.elfinder-ltr .elfinder-navbar .elfinder-symlink { + left: 8px; + transform: scale(0.8); +} + +.elfinder-rtl .elfinder-navbar .elfinder-symlink { + right: 8px; + transform: scale(0.8); +} + +/* navbar input */ +.elfinder-navbar input { + width: 100%; + border: 0px solid; + margin: 0; + padding: 0; +} + +/* resizable */ +.elfinder-navbar .ui-resizable-handle { + width: 12px; + background: transparent url('../img/resize.png') center center no-repeat; +} + +.elfinder-nav-handle-icon { + position: absolute; + top: 50%; + margin: -8px 2px 0 2px; + opacity: .5; + filter: Alpha(Opacity=50); +} + +/* pager button */ +.elfinder-navbar-pager { + width: 100%; + box-sizing: border-box; + padding-top: 3px; + padding-bottom: 3px; +} + +.elfinder-touch .elfinder-navbar-pager { + padding-top: 10px; + padding-bottom: 10px; +} + +.elfinder-places { + border: none; + margin: 0; + padding: 0; +} + +.elfinder-places.elfinder-droppable-active { + /*border:1px solid #8cafed;*/ +} + +/* navbar swipe handle */ +.elfinder-navbar-swipe-handle { + position: absolute; + top: 0px; + height: 100%; + width: 50px; + pointer-events: none; +} + +.elfinder-ltr .elfinder-navbar-swipe-handle { + left: 0px; + background: linear-gradient(to right, + rgba(221, 228, 235, 1) 0, + rgba(221, 228, 235, 0.8) 5px, + rgba(216, 223, 230, 0.3) 8px, + rgba(0, 0, 0, 0.1) 95%, + rgba(0, 0, 0, 0) 100%); +} + +.elfinder-rtl .elfinder-navbar-swipe-handle { + right: 0px; + background: linear-gradient(to left, + rgba(221, 228, 235, 1) 0, + rgba(221, 228, 235, 0.8) 5px, + rgba(216, 223, 230, 0.3) 8px, + rgba(0, 0, 0, 0.1) 95%, + rgba(0, 0, 0, 0) 100%); +} + +/* File: /css/places.css */ +/*********************************************/ +/* PLACES STYLES */ +/*********************************************/ +/* root extra icon */ +.elfinder-navbar-root .elfinder-places-root-icon { + position: absolute; + top: 50%; + margin-top: -9px; + cursor: pointer; +} + +.elfinder-ltr .elfinder-places-root-icon { + right: 10px; +} + +.elfinder-rtl .elfinder-places-root-icon { + left: 10px; +} + +.elfinder-navbar-expanded .elfinder-places-root-icon { + display: block; +} + +/* dragging helper base */ +.elfinder-place-drag { + font-size: 0.8em; +} + +/* File: /css/quicklook.css */ +/* quicklook window */ +.elfinder-quicklook { + position: absolute; + background: url("../img/quicklook-bg.png"); + overflow: hidden; + -moz-border-radius: 7px; + -webkit-border-radius: 7px; + border-radius: 7px; + padding: 20px 0 40px 0; +} + +.elfinder-navdock .elfinder-quicklook { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + font-size: 90%; + overflow: auto; +} + +.elfinder-quicklook.elfinder-touch { + padding: 30px 0 40px 0; +} + +.elfinder-quicklook .ui-resizable-se { + width: 14px; + height: 14px; + right: 5px; + bottom: 3px; + background: url("../img/toolbar.png") 0 -496px no-repeat; +} + +.elfinder-quicklook.elfinder-touch .ui-resizable-se { + -moz-transform-origin: bottom right; + -moz-transform: scale(1.5); + zoom: 1.5; +} + +/* quicklook fullscreen window */ +.elfinder-quicklook.elfinder-quicklook-fullscreen { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: 0; + box-sizing: border-box; + width: 100%; + height: 100%; + object-fit: contain; + border-radius: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + -webkit-background-clip: padding-box; + padding: 0; + background: #000; + display: block; +} + +/* hide titlebar in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar, +.elfinder-quicklook-fullscreen.elfinder-quicklook .ui-resizable-handle { + display: none; +} + +/* hide preview border in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-preview { + border: 0 solid; +} + +/*.elfinder-quicklook-fullscreen iframe { + height: 100%; +}*/ + +.elfinder-quicklook-cover { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; +} + +.elfinder-quicklook-cover.elfinder-quicklook-coverbg { + /* background need to catch mouse event over browser plugin (eg PDF preview) */ + background-color: #fff; + opacity: 0.000001; + filter: Alpha(Opacity=0.0001); +} + +/* quicklook titlebar */ +.elfinder-quicklook-titlebar { + text-align: center; + background: #777; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 20px; + -moz-border-radius-topleft: 7px; + -webkit-border-top-left-radius: 7px; + border-top-left-radius: 7px; + -moz-border-radius-topright: 7px; + -webkit-border-top-right-radius: 7px; + border-top-right-radius: 7px; + border: none; + line-height: 1.2; +} + +.elfinder-navdock .elfinder-quicklook-titlebar { + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -moz-border-radius-topright: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; + cursor: default; +} + +.elfinder-touch .elfinder-quicklook-titlebar { + height: 30px; +} + +/* window title */ +.elfinder-quicklook-title { + display: inline-block; + white-space: nowrap; + overflow: hidden; +} + +.elfinder-touch .elfinder-quicklook-title { + padding: 8px 0; +} + +/* icon "close" in titlebar */ +.elfinder-quicklook-titlebar-icon { + position: absolute; + left: 4px; + top: 50%; + margin-top: -8px; + height: 16px; + border: none; +} +.elfinder-touch .elfinder-quicklook-titlebar-icon { + height: 22px; +} + +.elfinder-quicklook-titlebar-icon .ui-icon { + position: relative; + margin: -9px 3px 0px 0px; + cursor: pointer; + border-radius: 10px; + border: 1px solid; + opacity: .7; + filter: Alpha(Opacity=70); +} + +.elfinder-quicklook-titlebar-icon .ui-icon.ui-icon-closethick { + padding-left: 1px; +} + +.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon { + opacity: .6; + filter: Alpha(Opacity=60); +} + +.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon { + margin-top: -5px; +} + +.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right { + left: auto; + right: 4px; + direction: rtl; +} + +.elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon { + margin: -9px 0px 0px 3px; +} + +.elfinder-touch .elfinder-quicklook-titlebar .ui-icon { + -moz-transform-origin: center center; + -moz-transform: scale(1.2); + zoom: 1.2; +} + +.elfinder-touch .elfinder-quicklook-titlebar-icon .ui-icon { + margin-right: 10px; +} + +.elfinder-touch .elfinder-quicklook-titlebar-icon.elfinder-titlebar-button-right .ui-icon { + margin-left: 10px; +} + +/* main part of quicklook window */ +.elfinder-quicklook-preview { + overflow: hidden; + position: relative; + border: 0 solid; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + height: 100%; +} + +.elfinder-navdock .elfinder-quicklook-preview { + border-left: 0; + border-right: 0; +} + +.elfinder-quicklook-preview.elfinder-overflow-auto { + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +/* wrapper for file info/icon */ +.elfinder-quicklook-info-wrapper { + display: table; + position: absolute; + width: 100%; + height: 100%; + height: calc(100% - 80px); + left: 0; + top: 20px; +} + +.elfinder-navdock .elfinder-quicklook-info-wrapper { + height: calc(100% - 20px); +} + +/* file info */ +.elfinder-quicklook-info { + display: table-cell; + vertical-align: middle; +} + +.elfinder-ltr .elfinder-quicklook-info { + padding: 0 12px 0 112px; +} + +.elfinder-rtl .elfinder-quicklook-info { + padding: 0 112px 0 12px; +} + +.elfinder-ltr .elfinder-navdock .elfinder-quicklook-info { + padding: 0 0 0 80px; +} + +.elfinder-rtl .elfinder-navdock .elfinder-quicklook-info { + padding: 0 80px 0 0; +} + +/* file name in info */ +.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child { + color: #fff; + font-weight: bold; + padding-bottom: .5em; +} + +/* other data in info */ +.elfinder-quicklook-info-data { + clear: both; + padding-bottom: .2em; + color: #fff; +} + +/* file icon */ +.elfinder-quicklook .elfinder-cwd-icon { + position: absolute; + left: 32px; + top: 50%; + margin-top: -20px; +} + +.elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon { + left: 16px; +} + +.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon { + left: auto; + right: 32px; +} + +.elfinder-rtl .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon { + right: 6px; +} + +.elfinder-quicklook .elfinder-cwd-icon:before { + top: -10px; +} + +.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:before { + left: -20px; +} + +.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:before { + left: -14px; +} + +.elfinder-ltr .elfinder-quicklook .elfinder-cwd-icon:after { + left: -20px; +} + +.elfinder-ltr .elfinder-navdock .elfinder-quicklook .elfinder-cwd-icon:after { + left: -12px; +} + +.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:before { + left: auto; + right: 40px; +} + +.elfinder-rtl .elfinder-quicklook .elfinder-cwd-icon:after { + left: auto; + right: 46px; +} + +/* image in preview */ +.elfinder-quicklook-preview img { + display: block; + margin: 0 auto; +} + +/* navigation bar on quicklook window bottom */ +.elfinder-quicklook-navbar { + position: absolute; + left: 50%; + bottom: 4px; + width: 140px; + height: 32px; + padding: 0px; + margin-left: -70px; + border: 1px solid transparent; + border-radius: 19px; + -moz-border-radius: 19px; + -webkit-border-radius: 19px; +} + +/* navigation bar in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar { + width: 188px; + margin-left: -94px; + padding: 5px; + border: 1px solid #eee; + background: #000; + opacity: 0.4; + filter: Alpha(Opacity=40); +} + +/* show close icon in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close, +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator { + display: inline; +} + +/* icons in navbar */ +.elfinder-quicklook-navbar-icon { + width: 32px; + height: 32px; + margin: 0 7px; + float: left; + background: url("../img/quicklook-icons.png") 0 0 no-repeat; + +} + +/* fullscreen icon */ +.elfinder-quicklook-navbar-icon-fullscreen { + background-position: 0 -64px; +} + +/* exit fullscreen icon */ +.elfinder-quicklook-navbar-icon-fullscreen-off { + background-position: 0 -96px; +} + +/* prev file icon */ +.elfinder-quicklook-navbar-icon-prev { + background-position: 0 0; +} + +/* next file icon */ +.elfinder-quicklook-navbar-icon-next { + background-position: 0 -32px; +} + +/* close icon */ +.elfinder-quicklook-navbar-icon-close { + background-position: 0 -128px; + display: none; +} + +/* icons separator */ +.elfinder-quicklook-navbar-separator { + width: 1px; + height: 32px; + float: left; + border-left: 1px solid #fff; + display: none; +} + +/* text files preview wrapper */ +.elfinder-quicklook-preview-text-wrapper { + width: 100%; + height: 100%; + background: #fff; + color: #222; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +/* archive files preview wrapper */ +.elfinder-quicklook-preview-archive-wrapper { + width: 100%; + height: 100%; + background: #fff; + color: #222; + font-size: 1.5ex; + overflow: auto; + -webkit-overflow-scrolling: touch +} + +/* archive files preview header */ +.elfinder-quicklook-preview-archive-wrapper strong { + padding: 0 5px; +} + +/* text preview */ +pre.elfinder-quicklook-preview-text, +pre.elfinder-quicklook-preview-text.prettyprint { + width: auto; + height: auto; + margin: 0; + padding: 3px 9px; + border: none; + -o-tab-size: 4; + -moz-tab-size: 4; + tab-size: 4; +} + +.elfinder-quicklook-preview-charsleft hr { + border: none; + border-top: dashed 1px; +} + +.elfinder-quicklook-preview-charsleft span { + font-size: 90%; + font-style: italic; + cursor: pointer; +} + +/* html/pdf preview */ +.elfinder-quicklook-preview-html, +.elfinder-quicklook-preview-pdf, +.elfinder-quicklook-preview-iframe { + width: 100%; + height: 100%; + background: #fff; + margin: 0; + border: none; + display: block; +} + +/* swf preview container */ +.elfinder-quicklook-preview-flash { + width: 100%; + height: 100%; +} + +/* audio preview container */ +.elfinder-quicklook-preview-audio { + width: 100%; + position: absolute; + bottom: 0; + left: 0; +} + +/* audio preview using embed */ +embed.elfinder-quicklook-preview-audio { + height: 30px; + background: transparent; +} + +/* video preview container */ +.elfinder-quicklook-preview-video { + width: 100%; + height: 100%; +} + +/* allow user select */ +.elfinder .elfinder-quicklook .elfinder-quicklook-info *, +.elfinder .elfinder-quicklook .elfinder-quicklook-preview * { + -webkit-user-select: auto; + -moz-user-select: text; + -khtml-user-select: text; + user-select: text; +} + +/* File: /css/statusbar.css */ +/******************************************************************/ +/* STATUSBAR STYLES */ +/******************************************************************/ + +/* statusbar container */ +.elfinder-statusbar { + display: flex; + justify-content: space-between; + cursor: default; + text-align: center; + font-weight: normal; + padding: .2em .5em; + border-right: 0 solid transparent; + border-bottom: 0 solid transparent; + border-left: 0 solid transparent; +} + +.elfinder-statusbar:before, +.elfinder-statusbar:after { + display: none; +} + +.elfinder-statusbar span { + vertical-align: bottom; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} + +.elfinder-statusbar span.elfinder-path-other { + flex-shrink: 0; + text-overflow: clip; + -o-text-overflow: clip; +} + +.elfinder-statusbar span.ui-state-hover, +.elfinder-statusbar span.ui-state-active { + border: none; +} + +.elfinder-statusbar span.elfinder-path-cwd { + cursor: default; +} + +/* path in statusbar */ +.elfinder-path { + display: flex; + order: 1; + flex-grow: 1; + cursor: pointer; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + max-width: 30%\9; +} + +.elfinder-ltr .elfinder-path { + text-align: left; + float: left\9; +} + +.elfinder-rtl .elfinder-path { + text-align: right; + float: right\9; +} + +/* path in workzone (case of swipe to navbar close) */ +.elfinder-workzone-path { + position: relative; +} + +.elfinder-workzone-path .elfinder-path { + position: relative; + font-size: .75em; + font-weight: normal; + float: none; + max-width: none; + overflow: hidden; + overflow-x: hidden; + text-overflow: initial; + -o-text-overflow: initial; +} + +.elfinder-mobile .elfinder-workzone-path .elfinder-path { + overflow: auto; + overflow-x: scroll; +} + +.elfinder-ltr .elfinder-workzone-path .elfinder-path { + margin-left: 24px; +} + +.elfinder-rtl .elfinder-workzone-path .elfinder-path { + margin-right: 24px; +} + +.elfinder-workzone-path .elfinder-path span { + display: inline-block; + padding: 5px 3px; +} + +.elfinder-workzone-path .elfinder-path span.elfinder-path-cwd { + font-weight: bold; +} + +.elfinder-workzone-path .elfinder-path span.ui-state-hover, +.elfinder-workzone-path .elfinder-path span.ui-state-active { + border: none; +} + +.elfinder-workzone-path .elfinder-path-roots { + position: absolute; + top: 0; + width: 24px; + height: 20px; + padding: 2px; + border: none; + overflow: hidden; +} + +.elfinder-ltr .elfinder-workzone-path .elfinder-path-roots { + left: 0; +} + +.elfinder-rtl .elfinder-workzone-path .elfinder-path-roots { + right: 0; +} + +/* total/selected size in statusbar */ +.elfinder-stat-size { + order: 3; + flex-grow: 1; + overflow: hidden; + white-space: nowrap; +} + +.elfinder-ltr .elfinder-stat-size { + text-align: right; + float: right\9; +} + +.elfinder-rtl .elfinder-stat-size { + text-align: left; + float: left\9; +} + +/* info of current selected item */ +.elfinder-stat-selected { + order: 2; + margin: 0 .5em; + white-space: nowrap; + overflow: hidden; +} + +/* File: /css/toast.css */ +/* + * CSS for Toastr + * Copyright 2012-2015 + * Authors: John Papa, Hans Fjällemark, and Tim Ferrell. + * All Rights Reserved. + * Use, reproduction, distribution, and modification of this code is subject to the terms and + * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php + * + * ARIA Support: Greta Krafsig + * + * Project: https://github.com/CodeSeven/toastr + */ + +.elfinder .elfinder-toast { + position: absolute; + top: 12px; + right: 12px; + max-width: 90%; + cursor: default; +} + +.elfinder .elfinder-toast > div { + position: relative; + pointer-events: auto; + overflow: hidden; + margin: 0 0 6px; + padding: 8px 16px 8px 50px; + -moz-border-radius: 3px 3px 3px 3px; + -webkit-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; + background-position: 15px center; + background-repeat: no-repeat; + -moz-box-shadow: 0 0 12px #999999; + -webkit-box-shadow: 0 0 12px #999999; + box-shadow: 0 0 12px #999999; + color: #FFFFFF; + opacity: 0.9; + filter: alpha(opacity=90); + background-color: #030303; + text-align: center; +} + +.elfinder .elfinder-toast > .toast-info { + background-color: #2F96B4; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important; +} + +.elfinder .elfinder-toast > .toast-error { + background-color: #BD362F; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important; +} + +.elfinder .elfinder-toast > .toast-success { + background-color: #51A351; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important; +} + +.elfinder .elfinder-toast > .toast-warning { + background-color: #F89406; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important; +} + +.elfinder .elfinder-toast > div button.ui-button { + background-image: none; + margin-top: 8px; + padding: .5em .8em; +} + +.elfinder .elfinder-toast > .toast-success button.ui-button { + background-color: green; + color: #FFF; +} + +.elfinder .elfinder-toast > .toast-success button.ui-button.ui-state-hover { + background-color: #add6ad; + color: #254b25; +} + +.elfinder .elfinder-toast > .toast-info button.ui-button { + background-color: #046580; + color: #FFF; +} + +.elfinder .elfinder-toast > .toast-info button.ui-button.ui-state-hover { + background-color: #7DC6DB; + color: #046580; +} + +/* File: /css/toolbar.css */ +/*********************************************/ +/* TOOLBAR STYLES */ +/*********************************************/ +/* toolbar container */ +.elfinder-toolbar { + padding: 4px 0 3px 0; + border-left: 0 solid transparent; + border-top: 0 solid transparent; + border-right: 0 solid transparent; + max-height: 50%; + overflow-y: auto; +} + +/* container for button's group */ +.elfinder-buttonset { + margin: 1px 4px; + float: left; + background: transparent; + padding: 0; + overflow: hidden; +} + +/*.elfinder-buttonset:first-child { margin:0; }*/ + +/* button */ +.elfinder .elfinder-button { + min-width: 16px; + height: 16px; + margin: 0; + padding: 4px; + float: left; + overflow: hidden; + position: relative; + border: 0 solid; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + line-height: 1; + cursor: default; +} + +.elfinder-rtl .elfinder-button { + float: right; +} + +.elfinder-touch .elfinder-button { + min-width: 20px; + height: 20px; +} + +.elfinder .ui-icon-search { + cursor: pointer; +} + +/* separator between buttons, required for berder between button with ui color */ +.elfinder-toolbar-button-separator { + float: left; + padding: 0; + height: 24px; + border-top: 0 solid; + border-right: 0 solid; + border-bottom: 0 solid; + width: 0; +} + +.elfinder-rtl .elfinder-toolbar-button-separator { + float: right; +} + +.elfinder-touch .elfinder-toolbar-button-separator { + height: 28px; +} + +/* change icon opacity^ not button */ +.elfinder .elfinder-button.ui-state-disabled { + opacity: 1; + filter: Alpha(Opacity=100); +} + +.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon, +.elfinder .elfinder-button.ui-state-disabled .elfinder-button-text { + opacity: .4; + filter: Alpha(Opacity=40); +} + +/* rtl enviroment */ +.elfinder-rtl .elfinder-buttonset { + float: right; +} + +/* icon inside button */ +.elfinder-button-icon { + width: 16px; + height: 16px; + /*display:block;*/ + display: inline-block; + background: url('../img/toolbar.png') no-repeat; +} + +.elfinder-button-text { + position: relative; + display: inline-block; + top: -4px; + margin: 0 2px; + font-size: 12px; +} + +.elfinder-touch .elfinder-button-icon { + -moz-transform-origin: top left; + -moz-transform: scale(1.25); + zoom: 1.25; +} + +.elfinder-touch .elfinder-button-text { + -moz-transform: translate(3px, 3px); + top: -5px; +} + +/* buttons icons */ +.elfinder-button-icon-home { + background-position: 0 0; +} + +.elfinder-button-icon-back { + background-position: 0 -112px; +} + +.elfinder-button-icon-forward { + background-position: 0 -128px; +} + +.elfinder-button-icon-up { + background-position: 0 -144px; +} + +.elfinder-button-icon-dir { + background-position: 0 -16px; +} + +.elfinder-button-icon-opendir { + background-position: 0 -32px; +} + +.elfinder-button-icon-reload { + background-position: 0 -160px; +} + +.elfinder-button-icon-open { + background-position: 0 -176px; +} + +.elfinder-button-icon-mkdir { + background-position: 0 -192px; +} + +.elfinder-button-icon-mkfile { + background-position: 0 -208px; +} + +.elfinder-button-icon-rm { + background-position: 0 -832px; +} + +.elfinder-button-icon-trash { + background-position: 0 -224px; +} + +.elfinder-button-icon-restore { + background-position: 0 -816px; +} + +.elfinder-button-icon-copy { + background-position: 0 -240px; +} + +.elfinder-button-icon-cut { + background-position: 0 -256px; +} + +.elfinder-button-icon-paste { + background-position: 0 -272px; +} + +.elfinder-button-icon-getfile { + background-position: 0 -288px; +} + +.elfinder-button-icon-duplicate { + background-position: 0 -304px; +} + +.elfinder-button-icon-rename { + background-position: 0 -320px; +} + +.elfinder-button-icon-edit { + background-position: 0 -336px; +} + +.elfinder-button-icon-quicklook { + background-position: 0 -352px; +} + +.elfinder-button-icon-upload { + background-position: 0 -368px; +} + +.elfinder-button-icon-download { + background-position: 0 -384px; +} + +.elfinder-button-icon-info { + background-position: 0 -400px; +} + +.elfinder-button-icon-extract { + background-position: 0 -416px; +} + +.elfinder-button-icon-archive { + background-position: 0 -432px; +} + +.elfinder-button-icon-view { + background-position: 0 -448px; +} + +.elfinder-button-icon-view-list { + background-position: 0 -464px; +} + +.elfinder-button-icon-help { + background-position: 0 -480px; +} + +.elfinder-button-icon-resize { + background-position: 0 -512px; +} + +.elfinder-button-icon-link { + background-position: 0 -528px; +} + +.elfinder-button-icon-search { + background-position: 0 -561px; +} + +.elfinder-button-icon-sort { + background-position: 0 -577px; +} + +.elfinder-button-icon-rotate-r { + background-position: 0 -625px; +} + +.elfinder-button-icon-rotate-l { + background-position: 0 -641px; +} + +.elfinder-button-icon-netmount { + background-position: 0 -688px; +} + +.elfinder-button-icon-netunmount { + background-position: 0 -96px; +} + +.elfinder-button-icon-places { + background-position: 0 -704px; +} + +.elfinder-button-icon-chmod { + background-position: 0 -48px; +} + +.elfinder-button-icon-accept { + background-position: 0 -736px; +} + +.elfinder-button-icon-menu { + background-position: 0 -752px; +} + +.elfinder-button-icon-colwidth { + background-position: 0 -768px; +} + +.elfinder-button-icon-fullscreen { + background-position: 0 -784px; +} + +.elfinder-button-icon-unfullscreen { + background-position: 0 -800px; +} + +.elfinder-button-icon-empty { + background-position: 0 -848px; +} + +.elfinder-button-icon-undo { + background-position: 0 -864px; +} + +.elfinder-button-icon-redo { + background-position: 0 -880px; +} + +.elfinder-button-icon-preference { + background-position: 0 -896px; +} + +.elfinder-button-icon-mkdirin { + background-position: 0 -912px; +} + +.elfinder-button-icon-selectall { + background-position: 0 -928px; +} + +.elfinder-button-icon-selectnone { + background-position: 0 -944px; +} + +.elfinder-button-icon-selectinvert { + background-position: 0 -960px; +} + +.elfinder-button-icon-opennew { + background-position: 0 -976px; +} + +.elfinder-button-icon-hide { + background-position: 0 -992px; +} + +.elfinder-button-icon-text { + background-position: 0 -1008px; +} + +/* button icon mirroring for rtl */ +.elfinder-rtl .elfinder-button-icon-back, +.elfinder-rtl .elfinder-button-icon-forward, +.elfinder-rtl .elfinder-button-icon-getfile, +.elfinder-rtl .elfinder-button-icon-help, +.elfinder-rtl .elfinder-button-icon-redo, +.elfinder-rtl .elfinder-button-icon-rename, +.elfinder-rtl .elfinder-button-icon-search, +.elfinder-rtl .elfinder-button-icon-undo, +.elfinder-rtl .elfinder-button-icon-view-list, +.elfinder-rtl .ui-icon-search { + -ms-transform: scale(-1, 1); + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +/* button with dropdown menu*/ +.elfinder .elfinder-menubutton { + overflow: visible; +} + +/* button with spinner icon */ +.elfinder-button-icon-spinner { + background: url("../img/spinner-mini.gif") center center no-repeat; +} + +/* menu */ +.elfinder-button-menu { + position: absolute; + margin-top: 24px; + padding: 3px 0; + overflow-y: auto; +} + +.elfinder-touch .elfinder-button-menu { + margin-top: 30px; +} + +/* menu item */ +.elfinder-button-menu-item { + white-space: nowrap; + cursor: default; + padding: 5px 19px; + position: relative; +} + +.elfinder-touch .elfinder-button-menu-item { + padding: 12px 19px +} + +/* fix hover ui class */ +.elfinder-button-menu .ui-state-hover { + border: 0 solid; +} + +.elfinder-button-menu-item-separated { + border-top: 1px solid #ccc; +} + +.elfinder-button-menu-item .ui-icon { + width: 16px; + height: 16px; + position: absolute; + left: 2px; + top: 50%; + margin-top: -8px; + display: none; +} + +.elfinder-button-menu-item-selected .ui-icon { + display: block; +} + +.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s { + display: none; +} + +.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n { + display: none; +} + +/* hack for upload button */ +.elfinder-button form { + position: absolute; + top: 0; + right: 0; + opacity: 0; + filter: Alpha(Opacity=0); + cursor: pointer; +} + +.elfinder .elfinder-button form input { + background: transparent; + cursor: default; +} + +/* search "button" */ +.elfinder .elfinder-button-search { + border: 0 solid; + background: transparent; + padding: 0; + margin: 1px 4px; + height: auto; + min-height: 26px; + width: 70px; + overflow: visible; +} + +.elfinder .elfinder-button-search.ui-state-active { + width: 220px; +} + +/* search "pull down menu" */ +.elfinder .elfinder-button-search-menu { + font-size: 8pt; + text-align: center; + width: auto; + min-width: 180px; + position: absolute; + top: 30px; + padding-right: 5px; + padding-left: 5px; +} + +.elfinder-ltr .elfinder-button-search-menu { + right: 22px; + left: auto; +} + +.elfinder-rtl .elfinder-button-search-menu { + right: auto; + left: 22px; +} + +.elfinder-touch .elfinder-button-search-menu { + top: 34px; +} + +.elfinder .elfinder-button-search-menu div { + margin-left: auto; + margin-right: auto; + margin-top: 5px; + margin-bottom: 5px; + display: table; +} + +.elfinder .elfinder-button-search-menu div .ui-state-hover { + border: 1px solid; +} + +/* ltr/rte enviroment */ +.elfinder-ltr .elfinder-button-search { + float: right; + margin-right: 10px; +} + +.elfinder-rtl .elfinder-button-search { + float: left; + margin-left: 10px; +} + +.elfinder-rtl .ui-controlgroup > .ui-controlgroup-item { + float: right; +} + +/* search text field */ +.elfinder-button-search input[type=text] { + box-sizing: border-box; + width: 100%; + height: 26px; + padding: 0 20px; + line-height: 22px; + border: 0 solid; + border: 1px solid #aaa; + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + outline: 0px solid; +} + +.elfinder-button-search input::-ms-clear { + display: none; +} + +.elfinder-touch .elfinder-button-search input { + height: 30px; + line-height: 28px; +} + +.elfinder-rtl .elfinder-button-search input { + direction: rtl; +} + +/* icons */ +.elfinder-button-search .ui-icon { + position: absolute; + height: 18px; + top: 50%; + margin: -8px 4px 0 4px; + opacity: .6; + filter: Alpha(Opacity=60); +} + +.elfinder-button-search-menu .ui-checkboxradio-icon { + display: none; +} + +/* search/close icons */ +.elfinder-ltr .elfinder-button-search .ui-icon-search { + left: 0; +} + +.elfinder-rtl .elfinder-button-search .ui-icon-search { + right: 0; +} + +.elfinder-ltr .elfinder-button-search .ui-icon-close { + right: 0; +} + +.elfinder-rtl .elfinder-button-search .ui-icon-close { + left: 0; +} + +/* toolbar swipe handle */ +.elfinder-toolbar-swipe-handle { + position: absolute; + top: 0px; + left: 0px; + height: 50px; + width: 100%; + pointer-events: none; + background: linear-gradient(to bottom, + rgba(221, 228, 235, 1) 0, + rgba(221, 228, 235, 0.8) 2px, + rgba(216, 223, 230, 0.3) 5px, + rgba(0, 0, 0, 0.1) 95%, + rgba(0, 0, 0, 0) 100%); +} + diff --git a/sites/all/libraries/elfinder/css/elfinder.min.css b/sites/all/libraries/elfinder/css/elfinder.min.css new file mode 100644 index 00000000..d767cf9a --- /dev/null +++ b/sites/all/libraries/elfinder/css/elfinder.min.css @@ -0,0 +1,9 @@ +/*! + * elFinder - file manager for web + * Version 2.1.43 (2018-11-24) + * http://elfinder.org + * + * Copyright 2009-2018, Studio 42 + * Licensed under a 3-clauses BSD license + */ +.elfinder-resize-container{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{float:left}.elfinder-resize-control input[type=number]{border:1px solid #aaa;text-align:right;width:4.5em}.elfinder-resize-control input.elfinder-resize-bg{text-align:center;width:5em;direction:ltr}.elfinder-dialog-resize .elfinder-resize-control-panel{margin-top:10px}.elfinder-dialog-resize .elfinder-resize-imgrotate,.elfinder-dialog-resize .elfinder-resize-pallet{cursor:pointer}.elfinder-dialog-resize .elfinder-resize-picking{cursor:crosshair}.elfinder-dialog-resize .elfinder-resize-grid8+button{padding-top:2px;padding-bottom:2px}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:hidden;text-align:left;direction:ltr}.elfinder-resize-handle,div.elfinder-cwd-wrapper-list tr.ui-state-default td{position:relative}.elfinder-resize-handle-hline,.elfinder-resize-handle-vline{position:absolute;background-image:url(../img/crop.gif)}.elfinder-resize-handle-hline{width:100%;height:1px!important;background-repeat:repeat-x}.elfinder-resize-handle-vline{width:1px!important;height:100%;background-repeat:repeat-y}.elfinder-resize-handle-hline-top{top:0;left:0}.elfinder-resize-handle-hline-bottom{bottom:0;left:0}.elfinder-resize-handle-vline-left{top:0;left:0}.elfinder-resize-handle-vline-right{top:0;right:0}.elfinder-resize-handle-point{position:absolute;width:8px;height:8px;border:1px solid #777;background:0 0}.elfinder-resize-handle-point-n{top:0;left:50%;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-e,.elfinder-resize-handle-point-ne{top:0;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-e{top:50%}.elfinder-resize-handle-point-se{bottom:0;right:0;margin-bottom:-5px;margin-right:-5px}.elfinder-resize-handle-point-s,.elfinder-resize-handle-point-sw{bottom:0;left:50%;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-sw{left:0}.elfinder-resize-handle-point-nw,.elfinder-resize-handle-point-w{top:50%;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-nw{top:0}.elfinder-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}.ui-dialog .ui-dialog-content.elfinder-edit-editor{background-color:#fff}.ui-dialog .ui-dialog-content.elfinder-edit-editor .elfinder-edit-imageeditor{width:100%;height:300px;max-height:100%;text-align:center}.ui-dialog .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-touch.elfinder-fullscreen-native textarea.elfinder-file-edit{padding-bottom:20em;margin-bottom:-20em}.std42-dialog .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-edit-onlineconvert-bottom-btn button,.elfinder-edit-onlineconvert-button button,.elfinder-preference dt label,.ui-dialog-buttonpane .ui-icon{cursor:pointer}.elfinder-edit-spinner{position:absolute;top:50%;text-align:center;width:100%;font-size:16pt}.elfinder-dialog .elfinder-edit-spinner .elfinder-spinner,.elfinder-dialog .elfinder-edit-spinner .elfinder-spinner-text{float:none}.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-preference .ui-tabs-nav{margin-bottom:1px}.elfinder-preference .ui-tabs-panel{padding:10px 10px 0;overflow:auto;box-sizing:border-box;-webkit-overflow-scrolling:touch}.elfinder-preference a.ui-state-hover,.elfinder-preference label.ui-state-hover{border:none}.elfinder-preference dl{width:100%;display:inline-block;margin:.5em 0}.elfinder-preference dt{display:block;width:200px;clear:left;float:left;max-width:50%}.elfinder-rtl .elfinder-preference dt{clear:right;float:right}.elfinder-preference dd{margin-bottom:1em}.elfinder-preference dd input[type=checkbox],.elfinder-preference dd label{white-space:nowrap;display:inline-block;cursor:pointer}.elfinder-preference dt.elfinder-preference-checkboxes{width:100%;max-width:none}.elfinder-preference dd.elfinder-preference-checkboxes{padding-top:3ex}.elfinder-preference select{max-width:100%}.elfinder-preference dd.elfinder-preference-iconSize .ui-slider{width:50%;max-width:100px;display:inline-block;margin:0 10px}.elfinder-preference button{margin:0 16px}.elfinder-preference button+button{margin:0 -10px}.elfinder-preference .elfinder-preference-taball .elfinder-reference-hide-taball{display:none}.elfinder-preference-theme fieldset{margin-bottom:10px}.elfinder-preference-theme legend a{font-size:1.8em;text-decoration:none;cursor:pointer}.elfinder-preference-theme dt{width:20%;word-break:break-all}.elfinder-preference-theme dt:after{content:" :"}.elfinder-preference-theme dd{margin-inline-start:20%}.elfinder-preference img.elfinder-preference-theme-image{display:block;margin-left:auto;margin-right:auto;max-width:90%;max-height:200px;cursor:pointer}.elfinder-preference-theme-btn,.elfinder-rename-batch-type{text-align:center}.elfinder-preference-theme button.elfinder-preference-theme-default{display:inline;margin:0 10px;font-size:8pt}.elfinder-rtl .elfinder-info-title .elfinder-cwd-icon:before{right:33px;left:auto}.elfinder-info-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:none}.elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{position:absolute;bottom:2px;width:16px;height:16px;padding:10px;border:none;overflow:hidden;cursor:pointer}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item .ui-icon,.elfinder-ltr .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{left:2px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item .ui-icon,.elfinder-rtl .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect{right:2px}.elfinder-ltr .elfinder-rm-title .elfinder-cwd-icon:before{left:38px}.elfinder-rtl .elfinder-rm-title .elfinder-cwd-icon:before{right:86px;left:auto}.elfinder-rm-title .elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:none}.elfinder-rename-batch div{margin:5px 8px}.elfinder-rename-batch .elfinder-rename-batch-name input{width:100%;font-size:1.6em}.elfinder-rename-batch .elfinder-rename-batch-type label{margin:2px;font-size:.9em}.elfinder-rename-batch-preview{padding:0 8px;font-size:1.1em;min-height:4ex}.ui-front{z-index:100}.elfinder{padding:0;position:relative;display:block;visibility:visible;font-size:18px;font-family:Verdana,Arial,Helvetica,sans-serif}.elfinder-ios input,.elfinder-ios select,.elfinder-ios textarea{font-size:16px!important}.elfinder.elfinder-fullscreen>.ui-resizable-handle{display:none}.elfinder-font-mono{line-height:2ex}.elfinder.elfinder-processing *{cursor:progress!important}.elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after{position:absolute;top:0;width:100%;height:3px;content:'';left:0;background-image:url(../img/progress.gif);opacity:.6;pointer-events:none}.elfinder :not(input):not(textarea):not(select):not([contenteditable=true]),.elfinder-contextmenu :not(input):not(textarea):not(select):not([contenteditable=true]){-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;user-select:none}.elfinder .overflow-scrolling-touch{-webkit-overflow-scrolling:touch}.elfinder-rtl{text-align:right;direction:rtl}.elfinder-workzone{padding:0;position:relative;overflow:hidden}.elfinder-lock,.elfinder-perms,.elfinder-symlink{position:absolute;width:16px;height:16px;background-image:url(../img/toolbar.png);background-repeat:no-repeat}.elfinder-perms,.elfinder-symlink{background-position:0 -528px}.elfinder-na .elfinder-perms{background-position:0 -96px}.elfinder-ro .elfinder-perms{background-position:0 -64px}.elfinder-wo .elfinder-perms{background-position:0 -80px}.elfinder-group .elfinder-perms{background-position:0 0}.elfinder-lock{background-position:0 -656px}.elfinder-drag-helper{top:0;left:0;width:70px;height:60px;padding:0 0 0 25px;z-index:100000;will-change:left,top}.elfinder-drag-helper.html5-native{position:absolute;top:-1000px;left:-1000px}.elfinder-drag-helper-icon-status{position:absolute;width:16px;height:16px;left:42px;top:60px;background:url(../img/toolbar.png) 0 -96px no-repeat;display:block}.elfinder-drag-helper-move .elfinder-drag-helper-icon-status{background-position:0 -720px}.elfinder-drag-helper-plus .elfinder-drag-helper-icon-status{background-position:0 -544px}.elfinder-drag-num{display:inline-box;position:absolute;top:0;left:0;width:auto;height:14px;text-align:center;padding:1px 3px;font-weight:700;color:#fff;background-color:red;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-drag-helper .elfinder-cwd-icon{margin:0 0 0 -24px;float:left}.elfinder-overlay{position:absolute;opacity:.2;filter:Alpha(Opacity=20)}.elfinder .elfinder-panel{position:relative;background-image:none;padding:7px 12px}[draggable=true]{-khtml-user-drag:element}.elfinder [contentEditable=true]:empty:not(:focus):before{content:attr(data-ph)}.elfinder div.elfinder-bottomtray{position:fixed;bottom:0;max-width:100%;opacity:.8}.elfinder.elfinder-ltr div.elfinder-bottomtray{left:0}.elfinder.elfinder-rtl div.elfinder-bottomtray{right:0}.elfinder .elfinder-ui-tooltip,.elfinder-ui-tooltip{font-size:14px;padding:2px 4px}.elfinder .elfinder-contextmenu,.elfinder .elfinder-contextmenu-sub{position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0;top:0;left:0}.elfinder .elfinder-contextmenu-sub{top:5px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder .elfinder-contextmenu-header{margin-top:-4px;padding:0 .5em .2ex;border:none;text-align:center}.elfinder .elfinder-contextmenu-header span{font-size:.8em;font-weight:bolder}.elfinder .elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder .elfinder-contextmenu-item.ui-state-active{border:none}.elfinder .elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:auto;right:auto;top:50%;margin-top:-8px}.elfinder-touch .elfinder-contextmenu-item{padding:12px 38px}.elfinder-navbar-root-local.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_local.svg);background-size:contain}.elfinder-navbar-root-trash.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_trash.svg);background-size:contain}.elfinder-navbar-root-ftp.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_ftp.svg);background-size:contain}.elfinder-navbar-root-sql.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_sql.svg);background-size:contain}.elfinder-navbar-root-dropbox.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_dropbox.svg);background-size:contain}.elfinder-navbar-root-googledrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_googledrive.svg);background-size:contain}.elfinder-navbar-root-onedrive.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_onedrive.svg);background-size:contain}.elfinder-navbar-root-box.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_box.svg);background-size:contain}.elfinder-navbar-root-zip.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_zip.svg);background-size:contain}.elfinder-navbar-root-network.elfinder-contextmenu-icon{background-image:url(../img/volume_icon_network.svg);background-size:contain}.elfinder .elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px;padding-right:12px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-left:28px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-right:28px}.elfinder-touch .elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-left:36px}.elfinder-touch .elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextsubmenu-item-icon{padding-right:36px}.elfinder .elfinder-contextmenu-arrow,.elfinder .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px;overflow:hidden}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-extra-icon,.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-icon{right:8px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-extra-icon{left:8px}.elfinder .elfinder-contextmenu-arrow{width:16px;height:16px;background:url(../img/arrows-normal.png) 5px 4px no-repeat}.elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder .elfinder-contextmenu-extra-icon a,.elfinder .elfinder-contextmenu-extra-icon span{display:inline-block;width:100%;height:100%;padding:20px;margin:0;color:transparent!important;text-decoration:none;cursor:pointer}.elfinder .elfinder-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder .elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder .elfinder-contextmenu-item .elfinder-button-icon.ui-state-disabled{background-image:url(../img/toolbar.png)}.elfinder-cwd-wrapper{overflow:auto;position:relative;padding:2px;margin:0}.elfinder-cwd-wrapper-list{padding:0}.elfinder-cwd{position:absolute;top:0;cursor:default;padding:0;margin:0;-ms-touch-action:auto;touch-action:auto;min-width:100%}.elfinder-ltr .elfinder-cwd{left:0}.elfinder-rtl .elfinder-cwd{right:0}.elfinder-cwd.elfinder-table-header-sticky{position:-webkit-sticky;position:-ms-sticky;position:sticky;top:0;left:auto;right:auto;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;height:0;overflow:visible}.elfinder-cwd.elfinder-table-header-sticky table{border-top:2px solid;padding-top:0}.elfinder-cwd.elfinder-table-header-sticky td{display:inline-block}.elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table{border-top:2px solid transparent}.elfinder .elfinder-cwd table tbody.elfinder-cwd-fixheader,.elfinder-cwd-fixheader .elfinder-cwd{position:relative}.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-wrapper-empty .elfinder-cwd:after{display:block;height:auto;width:90%;width:calc(100% - 20px);position:absolute;top:50%;left:50%;-ms-transform:translateY(-50%) translateX(-50%);-webkit-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);line-height:1.5em;text-align:center;white-space:pre-wrap;opacity:.6;filter:Alpha(Opacity=60);font-weight:700}.elfinder-cwd-file .elfinder-cwd-select{position:absolute;top:0;left:0;background-color:transparent;opacity:.4;filter:Alpha(Opacity=40)}.elfinder-mobile .elfinder-cwd-file .elfinder-cwd-select{width:30px;height:30px}.elfinder .elfinder-cwd-selectall,.elfinder-cwd-file.ui-selected .elfinder-cwd-select{opacity:.8;filter:Alpha(Opacity=80)}.elfinder-rtl .elfinder-cwd-file .elfinder-cwd-select{left:auto;right:0}.elfinder .elfinder-cwd-selectall{position:absolute;width:30px;height:30px;top:0}.elfinder .elfinder-workzone.elfinder-cwd-wrapper-empty .elfinder-cwd-selectall{display:none}.elfinder-ltr .elfinder-workzone .elfinder-cwd-selectall{text-align:right;right:18px;left:auto}.elfinder-rtl .elfinder-workzone .elfinder-cwd-selectall{text-align:left;right:auto;left:18px}.elfinder-ltr.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{right:0}.elfinder-rtl.elfinder-mobile .elfinder-workzone .elfinder-cwd-selectall{left:0}.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-select.ui-state-hover{background-color:transparent}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:90px;padding-bottom:2px;cursor:default;border:none;position:relative}.elfinder .std42-dialog .ui-dialog-content label,.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active{border:none}.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file{float:left;margin:0 3px 2px 0}.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file{float:right;margin:0 0 5px 3px}.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover{border:0 solid}.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:52px;height:52px;margin:1px auto;padding:2px;position:relative}.elfinder-cwd-size1 .elfinder-cwd-icon:before,.elfinder-cwd-size2 .elfinder-cwd-icon:before,.elfinder-cwd-size3 .elfinder-cwd-icon:before{top:3px;display:block}.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:112px}.elfinder-cwd-size1.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:74px;height:74px}.elfinder-cwd-size1 .elfinder-cwd-icon,.elfinder-cwd-size2 .elfinder-cwd-icon,.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform-origin:top center;-ms-transform:scale(1.5);-webkit-transform-origin:top center;-webkit-transform:scale(1.5);transform-origin:top center;transform:scale(1.5)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(1.35) translate(-4px,15%);-webkit-transform-origin:top left;-webkit-transform:scale(1.35) translate(-4px,15%);transform-origin:top left;transform:scale(1.35) translate(-4px,15%)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1) translate(10px,-5px);-webkit-transform:scale(1) translate(10px,-5px);transform:scale(1) translate(10px,-5px)}.elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:72px;height:72px;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file{width:140px;height:134px}.elfinder-cwd-size2.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:98px;height:98px}.elfinder-cwd-size2 .elfinder-cwd-icon,.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform:scale(2);-webkit-transform:scale(2);transform:scale(2)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(1.8) translate(-5px,18%);-webkit-transform-origin:top left;-webkit-transform:scale(1.8) translate(-5px,18%);transform-origin:top left;transform:scale(1.8) translate(-5px,18%)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1.1) translate(0,10px);-webkit-transform:scale(1.1) translate(0,10px);transform:scale(1.1) translate(0,10px)}.elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:96px;height:96px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file{width:174px;height:158px}.elfinder-cwd-size3.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:122px;height:122px}.elfinder-cwd-size3 .elfinder-cwd-icon{-ms-transform:scale(2.5);-webkit-transform:scale(2.5);transform:scale(2.5)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before{-ms-transform-origin:top left;-ms-transform:scale(2.25) translate(-6px,20%);-webkit-transform-origin:top left;-webkit-transform:scale(2.25) translate(-6px,20%);transform-origin:top left;transform:scale(2.25) translate(-6px,20%)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:after{-ms-transform:scale(1.2) translate(-9px,22px);-webkit-transform:scale(1.2) translate(-9px,22px);transform:scale(1.2) translate(-9px,22px)}.elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl{-ms-transform-origin:center center;-ms-transform:scale(1);-webkit-transform-origin:center center;-webkit-transform:scale(1);transform-origin:center center;transform:scale(1);width:120px;height:120px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}.elfinder-cwd-view-icons .elfinder-cwd-filename{text-align:center;max-height:2.4em;line-height:1.2em;white-space:pre-line;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;margin:3px 1px 0;padding:1px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;word-break:break-word;overflow-wrap:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.elfinder-cwd-view-icons .elfinder-perms{bottom:4px;right:2px}.elfinder-cwd-view-icons .elfinder-lock{top:-3px;right:-2px}.elfinder-cwd-view-icons .elfinder-symlink{bottom:6px;left:0}.elfinder-cwd-icon{display:block;width:48px;height:48px;margin:0 auto;background-image:url(../img/icons-big.svg);background-image:url(../img/icons-big.png) \9;background-position:0 0;background-repeat:no-repeat;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon,.elfinder-navbar-root-local .elfinder-cwd-icon{background-image:url(../img/volume_icon_local.svg);background-image:url(../img/volume_icon_local.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-local.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon,.elfinder-navbar-root-trash .elfinder-cwd-icon{background-image:url(../img/volume_icon_trash.svg);background-image:url(../img/volume_icon_trash.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-trash.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon,.elfinder-navbar-root-ftp .elfinder-cwd-icon{background-image:url(../img/volume_icon_ftp.svg);background-image:url(../img/volume_icon_ftp.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-ftp.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon,.elfinder-navbar-root-sql .elfinder-cwd-icon{background-image:url(../img/volume_icon_sql.svg);background-image:url(../img/volume_icon_sql.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-sql.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon,.elfinder-navbar-root-dropbox .elfinder-cwd-icon{background-image:url(../img/volume_icon_dropbox.svg);background-image:url(../img/volume_icon_dropbox.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-dropbox.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon,.elfinder-navbar-root-googledrive .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon,.elfinder-navbar-root-googledrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_googledrive.svg);background-image:url(../img/volume_icon_googledrive.png) \9;background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon,.elfinder-navbar-root-onedrive .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon,.elfinder-navbar-root-onedrive .elfinder-cwd-icon{background-image:url(../img/volume_icon_onedrive.svg);background-image:url(../img/volume_icon_onedrive.png) \9;background-size:contain}.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon,.elfinder-navbar-root-box .elfinder-cwd-icon{background-position:0 0}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon,.elfinder-navbar-root-box .elfinder-cwd-icon{background-image:url(../img/volume_icon_box.svg);background-image:url(../img/volume_icon_box.png) \9;background-size:contain}.elfinder-cwd .elfinder-navbar-root-zip.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon,.elfinder-navbar-root-zip .elfinder-cwd-icon{background-image:url(../img/volume_icon_zip.svg);background-image:url(../img/volume_icon_zip.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-box.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-googledrive.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd .elfinder-navbar-root-onedrive.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon,.elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon,.elfinder-navbar-root-network .elfinder-cwd-icon{background-image:url(../img/volume_icon_network.svg);background-image:url(../img/volume_icon_network.png) \9;background-position:0 0;background-size:contain}.elfinder-cwd .elfinder-navbar-root-network.elfinder-droppable-active .elfinder-cwd-icon{background-position:1px -1px}.elfinder-cwd-icon:before{content:none;position:absolute;left:0;top:5px;min-width:20px;max-width:84px;text-align:center;padding:0 4px 1px;border-radius:4px;font-family:Verdana;font-size:10px;line-height:1.3em;-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);-o-transform:scale(.9);transform:scale(.9)}.elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before{left:-10px}.elfinder-cwd-icon.elfinder-cwd-icon-mp2t:before{content:'ts'}.elfinder-cwd-icon.elfinder-cwd-icon-dash-xml:before{content:'dash'}.elfinder-cwd-icon.elfinder-cwd-icon-x-mpegurl:before{content:'hls'}.elfinder-cwd-icon.elfinder-cwd-icon-x-c:before{content:'c++'}.elfinder-cwd-icon.elfinder-cwd-bgurl{background-position:center center;background-repeat:no-repeat}.elfinder-cwd-icon.elfinder-cwd-bgurl,.elfinder-cwd-icon.elfinder-cwd-bgurl.elfinder-cwd-bgself{-moz-background-size:cover;background-size:cover}.elfinder-cwd-icon.elfinder-cwd-bgurl:after{content:' '}.elfinder-cwd-bgurl:after{position:relative;display:inline-block;top:36px;left:-38px;width:48px;height:48px;background-image:url(../img/icons-big.svg);background-image:url(../img/icons-big.png) \9;background-repeat:no-repeat;background-size:auto!important;opacity:.8;filter:Alpha(Opacity=60);-webkit-transform-origin:54px -24px;-webkit-transform:scale(.6);-moz-transform-origin:54px -24px;-moz-transform:scale(.6);-ms-transform-origin:54px -24px;-ms-transform:scale(.6);-o-transform-origin:54px -24px;-o-transform:scale(.6);transform-origin:54px -24px;transform:scale(.6)}.elfinder-cwd-icon.elfinder-cwd-icon-drag{width:48px;height:48px}.elfinder-cwd-icon-directory.elfinder-cwd-bgurl:after,.elfinder-cwd-icon-image.elfinder-cwd-bgurl:after,.elfinder-cwd-icon.elfinder-cwd-icon-drag:after,.elfinder-cwd-icon.elfinder-cwd-icon-drag:before{content:none}.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon{background-position:0 -100px}.elfinder-cwd .elfinder-droppable-active{outline:2px solid #8cafed;outline-offset:-2px}.elfinder-cwd-icon-directory{background-position:0 -50px}.elfinder-cwd-icon-application,.elfinder-cwd-icon-application:after{background-position:0 -150px}.elfinder-cwd-icon-text,.elfinder-cwd-icon-text:after{background-position:0 -1350px}.elfinder-cwd-icon-plain,.elfinder-cwd-icon-plain:after,.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-x-empty:after{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-image:after,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-vnd-adobe-photoshop:after{background-position:0 -250px}.elfinder-cwd-icon-postscript,.elfinder-cwd-icon-postscript:after{background-position:0 -1550px}.elfinder-cwd-icon-audio,.elfinder-cwd-icon-audio:after{background-position:0 -300px}.elfinder-cwd-icon-dash-xml,.elfinder-cwd-icon-flash-video,.elfinder-cwd-icon-video,.elfinder-cwd-icon-video:after,.elfinder-cwd-icon-vnd-apple-mpegurl,.elfinder-cwd-icon-x-mpegurl{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtf:after,.elfinder-cwd-icon-rtfd,.elfinder-cwd-icon-rtfd:after{background-position:0 -400px}.elfinder-cwd-icon-pdf,.elfinder-cwd-icon-pdf:after{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-ms-excel:after,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:after,.elfinder-cwd-icon-vnd-ms-excel:after,.elfinder-cwd-icon-vnd-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-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-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-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-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-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-ms-office,.elfinder-cwd-icon-vnd-ms-office: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-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{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,.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:1.5ex}.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-toolbar{padding:4px 0 3px;border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;max-height:50%;overflow-y:auto}.elfinder-buttonset{margin:1px 4px;float:left;background:0 0;padding:0;overflow:hidden}.elfinder .elfinder-button{min-width:16px;height:16px;margin:0;padding:4px;float:left;overflow:hidden;position:relative;border:0 solid;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;line-height:1;cursor:default}.elfinder-rtl .elfinder-button{float:right}.elfinder-touch .elfinder-button{min-width:20px;height:20px}.elfinder .ui-icon-search{cursor:pointer}.elfinder-toolbar-button-separator{float:left;padding:0;height:24px;border-top:0 solid;border-right:0 solid;border-bottom:0 solid;width:0}.elfinder-rtl .elfinder-toolbar-button-separator{float:right}.elfinder-touch .elfinder-toolbar-button-separator{height:28px}.elfinder .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon,.elfinder .elfinder-button.ui-state-disabled .elfinder-button-text{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:inline-block;background:url(../img/toolbar.png) no-repeat}.elfinder-button-text{position:relative;display:inline-block;top:-4px;margin:0 2px;font-size:12px}.elfinder-touch .elfinder-button-icon{-moz-transform-origin:top left;-moz-transform:scale(1.25);zoom:1.25}.elfinder-touch .elfinder-button-text{-moz-transform:translate(3px,3px);top:-5px}.elfinder-button-icon-home{background-position:0 0}.elfinder-button-icon-back{background-position:0 -112px}.elfinder-button-icon-forward{background-position:0 -128px}.elfinder-button-icon-up{background-position:0 -144px}.elfinder-button-icon-dir{background-position:0 -16px}.elfinder-button-icon-opendir{background-position:0 -32px}.elfinder-button-icon-reload{background-position:0 -160px}.elfinder-button-icon-open{background-position:0 -176px}.elfinder-button-icon-mkdir{background-position:0 -192px}.elfinder-button-icon-mkfile{background-position:0 -208px}.elfinder-button-icon-rm{background-position:0 -832px}.elfinder-button-icon-trash{background-position:0 -224px}.elfinder-button-icon-restore{background-position:0 -816px}.elfinder-button-icon-copy{background-position:0 -240px}.elfinder-button-icon-cut{background-position:0 -256px}.elfinder-button-icon-paste{background-position:0 -272px}.elfinder-button-icon-getfile{background-position:0 -288px}.elfinder-button-icon-duplicate{background-position:0 -304px}.elfinder-button-icon-rename{background-position:0 -320px}.elfinder-button-icon-edit{background-position:0 -336px}.elfinder-button-icon-quicklook{background-position:0 -352px}.elfinder-button-icon-upload{background-position:0 -368px}.elfinder-button-icon-download{background-position:0 -384px}.elfinder-button-icon-info{background-position:0 -400px}.elfinder-button-icon-extract{background-position:0 -416px}.elfinder-button-icon-archive{background-position:0 -432px}.elfinder-button-icon-view{background-position:0 -448px}.elfinder-button-icon-view-list{background-position:0 -464px}.elfinder-button-icon-help{background-position:0 -480px}.elfinder-button-icon-resize{background-position:0 -512px}.elfinder-button-icon-link{background-position:0 -528px}.elfinder-button-icon-search{background-position:0 -561px}.elfinder-button-icon-sort{background-position:0 -577px}.elfinder-button-icon-rotate-r{background-position:0 -625px}.elfinder-button-icon-rotate-l{background-position:0 -641px}.elfinder-button-icon-netmount{background-position:0 -688px}.elfinder-button-icon-netunmount{background-position:0 -96px}.elfinder-button-icon-places{background-position:0 -704px}.elfinder-button-icon-chmod{background-position:0 -48px}.elfinder-button-icon-accept{background-position:0 -736px}.elfinder-button-icon-menu{background-position:0 -752px}.elfinder-button-icon-colwidth{background-position:0 -768px}.elfinder-button-icon-fullscreen{background-position:0 -784px}.elfinder-button-icon-unfullscreen{background-position:0 -800px}.elfinder-button-icon-empty{background-position:0 -848px}.elfinder-button-icon-undo{background-position:0 -864px}.elfinder-button-icon-redo{background-position:0 -880px}.elfinder-button-icon-preference{background-position:0 -896px}.elfinder-button-icon-mkdirin{background-position:0 -912px}.elfinder-button-icon-selectall{background-position:0 -928px}.elfinder-button-icon-selectnone{background-position:0 -944px}.elfinder-button-icon-selectinvert{background-position:0 -960px}.elfinder-button-icon-opennew{background-position:0 -976px}.elfinder-button-icon-hide{background-position:0 -992px}.elfinder-button-icon-text{background-position:0 -1008px}.elfinder-rtl .elfinder-button-icon-back,.elfinder-rtl .elfinder-button-icon-forward,.elfinder-rtl .elfinder-button-icon-getfile,.elfinder-rtl .elfinder-button-icon-help,.elfinder-rtl .elfinder-button-icon-redo,.elfinder-rtl .elfinder-button-icon-rename,.elfinder-rtl .elfinder-button-icon-search,.elfinder-rtl .elfinder-button-icon-undo,.elfinder-rtl .elfinder-button-icon-view-list,.elfinder-rtl .ui-icon-search{-ms-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scale(-1,1)}.elfinder .elfinder-menubutton{overflow:visible}.elfinder-button-icon-spinner{background:url(../img/spinner-mini.gif) center center no-repeat}.elfinder-button-menu{position:absolute;margin-top:24px;padding:3px 0;overflow-y:auto}.elfinder-touch .elfinder-button-menu{margin-top:30px}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.elfinder-touch .elfinder-button-menu-item{padding:12px 19px}.elfinder-button-menu .ui-state-hover{border:0 solid}.elfinder-button-menu-item-separated{border-top:1px solid #ccc}.elfinder-button-menu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-button-menu-item-selected .ui-icon{display:block}.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n{display:none}.elfinder-button form{position:absolute;top:0;right:0;opacity:0;filter:Alpha(Opacity=0);cursor:pointer}.elfinder .elfinder-button form input{background:0 0;cursor:default}.elfinder .elfinder-button-search{border:0 solid;background:0 0;padding:0;margin:1px 4px;height:auto;min-height:26px;width:70px;overflow:visible}.elfinder .elfinder-button-search.ui-state-active{width:220px}.elfinder .elfinder-button-search-menu{font-size:8pt;text-align:center;width:auto;min-width:180px;position:absolute;top:30px;padding-right:5px;padding-left:5px}.elfinder-ltr .elfinder-button-search-menu{right:22px;left:auto}.elfinder-rtl .elfinder-button-search-menu{right:auto;left:22px}.elfinder-touch .elfinder-button-search-menu{top:34px}.elfinder .elfinder-button-search-menu div{margin:5px auto;display:table}.elfinder .elfinder-button-search-menu div .ui-state-hover{border:1px solid}.elfinder-ltr .elfinder-button-search{float:right;margin-right:10px}.elfinder-rtl .elfinder-button-search{float:left;margin-left:10px}.elfinder-rtl .ui-controlgroup>.ui-controlgroup-item{float:right}.elfinder-button-search input[type=text]{box-sizing:border-box;width:100%;height:26px;padding:0 20px;line-height:22px;border:1px solid #aaa;-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px;outline:0 solid}.elfinder-button-search input::-ms-clear{display:none}.elfinder-touch .elfinder-button-search input{height:30px;line-height:28px}.elfinder-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-8px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-button-search-menu .ui-checkboxradio-icon{display:none}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-ltr .elfinder-button-search .ui-icon-close,.elfinder-rtl .elfinder-button-search .ui-icon-search{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0}.elfinder-toolbar-swipe-handle{position:absolute;top:0;left:0;height:50px;width:100%;pointer-events:none;background:linear-gradient(to bottom,#dde4eb 0,rgba(221,228,235,.8) 2px,rgba(216,223,230,.3) 5px,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%)} \ No newline at end of file diff --git a/sites/all/libraries/elfinder/css/theme.css b/sites/all/libraries/elfinder/css/theme.css new file mode 100644 index 00000000..daec6328 --- /dev/null +++ b/sites/all/libraries/elfinder/css/theme.css @@ -0,0 +1,349 @@ +/** + * MacOS X like theme for elFinder. + * Required jquery ui "smoothness" theme. + * + * @author Dmitry (dio) Levashov + **/ + +/* input textarea */ +.elfinder input, +.elfinder textarea { + color: #000; + background-color: #FFF; + border-color: #ccc; +} + +/* dialogs */ +.std42-dialog, .std42-dialog .ui-widget-content { + background-color: #ededed; + background-image: none; + background-clip: content-box; +} + +.std42-dialog.elfinder-bg-translucent { + background-color: #fff; + background-color: rgba(255, 255, 255, 0.9); +} + +.std42-dialog.elfinder-bg-translucent .ui-widget-content { + background-color: transparent; +} + +.elfinder-quicklook-title { + color: #fff; +} + +.elfinder-quicklook-titlebar-icon { + background-color: transparent; + background-image: none; +} + +.elfinder-quicklook-titlebar-icon .ui-icon { + background-color: #d4d4d4; + border-color: #8a8a8a; +} + +.std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover .ui-icon, +.elfinder-mobile .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-icon, +.elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close:hover, +.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close { + background-color: #ff6252; + border-color: #e5695d; + background-image: url("../img/ui-icons_ffffff_256x240.png"); +} + +.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize:hover .ui-icon, +.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize .ui-icon, +.elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize:hover, +.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize { + background-color: #ffbc00; + border-color: #e3a40b; + background-image: url("../img/ui-icons_ffffff_256x240.png"); +} + +.std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full:hover .ui-icon, +.elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full .ui-icon, +.elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full:hover, +.elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full { + background-color: #26c82f; + border-color: #13ae10; + background-image: url("../img/ui-icons_ffffff_256x240.png"); +} + +.std42-dialog .elfinder-help, +.std42-dialog .elfinder-help .ui-widget-content { + background: #fff; +} + +/* navbar */ +.elfinder .elfinder-navbar { + background: #dde4eb; +} + +.elfinder-navbar .ui-state-hover { + color: #000; + background-color: #edf1f4; + border-color: #bdcbd8; +} + +.elfinder-navbar .ui-state-active { + background: #3875d7; + border-color: #3875d7; + color: #fff; +} + +.elfinder-navbar .ui-droppable-hover, +.elfinder-navbar .elfinder-droppable-active { + background: #A7C6E5; +} + +/* disabled elfinder */ +.elfinder-disabled .elfinder-navbar .ui-state-active { + background: #dadada; + border-color: #aaa; + color: #777; +} + +/* workzone */ +.elfinder-workzone { + background: #fff; +} + +/* current directory */ +/* Is in trash */ +.elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash { + background-color: #f0f0f0; +} + +/* selected file in "icons" view */ +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover, +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active { + background: #ccc; +} + +/* type badge in "icons" view */ +/* default */ +.elfinder-cwd-icon:before { + color: white; + background-color: #798da7; +} + +/* type */ +.elfinder-cwd-icon-text:before { + background-color: #6f99e6 +} + +.elfinder-cwd-icon-image:before { + background-color: #2ea26c +} + +.elfinder-cwd-icon-audio:before { + background-color: #7bad2a +} + +.elfinder-cwd-icon-video:before { + background-color: #322aad +} + +/* subtype */ +.elfinder-cwd-icon-x-empty:before, +.elfinder-cwd-icon-plain:before { + background-color: #719be6 +} + +.elfinder-cwd-icon-rtf:before, +.elfinder-cwd-icon-rtfd:before { + background-color: #83aae7 +} + +.elfinder-cwd-icon-pdf:before { + background-color: #db7424 +} + +.elfinder-cwd-icon-html:before { + background-color: #82bc12 +} + +.elfinder-cwd-icon-xml:before, +.elfinder-cwd-icon-css:before { + background-color: #7c7c7c +} + +.elfinder-cwd-icon-x-shockwave-flash:before { + background-color: #f43a36 +} + +.elfinder-cwd-icon-zip:before, +.elfinder-cwd-icon-x-zip:before, +.elfinder-cwd-icon-x-xz:before, +.elfinder-cwd-icon-x-7z-compressed:before, +.elfinder-cwd-icon-x-gzip:before, +.elfinder-cwd-icon-x-tar:before, +.elfinder-cwd-icon-x-bzip:before, +.elfinder-cwd-icon-x-bzip2:before, +.elfinder-cwd-icon-x-rar:before, +.elfinder-cwd-icon-x-rar-compressed:before { + background-color: #97638e +} + +.elfinder-cwd-icon-javascript:before, +.elfinder-cwd-icon-x-javascript:before, +.elfinder-cwd-icon-x-perl:before, +.elfinder-cwd-icon-x-python:before, +.elfinder-cwd-icon-x-ruby:before, +.elfinder-cwd-icon-x-sh:before, +.elfinder-cwd-icon-x-shellscript:before, +.elfinder-cwd-icon-x-c:before, +.elfinder-cwd-icon-x-csrc:before, +.elfinder-cwd-icon-x-chdr:before, +.elfinder-cwd-icon-x-c--:before, +.elfinder-cwd-icon-x-c--src:before, +.elfinder-cwd-icon-x-c--hdr:before, +.elfinder-cwd-icon-x-java:before, +.elfinder-cwd-icon-x-java-source:before, +.elfinder-cwd-icon-x-php:before { + background-color: #7c607c +} + +.elfinder-cwd-icon-msword:before, +.elfinder-cwd-icon-vnd-ms-office:before, +.elfinder-cwd-icon-vnd-ms-word:before, +.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template:before { + background-color: #2b569a +} + +.elfinder-cwd-icon-ms-excel:before, +.elfinder-cwd-icon-vnd-ms-excel:before, +.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template:before { + background-color: #107b10 +} + +.elfinder-cwd-icon-vnd-ms-powerpoint:before, +.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow:before, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template:before { + background-color: #d24625 +} + +.elfinder-cwd-icon-vnd-oasis-opendocument-chart:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-database:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-formula:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-graphics:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-image:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-presentation:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-text:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-master:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-template:before, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-web:before, +.elfinder-cwd-icon-vnd-openofficeorg-extension:before { + background-color: #00a500 +} + +.elfinder-cwd-icon-postscript:before { + background-color: #ff5722 +} + +/* list view*/ +.elfinder-cwd table thead td.ui-state-hover { + background: #ddd; +} + +.elfinder-cwd table tr:nth-child(odd) { + background-color: #edf3fe; +} + +.elfinder-cwd table tr { + border: 1px solid transparent; + border-top: 1px solid #fff; +} + +.elfinder-cwd .elfinder-droppable-active td { + background: #A7C6E5; +} + +.elfinder-cwd.elfinder-table-header-sticky table { + border-top-color: #fff; +} + +.elfinder-droppable-active .elfinder-cwd.elfinder-table-header-sticky table { + border-top-color: #A7C6E5; +} + +/* common selected background/color */ +.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, +.elfinder-cwd table td.ui-state-hover, +.elfinder-button-menu .ui-state-hover { + background: #3875d7; + color: #fff; +} + +/* disabled elfinder */ +.elfinder-disabled .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, +.elfinder-disabled .elfinder-cwd table td.ui-state-hover { + background: #dadada; +} + +/* statusbar */ +.elfinder .elfinder-statusbar { + color: #555; +} + +.elfinder .elfinder-statusbar a { + text-decoration: none; + color: #555; +} + +/* contextmenu */ +.elfinder-contextmenu .ui-state-active { + background: #6293df; + color: #fff; +} + +.elfinder-contextmenu .ui-state-hover { + background: #3875d7; + color: #fff; +} + +.elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow { + background-image: url('../img/arrows-active.png'); +} + +/* dialog */ +.elfinder .ui-dialog input:text.ui-state-hover, +.elfinder .ui-dialog textarea.ui-state-hover { + background-image: none; + background-color: inherit; +} + +/* edit dialog */ +.elfinder-dialog-edit select.elfinder-edit-changed { + border-bottom: 2px solid #13ae10; +} + +/* tooltip */ +.ui-widget-content.elfinder-ui-tooltip { + background-color: #fff; +} + +.elfinder-ui-tooltip.ui-widget-shadow, +.elfinder .elfinder-ui-tooltip.ui-widget-shadow { + box-shadow: 2px 6px 4px -4px #cecdcd; +} diff --git a/sites/all/libraries/elfinder/elfinder.html b/sites/all/libraries/elfinder/elfinder.html new file mode 100644 index 00000000..7a6006bc --- /dev/null +++ b/sites/all/libraries/elfinder/elfinder.html @@ -0,0 +1,73 @@ + + + + + + + elFinder 2.1.x source version with PHP connector + + + + + + + + + +
+ + + diff --git a/sites/all/libraries/elfinder/elfinder.legacy.html b/sites/all/libraries/elfinder/elfinder.legacy.html new file mode 100644 index 00000000..c0be462f --- /dev/null +++ b/sites/all/libraries/elfinder/elfinder.legacy.html @@ -0,0 +1,91 @@ + + + + + + + elFinder 2.1.x source version with PHP connector + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/sites/all/libraries/elfinder/files/.gitkeep b/sites/all/libraries/elfinder/files/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sites/all/libraries/elfinder/files/.trash/.gitkeep b/sites/all/libraries/elfinder/files/.trash/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sites/all/libraries/elfinder/img/arrows-active.png b/sites/all/libraries/elfinder/img/arrows-active.png new file mode 100644 index 0000000000000000000000000000000000000000..eab3fda9f8937762d94414b07869b73b5f3205f3 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<9!2%@zcue#GQt_THjv*Ddo?d2TV>S?Ay(s@p z%yHc$ZCAYuv;7x#FJcb3%J_p{&`frYB=;7UNWV;>kV z*xV4iK*2KDL73I|)ANtl*75&evAuBFIp2Ln(*D+cIRaNKg)4zpF?hQAxvX$`pY;PA+hUywyfS6Sk!5W@=A1z~kJ z?+Nb9kh;p8ZEJFkA?h2$f-g!+4K58QH}xOC-t+oS&f@7mujd~yb6Ifj$;8|_OWp>% T$U1U^>}K$E^>bP0l+XkKr5`|3 literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/crop.gif b/sites/all/libraries/elfinder/img/crop.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc55e8c07f1b28b08fda13a08f9d5988b2094790 GIT binary patch literal 323 zcmZ?wbhEHbD=Nc01>=@u`q-Vek5?1`l!pX(J$e;sK0#eMt z#M>e$xjg%9h!6Y4$fr8kRPgigEu4|{JTCge!V_$gZ&l E07pkopa1{> literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/dialogs.png b/sites/all/libraries/elfinder/img/dialogs.png new file mode 100644 index 0000000000000000000000000000000000000000..324955361efd6c92cc17b61a37485572c10f4764 GIT binary patch literal 5818 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 Eg6RZfH2?qr literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_aceeditor.png b/sites/all/libraries/elfinder/img/edit_aceeditor.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d5ce6ce07e51b237c7f24cd0f0a9a35cc91fa7 GIT binary patch literal 514 zcmV+d0{#7oP)wf6GzR491)DubLHgE_4VQ+NC+07M|m`7%epdFZD1 zo3k5SU0pi^nd;qtqy0*@YhhI=8#cR!O><>joxkb5@FKUK=kiOKJCF5TOd|&mO>ku7 z;B+|Q^pp_o<;#~onyzEhT(E2IV8Fbl`A`a?!UCyMHjn{JZ{X!BOmA8Q5ux&+U5IJm z(Dgp}`}xg?@3dSD!w}OnEjA2GOV#oBEM0xl9ZR3P{YujM?UNBpj!Ar{6%rj4HH+Zj z;2|;XmwsxlHtdvCoAlTkc;SAA3|R9*4AYPrQ=eP;#GZR3smB(HX}?T@f`W!CA0Hop z^(9-ah;#P|#my%YcOQS;eHEHJ)+@Q0kmZETHx9D&hh*xH*)}+KFHpi7@BwO@rrDr) zTCHDv!o6&EJ177FQDB;o{vw;5v&Y}}_Vzvo)FW@eTfZ&mO3-|XdjJ3c07*qoM6N<$ Eg1pf2rT_o{ literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_ckeditor.png b/sites/all/libraries/elfinder/img/edit_ckeditor.png new file mode 100644 index 0000000000000000000000000000000000000000..be7e076c90f041da649550f67e02614ca700d2b0 GIT binary patch literal 729 zcmV;~0w(>5P)FbgbiAAY|EU^w_qmEM`)1(y zi1?C;mhMusvQRT(GziM8_J%#ciivQnzYg}-p4REdzyWj+RsDDM8=)eolOwwXy%D#@iRHVQCe>_ADGvB;qE1pvIB=x`r>#@r(oe_OtdPapB?ZBa z1B21G(~(_ROjsimGBw*|ww|zRrI+bao?IMp;+iE2QOK2_jnOt1Aow=}zzr|7O}{Fi zOw_1}viWKyM&_FAosU_~U)O#;$&KGkve(M}-~=&luTBBg{^+SfF~>Hm7FoaA!|;5I z1)s%CV%f=mXMv%`Hf!}|N&hP2s4hW&99;92uiIzBckPtxUW6@rOT}Y_M55&j+K6?C2XSPB*aQ zjh;>ciSYD5)3SPRhSWL`C5JbU)tGIj9J+ReSAU&jx77-$bGT5C?GhN_(J%-|MKP(M z&R?RuJ6hwgwaQ%o@dzhwx&mW0L;BbH(Om)?@T3#v!|5hlmvg8U#9tYdTfZ2?_ldQO zdG7V2i~;?-55aM74$#45BS}{{fBogS@#_h!aqPNMKRf!%S>d6t#+mSq_J{Eo3$sZS zs}nkSEKhLOVBK)i2Fp_j1Kt{*=Zd!n$fAT!|1M2l5Rq#O<%|SJzx*>D9OBK-h!s*} ziA4X3mb!1%>EmkMQ^4DF5FGXF_t4E(l1f3Hdj%`c2gW`E7?#2B20?%2ZrJp-00000 LNkvXXu0mjf>FQ`~ literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_ckeditor5.png b/sites/all/libraries/elfinder/img/edit_ckeditor5.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb20be2294eff8b5a91626b8f2a698d683e7c4f GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`A)YRdAr-fh53v7=x%Q7eG3FDC zsdBQBX;Kmh@0sPuF#Cqc{N5Y92bW9Emx+76nDNg&g#>9^UWGTTRxFP~{`*=i{`h`= m{gLIYvzB_SN>}UJY|K!}zr(S33-@%O`3#<}elF{r5}E+;pfLOZ literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_codemirror.png b/sites/all/libraries/elfinder/img/edit_codemirror.png new file mode 100644 index 0000000000000000000000000000000000000000..4defa576507078a0d224859740f4d285c1fb4b52 GIT binary patch literal 528 zcmV+r0`L8aP)JHD(7{9A z!H1tee`5Q#?daCI3*uGW!GK}Ue?l&ouF_6jE@Bt8<1|2uNz z2*Ppk;zdwFza?q2s~$CCErf zLYz`v{Q5wzfhSL%ATuKqoC{p0D&KJk?osKdhE7M%tbFv&DnO!&9~-n2r%jz|TSNuP zX&+{l)?;H`Ura5j0VAmpa#`yxo!f;Rh1IK8*#t_;mUNvbg*-&p9dzVHdC&x<-+Qm0 SV%D4h0000P)*%4NwwQbwBZQHgjT=N*;K~IsJU!(i>sggYScmJe9P=FFZ z03dLXfII+W86pb|@M#DHS2uz@BJqPmo)Bl5YY~v*wj<;U0ZN<=@R%`FUgiSjiJaDs z$SX-6SW^x-gdm8k)*t|umy3=rs;ZKW4OA##It}TxOQd`du+IVk3bIC(m8+I!K!l2l zV9U)aciY((i#()Pt_(l^41?8f{d)e&!y8)3Sy5M4HZoMP`KFco>`9dsHjxZJ`y%zs z3*o1q2h)>fTWz6NtT16{N(R5~8o_L?X%G!yAimH$%qJLI(b61LSF73@Syg4i&}KtfS8KJl`GU@5 zN?}NWazyxa?~nixD99M0q)-76fe?)M&Uk?}-~ t1DF*a>=|4XV0JBr<}5$=@C(d38vrcqbO9xRf_eY|002ovPDHLkV1iHyH2?qr literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_onlineconvert.png b/sites/all/libraries/elfinder/img/edit_onlineconvert.png new file mode 100644 index 0000000000000000000000000000000000000000..e90d3cf280b6be280c217624bca12d9ed022fed7 GIT binary patch literal 934 zcmV;X16lluP)Px%Nl;8wMbFXE8lgr2002(8L{Ym(6Q4yfo?Dioo=~|) ze8G1B0su(1M0&t>(9zPGqn@Cmqzx?-YPPj%-xkk#) z%pYSU5@01Enn5dXC>WtdFP>XOvPDL=LXgCcm7$(9pj#<+EP23nMz%*7p+rrvLZ79j zJ)vO+Ckh~@M@F?qd%$;2xI{{~L~FchL$pLGcq}AyD-t#i#mdJ30RT9!MM$YznWLUj zx<(m96bCpHPq;=ck~(R*Y6~X_KCeS5W+OPKLQc6wU9(#TF%BK2MM9)v7 zTOmT6I?m6~Rc=#4p*c{xMg+JNtgft0Q*TqK~xyi zW8k-m&uS>EFRW>-s*Cf~=4B9(vyI8Dt}QMotw;=ZF=1d}7nZk*&MB%a&rc3@HMRf> zu(2}Q$7Yu_C55{gaq~a~6!Ze35`x^#Enxyuin>f*b~#&ZO(#yU zfVix>K9hV@8-?mMgSI*)E0BY<@O17x&o&W#<07*qo IM6N<$f+at3`Tzg` literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_pixlreditor.png b/sites/all/libraries/elfinder/img/edit_pixlreditor.png new file mode 100644 index 0000000000000000000000000000000000000000..d2e3095634d10ddb6110748727f2b842dcd1d431 GIT binary patch literal 882 zcmV-&1C9KNP)k9x9;K>xKp9NBiN`L&D*npg#tVBH>0KyQ3_MD9>7=eIhxHEnJ zilW$~;NarXM3Gnx#kIPB@LqceeMio|;{~9F@AQ$8b@E0Jz}QJs&GOP#NJvs{ts1GH zez*%HQIb;Vj|9n51I(PTOCSiaPbU`l&4f(=TXx1mbOU`)E0NQ1eSHe0G0en zK}Oh{>ZAH#(S!kL=s$$pv?vn~7WWbD`HBJM7E${@!aN_IN zHmdR&rl>304cPEe8C`%b0E2;dd5d?W6D@*Jnbpw@&E|Zt&Tfu&K^bd+=YUAS4_0DL znJ~MV*(s|YTC?nU;33YFzM5F!SxtA3nT*2cf>U896ogm&BydyZ0#9iCem+<{907*qo IM6N<$g3kP@T>t<8 literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_pixlrexpress.png b/sites/all/libraries/elfinder/img/edit_pixlrexpress.png new file mode 100644 index 0000000000000000000000000000000000000000..2447ed8dea34ca9e928add9ebc3cb957f6e0e2be GIT binary patch literal 927 zcmV;Q17Q4#P)gcwr$(C^rXD3ZQC}JwQXB@xu ziK7#Nth>8k^bCv(U9;!XEQWf;I{#I|m$l2`*BYl4RkbbcpoE%I!g3t>{OpaSeELSR zu(Tq4Rk2(Zot7}L{p8gH3>8(B{8!0^$K1rqn&wteUs#=Z_KyXG`+Y5{-#Vb>ts8Pr zs-WF0G*vhy!=ki+*8f#?;jb?sV>Hq-xiayLrQey7os^S8#QKr=(USR zmo69$XUx&gmx5EU2u%w>a$YQ1y7ll5hI0&5fHIhyNyg6(sIP8DPkSduxpOvPpS;J& zOMg^Y2BR=L2Z=UeFxs(FVPht)K7Q=ac!ws1Lz3|9<44K8x*Em9!)O;x2o3PZ?FSFB z^VD%zUVekR>;mwiN#I?Qq0y*GNm~|PDBkBXp26`^qXn-NUnJ-3JQTNeBe_q+4TTm* zwr|7IrOV;zWQP_$A4P#l$ahSFS}w@OvrljG7=^iu87K>DYsnZBkIc3n+{muQL!lOr z9;xyCl^GHua^dfuh!FR5*eC*F?#M}n4OuvU`$ibEF-y;vE< z<4R6FjHyj;6|-*LmfQCvJXL4Mt zJpcGaq!r{5p(GDNSuV251rm}Jj+e@Jc~fT3-oQ}z-oK%l|GD(39&W3E+8I1u{an^LB{Ts5DKj=z literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/edit_tinymce.png b/sites/all/libraries/elfinder/img/edit_tinymce.png new file mode 100644 index 0000000000000000000000000000000000000000..cc654a1abdec328f70ee75821ad625561b8a14d9 GIT binary patch literal 242 zcmV-c}C$^W-!{vQth|L*+%*T?_A+%NbxB^RhA(9^{+gyVX$1B08y;S&Ksz@V{! zg{dn*Fj2tSL#L-v@QgrcYI;jog?N)BlTK8xK-=VM{uzpk4h1l#`OMPLSi_Ul;L9SZ itHB}E$i %y9JqS5NSVJvuI*+@}zUH#@ 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 literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/icons-big.png b/sites/all/libraries/elfinder/img/icons-big.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d1a16da115d9d6fed7aca2a014cce10430f620 GIT binary patch literal 5920 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 HY>EE^gVo2U literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/icons-big.svg b/sites/all/libraries/elfinder/img/icons-big.svg new file mode 100644 index 00000000..fb4449eb --- /dev/null +++ b/sites/all/libraries/elfinder/img/icons-big.svg @@ -0,0 +1,292 @@ + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sites/all/libraries/elfinder/img/icons-small.png b/sites/all/libraries/elfinder/img/icons-small.png new file mode 100644 index 0000000000000000000000000000000000000000..fb59c2ad1d5353882ff8b622e62a28a321b396b6 GIT binary patch literal 3325 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 P00000NkvXXu0mjf_O?05 literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/progress.gif b/sites/all/libraries/elfinder/img/progress.gif new file mode 100644 index 0000000000000000000000000000000000000000..385fc57def5b6a39d225bb009c38539bc53c7b3b GIT binary patch literal 667 zcmZ?wbhEHb6lUOH_$tg$aOx|oMxw>EXH0S-!E3(zt$CnO@|-vDka)&D^Qq5``(9`@ zy+}X&&A9iS{mf^kQ(hSNymOiNLn7mzWWs9wj$5s#-xX|l&S5=`+hb+tfwy^we;9PW zjbHjGeed_Q)lZ@}{;-?=E$ir)q+M^)4!zf`yi;)Mhe_Xyrp2cvv(ELeKPQuSp?u2z z+Ot1|Vo&I`z5f6IKLd$C@jthpYe=xOV}PrXo&hr>P`lz!7FGrZVFn$LQ6O(JutguZ zoTaM5=f84EkY<62tRG`z=&C5jh7-;Q?%Hvwu8|1f;*{%Rmy%74xIfpW$}wI-s)avs z|MlB1g*e!R*c95@+XR}~n%MhvHMAybO_|g;ot=3WGvl0jb7wDfgxV*MWFKolf?AkZ z`n+Z8>l~tOoOJB{vTw7@QP~u9Uze?MQ=mkzw7dJ}7$Xyb=0wA_dP*!zVXIv$_Qx?V zF;p`@F^QXPaauB;@D7`Od^~L5Y7)*rzwZpSLn0vr>o=P?*f;NfmyYv2{&ZEY9e7UJmb6B6PU eW}iHjT|!)9#;loB80RklTDxfJk|m6e4Aua&E#G+n literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/quicklook-bg.png b/sites/all/libraries/elfinder/img/quicklook-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..3566b9eda751c6286a8ad862ea80721d6fab1311 GIT binary patch literal 71 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$60wmSb-sJ%)K2I0NkcwN$2^P%lDh7;Fmcnl< Td{}P+Wf(kN{an^LB{Ts5z+Vp_ literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/quicklook-icons.png b/sites/all/libraries/elfinder/img/quicklook-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..cc66cb984e3fc8a330557f98799994dd6e5619e9 GIT binary patch literal 1604 zcmV-K2D|x*P)f-k#e+LS46t=F%qsiCK9Dn4X^Q$WcYj~Ju_6+1mi2P)RNlnzuZai%En z@x&s_ezOpHHn>cbuu3h;m>d5u2cwLMmIlWdY7xTNdDf ztz`lFj>gAyjLeu-*VJ-PSJxAL1Jl0jw8inBiJy1T`gqGo#&f%(Vkl?qSQY5YJ8MPg zDRC}zS<_dYQ27KQ>IM2<;yNulivcTEXa>( z;7G|DpV(P)4=!0(a*@th5i^BOZJ^Hp1orB53=8ifTZ2A-A-f9YM>#j~@k7+QGN4mY616532AouaxaS7Qh9K@a2Uao> zCjd?)z=;GnF%Q^k0szPX0CNu1kz?RBzEV9q*J@W$KzSzBTF`-<1DSIm-%bty0sw$u zK>UtCVA2o-1e|ZR3gXBJ=g%I#jscH6i9G{+ZIZY|j(3{(hv3$(J-|wE25|tdZQHgP zHw|kysuk6iqDoP1+qMzaw)uG8z5Vs=bh0&K_4{r$8UJTF_wSAK>C9l3=)KLHlxa=> z--M@~TIS0AxoRQHn{R48ThgXC{XdD$XxjQ)o!KpEe;0btH(v3wN1bbHE1A9aEqMQG zn9fX7>zOR&(&#Nh3&5yP9cBp&GzR}*eY%KxX~%mCm4S|y(u9^#r7pPHK9(_Uc=8w4 zSMs=@Ff?wcXQ(t#sSI_EgAbi+Rnw*6KQsy7#XwJ2rBE2e?8l_gQ^mZ(vbE7hG_pOP zD-5+V`i_CJQBdfcOj-*+INlO9+?j!hekfo|acw<_t`~Xf5-d7^139x%wkNiKT z9ia8V89~1VgFuB7YCbokGzgS9&P+919sediMBlIxh>xJ|P=Qn8=vE@6fl3>%G<^Tu6J7*Fd zgqF%6y%5FA1qpMAN9;u^=z^W5`Q=1)d1&m*!bx_H&my}wDB*s?@q<(_d;I%=NtHrh zsm!uDHZs3scyR+d0dzk+=wPG{FNQtzO{9C35t=04g9Za_J$*&0D6Ah%@~LGtA7acP z)^Jk7*q29%!-S49xt_ONO`a}U%OG~8K!f`a(jU{g30-BBeAZ^B(TRjxEu0qAyV2Ig zD2>u*GZ$2LHf>YNrgaag`AuuNG$SsROl*H6@Yei470HMhWc9QhF6vE9cj_JLUM@PhGo2ot|FE)t;bAX zCc)4}mJ`-fytyi^?7;wYQdg91DC(=ic8Gh=`Bpcr>7VfqxAQF9M6!(Ti8|M(e@O%&hTHTCKM0000>xG=8<0#rS+W&KNqM?BhEy;nFOWGi+xY$eGc%2Q g6TWmzT*AS?P?8q*(lOS%0H}(=)78&qol`;+04F3DRR910 literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/spinner-mini.gif b/sites/all/libraries/elfinder/img/spinner-mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..ea4f8f18b8fb4c121db1aa61118b18f6153c051c GIT binary patch literal 1434 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/tui-icon-b.svg b/sites/all/libraries/elfinder/img/tui-icon-b.svg new file mode 100644 index 00000000..c1ea6256 --- /dev/null +++ b/sites/all/libraries/elfinder/img/tui-icon-b.svg @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/tui-icon-c.svg b/sites/all/libraries/elfinder/img/tui-icon-c.svg new file mode 100644 index 00000000..8074cf08 --- /dev/null +++ b/sites/all/libraries/elfinder/img/tui-icon-c.svg @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/tui-icon-d.svg b/sites/all/libraries/elfinder/img/tui-icon-d.svg new file mode 100644 index 00000000..52e6ffa3 --- /dev/null +++ b/sites/all/libraries/elfinder/img/tui-icon-d.svg @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/ui-icons_ffffff_256x240.png b/sites/all/libraries/elfinder/img/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1f17344d8ebe677bf7eb62091dd350980712f2 GIT binary patch literal 3759 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 V8Q+(E(fj`_U~OS%USaAU|3CBLjWYlM literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/volume_icon_box.png b/sites/all/libraries/elfinder/img/volume_icon_box.png new file mode 100644 index 0000000000000000000000000000000000000000..52eaec2b36dfd9f2134615d5a055a13370605b35 GIT binary patch literal 621 zcmV-z0+RiSP)u+qP}nw()G+ zwr$(S+BFG3dMNE2f+=!hO?lT=?ma zf%|@9(KQP?B{WLp%*z194Wc%(2+Y9TOJ?Y`;~VOm&74#8@zHnvm00000NkvXX Hu0mjfkToRP literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/volume_icon_box.svg b/sites/all/libraries/elfinder/img/volume_icon_box.svg new file mode 100644 index 00000000..721787ef --- /dev/null +++ b/sites/all/libraries/elfinder/img/volume_icon_box.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_dropbox.png b/sites/all/libraries/elfinder/img/volume_icon_dropbox.png new file mode 100644 index 0000000000000000000000000000000000000000..db19ef1f28ecc722b015dd5b1130dbd32eb97892 GIT binary patch literal 413 zcmV;O0b>4%P)Nn)gzX#`rnOgDq z!BW5ESy)~w&3`#x=eR=C@AJJOrv5=NP|y!aRB1FHUM6xbpR%RDQ!^OqU-&`sz`4<{ ziP>8GiI6Bhxy`gp^Xt@WJUBhv-{|*Y(bNHFu^qWf&kzKso{v~z)6yxc00000NkvXX Hu0mjfp6 \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_ftp.png b/sites/all/libraries/elfinder/img/volume_icon_ftp.png new file mode 100644 index 0000000000000000000000000000000000000000..e0bf12961a58523cbf6e50b36ad916f34880f8a2 GIT binary patch literal 371 zcmV-(0gV2MP) z)6QA8Q(3CjYTaPrHRql38FuE_-II#yf&u%flMeeMW$(OgsjWBlBKJLu()XI$g>#s} zGkk(2mz$R9T_wafGWvoA+`r*HrO literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/volume_icon_ftp.svg b/sites/all/libraries/elfinder/img/volume_icon_ftp.svg new file mode 100644 index 00000000..eec35692 --- /dev/null +++ b/sites/all/libraries/elfinder/img/volume_icon_ftp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_googledrive.png b/sites/all/libraries/elfinder/img/volume_icon_googledrive.png new file mode 100644 index 0000000000000000000000000000000000000000..92c5f1f1828da70e1363e757549ce1cdfdedb4eb GIT binary patch literal 663 zcmV;I0%-k-P)7as0RcWXyI*>A7E8IAuPQ6@)V+QueF z5)M_no^ZJO^~9sKt|uL|J6p<8Q~MUo_g8_hRjGMetAKF~cE$w7 ziFiMG5~;qRO<+W?eDnS&2n?v*NClm?N=dj9XrB>NAEmMoDk`LgClW%z?>B8X&MDjI zCxI%O#h9x37AY--3#61#j=`-rcID$&krm7UGrIs_h*q^TE^1gMz4<0^dR87Jq$uV+ z{ETn~>UGSv^HU})x;({NdQH}Xh(JtWrebr4^G2!(PvlZSN8mPM;JrDhOw8X^W+f?xq1O8vl`4W3q^RHcu6 z2=JTJsZOWO8UMf$3AxEeAvgk~DOKB6S*L4$7IThM`anX!0ssk4d$Vco6nS%>50uOZ z;|qWR%(%e_M=e6(2tuIq)-2E(5ZS;$@O5!c{i>pLQf7j70#Hi9 zgBh^Ih`QJ)!CHI%*`7XqBmlC9?+&&^OkvF_AJi7YpB^L(h~Xl@F7yq+`(kfw8VrCG zKIf4rnx#@WCz!R}2@>)mi-TmugZ*0VW$w#x<8%kW6WA*?5002ovPDHLkV1gU0C3^q> literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/volume_icon_googledrive.svg b/sites/all/libraries/elfinder/img/volume_icon_googledrive.svg new file mode 100644 index 00000000..0f32b8b3 --- /dev/null +++ b/sites/all/libraries/elfinder/img/volume_icon_googledrive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_local.png b/sites/all/libraries/elfinder/img/volume_icon_local.png new file mode 100644 index 0000000000000000000000000000000000000000..b77d9a745faae51d2c58f70d395375a762427856 GIT binary patch literal 357 zcmV-r0h<1aP)`H{R!*l= zPd=Y7usgL{ts8irXK=)EFW~`8Jf&DH1;>K~zCa)lr8kDt>50NsP9_syEEdBHVT9L! zvp!!q3RgWIkKN&LIOTG=$Y!$=d&m4YcXogT;eH3oXM31Vg%n&Q(6gY6i*pDNAHb}l z_%Z=dvk}|`7YS5@!GMmBPw4RQ0PQ`1>XJl|Aw9q~u4!p~h2W}ty`E-cW8=D9F2~E| z(yKZctWD_Pa_1T@na$=oyWL)W4{*_+juCtpaDO~xkXHoEM=Z@~00000NkvXXu0mjf DOe2<| literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/volume_icon_local.svg b/sites/all/libraries/elfinder/img/volume_icon_local.svg new file mode 100644 index 00000000..97d81fbf --- /dev/null +++ b/sites/all/libraries/elfinder/img/volume_icon_local.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_network.png b/sites/all/libraries/elfinder/img/volume_icon_network.png new file mode 100644 index 0000000000000000000000000000000000000000..caf1f60b2fdc1cbadd36fd2aa67d387abaa38121 GIT binary patch literal 872 zcmV-u1DE`XP)Ky(=kkEOvQ~YYB5Gw zMlYO2qVzCxVMBIMzAs-s zC#95fc6L_w_1%->;~!-(7?KYjJT^N!&%Dm;Vdtl8Pn_`IX**hT~=eBHVs)>DkudAp*Yyu<|!+! zItBo&ywrW^P}`9TLKe0WB86BiiFkYt0HA4EU`zpH3JCfAa7=~D)Di$-#qN^Ybn}8h z!s~TI2*5OxP!tM9SrE`a7!J0!?UhoTq?Awx=X~*ka}Hg%LD#b(gaD-kloBWk1t1o= zvT~2zQ&G`Q!;$c_si{dM5(${52~D$MaxwzLm<8toz{1=kBQM}`t%PM+uq+GlcpQu} zhcftVD6r05w8QCi<~tlt5)Ko=Zeeyk;V zc=O8l>!(|z|6@qz!L3_;FMYncTEb0~lRE?;n2?90WZ4)RdOmjI#PRBX3Vc2vvnw29c1i4lntOkH{Z#TYAF(zhaW?mVFaaL8; \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_onedrive.png b/sites/all/libraries/elfinder/img/volume_icon_onedrive.png new file mode 100644 index 0000000000000000000000000000000000000000..18b97cad66576a552aecebcaa6101e4234f75e25 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Ln>}vy(lem*g&M=;R_wT z?%=tH7F!)%=~wz)c==gXzrt0)G4KBE&A-2P?e{tQ@5|5BAAea?oN-~%Eo(~$wnLX% zxHwtEPqZ*uZ+Bo1G|IB5*t%l=?OKbUJso_KjB;hK7Ph&s6I7gKmD)1bs;Z5Bg?_dj zcgLd%3eqYT&Os&2Dea5??>^x4ZN{&OWyhIr%GkgAZSd*2-+s3;pz|0!UHx3vIVCg! E0LM8~P5=M^ literal 0 HcmV?d00001 diff --git a/sites/all/libraries/elfinder/img/volume_icon_onedrive.svg b/sites/all/libraries/elfinder/img/volume_icon_onedrive.svg new file mode 100644 index 00000000..4a69e474 --- /dev/null +++ b/sites/all/libraries/elfinder/img/volume_icon_onedrive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_sql.png b/sites/all/libraries/elfinder/img/volume_icon_sql.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac2e537094e4ae46eaddc82b07bc7aa05971581 GIT binary patch literal 572 zcmV-C0>k}@P)feEC_g~o!0O_~v=Y{7)+|f5!CmbV5Tz zdHC`Z2QEJ1)U`)kfAE9{uix \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_trash.png b/sites/all/libraries/elfinder/img/volume_icon_trash.png new file mode 100644 index 0000000000000000000000000000000000000000..551be4269afd1b25e85f6f5dd3ad82f8616bad6d GIT binary patch literal 706 zcmV;z0zLhSP)3{3!O<0dJGE^^bx=lCRGU$4TZkH=wh+~}jbmfYev3-?NtW||&yXQwi+v8( z4nJ_;rJ0HGoyW)4Y-v00(y~%%8zFeq?GN6I!tm$bVE9S5*MIxrM;|YL`s#}jh(vJu z#aF5Aw%Gi*^%mz&A;Eg3LP0e?R{Hsw(t1q*I)0y;ezu# z0b+7&Y^%lD=}Xs}pI=)l=7A_eDVKv4TJZb`oO4K}7}K-@z_#){|LShP|1p4f1Q6$= zl3|zy*L9(!fTU||d>mmI!u32jjtkRv;L~MV7W%z@G4TCmAQAzEzWTLVdvC?^(q8K= z%%fPyL(>?A9avP<>krUubx^4{&}?^LSk^m2sn7lpTz1Z>jmvMn=kaQzy;t1p^!ONZ z`5Z>NK?PkZY@*g|p*Pf_ltKtRe#u!UH&a2z^wgw1J~08^G~)o;-984oiS|Ip(Do3D zJRp6HPfoyhX;>K=G8khBsCV1-;uVK(xya@6;8FpML(nsdkX#hSzXUOwrXi;kJl}`o zxyfh@(?SsV2!jAZaIm!c--3wLoCNutf|4?MN-60QR4AZv4$cLb#wfdv5#(v{q!1)X zpYbKAkmTzg0g;3XBv4ACK!Ws4NC \ No newline at end of file diff --git a/sites/all/libraries/elfinder/img/volume_icon_zip.png b/sites/all/libraries/elfinder/img/volume_icon_zip.png new file mode 100644 index 0000000000000000000000000000000000000000..39604ea6b5fa760fe0be960077107f4431e76577 GIT binary patch literal 475 zcmV<10VMv3P)cXxNYySw@1o%Y|D{OP3f*N^_}r|{H^?$C$(=b`V@Bzv}82|tP7<5ujQvigHVUwJOfxn8E z5}*ots4TRc7G{bwQKP{;(f|MewMj%lR2UfrfU!=6FcgNr^S4m!4Un4{7dIE*|8X3g z+}s4=rUiO#3_^s|*8-du5#r~L@3TSvx)4;ab${P#tzJRUd22YWHSZuoSUN7JgC#%& z+6jLY5FjYcEKitOS0IAkHvYGp*s@-K1IVsZUcKJ=_-=xJmQGKavs;hgSk00ZTf-U; zBA}ktC(1(&1j)=MTg)&^2!f==@6w \ No newline at end of file diff --git a/sites/all/libraries/elfinder/js/elfinder.full.js b/sites/all/libraries/elfinder/js/elfinder.full.js new file mode 100644 index 00000000..692783c0 --- /dev/null +++ b/sites/all/libraries/elfinder/js/elfinder.full.js @@ -0,0 +1,34270 @@ +/*! + * elFinder - file manager for web + * Version 2.1.43 (2018-11-24) + * http://elfinder.org + * + * Copyright 2009-2018, Studio 42 + * Licensed under a 3-clauses BSD license + */ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery','jquery-ui'], factory); + } else if (typeof exports !== 'undefined') { + // CommonJS + var $, ui; + try { + $ = require('jquery'); + ui = require('jquery-ui'); + } catch (e) {} + module.exports = factory($, ui); + } else { + // Browser globals (Note: root is window) + factory(root.jQuery, root.jQuery.ui, true); + } +}(this, function($, _ui, toGlobal) { +toGlobal = toGlobal || false; + + +/* + * File: /js/elFinder.js + */ + +/** + * @class elFinder - file manager for web + * + * @author Dmitry (dio) Levashov + **/ +var elFinder = function(elm, opts, bootCallback) { + //this.time('load'); + var self = this, + + /** + * Objects array of jQuery.Deferred that calls before elFinder boot up + * + * @type Array + */ + dfrdsBeforeBootup = [], + + /** + * Plugin name to check for conflicts with bootstrap etc + * + * @type Array + **/ + conflictChecks = ['button', 'tooltip'], + + /** + * Node on which elfinder creating + * + * @type jQuery + **/ + node = $(elm), + + /** + * Object of events originally registered in this node + * + * @type Object + */ + prevEvents = $.extend(true, {}, $._data(node.get(0), 'events')), + + /** + * Store node contents. + * + * @see this.destroy + * @type jQuery + **/ + prevContent = $('
').append(node.contents()).attr('class', node.attr('class') || '').attr('style', node.attr('style') || ''), + + /** + * Instance ID. Required to get/set cookie + * + * @type String + **/ + id = node.attr('id') || '', + + /** + * Events namespace + * + * @type String + **/ + namespace = 'elfinder-' + (id ? id : Math.random().toString().substr(2, 7)), + + /** + * Mousedown event + * + * @type String + **/ + mousedown = 'mousedown.'+namespace, + + /** + * Keydown event + * + * @type String + **/ + keydown = 'keydown.'+namespace, + + /** + * Keypress event + * + * @type String + **/ + keypress = 'keypress.'+namespace, + + /** + * Keypup event + * + * @type String + **/ + keyup = 'keyup.'+namespace, + + /** + * Is shortcuts/commands enabled + * + * @type Boolean + **/ + enabled = false, + + /** + * Store enabled value before ajax request + * + * @type Boolean + **/ + prevEnabled = false, + + /** + * List of build-in events which mapped into methods with same names + * + * @type Array + **/ + events = ['enable', 'disable', 'load', 'open', 'reload', 'select', 'add', 'remove', 'change', 'dblclick', 'getfile', 'lockfiles', 'unlockfiles', 'selectfiles', 'unselectfiles', 'dragstart', 'dragstop', 'search', 'searchend', 'viewchange'], + + /** + * Rules to validate data from backend + * + * @type Object + **/ + rules = {}, + + /** + * Current working directory hash + * + * @type String + **/ + cwd = '', + + /** + * Current working directory options default + * + * @type Object + **/ + cwdOptionsDefault = { + path : '', + url : '', + tmbUrl : '', + disabled : [], + separator : '/', + archives : [], + extract : [], + copyOverwrite : true, + uploadOverwrite : true, + uploadMaxSize : 0, + jpgQuality : 100, + tmbCrop : false, + tmb : false // old API + }, + + /** + * Current working directory options + * + * @type Object + **/ + cwdOptions = {}, + + /** + * Files/dirs cache + * + * @type Object + **/ + files = {}, + + /** + * Hidden Files/dirs cache + * + * @type Object + **/ + hiddenFiles = {}, + + /** + * Files/dirs hash cache of each dirs + * + * @type Object + **/ + ownFiles = {}, + + /** + * Selected files hashes + * + * @type Array + **/ + selected = [], + + /** + * Events listeners + * + * @type Object + **/ + listeners = {}, + + /** + * Shortcuts + * + * @type Object + **/ + shortcuts = {}, + + /** + * Buffer for copied files + * + * @type Array + **/ + clipboard = [], + + /** + * Copied/cuted files hashes + * Prevent from remove its from cache. + * Required for dispaly correct files names in error messages + * + * @type Object + **/ + remember = {}, + + /** + * Queue for 'open' requests + * + * @type Array + **/ + queue = [], + + /** + * Queue for only cwd requests e.g. `tmb` + * + * @type Array + **/ + cwdQueue = [], + + /** + * Commands prototype + * + * @type Object + **/ + base = new self.command(self), + + /** + * elFinder node width + * + * @type String + * @default "auto" + **/ + width = 'auto', + + /** + * elFinder node height + * Number: pixcel or String: Number + "%" + * + * @type Number | String + * @default 400 + **/ + height = 400, + + /** + * Base node object or selector + * Element which is the reference of the height percentage + * + * @type Object|String + * @default null | $(window) (if height is percentage) + **/ + heightBase = null, + + /** + * MIME type list(Associative array) handled as a text file + * + * @type Object|null + */ + textMimes = null, + + /** + * elfinder path for sound played on remove + * @type String + * @default ./sounds/ + **/ + soundPath = 'sounds/', + + /** + * JSON.stringify of previous fm.sorters + * @type String + */ + prevSorterStr = '', + + /** + * Map table of file extention to MIME-Type + * @type Object + */ + extToMimeTable, + + beeper = $(document.createElement('audio')).hide().appendTo('body')[0], + + syncInterval, + autoSyncStop = 0, + + uiCmdMapPrev = '', + + gcJobRes = null, + + open = function(data) { + // NOTES: Do not touch data object + + var volumeid, contextmenu, emptyDirs = {}, stayDirs = {}, + rmClass, hashes, calc, gc, collapsed, prevcwd, sorterStr; + + if (self.api >= 2.1) { + // support volume driver option `uiCmdMap` + self.commandMap = (data.options.uiCmdMap && Object.keys(data.options.uiCmdMap).length)? data.options.uiCmdMap : {}; + if (uiCmdMapPrev !== JSON.stringify(self.commandMap)) { + uiCmdMapPrev = JSON.stringify(self.commandMap); + } + } else { + self.options.sync = 0; + } + + if (data.init) { + // init - reset cache + files = {}; + ownFiles = {}; + } else { + // remove only files from prev cwd + // and collapsed directory (included 100+ directories) to empty for perfomance tune in DnD + prevcwd = cwd; + rmClass = 'elfinder-subtree-loaded ' + self.res('class', 'navexpand'); + collapsed = self.res('class', 'navcollapse'); + hashes = Object.keys(files); + calc = function(i) { + if (!files[i]) { + return true; + } + + var isDir = (files[i].mime === 'directory'), + phash = files[i].phash, + pnav; + + if ( + (!isDir + || emptyDirs[phash] + || (!stayDirs[phash] + && $('#'+self.navHash2Id(files[i].hash)).is(':hidden') + && $('#'+self.navHash2Id(phash)).next('.elfinder-navbar-subtree').children().length > 100 + ) + ) + && (isDir || phash !== cwd) + && ! remember[i] + ) { + if (isDir && !emptyDirs[phash]) { + emptyDirs[phash] = true; + $('#'+self.navHash2Id(phash)) + .removeClass(rmClass) + .next('.elfinder-navbar-subtree').empty(); + } + deleteCache(files[i]); + } else if (isDir) { + stayDirs[phash] = true; + } + }; + gc = function() { + if (hashes.length) { + gcJobRes && gcJobRes._abort(); + gcJobRes = self.asyncJob(calc, hashes, { + interval : 20, + numPerOnce : 100 + }).done(function() { + var hd = self.storage('hide') || {items: {}}; + if (Object.keys(hiddenFiles).length) { + $.each(hiddenFiles, function(h) { + if (!hd.items[h]) { + delete hiddenFiles[h]; + } + }); + } + }); + } + }; + + self.trigger('filesgc').one('filesgc', function() { + hashes = []; + }); + + self.one('opendone', function() { + if (prevcwd !== cwd) { + if (! node.data('lazycnt')) { + gc(); + } else { + self.one('lazydone', gc); + } + } + }); + } + + self.sorters = {}; + cwd = data.cwd.hash; + cache(data.files); + if (!files[cwd]) { + cache([data.cwd]); + } + + // trigger event 'sorterupdate' + sorterStr = JSON.stringify(self.sorters); + if (prevSorterStr !== sorterStr) { + self.trigger('sorterupdate'); + prevSorterStr = sorterStr; + } + + self.lastDir(cwd); + + self.autoSync(); + }, + + /** + * Store info about files/dirs in "files" object. + * + * @param Array files + * @param String data type + * @return void + **/ + cache = function(data, type) { + var defsorter = { name: true, perm: true, date: true, size: true, kind: true }, + sorterChk = !self.sorters._checked, + l = data.length, + setSorter = function(file) { + var f = file || {}, + sorters = []; + $.each(self.sortRules, function(key) { + if (defsorter[key] || typeof f[key] !== 'undefined' || (key === 'mode' && typeof f.perm !== 'undefined')) { + sorters.push(key); + } + }); + self.sorters = self.arrayFlip(sorters, true); + self.sorters._checked = true; + }, + keeps = ['sizeInfo'], + changedParents = {}, + hideData = self.storage('hide') || {}, + hides = hideData.items || {}, + f, i, keepProp, parents, hidden; + + for (i = 0; i < l; i++) { + f = Object.assign({}, data[i]); + hidden = (!hideData.show && hides[f.hash])? true : false; + if (f.name && f.hash && f.mime) { + if (!hidden) { + if (sorterChk && f.phash === cwd) { + setSorter(f); + sorterChk = false; + } + + if (f.phash && (type === 'add' || type === 'change')) { + if (parents = self.parents(f.phash)) { + $.each(parents, function() { + changedParents[this] = true; + }); + } + } + } + + if (files[f.hash]) { + $.each(keeps, function() { + if(files[f.hash][this] && ! f[this]) { + f[this] = files[f.hash][this]; + } + }); + if (f.sizeInfo && !f.size) { + f.size = f.sizeInfo.size; + } + deleteCache(files[f.hash], true); + } + if (hides[f.hash]) { + hiddenFiles[f.hash] = f; + } + if (hidden) { + l--; + data.splice(i--, 1); + } else { + files[f.hash] = f; + if (f.mime === 'directory' && !ownFiles[f.hash]) { + ownFiles[f.hash] = {}; + } + if (f.phash) { + if (!ownFiles[f.phash]) { + ownFiles[f.phash] = {}; + } + ownFiles[f.phash][f.hash] = true; + } + } + } + } + // delete sizeInfo cache + $.each(Object.keys(changedParents), function() { + var target = files[this]; + if (target && target.sizeInfo) { + delete target.sizeInfo; + } + }); + + // for empty folder + sorterChk && setSorter(); + }, + + /** + * Delete file object from files caches + * + * @param Array removed hashes + * @return void + */ + remove = function(removed) { + var l = removed.length, + roots = {}, + rm = function(hash) { + var file = files[hash], i; + if (file) { + if (file.mime === 'directory') { + if (roots[hash]) { + delete self.roots[roots[hash]]; + } + // restore stats of deleted root parent directory + $.each(self.leafRoots, function(phash, roots) { + var idx, pdir; + if ((idx = $.inArray(hash, roots))!== -1) { + if (roots.length === 1) { + if ((pdir = Object.assign({}, files[phash])) && pdir._realStats) { + $.each(pdir._realStats, function(k, v) { + pdir[k] = v; + }); + remove(files[phash]._realStats); + self.change({ changed: [pdir] }); + } + delete self.leafRoots[phash]; + } else { + self.leafRoots[phash].splice(idx, 1); + } + } + }); + if (self.searchStatus.state < 2) { + $.each(files, function(h, f) { + f.phash == hash && rm(h); + }); + } + } + if (file.phash) { + if (parents = self.parents(file.phash)) { + $.each(parents, function() { + changedParents[this] = true; + }); + } + } + deleteCache(files[hash]); + } + }, + changedParents = {}, + parents; + + $.each(self.roots, function(k, v) { + roots[v] = k; + }); + while (l--) { + rm(removed[l]); + } + // delete sizeInfo cache + $.each(Object.keys(changedParents), function() { + var target = files[this]; + if (target && target.sizeInfo) { + delete target.sizeInfo; + } + }); + }, + + /** + * Update file object in files caches + * + * @param Array changed file objects + * @return void + */ + change = function(changed) { + $.each(changed, function(i, file) { + var hash = file.hash; + if (files[hash]) { + $.each(Object.keys(files[hash]), function(i, v){ + if (typeof file[v] === 'undefined') { + delete files[hash][v]; + } + }); + } + files[hash] = files[hash] ? Object.assign(files[hash], file) : file; + }); + }, + + /** + * Delete cache data of files, ownFiles and self.optionsByHashes + * + * @param Object file + * @param Boolean update + * @return void + */ + deleteCache = function(file, update) { + var hash = file.hash, + phash = file.phash; + + if (phash && ownFiles[phash]) { + delete ownFiles[phash][hash]; + } + if (!update) { + ownFiles[hash] && delete ownFiles[hash]; + self.optionsByHashes[hash] && delete self.optionsByHashes[hash]; + } + delete files[hash]; + }, + + /** + * Maximum number of concurrent connections on request + * + * @type Number + */ + requestMaxConn, + + /** + * Current number of connections + * + * @type Number + */ + requestCnt = 0, + + /** + * Queue waiting for connection + * + * @type Array + */ + requestQueue = [], + + /** + * Flag to cancel the `open` command waiting for connection + * + * @type Boolean + */ + requestQueueSkipOpen = false, + + /** + * Exec shortcut + * + * @param jQuery.Event keydown/keypress event + * @return void + */ + execShortcut = function(e) { + var code = e.keyCode, + ctrlKey = !!(e.ctrlKey || e.metaKey), + isMousedown = e.type === 'mousedown', + ddm; + + !isMousedown && (self.keyState.keyCode = code); + self.keyState.ctrlKey = ctrlKey; + self.keyState.shiftKey = e.shiftKey; + self.keyState.metaKey = e.metaKey; + self.keyState.altKey = e.altKey; + if (isMousedown) { + return; + } else if (e.type === 'keyup') { + self.keyState.keyCode = null; + return; + } + + if (enabled) { + + $.each(shortcuts, function(i, shortcut) { + if (shortcut.type == e.type + && shortcut.keyCode == code + && shortcut.shiftKey == e.shiftKey + && shortcut.ctrlKey == ctrlKey + && shortcut.altKey == e.altKey) { + e.preventDefault(); + e.stopPropagation(); + shortcut.callback(e, self); + self.debug('shortcut-exec', i+' : '+shortcut.description); + } + }); + + // prevent tab out of elfinder + if (code == $.ui.keyCode.TAB && !$(e.target).is(':input')) { + e.preventDefault(); + } + + // cancel any actions by [Esc] key + if (e.type === 'keydown' && code == $.ui.keyCode.ESCAPE) { + // copy or cut + if (! node.find('.ui-widget:visible').length) { + self.clipboard().length && self.clipboard([]); + } + // dragging + if ($.ui.ddmanager) { + ddm = $.ui.ddmanager.current; + ddm && ddm.helper && ddm.cancel(); + } + // button menus + self.toHide(node.find('.ui-widget.elfinder-button-menu.elfinder-frontmost:visible')); + // trigger keydownEsc + self.trigger('keydownEsc', e); + } + + } + }, + date = new Date(), + utc, + i18n, + inFrame = (window.parent !== window), + parentIframe = (function() { + var pifm, ifms; + if (inFrame) { + try { + ifms = $('iframe', window.parent.document); + if (ifms.length) { + $.each(ifms, function(i, ifm) { + if (ifm.contentWindow === window) { + pifm = $(ifm); + return false; + } + }); + } + } catch(e) {} + } + return pifm; + })(), + /** + * elFinder boot up function + * + * @type Function + */ + bootUp, + /** + * Original function of XMLHttpRequest.prototype.send + * + * @type Function + */ + savedXhrSend; + + // opts must be an object + if (!opts) { + opts = {}; + } + + // set UA.Angle, UA.Rotated for mobile devices + if (self.UA.Mobile) { + $(window).on('orientationchange.'+namespace, function() { + var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; + if (a === -90) { + a = 270; + } + self.UA.Angle = a; + self.UA.Rotated = a % 180 === 0? false : true; + }).trigger('orientationchange.'+namespace); + } + + // check opt.bootCallback + if (opts.bootCallback && typeof opts.bootCallback === 'function') { + (function() { + var func = bootCallback, + opFunc = opts.bootCallback; + bootCallback = function(fm, extraObj) { + func && typeof func === 'function' && func.call(this, fm, extraObj); + opFunc.call(this, fm, extraObj); + }; + })(); + } + delete opts.bootCallback; + + /** + * Protocol version + * + * @type String + **/ + this.api = null; + + /** + * elFinder use new api + * + * @type Boolean + **/ + this.newAPI = false; + + /** + * elFinder use old api + * + * @type Boolean + **/ + this.oldAPI = false; + + /** + * Net drivers names + * + * @type Array + **/ + this.netDrivers = []; + + /** + * Base URL of elfFinder library starting from Manager HTML + * + * @type String + */ + this.baseUrl = ''; + + /** + * Base URL of i18n js files + * baseUrl + "js/i18n/" when empty value + * + * @type String + */ + this.i18nBaseUrl = ''; + + /** + * Is elFinder CSS loaded + * + * @type Boolean + */ + this.cssloaded = false; + + /** + * Current theme object + * + * @type Object|Null + */ + this.theme = null; + + this.mimesCanMakeEmpty = {}; + + /** + * Callback function at boot up that option specified at elFinder starting + * + * @type Function + */ + this.bootCallback; + + /** + * ID. Required to create unique cookie name + * + * @type String + **/ + this.id = id; + + /** + * Method to store/fetch data + * + * @type Function + **/ + this.storage = (function() { + try { + if ('localStorage' in window && window['localStorage'] !== null) { + if (self.UA.Safari) { + // check for Mac/iOS safari private browsing mode + window.localStorage.setItem('elfstoragecheck', 1); + window.localStorage.removeItem('elfstoragecheck'); + } + return self.localStorage; + } else { + return self.cookie; + } + } catch (e) { + return self.cookie; + } + })(); + + /** + * Configuration options + * + * @type Object + **/ + //this.options = $.extend(true, {}, this._options, opts); + this.options = Object.assign({}, this._options); + + // for old type configuration + if (opts.uiOptions) { + if (opts.uiOptions.toolbar && Array.isArray(opts.uiOptions.toolbar)) { + if ($.isPlainObject(opts.uiOptions.toolbar[opts.uiOptions.toolbar.length - 1])) { + self.options.uiOptions.toolbarExtra = Object.assign(self.options.uiOptions.toolbarExtra || {}, opts.uiOptions.toolbar.pop()); + } + } + } + + // Overwrite if opts value is an array + (function() { + var arrOv = function(obj, base) { + if ($.isPlainObject(obj)) { + $.each(obj, function(k, v) { + if ($.isPlainObject(v)) { + if (!base[k]) { + base[k] = {}; + } + arrOv(v, base[k]); + } else { + base[k] = v; + } + }); + } + }; + arrOv(opts, self.options); + })(); + + // join toolbarExtra to toolbar + this.options.uiOptions.toolbar.push(this.options.uiOptions.toolbarExtra); + delete this.options.uiOptions.toolbarExtra; + + // set fm.baseUrl + this.baseUrl = (function() { + var myTag, myCss, base, baseUrl; + + if (self.options.baseUrl) { + return self.options.baseUrl; + } else { + baseUrl = ''; + //myTag = $('head > script[src$="js/elfinder.min.js"],script[src$="js/elfinder.full.js"]:first'); + myTag = null; + $('head > script').each(function() { + if (this.src && this.src.match(/js\/elfinder(?:-[a-z0-9_-]+)?\.(?:min|full)\.js$/i)) { + myTag = $(this); + return false; + } + }); + if (myTag) { + myCss = $('head > link[href$="css/elfinder.min.css"],link[href$="css/elfinder.full.css"]:first').length; + if (! myCss) { + // to request CSS auto loading + self.cssloaded = null; + } + baseUrl = myTag.attr('src').replace(/js\/[^\/]+$/, ''); + if (! baseUrl.match(/^(https?\/\/|\/)/)) { + // check tag + if (base = $('head > base[href]').attr('href')) { + baseUrl = base.replace(/\/$/, '') + '/' + baseUrl; + } + } + } + if (baseUrl !== '') { + self.options.baseUrl = baseUrl; + } else { + if (! self.options.baseUrl) { + self.options.baseUrl = './'; + } + baseUrl = self.options.baseUrl; + } + return baseUrl; + } + })(); + + this.i18nBaseUrl = (this.options.i18nBaseUrl || this.baseUrl + 'js/i18n').replace(/\/$/, '') + '/'; + + // set dispInlineRegex + cwdOptionsDefault['dispInlineRegex'] = this.options.dispInlineRegex; + + // auto load required CSS + if (this.options.cssAutoLoad) { + (function() { + var baseUrl = self.baseUrl; + + if (self.cssloaded === null) { + // hide elFinder node while css loading + node.data('cssautoloadHide', $('')); + $('head').append(node.data('cssautoloadHide')); + + // load CSS + self.loadCss([baseUrl+'css/elfinder.min.css', baseUrl+'css/theme.css'], { + dfd: $.Deferred().always(function() { + if (node.data('cssautoloadHide')) { + node.data('cssautoloadHide').remove(); + node.removeData('cssautoloadHide'); + } + }).done(function() { + if (!self.cssloaded) { + self.cssloaded = true; + self.trigger('cssloaded'); + } + }).fail(function() { + self.cssloaded = false; + self.error(['errRead', 'CSS (elfinder or theme)']); + }) + }); + + // additional CSS files + if (Array.isArray(self.options.cssAutoLoad)) { + self.loadCss(self.options.cssAutoLoad); + } + } + self.options.cssAutoLoad = false; + })(); + } + + // load theme if exists + self.changeTheme(self.storage('theme') || self.options.theme); + + /** + * Volume option to set the properties of the root Stat + * + * @type Object + */ + this.optionProperties = { + icon: void(0), + csscls: void(0), + tmbUrl: void(0), + uiCmdMap: {}, + netkey: void(0), + disabled: [] + }; + + if (! inFrame && ! this.options.enableAlways && $('body').children().length === 2) { // only node and beeper + this.options.enableAlways = true; + } + + // make options.debug + if (this.options.debug === true) { + this.options.debug = 'all'; + } else if (Array.isArray(this.options.debug)) { + (function() { + var d = {}; + $.each(self.options.debug, function() { + d[this] = true; + }); + self.options.debug = d; + })(); + } else { + this.options.debug = false; + } + + /** + * Original functions evacuated by conflict check + * + * @type Object + */ + this.noConflicts = {}; + + /** + * Check and save conflicts with bootstrap etc + * + * @type Function + */ + this.noConflict = function() { + $.each(conflictChecks, function(i, p) { + if ($.fn[p] && typeof $.fn[p].noConflict === 'function') { + self.noConflicts[p] = $.fn[p].noConflict(); + } + }); + }; + // do check conflict + this.noConflict(); + + /** + * Is elFinder over CORS + * + * @type Boolean + **/ + this.isCORS = false; + + // configure for CORS + (function(){ + if (typeof self.options.cors !== 'undefined' && self.options.cors !== null) { + self.isCORS = self.options.cors? true : false; + } else { + var parseUrl = document.createElement('a'), + parseUploadUrl, + selfProtocol = window.location.protocol, + portReg = function(protocol) { + protocol = (!protocol || protocol === ':')? selfProtocol : protocol; + return protocol === 'https:'? /\:443$/ : /\:80$/; + }, + selfHost = window.location.host.replace(portReg(selfProtocol), ''); + parseUrl.href = opts.url; + if (opts.urlUpload && (opts.urlUpload !== opts.url)) { + parseUploadUrl = document.createElement('a'); + parseUploadUrl.href = opts.urlUpload; + } + if (selfHost !== parseUrl.host.replace(portReg(parseUrl.protocol), '') + || (parseUrl.protocol !== ':'&& parseUrl.protocol !== '' && (selfProtocol !== parseUrl.protocol)) + || (parseUploadUrl && + (selfHost !== parseUploadUrl.host.replace(portReg(parseUploadUrl.protocol), '') + || (parseUploadUrl.protocol !== ':' && parseUploadUrl.protocol !== '' && (selfProtocol !== parseUploadUrl.protocol)) + ) + ) + ) { + self.isCORS = true; + } + } + if (self.isCORS) { + if (!$.isPlainObject(self.options.customHeaders)) { + self.options.customHeaders = {}; + } + if (!$.isPlainObject(self.options.xhrFields)) { + self.options.xhrFields = {}; + } + self.options.requestType = 'post'; + self.options.customHeaders['X-Requested-With'] = 'XMLHttpRequest'; + self.options.xhrFields['withCredentials'] = true; + } + })(); + + /** + * Ajax request type + * + * @type String + * @default "get" + **/ + this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get'; + + // set `requestMaxConn` by option + requestMaxConn = Math.max(parseInt(this.options.requestMaxConn), 1); + + /** + * Custom data that given as options + * + * @type Object + * @default {} + */ + this.optsCustomData = $.isPlainObject(this.options.customData) ? this.options.customData : {}; + + /** + * Any data to send across every ajax request + * + * @type Object + * @default {} + **/ + this.customData = Object.assign({}, this.optsCustomData); + + /** + * Previous custom data from connector + * + * @type Object|null + */ + this.prevCustomData = null; + + /** + * Any custom headers to send across every ajax request + * + * @type Object + * @default {} + */ + this.customHeaders = $.isPlainObject(this.options.customHeaders) ? this.options.customHeaders : {}; + + /** + * Any custom xhrFields to send across every ajax request + * + * @type Object + * @default {} + */ + this.xhrFields = $.isPlainObject(this.options.xhrFields) ? this.options.xhrFields : {}; + + /** + * Replace XMLHttpRequest.prototype.send to extended function for 3rd party libs XHR request etc. + * + * @type Function + */ + this.replaceXhrSend = function() { + if (! savedXhrSend) { + savedXhrSend = XMLHttpRequest.prototype.send; + } + XMLHttpRequest.prototype.send = function() { + var xhr = this; + // set request headers + if (self.customHeaders) { + $.each(self.customHeaders, function(key) { + xhr.setRequestHeader(key, this); + }); + } + // set xhrFields + if (self.xhrFields) { + $.each(self.xhrFields, function(key) { + if (key in xhr) { + xhr[key] = this; + } + }); + } + return savedXhrSend.apply(this, arguments); + }; + }; + + /** + * Restore saved original XMLHttpRequest.prototype.send + * + * @type Function + */ + this.restoreXhrSend = function() { + savedXhrSend && (XMLHttpRequest.prototype.send = savedXhrSend); + }; + + /** + * command names for into queue for only cwd requests + * these commands aborts before `open` request + * + * @type Array + * @default ['tmb', 'parents'] + */ + this.abortCmdsOnOpen = this.options.abortCmdsOnOpen || ['tmb', 'parents']; + + /** + * ui.nav id prefix + * + * @type String + */ + this.navPrefix = 'nav' + (elFinder.prototype.uniqueid? elFinder.prototype.uniqueid : '') + '-'; + + /** + * ui.cwd id prefix + * + * @type String + */ + this.cwdPrefix = elFinder.prototype.uniqueid? ('cwd' + elFinder.prototype.uniqueid + '-') : ''; + + // Increment elFinder.prototype.uniqueid + ++elFinder.prototype.uniqueid; + + /** + * URL to upload files + * + * @type String + **/ + this.uploadURL = opts.urlUpload || opts.url; + + /** + * Events namespace + * + * @type String + **/ + this.namespace = namespace; + + /** + * Today timestamp + * + * @type Number + **/ + this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000; + + /** + * Yesterday timestamp + * + * @type Number + **/ + this.yesterday = this.today - 86400; + + utc = this.options.UTCDate ? 'UTC' : ''; + + this.getHours = 'get'+utc+'Hours'; + this.getMinutes = 'get'+utc+'Minutes'; + this.getSeconds = 'get'+utc+'Seconds'; + this.getDate = 'get'+utc+'Date'; + this.getDay = 'get'+utc+'Day'; + this.getMonth = 'get'+utc+'Month'; + this.getFullYear = 'get'+utc+'FullYear'; + + /** + * elFinder node z-index (auto detect on elFinder load) + * + * @type null | Number + **/ + this.zIndex; + + /** + * Current search status + * + * @type Object + */ + this.searchStatus = { + state : 0, // 0: search ended, 1: search started, 2: in search result + query : '', + target : '', + mime : '', + mixed : false, // in multi volumes search: false or Array that target volume ids + ininc : false // in incremental search + }; + + /** + * Interface language + * + * @type String + * @default "en" + **/ + this.lang = this.storage('lang') || this.options.lang; + if (this.lang === 'jp') { + this.lang = this.options.lang = 'ja'; + } + + this.viewType = this.storage('view') || this.options.defaultView || 'icons'; + + this.sortType = this.storage('sortType') || this.options.sortType || 'name'; + + this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc'; + + this.sortStickFolders = this.storage('sortStickFolders'); + if (this.sortStickFolders === null) { + this.sortStickFolders = !!this.options.sortStickFolders; + } else { + this.sortStickFolders = !!this.sortStickFolders; + } + + this.sortAlsoTreeview = this.storage('sortAlsoTreeview'); + if (this.sortAlsoTreeview === null) { + this.sortAlsoTreeview = !!this.options.sortAlsoTreeview; + } else { + this.sortAlsoTreeview = !!this.sortAlsoTreeview; + } + + this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortRules); + + $.each(this.sortRules, function(name, method) { + if (typeof method != 'function') { + delete self.sortRules[name]; + } + }); + + this.compare = $.proxy(this.compare, this); + + /** + * Delay in ms before open notification dialog + * + * @type Number + * @default 500 + **/ + this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500; + + /** + * Dragging UI Helper object + * + * @type jQuery | null + **/ + this.draggingUiHelper = null; + + /** + * Base droppable options + * + * @type Object + **/ + this.droppable = { + greedy : true, + tolerance : 'pointer', + accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file,.elfinder-cwd-filename', + hoverClass : this.res('class', 'adroppable'), + classes : { // Deprecated hoverClass jQueryUI>=1.12.0 + 'ui-droppable-hover': this.res('class', 'adroppable') + }, + autoDisable: true, // elFinder original, see jquery.elfinder.js + drop : function(e, ui) { + var dst = $(this), + targets = $.grep(ui.helper.data('files')||[], function(h) { return h? true : false; }), + result = [], + dups = [], + faults = [], + isCopy = ui.helper.hasClass('elfinder-drag-helper-plus'), + c = 'class', + cnt, hash, i, h; + + if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) { + return false; + } + if (dst.hasClass(self.res(c, 'cwdfile'))) { + hash = self.cwdId2Hash(dst.attr('id')); + } else if (dst.hasClass(self.res(c, 'navdir'))) { + hash = self.navId2Hash(dst.attr('id')); + } else { + hash = cwd; + } + + cnt = targets.length; + + while (cnt--) { + h = targets[cnt]; + // ignore drop into itself or in own location + if (h != hash && files[h].phash != hash) { + result.push(h); + } else { + ((isCopy && h !== hash && files[hash].write)? dups : faults).push(h); + } + } + + if (faults.length) { + return false; + } + + ui.helper.data('droped', true); + + if (dups.length) { + ui.helper.hide(); + self.exec('duplicate', dups, {_userAction: true}); + } + + if (result.length) { + ui.helper.hide(); + self.clipboard(result, !isCopy); + self.exec('paste', hash, {_userAction: true}, hash).always(function(){ + self.clipboard([]); + self.trigger('unlockfiles', {files : targets}); + }); + self.trigger('drop', {files : targets}); + } + } + }; + + /** + * Return true if filemanager is active + * + * @return Boolean + **/ + this.enabled = function() { + return enabled && this.visible(); + }; + + /** + * Return true if filemanager is visible + * + * @return Boolean + **/ + this.visible = function() { + return node[0].elfinder && node.is(':visible'); + }; + + /** + * Return file is root? + * + * @param Object target file object + * @return Boolean + */ + this.isRoot = function(file) { + return (file.isroot || ! file.phash)? true : false; + }; + + /** + * Return root dir hash for current working directory + * + * @param String target hash + * @param Boolean include fake parent (optional) + * @return String + */ + this.root = function(hash, fake) { + hash = hash || cwd; + var dir, i; + + if (! fake) { + $.each(self.roots, function(id, rhash) { + if (hash.indexOf(id) === 0) { + dir = rhash; + return false; + } + }); + if (dir) { + return dir; + } + } + + dir = files[hash]; + while (dir && dir.phash && (fake || ! dir.isroot)) { + dir = files[dir.phash]; + } + if (dir) { + return dir.hash; + } + + while (i in files && files.hasOwnProperty(i)) { + dir = files[i]; + if (dir.mime === 'directory' && !dir.phash && dir.read) { + return dir.hash; + } + } + + return ''; + }; + + /** + * Return current working directory info + * + * @return Object + */ + this.cwd = function() { + return files[cwd] || {}; + }; + + /** + * Return required cwd option + * + * @param String option name + * @param String target hash (optional) + * @return mixed + */ + this.option = function(name, target) { + var res, item; + target = target || cwd; + if (self.optionsByHashes[target] && typeof self.optionsByHashes[target][name] !== 'undefined') { + return self.optionsByHashes[target][name]; + } + if (self.hasVolOptions && cwd !== target && (!(item = self.file(target)) || item.phash !== cwd)) { + res = ''; + $.each(self.volOptions, function(id, opt) { + if (target.indexOf(id) === 0) { + res = opt[name] || ''; + return false; + } + }); + return res; + } else { + return cwdOptions[name] || ''; + } + }; + + /** + * Return disabled commands by each folder + * + * @param Array target hashes + * @return Array + */ + this.getDisabledCmds = function(targets, flip) { + var disabled = {'hidden': true}; + if (! Array.isArray(targets)) { + targets = [ targets ]; + } + $.each(targets, function(i, h) { + var disCmds = self.option('disabledFlip', h); + if (disCmds) { + Object.assign(disabled, disCmds); + } + }); + return flip? disabled : Object.keys(disabled); + }; + + /** + * Return file data from current dir or tree by it's hash + * + * @param String file hash + * @return Object + */ + this.file = function(hash, alsoHidden) { + return hash? (files[hash] || (alsoHidden? hiddenFiles[hash] : void(0))) : void(0); + }; + + /** + * Return all cached files + * + * @param String parent hash + * @return Object + */ + this.files = function(phash) { + var items = {}; + if (phash) { + if (!ownFiles[phash]) { + return {}; + } + $.each(ownFiles[phash], function(h) { + if (files[h]) { + items[h] = files[h]; + } else { + delete ownFiles[phash][h]; + } + }); + return Object.assign({}, items); + } + return Object.assign({}, files); + }; + + /** + * Return list of file parents hashes include file hash + * + * @param String file hash + * @return Array + */ + this.parents = function(hash) { + var parents = [], + dir; + + while (hash && (dir = this.file(hash))) { + parents.unshift(dir.hash); + hash = dir.phash; + } + return parents; + }; + + this.path2array = function(hash, i18) { + var file, + path = []; + + while (hash) { + if ((file = files[hash]) && file.hash) { + path.unshift(i18 && file.i18 ? file.i18 : file.name); + hash = file.isroot? null : file.phash; + } else { + path = []; + break; + } + } + + return path; + }; + + /** + * Return file path or Get path async with jQuery.Deferred + * + * @param Object file + * @param Boolean i18 + * @param Object asyncOpt + * @return String|jQuery.Deferred + */ + this.path = function(hash, i18, asyncOpt) { + var path = files[hash] && files[hash].path + ? files[hash].path + : this.path2array(hash, i18).join(cwdOptions.separator); + if (! asyncOpt || ! files[hash]) { + return path; + } else { + asyncOpt = Object.assign({notify: {type : 'parents', cnt : 1, hideCnt : true}}, asyncOpt); + + var dfd = $.Deferred(), + notify = asyncOpt.notify, + noreq = false, + req = function() { + self.request({ + data : {cmd : 'parents', target : files[hash].phash}, + notify : notify, + preventFail : true + }) + .done(done) + .fail(function() { + dfd.reject(); + }); + }, + done = function() { + self.one('parentsdone', function() { + path = self.path(hash, i18); + if (path === '' && noreq) { + //retry with request + noreq = false; + req(); + } else { + if (notify) { + clearTimeout(ntftm); + notify.cnt = -(parseInt(notify.cnt || 0)); + self.notify(notify); + } + dfd.resolve(path); + } + }); + }, + ntftm; + + if (path) { + return dfd.resolve(path); + } else { + if (self.ui['tree']) { + // try as no request + if (notify) { + ntftm = setTimeout(function() { + self.notify(notify); + }, self.notifyDelay); + } + noreq = true; + done(true); + } else { + req(); + } + return dfd; + } + } + }; + + /** + * Return file url if set + * + * @param String file hash + * @param Object Options + * @return String + */ + this.url = function(hash, o) { + var file = files[hash], + opts = o || {}, + async = opts.async || false, + temp = opts.temporary || false, + dfrd = async? $.Deferred() : null, + getUrl = function(url) { + if (url) { + return url; + } + if (file.url) { + return file.url; + } + + if (typeof baseUrl === 'undefined') { + baseUrl = self.option('url', (!self.isRoot(file) && file.phash) || file.hash); + } + + if (baseUrl) { + return baseUrl + $.map(self.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/'); + } + + var params = Object.assign({}, self.customData, { + cmd: 'file', + target: file.hash + }); + if (self.oldAPI) { + params.cmd = 'open'; + params.current = file.phash; + } + return self.options.url + (self.options.url.indexOf('?') === -1 ? '?' : '&') + $.param(params, true); + }, + baseUrl, res; + + if (!file || !file.read) { + return async? dfrd.resolve('') : ''; + } + + if (file.url == '1' || (temp && !file.url && !(baseUrl = self.option('url', (!self.isRoot(file) && file.phash) || file.hash)))) { + this.request({ + data : { cmd : 'url', target : hash, options : { temporary: temp? 1 : 0 } }, + preventDefault : true, + options: {async: async}, + notify: async? {type : temp? 'file' : 'url', cnt : 1, hideCnt : true} : {} + }) + .done(function(data) { + file.url = data.url || ''; + }) + .fail(function() { + file.url = ''; + }) + .always(function() { + var url; + if (file.url && temp) { + url = file.url; + file.url = '1'; // restore + } + if (async) { + dfrd.resolve(getUrl(url)); + } else { + return getUrl(url); + } + }); + } else { + if (async) { + dfrd.resolve(getUrl()); + } else { + return getUrl(); + } + } + + if (async) { + return dfrd; + } + }; + + /** + * Return file url for open in elFinder + * + * @param String file hash + * @param Boolean for download link + * @return String + */ + this.openUrl = function(hash, download) { + var file = files[hash], + url = ''; + + if (!file || !file.read) { + return ''; + } + + if (!download) { + if (file.url) { + if (file.url != 1) { + url = file.url; + } + } else if (cwdOptions.url && file.hash.indexOf(self.cwd().volumeid) === 0) { + url = cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/'); + } + if (url) { + url += (url.match(/\?/)? '&' : '?') + '_'.repeat((url.match(/[\?&](_+)t=/g) || ['&t=']).sort().shift().match(/[\?&](_*)t=/)[1].length + 1) + 't=' + (file.ts || parseInt(+new Date()/1000)); + return url; + } + } + + url = this.options.url; + url = url + (url.indexOf('?') === -1 ? '?' : '&') + + (this.oldAPI ? 'cmd=open¤t='+file.phash : 'cmd=file') + + '&target=' + file.hash + + '&_t=' + (file.ts || parseInt(+new Date()/1000)); + + if (download) { + url += '&download=1'; + } + + $.each(this.customData, function(key, val) { + url += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); + }); + + return url; + }; + + /** + * Return thumbnail url + * + * @param Object file object + * @return String + */ + this.tmb = function(file) { + var tmbUrl, tmbCrop, + cls = 'elfinder-cwd-bgurl', + url = ''; + + if ($.isPlainObject(file)) { + if (self.searchStatus.state && file.hash.indexOf(self.cwd().volumeid) !== 0) { + tmbUrl = self.option('tmbUrl', file.hash); + tmbCrop = self.option('tmbCrop', file.hash); + } else { + tmbUrl = cwdOptions['tmbUrl']; + tmbCrop = cwdOptions['tmbCrop']; + } + if (tmbCrop) { + cls += ' elfinder-cwd-bgurl-crop'; + } + if (tmbUrl === 'self' && file.mime.indexOf('image/') === 0) { + url = self.openUrl(file.hash); + cls += ' elfinder-cwd-bgself'; + } else if ((self.oldAPI || tmbUrl) && file && file.tmb && file.tmb != 1) { + url = tmbUrl + file.tmb; + } else if (self.newAPI && file && file.tmb && file.tmb != 1) { + url = file.tmb; + } + if (url) { + if (file.ts && tmbUrl !== 'self') { + url += (url.match(/\?/)? '&' : '?') + '_t=' + file.ts; + } + return { url: url, className: cls }; + } + } + + return false; + }; + + /** + * Return selected files hashes + * + * @return Array + **/ + this.selected = function() { + return selected.slice(0); + }; + + /** + * Return selected files info + * + * @return Array + */ + this.selectedFiles = function() { + return $.map(selected, function(hash) { return files[hash] ? Object.assign({}, files[hash]) : null; }); + }; + + /** + * Return true if file with required name existsin required folder + * + * @param String file name + * @param String parent folder hash + * @return Boolean + */ + this.fileByName = function(name, phash) { + var hash; + + for (hash in files) { + if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) { + return files[hash]; + } + } + }; + + /** + * Valid data for required command based on rules + * + * @param String command name + * @param Object cammand's data + * @return Boolean + */ + this.validResponse = function(cmd, data) { + return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data); + }; + + /** + * Return bytes from ini formated size + * + * @param String ini formated size + * @return Integer + */ + this.returnBytes = function(val) { + var last; + if (isNaN(val)) { + if (! val) { + val = ''; + } + // for ex. 1mb, 1KB + val = val.replace(/b$/i, ''); + last = val.charAt(val.length - 1).toLowerCase(); + val = val.replace(/[tgmk]$/i, ''); + if (last == 't') { + val = val * 1024 * 1024 * 1024 * 1024; + } else if (last == 'g') { + val = val * 1024 * 1024 * 1024; + } else if (last == 'm') { + val = val * 1024 * 1024; + } else if (last == 'k') { + val = val * 1024; + } + val = isNaN(val)? 0 : parseInt(val); + } else { + val = parseInt(val); + if (val < 1) val = 0; + } + return val; + }; + + /** + * Process ajax request. + * Fired events : + * @todo + * @example + * @todo + * @return $.Deferred + */ + this.request = function(opts) { + var self = this, + o = this.options, + dfrd = $.Deferred(), + // request ID + reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16), + // request data + data = Object.assign({}, self.customData, {mimes : o.onlyMimes}, opts.data || opts), + // command name + cmd = data.cmd, + // request type is binary + isBinary = (opts.options || {}).dataType === 'binary', + // current cmd is "open" + isOpen = (!opts.asNotOpen && cmd === 'open'), + // call default fail callback (display error dialog) ? + deffail = !(isBinary || opts.preventDefault || opts.preventFail), + // call default success callback ? + defdone = !(isBinary || opts.preventDefault || opts.preventDone), + // options for notify dialog + notify = Object.assign({}, opts.notify), + // make cancel button + cancel = !!opts.cancel, + // do not normalize data - return as is + raw = isBinary || !!opts.raw, + // sync files on request fail + syncOnFail = opts.syncOnFail, + // use lazy() + lazy = !!opts.lazy, + // prepare function before done() + prepare = opts.prepare, + // navigate option object when cmd done + navigate = opts.navigate, + // open notify dialog timeout + timeout, + // use browser cache + useCache = (opts.options || {}).cache, + // request options + options = Object.assign({ + url : o.url, + async : true, + type : this.requestType, + dataType : 'json', + cache : (self.api >= 2.1029), // api >= 2.1029 has unique request ID + data : data, + headers : this.customHeaders, + xhrFields: this.xhrFields + }, opts.options || {}), + /** + * Default success handler. + * Call default data handlers and fire event with command name. + * + * @param Object normalized response data + * @return void + **/ + done = function(data) { + data.warning && self.error(data.warning); + + if (isOpen) { + open(data); + } else { + self.updateCache(data); + } + + data.changed && data.changed.length && change(data.changed); + + self.lazy(function() { + // fire some event to update cache/ui + data.removed && data.removed.length && self.remove(data); + data.added && data.added.length && self.add(data); + data.changed && data.changed.length && self.change(data); + }).then(function() { + // fire event with command name + return self.lazy(function() { + self.trigger(cmd, data, false); + }); + }).then(function() { + // fire event with command name + 'done' + return self.lazy(function() { + self.trigger(cmd + 'done'); + }); + }).then(function() { + // make toast message + if (data.toasts && Array.isArray(data.toasts)) { + $.each(data.toasts, function() { + this.msg && self.toast(this); + }); + } + // force update content + data.sync && self.sync(); + }); + }, + /** + * Request error handler. Reject dfrd with correct error message. + * + * @param jqxhr request object + * @param String request status + * @return void + **/ + error = function(xhr, status) { + var error, data, + d = self.options.debug; + + switch (status) { + case 'abort': + error = xhr.quiet ? '' : ['errConnect', 'errAbort']; + break; + case 'timeout': + error = ['errConnect', 'errTimeout']; + break; + case 'parsererror': + error = ['errResponse', 'errDataNotJSON']; + if (xhr.responseText) { + if (! cwd || (d && (d === 'all' || d['backend-error']))) { + error.push(xhr.responseText); + } + } + break; + default: + if (xhr.responseText) { + // check responseText, Is that JSON? + try { + data = JSON.parse(xhr.responseText); + if (data && data.error) { + error = data.error; + } + } catch(e) {} + } + if (! error) { + if (xhr.status == 403) { + error = ['errConnect', 'errAccess', 'HTTP error ' + xhr.status]; + } else if (xhr.status == 404) { + error = ['errConnect', 'errNotFound', 'HTTP error ' + xhr.status]; + } else if (xhr.status >= 500) { + error = ['errResponse', 'errServerError', 'HTTP error ' + xhr.status]; + } else { + if (xhr.status == 414 && options.type === 'get') { + // retry by POST method + options.type = 'post'; + self.abortXHR(xhr); + dfrd.xhr = xhr = self.transport.send(options).fail(error).done(success); + return; + } + error = xhr.quiet ? '' : ['errConnect', 'HTTP error ' + xhr.status]; + } + } + } + + self.trigger(cmd + 'done'); + dfrd.reject({error: error}, xhr, status); + }, + /** + * Request success handler. Valid response data and reject/resolve dfrd. + * + * @param Object response data + * @param String request status + * @return void + **/ + success = function(response) { + var d = self.options.debug; + + // Set currrent request command name + self.currentReqCmd = cmd; + + if (response.debug && (!d || d !== 'all')) { + if (!d) { + d = self.options.debug = {}; + } + d['backend-error'] = true; + d['warning'] = true; + } + + if (raw) { + self.abortXHR(xhr); + response && response.debug && self.debug('backend-debug', response); + return dfrd.resolve(response); + } + + if (!response) { + return dfrd.reject({error :['errResponse', 'errDataEmpty']}, xhr, response); + } else if (!$.isPlainObject(response)) { + return dfrd.reject({error :['errResponse', 'errDataNotJSON']}, xhr, response); + } else if (response.error) { + if (isOpen) { + // check leafRoots + $.each(self.leafRoots, function(phash, roots) { + self.leafRoots[phash] = $.grep(roots, function(h) { return h !== data.target; }); + }); + } + return dfrd.reject({error :response.error}, xhr, response); + } + + var resolve = function() { + var pushLeafRoots = function(name) { + if (self.leafRoots[data.target] && response[name]) { + $.each(self.leafRoots[data.target], function(i, h) { + var root; + if (root = self.file(h)) { + response[name].push(root); + } + }); + } + }, + setTextMimes = function() { + self.textMimes = {}; + $.each(self.res('mimes', 'text'), function() { + self.textMimes[this.toLowerCase()] = true; + }); + }, + actionTarget; + + if (isOpen) { + pushLeafRoots('files'); + } else if (cmd === 'tree') { + pushLeafRoots('tree'); + } + + response = self.normalize(response); + + if (!self.validResponse(cmd, response)) { + return dfrd.reject({error :(response.norError || 'errResponse')}, xhr, response); + } + + if (isOpen) { + if (!self.api) { + self.api = response.api || 1; + if (self.api == '2.0' && typeof response.options.uploadMaxSize !== 'undefined') { + self.api = '2.1'; + } + self.newAPI = self.api >= 2; + self.oldAPI = !self.newAPI; + } + + if (response.textMimes && Array.isArray(response.textMimes)) { + self.resources.mimes.text = response.textMimes; + setTextMimes(); + } + !self.textMimes && setTextMimes(); + + if (response.options) { + cwdOptions = Object.assign({}, cwdOptionsDefault, response.options); + } + + if (response.netDrivers) { + self.netDrivers = response.netDrivers; + } + + if (response.maxTargets) { + self.maxTargets = response.maxTargets; + } + + if (!!data.init) { + self.uplMaxSize = self.returnBytes(response.uplMaxSize); + self.uplMaxFile = !!response.uplMaxFile? Math.max(parseInt(response.uplMaxFile), 50) : 20; + } + } + + if (typeof prepare === 'function') { + prepare(response); + } + + if (navigate) { + actionTarget = navigate.target || 'added'; + if (response[actionTarget] && response[actionTarget].length) { + self.one(cmd + 'done', function() { + var targets = response[actionTarget], + newItems = self.findCwdNodes(targets), + inCwdHashes = function() { + var cwdHash = self.cwd().hash; + return $.map(targets, function(f) { return (f.phash && cwdHash === f.phash)? f.hash : null; }); + }, + hashes = inCwdHashes(), + makeToast = function(t) { + var node = void(0), + data = t.action? t.action.data : void(0), + cmd, msg, done; + if ((data || hashes.length) && t.action && (msg = t.action.msg) && (cmd = t.action.cmd) && (!t.action.cwdNot || t.action.cwdNot !== self.cwd().hash)) { + done = t.action.done; + data = t.action.data; + node = $('
') + .append( + $('') + .on('mouseenter mouseleave', function(e) { + $(this).toggleClass('ui-state-hover', e.type == 'mouseenter'); + }) + .on('click', function() { + self.exec(cmd, data || hashes, {_userAction: true, _currentType: 'toast', _currentNode: $(this) }); + if (done) { + self.one(cmd+'done', function() { + if (typeof done === 'function') { + done(); + } else if (done === 'select') { + self.trigger('selectfiles', {files : inCwdHashes()}); + } + }); + } + }) + ); + } + delete t.action; + t.extNode = node; + return t; + }; + + if (! navigate.toast) { + navigate.toast = {}; + } + + !navigate.noselect && self.trigger('selectfiles', {files : self.searchStatus.state > 1 ? $.map(targets, function(f) { return f.hash; }) : hashes}); + + if (newItems.length) { + if (!navigate.noscroll) { + newItems.first().trigger('scrolltoview', {blink : false}); + self.resources.blink(newItems, 'lookme'); + } + if ($.isPlainObject(navigate.toast.incwd)) { + self.toast(makeToast(navigate.toast.incwd)); + } + } else { + if ($.isPlainObject(navigate.toast.inbuffer)) { + self.toast(makeToast(navigate.toast.inbuffer)); + } + } + }); + } + } + + dfrd.resolve(response); + + response.debug && self.debug('backend-debug', response); + }; + self.abortXHR(xhr); + lazy? self.lazy(resolve) : resolve(); + }, + xhr, _xhr, + xhrAbort = function(e) { + if (xhr && xhr.state() === 'pending') { + self.abortXHR(xhr, { quiet: true , abort: true }); + if (!e || (e.type !== 'unload' && e.type !== 'destroy')) { + self.autoSync(); + } + } + }, + abort = function(e){ + self.trigger(cmd + 'done'); + if (e.type == 'autosync') { + if (e.data.action != 'stop') return; + } else if (e.type != 'unload' && e.type != 'destroy' && e.type != 'openxhrabort') { + if (!e.data.added || !e.data.added.length) { + return; + } + } + xhrAbort(e); + }, + request = function(mode) { + var queueAbort = function() { + syncOnFail = false; + dfrd.reject(); + }; + + if (mode) { + if (mode === 'cmd') { + return cmd; + } + } + + if (isOpen) { + if (requestQueueSkipOpen) { + return dfrd.reject(); + } + requestQueueSkipOpen = true; + } + + dfrd.always(function() { + delete options.headers['X-elFinderReqid']; + }).fail(function(error, xhr, response) { + var errData = { + cmd: cmd, + err: error, + xhr: xhr, + rc: response + }; + + // unset this cmd queue when user canceling + // see notify : function - `cancel.reject(0);` + if (error === 0) { + if (requestQueue.length) { + requestQueue = $.grep(requestQueue, function(req) { + return (req('cmd') === cmd) ? false : true; + }); + } + } + // trigger "requestError" event + self.trigger('requestError', errData); + if (errData._event && errData._event.isDefaultPrevented()) { + deffail = false; + syncOnFail = false; + if (error) { + error.error = ''; + } + } + // abort xhr + xhrAbort(); + if (isOpen) { + openDir = self.file(data.target); + openDir && openDir.volumeid && self.isRoot(openDir) && delete self.volumeExpires[openDir.volumeid]; + } + self.trigger(cmd + 'fail', response); + if (error) { + deffail ? self.error(error) : self.debug('error', self.i18n(error)); + } + syncOnFail && self.sync(); + }); + + if (!cmd) { + syncOnFail = false; + return dfrd.reject({error :'errCmdReq'}); + } + + if (self.maxTargets && data.targets && data.targets.length > self.maxTargets) { + syncOnFail = false; + return dfrd.reject({error :['errMaxTargets', self.maxTargets]}); + } + + defdone && dfrd.done(done); + + // quiet abort not completed "open" requests + if (isOpen) { + while ((_xhr = queue.pop())) { + _xhr.queueAbort(); + } + if (cwd !== data.target) { + while ((_xhr = cwdQueue.pop())) { + _xhr.queueAbort(); + } + } + } + + // trigger abort autoSync for commands to add the item + if ($.inArray(cmd, (self.cmdsToAdd + ' autosync').split(' ')) !== -1) { + if (cmd !== 'autosync') { + self.autoSync('stop'); + dfrd.always(function() { + self.autoSync(); + }); + } + self.trigger('openxhrabort'); + } + + delete options.preventFail; + + if (self.api >= 2.1029) { + if (useCache) { + options.headers['X-elFinderReqid'] = reqId; + } else { + Object.assign(options.data, { reqid : reqId }); + } + } + + // function for set value of this syncOnFail + dfrd.syncOnFail = function(state) { + syncOnFail = !!state; + }; + + requestCnt++; + + dfrd.xhr = xhr = self.transport.send(options).always(function() { + // set responseURL from native xhr object + if (options._xhr && typeof options._xhr.responseURL !== 'undefined') { + xhr.responseURL = options._xhr.responseURL || ''; + } + --requestCnt; + if (requestQueue.length) { + requestQueue.shift()(); + } else { + requestQueueSkipOpen = false; + } + }).fail(error).done(success); + + if (self.api >= 2.1029) { + xhr._requestId = reqId; + } + + if (isOpen || (data.compare && cmd === 'info')) { + // regist function queueAbort + xhr.queueAbort = queueAbort; + // add autoSync xhr into queue + queue.unshift(xhr); + // bind abort() + data.compare && self.bind(self.cmdsToAdd + ' autosync openxhrabort', abort); + dfrd.always(function() { + var ndx = $.inArray(xhr, queue); + data.compare && self.unbind(self.cmdsToAdd + ' autosync openxhrabort', abort); + ndx !== -1 && queue.splice(ndx, 1); + }); + } else if ($.inArray(cmd, self.abortCmdsOnOpen) !== -1) { + // regist function queueAbort + xhr.queueAbort = queueAbort; + // add "open" xhr, only cwd xhr into queue + cwdQueue.unshift(xhr); + dfrd.always(function() { + var ndx = $.inArray(xhr, cwdQueue); + ndx !== -1 && cwdQueue.splice(ndx, 1); + }); + } + + // abort pending xhr on window unload or elFinder destroy + self.bind('unload destroy', abort); + dfrd.always(function() { + self.unbind('unload destroy', abort); + }); + + return dfrd; + }, + queueingRequest = function() { + // show notify + if (notify.type && notify.cnt) { + if (cancel) { + notify.cancel = dfrd; + opts.eachCancel && (notify.id = +new Date()); + } + timeout = setTimeout(function() { + self.notify(notify); + dfrd.always(function() { + notify.cnt = -(parseInt(notify.cnt)||0); + self.notify(notify); + }); + }, self.notifyDelay); + + dfrd.always(function() { + clearTimeout(timeout); + }); + } + // queueing + if (isOpen) { + requestQueueSkipOpen = false; + } + if (requestCnt < requestMaxConn) { + // do request + return request(); + } else { + if (isOpen) { + requestQueue.unshift(request); + } else { + requestQueue.push(request); + } + return dfrd; + } + }, + bindData = {opts: opts, result: true}, + openDir; + + // prevent request initial request is completed + if (!self.api && !data.init) { + syncOnFail = false; + return dfrd.reject(); + } + + // trigger "request.cmd" that callback be able to cancel request by substituting "false" for "event.data.result" + self.trigger('request.' + cmd, bindData, true); + + if (! bindData.result) { + self.trigger(cmd + 'done'); + return dfrd.reject(); + } else if (typeof bindData.result === 'object' && bindData.result.promise) { + bindData.result + .done(queueingRequest) + .fail(function() { + self.trigger(cmd + 'done'); + dfrd.reject(); + }); + return dfrd; + } + + return queueingRequest(); + }; + + /** + * Call cache() + * Store info about files/dirs in "files" object. + * + * @param Array files + * @return void + */ + this.cache = function(dataArray) { + if (! Array.isArray(dataArray)) { + dataArray = [ dataArray ]; + } + cache(dataArray); + }; + + /** + * Update file object caches by respose data object + * + * @param Object respose data object + * @return void + */ + this.updateCache = function(data) { + if ($.isPlainObject(data)) { + data.files && data.files.length && cache(data.files, 'files'); + data.tree && data.tree.length && cache(data.tree, 'tree'); + data.removed && data.removed.length && remove(data.removed); + data.added && data.added.length && cache(data.added, 'add'); + data.changed && data.changed.length && change(data.changed, 'change'); + } + }; + + /** + * Compare current files cache with new files and return diff + * + * @param Array new files + * @param String target folder hash + * @param Array exclude properties to compare + * @return Object + */ + this.diff = function(incoming, onlydir, excludeProps) { + var raw = {}, + added = [], + removed = [], + changed = [], + excludes = null, + isChanged = function(hash) { + var l = changed.length; + + while (l--) { + if (changed[l].hash == hash) { + return true; + } + } + }; + + $.each(incoming, function(i, f) { + raw[f.hash] = f; + }); + + // make excludes object + if (excludeProps && excludeProps.length) { + excludes = {}; + $.each(excludeProps, function() { + excludes[this] = true; + }); + } + + // find removed + $.each(files, function(hash, f) { + if (! raw[hash] && (! onlydir || f.phash === onlydir)) { + removed.push(hash); + } + }); + + // compare files + $.each(raw, function(hash, file) { + var origin = files[hash], + orgKeys = {}, + chkKeyLen; + + if (!origin) { + added.push(file); + } else { + // make orgKeys object + $.each(Object.keys(origin), function() { + orgKeys[this] = true; + }); + $.each(file, function(prop) { + delete orgKeys[prop]; + if (! excludes || ! excludes[prop]) { + if (file[prop] !== origin[prop]) { + changed.push(file); + orgKeys = {}; + return false; + } + } + }); + chkKeyLen = Object.keys(orgKeys).length; + if (chkKeyLen !== 0) { + if (excludes) { + $.each(orgKeys, function(prop) { + if (excludes[prop]) { + --chkKeyLen; + } + }); + } + (chkKeyLen !== 0) && changed.push(file); + } + } + }); + + // parents of removed dirs mark as changed (required for tree correct work) + $.each(removed, function(i, hash) { + var file = files[hash], + phash = file.phash; + + if (phash + && file.mime == 'directory' + && $.inArray(phash, removed) === -1 + && raw[phash] + && !isChanged(phash)) { + changed.push(raw[phash]); + } + }); + + return { + added : added, + removed : removed, + changed : changed + }; + }; + + /** + * Sync content + * + * @return jQuery.Deferred + */ + this.sync = function(onlydir, polling) { + this.autoSync('stop'); + var self = this, + compare = function(){ + var c = '', cnt = 0, mtime = 0; + if (onlydir && polling) { + $.each(files, function(h, f) { + if (f.phash && f.phash === onlydir) { + ++cnt; + mtime = Math.max(mtime, f.ts); + } + c = cnt+':'+mtime; + }); + } + return c; + }, + comp = compare(), + dfrd = $.Deferred().done(function() { self.trigger('sync'); }), + opts = [this.request({ + data : {cmd : 'open', reload : 1, target : cwd, tree : (! onlydir && this.ui.tree) ? 1 : 0, compare : comp}, + preventDefault : true + })], + exParents = function() { + var parents = [], + curRoot = self.file(self.root(cwd)), + curId = curRoot? curRoot.volumeid : null, + phash = self.cwd().phash, + isroot,pdir; + + while(phash) { + if (pdir = self.file(phash)) { + if (phash.indexOf(curId) !== 0) { + parents.push( {target: phash, cmd: 'tree'} ); + if (! self.isRoot(pdir)) { + parents.push( {target: phash, cmd: 'parents'} ); + } + curRoot = self.file(self.root(phash)); + curId = curRoot? curRoot.volumeid : null; + } + phash = pdir.phash; + } else { + phash = null; + } + } + return parents; + }; + + if (! onlydir && self.api >= 2) { + (cwd !== this.root()) && opts.push(this.request({ + data : {cmd : 'parents', target : cwd}, + preventDefault : true + })); + $.each(exParents(), function(i, data) { + opts.push(self.request({ + data : {cmd : data.cmd, target : data.target}, + preventDefault : true + })); + }); + } + $.when.apply($, opts) + .fail(function(error, xhr) { + if (! polling || $.inArray('errOpen', error) !== -1) { + dfrd.reject(error); + self.parseError(error) && self.request({ + data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, + notify : {type : 'open', cnt : 1, hideCnt : true} + }); + } else { + dfrd.reject((error && xhr.status != 0)? error : void 0); + } + }) + .done(function(odata) { + var pdata, argLen, i; + + if (odata.cwd.compare) { + if (comp === odata.cwd.compare) { + return dfrd.reject(); + } + } + + // for 2nd and more requests + pdata = {tree : []}; + + // results marge of 2nd and more requests + argLen = arguments.length; + if (argLen > 1) { + for(i = 1; i < argLen; i++) { + if (arguments[i].tree && arguments[i].tree.length) { + pdata.tree.push.apply(pdata.tree, arguments[i].tree); + } + } + } + + if (self.api < 2.1) { + if (! pdata.tree) { + pdata.tree = []; + } + pdata.tree.push(odata.cwd); + } + + // data normalize + odata = self.normalize(odata); + if (!self.validResponse('open', odata)) { + return dfrd.reject((odata.norError || 'errResponse')); + } + pdata = self.normalize(pdata); + if (!self.validResponse('tree', pdata)) { + return dfrd.reject((pdata.norError || 'errResponse')); + } + + var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : []), onlydir); + + diff.added.push(odata.cwd); + + self.updateCache(diff); + + // trigger events + diff.removed.length && self.remove(diff); + diff.added.length && self.add(diff); + diff.changed.length && self.change(diff); + return dfrd.resolve(diff); + }) + .always(function() { + self.autoSync(); + }); + + return dfrd; + }; + + this.upload = function(files) { + return this.transport.upload(files, this); + }; + + /** + * Arrays that has to unbind events + * + * @type Object + */ + this.toUnbindEvents = {}; + + /** + * Attach listener to events + * To bind to multiply events at once, separate events names by space + * + * @param String event(s) name(s) + * @param Object event handler or {done: handler} + * @param Boolean priority first + * @return elFinder + */ + this.bind = function(event, callback, priorityFirst) { + var i, len; + + if (callback && (typeof callback === 'function' || typeof callback.done === 'function')) { + event = ('' + event).toLowerCase().replace(/^\s+|\s+$/g, '').split(/\s+/); + + len = event.length; + for (i = 0; i < len; i++) { + if (listeners[event[i]] === void(0)) { + listeners[event[i]] = []; + } + listeners[event[i]][priorityFirst? 'unshift' : 'push'](callback); + } + } + return this; + }; + + /** + * Remove event listener if exists + * To un-bind to multiply events at once, separate events names by space + * + * @param String event(s) name(s) + * @param Function callback + * @return elFinder + */ + this.unbind = function(event, callback) { + var i, len, l, ci; + + event = ('' + event).toLowerCase().split(/\s+/); + + len = event.length; + for (i = 0; i < len; i++) { + if (l = listeners[event[i]]) { + ci = $.inArray(callback, l); + ci > -1 && l.splice(ci, 1); + } + } + + callback = null; + return this; + }; + + /** + * Fire event - send notification to all event listeners + * In the callback `this` becames an event object + * + * @param String event type + * @param Object data to send across event + * @param Boolean allow modify data (call by reference of data) default: true + * @return elFinder + */ + this.trigger = function(evType, data, allowModify) { + var type = evType.toLowerCase(), + isopen = (type === 'open'), + dataIsObj = (typeof data === 'object'), + handlers = listeners[type] || [], + dones = [], + i, l, jst, event; + + this.debug('event-'+type, data); + + if (! dataIsObj || typeof allowModify === 'undefined') { + allowModify = true; + } + if (l = handlers.length) { + event = $.Event(type); + if (data) { + data._event = event; + } + if (allowModify) { + event.data = data; + } + + for (i = 0; i < l; i++) { + if (! handlers[i]) { + // probably un-binded this handler + continue; + } + + // handler is $.Deferred(), call all functions upon completion + if (handlers[i].done) { + dones.push(handlers[i].done); + continue; + } + + // set `event.data` only callback has argument + if (handlers[i].length) { + if (!allowModify) { + // to avoid data modifications. remember about "sharing" passing arguments in js :) + if (typeof jst === 'undefined') { + try { + jst = JSON.stringify(data); + } catch(e) { + jst = false; + } + } + event.data = jst? JSON.parse(jst) : data; + } + } + + try { + if (handlers[i].call(event, event, this) === false || event.isDefaultPrevented()) { + this.debug('event-stoped', event.type); + break; + } + } catch (ex) { + window.console && window.console.log && window.console.log(ex); + } + + } + + // call done functions + if (l = dones.length) { + for (i = 0; i < l; i++) { + try { + if (dones[i].call(event, event, this) === false || event.isDefaultPrevented()) { + this.debug('event-stoped', event.type + '(done)'); + break; + } + } catch (ex) { + window.console && window.console.log && window.console.log(ex); + } + } + } + + if (this.toUnbindEvents[type] && this.toUnbindEvents[type].length) { + $.each(this.toUnbindEvents[type], function(i, v) { + self.unbind(v.type, v.callback); + }); + delete this.toUnbindEvents[type]; + } + } + return this; + }; + + /** + * Get event listeners + * + * @param String event type + * @return Array listed event functions + */ + this.getListeners = function(event) { + return event? listeners[event.toLowerCase()] : listeners; + }; + + /** + * Bind keybord shortcut to keydown event + * + * @example + * elfinder.shortcut({ + * pattern : 'ctrl+a', + * description : 'Select all files', + * callback : function(e) { ... }, + * keypress : true|false (bind to keypress instead of keydown) + * }) + * + * @param Object shortcut config + * @return elFinder + */ + this.shortcut = function(s) { + var patterns, pattern, code, i, parts; + + if (this.options.allowShortcuts && s.pattern && $.isFunction(s.callback)) { + patterns = s.pattern.toUpperCase().split(/\s+/); + + for (i= 0; i < patterns.length; i++) { + pattern = patterns[i]; + parts = pattern.split('+'); + code = (code = parts.pop()).length == 1 + ? (code > 0 ? code : code.charCodeAt(0)) + : (code > 0 ? code : $.ui.keyCode[code]); + + if (code && !shortcuts[pattern]) { + shortcuts[pattern] = { + keyCode : code, + altKey : $.inArray('ALT', parts) != -1, + ctrlKey : $.inArray('CTRL', parts) != -1, + shiftKey : $.inArray('SHIFT', parts) != -1, + type : s.type || 'keydown', + callback : s.callback, + description : s.description, + pattern : pattern + }; + } + } + } + return this; + }; + + /** + * Registered shortcuts + * + * @type Object + **/ + this.shortcuts = function() { + var ret = []; + + $.each(shortcuts, function(i, s) { + ret.push([s.pattern, self.i18n(s.description)]); + }); + return ret; + }; + + /** + * Get/set clipboard content. + * Return new clipboard content. + * + * @example + * this.clipboard([]) - clean clipboard + * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted + * + * @param Array new files hashes + * @param Boolean cut files? + * @return Array + */ + this.clipboard = function(hashes, cut) { + var map = function() { return $.map(clipboard, function(f) { return f.hash; }); }; + + if (hashes !== void(0)) { + clipboard.length && this.trigger('unlockfiles', {files : map()}); + remember = {}; + + clipboard = $.map(hashes||[], function(hash) { + var file = files[hash]; + if (file) { + + remember[hash] = true; + + return { + hash : hash, + phash : file.phash, + name : file.name, + mime : file.mime, + read : file.read, + locked : file.locked, + cut : !!cut + }; + } + return null; + }); + this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)}); + cut && this.trigger('lockfiles', {files : map()}); + } + + // return copy of clipboard instead of refrence + return clipboard.slice(0, clipboard.length); + }; + + /** + * Return true if command enabled + * + * @param String command name + * @param String|void hash for check of own volume's disabled cmds + * @return Boolean + */ + this.isCommandEnabled = function(name, dstHash) { + var disabled, cmd, + cvid = self.cwd().volumeid || ''; + + // In serach results use selected item hash to check + if (!dstHash && self.searchStatus.state > 1 && self.selected().length) { + dstHash = self.selected()[0]; + } + if (dstHash && (! cvid || dstHash.indexOf(cvid) !== 0)) { + disabled = self.option('disabledFlip', dstHash); + //if (! disabled) { + // disabled = {}; + //} + } else { + disabled = cwdOptions.disabledFlip/* || {}*/; + } + cmd = this._commands[name]; + return cmd ? (cmd.alwaysEnabled || !disabled[name]) : false; + }; + + /** + * Exec command and return result; + * + * @param String command name + * @param String|Array usualy files hashes + * @param String|Array command options + * @param String|void hash for enabled check of own volume's disabled cmds + * @return $.Deferred + */ + this.exec = function(cmd, files, opts, dstHash) { + var dfrd, resType; + + // apply commandMap for keyboard shortcut + if (!dstHash && this.commandMap[cmd] && this.commandMap[cmd] !== 'hidden') { + cmd = this.commandMap[cmd]; + } + + if (cmd === 'open') { + if (this.searchStatus.state || this.searchStatus.ininc) { + this.trigger('searchend', { noupdate: true }); + } + this.autoSync('stop'); + } + if (!dstHash && files) { + if ($.isArray(files)) { + if (files.length) { + dstHash = files[0]; + } + } else { + dstHash = files; + } + } + dfrd = this._commands[cmd] && this.isCommandEnabled(cmd, dstHash) + ? this._commands[cmd].exec(files, opts) + : $.Deferred().reject('No such command'); + + resType = typeof dfrd; + if (!(resType === 'object' && dfrd.promise)) { + self.debug('warning', '"cmd.exec()" should be returned "$.Deferred" but cmd "' + cmd + '" returned "' + resType + '"'); + dfrd = $.Deferred().resolve(); + } + + this.trigger('exec', { dfrd : dfrd, cmd : cmd, files : files, opts : opts, dstHash : dstHash }); + return dfrd; + }; + + /** + * Create and return dialog. + * + * @param String|DOMElement dialog content + * @param Object dialog options + * @return jQuery + */ + this.dialog = function(content, options) { + var dialog = $('
').append(content).appendTo(node).elfinderdialog(options, self), + dnode = dialog.closest('.ui-dialog'), + resize = function(){ + ! dialog.data('draged') && dialog.is(':visible') && dialog.elfinderdialog('posInit'); + }; + if (dnode.length) { + self.bind('resize', resize); + dnode.on('remove', function() { + self.unbind('resize', resize); + }); + } + return dialog; + }; + + /** + * Create and return toast. + * + * @param Object toast options - see ui/toast.js + * @return jQuery + */ + this.toast = function(options) { + return $('
').appendTo(this.ui.toast).elfindertoast(options || {}, this); + }; + + /** + * Return UI widget or node + * + * @param String ui name + * @return jQuery + */ + this.getUI = function(ui) { + return this.ui[ui] || (ui? $() : node); + }; + + /** + * Return elFinder.command instance or instances array + * + * @param String command name + * @return Object | Array + */ + this.getCommand = function(name) { + return name === void(0) ? this._commands : this._commands[name]; + }; + + /** + * Resize elfinder node + * + * @param String|Number width + * @param String|Number height + * @return void + */ + this.resize = function(w, h) { + var getMargin = function() { + var m = node.outerHeight(true) - node.innerHeight(), + p = node; + + while(p.get(0) !== heightBase.get(0)) { + p = p.parent(); + m += p.outerHeight(true) - p.innerHeight(); + if (! p.parent().length) { + // reached the document + break; + } + } + return m; + }, + fit = ! node.hasClass('ui-resizable'), + prv = node.data('resizeSize') || {w: 0, h: 0}, + mt, size = {}; + + if (heightBase && heightBase.data('resizeTm')) { + clearTimeout(heightBase.data('resizeTm')); + } + + if (typeof h === 'string') { + if (mt = h.match(/^([0-9.]+)%$/)) { + // setup heightBase + if (! heightBase || ! heightBase.length) { + heightBase = $(window); + } + if (! heightBase.data('marginToMyNode')) { + heightBase.data('marginToMyNode', getMargin()); + } + if (! heightBase.data('fitToBaseFunc')) { + heightBase.data('fitToBaseFunc', function(e) { + var tm = heightBase.data('resizeTm'); + e.preventDefault(); + e.stopPropagation(); + tm && cancelAnimationFrame(tm); + if (! node.hasClass('elfinder-fullscreen') && (!self.UA.Mobile || heightBase.data('rotated') !== self.UA.Rotated)) { + heightBase.data('rotated', self.UA.Rotated); + heightBase.data('resizeTm', requestAnimationFrame(function() { + self.restoreSize(); + })); + } + }); + } + if (typeof heightBase.data('rotated') === 'undefined') { + heightBase.data('rotated', self.UA.Rotated); + } + h = heightBase.height() * (mt[1] / 100) - heightBase.data('marginToMyNode'); + + heightBase.off('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); + fit && heightBase.on('resize.' + self.namespace, heightBase.data('fitToBaseFunc')); + } + } + + node.css({ width : w, height : parseInt(h) }); + size.w = Math.round(node.width()); + size.h = Math.round(node.height()); + node.data('resizeSize', size); + if (size.w !== prv.w || size.h !== prv.h) { + node.trigger('resize'); + this.trigger('resize', {width : size.w, height : size.h}); + } + }; + + /** + * Restore elfinder node size + * + * @return elFinder + */ + this.restoreSize = function() { + this.resize(width, height); + }; + + this.show = function() { + node.show(); + this.enable().trigger('show'); + }; + + this.hide = function() { + if (this.options.enableAlways) { + prevEnabled = enabled; + enabled = false; + } + this.disable(); + this.trigger('hide'); + node.hide(); + }; + + /** + * Lazy execution function + * + * @param Object function + * @param Number delay + * @param Object options + * @return Object jQuery.Deferred + */ + this.lazy = function(func, delay, opts) { + var busy = function(state) { + var cnt = node.data('lazycnt'), + repaint; + + if (state) { + repaint = node.data('lazyrepaint')? false : opts.repaint; + if (! cnt) { + node.data('lazycnt', 1) + .addClass('elfinder-processing'); + } else { + node.data('lazycnt', ++cnt); + } + if (repaint) { + node.data('lazyrepaint', true).css('display'); // force repaint + } + } else { + if (cnt && cnt > 1) { + node.data('lazycnt', --cnt); + } else { + repaint = node.data('lazyrepaint'); + node.data('lazycnt', 0) + .removeData('lazyrepaint') + .removeClass('elfinder-processing'); + repaint && node.css('display'); // force repaint; + self.trigger('lazydone'); + } + } + }, + dfd = $.Deferred(), + callFunc = function() { + dfd.resolve(func.call(dfd)); + busy(false); + }; + + delay = delay || 0; + opts = opts || {}; + busy(true); + + if (delay) { + setTimeout(callFunc, delay); + } else { + requestAnimationFrame(callFunc); + } + + return dfd; + }; + + /** + * Destroy this elFinder instance + * + * @return void + **/ + this.destroy = function() { + if (node && node[0].elfinder) { + node.hasClass('elfinder-fullscreen') && self.toggleFullscreen(node); + this.options.syncStart = false; + this.autoSync('forcestop'); + this.trigger('destroy').disable(); + clipboard = []; + selected = []; + listeners = {}; + shortcuts = {}; + $(window).off('.' + namespace); + $(document).off('.' + namespace); + self.trigger = function(){}; + $(beeper).remove(); + node.off() + .removeData() + .empty() + .append(prevContent.contents()) + .attr('class', prevContent.attr('class')) + .attr('style', prevContent.attr('style')); + delete node[0].elfinder; + // restore kept events + $.each(prevEvents, function(n, arr) { + $.each(arr, function(i, o) { + node.on(o.type + (o.namespace? '.'+o.namespace : ''), o.selector, o.handler); + }); + }); + } + }; + + /** + * Start or stop auto sync + * + * @param String|Bool stop + * @return void + */ + this.autoSync = function(mode) { + var sync; + if (self.options.sync >= 1000) { + if (syncInterval) { + clearTimeout(syncInterval); + syncInterval = null; + self.trigger('autosync', {action : 'stop'}); + } + + if (mode === 'stop') { + ++autoSyncStop; + } else { + autoSyncStop = Math.max(0, --autoSyncStop); + } + + if (autoSyncStop || mode === 'forcestop' || ! self.options.syncStart) { + return; + } + + // run interval sync + sync = function(start){ + var timeout; + if (cwdOptions.syncMinMs && (start || syncInterval)) { + start && self.trigger('autosync', {action : 'start'}); + timeout = Math.max(self.options.sync, cwdOptions.syncMinMs); + syncInterval && clearTimeout(syncInterval); + syncInterval = setTimeout(function() { + var dosync = true, hash = cwd, cts; + if (cwdOptions.syncChkAsTs && files[hash] && (cts = files[hash].ts)) { + self.request({ + data : {cmd : 'info', targets : [hash], compare : cts, reload : 1}, + preventDefault : true + }) + .done(function(data){ + var ts; + dosync = true; + if (data.compare) { + ts = data.compare; + if (ts == cts) { + dosync = false; + } + } + if (dosync) { + self.sync(hash).always(function(){ + if (ts) { + // update ts for cache clear etc. + files[hash].ts = ts; + } + sync(); + }); + } else { + sync(); + } + }) + .fail(function(error, xhr){ + var err = self.parseError(error); + if (err && xhr.status != 0) { + self.error(err); + if (Array.isArray(err) && $.inArray('errOpen', err) !== -1) { + self.request({ + data : {cmd : 'open', target : (self.lastDir('') || self.root()), tree : 1, init : 1}, + notify : {type : 'open', cnt : 1, hideCnt : true} + }); + } + } else { + syncInterval = setTimeout(function() { + sync(); + }, timeout); + } + }); + } else { + self.sync(cwd, true).always(function(){ + sync(); + }); + } + }, timeout); + } + }; + sync(true); + } + }; + + /** + * Return bool is inside work zone of specific point + * + * @param Number event.pageX + * @param Number event.pageY + * @return Bool + */ + this.insideWorkzone = function(x, y, margin) { + var rectangle = this.getUI('workzone').data('rectangle'); + + margin = margin || 1; + if (x < rectangle.left + margin + || x > rectangle.left + rectangle.width + margin + || y < rectangle.top + margin + || y > rectangle.top + rectangle.height + margin) { + return false; + } + return true; + }; + + /** + * Target ui node move to last of children of elFinder node fot to show front + * + * @param Object target Target jQuery node object + */ + this.toFront = function(target) { + var nodes = node.children('.ui-front').removeClass('elfinder-frontmost'), + lastnode = nodes.last(); + nodes.css('z-index', ''); + $(target).addClass('ui-front elfinder-frontmost').css('z-index', lastnode.css('z-index') + 1); + }; + + /** + * Remove class 'elfinder-frontmost' and hide() to target ui node + * + * @param Object target Target jQuery node object + * @param Boolean nohide Do not hide + */ + this.toHide =function(target, nohide) { + var tgt = $(target), + last; + + !nohide && tgt.hide(); + if (tgt.hasClass('elfinder-frontmost')) { + tgt.removeClass('elfinder-frontmost'); + last = node.children('.ui-front:visible:not(.elfinder-frontmost)').last(); + if (last.length) { + requestAnimationFrame(function() { + if (!node.children('.elfinder-frontmost:visible').length) { + self.toFront(last); + last.trigger('frontmost'); + } + }); + } + } + }; + + /** + * Return css object for maximize + * + * @return Object + */ + this.getMaximizeCss = function() { + return { + width : '100%', + height : '100%', + margin : 0, + top : 0, + left : 0, + display : 'block', + position: 'fixed', + zIndex : Math.max(self.zIndex? (self.zIndex + 1) : 0 , 1000), + maxWidth : '', + maxHeight: '' + }; + }; + + // Closure for togglefullscreen + (function() { + // check is in iframe + if (inFrame && self.UA.Fullscreen) { + self.UA.Fullscreen = false; + if (parentIframe && typeof parentIframe.attr('allowfullscreen') !== 'undefined') { + self.UA.Fullscreen = true; + } + } + + var orgStyle, bodyOvf, resizeTm, fullElm, exitFull, toFull, + cls = 'elfinder-fullscreen', + clsN = 'elfinder-fullscreen-native', + checkDialog = function() { + var t = 0, + l = 0; + $.each(node.children('.ui-dialog,.ui-draggable'), function(i, d) { + var $d = $(d), + pos = $d.position(); + + if (pos.top < 0) { + $d.css('top', t); + t += 20; + } + if (pos.left < 0) { + $d.css('left', l); + l += 20; + } + }); + }, + funcObj = self.UA.Fullscreen? { + // native full screen mode + + fullElm: function() { + return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || null; + }, + + exitFull: function() { + if (document.exitFullscreen) { + return document.exitFullscreen(); + } else if (document.webkitExitFullscreen) { + return document.webkitExitFullscreen(); + } else if (document.mozCancelFullScreen) { + return document.mozCancelFullScreen(); + } else if (document.msExitFullscreen) { + return document.msExitFullscreen(); + } + }, + + toFull: function(elem) { + if (elem.requestFullscreen) { + return elem.requestFullscreen(); + } else if (elem.webkitRequestFullscreen) { + return elem.webkitRequestFullscreen(); + } else if (elem.mozRequestFullScreen) { + return elem.mozRequestFullScreen(); + } else if (elem.msRequestFullscreen) { + return elem.msRequestFullscreen(); + } + return false; + } + } : { + // node element maximize mode + + fullElm: function() { + var full; + if (node.hasClass(cls)) { + return node.get(0); + } else { + full = node.find('.' + cls); + if (full.length) { + return full.get(0); + } + } + return null; + }, + + exitFull: function() { + var elm; + + $(window).off('resize.' + namespace, resize); + if (bodyOvf !== void(0)) { + $('body').css('overflow', bodyOvf); + } + bodyOvf = void(0); + + if (orgStyle) { + elm = orgStyle.elm; + restoreStyle(elm); + $(elm).trigger('resize', {fullscreen: 'off'}); + } + + $(window).trigger('resize'); + }, + + toFull: function(elem) { + bodyOvf = $('body').css('overflow') || ''; + $('body').css('overflow', 'hidden'); + + $(elem).css(self.getMaximizeCss()) + .addClass(cls) + .trigger('resize', {fullscreen: 'on'}); + + checkDialog(); + + $(window).on('resize.' + namespace, resize).trigger('resize'); + + return true; + } + }, + restoreStyle = function(elem) { + if (orgStyle && orgStyle.elm == elem) { + $(elem).removeClass(cls + ' ' + clsN).attr('style', orgStyle.style); + orgStyle = null; + } + }, + resize = function(e) { + var elm; + if (e.target === window) { + resizeTm && cancelAnimationFrame(resizeTm); + resizeTm = requestAnimationFrame(function() { + if (elm = funcObj.fullElm()) { + $(elm).trigger('resize', {fullscreen: 'on'}); + } + }); + } + }; + + $(document).on('fullscreenchange.' + namespace + ' webkitfullscreenchange.' + namespace + ' mozfullscreenchange.' + namespace + ' MSFullscreenChange.' + namespace, function(e){ + if (self.UA.Fullscreen) { + var elm = funcObj.fullElm(), + win = $(window); + + resizeTm && cancelAnimationFrame(resizeTm); + if (elm === null) { + win.off('resize.' + namespace, resize); + if (orgStyle) { + elm = orgStyle.elm; + restoreStyle(elm); + $(elm).trigger('resize', {fullscreen: 'off'}); + } + } else { + $(elm).addClass(cls + ' ' + clsN) + .attr('style', 'width:100%; height:100%; margin:0; padding:0;') + .trigger('resize', {fullscreen: 'on'}); + win.on('resize.' + namespace, resize); + checkDialog(); + } + win.trigger('resize'); + } + }); + + /** + * Toggle Full Scrren Mode + * + * @param Object target + * @param Bool full + * @return Object | Null DOM node object of current full scrren + */ + self.toggleFullscreen = function(target, full) { + var elm = $(target).get(0), + curElm = null; + + curElm = funcObj.fullElm(); + if (curElm) { + if (curElm == elm) { + if (full === true) { + return curElm; + } + } else { + if (full === false) { + return curElm; + } + } + funcObj.exitFull(); + return null; + } else { + if (full === false) { + return null; + } + } + + orgStyle = {elm: elm, style: $(elm).attr('style')}; + if (funcObj.toFull(elm) !== false) { + return elm; + } else { + orgStyle = null; + return null; + } + }; + })(); + + // Closure for toggleMaximize + (function(){ + var cls = 'elfinder-maximized', + resizeTm, + resize = function(e) { + if (e.target === window && e.data && e.data.elm) { + var elm = e.data.elm; + resizeTm && cancelAnimationFrame(resizeTm); + resizeTm = requestAnimationFrame(function() { + elm.trigger('resize', {maximize: 'on'}); + }); + } + }, + exitMax = function(elm) { + $(window).off('resize.' + namespace, resize); + $('body').css('overflow', elm.data('bodyOvf')); + elm.removeClass(cls) + .attr('style', elm.data('orgStyle')) + .removeData('bodyOvf') + .removeData('orgStyle'); + elm.trigger('resize', {maximize: 'off'}); + }, + toMax = function(elm) { + elm.data('bodyOvf', $('body').css('overflow') || '') + .data('orgStyle', elm.attr('style')) + .addClass(cls) + .css(self.getMaximizeCss()); + $('body').css('overflow', 'hidden'); + $(window).on('resize.' + namespace, {elm: elm}, resize); + elm.trigger('resize', {maximize: 'on'}); + }; + + /** + * Toggle Maximize target node + * + * @param Object target + * @param Bool max + * @return void + */ + self.toggleMaximize = function(target, max) { + var elm = $(target), + maximized = elm.hasClass(cls); + + if (maximized) { + if (max === true) { + return; + } + exitMax(elm); + } else { + if (max === false) { + return; + } + toMax(elm); + } + }; + })(); + + /************* init stuffs ****************/ + Object.assign($.ui.keyCode, { + 'F1' : 112, + 'F2' : 113, + 'F3' : 114, + 'F4' : 115, + 'F5' : 116, + 'F6' : 117, + 'F7' : 118, + 'F8' : 119, + 'F9' : 120, + 'F10' : 121, + 'F11' : 122, + 'F12' : 123, + 'DIG0' : 48, + 'DIG1' : 49, + 'DIG2' : 50, + 'DIG3' : 51, + 'DIG4' : 52, + 'DIG5' : 53, + 'DIG6' : 54, + 'DIG7' : 55, + 'DIG8' : 56, + 'DIG9' : 57, + 'NUM0' : 96, + 'NUM1' : 97, + 'NUM2' : 98, + 'NUM3' : 99, + 'NUM4' : 100, + 'NUM5' : 101, + 'NUM6' : 102, + 'NUM7' : 103, + 'NUM8' : 104, + 'NUM9' : 105, + 'CONTEXTMENU' : 93, + 'DOT' : 190 + }); + + this.dragUpload = false; + this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined'; + + // configure transport object + this.transport = {}; + + if (typeof(this.options.transport) == 'object') { + this.transport = this.options.transport; + if (typeof(this.transport.init) == 'function') { + this.transport.init(this); + } + } + + if (typeof(this.transport.send) != 'function') { + this.transport.send = function(opts) { + if (!self.UA.IE) { + // keep native xhr object for handling property responseURL + opts._xhr = new XMLHttpRequest(); + opts.xhr = function() { return opts._xhr; }; + } + return $.ajax(opts); + }; + } + + if (this.transport.upload == 'iframe') { + this.transport.upload = $.proxy(this.uploads.iframe, this); + } else if (typeof(this.transport.upload) == 'function') { + this.dragUpload = !!this.options.dragUploadAllow; + } else if (this.xhrUpload && !!this.options.dragUploadAllow) { + this.transport.upload = $.proxy(this.uploads.xhr, this); + this.dragUpload = true; + } else { + this.transport.upload = $.proxy(this.uploads.iframe, this); + } + + /** + * Decoding 'raw' string converted to unicode + * + * @param String str + * @return String + */ + this.decodeRawString = function(str) { + var charCodes = function(str) { + var i, len, arr; + for (i=0,len=str.length,arr=[]; i= 0xd800 && c <= 0xdbff) { + scalars.push((c & 1023) + 64 << 10 | arr[++i] & 1023); + } else { + scalars.push(c); + } + } + return scalars; + }, + decodeUTF8 = function(arr) { + var i, len, c, str, char = String.fromCharCode; + for (i=0,len=arr.length,str=""; c=arr[i],i= 0xc2) { + str += char((c&31)<<6 | arr[++i]&63); + } else if (c <= 0xef && c >= 0xe0) { + str += char((c&15)<<12 | (arr[++i]&63)<<6 | arr[++i]&63); + } else if (c <= 0xf7 && c >= 0xf0) { + str += char( + 0xd800 | ((c&7)<<8 | (arr[++i]&63)<<2 | arr[++i]>>>4&3) - 64, + 0xdc00 | (arr[i++]&15)<<6 | arr[i]&63 + ); + } else { + str += char(0xfffd); + } + } + return str; + }; + + return decodeUTF8(scalarValues(str)); + }; + + /** + * Gets target file contents by file.hash + * + * @param String hash The hash + * @param String responseType 'blob' or 'arraybuffer' (default) + * @return arraybuffer|blob The contents. + */ + this.getContents = function(hash, responseType) { + var self = this, + dfd = $.Deferred(), + type = responseType || 'arraybuffer', + url, req; + + dfd.fail(function() { + req && req.state() === 'pending' && req.reject(); + }); + + url = self.openUrl(hash); + if (!self.isSameOrigin(url)) { + url = self.openUrl(hash, true); + } + req = self.request({ + data : {cmd : 'get'}, + options : { + url: url, + type: 'get', + cache : true, + dataType : 'binary', + responseType : type, + processData: false + } + }) + .fail(function() { + dfd.reject(); + }) + .done(function(data) { + dfd.resolve(data); + }); + + return dfd; + }; + + this.getMimetype = function(name, orgMime) { + var mime = orgMime, + ext, m; + m = (name + '').match(/\.([^.]+)$/); + if (m && (ext = m[1])) { + if (!extToMimeTable) { + extToMimeTable = self.arrayFlip(self.mimeTypes); + } + if (!(mime = extToMimeTable[ext.toLowerCase()])) { + mime = orgMime; + } + } + return mime; + }; + + /** + * Supported check hash algorisms + * + * @type Array + */ + self.hashCheckers = []; + + /** + * Closure of getContentsHashes() + */ + (function(self) { + var hashLibs = { + check : true + }, + md5Calc = function(arr) { + var spark = new hashLibs.SparkMD5.ArrayBuffer(), + job; + + job = self.asyncJob(function(buf) { + spark.append(buf); + }, arr).done(function() { + job._md5 = spark.end(); + }); + + return job; + }, + shaCalc = function(arr, length) { + var sha, job; + + try { + sha = new hashLibs.jsSHA('SHA' + (length.substr(0, 1) === '3'? length : ('-' + length)), 'ARRAYBUFFER'); + job = self.asyncJob(function(buf) { + sha.update(buf); + }, arr).done(function() { + job._sha = sha.getHash('HEX'); + }); + } catch(e) { + job = $.Deferred.reject(); + } + + return job; + }; + + // make fm.hashCheckers + if (self.options.cdns.sparkmd5) { + self.hashCheckers.push('md5'); + } + if (self.options.cdns.jssha) { + self.hashCheckers = self.hashCheckers.concat(['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128', 'shake256']); + } + + /** + * Gets the contents hashes. + * + * @param String target target file.hash + * @param Object needHashes need hash lib names + * @return Object hashes with lib name as key + */ + self.getContentsHashes = function(target, needHashes) { + var dfd = $.Deferred(), + needs = self.arrayFlip(needHashes || ['md5'], true), + libs = [], + jobs = [], + res = {}, + req; + + dfd.fail(function() { + req && req.reject(); + }); + + if (hashLibs.check) { + + delete hashLibs.check; + + // load SparkMD5 + var libsmd5 = $.Deferred(); + if (window.ArrayBuffer && self.options.cdns.sparkmd5) { + libs.push(libsmd5); + self.loadScript([self.options.cdns.sparkmd5], + function(res) { + var SparkMD5 = res || window.SparkMD5; + window.SparkMD5 && delete window.SparkMD5; + libsmd5.resolve(); + if (SparkMD5) { + hashLibs.SparkMD5 = SparkMD5; + } + }, + { + tryRequire: true, + error: function() { + libsmd5.reject(); + } + } + ); + } + + // load jsSha + var libssha = $.Deferred(); + if (window.ArrayBuffer && self.options.cdns.jssha) { + libs.push(libssha); + self.loadScript([self.options.cdns.jssha], + function(res) { + var jsSHA = res || window.jsSHA; + window.jsSHA && delete window.jsSHA; + libssha.resolve(); + if (jsSHA) { + hashLibs.jsSHA = jsSHA; + } + }, + { + tryRequire: true, + error: function() { + libssha.reject(); + } + } + ); + } + } + + $.when.apply(null, libs).always(function() { + if (Object.keys(hashLibs).length) { + req = self.getContents(target).done(function(arrayBuffer) { + var arr = (arrayBuffer instanceof ArrayBuffer && arrayBuffer.byteLength > 0)? self.sliceArrayBuffer(arrayBuffer, 1048576) : false, + i; + + if (needs.md5 && hashLibs.SparkMD5) { + jobs.push(function() { + var job = md5Calc(arr).done(function() { + var f; + res.md5 = job._md5; + if (f = self.file(target)) { + f.md5 = job._md5; + } + dfd.notify(res); + }); + dfd.fail(function() { + job.reject(); + }); + return job; + }); + } + if (hashLibs.jsSHA) { + $.each(['1', '224', '256', '384', '512', '3-224', '3-256', '3-384', '3-512', 'ke128', 'ke256'], function(i, v) { + if (needs['sha' + v]) { + jobs.push(function() { + var job = shaCalc(arr, v).done(function() { + var f; + res['sha' + v] = job._sha; + if (f = self.file(target)) { + f['sha' + v] = job._sha; + } + dfd.notify(res); + }); + return job; + }); + } + }); + } + if (jobs.length) { + self.sequence(jobs).always(function() { + dfd.resolve(res); + }); + } else { + dfd.reject(); + } + }).fail(function() { + dfd.reject(); + }); + } else { + dfd.reject(); + } + }); + + return dfd; + }; + })(this); + + /** + * Parse error value to display + * + * @param Mixed error + * @return Mixed parsed error + */ + this.parseError = function(error) { + var arg = error; + if ($.isPlainObject(arg)) { + arg = arg.error; + } + return arg; + }; + + /** + * Alias for this.trigger('error', {error : 'message'}) + * + * @param String error message + * @return elFinder + **/ + this.error = function() { + var arg = arguments[0], + opts = arguments[1] || null, + err; + if (arguments.length == 1 && typeof(arg) === 'function') { + return self.bind('error', arg); + } else { + err = this.parseError(arg); + return (err === true || !err)? this : self.trigger('error', {error: err, opts : opts}); + } + }; + + // create bind/trigger aliases for build-in events + $.each(events, function(i, name) { + self[name] = function() { + var arg = arguments[0]; + return arguments.length == 1 && typeof(arg) == 'function' + ? self.bind(name, arg) + : self.trigger(name, $.isPlainObject(arg) ? arg : {}); + }; + }); + + // bind core event handlers + this + .enable(function() { + if (!enabled && self.api && self.visible() && self.ui.overlay.is(':hidden') && ! node.children('.elfinder-dialog.' + self.res('class', 'editing') + ':visible').length) { + enabled = true; + document.activeElement && document.activeElement.blur(); + node.removeClass('elfinder-disabled'); + } + }) + .disable(function() { + prevEnabled = enabled; + enabled = false; + node.addClass('elfinder-disabled'); + }) + .open(function() { + selected = []; + }) + .select(function(e) { + var cnt = 0, + unselects = []; + selected = $.grep(e.data.selected || e.data.value|| [], function(hash) { + if (unselects.length || (self.maxTargets && ++cnt > self.maxTargets)) { + unselects.push(hash); + return false; + } else { + return files[hash] ? true : false; + } + }); + if (unselects.length) { + self.trigger('unselectfiles', {files: unselects, inselect: true}); + self.toast({mode: 'warning', msg: self.i18n(['errMaxTargets', self.maxTargets])}); + } + }) + .error(function(e) { + var opts = { + cssClass : 'elfinder-dialog-error', + title : self.i18n(self.i18n('error')), + resizable : false, + destroyOnClose : true, + buttons : {} + }; + + opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { $(this).elfinderdialog('close'); }; + + if (e.data.opts && $.isPlainObject(e.data.opts)) { + Object.assign(opts, e.data.opts); + } + + self.dialog(''+self.i18n(e.data.error), opts); + }) + .bind('tmb', function(e) { + $.each(e.data.images||[], function(hash, tmb) { + if (files[hash]) { + files[hash].tmb = tmb; + } + }); + }) + .bind('searchstart', function(e) { + Object.assign(self.searchStatus, e.data); + self.searchStatus.state = 1; + }) + .bind('search', function(e) { + self.searchStatus.state = 2; + }) + .bind('searchend', function() { + self.searchStatus.state = 0; + self.searchStatus.ininc = false; + self.searchStatus.mixed = false; + }) + .bind('canMakeEmptyFile', function(e) { + var data = e.data, + obj = {}; + if (data && Array.isArray(data.mimes)) { + if (!data.unshift) { + obj = self.mimesCanMakeEmpty; + } + $.each(data.mimes, function() { + if (!obj[this]) { + obj[this] = self.mimeTypes[this]; + } + }); + if (data.unshift) { + self.mimesCanMakeEmpty = Object.assign(obj, self.mimesCanMakeEmpty); + } + } + }) + .bind('themechange', function() { + requestAnimationFrame(function() { + self.trigger('uiresize'); + }); + }) + ; + + // We listen and emit a sound on delete according to option + if (true === this.options.sound) { + this.bind('playsound', function(e) { + var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"'), + file = e.data && e.data.soundFile; + + play && file && play != '' && play != 'no' && $(beeper).html('')[0].play(); + }); + } + + // bind external event handlers + $.each(this.options.handlers, function(event, callback) { + self.bind(event, callback); + }); + + /** + * History object. Store visited folders + * + * @type Object + **/ + this.history = new this.history(this); + + /** + * Root hashed + * + * @type Object + */ + this.roots = {}; + + /** + * leaf roots + * + * @type Object + */ + this.leafRoots = {}; + + this.volumeExpires = {}; + + /** + * Loaded commands + * + * @type Object + **/ + this._commands = {}; + + if (!Array.isArray(this.options.commands)) { + this.options.commands = []; + } + + if ($.inArray('*', this.options.commands) !== -1) { + this.options.commands = Object.keys(this.commands); + } + + /** + * UI command map of cwd volume ( That volume driver option `uiCmdMap` ) + * + * @type Object + **/ + this.commandMap = {}; + + /** + * cwd options of each volume + * key: volumeid + * val: options object + * + * @type Object + */ + this.volOptions = {}; + + /** + * Has volOptions data + * + * @type Boolean + */ + this.hasVolOptions = false; + + /** + * Hash of trash holders + * key: trash folder hash + * val: source volume hash + * + * @type Object + */ + this.trashes = {}; + + /** + * cwd options of each folder/file + * key: hash + * val: options object + * + * @type Object + */ + this.optionsByHashes = {}; + + /** + * UI Auto Hide Functions + * Each auto hide function mast be call to `fm.trigger('uiautohide')` at end of process + * + * @type Array + **/ + this.uiAutoHide = []; + + // trigger `uiautohide` + this.one('open', function() { + if (self.uiAutoHide.length) { + setTimeout(function() { + self.trigger('uiautohide'); + }, 500); + } + }); + + // Auto Hide Functions sequential processing start + this.bind('uiautohide', function() { + if (self.uiAutoHide.length) { + self.uiAutoHide.shift()(); + } + }); + + if (this.options.width) { + width = this.options.width; + } + + if (this.options.height) { + height = this.options.height; + } + + if (this.options.heightBase) { + heightBase = $(this.options.heightBase); + } + + if (this.options.soundPath) { + soundPath = this.options.soundPath.replace(/\/+$/, '') + '/'; + } else { + soundPath = this.baseUrl + soundPath; + } + + self.one('opendone', function() { + var tm; + // attach events to document + $(document) + // disable elfinder on click outside elfinder + .on('click.'+namespace, function(e) { enabled && ! self.options.enableAlways && !$(e.target).closest(node).length && self.disable(); }) + // exec shortcuts + .on(keydown+' '+keypress+' '+keyup+' '+mousedown, execShortcut); + + // attach events to window + self.options.useBrowserHistory && $(window) + .on('popstate.' + namespace, function(ev) { + var state = ev.originalEvent.state || {}, + hasThash = state.thash? true : false, + dialog = node.find('.elfinder-frontmost:visible'), + input = node.find('.elfinder-navbar-dir,.elfinder-cwd-filename').find('input,textarea'), + onOpen, toast; + if (!hasThash) { + state = { thash: self.cwd().hash }; + // scroll to elFinder node + $('html,body').animate({ scrollTop: node.offset().top }); + } + if (dialog.length || input.length) { + history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); + if (dialog.length) { + if (!dialog.hasClass(self.res('class', 'preventback'))) { + if (dialog.hasClass('elfinder-contextmenu')) { + $(document).trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); + } else if (dialog.hasClass('elfinder-dialog')) { + dialog.elfinderdialog('close'); + } else { + dialog.trigger('close'); + } + } + } else { + input.trigger($.Event('keydown', { keyCode: $.ui.keyCode.ESCAPE, ctrlKey : false, shiftKey : false, altKey : false, metaKey : false })); + } + } else { + if (hasThash) { + !$.isEmptyObject(self.files()) && self.request({ + data : {cmd : 'open', target : state.thash, onhistory : 1}, + notify : {type : 'open', cnt : 1, hideCnt : true}, + syncOnFail : true + }); + } else { + onOpen = function() { + toast.trigger('click'); + }; + self.one('open', onOpen, true); + toast = self.toast({ + msg: self.i18n('pressAgainToExit'), + onHidden: function() { + self.unbind('open', onOpen); + history.pushState(state, null, location.pathname + location.search + '#elf_' + state.thash); + } + }); + } + } + }); + + $(window).on('resize.' + namespace, function(e){ + if (e.target === this) { + tm && cancelAnimationFrame(tm); + tm = requestAnimationFrame(function() { + var prv = node.data('resizeSize') || {w: 0, h: 0}, + size = {w: Math.round(node.width()), h: Math.round(node.height())}; + node.data('resizeSize', size); + if (size.w !== prv.w || size.h !== prv.h) { + node.trigger('resize'); + self.trigger('resize', {width : size.w, height : size.h}); + } + }); + } + }) + .on('beforeunload.' + namespace,function(e){ + var msg, cnt; + if (node.is(':visible')) { + if (self.ui.notify.children().length && $.inArray('hasNotifyDialog', self.options.windowCloseConfirm) !== -1) { + msg = self.i18n('ntfsmth'); + } else if (node.find('.'+self.res('class', 'editing')).length && $.inArray('editingFile', self.options.windowCloseConfirm) !== -1) { + msg = self.i18n('editingFile'); + } else if ((cnt = Object.keys(self.selected()).length) && $.inArray('hasSelectedItem', self.options.windowCloseConfirm) !== -1) { + msg = self.i18n('hasSelected', ''+cnt); + } else if ((cnt = Object.keys(self.clipboard()).length) && $.inArray('hasClipboardData', self.options.windowCloseConfirm) !== -1) { + msg = self.i18n('hasClipboard', ''+cnt); + } + if (msg) { + e.returnValue = msg; + return msg; + } + } + self.trigger('unload'); + }); + + // bind window onmessage for CORS + $(window).on('message.' + namespace, function(e){ + var res = e.originalEvent || null, + obj, data; + if (res && self.uploadURL.indexOf(res.origin) === 0) { + try { + obj = JSON.parse(res.data); + data = obj.data || null; + if (data) { + if (data.error) { + if (obj.bind) { + self.trigger(obj.bind+'fail', data); + } + self.error(data.error); + } else { + data.warning && self.error(data.warning); + self.updateCache(data); + data.removed && data.removed.length && self.remove(data); + data.added && data.added.length && self.add(data); + data.changed && data.changed.length && self.change(data); + if (obj.bind) { + self.trigger(obj.bind, data); + self.trigger(obj.bind+'done'); + } + data.sync && self.sync(); + } + } + } catch (e) { + self.sync(); + } + } + }); + + // elFinder enable always + if (self.options.enableAlways) { + $(window).on('focus.' + namespace, function(e){ + (e.target === this) && self.enable(); + }); + if (inFrame) { + $(window.top).on('focus.' + namespace, function() { + if (self.enable() && (! parentIframe || parentIframe.is(':visible'))) { + requestAnimationFrame(function() { + $(window).trigger('focus'); + }); + } + }); + } + } else if (inFrame) { + $(window).on('blur.' + namespace, function(e){ + enabled && e.target === this && self.disable(); + }); + } + + // return focus to the window on click (elFInder in the frame) + if (inFrame) { + node.on('click', function(e) { + $(window).trigger('focus'); + }); + } + + // elFinder to enable by mouse over + if (self.options.enableByMouseOver) { + node.on('mouseenter touchstart', function(e) { + (inFrame) && $(window).trigger('focus'); + ! self.enabled() && self.enable(); + }); + } + }); + + // store instance in node + node[0].elfinder = this; + + // auto load language file + dfrdsBeforeBootup.push((function() { + var lang = self.lang, + langJs = self.i18nBaseUrl + 'elfinder.' + lang + '.js', + dfd = $.Deferred().done(function() { + if (self.i18[lang]) { + self.lang = lang; + } + self.trigger('i18load'); + i18n = self.lang === 'en' + ? self.i18['en'] + : $.extend(true, {}, self.i18['en'], self.i18[self.lang]); + }); + + if (!self.i18[lang]) { + self.lang = 'en'; + if (self.hasRequire) { + require([langJs], function() { + dfd.resolve(); + }, function() { + dfd.resolve(); + }); + } else { + self.loadScript([langJs], function() { + dfd.resolve(); + }, { + loadType: 'tag', + error : function() { + dfd.resolve(); + } + }); + } + } else { + dfd.resolve(); + } + return dfd; + })()); + + // elFinder boot up function + bootUp = function() { + var columnNames; + + /** + * i18 messages + * + * @type Object + **/ + self.messages = i18n.messages; + + // check jquery ui + if (!($.fn.selectable && $.fn.draggable && $.fn.droppable && $.fn.resizable && $.fn.slider)) { + return alert(self.i18n('errJqui')); + } + + // check node + if (!node.length) { + return alert(self.i18n('errNode')); + } + // check connector url + if (!self.options.url) { + return alert(self.i18n('errURL')); + } + + // column key/name map for fm.getColumnName() + columnNames = Object.assign({ + name : self.i18n('name'), + perm : self.i18n('perms'), + date : self.i18n('modify'), + size : self.i18n('size'), + kind : self.i18n('kind'), + modestr : self.i18n('mode'), + modeoct : self.i18n('mode'), + modeboth : self.i18n('mode') + }, self.options.uiOptions.cwd.listView.columnsCustomName); + + /** + * Gets the column name of cwd list view + * + * @param String key The key + * @return String The column name. + */ + self.getColumnName = function(key) { + return columnNames[key] || self.i18n(key); + }; + + /** + * Interface direction + * + * @type String + * @default "ltr" + **/ + self.direction = i18n.direction; + + /** + * Date/time format + * + * @type String + * @default "m.d.Y" + **/ + self.dateFormat = self.options.dateFormat || i18n.dateFormat; + + /** + * Date format like "Yesterday 10:20:12" + * + * @type String + * @default "{day} {time}" + **/ + self.fancyFormat = self.options.fancyDateFormat || i18n.fancyDateFormat; + + /** + * Date format for if upload file has not original unique name + * e.g. Clipboard image data, Image data taken with iOS + * + * @type String + * @default "ymd-His" + **/ + self.nonameDateFormat = (self.options.nonameDateFormat || i18n.nonameDateFormat).replace(/[\/\\]/g, '_'); + + /** + * Css classes + * + * @type String + **/ + self.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-' + +(self.direction == 'rtl' ? 'rtl' : 'ltr') + +(self.UA.Touch? (' elfinder-touch' + (self.options.resizable ? ' touch-punch' : '')) : '') + +(self.UA.Mobile? ' elfinder-mobile' : '') + +(self.UA.iOS? ' elfinder-ios' : '') + +' '+self.options.cssClass; + + // prepare node + node.addClass(self.cssClass) + .on(mousedown, function() { + !enabled && self.enable(); + }); + + // draggable closure + (function() { + var ltr, wzRect, wzBottom, wzBottom2, nodeStyle, + keyEvt = keydown + 'draggable' + ' keyup.' + namespace + 'draggable'; + + /** + * Base draggable options + * + * @type Object + **/ + self.draggable = { + appendTo : node, + addClasses : false, + distance : 4, + revert : true, + refreshPositions : false, + cursor : 'crosshair', + cursorAt : {left : 50, top : 47}, + scroll : false, + start : function(e, ui) { + var helper = ui.helper, + targets = $.grep(helper.data('files')||[], function(h) { + if (h) { + remember[h] = true; + return true; + } + return false; + }), + locked = false, + cnt, h; + + // fix node size + nodeStyle = node.attr('style'); + node.width(node.width()).height(node.height()); + + // set var for drag() + ltr = (self.direction === 'ltr'); + wzRect = self.getUI('workzone').data('rectangle'); + wzBottom = wzRect.top + wzRect.height; + wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true); + + self.draggingUiHelper = helper; + cnt = targets.length; + while (cnt--) { + h = targets[cnt]; + if (files[h].locked) { + locked = true; + helper.data('locked', true); + break; + } + } + !locked && self.trigger('lockfiles', {files : targets}); + + helper.data('autoScrTm', setInterval(function() { + if (helper.data('autoScr')) { + self.autoScroll[helper.data('autoScr')](helper.data('autoScrVal')); + } + }, 50)); + }, + drag : function(e, ui) { + var helper = ui.helper, + autoScr, autoUp, bottom; + + if ((autoUp = wzRect.top > e.pageY) || wzBottom2 < e.pageY) { + if (wzRect.cwdEdge > e.pageX) { + autoScr = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); + } else { + autoScr = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); + } + if (!autoUp) { + if (autoScr.substr(0, 3) === 'cwd') { + if (wzBottom < e.pageY) { + bottom = wzBottom; + } else { + autoScr = null; + } + } else { + bottom = wzBottom2; + } + } + if (autoScr) { + helper.data('autoScr', autoScr); + helper.data('autoScrVal', Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - bottom), 1.3)); + } + } + if (! autoScr) { + if (helper.data('autoScr')) { + helper.data('refreshPositions', 1).data('autoScr', null); + } + } + if (helper.data('refreshPositions') && $(this).elfUiWidgetInstance('draggable')) { + if (helper.data('refreshPositions') > 0) { + $(this).draggable('option', { refreshPositions : true, elfRefresh : true }); + helper.data('refreshPositions', -1); + } else { + $(this).draggable('option', { refreshPositions : false, elfRefresh : false }); + helper.data('refreshPositions', null); + } + } + }, + stop : function(e, ui) { + var helper = ui.helper, + files; + + $(document).off(keyEvt); + $(this).elfUiWidgetInstance('draggable') && $(this).draggable('option', { refreshPositions : false }); + self.draggingUiHelper = null; + self.trigger('focus').trigger('dragstop'); + if (! helper.data('droped')) { + files = $.grep(helper.data('files')||[], function(h) { return h? true : false ;}); + self.trigger('unlockfiles', {files : files}); + self.trigger('selectfiles', {files : self.selected()}); + } + self.enable(); + + // restore node style + node.attr('style', nodeStyle); + + helper.data('autoScrTm') && clearInterval(helper.data('autoScrTm')); + }, + helper : function(e, ui) { + var element = this.id ? $(this) : $(this).parents('[id]:first'), + helper = $('
'), + icon = function(f) { + var mime = f.mime, i, tmb = self.tmb(f); + i = '
'; + if (tmb) { + i = $(i).addClass(tmb.className).css('background-image', "url('"+tmb.url+"')").get(0).outerHTML; + } else if (f.icon) { + i = $(i).css(self.getIconStyle(f, true)).get(0).outerHTML; + } + if (f.csscls) { + i = '
' + i + '
'; + } + return i; + }, + hashes, l, ctr; + + self.draggingUiHelper && self.draggingUiHelper.stop(true, true); + + self.trigger('dragstart', {target : element[0], originalEvent : e}, true); + + hashes = element.hasClass(self.res('class', 'cwdfile')) + ? self.selected() + : [self.navId2Hash(element.attr('id'))]; + + helper.append(icon(files[hashes[0]])).data('files', hashes).data('locked', false).data('droped', false).data('namespace', namespace).data('dropover', 0); + + if ((l = hashes.length) > 1) { + helper.append(icon(files[hashes[l-1]]) + ''+l+''); + } + + $(document).on(keyEvt, function(e){ + var chk = (e.shiftKey||e.ctrlKey||e.metaKey); + if (ctr !== chk) { + ctr = chk; + if (helper.is(':visible') && helper.data('dropover') && ! helper.data('droped')) { + helper.toggleClass('elfinder-drag-helper-plus', helper.data('locked')? true : ctr); + self.trigger(ctr? 'unlockfiles' : 'lockfiles', {files : hashes, helper: helper}); + } + } + }); + + return helper; + } + }; + })(); + + // in getFileCallback set - change default actions on double click/enter/ctrl+enter + if (self.commands.getfile) { + if (typeof(self.options.getFileCallback) == 'function') { + self.bind('dblclick', function(e) { + e.preventDefault(); + self.exec('getfile').fail(function() { + self.exec('open', e.data && e.data.file? [ e.data.file ]: void(0)); + }); + }); + self.shortcut({ + pattern : 'enter', + description : self.i18n('cmdgetfile'), + callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); }); } + }) + .shortcut({ + pattern : 'ctrl+enter', + description : self.i18n(self.OS == 'mac' ? 'cmdrename' : 'cmdopen'), + callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open'); } + }); + } else { + self.options.getFileCallback = null; + } + } + + // load commands + $.each(self.commands, function(name, cmd) { + var proto = Object.assign({}, cmd.prototype), + extendsCmd, opts; + if ($.isFunction(cmd) && !self._commands[name] && (cmd.prototype.forceLoad || $.inArray(name, self.options.commands) !== -1)) { + extendsCmd = cmd.prototype.extendsCmd || ''; + if (extendsCmd) { + if ($.isFunction(self.commands[extendsCmd])) { + cmd.prototype = Object.assign({}, base, new self.commands[extendsCmd](), cmd.prototype); + } else { + return true; + } + } else { + cmd.prototype = Object.assign({}, base, cmd.prototype); + } + self._commands[name] = new cmd(); + cmd.prototype = proto; + opts = self.options.commandsOptions[name] || {}; + if (extendsCmd && self.options.commandsOptions[extendsCmd]) { + opts = $.extend(true, {}, self.options.commandsOptions[extendsCmd], opts); + } + self._commands[name].setup(name, opts); + // setup linked commands + if (self._commands[name].linkedCmds.length) { + $.each(self._commands[name].linkedCmds, function(i, n) { + var lcmd = self.commands[n]; + if ($.isFunction(lcmd) && !self._commands[n]) { + lcmd.prototype = base; + self._commands[n] = new lcmd(); + self._commands[n].setup(n, self.options.commandsOptions[n]||{}); + } + }); + } + } + }); + + /** + * UI nodes + * + * @type Object + **/ + self.ui = { + // container for nav panel and current folder container + workzone : $('
').appendTo(node).elfinderworkzone(self), + // container for folders tree / places + navbar : $('
').appendTo(node).elfindernavbar(self, self.options.uiOptions.navbar || {}), + // container for for preview etc at below the navbar + navdock : $('
').appendTo(node).elfindernavdock(self, self.options.uiOptions.navdock || {}), + // contextmenu + contextmenu : $('
').appendTo(node).elfindercontextmenu(self), + // overlay + overlay : $('
').appendTo(node).elfinderoverlay({ + show : function() { self.disable(); }, + hide : function() { prevEnabled && self.enable(); } + }), + // current folder container + cwd : $('
').appendTo(node).elfindercwd(self, self.options.uiOptions.cwd || {}), + // notification dialog window + notify : self.dialog('', { + cssClass : 'elfinder-dialog-notify', + position : self.options.notifyDialog.position, + absolute : true, + resizable : false, + autoOpen : false, + closeOnEscape : false, + title : ' ', + width : self.options.notifyDialog.width? parseInt(self.options.notifyDialog.width) : null, + minHeight : null + }), + statusbar : $('
').hide().appendTo(node), + toast : $('
').appendTo(node), + bottomtray : $('
').appendTo(node) + }; + + self.trigger('uiready'); + + // load required ui + $.each(self.options.ui || [], function(i, ui) { + var name = 'elfinder'+ui, + opts = self.options.uiOptions[ui] || {}; + + if (!self.ui[ui] && $.fn[name]) { + // regist to self.ui before make instance + self.ui[ui] = $('<'+(opts.tag || 'div')+'/>').appendTo(node); + self.ui[ui][name](self, opts); + } + }); + + // update size + self.resize(width, height); + + // make node resizable + if (self.options.resizable) { + node.resizable({ + resize : function(e, ui) { + self.resize(ui.size.width, ui.size.height); + }, + handles : 'se', + minWidth : 300, + minHeight : 200 + }); + if (self.UA.Touch) { + node.addClass('touch-punch'); + } + } + + (function() { + var navbar = self.getUI('navbar'), + cwd = self.getUI('cwd').parent(); + + self.autoScroll = { + navbarUp : function(v) { + navbar.scrollTop(Math.max(0, navbar.scrollTop() - v)); + }, + navbarDown : function(v) { + navbar.scrollTop(navbar.scrollTop() + v); + }, + cwdUp : function(v) { + cwd.scrollTop(Math.max(0, cwd.scrollTop() - v)); + }, + cwdDown : function(v) { + cwd.scrollTop(cwd.scrollTop() + v); + } + }; + })(); + + // Swipe on the touch devices to show/hide of toolbar or navbar + if (self.UA.Touch) { + (function() { + var lastX, lastY, nodeOffset, nodeWidth, nodeTop, navbarW, toolbarH, + navbar = self.getUI('navbar'), + toolbar = self.getUI('toolbar'), + moveEv = 'touchmove.stopscroll', + moveTm, + moveUpOn = function(e) { + var touches = e.originalEvent.touches || [{}], + y = touches[0].pageY || null; + if (!lastY || y < lastY) { + e.preventDefault(); + moveTm && clearTimeout(moveTm); + } + }, + moveDownOn = function(e) { + e.preventDefault(); + moveTm && clearTimeout(moveTm); + }, + moveOff = function() { + moveTm = setTimeout(function() { + node.off(moveEv); + }, 100); + }, + handleW, handleH = 50; + + navbar = navbar.children().length? navbar : null; + toolbar = toolbar.length? toolbar : null; + node.on('touchstart touchmove touchend', function(e) { + if (e.type === 'touchend') { + lastX = false; + lastY = false; + moveOff(); + return; + } + + var touches = e.originalEvent.touches || [{}], + x = touches[0].pageX || null, + y = touches[0].pageY || null, + ltr = (self.direction === 'ltr'), + navbarMode, treeWidth, swipeX, moveX, toolbarT, mode; + + if (x === null || y === null || (e.type === 'touchstart' && touches.length > 1)) { + return; + } + + if (e.type === 'touchstart') { + nodeOffset = node.offset(); + nodeWidth = node.width(); + if (navbar) { + lastX = false; + if (navbar.is(':hidden')) { + if (! handleW) { + handleW = Math.max(50, nodeWidth / 10); + } + if ((ltr? (x - nodeOffset.left) : (nodeWidth + nodeOffset.left - x)) < handleW) { + lastX = x; + } + } else if (! e.originalEvent._preventSwipeX) { + navbarW = navbar.width(); + if (ltr) { + swipeX = (x < nodeOffset.left + navbarW); + } else { + swipeX = (x > nodeOffset.left + nodeWidth - navbarW); + } + if (swipeX) { + handleW = Math.max(50, nodeWidth / 10); + lastX = x; + } else { + lastX = false; + } + } + } + if (toolbar) { + lastY = false; + if (! e.originalEvent._preventSwipeY) { + toolbarH = toolbar.height(); + nodeTop = nodeOffset.top; + if (y - nodeTop < (toolbar.is(':hidden')? handleH : (toolbarH + 30))) { + lastY = y; + node.on(moveEv, toolbar.is(':hidden')? moveDownOn: moveUpOn); + } + } + } + } else { + if (navbar && lastX !== false) { + navbarMode = (ltr? (lastX > x) : (lastX < x))? 'navhide' : 'navshow'; + moveX = Math.abs(lastX - x); + if (navbarMode === 'navhide' && moveX > navbarW * 0.6 + || (moveX > (navbarMode === 'navhide'? navbarW / 3 : 45) + && (navbarMode === 'navshow' + || (ltr? x < nodeOffset.left + 20 : x > nodeOffset.left + nodeWidth - 20) + )) + ) { + self.getUI('navbar').trigger(navbarMode, {handleW: handleW}); + lastX = false; + } + } + if (toolbar && lastY !== false ) { + toolbarT = toolbar.offset().top; + if (Math.abs(lastY - y) > Math.min(45, toolbarH / 3)) { + mode = (lastY > y)? 'slideUp' : 'slideDown'; + if (mode === 'slideDown' || toolbarT + 20 > y) { + if (toolbar.is(mode === 'slideDown' ? ':hidden' : ':visible')) { + toolbar.stop(true, true).trigger('toggle', {duration: 100, handleH: handleH}); + } + lastY = false; + } + } + } + } + }); + })(); + } + + if (self.dragUpload) { + // add event listener for HTML5 DnD upload + (function() { + var isin = function(e) { + return (e.target.nodeName !== 'TEXTAREA' && e.target.nodeName !== 'INPUT' && $(e.target).closest('div.ui-dialog-content').length === 0); + }, + ent = 'native-drag-enter', + disable = 'native-drag-disable', + c = 'class', + navdir = self.res(c, 'navdir'), + droppable = self.res(c, 'droppable'), + dropover = self.res(c, 'adroppable'), + arrow = self.res(c, 'navarrow'), + clDropActive = self.res(c, 'adroppable'), + wz = self.getUI('workzone'), + ltr = (self.direction === 'ltr'), + clearTm = function() { + autoScrTm && cancelAnimationFrame(autoScrTm); + autoScrTm = null; + }, + wzRect, autoScrFn, autoScrTm; + + node.on('dragenter', function(e) { + clearTm(); + if (isin(e)) { + e.preventDefault(); + e.stopPropagation(); + wzRect = wz.data('rectangle'); + } + }) + .on('dragleave', function(e) { + clearTm(); + if (isin(e)) { + e.preventDefault(); + e.stopPropagation(); + } + }) + .on('dragover', function(e) { + var autoUp; + if (isin(e)) { + e.preventDefault(); + e.stopPropagation(); + e.originalEvent.dataTransfer.dropEffect = 'none'; + if (! autoScrTm) { + autoScrTm = requestAnimationFrame(function() { + var wzBottom = wzRect.top + wzRect.height, + wzBottom2 = wzBottom - self.getUI('navdock').outerHeight(true), + fn; + if ((autoUp = e.pageY < wzRect.top) || e.pageY > wzBottom2 ) { + if (wzRect.cwdEdge > e.pageX) { + fn = (ltr? 'navbar' : 'cwd') + (autoUp? 'Up' : 'Down'); + } else { + fn = (ltr? 'cwd' : 'navbar') + (autoUp? 'Up' : 'Down'); + } + if (!autoUp) { + if (fn.substr(0, 3) === 'cwd') { + if (wzBottom < e.pageY) { + wzBottom2 = wzBottom; + } else { + fn = ''; + } + } + } + fn && self.autoScroll[fn](Math.pow((autoUp? wzRect.top - e.pageY : e.pageY - wzBottom2), 1.3)); + } + autoScrTm = null; + }); + } + } else { + clearTm(); + } + }) + .on('drop', function(e) { + clearTm(); + if (isin(e)) { + e.stopPropagation(); + e.preventDefault(); + } + }); + + node.on('dragenter', '.native-droppable', function(e){ + if (e.originalEvent.dataTransfer) { + var $elm = $(e.currentTarget), + id = e.currentTarget.id || null, + cwd = null, + elfFrom; + if (!id) { // target is cwd + cwd = self.cwd(); + $elm.data(disable, false); + try { + $.each(e.originalEvent.dataTransfer.types, function(i, v){ + if (v.substr(0, 13) === 'elfinderfrom:') { + elfFrom = v.substr(13).toLowerCase(); + } + }); + } catch(e) {} + } + if (!cwd || (cwd.write && (!elfFrom || elfFrom !== (window.location.href + cwd.hash).toLowerCase()))) { + e.preventDefault(); + e.stopPropagation(); + $elm.data(ent, true); + $elm.addClass(clDropActive); + } else { + $elm.data(disable, true); + } + } + }) + .on('dragleave', '.native-droppable', function(e){ + if (e.originalEvent.dataTransfer) { + var $elm = $(e.currentTarget); + e.preventDefault(); + e.stopPropagation(); + if ($elm.data(ent)) { + $elm.data(ent, false); + } else { + $elm.removeClass(clDropActive); + } + } + }) + .on('dragover', '.native-droppable', function(e){ + if (e.originalEvent.dataTransfer) { + var $elm = $(e.currentTarget); + e.preventDefault(); + e.stopPropagation(); + e.originalEvent.dataTransfer.dropEffect = $elm.data(disable)? 'none' : 'copy'; + $elm.data(ent, false); + } + }) + .on('drop', '.native-droppable', function(e){ + if (e.originalEvent && e.originalEvent.dataTransfer) { + var $elm = $(e.currentTarget), + id; + e.preventDefault(); + e.stopPropagation(); + $elm.removeClass(clDropActive); + if (e.currentTarget.id) { + id = $elm.hasClass(navdir)? self.navId2Hash(e.currentTarget.id) : self.cwdId2Hash(e.currentTarget.id); + } else { + id = self.cwd().hash; + } + e.originalEvent._target = id; + self.exec('upload', {dropEvt: e.originalEvent, target: id}, void 0, id); + } + }); + })(); + } + + // trigger event cssloaded if cddAutoLoad disabled + if (self.cssloaded === null) { + // check css loaded and remove hide + (function() { + var loaded = function() { + if (node.data('cssautoloadHide')) { + node.data('cssautoloadHide').remove(); + node.removeData('cssautoloadHide'); + } + self.cssloaded = true; + requestAnimationFrame(function() { + self.trigger('cssloaded'); + }); + }, + cnt, fi; + if (node.css('visibility') === 'hidden') { + cnt = 1000; // timeout 10 secs + fi = setInterval(function() { + if (--cnt < 0 || node.css('visibility') !== 'hidden') { + clearInterval(fi); + loaded(); + } + }, 10); + } else { + loaded(); + } + })(); + } else { + self.cssloaded = true; + self.trigger('cssloaded'); + } + + // calculate elFinder node z-index + self.zIndexCalc(); + + // send initial request and start to pray >_< + self.trigger('init') + .request({ + data : {cmd : 'open', target : self.startDir(), init : 1, tree : 1}, + preventDone : true, + notify : {type : 'open', cnt : 1, hideCnt : true}, + freeze : true + }) + .fail(function() { + self.trigger('fail').disable().lastDir(''); + listeners = {}; + shortcuts = {}; + $(document).add(node).off('.'+namespace); + self.trigger = function() { }; + }) + .done(function(data) { + var trashDisable = function(th) { + var src = self.file(self.trashes[th]), + d = self.options.debug, + error; + + if (src && src.volumeid) { + delete self.volOptions[src.volumeid].trashHash; + } + self.trashes[th] = false; + self.debug('backend-error', 'Trash hash "'+th+'" was not found or not writable.'); + }, + toChkTh = {}; + + // regist rawStringDecoder + if (self.options.rawStringDecoder) { + self.registRawStringDecoder(self.options.rawStringDecoder); + } + + // re-calculate elFinder node z-index + self.zIndexCalc(); + + self.load().debug('api', self.api); + // update ui's size after init + node.trigger('resize'); + // initial open + open(data); + self.trigger('open', data, false); + self.trigger('opendone'); + + if (inFrame && self.options.enableAlways) { + $(window).trigger('focus'); + } + + // check self.trashes + $.each(self.trashes, function(th) { + var dir = self.file(th), + src; + if (! dir) { + toChkTh[th] = true; + } else if (dir.mime !== 'directory' || ! dir.write) { + trashDisable(th); + } + }); + if (Object.keys(toChkTh).length) { + self.request({ + data : {cmd : 'info', targets : Object.keys(toChkTh)}, + preventDefault : true + }).done(function(data) { + if (data && data.files) { + $.each(data.files, function(i, dir) { + if (dir.mime === 'directory' && dir.write) { + delete toChkTh[dir.hash]; + } + }); + } + }).always(function() { + $.each(toChkTh, trashDisable); + }); + } + // to enable / disable + self[self.options.enableAlways? 'enable' : 'disable'](); + }); + + // self.timeEnd('load'); + // End of bootUp() + }; + + // call bootCallback function with elFinder instance, extraObject - { dfrdsBeforeBootup: dfrdsBeforeBootup } + if (bootCallback && typeof bootCallback === 'function') { + self.bootCallback = bootCallback; + bootCallback.call(node.get(0), self, { dfrdsBeforeBootup: dfrdsBeforeBootup }); + } + + // call dfrdsBeforeBootup functions then boot up elFinder + $.when.apply(null, dfrdsBeforeBootup).done(function() { + bootUp(); + }).fail(function(error) { + self.error(error); + }); +}; + +//register elFinder to global scope +if (typeof toGlobal === 'undefined' || toGlobal) { + window.elFinder = elFinder; +} + +/** + * Prototype + * + * @type Object + */ +elFinder.prototype = { + + uniqueid : 0, + + res : function(type, id) { + return this.resources[type] && this.resources[type][id]; + }, + + /** + * User os. Required to bind native shortcuts for open/rename + * + * @type String + **/ + OS : navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other', + + /** + * User browser UA. + * jQuery.browser: version deprecated: 1.3, removed: 1.9 + * + * @type Object + **/ + UA : (function(){ + var self = this, + webkit = !document.unqueID && !window.opera && !window.sidebar && window.localStorage && 'WebkitAppearance' in document.documentElement.style, + chrome = webkit && window.chrome, + /*setRotated = function() { + var a = ((screen && screen.orientation && screen.orientation.angle) || window.orientation || 0) + 0; + if (a === -90) { + a = 270; + } + UA.Angle = a; + UA.Rotated = a % 180 === 0? false : true; + },*/ + UA = { + // Browser IE <= IE 6 + ltIE6 : typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined", + // Browser IE <= IE 7 + ltIE7 : typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined", + // Browser IE <= IE 8 + ltIE8 : typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined", + // Browser IE <= IE 9 + ltIE9 : document.uniqueID && document.documentMode <= 9, + // Browser IE <= IE 10 + ltIE10 : document.uniqueID && document.documentMode <= 10, + // Browser IE >= IE 11 + gtIE11 : document.uniqueID && document.documentMode >= 11, + IE : document.uniqueID, + Firefox : window.sidebar, + Opera : window.opera, + Webkit : webkit, + Chrome : chrome, + Edge : (chrome && window.msCredentials)? true : false, + Safari : webkit && !window.chrome, + Mobile : typeof window.orientation != "undefined", + Touch : typeof window.ontouchstart != "undefined", + iOS : navigator.platform.match(/^iP(?:[ao]d|hone)/), + Fullscreen : (typeof (document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen) !== 'undefined'), + Angle : 0, + Rotated : false, + CSS : (function() { + var aStyle = document.createElement('a').style, + pStyle = document.createElement('p').style, + css; + css = 'position:sticky;position:-webkit-sticky;'; + css += 'width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:max-content;'; + aStyle.cssText = css; + return { + positionSticky : aStyle.position.indexOf('sticky')!==-1, + widthMaxContent : aStyle.width.indexOf('max-content')!==-1, + flex : typeof pStyle.flex !== 'undefined' + }; + })() + }; + return UA; + })(), + + /** + * Has RequireJS? + * + * @type Boolean + */ + hasRequire : (typeof define === 'function' && define.amd), + + /** + * Current request command + * + * @type String + */ + currentReqCmd : '', + + /** + * Current keyboard state + * + * @type Object + */ + keyState : {}, + + /** + * Internationalization object + * + * @type Object + */ + i18 : { + en : { + translator : '', + language : 'English', + direction : 'ltr', + dateFormat : 'd.m.Y H:i', + fancyDateFormat : '$1 H:i', + nonameDateFormat : 'ymd-His', + messages : {} + }, + months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'], + + days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] + }, + + /** + * File mimetype to kind mapping + * + * @type Object + */ + kinds : { + 'unknown' : 'Unknown', + 'directory' : 'Folder', + 'group' : 'Selects', + 'symlink' : 'Alias', + 'symlink-broken' : 'AliasBroken', + 'application/x-empty' : 'TextPlain', + 'application/postscript' : 'Postscript', + 'application/vnd.ms-office' : 'MsOffice', + 'application/msword' : 'MsWord', + 'application/vnd.ms-word' : 'MsWord', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord', + 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord', + 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord', + 'application/vnd.ms-excel' : 'MsExcel', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel', + 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel', + 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel', + 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel', + 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel', + 'application/vnd.ms-powerpoint' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP', + 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP', + 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP', + 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP', + 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP', + 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP', + 'application/pdf' : 'PDF', + 'application/xml' : 'XML', + 'application/vnd.oasis.opendocument.text' : 'OO', + 'application/vnd.oasis.opendocument.text-template' : 'OO', + 'application/vnd.oasis.opendocument.text-web' : 'OO', + 'application/vnd.oasis.opendocument.text-master' : 'OO', + 'application/vnd.oasis.opendocument.graphics' : 'OO', + 'application/vnd.oasis.opendocument.graphics-template' : 'OO', + 'application/vnd.oasis.opendocument.presentation' : 'OO', + 'application/vnd.oasis.opendocument.presentation-template' : 'OO', + 'application/vnd.oasis.opendocument.spreadsheet' : 'OO', + 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO', + 'application/vnd.oasis.opendocument.chart' : 'OO', + 'application/vnd.oasis.opendocument.formula' : 'OO', + 'application/vnd.oasis.opendocument.database' : 'OO', + 'application/vnd.oasis.opendocument.image' : 'OO', + 'application/vnd.openofficeorg.extension' : 'OO', + 'application/x-shockwave-flash' : 'AppFlash', + 'application/flash-video' : 'Flash video', + 'application/x-bittorrent' : 'Torrent', + 'application/javascript' : 'JS', + 'application/rtf' : 'RTF', + 'application/rtfd' : 'RTF', + 'application/x-font-ttf' : 'TTF', + 'application/x-font-otf' : 'OTF', + 'application/x-rpm' : 'RPM', + 'application/x-web-config' : 'TextPlain', + 'application/xhtml+xml' : 'HTML', + 'application/docbook+xml' : 'DOCBOOK', + 'application/x-awk' : 'AWK', + 'application/x-gzip' : 'GZIP', + 'application/x-bzip2' : 'BZIP', + 'application/x-xz' : 'XZ', + 'application/zip' : 'ZIP', + 'application/x-zip' : 'ZIP', + 'application/x-rar' : 'RAR', + 'application/x-tar' : 'TAR', + 'application/x-7z-compressed' : '7z', + 'application/x-jar' : 'JAR', + 'text/plain' : 'TextPlain', + 'text/x-php' : 'PHP', + 'text/html' : 'HTML', + 'text/javascript' : 'JS', + 'text/css' : 'CSS', + 'text/rtf' : 'RTF', + 'text/rtfd' : 'RTF', + 'text/x-c' : 'C', + 'text/x-csrc' : 'C', + 'text/x-chdr' : 'CHeader', + 'text/x-c++' : 'CPP', + 'text/x-c++src' : 'CPP', + 'text/x-c++hdr' : 'CPPHeader', + 'text/x-shellscript' : 'Shell', + 'application/x-csh' : 'Shell', + 'text/x-python' : 'Python', + 'text/x-java' : 'Java', + 'text/x-java-source' : 'Java', + 'text/x-ruby' : 'Ruby', + 'text/x-perl' : 'Perl', + 'text/x-sql' : 'SQL', + 'text/xml' : 'XML', + 'text/x-comma-separated-values' : 'CSV', + 'text/x-markdown' : 'Markdown', + 'image/x-ms-bmp' : 'BMP', + 'image/jpeg' : 'JPEG', + 'image/gif' : 'GIF', + 'image/png' : 'PNG', + 'image/tiff' : 'TIFF', + 'image/x-targa' : 'TGA', + 'image/vnd.adobe.photoshop' : 'PSD', + 'image/xbm' : 'XBITMAP', + 'image/pxm' : 'PXM', + 'audio/mpeg' : 'AudioMPEG', + 'audio/midi' : 'AudioMIDI', + 'audio/ogg' : 'AudioOGG', + 'audio/mp4' : 'AudioMPEG4', + 'audio/x-m4a' : 'AudioMPEG4', + 'audio/wav' : 'AudioWAV', + 'audio/x-mp3-playlist' : 'AudioPlaylist', + 'video/x-dv' : 'VideoDV', + 'video/mp4' : 'VideoMPEG4', + 'video/mpeg' : 'VideoMPEG', + 'video/x-msvideo' : 'VideoAVI', + 'video/quicktime' : 'VideoMOV', + 'video/x-ms-wmv' : 'VideoWM', + 'video/x-flv' : 'VideoFlash', + 'video/x-matroska' : 'VideoMKV', + 'video/ogg' : 'VideoOGG' + }, + + /** + * File mimetype to file extention mapping + * + * @type Object + * @see elFinder.mimetypes.js + */ + mimeTypes : {}, + + /** + * Ajax request data validation rules + * + * @type Object + */ + rules : { + defaults : function(data) { + if (!data + || (data.added && !Array.isArray(data.added)) + || (data.removed && !Array.isArray(data.removed)) + || (data.changed && !Array.isArray(data.changed))) { + return false; + } + return true; + }, + open : function(data) { return data && data.cwd && data.files && $.isPlainObject(data.cwd) && Array.isArray(data.files); }, + tree : function(data) { return data && data.tree && Array.isArray(data.tree); }, + parents : function(data) { return data && data.tree && Array.isArray(data.tree); }, + tmb : function(data) { return data && data.images && ($.isPlainObject(data.images) || Array.isArray(data.images)); }, + upload : function(data) { return data && ($.isPlainObject(data.added) || Array.isArray(data.added));}, + search : function(data) { return data && data.files && Array.isArray(data.files); } + }, + + /** + * Commands costructors + * + * @type Object + */ + commands : {}, + + /** + * Commands to add the item (space delimited) + * + * @type String + */ + cmdsToAdd : 'archive duplicate extract mkdir mkfile paste rm upload', + + parseUploadData : function(text) { + var self = this, + data; + + if (!$.trim(text)) { + return {error : ['errResponse', 'errDataEmpty']}; + } + + try { + data = JSON.parse(text); + } catch (e) { + return {error : ['errResponse', 'errDataNotJSON']}; + } + + data = self.normalize(data); + if (!self.validResponse('upload', data)) { + return {error : (response.norError || ['errResponse'])}; + } + data.removed = $.merge((data.removed || []), $.map(data.added || [], function(f) { return self.file(f.hash)? f.hash : null; })); + return data; + + }, + + iframeCnt : 0, + + uploads : { + // xhr muiti uploading flag + xhrUploading: false, + + // Timer of request fail to sync + failSyncTm: null, + + // current chunkfail requesting chunk + chunkfailReq: {}, + + // check file/dir exists + checkExists: function(files, target, fm, isDir) { + var dfrd = $.Deferred(), + names, renames = [], hashes = {}, chkFiles = [], + cancel = function() { + var i = files.length; + while (--i > -1) { + files[i]._remove = true; + } + }, + resolve = function() { + dfrd.resolve(renames, hashes); + }, + check = function() { + var existed = [], exists = [], i, c, + pathStr = target !== fm.cwd().hash? fm.path(target, true) + fm.option('separator', target) : '', + confirm = function(ndx) { + var last = ndx == exists.length-1, + opts = { + cssClass : 'elfinder-confirm-upload', + title : fm.i18n('cmdupload'), + text : ['errExists', pathStr + exists[ndx].name, 'confirmRepl'], + all : !last, + accept : { + label : 'btnYes', + callback : function(all) { + !last && !all + ? confirm(++ndx) + : resolve(); + } + }, + reject : { + label : 'btnNo', + callback : function(all) { + var i; + + if (all) { + i = exists.length; + while (ndx < i--) { + files[exists[i].i]._remove = true; + } + } else { + files[exists[ndx].i]._remove = true; + } + + !last && !all + ? confirm(++ndx) + : resolve(); + } + }, + cancel : { + label : 'btnCancel', + callback : function() { + cancel(); + resolve(); + } + }, + buttons : [ + { + label : 'btnBackup', + cssClass : 'elfinder-confirm-btn-backup', + callback : function(all) { + var i; + if (all) { + i = exists.length; + while (ndx < i--) { + renames.push(exists[i].name); + } + } else { + renames.push(exists[ndx].name); + } + !last && !all + ? confirm(++ndx) + : resolve(); + } + } + ] + }; + + if (!isDir) { + opts.buttons.push({ + label : 'btnRename' + (last? '' : 'All'), + cssClass : 'elfinder-confirm-btn-rename', + callback : function() { + renames = null; + resolve(); + } + }); + } + if (fm.iframeCnt > 0) { + delete opts.reject; + } + fm.confirm(opts); + }; + + if (! fm.file(target).read) { + // for dropbox type + resolve(); + return; + } + + names = $.map(files, function(file, i) { return file.name && (!fm.UA.iOS || file.name !== 'image.jpg')? {i: i, name: file.name} : null ;}); + + fm.request({ + data : {cmd : 'ls', target : target, intersect : $.map(names, function(item) { return item.name;})}, + notify : {type : 'preupload', cnt : 1, hideCnt : true}, + preventDefault : true + }) + .done(function(data) { + var existedArr, cwdItems; + if (data) { + if (data.error) { + cancel(); + } else { + if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { + if (data.list) { + if (Array.isArray(data.list)) { + existed = data.list || []; + } else { + existedArr = []; + existed = $.map(data.list, function(n) { + if (typeof n === 'string') { + return n; + } else { + // support to >=2.1.11 plugin Normalizer, Sanitizer + existedArr = existedArr.concat(n); + return false; + } + }); + if (existedArr.length) { + existed = existed.concat(existedArr); + } + hashes = data.list; + } + exists = $.grep(names, function(name){ + return $.inArray(name.name, existed) !== -1 ? true : false ; + }); + if (exists.length && existed.length && target == fm.cwd().hash) { + cwdItems = $.map(fm.files(target), function(file) { return file.name; } ); + if ($.grep(existed, function(n) { + return $.inArray(n, cwdItems) === -1? true : false; + }).length){ + fm.sync(); + } + } + } + } + } + } + if (exists.length > 0) { + confirm(0); + } else { + resolve(); + } + }) + .fail(function(error) { + cancel(); + resolve(); + error && fm.error(error); + }); + }; + if (fm.api >= 2.1 && typeof files[0] == 'object') { + check(); + } else { + resolve(); + } + return dfrd; + }, + + // check droped contents + checkFile : function(data, fm, target) { + if (!!data.checked || data.type == 'files') { + return data.files; + } else if (data.type == 'data') { + var dfrd = $.Deferred(), + scanDfd = $.Deferred(), + files = [], + paths = [], + dirctorys = [], + processing = 0, + items, + mkdirs = [], + cancel = false, + toArray = function(list) { + return Array.prototype.slice.call(list || [], 0); + }, + doScan = function(items) { + var entry, readEntries, + excludes = fm.options.folderUploadExclude[fm.OS] || null, + length = items.length, + check = function() { + if (--processing < 1 && scanDfd.state() === 'pending') { + scanDfd.resolve(); + } + }, + pushItem = function(file) { + if (! excludes || ! file.name.match(excludes)) { + paths.push(entry.fullPath || ''); + files.push(file); + } + check(); + }, + readEntries = function(dirReader) { + var entries = [], + read = function() { + dirReader.readEntries(function(results) { + if (cancel || !results.length) { + for (var i = 0; i < entries.length; i++) { + if (cancel) { + scanDfd.reject(); + break; + } + doScan([entries[i]]); + } + check(); + } else { + entries = entries.concat(toArray(results)); + read(); + } + }, check); + }; + read(); + }; + + processing++; + for (var i = 0; i < length; i++) { + if (cancel) { + scanDfd.reject(); + break; + } + entry = items[i]; + if (entry) { + if (entry.isFile) { + processing++; + entry.file(pushItem, check); + } else if (entry.isDirectory) { + if (fm.api >= 2.1) { + processing++; + mkdirs.push(entry.fullPath); + readEntries(entry.createReader()); // Start reading dirs. + } + } + } + } + check(); + return scanDfd; + }, hasDirs; + + items = $.map(data.files.items, function(item){ + return item.getAsEntry? item.getAsEntry() : item.webkitGetAsEntry(); + }); + $.each(items, function(i, item) { + if (item.isDirectory) { + hasDirs = true; + return false; + } + }); + if (items.length > 0) { + fm.uploads.checkExists(items, target, fm, hasDirs).done(function(renames, hashes){ + var dfds = []; + if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { + if (renames === null) { + data.overwrite = 0; + renames = []; + } + items = $.grep(items, function(item){ + var i, bak, hash, dfd, hi; + if (item.isDirectory && renames.length) { + i = $.inArray(item.name, renames); + if (i !== -1) { + renames.splice(i, 1); + bak = fm.uniqueName(item.name + fm.options.backupSuffix , null, ''); + $.each(hashes, function(h, name) { + if (item.name == name) { + hash = h; + return false; + } + }); + if (! hash) { + hash = fm.fileByName(item.name, target).hash; + } + fm.lockfiles({files : [hash]}); + dfd = fm.request({ + data : {cmd : 'rename', target : hash, name : bak}, + notify : {type : 'rename', cnt : 1} + }) + .fail(function() { + item._remove = true; + fm.sync(); + }) + .always(function() { + fm.unlockfiles({files : [hash]}); + }); + dfds.push(dfd); + } + } + return !item._remove? true : false; + }); + } + $.when.apply($, dfds).done(function(){ + var notifyto, msg, + id = +new Date(); + + if (items.length > 0) { + msg = fm.escape(items[0].name); + if (items.length > 1) { + msg += ' ... ' + items.length + fm.i18n('items'); + } + notifyto = setTimeout(function() { + fm.notify({ + type : 'readdir', + id : id, + cnt : 1, + hideCnt: true, + msg : fm.i18n('ntfreaddir') + ' (' + msg + ')', + cancel: function() { + cancel = true; + } + }); + }, fm.options.notifyDelay); + doScan(items).done(function() { + notifyto && clearTimeout(notifyto); + fm.notify({type : 'readdir', id: id, cnt : -1}); + if (cancel) { + dfrd.reject(); + } else { + dfrd.resolve([files, paths, renames, hashes, mkdirs]); + } + }).fail(function() { + dfrd.reject(); + }); + } else { + dfrd.reject(); + } + }); + }); + return dfrd.promise(); + } else { + return dfrd.reject(); + } + } else { + var ret = []; + var check = []; + var str = data.files[0]; + if (data.type == 'html') { + var tmp = $("").append($.parseHTML(str.replace(/ src=/ig, ' _elfsrc='))), + atag; + $('img[_elfsrc]', tmp).each(function(){ + var url, purl, + self = $(this), + pa = self.closest('a'); + if (pa && pa.attr('href') && pa.attr('href').match(/\.(?:jpe?g|gif|bmp|png)/i)) { + purl = pa.attr('href'); + } + url = self.attr('_elfsrc'); + if (url) { + if (purl) { + $.inArray(purl, ret) == -1 && ret.push(purl); + $.inArray(url, check) == -1 && check.push(url); + } else { + $.inArray(url, ret) == -1 && ret.push(url); + } + } + // Probably it's clipboard data + if (ret.length === 1 && ret[0].match(/^data:image\/png/)) { + data.clipdata = true; + } + }); + atag = $('a[href]', tmp); + atag.each(function(){ + var text, loc, + parseUrl = function(url) { + var a = document.createElement('a'); + a.href = url; + return a; + }; + if (text = $(this).text()) { + loc = parseUrl($(this).attr('href')); + if (loc.href && loc.href.match(/^(?:ht|f)tp/i) && (atag.length === 1 || ! loc.pathname.match(/(?:\.html?|\/[^\/.]*)$/i) || $.trim(text).match(/\.[a-z0-9-]{1,10}$/i))) { + if ($.inArray(loc.href, ret) == -1 && $.inArray(loc.href, check) == -1) ret.push(loc.href); + } + } + }); + } else { + var regex, m, url; + regex = /(http[^<>"{}|\\^\[\]`\s]+)/ig; + while (m = regex.exec(str)) { + url = m[1].replace(/&/g, '&'); + if ($.inArray(url, ret) == -1) ret.push(url); + } + } + return ret; + } + }, + + // upload transport using XMLHttpRequest + xhr : function(data, fm) { + var self = fm ? fm : this, + node = self.getUI(), + xhr = new XMLHttpRequest(), + notifyto = null, notifyto2 = null, + dataChecked = data.checked, + isDataType = (data.isDataType || data.type == 'data'), + target = (data.target || self.cwd().hash), + dropEvt = (data.dropEvt || null), + extraData  = data.extraData || null, + chunkEnable = (self.option('uploadMaxConn', target) != -1), + multiMax = Math.min(5, Math.max(1, self.option('uploadMaxConn', target))), + retryWait = 10000, // 10 sec + retryMax = 30, // 10 sec * 30 = 300 secs (Max 5 mins) + retry = 0, + getFile = function(files) { + var dfd = $.Deferred(), + file; + if (files.promise) { + files.always(function(f) { + dfd.resolve(Array.isArray(f) && f.length? (isDataType? f[0][0] : f[0]) : {}); + }); + } else { + dfd.resolve(files.length? (isDataType? files[0][0] : files[0]) : {}); + } + return dfd; + }, + dfrd = $.Deferred() + .fail(function(err) { + var error = self.parseError(err), + userAbort; + if (error === 'userabort') { + userAbort = true; + error = void 0; + } + if (files && (self.uploads.xhrUploading || userAbort)) { + // send request om fail + getFile(files).done(function(file) { + if (! file._cid) { + // send sync request + self.uploads.failSyncTm && clearTimeout(self.uploads.failSyncTm); + self.uploads.failSyncTm = setTimeout(function() { + self.sync(target); + }, 1000); + } else if (! self.uploads.chunkfailReq[file._cid]) { + // send chunkfail request + self.uploads.chunkfailReq[file._cid] = true; + setTimeout(function() { + fm.request({ + data : { + cmd: 'upload', + target: target, + chunk: file._chunk, + cid: file._cid, + upload: ['chunkfail'], + mimes: 'chunkfail' + }, + options : { + type: 'post', + url: self.uploadURL + }, + preventDefault: true + }).always(function() { + delete self.uploads.chunkfailReq[file._chunk]; + }); + }, 1000); + } + }); + } + !userAbort && self.sync(); + self.uploads.xhrUploading = false; + files = null; + error && self.error(error); + }) + .done(function(data) { + self.uploads.xhrUploading = false; + files = null; + if (data) { + self.currentReqCmd = 'upload'; + data.warning && self.error(data.warning); + self.updateCache(data); + data.removed && data.removed.length && self.remove(data); + data.added && data.added.length && self.add(data); + data.changed && data.changed.length && self.change(data); + self.trigger('upload', data, false); + self.trigger('uploaddone'); + if (data.toasts && Array.isArray(data.toasts)) { + $.each(data.toasts, function() { + this.msg && self.toast(this); + }); + } + data.sync && self.sync(); + data.debug && fm.debug('backend-debug', data); + } + }) + .always(function() { + self.abortXHR(xhr); + // unregist fnAbort function + node.off('uploadabort', fnAbort); + $(window).off('unload', fnAbort); + notifyto && clearTimeout(notifyto); + notifyto2 && clearTimeout(notifyto2); + dataChecked && !data.multiupload && checkNotify() && self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); + chunkMerge && notifyElm.children('.elfinder-notify-chunkmerge').length && self.notify({type : 'chunkmerge', cnt : -1}); + }), + formData = new FormData(), + files = data.input ? data.input.files : self.uploads.checkFile(data, self, target), + cnt = data.checked? (isDataType? files[0].length : files.length) : files.length, + loaded = 0, + prev = 0, + filesize = 0, + notify = false, + notifyElm = self.ui.notify, + cancelBtn = true, + abort = false, + checkNotify = function() { + if (!notify && (ntfUpload = notifyElm.children('.elfinder-notify-upload')).length) { + notify = true; + } + return notify; + }, + fnAbort = function(e, error) { + abort = true; + self.abortXHR(xhr, { quiet: true, abort: true }); + dfrd.reject(error); + if (checkNotify()) { + self.notify({type : 'upload', cnt : ntfUpload.data('cnt') * -1, progress : 0, size : 0}); + } + }, + cancelToggle = function(show) { + ntfUpload.children('.elfinder-notify-cancel')[show? 'show':'hide'](); + }, + startNotify = function(size) { + if (!size) size = filesize; + return setTimeout(function() { + notify = true; + self.notify({type : 'upload', cnt : cnt, progress : loaded - prev, size : size, + cancel: function() { + node.trigger('uploadabort', 'userabort'); + } + }); + ntfUpload = notifyElm.children('.elfinder-notify-upload'); + prev = loaded; + if (data.multiupload) { + cancelBtn && cancelToggle(true); + } else { + cancelToggle(cancelBtn && loaded < size); + } + }, self.options.notifyDelay); + }, + doRetry = function() { + if (retry++ <= retryMax) { + if (checkNotify() && prev) { + self.notify({type : 'upload', cnt : 0, progress : 0, size : prev}); + } + self.abortXHR(xhr, { quiet: true }); + prev = loaded = 0; + setTimeout(function() { + var reqId; + if (! abort) { + xhr.open('POST', self.uploadURL, true); + if (self.api >= 2.1029) { + reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); + (typeof formData['delete'] === 'function') && formData['delete']('reqid'); + formData.append('reqid', reqId); + xhr._requestId = reqId; + } + xhr.send(formData); + } + }, retryWait); + } else { + node.trigger('uploadabort', ['errAbort', 'errTimeout']); + } + }, + progress = function() { + var node; + if (notify) { + dfrd.notifyWith(ntfUpload, [{ + cnt: ntfUpload.data('cnt'), + progress: ntfUpload.data('progress'), + total: ntfUpload.data('total') + }]); + } + }, + renames = (data.renames || null), + hashes = (data.hashes || null), + chunkMerge = false, + ntfUpload = $(); + + // regist fnAbort function + node.one('uploadabort', fnAbort); + $(window).one('unload.' + fm.namespace, fnAbort); + + !chunkMerge && (prev = loaded); + + if (!isDataType && !cnt) { + return dfrd.reject(['errUploadNoFiles']); + } + + xhr.addEventListener('error', function() { + if (xhr.status == 0) { + if (abort) { + dfrd.reject(); + } else { + // ff bug while send zero sized file + // for safari - send directory + if (!isDataType && data.files && $.grep(data.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { + errors.push('errFolderUpload'); + dfrd.reject(['errAbort', 'errFolderUpload']); + } else if (data.input && $.grep(data.input.files, function(f){return ! f.type && f.size === (self.UA.Safari? 1802 : 0)? true : false;}).length) { + dfrd.reject(['errUploadNoFiles']); + } else { + doRetry(); + } + } + } else { + node.trigger('uploadabort', 'errConnect'); + } + }, false); + + xhr.addEventListener('load', function(e) { + var status = xhr.status, res, curr = 0, error = '', errData, errObj; + + if (status >= 400) { + if (status > 500) { + error = 'errResponse'; + } else { + error = ['errResponse', 'errServerError']; + } + } else { + if (!xhr.responseText) { + error = ['errResponse', 'errDataEmpty']; + } + } + + if (error) { + node.trigger('uploadabort'); + getFile(files).done(function(file) { + return dfrd.reject(file._cid? null : error); + }); + } + + loaded = filesize; + + if (checkNotify() && (curr = loaded - prev)) { + self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); + progress(); + } + + res = self.parseUploadData(xhr.responseText); + + // chunked upload commit + if (res._chunkmerged) { + formData = new FormData(); + var _file = [{_chunkmerged: res._chunkmerged, _name: res._name, _mtime: res._mtime}]; + chunkMerge = true; + node.off('uploadabort', fnAbort); + notifyto2 = setTimeout(function() { + self.notify({type : 'chunkmerge', cnt : 1}); + }, self.options.notifyDelay); + isDataType? send(_file, files[1]) : send(_file); + return; + } + + res._multiupload = data.multiupload? true : false; + if (res.error) { + errData = { + cmd: 'upload', + err: res, + xhr: xhr, + rc: xhr.status + }; + self.trigger('uploadfail', res); + // trigger "requestError" event + self.trigger('requestError', errData); + if (errData._event && errData._event.isDefaultPrevented()) { + res.error = ''; + } + if (res._chunkfailure || res._multiupload) { + abort = true; + self.uploads.xhrUploading = false; + notifyto && clearTimeout(notifyto); + if (ntfUpload.length) { + self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); + dfrd.reject(res); + } else { + // for multi connection + dfrd.reject(); + } + } else { + dfrd.reject(res); + } + } else { + dfrd.resolve(res); + } + }, false); + + xhr.upload.addEventListener('loadstart', function(e) { + if (!chunkMerge && e.lengthComputable) { + loaded = e.loaded; + retry && (loaded = 0); + filesize = e.total; + if (!loaded) { + loaded = parseInt(filesize * 0.05); + } + if (checkNotify()) { + self.notify({type : 'upload', cnt : 0, progress : loaded - prev, size : data.multiupload? 0 : filesize}); + prev = loaded; + progress(); + } + } + }, false); + + xhr.upload.addEventListener('progress', function(e) { + var curr; + + if (e.lengthComputable && !chunkMerge && xhr.readyState < 2) { + + loaded = e.loaded; + + // to avoid strange bug in safari (not in chrome) with drag&drop. + // bug: macos finder opened in any folder, + // reset safari cache (option+command+e), reload elfinder page, + // drop file from finder + // on first attempt request starts (progress callback called ones) but never ends. + // any next drop - successfull. + if (!data.checked && loaded > 0 && !notifyto) { + notifyto = startNotify(xhr._totalSize - loaded); + } + + if (!filesize) { + filesize = e.total; + if (!loaded) { + loaded = parseInt(filesize * 0.05); + } + } + + curr = loaded - prev; + if (checkNotify() && (curr/e.total) >= 0.05) { + self.notify({type : 'upload', cnt : 0, progress : curr, size : 0}); + prev = loaded; + progress(); + } + + if (! data.multiupload && loaded >= filesize) { + cancelBtn = false; + cancelToggle(false); + } + } + }, false); + + var send = function(files, paths){ + var size = 0, + fcnt = 1, + sfiles = [], + c = 0, + total = cnt, + maxFileSize, + totalSize = 0, + chunked = [], + chunkID = new Date().getTime().toString().substr(-9), // for take care of the 32bit backend system + BYTES_PER_CHUNK = Math.min((fm.uplMaxSize? fm.uplMaxSize : 2097152) - 8190, fm.options.uploadMaxChunkSize), // uplMaxSize margin 8kb or options.uploadMaxChunkSize + blobSlice = chunkEnable? false : '', + blobSize, blobMtime, i, start, end, chunks, blob, chunk, added, done, last, failChunk, + multi = function(files, num){ + var sfiles = [], cid, sfilesLen = 0, cancelChk; + if (!abort) { + while(files.length && sfiles.length < num) { + sfiles.push(files.shift()); + } + sfilesLen = sfiles.length; + if (sfilesLen) { + cancelChk = sfilesLen; + for (var i=0; i < sfilesLen; i++) { + if (abort) { + break; + } + cid = isDataType? (sfiles[i][0][0]._cid || null) : (sfiles[i][0]._cid || null); + if (!!failChunk[cid]) { + last--; + continue; + } + fm.exec('upload', { + type: data.type, + isDataType: isDataType, + files: sfiles[i], + checked: true, + target: target, + dropEvt: dropEvt, + renames: renames, + hashes: hashes, + multiupload: true, + overwrite: data.overwrite === 0? 0 : void 0 + }, void 0, target) + .fail(function(error) { + if (error && error === 'No such command') { + abort = true; + fm.error(['errUpload', 'errPerm']); + } + if (cid) { + failChunk[cid] = true; + } + }) + .always(function(e) { + if (e && e.added) added = $.merge(added, e.added); + if (last <= ++done) { + fm.trigger('multiupload', {added: added}); + notifyto && clearTimeout(notifyto); + if (checkNotify()) { + self.notify({type : 'upload', cnt : -cnt, progress : 0, size : 0}); + } + } + if (files.length) { + multi(files, 1); // Next one + } else { + if (--cancelChk <= 1) { + cancelBtn = false; + cancelToggle(false); + } + } + }); + } + } + } + if (sfiles.length < 1 || abort) { + if (abort) { + notifyto && clearTimeout(notifyto); + if (cid) { + failChunk[cid] = true; + } + dfrd.reject(); + } else { + dfrd.resolve(); + self.uploads.xhrUploading = false; + } + } + }, + check = function(){ + if (!self.uploads.xhrUploading) { + self.uploads.xhrUploading = true; + multi(sfiles, multiMax); // Max connection: 3 + } else { + setTimeout(check, 100); + } + }, + reqId; + + if (! dataChecked && (isDataType || data.type == 'files')) { + if (! (maxFileSize = fm.option('uploadMaxSize', target))) { + maxFileSize = 0; + } + for (i=0; i < files.length; i++) { + try { + blob = files[i]; + blobSize = blob.size; + if (blobSlice === false) { + blobSlice = ''; + if (self.api >= 2.1) { + if ('slice' in blob) { + blobSlice = 'slice'; + } else if ('mozSlice' in blob) { + blobSlice = 'mozSlice'; + } else if ('webkitSlice' in blob) { + blobSlice = 'webkitSlice'; + } + } + } + } catch(e) { + cnt--; + total--; + continue; + } + + // file size check + if ((maxFileSize && blobSize > maxFileSize) || (!blobSlice && fm.uplMaxSize && blobSize > fm.uplMaxSize)) { + self.error(['errUploadFile', blob.name, 'errUploadFileSize']); + cnt--; + total--; + continue; + } + + // file mime check + if (blob.type && ! self.uploadMimeCheck(blob.type, target)) { + self.error(['errUploadFile', blob.name, 'errUploadMime', '(' + blob.type + ')']); + cnt--; + total--; + continue; + } + + if (blobSlice && blobSize > BYTES_PER_CHUNK) { + start = 0; + end = BYTES_PER_CHUNK; + chunks = -1; + total = Math.floor((blobSize - 1) / BYTES_PER_CHUNK); + blobMtime = blob.lastModified? Math.round(blob.lastModified/1000) : 0; + + totalSize += blobSize; + chunked[chunkID] = 0; + while(start < blobSize) { + chunk = blob[blobSlice](start, end); + chunk._chunk = blob.name + '.' + (++chunks) + '_' + total + '.part'; + chunk._cid = chunkID; + chunk._range = start + ',' + chunk.size + ',' + blobSize; + chunk._mtime = blobMtime; + chunked[chunkID]++; + + if (size) { + c++; + } + if (typeof sfiles[c] == 'undefined') { + sfiles[c] = []; + if (isDataType) { + sfiles[c][0] = []; + sfiles[c][1] = []; + } + } + size = BYTES_PER_CHUNK; + fcnt = 1; + if (isDataType) { + sfiles[c][0].push(chunk); + sfiles[c][1].push(paths[i]); + } else { + sfiles[c].push(chunk); + } + + start = end; + end = start + BYTES_PER_CHUNK; + } + if (chunk == null) { + self.error(['errUploadFile', blob.name, 'errUploadFileSize']); + cnt--; + total--; + } else { + total += chunks; + size = 0; + fcnt = 1; + c++; + } + continue; + } + if ((fm.uplMaxSize && size + blobSize > fm.uplMaxSize) || fcnt > fm.uplMaxFile) { + size = 0; + fcnt = 1; + c++; + } + if (typeof sfiles[c] == 'undefined') { + sfiles[c] = []; + if (isDataType) { + sfiles[c][0] = []; + sfiles[c][1] = []; + } + } + if (isDataType) { + sfiles[c][0].push(blob); + sfiles[c][1].push(paths[i]); + } else { + sfiles[c].push(blob); + } + size += blobSize; + totalSize += blobSize; + fcnt++; + } + + if (sfiles.length == 0) { + // no data + data.checked = true; + return false; + } + + if (sfiles.length > 1) { + // multi upload + notifyto = startNotify(totalSize); + added = []; + done = 0; + last = sfiles.length; + failChunk = []; + check(); + return true; + } + + // single upload + if (isDataType) { + files = sfiles[0][0]; + paths = sfiles[0][1]; + } else { + files = sfiles[0]; + } + } + + if (!dataChecked) { + if (!fm.UA.Safari || !data.files) { + notifyto = startNotify(totalSize); + } else { + xhr._totalSize = totalSize; + } + } + + dataChecked = true; + + if (! files.length) { + dfrd.reject(['errUploadNoFiles']); + } + + xhr.open('POST', self.uploadURL, true); + + // set request headers + if (fm.customHeaders) { + $.each(fm.customHeaders, function(key) { + xhr.setRequestHeader(key, this); + }); + } + + // set xhrFields + if (fm.xhrFields) { + $.each(fm.xhrFields, function(key) { + if (key in xhr) { + xhr[key] = this; + } + }); + } + + if (self.api >= 2.1029) { + // request ID + reqId = (+ new Date()).toString(16) + Math.floor(1000 * Math.random()).toString(16); + formData.append('reqid', reqId); + xhr._requestId = reqId; + } + formData.append('cmd', 'upload'); + formData.append(self.newAPI ? 'target' : 'current', target); + if (renames && renames.length) { + $.each(renames, function(i, v) { + formData.append('renames[]', v); + }); + formData.append('suffix', fm.options.backupSuffix); + } + if (hashes) { + $.each(hashes, function(i, v) { + formData.append('hashes['+ i +']', v); + }); + } + $.each(self.customData, function(key, val) { + formData.append(key, val); + }); + $.each(self.options.onlyMimes, function(i, mime) { + formData.append('mimes[]', mime); + }); + + $.each(files, function(i, file) { + if (file._chunkmerged) { + formData.append('chunk', file._chunkmerged); + formData.append('upload[]', file._name); + formData.append('mtime[]', file._mtime); + } else { + if (file._chunkfail) { + formData.append('upload[]', 'chunkfail'); + formData.append('mimes', 'chunkfail'); + } else { + formData.append('upload[]', file); + if (data.clipdata) { + data.overwrite = 0; + formData.append('name[]', fm.date(fm.nonameDateFormat) + '.png'); + } + if (file.name && fm.UA.iOS) { + if (file.name.match(/^image\.jpe?g$/i)) { + data.overwrite = 0; + formData.append('name[]', fm.date(fm.nonameDateFormat) + '.jpg'); + } else if (file.name.match(/^capturedvideo\.mov$/i)) { + data.overwrite = 0; + formData.append('name[]', fm.date(fm.nonameDateFormat) + '.mov'); + } + } + } + if (file._chunk) { + formData.append('chunk', file._chunk); + formData.append('cid' , file._cid); + formData.append('range', file._range); + formData.append('mtime[]', file._mtime); + } else { + formData.append('mtime[]', file.lastModified? Math.round(file.lastModified/1000) : 0); + } + } + }); + + if (isDataType) { + $.each(paths, function(i, path) { + formData.append('upload_path[]', path); + }); + } + + if (data.overwrite === 0) { + formData.append('overwrite', 0); + } + + // send int value that which meta key was pressed when dropped as `dropWith` + if (dropEvt) { + formData.append('dropWith', parseInt( + (dropEvt.altKey ? '1' : '0')+ + (dropEvt.ctrlKey ? '1' : '0')+ + (dropEvt.metaKey ? '1' : '0')+ + (dropEvt.shiftKey? '1' : '0'), 2)); + } + + // set extraData on current request + if (extraData) { + $.each(extraData, function(key, val) { + formData.append(key, val); + }); + } + + xhr.send(formData); + + return true; + }; + + if (! isDataType) { + if (files.length > 0) { + if (! data.clipdata && renames == null) { + var mkdirs = [], + paths = [], + excludes = fm.options.folderUploadExclude[fm.OS] || null; + $.each(files, function(i, file) { + var relPath = file.webkitRelativePath || file.relativePath || '', + idx, rootDir; + if (! relPath) { + return false; + } + if (excludes && file.name.match(excludes)) { + file._remove = true; + relPath = void(0); + } else { + // add '/' as prefix to make same to folder uploading with DnD, see #2607 + relPath = '/' + relPath.replace(/\/[^\/]*$/, '').replace(/^\//, ''); + if (relPath && $.inArray(relPath, mkdirs) === -1) { + mkdirs.push(relPath); + // checking the root directory to supports see #2378 + idx = relPath.substr(1).indexOf('/'); + if (idx !== -1 && (rootDir = relPath.substr(0, idx + 1)) && $.inArray(rootDir, mkdirs) === -1) { + mkdirs.unshift(rootDir); + } + } + } + paths.push(relPath); + }); + renames = []; + hashes = {}; + if (mkdirs.length) { + (function() { + var checkDirs = $.map(mkdirs, function(name) { return name.substr(1).indexOf('/') === -1 ? {name: name.substr(1)} : null;}), + cancelDirs = []; + fm.uploads.checkExists(checkDirs, target, fm, true).done( + function(res, res2) { + var dfds = [], dfd, bak, hash; + if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { + cancelDirs = $.map(checkDirs, function(dir) { return dir._remove? dir.name : null ;} ); + checkDirs = $.grep(checkDirs, function(dir) { return !dir._remove? true : false ;} ); + } + if (cancelDirs.length) { + $.each(paths.concat(), function(i, path) { + if ($.inArray(path, cancelDirs) === 0) { + files[i]._remove = true; + paths[i] = void(0); + } + }); + } + files = $.grep(files, function(file) { return file._remove? false : true; }); + paths = $.grep(paths, function(path) { return path === void 0 ? false : true; }); + if (checkDirs.length) { + dfd = $.Deferred(); + if (res.length) { + $.each(res, function(i, existName) { + // backup + bak = fm.uniqueName(existName + fm.options.backupSuffix , null, ''); + $.each(res2, function(h, name) { + if (res[0] == name) { + hash = h; + return false; + } + }); + if (! hash) { + hash = fm.fileByName(res[0], target).hash; + } + fm.lockfiles({files : [hash]}); + dfds.push( + fm.request({ + data : {cmd : 'rename', target : hash, name : bak}, + notify : {type : 'rename', cnt : 1} + }) + .fail(function(error) { + dfrd.reject(error); + fm.sync(); + }) + .always(function() { + fm.unlockfiles({files : [hash]}); + }) + ); + }); + } else { + dfds.push(null); + } + + $.when.apply($, dfds).done(function() { + // ensure directories + fm.request({ + data : {cmd : 'mkdir', target : target, dirs : mkdirs}, + notify : {type : 'mkdir', cnt : mkdirs.length}, + preventFail: true + }) + .fail(function(error) { + error = error || ['errUnknown']; + if (error[0] === 'errCmdParams') { + multiMax = 1; + } else { + multiMax = 0; + dfrd.reject(error); + } + }) + .done(function(data) { + var rm = false; + if (!data.hashes) { + data.hashes = {}; + } + paths = $.map(paths.concat(), function(p, i) { + if (p === '/') { + return target; + } else { + if (data.hashes[p]) { + return data.hashes[p]; + } else { + rm = true; + files[i]._remove = true; + return null; + } + } + }); + if (rm) { + files = $.grep(files, function(file) { return file._remove? false : true; }); + } + }) + .always(function(data) { + if (multiMax) { + isDataType = true; + if (! send(files, paths)) { + dfrd.reject(); + } + } + }); + }); + } else { + dfrd.reject(); + } + } + ); + })(); + } else { + fm.uploads.checkExists(files, target, fm).done( + function(res, res2){ + if (fm.options.overwriteUploadConfirm && fm.option('uploadOverwrite', target)) { + hashes = res2; + if (res === null) { + data.overwrite = 0; + } else { + renames = res; + } + files = $.grep(files, function(file){return !file._remove? true : false ;}); + } + cnt = files.length; + if (cnt > 0) { + if (! send(files)) { + dfrd.reject(); + } + } else { + dfrd.reject(); + } + } + ); + } + } else { + if (! send(files)) { + dfrd.reject(); + } + } + } else { + dfrd.reject(); + } + } else { + if (dataChecked) { + send(files[0], files[1]); + } else { + files.done(function(result) { // result: [files, paths, renames, hashes, mkdirs] + renames = []; + cnt = result[0].length; + if (cnt) { + if (result[4] && result[4].length) { + // ensure directories + fm.request({ + data : {cmd : 'mkdir', target : target, dirs : result[4]}, + notify : {type : 'mkdir', cnt : result[4].length}, + preventFail: true + }) + .fail(function(error) { + error = error || ['errUnknown']; + if (error[0] === 'errCmdParams') { + multiMax = 1; + } else { + multiMax = 0; + dfrd.reject(error); + } + }) + .done(function(data) { + var rm = false; + if (!data.hashes) { + data.hashes = {}; + } + result[1] = $.map(result[1], function(p, i) { + p = p.replace(/\/[^\/]*$/, ''); + if (p === '') { + return target; + } else { + if (data.hashes[p]) { + return data.hashes[p]; + } else { + rm = true; + result[0][i]._remove = true; + return null; + } + } + }); + if (rm) { + result[0] = $.grep(result[0], function(file) { return file._remove? false : true; }); + } + }) + .always(function(data) { + if (multiMax) { + renames = result[2]; + hashes = result[3]; + send(result[0], result[1]); + } + }); + return; + } else { + result[1] = $.map(result[1], function() { return target; }); + } + renames = result[2]; + hashes = result[3]; + send(result[0], result[1]); + } else { + dfrd.reject(['errUploadNoFiles']); + } + }).fail(function(){ + dfrd.reject(); + }); + } + } + + return dfrd; + }, + + // upload transport using iframe + iframe : function(data, fm) { + var self = fm ? fm : this, + input = data.input? data.input : false, + files = !input ? self.uploads.checkFile(data, self) : false, + dfrd = $.Deferred() + .fail(function(error) { + error && self.error(error); + }), + name = 'iframe-'+fm.namespace+(++self.iframeCnt), + form = $('
'), + msie = this.UA.IE, + // clear timeouts, close notification dialog, remove form/iframe + onload = function() { + abortto && clearTimeout(abortto); + notifyto && clearTimeout(notifyto); + notify && self.notify({type : 'upload', cnt : -cnt}); + + setTimeout(function() { + msie && $('', + // setup on elFinder bootup + setup : function(opts, fm) { + if (fm.UA.IE || fm.UA.Mobile) { + this.disabled = true; + } + }, + // Initialization of editing node (this: this editors HTML node) + init : function(id, file, dum, fm) { + var orig = 'https://www.photopea.com', + ifm = $(this).hide() + //.css('box-sizing', 'border-box') + .on('load', function() { + //spnr.remove(); + ifm.show(); + }) + .on('error', function() { + spnr.remove(); + ifm.show(); + }), + editor = this.editor, + confObj = editor.confObj, + spnr = $('
') + .html('' + fm.i18n('nowLoading') + '') + .appendTo(ifm.parent()), + getType = function(mime) { + var ext = getExtention(mime, fm), + extmime = ext2mime[ext]; + + if (!confObj.mimesFlip[extmime]) { + ext = ''; + } else if (ext === 'jpeg') { + ext = 'jpg'; + } + if (!ext || ext === 'xcf' || ext === 'dng' || ext === 'sketch') { + ext = 'psd'; + extmime = ext2mime[ext]; + ifm.closest('.ui-dialog').trigger('changeType', { + extention: ext, + mime : extmime, + keepEditor: true + }); + } + return ext; + }, + mime = file.mime, + liveMsg, type, quty; + + if (!confObj.mimesFlip) { + confObj.mimesFlip = fm.arrayFlip(confObj.mimes, true); + } + if (!confObj.liveMsg) { + confObj.liveMsg = function(ifm, spnr, file) { + var url = fm.openUrl(file.hash); + if (!fm.isSameOrigin(url)) { + url = fm.openUrl(file.hash, true); + } + var wnd = ifm.get(0).contentWindow, + phase = 0, + data = null, + dfdIni = $.Deferred().done(function() { + spnr.remove(); + phase = 1; + wnd.postMessage(data, '*'); + }), + dfdGet; + + this.load = function() { + return fm.request({ + data : {cmd : 'get'}, + options : { + url: url, + type: 'get', + cache : true, + dataType : 'binary', + responseType :'arraybuffer', + processData: false + } + }) + .done(function(d) { + data = d; + }); + }; + + this.receive = function(e) { + var ev = e.originalEvent, + state; + if (ev.origin === orig && ev.source === wnd) { + if (ev.data === 'done') { + if (phase === 0) { + dfdIni.resolve(); + } else if (phase === 1) { + phase = 2; + ifm.trigger('contentsloaded'); + } else { + if (dfdGet && dfdGet.state() === 'pending') { + dfdGet.reject('errDataEmpty'); + } + } + } else { + if (dfdGet && dfdGet.state() === 'pending') { + if (typeof ev.data === 'object') { + dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(ev.data)); + } else { + dfdGet.reject('errDataEmpty'); + } + } + } + } + }; + + this.getContent = function() { + var type, q; + if (phase > 1) { + dfdGet && dfdGet.state() === 'pending' && dfdGet.reject(); + dfdGet = null; + dfdGet = $.Deferred(); + if (phase === 2) { + phase = 3; + dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(data)); + data = null; + return dfdGet; + } + if (ifm.data('mime')) { + mime = ifm.data('mime'); + type = getType(mime); + } + if (q = ifm.data('quality')) { + type += ':' + (q / 100); + } + wnd.postMessage('app.activeDocument.saveToOE("' + type + '")', orig); + return dfdGet; + } + }; + }; + } + + ifm.parent().css('padding', 0); + type = getType(file.mime); + liveMsg = editor.liveMsg = new confObj.liveMsg(ifm, spnr, file); + $(window).on('message.' + fm.namespace, liveMsg.receive); + liveMsg.load().done(function() { + var d = JSON.stringify({ + files : [], + environment : { + lang: fm.lang.replace(/_/g, '-') + } + }); + ifm.attr('src', orig + '/#' + encodeURI(d)); + }).fail(function(err) { + err && fm.error(err); + editor.initFail = true; + }); + + // jpeg quality controls + if (file.mime === 'image/jpeg' || file.mime === 'image/webp') { + ifm.data('quality', fm.storage('jpgQuality') || fm.option('jpgQuality')); + quty = $('') + .attr('min', '1') + .attr('max', '100') + .attr('title', '1 - 100') + .on('change', function() { + var q = quty.val(); + ifm.data('quality', q); + }) + .val(ifm.data('quality')); + $('
') + .append( + $('').html(fm.i18n('quality') + ' : '), quty, $('') + ) + .prependTo(ifm.parent().next()); + } + }, + load : function(base) { + var dfd = $.Deferred(), + self = this, + fm = this.fm, + $base = $(base); + if (self.initFail) { + dfd.reject(); + } else { + $base.on('contentsloaded', function() { + dfd.resolve(self.liveMsg); + }); + } + return dfd; + }, + getContent : function() { + return this.editor.liveMsg? this.editor.liveMsg.getContent() : void(0); + }, + save : function(base, liveMsg) { + var $base = $(base), + quality = $base.data('quality'), + hash = $base.data('hash'), + file; + if (typeof quality !== 'undefined') { + this.fm.storage('jpgQuality', quality); + } + if (hash) { + file = this.fm.file(hash); + $base.data('mime', file.mime); + } else { + $base.removeData('mime'); + } + }, + // On dialog closed + close : function(base, liveMsg) { + $(base).attr('src', ''); + liveMsg && $(window).off('message.' + this.fm.namespace, liveMsg.receive); + } + }, + { + // Adobe Creative SDK Creative Tools Image Editor UI + // MIME types to accept + info : { + id : 'creativecloud', + name : 'Creative Cloud', + iconImg : 'img/editor-icons.png 0 -192', + dataScheme: true, + schemeContent: true, + single: true, + canMakeEmpty: false, + integrate: { + title: 'Adobe Creative Cloud', + link: 'https://www.adobe.io/apis/creativecloud.html' + } + }, + mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'], + // HTML of this editor + html : '
', + // called on initialization of elFinder cmd edit (this: this editor's config object) + setup : function(opts, fm) { + if (fm.UA.ltIE8 || !opts.extraOptions || !opts.extraOptions.creativeCloudApiKey) { + this.disabled = true; + } else { + this.apiKey = opts.extraOptions.creativeCloudApiKey; + } + }, + // Initialization of editing node (this: this editors HTML node) + init : function(id, file, content, fm) { + initImgTag.call(this, id, file, content, fm); + }, + // Get data uri scheme (this: this editors HTML node) + getContent : function() { + return $(this).children('img:first').attr('src'); + }, + // Launch Aviary Feather editor when dialog open + load : function(base) { + var self = this, + fm = this.fm, + node = $(base).children('img:first'), + dialog = $(base).closest('.ui-dialog'), + elfNode = fm.getUI(), + dfrd = $.Deferred(), + container = $('#elfinder-aviary-container'), + init = function(onload) { + var getLang = function() { + var langMap = { + 'zh_TW' : 'zh_HANT', + 'zh_CN' : 'zh_HANS' + }; + return langMap[fm.lang]? langMap[fm.lang] : fm.lang; + }, opts; + + if (!container.length) { + container = $('
').css({ + position: 'fixed', + top: 0, + right: 0, + width: '100%', + height: $(window).height(), + overflow: 'auto' + }).hide().appendTo(elfNode.hasClass('elfinder-fullscreen')? elfNode : 'body'); + // bind switch fullscreen event + elfNode.on('resize.'+fm.namespace, function(e, data) { + e.preventDefault(); + e.stopPropagation(); + data && data.fullscreen && container.appendTo(data.fullscreen === 'on'? elfNode : 'body'); + }); + fm.bind('destroy', function() { + container.remove(); + }); + } else { + // always moves to last + container.appendTo(container.parent()); + } + node.on('click', launch).data('loading')(); + opts = { + apiKey: self.confObj.apiKey, + onSave: function(imageID, newURL) { + var ext; + featherEditor.showWaitIndicator(); + ext = newURL.replace(/.+\.([^.]+)$/, '$1'); + if (node.data('ext') !== ext) { + node.closest('.ui-dialog').trigger('changeType', { + extention: ext, + mime : ext2mime[ext] + }); + } + node.on('load error', function() { + node.data('loading')(true); + }) + .attr('crossorigin', 'anonymous') + .attr('src', newURL) + .data('loading')(); + featherEditor.close(); + }, + onLoad: onload || function(){}, + onClose: function() { + dialog.removeClass(fm.res('class', 'preventback')); + fm.toggleMaximize(container, false); + $(container).hide(); + }, + appendTo: container.get(0), + maxSize: 2048, + language: getLang() + }; + // trigger event 'editEditorPrepare' + self.trigger('Prepare', { + node: base, + editorObj: Aviary, + instance: void(0), + opts: opts + }); + featherEditor = new Aviary.Feather(opts); + // return editor instance + dfrd.resolve(featherEditor); + $(base).on('saveAsFail', launch); + }, + launch = function() { + dialog.addClass(fm.res('class', 'preventback')); + fm.toggleMaximize(container, true); + fm.toFront(container); + $(container).show(); + featherEditor.launch({ + image: node.attr('id'), + url: node.attr('src') + }); + node.data('loading')(true); + }, + featherEditor, extraOpts; + + // load script then init + if (typeof Aviary === 'undefined') { + fm.loadScript(['https://dme0ih8comzn4.cloudfront.net/imaging/v3/editor.js'], function() { + init(launch); + }, {loadType: 'tag'}); + } else { + init(); + launch(); + } + return dfrd; + }, + // Convert content url to data uri scheme to save content + save : function(base) { + var node = $(base).children('img:first'); + if (node.attr('src').substr(0, 5) !== 'data:') { + node.attr('src', imgBase64(node, this.file.mime)); + } + } + }, + { + // ACE Editor + // called on initialization of elFinder cmd edit (this: this editor's config object) + setup : function(opts, fm) { + if (fm.UA.ltIE8 || !fm.options.cdns.ace) { + this.disabled = true; + } + }, + // `mimes` is not set for support everything kind of text file + info : { + id : 'aceeditor', + name : 'ACE Editor', + iconImg : 'img/editor-icons.png 0 -96' + }, + load : function(textarea) { + var self = this, + fm = this.fm, + dfrd = $.Deferred(), + cdn = fm.options.cdns.ace, + start = function() { + var editor, editorBase, mode, + ta = $(textarea), + taBase = ta.parent(), + dialog = taBase.parent(), + id = textarea.id + '_ace', + ext = self.file.name.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(), + // MIME/mode map + mimeMode = { + 'text/x-php' : 'php', + 'application/x-php' : 'php', + 'text/html' : 'html', + 'application/xhtml+xml' : 'html', + 'text/javascript' : 'javascript', + 'application/javascript' : 'javascript', + 'text/css' : 'css', + 'text/x-c' : 'c_cpp', + 'text/x-csrc' : 'c_cpp', + 'text/x-chdr' : 'c_cpp', + 'text/x-c++' : 'c_cpp', + 'text/x-c++src' : 'c_cpp', + 'text/x-c++hdr' : 'c_cpp', + 'text/x-shellscript' : 'sh', + 'application/x-csh' : 'sh', + 'text/x-python' : 'python', + 'text/x-java' : 'java', + 'text/x-java-source' : 'java', + 'text/x-ruby' : 'ruby', + 'text/x-perl' : 'perl', + 'application/x-perl' : 'perl', + 'text/x-sql' : 'sql', + 'text/xml' : 'xml', + 'application/docbook+xml' : 'xml', + 'application/xml' : 'xml' + }; + + // set base height + taBase.height(taBase.height()); + + // set basePath of ace + ace.config.set('basePath', cdn); + + // Base node of Ace editor + editorBase = $('
').text(ta.val()).insertBefore(ta.hide()); + + // Editor flag + ta.data('ace', true); + + // Aceeditor instance + editor = ace.edit(id); + + // Ace editor configure + editor.$blockScrolling = Infinity; + editor.setOptions({ + theme: 'ace/theme/monokai', + fontSize: '14px', + wrap: true, + }); + ace.config.loadModule('ace/ext/modelist', function() { + // detect mode + mode = ace.require('ace/ext/modelist').getModeForPath('/' + self.file.name).name; + if (mode === 'text') { + if (mimeMode[self.file.mime]) { + mode = mimeMode[self.file.mime]; + } + } + // show MIME:mode in title bar + taBase.prev().children('.elfinder-dialog-title').append(' (' + self.file.mime + ' : ' + mode.split(/[\/\\]/).pop() + ')'); + editor.setOptions({ + mode: 'ace/mode/' + mode + }); + if (dfrd.state() === 'resolved') { + dialog.trigger('resize'); + } + }); + ace.config.loadModule('ace/ext/language_tools', function() { + ace.require('ace/ext/language_tools'); + editor.setOptions({ + enableBasicAutocompletion: true, + enableSnippets: true, + enableLiveAutocompletion: false + }); + }); + ace.config.loadModule('ace/ext/settings_menu', function() { + ace.require('ace/ext/settings_menu').init(editor); + }); + + // Short cuts + editor.commands.addCommand({ + name : "saveFile", + bindKey: { + win : 'Ctrl-s', + mac : 'Command-s' + }, + exec: function(editor) { + self.doSave(); + } + }); + editor.commands.addCommand({ + name : "closeEditor", + bindKey: { + win : 'Ctrl-w|Ctrl-q', + mac : 'Command-w|Command-q' + }, + exec: function(editor) { + self.doCancel(); + } + }); + + editor.resize(); + + // TextArea button and Setting button + $('
').css('float', 'left') + .append( + $('') + .button({ + icons: { + primary: 'ui-icon-gear', + secondary: 'ui-icon-triangle-1-e' + }, + text: false + }) + .on('click', function(){ + editor.showSettingsMenu(); + $('#ace_settingsmenu') + .css('font-size', '80%') + .find('div[contains="setOptions"]').hide().end() + .parent().parent().appendTo($('#elfinder')); + }) + ) + .prependTo(taBase.next()); + + // trigger event 'editEditorPrepare' + self.trigger('Prepare', { + node: textarea, + editorObj: ace, + instance: editor, + opts: {} + }); + + //dialog.trigger('resize'); + dfrd.resolve(editor); + }; + + // check ace & start + if (!self.confObj.loader) { + self.confObj.loader = $.Deferred(); + self.fm.loadScript([ cdn+'/ace.js' ], function() { + self.confObj.loader.resolve(); + }, void 0, {obj: window, name: 'ace'}); + } + self.confObj.loader.done(start); + + return dfrd; + }, + close : function(textarea, instance) { + instance && instance.destroy(); + }, + save : function(textarea, instance) { + instance && $(textarea).data('ace') && (textarea.value = instance.session.getValue()); + }, + focus : function(textarea, instance) { + instance && $(textarea).data('ace') && instance.focus(); + }, + resize : function(textarea, instance, e, data) { + instance && instance.resize(); + } + }, + { + // CodeMirror + // called on initialization of elFinder cmd edit (this: this editor's config object) + setup : function(opts, fm) { + if (fm.UA.ltIE10 || !fm.options.cdns.codemirror) { + this.disabled = true; + } + }, + // `mimes` is not set for support everything kind of text file + info : { + id : 'codemirror', + name : 'CodeMirror', + iconImg : 'img/editor-icons.png 0 -176' + }, + load : function(textarea) { + var fm = this.fm, + cmUrl = fm.options.cdns.codemirror, + dfrd = $.Deferred(), + self = this, + start = function(CodeMirror) { + var ta = $(textarea), + base = ta.parent(), + editor, editorBase, opts; + + // set base height + base.height(base.height()); + + // CodeMirror configure options + opts = { + lineNumbers: true, + lineWrapping: true, + extraKeys : { + 'Ctrl-S': function() { self.doSave(); }, + 'Ctrl-Q': function() { self.doCancel(); }, + 'Ctrl-W': function() { self.doCancel(); } + } + }; + + // trigger event 'editEditorPrepare' + self.trigger('Prepare', { + node: textarea, + editorObj: CodeMirror, + instance: void(0), + opts: opts + }); + + // CodeMirror configure + editor = CodeMirror.fromTextArea(textarea, opts); + + // return editor instance + dfrd.resolve(editor); + + // Auto mode set + var info, m, mode, spec; + if (! info) { + info = CodeMirror.findModeByMIME(self.file.mime); + } + if (! info && (m = self.file.name.match(/.+\.([^.]+)$/))) { + info = CodeMirror.findModeByExtension(m[1]); + } + if (info) { + CodeMirror.modeURL = useRequire? 'codemirror/mode/%N/%N.min' : cmUrl + '/mode/%N/%N.min.js'; + mode = info.mode; + spec = info.mime; + editor.setOption('mode', spec); + CodeMirror.autoLoadMode(editor, mode); + // show MIME:mode in title bar + base.prev().children('.elfinder-dialog-title').append(' (' + spec + ' : ' + mode + ')'); + } + + // editor base node + editorBase = $(editor.getWrapperElement()).css({ + // fix CSS conflict to SimpleMDE + padding: 0, + border: 'none' + }); + ta.data('cm', true); + + // fit height to base + editorBase.height('100%'); + + // TextArea button and Setting button + $('
').css('float', 'left') + .append( + $('").button({icons:{primary:"ui-icon-gear",secondary:"ui-icon-triangle-1-e"},text:!1}).on("click",function(){i.showSettingsMenu(),$("#ace_settingsmenu").css("font-size","80%").find('div[contains="setOptions"]').hide().end().parent().parent().appendTo($("#elfinder"))})).prependTo(c.next()),t.trigger("Prepare",{node:e,editorObj:ace,instance:i,opts:{}}),n.resolve(i)};return t.confObj.loader||(t.confObj.loader=$.Deferred(),t.fm.loadScript([o+"/ace.js"],function(){t.confObj.loader.resolve()},void 0,{obj:window,name:"ace"})),t.confObj.loader.done(a),n},close:function(e,t){t&&t.destroy()},save:function(e,t){t&&$(e).data("ace")&&(e.value=t.session.getValue())},focus:function(e,t){t&&$(e).data("ace")&&t.focus()},resize:function(e,t,i,n){t&&t.resize()}},{setup:function(e,t){!t.UA.ltIE10&&t.options.cdns.codemirror||(this.disabled=!0)},info:{id:"codemirror",name:"CodeMirror",iconImg:"img/editor-icons.png 0 -176"},load:function(e){var t=this.fm,i=t.options.cdns.codemirror,o=$.Deferred(),a=this,r=function(t){var r,s,c,d=$(e),l=d.parent();l.height(l.height()),c={lineNumbers:!0,lineWrapping:!0,extraKeys:{"Ctrl-S":function(){a.doSave()},"Ctrl-Q":function(){a.doCancel()},"Ctrl-W":function(){a.doCancel()}}},a.trigger("Prepare",{node:e,editorObj:t,instance:void 0,opts:c}),r=t.fromTextArea(e,c),o.resolve(r);var p,m,u,f;p||(p=t.findModeByMIME(a.file.mime)),!p&&(m=a.file.name.match(/.+\.([^.]+)$/))&&(p=t.findModeByExtension(m[1])),p&&(t.modeURL=n?"codemirror/mode/%N/%N.min":i+"/mode/%N/%N.min.js",u=p.mode,f=p.mime,r.setOption("mode",f),t.autoLoadMode(r,u),l.prev().children(".elfinder-dialog-title").append(" ("+f+" : "+u+")")),s=$(r.getWrapperElement()).css({padding:0,border:"none"}),d.data("cm",!0),s.height("100%"),$('
').css("float","left").append($("
').appendTo(ql.info.find('.elfinder-quicklook-info')) + .on('click', function() { + $(this).html(''); + fm.request({ + data : {cmd : 'url', target : file.hash}, + preventDefault : true + }) + .always(function() { + preview.show(); + $(this).html(''); + }) + .done(function(data) { + var rfile = fm.file(file.hash); + ql.value.url = rfile.url = data.url || ''; + if (ql.value.url) { + preview.trigger($.Event('update', {file : ql.value})); + } + }); + }); + } + if (file.url !== '' && file.url != '1') { + e.stopImmediatePropagation(); + + loading = $('
'+fm.i18n('nowLoading')+'
').appendTo(ql.info.find('.elfinder-quicklook-info')); + + node = $('