richdocuments/js/documents.js

301 lines
8.6 KiB
JavaScript
Raw Normal View History

/*globals $,OC,fileDownloadPath,t,document,odf,webodfEditor,alert,require,dojo,runtime */
2013-08-28 12:02:27 +02:00
var documentsMain = {
_documents: [],
_sessions: [],
_members: [],
2013-08-18 12:54:57 +03:00
useUnstable : false,
2013-07-12 16:00:07 +02:00
onStartup: function() {
2013-07-12 22:16:08 +02:00
"use strict";
2013-08-28 12:02:27 +02:00
OC.addScript('documents', 'webodf_bootstrap', function() {
OC.addScript('documents', 'webodf-debug').done(function() {
// preload stuff in the background
require({}, ["dojo/ready"], function(ready) {
2013-08-13 19:38:30 +03:00
ready(function() {
require({}, ["webodf/editor/Editor"], function(Editor) {
});
2013-07-12 16:28:33 +02:00
});
});
});
2013-07-12 16:00:07 +02:00
});
2013-08-28 12:02:27 +02:00
//setInterval(documentsMain.updateInfo, 10000);
2013-07-12 16:00:07 +02:00
},
2013-08-10 01:49:20 +03:00
initSession: function(response) {
"use strict";
runtime.assert(response.status, "Server error");
if (response.status==='error'){
alert('Server error');
return;
}
2013-08-07 02:35:46 +03:00
require({ }, ["webodf/editor/server/owncloud/ServerFactory", "webodf/editor/Editor"], function (ServerFactory, Editor) {
2013-08-13 19:38:30 +03:00
// fade out file list and show WebODF canvas
2013-08-18 17:21:29 +03:00
$('.documentslist, #emptyfolder').fadeOut('slow').promise().done(function() {
// odf action toolbar
var odfToolbarHtml =
2013-08-16 19:47:39 +02:00
'<div id="odf-toolbar">' +
' <button id="odf_close">' +
2013-08-22 16:43:14 +02:00
t('files_odfviewer', 'Close') +
2013-08-16 19:47:39 +02:00
' </button>' +
' <button id="odf_invite">' +
2013-08-22 16:43:14 +02:00
t('files_odfviewer', 'Invite') +
2013-08-16 19:47:39 +02:00
' </button>' +
' <span id="toolbar" class="claro"></span>' +
'</div>';
$('#controls').append(odfToolbarHtml);
var memberId, odfelement, odfcanvas, canvashtml =
2013-08-16 19:47:39 +02:00
'<div id = "mainContainer" class="claro" style="">' +
' <div id = "editor">' +
' <div id = "container">' +
' <div id="canvas"></div>' +
' </div>' +
' </div>' +
' <div id = "collaboration">' +
' <div id = "collabContainer">' +
' <div id = "members">' +
' <div id = "inviteButton"></div>' +
' <div id = "memberList"></div>' +
' </div>' +
' </div>' +
' </div>' +
'</div>';
var serverFactory = new ServerFactory();
2013-08-09 19:15:47 +03:00
$(document.body).addClass("claro");
2013-08-08 19:55:30 +03:00
$('.documentslist, #emptyfolder').after(canvashtml);
// in case we are on the public sharing page we shall display the odf into the preview tag
$('#preview').html(canvashtml);
2013-08-13 19:38:30 +03:00
2013-08-07 13:04:42 +02:00
runtime.assert(response.es_id, "invalid session id.");
2013-08-10 01:00:25 +03:00
memberId = response.member_id;
documentsMain.webodfServerInstance = serverFactory.createServer();
documentsMain.webodfEditorInstance = new Editor({}, documentsMain.webodfServerInstance, serverFactory);
// load the document and get called back when it's live
documentsMain.webodfEditorInstance.openSession(response.es_id, memberId, function() {
documentsMain.webodfEditorInstance.startEditing();
});
});
2013-07-01 22:36:17 +03:00
});
},
2013-08-18 17:11:22 +03:00
startSession: function(fileid) {
2013-08-07 02:35:46 +03:00
"use strict";
console.log('starting session for fileid '+fileid);
2013-08-07 21:14:36 +03:00
2013-08-22 16:43:14 +02:00
$.post(
2013-08-28 12:02:27 +02:00
OC.Router.generate('documents_session_start'),
{'fileid': fileid},
2013-08-28 12:02:27 +02:00
documentsMain.initSession
2013-08-22 16:43:14 +02:00
);
2013-08-10 01:49:20 +03:00
},
2013-08-18 17:11:22 +03:00
2013-08-13 19:38:30 +03:00
joinSession: function(esId) {
console.log('joining session '+esId);
2013-08-22 16:43:14 +02:00
$.post(
2013-08-28 12:02:27 +02:00
OC.Router.generate('documents_session_join') + '/' + esId,
2013-08-22 16:43:14 +02:00
{},
2013-08-28 12:02:27 +02:00
documentsMain.initSession
2013-08-22 16:43:14 +02:00
);
2013-08-07 02:35:46 +03:00
},
/**
* FIXME
*
2013-08-18 17:11:22 +03:00
updateInfo : function(){
var fileIds = [];
$('.documentslist li').each(function(i, e){
2013-08-18 17:11:22 +03:00
fileIds.push($(e).attr('data-file'));
});
$.post(
2013-08-28 12:02:27 +02:00
OC.Router.generate('documents_session_info'),
2013-08-22 16:43:14 +02:00
{items: fileIds},
function (response){
if (response && response.info && response.info.length){
for (var i=0;i<response.info.length;i++){
$('.documentslist li[data-file='+ response.info[i].file_id +'] .session-info').text(
2013-08-28 12:02:27 +02:00
t('documents', 'Users in session:')
2013-08-22 16:43:14 +02:00
+ response.info[i].users
);
2013-08-18 17:11:22 +03:00
}
}
2013-08-22 16:43:14 +02:00
}
2013-08-18 17:11:22 +03:00
);
},
*/
2013-08-17 13:19:35 +03:00
2013-08-16 21:24:30 +03:00
onInvite: function(event) {
event.preventDefault();
2013-08-13 19:38:30 +03:00
$('#invite-block').toggle();
},
sendInvite: function() {
var users = [];
$('input[name=invitee\\[\\]]').each(function(i, e) {
users.push($(e).val());
});
2013-08-28 12:02:27 +02:00
$.post(OC.Router.generate('documents_user_invite'), {users: users});
2013-08-13 19:38:30 +03:00
},
2013-07-01 22:36:17 +03:00
onClose: function() {
"use strict";
2013-08-09 19:15:47 +03:00
//close editor
documentsMain.webodfEditorInstance.endEditing();
documentsMain.webodfEditorInstance.close(function() {
2013-08-17 18:10:59 +02:00
// successfull shutdown - all is good.
// TODO: proper session leaving call to server, either by webodfServerInstance or custom
// documentsMain.webodfServerInstance.leaveSession(sessionId, memberId, function() {
2013-08-17 18:10:59 +02:00
documentsMain.webodfEditorInstance.destroy(function() {
// Fade out odf-toolbar
$('#odf-toolbar').fadeOut('slow');
// Fade out editor
$('#mainContainer').fadeOut('slow', function() {
$('#mainContainer').remove();
$('#odf-toolbar').remove();
$('.actions,#file_access_panel').fadeIn('slow');
$('.documentslist, #emptyfolder').fadeIn('slow');
$(document.body).removeClass('claro');
});
});
// });
2013-07-01 22:36:17 +03:00
});
},
loadDocuments: function () {
var self = this;
var def = new $.Deferred();
OC.Router.registerLoadedCallback(function () {
jQuery.getJSON(OC.Router.generate('documents_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;
//remove all but template
$('.documentslist .document:not(.template)').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.Router.generate('download',{file:document.path}));
a.find('label').text(document.name);
getMimeIcon(document.mimetype).then(function(path){
a.css('background-image', 'url("'+path+'")');
});
$('.documentslist').append(docElem);
docElem.show();
});
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('<img class="svg session-active" src="'+OC.imagePath('core','places/contacts-dark')+'">');
docElem.addClass('session');
} else {
console.log('Could not find file '+session.file_id+' for session '+session.es_id);
}
}
});
2013-07-01 22:36:17 +03:00
}
};
/**
* TODO copy from files, move from files to core? load files.js?
* @param {type} mime
* @returns {getMimeIcon}
*/
function getMimeIcon(mime){
var def = new $.Deferred();
if(getMimeIcon.cache[mime]){
def.resolve(getMimeIcon.cache[mime]);
}else{
2013-08-28 12:02:27 +02:00
jQuery.getJSON( OC.filePath('documents','ajax','mimeicon.php'), {mime: mime})
.done(function(data){
getMimeIcon.cache[mime]=data.path;
def.resolve(getMimeIcon.cache[mime]);
})
.error(function(jqXHR, textStatus, errorThrown){
console.log(textStatus + ': ' + errorThrown);
console.log(jqXHR);
});
}
return def;
}
getMimeIcon.cache={};
2013-07-01 22:36:17 +03:00
$(document).ready(function() {
2013-08-17 18:10:59 +02:00
"use strict";
2013-08-18 12:54:57 +03:00
$('.documentslist').on('click', 'li', function(event) {
2013-07-01 22:36:17 +03:00
event.preventDefault();
2013-08-18 17:11:22 +03:00
if ($(this).attr('data-esid')){
2013-08-28 12:02:27 +02:00
documentsMain.joinSession($(this).attr('data-esid'));
} else if ($(this).attr('data-id')){
2013-08-28 12:02:27 +02:00
documentsMain.startSession($(this).attr('data-id'));
2013-08-18 17:11:22 +03:00
}
2013-07-01 22:36:17 +03:00
});
2013-08-22 16:48:48 +02:00
2013-08-28 12:02:27 +02:00
$('#content').on('click', '#odf_close', documentsMain.onClose);
$('#content').on('click', '#odf_invite', documentsMain.onInvite);
$('#content').on('click', '#invite-send', documentsMain.sendInvite);
2013-08-22 16:48:48 +02:00
$('#content').on('click', '#invitee-list li', function(){
2013-08-16 17:51:08 +03:00
$(this).remove();
});
2013-08-13 19:38:30 +03:00
$('#inivite-input').autocomplete({
minLength: 1,
source: function(search, response) {
2013-08-22 16:43:14 +02:00
$.get(
2013-08-28 12:02:27 +02:00
OC.Router.generate('documents_user_search'),
2013-08-22 16:43:14 +02:00
{search: $('#inivite-input').val()},
function(result) {
if (result.status === 'success' && result.data.length > 0) {
response(result.data);
} else {
response([t('core', 'No people found')]);
}
2013-08-13 19:38:30 +03:00
}
2013-08-22 16:43:14 +02:00
);
2013-08-13 19:38:30 +03:00
},
select: function(event, el) {
2013-08-16 17:51:08 +03:00
event.preventDefault();
var item = $(
'<li title="'
2013-08-28 12:02:27 +02:00
+ t('documents', 'Remove from the list')
2013-08-16 17:51:08 +03:00
+ '" >'
2013-08-13 19:38:30 +03:00
+ el.item.label
+ '<input type="hidden" name="invitee[]" value="'
+ el.item.value
+ '" />'
+ '</li>'
);
2013-08-16 17:51:08 +03:00
$('#invitee-list').prepend(item);
2013-08-13 19:38:30 +03:00
}
});
jQuery.when(documentsMain.loadDocuments())
.then(function(){
documentsMain.renderDocuments();
});
//TODO show "no docs, please upload"
//TODO when ending a session as the last user close session?
2013-08-28 12:02:27 +02:00
OC.addScript('documents', 'dojo-amalgamation', documentsMain.onStartup);
});