From 417540c1d3ddc457e77cafbbebf2cccd9cc0a31d Mon Sep 17 00:00:00 2001 From: Tobias Hintze Date: Sat, 17 Aug 2013 18:10:41 +0200 Subject: [PATCH] webodf update: smarted shutdown api for Editor and friends --- js/editor/Editor.js | 14 +++++++++++++- js/webodf-debug.js | 19 +++++++++++++++++++ js/webodf.js | 24 ++++++++++++------------ 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/js/editor/Editor.js b/js/editor/Editor.js index df8f4b6e..d6439a0b 100644 --- a/js/editor/Editor.js +++ b/js/editor/Editor.js @@ -226,11 +226,23 @@ define("webodf/editor/Editor", [ }); }; + /** + * Shutdown running editing (polling-timer), + * cleanup. + */ + self.shutdown = function (successfullShutdownCallback) { + editorSession.endEditing(); + opRouter.shutdown(function() { + memberModel.shutdown(); + successfullShutdownCallback(); + }); + }; + /** * Load a document in an editor that has already been initialized. */ self.loadDocument = function (docUrl) { - editorSession.endEditing(); + self.shutdown(); odfCanvas.load(docUrl); }; diff --git a/js/webodf-debug.js b/js/webodf-debug.js index 4311ccc8..c8fb1edd 100644 --- a/js/webodf-debug.js +++ b/js/webodf-debug.js @@ -13218,6 +13218,8 @@ ops.MemberModel.prototype.getMemberDetailsAndUpdates = function(memberId, subscr }; ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates = function(memberId, subscriber) { }; +ops.MemberModel.prototype.shutdown = function() { +}; /* Copyright (C) 2012-2013 KO GmbH @@ -13257,6 +13259,8 @@ ops.TrivialMemberModel = function TrivialMemberModel() { subscriber(memberId, null) }; this.unsubscribeMemberDetailsUpdates = function(memberId, subscriber) { + }; + this.shutdown = function() { } }; /* @@ -13349,6 +13353,8 @@ ops.NowjsMemberModel = function NowjsMemberModel(server) { } } }; + this.shutdown = function() { + }; nowObject.updateUserDetails = function(userId, udata) { cacheUserDatum(userId, udata ? {userid:udata.uid, fullname:udata.fullname, imageurl:"/user/" + udata.avatarId + "/avatar.png", color:udata.color} : null) }; @@ -13488,6 +13494,8 @@ ops.PullBoxMemberModel = function PullBoxMemberModel(sessionId, server) { } } }; + this.shutdown = function() { + }; runtime.assert(server.networkStatus() === "ready", "network not ready") }; /* @@ -13532,6 +13540,8 @@ ops.OperationRouter.prototype.setPlaybackFunction = function(playback_func) { }; ops.OperationRouter.prototype.push = function(op) { }; +ops.OperationRouter.prototype.shutdown = function(success_callback) { +}; /* Copyright (C) 2012 KO GmbH @@ -13579,6 +13589,9 @@ ops.TrivialOperationRouter = function TrivialOperationRouter() { opspec.timestamp = (new Date).getTime(); timedOp = operationFactory.create(opspec); playbackFunction(timedOp) + }; + this.shutdown = function(cb) { + cb() } }; ops.NowjsOperationRouter = function NowjsOperationRouter(sessionId, memberid, server) { @@ -13647,6 +13660,8 @@ ops.NowjsOperationRouter = function NowjsOperationRouter(sessionId, memberid, se done_cb() } }) + }; + this.shutdown = function(cb) { } }; /* @@ -13870,6 +13885,10 @@ ops.PullBoxOperationRouter = function PullBoxOperationRouter(sessionId, memberId playbackFunction(timedOp); unsyncedClientOpspecQueue.push(opspec); triggerPushingOps() + }; + this.shutdown = function(cb) { + syncOps(); + runtime.getWindow().setTimeout(cb, 2E3) } }; gui.EditInfoHandle = function EditInfoHandle(parentElement) { diff --git a/js/webodf.js b/js/webodf.js index 0ab2ccbb..ad7b6e73 100644 --- a/js/webodf.js +++ b/js/webodf.js @@ -1447,9 +1447,9 @@ h.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:style:1.0","style:name", @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("odf.Namespaces"); -ops.OpAddParagraphStyle=function(){function k(a){g&&["style:parent-style-name","style:next-style-name"].forEach(function(b){g[b]===a&&delete g[b]})}var l=this,h,e,b,g,a=odf.Namespaces.svgns,f=odf.Namespaces.stylens;this.init=function(a){h=a.memberid;e=a.timestamp;b=a.styleName;g=a.setProperties};this.transform=function(a,b){var f=a.spec();"RemoveParagraphStyle"===f.optype&&k(f.styleName);return[l]};this.execute=function(d){var c=d.getOdfCanvas().odfContainer(),e=d.getFormatting(),h=d.getDOM(),l=h.createElementNS(f, -"style:style"),k,p,r,w,u;if(!l)return!1;l.setAttributeNS(f,"style:family","paragraph");l.setAttributeNS(f,"style:name",b);g&&Object.keys(g).forEach(function(b){switch(b){case "style:paragraph-properties":k=h.createElementNS(f,"style:paragraph-properties");l.appendChild(k);e.updateStyle(k,g["style:paragraph-properties"]);break;case "style:text-properties":p=h.createElementNS(f,"style:text-properties");l.appendChild(p);(w=g["style:text-properties"]["style:font-name"])&&!e.getFontMap().hasOwnProperty(w)&& -(r=h.createElementNS(f,"style:font-face"),r.setAttributeNS(f,"style:name",w),r.setAttributeNS(a,"svg:font-family",w),c.rootElement.fontFaceDecls.appendChild(r));e.updateStyle(p,g["style:text-properties"]);break;default:"object"!==typeof g[b]&&(u=odf.Namespaces.resolvePrefix(b.substr(0,b.indexOf(":"))),l.setAttributeNS(u,b,g[b]))}});c.rootElement.styles.appendChild(l);d.getOdfCanvas().refreshCSS();d.emit(ops.OdtDocument.signalStyleCreated,b);return!0};this.spec=function(){return{optype:"AddParagraphStyle", +ops.OpAddParagraphStyle=function(){function k(a){g&&["style:parent-style-name","style:next-style-name"].forEach(function(b){g[b]===a&&delete g[b]})}var l=this,h,e,b,g,a=odf.Namespaces.svgns,f=odf.Namespaces.stylens;this.init=function(a){h=a.memberid;e=a.timestamp;b=a.styleName;g=a.setProperties};this.transform=function(a,b){var f=a.spec();"RemoveParagraphStyle"===f.optype&&k(f.styleName);return[l]};this.execute=function(d){var c=d.getOdfCanvas().odfContainer(),e=d.getFormatting(),h=d.getDOM(),k=h.createElementNS(f, +"style:style"),l,p,r,w,u;if(!k)return!1;k.setAttributeNS(f,"style:family","paragraph");k.setAttributeNS(f,"style:name",b);g&&Object.keys(g).forEach(function(b){switch(b){case "style:paragraph-properties":l=h.createElementNS(f,"style:paragraph-properties");k.appendChild(l);e.updateStyle(l,g["style:paragraph-properties"]);break;case "style:text-properties":p=h.createElementNS(f,"style:text-properties");k.appendChild(p);(w=g["style:text-properties"]["style:font-name"])&&!e.getFontMap().hasOwnProperty(w)&& +(r=h.createElementNS(f,"style:font-face"),r.setAttributeNS(f,"style:name",w),r.setAttributeNS(a,"svg:font-family",w),c.rootElement.fontFaceDecls.appendChild(r));e.updateStyle(p,g["style:text-properties"]);break;default:"object"!==typeof g[b]&&(u=odf.Namespaces.resolvePrefix(b.substr(0,b.indexOf(":"))),k.setAttributeNS(u,b,g[b]))}});c.rootElement.styles.appendChild(k);d.getOdfCanvas().refreshCSS();d.emit(ops.OdtDocument.signalStyleCreated,b);return!0};this.spec=function(){return{optype:"AddParagraphStyle", memberid:h,timestamp:e,styleName:b,setProperties:g}}}; // Input 54 /* @@ -1848,7 +1848,7 @@ length:a});k.enqueue(c)}else d(a)});oa.subscribe(gui.ClickHandler.signalDoubleCl @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdates=function(k,l){};ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates=function(k,l){}; +ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdates=function(k,l){};ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates=function(k,l){};ops.MemberModel.prototype.shutdown=function(){}; // Input 69 /* @@ -1884,7 +1884,7 @@ ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdate @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(k,l){l(k,null)};this.unsubscribeMemberDetailsUpdates=function(k,l){}}; +ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(k,l){l(k,null)};this.unsubscribeMemberDetailsUpdates=function(k,l){};this.shutdown=function(){}}; // Input 70 /* @@ -1921,8 +1921,8 @@ ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(k,l){ @source: http://gitorious.org/webodf/webodf/ */ ops.NowjsMemberModel=function(k){var l={},h={},e=k.getNowObject();this.getMemberDetailsAndUpdates=function(b,g){var a=b.split("___")[0],f=l[a],d=h[a]||[],c;h[a]=d;runtime.assert(void 0!==g,"missing callback");for(c=0;c