summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/js/public.js
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-05-08 22:06:30 +0200
committerVincent Petry <pvince81@owncloud.com>2014-05-15 17:51:04 +0200
commit9d38e3602b2faf37d861729c52690ce51b8fee97 (patch)
tree5da63d26db4a4e8ec356dee45fc8f7804c6fe38a /apps/files_sharing/js/public.js
parentfb10bf4048aaf5b2a9665fc9dff217c790efe005 (diff)
downloadnextcloud-server-9d38e3602b2faf37d861729c52690ce51b8fee97.tar.gz
nextcloud-server-9d38e3602b2faf37d861729c52690ce51b8fee97.zip
Namespacing for FileList, FileActions and trashbin app
- FileList is now an instantiable class - FileActions is now in namespace - added App class for trashbin app - moved trashbin overrides into classes extending FileList - replaced many static calls with "this." or "self." to make the classes reusable/extendable - new URL parameter "view" to specify which view is shown, for example "files" or "trashbin" - added OC.Util.History utility class in core for handling history - moved URL handling/routing to OCA.Files.App - popstate will correctly update the current view and notify the view of the URL change so it can update the current dir - added JS unitt tests for the trashbin app - fixed public app to work with the new namespaces
Diffstat (limited to 'apps/files_sharing/js/public.js')
-rw-r--r--apps/files_sharing/js/public.js191
1 files changed, 119 insertions, 72 deletions
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 0b4dec81764..6ee54968e1e 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -9,94 +9,141 @@
*/
/* global OC, FileActions, FileList, Files */
+OCA.Sharing = {};
+if (!OCA.Files) {
+ OCA.Files = {};
+}
+OCA.Sharing.PublicApp = {
+ _initialized: false,
-$(document).ready(function() {
+ initialize: function($el) {
+ if (this._initialized) {
+ return;
+ }
+ this._initialized = true;
+ // file list mode ?
+ if ($el.find('#filestable')) {
+ this.fileList = new OCA.Files.FileList($el);
+ }
- var mimetype = $('#mimetype').val();
+ var mimetype = $('#mimetype').val();
- if (typeof FileActions !== 'undefined') {
- // Show file preview if previewer is available, images are already handled by the template
- if (mimetype.substr(0, mimetype.indexOf('/')) !== 'image' && $('.publicpreview').length === 0) {
- // Trigger default action if not download TODO
- var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ);
- if (typeof action !== 'undefined') {
- action($('#filename').val());
+ if (typeof FileActions !== 'undefined') {
+ // Show file preview if previewer is available, images are already handled by the template
+ if (mimetype.substr(0, mimetype.indexOf('/')) !== 'image' && $('.publicpreview').length === 0) {
+ // Trigger default action if not download TODO
+ var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ);
+ if (typeof action !== 'undefined') {
+ action($('#filename').val());
+ }
}
}
- }
- // dynamically load image previews
- if (mimetype.substr(0, mimetype.indexOf('/')) === 'image' ) {
+ // dynamically load image previews
+ if (mimetype.substr(0, mimetype.indexOf('/')) === 'image' ) {
- var params = {
- x: $(document).width() * window.devicePixelRatio,
- a: 'true',
- file: encodeURIComponent($('#dir').val() + $('#filename').val()),
- t: $('#sharingToken').val()
- };
+ var params = {
+ x: $(document).width() * window.devicePixelRatio,
+ a: 'true',
+ file: encodeURIComponent($('#dir').val() + $('#filename').val()),
+ t: $('#sharingToken').val()
+ };
- var img = $('<img class="publicpreview">');
- img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
- img.appendTo('#imgframe');
- }
+ var img = $('<img class="publicpreview">');
+ img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
+ img.appendTo('#imgframe');
+ }
- // override since the format is different
- if (typeof Files !== 'undefined') {
- Files.getDownloadUrl = function(filename, dir) {
- if ($.isArray(filename)) {
- filename = JSON.stringify(filename);
- }
- var path = dir || FileList.getCurrentDirectory();
- var params = {
- service: 'files',
- t: $('#sharingToken').val(),
- path: path,
- files: filename,
- download: null
+ if (this.fileList) {
+ // TODO: move this to a separate PublicFileList class that extends OCA.Files.FileList (+ unit tests)
+ this.fileList.getDownloadUrl = function(filename, dir) {
+ if ($.isArray(filename)) {
+ filename = JSON.stringify(filename);
+ }
+ var path = dir || FileList.getCurrentDirectory();
+ var params = {
+ service: 'files',
+ t: $('#sharingToken').val(),
+ path: path,
+ files: filename,
+ download: null
+ };
+ return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
};
- return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
- };
- Files.getAjaxUrl = function(action, params) {
- params = params || {};
- params.t = $('#sharingToken').val();
- return OC.filePath('files_sharing', 'ajax', action + '.php') + '?' + OC.buildQueryString(params);
- };
+ this.fileList.getAjaxUrl = function(action, params) {
+ params = params || {};
+ params.t = $('#sharingToken').val();
+ return OC.filePath('files_sharing', 'ajax', action + '.php') + '?' + OC.buildQueryString(params);
+ };
- FileList.linkTo = function(dir) {
- var params = {
- service: 'files',
- t: $('#sharingToken').val(),
- dir: dir
+ this.fileList.linkTo = function(dir) {
+ var params = {
+ service: 'files',
+ t: $('#sharingToken').val(),
+ dir: dir
+ };
+ return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
};
- return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
- };
-
- Files.generatePreviewUrl = function(urlSpec) {
- urlSpec.t = $('#dirToken').val();
- return OC.generateUrl('/apps/files_sharing/ajax/publicpreview.php?') + $.param(urlSpec);
- };
-
- var file_upload_start = $('#file_upload_start');
- file_upload_start.on('fileuploadadd', function(e, data) {
- var fileDirectory = '';
- if(typeof data.files[0].relativePath !== 'undefined') {
- fileDirectory = data.files[0].relativePath;
- }
- // Add custom data to the upload handler
- data.formData = {
- requesttoken: $('#publicUploadRequestToken').val(),
- dirToken: $('#dirToken').val(),
- subdir: $('input#dir').val(),
- file_directory: fileDirectory
+ this.fileList.generatePreviewUrl = function(urlSpec) {
+ urlSpec.t = $('#dirToken').val();
+ return OC.generateUrl('/apps/files_sharing/ajax/publicpreview.php?') + $.param(urlSpec);
};
+
+ var file_upload_start = $('#file_upload_start');
+ file_upload_start.on('fileuploadadd', function(e, data) {
+ var fileDirectory = '';
+ if(typeof data.files[0].relativePath !== 'undefined') {
+ fileDirectory = data.files[0].relativePath;
+ }
+
+ // Add custom data to the upload handler
+ data.formData = {
+ requesttoken: $('#publicUploadRequestToken').val(),
+ dirToken: $('#dirToken').val(),
+ subdir: $('input#dir').val(),
+ file_directory: fileDirectory
+ };
+ });
+
+ this.fileActions = _.extend({}, OCA.Files.FileActions);
+ this.fileActions.registerDefaultActions(this.fileList);
+ delete this.fileActions.actions.all.Share;
+ this.fileList.setFileActions(this.fileActions);
+
+ this.fileList.changeDirectory($('#dir').val() || '/', false, true);
+
+ // URL history handling
+ this.fileList.$el.on('changeDirectory', _.bind(this._onDirectoryChanged, this));
+ OC.Util.History.addOnPopStateHandler(_.bind(this._onUrlChanged, this));
+ }
+
+ $(document).on('click', '#directLink', function() {
+ $(this).focus();
+ $(this).select();
});
- }
- $(document).on('click', '#directLink', function() {
- $(this).focus();
- $(this).select();
- });
+ // legacy
+ window.FileList = this.fileList;
+ },
+ _onDirectoryChanged: function(e) {
+ OC.Util.History.pushState({
+ service: 'files',
+ t: $('#sharingToken').val(),
+ // arghhhh, why is this not called "dir" !?
+ path: e.dir
+ });
+ },
+
+ _onUrlChanged: function(params) {
+ this.fileList.changeDirectory(params.path || params.dir, false, true);
+ }
+};
+
+$(document).ready(function() {
+ var App = OCA.Sharing.PublicApp;
+ App.initialize($('#preview'));
});
+