aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_trashbin/js
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2013-10-28 20:22:06 +0100
committerVincent Petry <pvince81@owncloud.com>2014-04-02 15:33:47 +0200
commit0be9de5df558232e12e2f582af5d08e1f488ba90 (patch)
treede37dea2e23dd28f631948295979980ec774027f /apps/files_trashbin/js
parent268206cec55921d2d0309469ebd5d9533e4f79ee (diff)
downloadnextcloud-server-0be9de5df558232e12e2f582af5d08e1f488ba90.tar.gz
nextcloud-server-0be9de5df558232e12e2f582af5d08e1f488ba90.zip
Files, trashbin, public apps use ajax/JSON for the file list
Files app: - removed file list template, now rendering list from JSON response - FileList.addFile/addDir is now FileList.add() and takes a JS map with all required arguments instead of having a long number of function arguments - added unit tests for many FileList operations - fixed newfile.php, newfolder.php and rename.php to return the file's full JSON on success - removed obsolete/unused undo code - removed download_url / loading options, now using Files.getDownloadUrl() for that - server side now uses Helper::getFileInfo() to prepare file JSON response - previews are now client-side only Breadcrumbs are now JS only: - Added BreadCrumb class to handle breadcrumb rendering and events - Added unit test for BreadCrumb class - Moved all relevant JS functions to the BreadCrumb class Public page now uses ajax to load the file list: - Added Helper class in sharing app to make it easier to authenticate and retrieve the file's real path - Added ajax/list.php to retrieve the file list - Fixed FileActions and FileList to work with the ajax list Core: - Fixed file picker dialog to use the same list format as files app
Diffstat (limited to 'apps/files_trashbin/js')
-rw-r--r--apps/files_trashbin/js/disableDefaultActions.js1
-rw-r--r--apps/files_trashbin/js/filelist.js137
-rw-r--r--apps/files_trashbin/js/trash.js114
3 files changed, 149 insertions, 103 deletions
diff --git a/apps/files_trashbin/js/disableDefaultActions.js b/apps/files_trashbin/js/disableDefaultActions.js
index afa80cacd6b..50ceaf4696f 100644
--- a/apps/files_trashbin/js/disableDefaultActions.js
+++ b/apps/files_trashbin/js/disableDefaultActions.js
@@ -1,4 +1,3 @@
/* disable download and sharing actions */
var disableDownloadActions = true;
-var disableSharing = true;
var trashBinApp = true;
diff --git a/apps/files_trashbin/js/filelist.js b/apps/files_trashbin/js/filelist.js
index a88459b0a9a..7795daf2775 100644
--- a/apps/files_trashbin/js/filelist.js
+++ b/apps/files_trashbin/js/filelist.js
@@ -1,61 +1,78 @@
-/* globals OC, FileList, t */
-// override reload with own ajax call
-FileList.reload = function(){
- FileList.showMask();
- if (FileList._reloadCall){
- FileList._reloadCall.abort();
- }
- $.ajax({
- url: OC.filePath('files_trashbin','ajax','list.php'),
- data: {
- dir : $('#dir').val(),
- breadcrumb: true
- },
- error: function(result) {
- FileList.reloadCallback(result);
- },
- success: function(result) {
- FileList.reloadCallback(result);
+/* global OC, t, FileList */
+(function() {
+ FileList.appName = t('files_trashbin', 'Deleted files');
+
+ FileList._deletedRegExp = new RegExp(/^(.+)\.d[0-9]+$/);
+
+ /**
+ * Convert a file name in the format filename.d12345 to the real file name.
+ * This will use basename.
+ * The name will not be changed if it has no ".d12345" suffix.
+ * @param name file name
+ * @return converted file name
+ */
+ FileList.getDeletedFileName = function(name) {
+ name = OC.basename(name);
+ var match = FileList._deletedRegExp.exec(name);
+ if (match && match.length > 1) {
+ name = match[1];
}
- });
-};
-
-FileList.appName = t('files_trashbin', 'Deleted files');
-
-FileList._deletedRegExp = new RegExp(/^(.+)\.d[0-9]+$/);
-
-/**
- * Convert a file name in the format filename.d12345 to the real file name.
- * This will use basename.
- * The name will not be changed if it has no ".d12345" suffix.
- * @param name file name
- * @return converted file name
- */
-FileList.getDeletedFileName = function(name) {
- name = OC.basename(name);
- var match = FileList._deletedRegExp.exec(name);
- if (match && match.length > 1) {
- name = match[1];
- }
- return name;
-};
-var oldSetCurrentDir = FileList.setCurrentDir;
-FileList.setCurrentDir = function(targetDir) {
- oldSetCurrentDir.apply(this, arguments);
-
- var baseDir = OC.basename(targetDir);
- if (baseDir !== '') {
- FileList.setPageTitle(FileList.getDeletedFileName(baseDir));
- }
-};
-
-FileList.linkTo = function(dir){
- return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/');
-}
-
-FileList.updateEmptyContent = function(){
- var $fileList = $('#fileList');
- var exists = $fileList.find('tr:first').exists();
- $('#emptycontent').toggleClass('hidden', exists);
- $('#filestable th').toggleClass('hidden', !exists);
-}
+ return name;
+ };
+
+ var oldSetCurrentDir = FileList._setCurrentDir;
+ FileList._setCurrentDir = function(targetDir) {
+ oldSetCurrentDir.apply(this, arguments);
+
+ var baseDir = OC.basename(targetDir);
+ if (baseDir !== '') {
+ FileList.setPageTitle(FileList.getDeletedFileName(baseDir));
+ }
+ };
+
+ var oldCreateRow = FileList._createRow;
+ FileList._createRow = function() {
+ // FIXME: MEGAHACK until we find a better solution
+ var tr = oldCreateRow.apply(this, arguments);
+ tr.find('td.filesize').remove();
+ return tr;
+ };
+
+ FileList._onClickBreadCrumb = function(e) {
+ var $el = $(e.target).closest('.crumb'),
+ index = $el.index(),
+ $targetDir = $el.data('dir');
+ // first one is home, let the link makes it default action
+ if (index !== 0) {
+ e.preventDefault();
+ FileList.changeDirectory($targetDir);
+ }
+ };
+
+ var oldAdd = FileList.add;
+ FileList.add = function(fileData, options) {
+ options = options || {};
+ var dir = FileList.getCurrentDirectory();
+ var dirListing = dir !== '' && dir !== '/';
+ // show deleted time as mtime
+ if (fileData.mtime) {
+ fileData.mtime = parseInt(fileData.mtime, 10);
+ }
+ if (!dirListing) {
+ fileData.displayName = fileData.name;
+ fileData.name = fileData.name + '.d' + Math.floor(fileData.mtime / 1000);
+ }
+ return oldAdd.call(this, fileData, options);
+ };
+
+ FileList.linkTo = function(dir){
+ return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/');
+ };
+
+ FileList.updateEmptyContent = function(){
+ var $fileList = $('#fileList');
+ var exists = $fileList.find('tr:first').exists();
+ $('#emptycontent').toggleClass('hidden', exists);
+ $('#filestable th').toggleClass('hidden', !exists);
+ };
+})();
diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js
index efe1e89f0bf..5cd49e19aaa 100644
--- a/apps/files_trashbin/js/trash.js
+++ b/apps/files_trashbin/js/trash.js
@@ -8,9 +8,26 @@
*
*/
-/* global OC, t, FileList, FileActions */
-
+/* global OC, t, BreadCrumb, FileActions, FileList, Files */
$(document).ready(function() {
+ var deletedRegExp = new RegExp(/^(.+)\.d[0-9]+$/);
+
+ /**
+ * Convert a file name in the format filename.d12345 to the real file name.
+ * This will use basename.
+ * The name will not be changed if it has no ".d12345" suffix.
+ * @param name file name
+ * @return converted file name
+ */
+ function getDeletedFileName(name) {
+ name = OC.basename(name);
+ var match = deletedRegExp.exec(name);
+ if (match && match.length > 1) {
+ name = match[1];
+ }
+ return name;
+ }
+
function removeCallback(result) {
if (result.status !== 'success') {
OC.dialogs.alert(result.data.message, t('core', 'Error'));
@@ -18,7 +35,7 @@ $(document).ready(function() {
var files = result.data.success;
for (var i = 0; i < files.length; i++) {
- FileList.findFileEl(OC.basename(files[i].filename)).remove();
+ FileList.remove(OC.basename(files[i].filename), {updateSummary: false});
}
FileList.updateFileSummary();
FileList.updateEmptyContent();
@@ -74,7 +91,6 @@ $(document).ready(function() {
}
procesSelection();
});
-
$('.undelete').click('click', function(event) {
event.preventDefault();
var allFiles = $('#select_all').is(':checked');
@@ -89,7 +105,7 @@ $(document).ready(function() {
};
}
else {
- files = getSelectedFiles('name');
+ files = Files.getSelectedFiles('name');
for (var i = 0; i < files.length; i++) {
var deleteAction = FileList.findFileEl(files[i]).children("td.date").children(".action.delete");
deleteAction.removeClass('delete-icon').addClass('progress-icon');
@@ -131,7 +147,7 @@ $(document).ready(function() {
};
}
else {
- files = getSelectedFiles('name');
+ files = Files.getSelectedFiles('name');
params = {
files: JSON.stringify(files),
dir: FileList.getCurrentDirectory()
@@ -158,7 +174,7 @@ $(document).ready(function() {
}
FileList.hideMask();
// simply remove all files
- FileList.update('');
+ FileList.setFiles([]);
enableActions();
}
else {
@@ -191,7 +207,7 @@ $(document).ready(function() {
var filename = $(this).parent().parent().attr('data-file');
var tr = FileList.findFileEl(filename);
var renaming = tr.data('renaming');
- if(!renaming && !FileList.isLoading(filename)){
+ if(!renaming){
if(mime.substr(0, 5) === 'text/'){ //no texteditor for now
return;
}
@@ -203,47 +219,61 @@ $(document).ready(function() {
action(filename);
}
}
-
- // event handlers for breadcrumb items
- $('#controls').delegate('.crumb:not(.home) a', 'click', onClickBreadcrumb);
});
- FileActions.actions.dir = {
- // only keep 'Open' action for navigation
- 'Open': FileActions.actions.dir.Open
+ /**
+ * Override crumb URL maker (hacky!)
+ */
+ FileList.breadcrumb.getCrumbUrl = function(part, index) {
+ if (index === 0) {
+ return OC.linkTo('files', 'index.php');
+ }
+ return OC.linkTo('files_trashbin', 'index.php')+"?dir=" + encodeURIComponent(part.dir);
};
-});
-/**
- * @brief get a list of selected files
- * @param string property (option) the property of the file requested
- * @return array
- *
- * possible values for property: name, mime, size and type
- * if property is set, an array with that property for each file is returnd
- * if it's ommited an array of objects with all properties is returned
- */
-function getSelectedFiles(property){
- var elements=$('td.filename input:checkbox:checked').parent().parent();
- var files=[];
- elements.each(function(i,element){
- var file={
- name:$(element).attr('data-file'),
- timestamp:$(element).attr('data-timestamp'),
- type:$(element).attr('data-type')
+ Files.generatePreviewUrl = function(urlSpec) {
+ return OC.generateUrl('/apps/files_trashbin/ajax/preview.php?') + $.param(urlSpec);
+ };
+
+ Files.getDownloadUrl = function(action, params) {
+ // no downloads
+ return '#';
+ };
+
+ Files.getAjaxUrl = function(action, params) {
+ var q = '';
+ if (params) {
+ q = '?' + OC.buildQueryString(params);
+ }
+ return OC.filePath('files_trashbin', 'ajax', action + '.php') + q;
+ };
+
+
+ /**
+ * Override crumb making to add "Deleted Files" entry
+ * and convert files with ".d" extensions to a more
+ * user friendly name.
+ */
+ var oldMakeCrumbs = BreadCrumb.prototype._makeCrumbs;
+ BreadCrumb.prototype._makeCrumbs = function() {
+ var parts = oldMakeCrumbs.apply(this, arguments);
+ // duplicate first part
+ parts.unshift(parts[0]);
+ parts[1] = {
+ dir: '/',
+ name: t('files_trashbin', 'Deleted Files')
};
- if(property){
- files.push(file[property]);
- }else{
- files.push(file);
+ for (var i = 2; i < parts.length; i++) {
+ parts[i].name = getDeletedFileName(parts[i].name);
}
- });
- return files;
-}
+ return parts;
+ };
-function fileDownloadPath(dir, file) {
- return OC.filePath('files_trashbin', '', 'download.php') + '?file='+encodeURIComponent(file);
-}
+ FileActions.actions.dir = {
+ // only keep 'Open' action for navigation
+ 'Open': FileActions.actions.dir.Open
+ };
+});
function enableActions() {
$(".action").css("display", "inline");