drg_elfinder 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +8 -0
- data/app/assets/config/drg_elfinder_manifest.js +1 -0
- data/app/assets/javascripts/drg_elfinder.js +15 -0
- data/app/assets/javascripts/elfinder/Changelog +1283 -0
- data/app/assets/javascripts/elfinder/LICENSE.md +15 -0
- data/app/assets/javascripts/elfinder/README.md +216 -0
- data/app/assets/javascripts/elfinder/bower.json +28 -0
- data/app/assets/javascripts/elfinder/composer.json +39 -0
- data/app/assets/javascripts/elfinder/css/elfinder.full.css +5350 -0
- data/app/assets/javascripts/elfinder/css/elfinder.min.css +9 -0
- data/app/assets/javascripts/elfinder/css/theme.css +430 -0
- data/app/assets/javascripts/elfinder/elfinder.html +74 -0
- data/app/assets/javascripts/elfinder/elfinder.legacy.html +94 -0
- data/app/assets/javascripts/elfinder/img/arrows-active.png +0 -0
- data/app/assets/javascripts/elfinder/img/arrows-normal.png +0 -0
- data/app/assets/javascripts/elfinder/img/crop.gif +0 -0
- data/app/assets/javascripts/elfinder/img/dialogs.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_aceeditor.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_ckeditor.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_ckeditor5.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_codemirror.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_creativecloud.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_onlineconvert.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_pixlreditor.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_pixlrexpress.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_simplemde.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_tinymce.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_tuiimgedit.png +0 -0
- data/app/assets/javascripts/elfinder/img/edit_zohooffice.png +0 -0
- data/app/assets/javascripts/elfinder/img/editor-icons.png +0 -0
- data/app/assets/javascripts/elfinder/img/icons-big.png +0 -0
- data/app/assets/javascripts/elfinder/img/icons-big.svg +1 -0
- data/app/assets/javascripts/elfinder/img/icons-small.png +0 -0
- data/app/assets/javascripts/elfinder/img/logo.png +0 -0
- data/app/assets/javascripts/elfinder/img/progress.gif +0 -0
- data/app/assets/javascripts/elfinder/img/quicklook-bg.png +0 -0
- data/app/assets/javascripts/elfinder/img/quicklook-icons.png +0 -0
- data/app/assets/javascripts/elfinder/img/resize.png +0 -0
- data/app/assets/javascripts/elfinder/img/spinner-mini.gif +0 -0
- data/app/assets/javascripts/elfinder/img/toolbar.png +0 -0
- data/app/assets/javascripts/elfinder/img/trashmesh.png +0 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-a.svg +235 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-b.svg +224 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-c.svg +224 -0
- data/app/assets/javascripts/elfinder/img/tui-icon-d.svg +224 -0
- data/app/assets/javascripts/elfinder/img/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_box.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_box.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_dropbox.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_dropbox.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_ftp.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_ftp.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_googledrive.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_googledrive.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_local.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_local.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_network.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_network.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_onedrive.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_onedrive.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_sql.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_sql.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_trash.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_trash.svg +1 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_zip.png +0 -0
- data/app/assets/javascripts/elfinder/img/volume_icon_zip.svg +1 -0
- data/app/assets/javascripts/elfinder/js/elfinder.full.js +36019 -0
- data/app/assets/javascripts/elfinder/js/elfinder.min.js +25 -0
- data/app/assets/javascripts/elfinder/js/extras/editors.default.js +2643 -0
- data/app/assets/javascripts/elfinder/js/extras/editors.default.min.js +2 -0
- data/app/assets/javascripts/elfinder/js/extras/quicklook.googledocs.js +75 -0
- data/app/assets/javascripts/elfinder/js/extras/quicklook.googledocs.min.js +1 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.LANG.js +587 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ar.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.bg.js +559 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ca.js +375 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.cs.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.da.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.de.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.el.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.es.js +546 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fa.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fallback.js +11 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fo.js +419 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fr.js +578 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.fr_CA.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.he.js +375 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.hr.js +434 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.hu.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.id.js +498 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.it.js +552 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ja.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ko.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.nl.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.no.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.pl.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.pt_BR.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ro.js +417 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ru.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.si.js +537 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sk.js +581 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sl.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sr.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.sv.js +375 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.tr.js +583 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.ug_CN.js +374 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.uk.js +580 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.vi.js +579 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.zh_CN.js +585 -0
- data/app/assets/javascripts/elfinder/js/i18n/elfinder.zh_TW.js +582 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/cs.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/de.html.js +15 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/en.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/es.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/ja.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/ko.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/pl.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/ru.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/sk.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/i18n/help/tr.html.js +10 -0
- data/app/assets/javascripts/elfinder/js/proxy/elFinderSupportVer1.js +408 -0
- data/app/assets/javascripts/elfinder/js/worker/calcfilehash.js +20 -0
- data/app/assets/javascripts/elfinder/js/worker/quicklook.tiff.js +7 -0
- data/app/assets/javascripts/elfinder/js/worker/quicklook.unzip.js +55 -0
- data/app/assets/javascripts/elfinder/main.default.js +175 -0
- data/app/assets/javascripts/elfinder/package.json +13 -0
- data/app/assets/javascripts/elfinder/php/MySQLStorage.sql +47 -0
- data/app/assets/javascripts/elfinder/php/autoload.php +56 -0
- data/app/assets/javascripts/elfinder/php/connector.maximal.php-dist +449 -0
- data/app/assets/javascripts/elfinder/php/connector.minimal.php-dist +180 -0
- data/app/assets/javascripts/elfinder/php/editors/OnlineConvert/editor.php +113 -0
- data/app/assets/javascripts/elfinder/php/editors/ZipArchive/editor.php +12 -0
- data/app/assets/javascripts/elfinder/php/editors/ZohoOffice/editor.php +206 -0
- data/app/assets/javascripts/elfinder/php/editors/editor.php +79 -0
- data/app/assets/javascripts/elfinder/php/elFinder.class.php +5401 -0
- data/app/assets/javascripts/elfinder/php/elFinderConnector.class.php +380 -0
- data/app/assets/javascripts/elfinder/php/elFinderFlysystemGoogleDriveNetmount.php +380 -0
- data/app/assets/javascripts/elfinder/php/elFinderPlugin.php +113 -0
- data/app/assets/javascripts/elfinder/php/elFinderSession.php +335 -0
- data/app/assets/javascripts/elfinder/php/elFinderSessionInterface.php +57 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeBox.class.php +1972 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeDriver.class.php +7651 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeDropbox.class.php +1464 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeDropbox2.class.php +1516 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeFTP.class.php +1810 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeGoogleDrive.class.php +2163 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeGroup.class.php +315 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeLocalFileSystem.class.php +1477 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeMySQL.class.php +1022 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeOneDrive.class.php +2131 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeSFTPphpseclib.class.php +838 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeTrash.class.php +51 -0
- data/app/assets/javascripts/elfinder/php/elFinderVolumeTrashMySQL.class.php +51 -0
- data/app/assets/javascripts/elfinder/php/libs/GdBmp.php +473 -0
- data/app/assets/javascripts/elfinder/php/mime.types +781 -0
- data/app/assets/javascripts/elfinder/php/plugins/AutoResize/plugin.php +151 -0
- data/app/assets/javascripts/elfinder/php/plugins/AutoRotate/plugin.php +148 -0
- data/app/assets/javascripts/elfinder/php/plugins/Normalizer/plugin.php +204 -0
- data/app/assets/javascripts/elfinder/php/plugins/Sanitizer/plugin.php +157 -0
- data/app/assets/javascripts/elfinder/php/plugins/Watermark/logo.png +0 -0
- data/app/assets/javascripts/elfinder/php/plugins/Watermark/plugin.php +432 -0
- data/app/assets/javascripts/elfinder/php/plugins/WinRemoveTailDots/plugin.php +114 -0
- data/app/assets/javascripts/elfinder/php/resources/image.png +0 -0
- data/app/assets/javascripts/elfinder/php/resources/video.png +0 -0
- data/app/assets/javascripts/elfinder/sounds/rm.wav +0 -0
- data/app/controllers/dc_elfinder_controller.rb +63 -0
- data/app/models/drgcms_form_fields/elfinder.rb +85 -0
- data/changelog.md +0 -0
- data/lib/drg_elfinder/engine.rb +5 -0
- data/lib/drg_elfinder/version.rb +3 -0
- data/lib/drg_elfinder.rb +9 -0
- data/lib/el_finder/action.rb +19 -0
- data/lib/el_finder/base64.rb +24 -0
- data/lib/el_finder/connector.rb +625 -0
- data/lib/el_finder/image.rb +33 -0
- data/lib/el_finder/mime_type.rb +86 -0
- data/lib/el_finder/pathname.rb +185 -0
- data/lib/el_finder/version.rb +5 -0
- data/lib/el_finder.rb +8 -0
- data/lib/patches/patch_for_elfinder.rb +115 -0
- data/lib/tasks/drg_elfinder_tasks.rake +10 -0
- metadata +245 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<h2>사용 팁</h2>
|
|
2
|
+
<p>UI 조작은 운영체제의 표준 파일 관리자를 사용하는 방법과 비슷합니다. 하지만 모바일 브라우저에서는 드래그앤드롭을 사용할 수 없습니다. </p>
|
|
3
|
+
<ul>
|
|
4
|
+
<li>오른쪽 클릭하거나 길게 누르면 컨텍스트 메뉴가 나타납니다.</li>
|
|
5
|
+
<li>이동/복사하려면 폴더 트리 또는 원하는 폴더로 드래그앤드롭하십시오.</li>
|
|
6
|
+
<li>작업공간에서 항목을 선택하려면 Shift또는 Alt(Option) 키를 사용하여 선택 영역을 넓힐 수 있습니다.</li>
|
|
7
|
+
<li>업로드 대상 폴더 또는 작업 영역으로 파일및 폴더를 드래그앤드롭하여 업로드할 수 있습니다.</li>
|
|
8
|
+
<li>다른 브라우저 또는 파일관리자등에서 드래그앤드롭하거나, 클립보드를 통해 데이터또는 URL을 복사/붙여넣어 업로드할 수 있습니다.</li>
|
|
9
|
+
<li>크롬브라우저의 경우, Alt(Option) 키를 누른 상태에서 브라우저 밖으로 드래그앤드롭하면 다운로드가 가능합니다.</li>
|
|
10
|
+
</ul>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<h2>Wskazówki Obsługi</h2>
|
|
2
|
+
<p>Działanie w interfejsie użytkownika jest podobne do standardowego menedżera plików systemu operacyjnego. Jednak Przeciąganie i Upuszczanie nie jest możliwe w przeglądarkach mobilnych. </p>
|
|
3
|
+
<ul>
|
|
4
|
+
<li>Kliknij prawym przyciskiem myszy lub dłużej, aby wyświetlić menu kontekstowe.</li>
|
|
5
|
+
<li>Przeciągnij i upuść w drzewie folderów lub bieżącym obszarze roboczym, aby przenieść/kopiować elementy.</li>
|
|
6
|
+
<li>Wybór elementu w obszarze roboczym można rozszerzyć wybór z klawiszem Shift lub Alt(Opcja).</li>
|
|
7
|
+
<li>Przeciągnij i Upuść do folderu docelowego lub obszaru roboczego, aby przesłać pliki i foldery.</li>
|
|
8
|
+
<li>W oknie dialogowym przesyłania można zaakceptować wklejanie/upuszczanie danych schowka lub listy adresów URL, i Przeciągnij i Upuść z innych przeglądarek lub menedżerów plików, itp.</li>
|
|
9
|
+
<li>Rozpocznij Przeciąganie naciskając Alt (Opcja), aby przeciągnąć na zewnątrz przeglądarki. Stanie się operacją pobierania z Google Chrome. </li>
|
|
10
|
+
</ul>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<h2>Советы по работе</h2>
|
|
2
|
+
<p>Работа с пользовательским интерфейсом похожа на стандартный файловый менеджер операционной системы. Однако перетаскивание в мобильных браузерах невозможно.</p>
|
|
3
|
+
<ul>
|
|
4
|
+
<li>Щелкните правой кнопкой мыши или используйте «длинный тап», чтобы отобразить контекстное меню.</li>
|
|
5
|
+
<li>Перетащите в дерево папок или текущую рабочую область для перемещения / копирования элементов.</li>
|
|
6
|
+
<li>Выбор элемента в рабочей области может быть расширен с помощью клавиши Shift или Alt (Option).</li>
|
|
7
|
+
<li>Перетащите в папку назначения или рабочую область для загрузки файлов и папок.</li>
|
|
8
|
+
<li>В диалоговом окне загрузки можно использовать вставку данных или списков URL-адресов из буфера обмена, а также перетаскивать из других браузеров или файловых менеджеров и т.д.</li>
|
|
9
|
+
<li>Начните перетаскивание, нажав Alt (Option), чтобы перетащить за пределы браузера. Это запустить процесс скачивания в Google Chrome.</li>
|
|
10
|
+
</ul>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<h2>Tipy na obsluhu</h2>
|
|
2
|
+
<p>Obsluha na používateľskom rozhraní je podobná štandardnému správcovi súborov operačného systému. Drag and Drop však nie je možné používať s mobilnými prehliadačmi. </p>
|
|
3
|
+
<ul>
|
|
4
|
+
<li>Kliknutím pravým tlačidlom alebo dlhým klepnutím zobrazíte kontextové menu.</li>
|
|
5
|
+
<li>Presuňte myšou do stromu priečinkov alebo do aktuálneho pracovného priestoru a presuňte / kopírujte položky.</li>
|
|
6
|
+
<li>Výber položky v pracovnom priestore môžete rozšíriť pomocou klávesov Shift alebo Alt (Možnosť).</li>
|
|
7
|
+
<li>Premiestnite súbory a priečinky do cieľovej zložky alebo do pracovného priestoru.</li>
|
|
8
|
+
<li>Dialog odovzdávania môže prijímať dáta schránky alebo zoznamy adries URL a pritiahnuť a odísť z iných prehliadačov alebo správcov súborov.</li>
|
|
9
|
+
<li>Potiahnutím spustite stlačením klávesu Alt (Možnosť) pretiahnite do vonkajšieho prehliadača. Táto funkcia sa prevezme pomocou prehliadača Google Chrome.</li>
|
|
10
|
+
</ul>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<h2>İşlem İpuçları</h2>
|
|
2
|
+
<p>Kullanıcı arayüzündeki işlem, işletim sisteminin standart dosya yöneticisine benzer. Ancak Sürükle ve Bırak özelliği mobil tarayıcılarda mümkün değildir. </p>
|
|
3
|
+
<ul>
|
|
4
|
+
<li>Bağlam menüsünü göstermek için sağ tıklayın veya uzun dokunun.</li>
|
|
5
|
+
<li>Öğeleri taşımak/kopyalamak için klasör ağacına veya geçerli çalışma alanına sürükleyip bırakın.</li>
|
|
6
|
+
<li>Çalışma alanındaki öğe seçimi Shift veya Alt (Seçenek) tuşuyla genişletilebilir.</li>
|
|
7
|
+
<li>Dosya ve klasör yüklemek için hedef klasöre veya çalışma alanına sürükleyip bırakın.</li>
|
|
8
|
+
<li>Yükleme iletişim kutusu, pano verilerini veya URL listelerini yapıştırma/bırakma ve diğer tarayıcı veya dosya yöneticilerinden Sürükle ve Bırak vb.</li>
|
|
9
|
+
<li>Dış tarayıcıya sürüklemek için Alt (Seçenek) tuşuna basarak sürükleyin. Google Chrome ile indirme işlemi olacak.</li>
|
|
10
|
+
</ul>
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* elFinder transport to support old protocol.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* $('selector').elfinder({
|
|
6
|
+
* ....
|
|
7
|
+
* transport : new elFinderSupportVer1()
|
|
8
|
+
* })
|
|
9
|
+
*
|
|
10
|
+
* @author Dmitry (dio) Levashov
|
|
11
|
+
**/
|
|
12
|
+
window.elFinderSupportVer1 = function(upload) {
|
|
13
|
+
"use strict";
|
|
14
|
+
var self = this,
|
|
15
|
+
dateObj, today, yesterday,
|
|
16
|
+
getDateString = function(date) {
|
|
17
|
+
return date.replace('Today', today).replace('Yesterday', yesterday);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
dateObj = new Date();
|
|
21
|
+
today = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate();
|
|
22
|
+
dateObj = new Date(Date.now() - 86400000);
|
|
23
|
+
yesterday = dateObj.getFullYear() + '/' + (dateObj.getMonth() + 1) + '/' + dateObj.getDate();
|
|
24
|
+
|
|
25
|
+
this.upload = upload || 'auto';
|
|
26
|
+
|
|
27
|
+
this.init = function(fm) {
|
|
28
|
+
this.fm = fm;
|
|
29
|
+
this.fm.parseUploadData = function(text) {
|
|
30
|
+
var data;
|
|
31
|
+
|
|
32
|
+
if (!$.trim(text)) {
|
|
33
|
+
return {error : ['errResponse', 'errDataEmpty']};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
data = JSON.parse(text);
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return {error : ['errResponse', 'errDataNotJSON']};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return self.normalize('upload', data);
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
this.send = function(opts) {
|
|
48
|
+
var self = this,
|
|
49
|
+
fm = this.fm,
|
|
50
|
+
dfrd = $.Deferred(),
|
|
51
|
+
cmd = opts.data.cmd,
|
|
52
|
+
args = [],
|
|
53
|
+
_opts = {},
|
|
54
|
+
data,
|
|
55
|
+
xhr;
|
|
56
|
+
|
|
57
|
+
dfrd.abort = function() {
|
|
58
|
+
if (xhr.state() == 'pending') {
|
|
59
|
+
xhr.quiet = true;
|
|
60
|
+
xhr.abort();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
switch (cmd) {
|
|
65
|
+
case 'open':
|
|
66
|
+
opts.data.tree = 1;
|
|
67
|
+
break;
|
|
68
|
+
case 'parents':
|
|
69
|
+
case 'tree':
|
|
70
|
+
return dfrd.resolve({tree : []});
|
|
71
|
+
case 'get':
|
|
72
|
+
opts.data.cmd = 'read';
|
|
73
|
+
opts.data.current = fm.file(opts.data.target).phash;
|
|
74
|
+
break;
|
|
75
|
+
case 'put':
|
|
76
|
+
opts.data.cmd = 'edit';
|
|
77
|
+
opts.data.current = fm.file(opts.data.target).phash;
|
|
78
|
+
break;
|
|
79
|
+
case 'archive':
|
|
80
|
+
case 'rm':
|
|
81
|
+
opts.data.current = fm.file(opts.data.targets[0]).phash;
|
|
82
|
+
break;
|
|
83
|
+
case 'extract':
|
|
84
|
+
case 'rename':
|
|
85
|
+
case 'resize':
|
|
86
|
+
opts.data.current = fm.file(opts.data.target).phash;
|
|
87
|
+
break;
|
|
88
|
+
case 'duplicate':
|
|
89
|
+
_opts = $.extend(true, {}, opts);
|
|
90
|
+
|
|
91
|
+
$.each(opts.data.targets, function(i, hash) {
|
|
92
|
+
$.ajax(Object.assign(_opts, {data : {cmd : 'duplicate', target : hash, current : fm.file(hash).phash}}))
|
|
93
|
+
.fail(function(error) {
|
|
94
|
+
fm.error(fm.res('error', 'connect'));
|
|
95
|
+
})
|
|
96
|
+
.done(function(data) {
|
|
97
|
+
data = self.normalize('duplicate', data);
|
|
98
|
+
if (data.error) {
|
|
99
|
+
fm.error(data.error);
|
|
100
|
+
} else if (data.added) {
|
|
101
|
+
fm.trigger('add', {added : data.added});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
return dfrd.resolve({});
|
|
106
|
+
|
|
107
|
+
case 'mkdir':
|
|
108
|
+
case 'mkfile':
|
|
109
|
+
opts.data.current = opts.data.target;
|
|
110
|
+
break;
|
|
111
|
+
case 'paste':
|
|
112
|
+
opts.data.current = opts.data.dst;
|
|
113
|
+
if (! opts.data.tree) {
|
|
114
|
+
$.each(opts.data.targets, function(i, h) {
|
|
115
|
+
if (fm.file(h) && fm.file(h).mime === 'directory') {
|
|
116
|
+
opts.data.tree = '1';
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
|
|
123
|
+
case 'size':
|
|
124
|
+
return dfrd.resolve({error : fm.res('error', 'cmdsupport')});
|
|
125
|
+
case 'search':
|
|
126
|
+
return dfrd.resolve({error : fm.res('error', 'cmdsupport')});
|
|
127
|
+
|
|
128
|
+
case 'file':
|
|
129
|
+
opts.data.cmd = 'open';
|
|
130
|
+
opts.data.current = fm.file(opts.data.target).phash;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
// cmd = opts.data.cmd
|
|
134
|
+
|
|
135
|
+
xhr = $.ajax(opts)
|
|
136
|
+
.fail(function(error) {
|
|
137
|
+
dfrd.reject(error);
|
|
138
|
+
})
|
|
139
|
+
.done(function(raw) {
|
|
140
|
+
data = self.normalize(cmd, raw);
|
|
141
|
+
dfrd.resolve(data);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
return dfrd;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// fix old connectors errors messages as possible
|
|
148
|
+
// this.errors = {
|
|
149
|
+
// 'Unknown command' : 'Unknown command.',
|
|
150
|
+
// 'Invalid backend configuration' : 'Invalid backend configuration.',
|
|
151
|
+
// 'Access denied' : 'Access denied.',
|
|
152
|
+
// 'PHP JSON module not installed' : 'PHP JSON module not installed.',
|
|
153
|
+
// 'File not found' : 'File not found.',
|
|
154
|
+
// 'Invalid name' : 'Invalid file name.',
|
|
155
|
+
// 'File or folder with the same name already exists' : 'File named "$1" already exists in this location.',
|
|
156
|
+
// 'Not allowed file type' : 'Not allowed file type.',
|
|
157
|
+
// 'File exceeds the maximum allowed filesize' : 'File exceeds maximum allowed size.',
|
|
158
|
+
// 'Unable to copy into itself' : 'Unable to copy "$1" into itself.',
|
|
159
|
+
// 'Unable to create archive' : 'Unable to create archive.',
|
|
160
|
+
// 'Unable to extract files from archive' : 'Unable to extract files from "$1".'
|
|
161
|
+
// }
|
|
162
|
+
|
|
163
|
+
this.normalize = function(cmd, data) {
|
|
164
|
+
var self = this,
|
|
165
|
+
fm = this.fm,
|
|
166
|
+
files = {},
|
|
167
|
+
filter = function(file) { return file && file.hash && file.name && file.mime ? file : null; },
|
|
168
|
+
getDirs = function(items) {
|
|
169
|
+
return $.grep(items, function(i) {
|
|
170
|
+
return i && i.mime && i.mime === 'directory'? true : false;
|
|
171
|
+
});
|
|
172
|
+
},
|
|
173
|
+
getTreeDiff = function(files) {
|
|
174
|
+
var dirs = getDirs(files);
|
|
175
|
+
treeDiff = fm.diff(dirs, null, ['date', 'ts']);
|
|
176
|
+
if (treeDiff.added.length) {
|
|
177
|
+
treeDiff.added = getDirs(treeDiff.added);
|
|
178
|
+
}
|
|
179
|
+
if (treeDiff.changed.length) {
|
|
180
|
+
treeDiff.changed = getDirs(treeDiff.changed);
|
|
181
|
+
}
|
|
182
|
+
if (treeDiff.removed.length) {
|
|
183
|
+
var removed = [];
|
|
184
|
+
$.each(treeDiff.removed, function(i, h) {
|
|
185
|
+
var item;
|
|
186
|
+
if ((item = fm.file(h)) && item.mime === 'directory') {
|
|
187
|
+
removed.push(h);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
treeDiff.removed = removed;
|
|
191
|
+
}
|
|
192
|
+
return treeDiff;
|
|
193
|
+
},
|
|
194
|
+
phash, diff, isCwd, treeDiff;
|
|
195
|
+
|
|
196
|
+
if ((cmd == 'tmb' || cmd == 'get')) {
|
|
197
|
+
return data;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// if (data.error) {
|
|
201
|
+
// $.each(data.error, function(i, msg) {
|
|
202
|
+
// if (self.errors[msg]) {
|
|
203
|
+
// data.error[i] = self.errors[msg];
|
|
204
|
+
// }
|
|
205
|
+
// });
|
|
206
|
+
// }
|
|
207
|
+
|
|
208
|
+
if (cmd == 'upload' && data.error && data.cwd) {
|
|
209
|
+
data.warning = Object.assign({}, data.error);
|
|
210
|
+
data.error = false;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
if (data.error) {
|
|
215
|
+
return data;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (cmd == 'put') {
|
|
219
|
+
|
|
220
|
+
phash = fm.file(data.target.hash).phash;
|
|
221
|
+
return {changed : [this.normalizeFile(data.target, phash)]};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
phash = data.cwd.hash;
|
|
225
|
+
|
|
226
|
+
isCwd = (phash == fm.cwd().hash);
|
|
227
|
+
|
|
228
|
+
if (data.tree) {
|
|
229
|
+
$.each(this.normalizeTree(data.tree), function(i, file) {
|
|
230
|
+
files[file.hash] = file;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
$.each(data.cdc||[], function(i, file) {
|
|
235
|
+
var hash = file.hash,
|
|
236
|
+
mcts;
|
|
237
|
+
|
|
238
|
+
if (files[hash]) {
|
|
239
|
+
if (file.date) {
|
|
240
|
+
mcts = Date.parse(getDateString(file.date));
|
|
241
|
+
if (mcts && !isNaN(mcts)) {
|
|
242
|
+
files[hash].ts = Math.floor(mcts / 1000);
|
|
243
|
+
} else {
|
|
244
|
+
files[hash].date = file.date || fm.formatDate(file);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
files[hash].locked = file.hash == phash ? true : file.rm === void(0) ? false : !file.rm;
|
|
248
|
+
} else {
|
|
249
|
+
files[hash] = self.normalizeFile(file, phash, data.tmb);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
if (!data.tree) {
|
|
254
|
+
$.each(fm.files(), function(hash, file) {
|
|
255
|
+
if (!files[hash] && file.phash != phash && file.mime == 'directory') {
|
|
256
|
+
files[hash] = file;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (cmd == 'open') {
|
|
262
|
+
return {
|
|
263
|
+
cwd : files[phash] || this.normalizeFile(data.cwd),
|
|
264
|
+
files : $.map(files, function(f) { return f; }),
|
|
265
|
+
options : self.normalizeOptions(data),
|
|
266
|
+
init : !!data.params,
|
|
267
|
+
debug : data.debug
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (isCwd) {
|
|
272
|
+
diff = fm.diff($.map(files, filter));
|
|
273
|
+
} else {
|
|
274
|
+
if (data.tree && cmd !== 'paste') {
|
|
275
|
+
diff = getTreeDiff(files);
|
|
276
|
+
} else {
|
|
277
|
+
diff = {
|
|
278
|
+
added : [],
|
|
279
|
+
removed : [],
|
|
280
|
+
changed : []
|
|
281
|
+
};
|
|
282
|
+
if (cmd === 'paste') {
|
|
283
|
+
diff.sync = true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return Object.assign({
|
|
289
|
+
current : data.cwd.hash,
|
|
290
|
+
error : data.error,
|
|
291
|
+
warning : data.warning,
|
|
292
|
+
options : {tmb : !!data.tmb}
|
|
293
|
+
}, diff);
|
|
294
|
+
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Convert old api tree into plain array of dirs
|
|
299
|
+
*
|
|
300
|
+
* @param Object root dir
|
|
301
|
+
* @return Array
|
|
302
|
+
*/
|
|
303
|
+
this.normalizeTree = function(root) {
|
|
304
|
+
var self = this,
|
|
305
|
+
result = [],
|
|
306
|
+
traverse = function(dirs, phash) {
|
|
307
|
+
var i, dir;
|
|
308
|
+
|
|
309
|
+
for (i = 0; i < dirs.length; i++) {
|
|
310
|
+
dir = dirs[i];
|
|
311
|
+
result.push(self.normalizeFile(dir, phash));
|
|
312
|
+
dir.dirs.length && traverse(dir.dirs, dir.hash);
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
traverse([root]);
|
|
317
|
+
|
|
318
|
+
return result;
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Convert file info from old api format into new one
|
|
323
|
+
*
|
|
324
|
+
* @param Object file
|
|
325
|
+
* @param String parent dir hash
|
|
326
|
+
* @return Object
|
|
327
|
+
*/
|
|
328
|
+
this.normalizeFile = function(file, phash, tmb) {
|
|
329
|
+
var mime = file.mime || 'directory',
|
|
330
|
+
size = mime == 'directory' && !file.linkTo ? 0 : file.size,
|
|
331
|
+
mcts = file.date? Date.parse(getDateString(file.date)) : void 0,
|
|
332
|
+
info = {
|
|
333
|
+
url : file.url,
|
|
334
|
+
hash : file.hash,
|
|
335
|
+
phash : phash,
|
|
336
|
+
name : file.name,
|
|
337
|
+
mime : mime,
|
|
338
|
+
ts : file.ts,
|
|
339
|
+
size : size,
|
|
340
|
+
read : file.read,
|
|
341
|
+
write : file.write,
|
|
342
|
+
locked : !phash ? true : file.rm === void(0) ? false : !file.rm
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
if (! info.ts) {
|
|
346
|
+
if (mcts && !isNaN(mcts)) {
|
|
347
|
+
info.ts = Math.floor(mcts / 1000);
|
|
348
|
+
} else {
|
|
349
|
+
info.date = file.date || this.fm.formatDate(file);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (file.mime == 'application/x-empty' || file.mime == 'inode/x-empty') {
|
|
354
|
+
info.mime = 'text/plain';
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
if (file.linkTo) {
|
|
358
|
+
info.alias = file.linkTo;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
if (file.linkTo) {
|
|
362
|
+
info.linkTo = file.linkTo;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
if (file.tmb) {
|
|
366
|
+
info.tmb = file.tmb;
|
|
367
|
+
} else if (info.mime.indexOf('image/') === 0 && tmb) {
|
|
368
|
+
info.tmb = 1;
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (file.dirs && file.dirs.length) {
|
|
373
|
+
info.dirs = true;
|
|
374
|
+
}
|
|
375
|
+
if (file.dim) {
|
|
376
|
+
info.dim = file.dim;
|
|
377
|
+
}
|
|
378
|
+
if (file.resize) {
|
|
379
|
+
info.resize = file.resize;
|
|
380
|
+
}
|
|
381
|
+
return info;
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
this.normalizeOptions = function(data) {
|
|
385
|
+
var opts = {
|
|
386
|
+
path : data.cwd.rel,
|
|
387
|
+
disabled : $.merge((data.disabled || []), [ 'search', 'netmount', 'zipdl' ]),
|
|
388
|
+
tmb : !!data.tmb,
|
|
389
|
+
copyOverwrite : true
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
if (data.params) {
|
|
393
|
+
opts.api = 1;
|
|
394
|
+
opts.url = data.params.url;
|
|
395
|
+
opts.archivers = {
|
|
396
|
+
create : data.params.archives || [],
|
|
397
|
+
extract : data.params.extract || []
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
if (opts.path.indexOf('/') !== -1) {
|
|
402
|
+
opts.separator = '/';
|
|
403
|
+
} else if (opts.path.indexOf('\\') !== -1) {
|
|
404
|
+
opts.separator = '\\';
|
|
405
|
+
}
|
|
406
|
+
return opts;
|
|
407
|
+
};
|
|
408
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var type = self.data.type,
|
|
2
|
+
bin = self.data.bin,
|
|
3
|
+
hashOpts = self.data.hashOpts;
|
|
4
|
+
|
|
5
|
+
self.res = {};
|
|
6
|
+
if (type === 'md5') {
|
|
7
|
+
let sp = new self.SparkMD5.ArrayBuffer();
|
|
8
|
+
sp.append(bin);
|
|
9
|
+
self.res.hash = sp.end();
|
|
10
|
+
} else {
|
|
11
|
+
let sha = new jsSHA('SHA' + (type.length === 5? type : ('-' + type)).toUpperCase(), 'ARRAYBUFFER'),
|
|
12
|
+
opts = {};
|
|
13
|
+
if (type === 'ke128') {
|
|
14
|
+
opts.shakeLen = hashOpts.shake128len;
|
|
15
|
+
} else if (type === 'ke256') {
|
|
16
|
+
opts.shakeLen = hashOpts.shake256len;
|
|
17
|
+
}
|
|
18
|
+
sha.update(bin);
|
|
19
|
+
self.res.hash = sha.getHash('HEX', opts);
|
|
20
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
var type = self.data.type,
|
|
2
|
+
bin = self.data.bin,
|
|
3
|
+
unzipFiles = function() {
|
|
4
|
+
/** @type {Array.<string>} */
|
|
5
|
+
var filenameList = [];
|
|
6
|
+
/** @type {number} */
|
|
7
|
+
var i;
|
|
8
|
+
/** @type {number} */
|
|
9
|
+
var il;
|
|
10
|
+
/** @type {Array.<Zlib.Unzip.FileHeader>} */
|
|
11
|
+
var fileHeaderList;
|
|
12
|
+
// need check this.Y when update cdns.zlibUnzip
|
|
13
|
+
this.Y();
|
|
14
|
+
fileHeaderList = this.i;
|
|
15
|
+
for (i = 0, il = fileHeaderList.length; i < il; ++i) {
|
|
16
|
+
// need check fileHeaderList[i].J when update cdns.zlibUnzip
|
|
17
|
+
filenameList[i] = fileHeaderList[i].filename + (fileHeaderList[i].J? ' ({formatSize(' + fileHeaderList[i].J + ')})' : '');
|
|
18
|
+
}
|
|
19
|
+
return filenameList;
|
|
20
|
+
},
|
|
21
|
+
tarFiles = function(tar) {
|
|
22
|
+
var filenames = [],
|
|
23
|
+
tarlen = tar.length,
|
|
24
|
+
offset = 0,
|
|
25
|
+
toStr = function(arr) {
|
|
26
|
+
return String.fromCharCode.apply(null, arr).replace(/\0+$/, '');
|
|
27
|
+
},
|
|
28
|
+
h, name, prefix, size, dbs;
|
|
29
|
+
while (offset < tarlen && tar[offset] !== 0) {
|
|
30
|
+
h = tar.subarray(offset, offset + 512);
|
|
31
|
+
name = toStr(h.subarray(0, 100));
|
|
32
|
+
if (prefix = toStr(h.subarray(345, 500))) {
|
|
33
|
+
name = prefix + name;
|
|
34
|
+
}
|
|
35
|
+
size = parseInt(toStr(h.subarray(124, 136)), 8);
|
|
36
|
+
dbs = Math.ceil(size / 512) * 512;
|
|
37
|
+
if (name === '././@LongLink') {
|
|
38
|
+
name = toStr(tar.subarray(offset + 512, offset + 512 + dbs));
|
|
39
|
+
}
|
|
40
|
+
(name !== 'pax_global_header') && filenames.push(name + (size? ' ({formatSize(' + size + ')})': ''));
|
|
41
|
+
offset = offset + 512 + dbs;
|
|
42
|
+
}
|
|
43
|
+
return filenames;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
self.res = {};
|
|
47
|
+
if (type === 'tar') {
|
|
48
|
+
self.res.files = tarFiles(new Uint8Array(bin));
|
|
49
|
+
} else if (type === 'zip') {
|
|
50
|
+
self.res.files = unzipFiles.call(new Zlib.Unzip(new Uint8Array(bin)));
|
|
51
|
+
} else if (type === 'gzip') {
|
|
52
|
+
self.res.files = tarFiles((new Zlib.Gunzip(new Uint8Array(bin))).decompress());
|
|
53
|
+
} else if (type === 'bzip2') {
|
|
54
|
+
self.res.files = tarFiles(self.bzip2.simple(self.bzip2.array(new Uint8Array(bin))));
|
|
55
|
+
}
|