diff --git a/js/documents.js b/js/documents.js
index e23ba096..642f9895 100644
--- a/js/documents.js
+++ b/js/documents.js
@@ -1,8 +1,134 @@
/*globals $,OC,fileDownloadPath,t,document,odf,webodfEditor,alert,require,dojo,runtime */
+
+$.widget('oc.documentGrid', {
+ options : {
+ context : '.documentslist',
+ documents : {},
+ sessions : {},
+ members : {}
+ },
+
+ _create : function (){
+
+ },
+
+ render : function(){
+ var that = this;
+ jQuery.when(this._load())
+ .then(function(){
+ that._render();
+ });
+ },
+
+ add : function(document) {
+ var docElem = $(this.options.context + ' .template').clone(),
+ a = docElem.find('a')
+ ;
+
+ //Fill an element
+ docElem.removeClass('template').attr('data-id', document.fileid);
+ a.css('background-image', 'url("'+document.icon+'")')
+ .attr('href', OC.generateUrl('apps/files/download{file}',{file:document.path}))
+ .find('label').text(document.name)
+ ;
+
+ docElem.appendTo(this.options.context).show();
+
+ //Preview
+ var previewURL,
+ urlSpec = {
+ file : document.path.replace(/^\/\//, '/'),
+ x : 200,
+ y : 200,
+ c : document.etag,
+ forceIcon : 0
+ };
+
+ if ( $('#isPublic').length ) {
+ urlSpec.t = $('#dirToken').val();
+ }
+
+ if (!urlSpec.x) {
+ urlSpec.x = $('#filestable').data('preview-x');
+ }
+ if (!urlSpec.y) {
+ urlSpec.y = $('#filestable').data('preview-y');
+ }
+ urlSpec.y *= window.devicePixelRatio;
+ urlSpec.x *= window.devicePixelRatio;
+
+ previewURL = OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
+ previewURL = previewURL.replace('(', '%28').replace(')', '%29');
+
+ var img = new Image();
+ img.onload = function(){
+ var ready = function (node){
+ return function(path){
+ node.css('background-image', 'url("'+ path +'")');
+ };
+ }(a);
+ ready(previewURL);
+ };
+ img.src = previewURL;
+ },
+
+ _load : function (){
+ var that = this;
+ var def = new $.Deferred();
+ $.getJSON(OC.generateUrl('apps/documents/ajax/documents/list'))
+ .done(function (data) {
+ that.options.documents = data.documents;
+ that.options.sessions = data.sessions;
+ that.options.members = data.members;
+ def.resolve();
+ })
+ .fail(function(data){
+ console.log(t('documents','Failed to load documents.'));
+ });
+ return def;
+ },
+
+ _render : function (data){
+ var that = this,
+ documents = data && data.documents || this.options.documents,
+ sessions = data && data.sessions || this.options.sessions,
+ members = data && data.members || this.options.members,
+ hasDocuments = false
+ ;
+
+ $(this.options.context + ' .document:not(.template,.progress)').remove();
+
+ $.each(documents, function(i, document){
+ hasDocuments = true;
+ that.add(document);
+ });
+
+ $.each(sessions, function(i, session){
+ if (members[session.es_id].length > 0) {
+ var docElem = $(that.options.context + ' .document[data-id="'+session.file_id+'"]');
+ if (docElem.length > 0) {
+ docElem.attr('data-esid', session.es_id);
+ docElem.find('label').after('');
+ docElem.addClass('session');
+ } else {
+ console.log('Could not find file '+session.file_id+' for session '+session.es_id);
+ }
+ }
+ });
+
+ if (!hasDocuments){
+ $(this.options.context).before('
'
+ + t('documents', 'No documents are found. Please upload or create a document!')
+ + '
'
+ );
+ } else {
+ $('#emptycontent').remove();
+ }
+ }
+});
+
+
var documentsMain = {
- _documents: [],
- _sessions: [],
- _members: [],
isEditormode : false,
useUnstable : false,
isGuest : false,
@@ -575,73 +701,8 @@ var documentsMain = {
return;
}
documentsMain.UI.showProgress(t('documents', 'Loading documents...'));
- jQuery.when(documentsMain.loadDocuments())
- .then(function(){
- documentsMain.renderDocuments();
- documentsMain.UI.hideProgress();
- });
- },
-
- loadDocuments: function () {
- var self = this;
- var def = new $.Deferred();
- jQuery.getJSON(OC.generateUrl('apps/documents/ajax/documents/list'))
- .done(function (data) {
- self._documents = data.documents;
- self._sessions = data.sessions;
- self._members = data.members;
- def.resolve();
- })
- .fail(function(data){
- console.log(t('documents','Failed to load documents.'));
- });
- return def;
- },
-
- renderDocuments: function () {
- var self = this,
- hasDocuments = false;
-
- //remove all but template
- $('.documentslist .document:not(.template,.progress)').remove();
-
- jQuery.each(this._documents, function(i,document){
- var docElem = $('.documentslist .template').clone();
- docElem.removeClass('template');
- docElem.addClass('document');
- docElem.attr('data-id', document.fileid);
-
- var a = docElem.find('a');
- a.attr('href', OC.generateUrl('apps/files/download{file}',{file:document.path}));
- a.find('label').text(document.name);
- a.css('background-image', 'url("'+document.icon+'")');
- Files.lazyLoadPreview(document.path, document.mimetype, function(node){ return function(path){node.css('background-image', 'url("'+ path +'")');}; }(a), 200, 200, document.etag, document.icon);
-//function(path, mime, ready, width, height, etag) {
- $('.documentslist').append(docElem);
- docElem.show();
- hasDocuments = true;
- });
- jQuery.each(this._sessions, function(i,session){
- if (self._members[session.es_id].length > 0) {
- var docElem = $('.documentslist .document[data-id="'+session.file_id+'"]');
- if (docElem.length > 0) {
- docElem.attr('data-esid', session.es_id);
- docElem.find('label').after('');
- docElem.addClass('session');
- } else {
- console.log('Could not find file '+session.file_id+' for session '+session.es_id);
- }
- }
- });
-
- if (!hasDocuments){
- $('#documents-content').append(''
- + t('documents', 'No documents are found. Please upload or create a document!')
- + '
'
- );
- } else {
- $('#emptycontent').remove();
- }
+ documentsMain.docs.documentGrid('render');
+ documentsMain.UI.hideProgress();
}
};
@@ -687,59 +748,6 @@ var Files = Files || {
return true;
},
- generatePreviewUrl : function(urlSpec) {
- urlSpec = urlSpec || {};
- if (!urlSpec.x) {
- urlSpec.x = $('#filestable').data('preview-x');
- }
- if (!urlSpec.y) {
- urlSpec.y = $('#filestable').data('preview-y');
- }
- urlSpec.y *= window.devicePixelRatio;
- urlSpec.x *= window.devicePixelRatio;
- urlSpec.forceIcon = 0;
- return OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
- },
-
- lazyLoadPreview : function(path, mime, ready, width, height, etag, defaultIcon) {
- var urlSpec = {};
- var previewURL;
- ready(defaultIcon); // set mimeicon URL
-
- urlSpec.file = Files.fixPath(path);
- if (etag){
- // use etag as cache buster
- urlSpec.c = etag;
- } else {
- console.warn('Files.lazyLoadPreview(): missing etag argument');
- }
-
- urlSpec.x = width;
- urlSpec.y = height;
- if ( $('#isPublic').length ) {
- urlSpec.t = $('#dirToken').val();
- }
- previewURL = Files.generatePreviewUrl(urlSpec);
- previewURL = previewURL.replace('(', '%28');
- previewURL = previewURL.replace(')', '%29');
-
- // preload image to prevent delay
- // this will make the browser cache the image
- var img = new Image();
- img.onload = function(){
- //set preview thumbnail URL
- ready(previewURL);
- };
- img.src = previewURL;
- },
-
- fixPath: function(fileName) {
- if (fileName.substr(0, 2) === '//') {
- return fileName.substr(1);
- }
- return fileName;
- },
-
updateStorageStatistics: function(){}
},
FileList = FileList || {};
@@ -750,7 +758,7 @@ FileList.getCurrentDirectory = function(){
$(document).ready(function() {
"use strict";
-
+ documentsMain.docs = $('.documentslist').documentGrid();
$('.documentslist').on('click', 'li:not(.add-document)', function(event) {
event.preventDefault();