diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php index 0d1d4e791..93c55bd4c 100644 --- a/Zotlabs/Storage/Browser.php +++ b/Zotlabs/Storage/Browser.php @@ -69,81 +69,6 @@ class Browser extends DAV\Browser\Plugin { } } - /** - * Extend from parent to add our own listeners - */ - function initialize(DAV\Server $server) { - parent::initialize($server); - if ($this->enablePost) { - $this->server->on('onBrowserPostAction', [$this, 'cloudPostAction']); - } - } - - /** - * Handles POST requests for tree operations. - * - * @param string $uri - * @param string $action - * @param array $postVars - * @return boolean false will stop other events in the beforeMethod chain to execute - */ - function cloudPostAction($uri, $action, $postVars) { - switch ($postVars['sabreAction']) { - case 'mkcol' : - if (isset($postVars['name']) && trim($postVars['name'])) { - // Using basename() because we won't allow slashes - list(, $folderName) = \Sabre\HTTP\URLUtil::splitPath(trim($postVars['name'])); - - if (isset($postVars['resourceType'])) { - $resourceType = explode(',', $postVars['resourceType']); - } else { - $resourceType = ['{DAV:}collection']; - } - - $properties = []; - foreach ($postVars as $varName => $varValue) { - // Any _POST variable in clark notation is treated - // like a property. - if ($varName[0] === '{') { - // PHP will convert any dots to underscores. - // This leaves us with no way to differentiate - // the two. - // Therefore we replace the string *DOT* with a - // real dot. * is not allowed in uris so we - // should be good. - $varName = str_replace('*DOT*', '.', $varName); - $properties[$varName] = $varValue; - } - } - - $mkCol = new DAV\MkCol( - $resourceType, - $properties - ); - $this->server->createCollection($uri . '/' . $folderName, $mkCol); - } - break; - - case 'put' : - - if ($_FILES) - $file = current($_FILES); - else - break; - - for ($i = 0; $i < count($file['name']); $i++) { - list(, $newName) = \Sabre\HTTP\URLUtil::splitPath(trim($file['name'][$i])); - - if (is_uploaded_file($file['tmp_name'][$i])) { - $this->server->createFile($uri . '/' . $newName, fopen($file['tmp_name'][$i], 'r')); - } - } - break; - - } - return false; - } - /** * @brief Creates the directory listing for the given path. * diff --git a/view/css/mod_cloud.css b/view/css/mod_cloud.css index ed07ceb6f..85b6e4aff 100644 --- a/view/css/mod_cloud.css +++ b/view/css/mod_cloud.css @@ -41,3 +41,7 @@ padding: 7px 10px; width: 100%; } + +#cloud-drag-area.hover { + box-shadow: inset 0 0px 7px #5cb85c; +} diff --git a/view/js/mod_cloud.js b/view/js/mod_cloud.js index 0584cec53..4ef87ec4b 100644 --- a/view/js/mod_cloud.js +++ b/view/js/mod_cloud.js @@ -3,96 +3,140 @@ */ $(document).ready(function () { - // call initialization file - if (window.File && window.FileList && window.FileReader) { - DragDropUploadInit(); - } + // call initialization file + if (window.File && window.FileList && window.FileReader) { + UploadInit(); + } }); // // initialize -function DragDropUploadInit() { +function UploadInit() { - var fileselect = $("#fileselect"), - filedrag = $("#filedrag"); + var fileselect = $("#files-upload"); + var filedrag = $("#cloud-drag-area"); + var submit = $("#upload-submit"); - // file select - fileselect.on("change", DragDropUploadFileSelectHandler); + // is XHR2 available? + var xhr = new XMLHttpRequest(); + if (xhr.upload) { - // is XHR2 available? - var xhr = new XMLHttpRequest(); - if (xhr.upload) { + // file select + fileselect.on("change", UploadFileSelectHandler); - // file drop - filedrag.on("dragover", DragDropUploadFileHover); - filedrag.on("dragleave", DragDropUploadFileHover); - filedrag.on("drop", DragDropUploadFileSelectHandler); - filedrag.show(); - - } - - window.filesToUpload = 0; - window.fileUploadsCompleted = 0; + // file submit + submit.on("click", fileselect, UploadFileSelectHandler); + // file drop + filedrag.on("dragover", DragDropUploadFileHover); + filedrag.on("dragleave", DragDropUploadFileHover); + filedrag.on("drop", DragDropUploadFileSelectHandler); + } + window.filesToUpload = 0; + window.fileUploadsCompleted = 0; } // file drag hover function DragDropUploadFileHover(e) { - e.stopPropagation(); - e.preventDefault(); - e.target.className = (e.type == "dragover" ? "hover" : ""); + e.stopPropagation(); + e.preventDefault(); + e.currentTarget.className = (e.type == "dragover" ? "hover" : ""); } -// file selection +// file selection via drag/drop function DragDropUploadFileSelectHandler(e) { + // cancel event and hover styling + DragDropUploadFileHover(e); - // cancel event and hover styling - DragDropUploadFileHover(e); + // fetch FileList object + var files = e.target.files || e.originalEvent.dataTransfer.files; - // fetch FileList object - var files = e.target.files || e.originalEvent.dataTransfer.files; - $("#file-upload-list").empty(); - // process all File objects - for (var i = 0, f; f = files[i]; i++) { - $("#file-upload-list").append( - "
" + " -> File: " + f.name + - " type: " + f.type + - " size: " + f.size + - " bytes
" - ); - DragDropUploadFile(f, i); - } + $('.new-upload').remove(); + // process all File objects + for (var i = 0, f; f = files[i]; i++) { + prepareHtml(f, i); + UploadFile(f, i); + } +} + +// file selection via input +function UploadFileSelectHandler(e) { + // fetch FileList object + if(e.type === 'click') { + e.preventDefault(); + var files = e.data[0].files; + } + else { + var files = e.target.files; + } + + $('.new-upload').remove(); + + // process all File objects + for (var i = 0, f; f = files[i]; i++) { + prepareHtml(f, i); + if(e.type === 'click') + UploadFile(f, i); + } +} + +function prepareHtml(f, i) { + $("#cloud-index").prepend( + "