[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-2-1' - loleaflet/dist loleaflet/reference.html loleaflet/src

Pranav Kant pranavk at collabora.co.uk
Thu Jun 8 10:05:06 UTC 2017


 loleaflet/dist/toolbar/toolbar.js     |   22 ++++++++++++++---
 loleaflet/reference.html              |   33 ++++++++++++++++++++++++++
 loleaflet/src/map/handler/Map.WOPI.js |   42 ++++++++++++++++++++++++++++++++--
 3 files changed, 91 insertions(+), 6 deletions(-)

New commits:
commit ea4fd75716ad01f73a12201246d6754e307e8e6e
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Wed Jun 7 12:57:07 2017 +0530

    Allow adding custom buttons to our toolbar from host; save result resp.
    
    ... with no functionality attached to it except notifying the WOPI host
    that button was clicked. Host is supposed to do the action thereafter
    itself.
    
    Also, notify the host when a save succeeds or fails.
    
    Change-Id: I0daa2690af2259233840ea7ab4326b9b80d5fa87
    (cherry picked from commit 3867bbe56ecceab8e0d3e4f1c85b83de08000f17)
    Reviewed-on: https://gerrit.libreoffice.org/38491
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index 53edf075..e227c074 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -210,7 +210,11 @@ function onClick(id, item, subItem) {
 	if (item.disabled) {
 		return;
 	}
-	if (item.uno) {
+
+	if (item.postmessage && item.type === 'button') {
+		map.fire('postMessage', {msgId: 'Clicked_Button', args: {Id: item.id} });
+	}
+	else if (item.uno) {
 		if (item.unosheet && map.getDocType() === 'spreadsheet') {
 			map.toggleCommandState(item.unosheet);
 		}
@@ -1407,9 +1411,19 @@ map.on('updateparts pagenumberchanged', function (e) {
 map.on('commandresult', function (e) {
 	var commandName = e.commandName;
 
-	if (commandName === '.uno:Save' && e.success === true) {
-		// Saved a new version; the document is modified.
-		map._everModified = true;
+	if (commandName === '.uno:Save') {
+		if (e.success) {
+			// Saved a new version; the document is modified.
+			map._everModified = true;
+		}
+		var postMessageObj = {
+			success: e.success
+		};
+		if (!e.success) {
+			// add the result reason string if failed
+			postMessageObj['result'] = e.result && e.result.value;
+		}
+		map.fire('postMessage', {msgId: 'Action_Save_Resp', args: postMessageObj});
 	}
 	else if ((commandName === '.uno:Undo' || commandName === '.uno:Redo') &&
 		e.success === true && e.result.value && !isNaN(e.result.value)) { /*UNDO_CONFLICT*/
diff --git a/loleaflet/reference.html b/loleaflet/reference.html
index 0db570d3..8276ab70 100644
--- a/loleaflet/reference.html
+++ b/loleaflet/reference.html
@@ -2896,6 +2896,7 @@ WOPI host to editor
 		<td><code>
 		    <nobr>DontTerminateEdit: <boolean></nobr>
 		    <nobr>DontSaveIfUnmodified: <boolean></nobr>
+		    <nobr>Notify: <boolean></nobr>
 		</code></td>
 		<td>Saves the document.<br/>
 		<code>DontTerminateEdit</code> is relevant for spreadsheets where saving
@@ -2905,6 +2906,9 @@ WOPI host to editor
 		<code>DontSaveIfUnmodified</code> prevents loolwsd to save the file back to storage if document is
 		unmodified (only cursor position changed etc.) but still saved. This can be helpful
 		to prevent creating unnecessary file revisions.
+		<code>Notify</code> when present and set to true notifies the
+		host when document is saved. See <code>Action_Save_Resp</code>
+		for details.
 		</td>
 	</tr>
 	<tr>
@@ -2927,6 +2931,35 @@ WOPI host to editor
 	</tr>
 </table>
 
+Actions response
+(WOPI editor to host)
+<table data-id='postmessage-actions-response'>
+	<tr>
+		<th>MessageId</th>
+		<th>Values</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>Action_Save_Resp</b></code></td>
+		<td><code>
+		    <nobr>success: <boolean></nobr>
+		    <nobr>result: <string></nobr>
+		</code></td>
+		<td>Acknowledgement when save finishes.<br/>
+		<code>success</code> tells if LOOL was able to save the document
+		successfully. When this is false, then another
+		parameter, <code>result</code> is present which contains the
+		reason that document was not saved.
+		In case, document was not saved because it was not modified,
+		then this parameter contains the string 'unmodified'. In this
+		case, WOPI hosts can be sure that there are no changes pending
+		in the document to be saved to the storage.
+		This response is only emitted if <code>Notify</code> parameter
+		is mentioned by <code>Action_Save</code> PostMessage API.
+		</td>
+	</tr>
+</table>
+
 
 <h2 id="marker">Marker</h2>
 
diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js
index fcb454ec..d187e2a6 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -2,7 +2,7 @@
  * L.WOPI contains WOPI related logic
  */
 
-/* global title */
+/* global title w2ui toolbarUpMobileItems resizeToolbar */
 L.Map.WOPI = L.Handler.extend({
 	// If the CheckFileInfo call fails on server side, we won't have any PostMessageOrigin.
 	// So use '*' because we still needs to send 'close' message to the parent frame which
@@ -100,7 +100,36 @@ L.Map.WOPI = L.Handler.extend({
 		}
 
 		var msg = JSON.parse(e.data);
-		if (msg.MessageId === 'Set_Settings') {
+		if (msg.MessageId === 'Insert_Button') {
+			if (msg.Values) {
+				if (msg.Values.id && !w2ui['toolbar-up'].get(msg.Values.id)
+				   && msg.Values.imgurl) {
+					// add the css rule for the image
+					$('html > head > style').append('.w2ui-icon.' + msg.Values.id + '{background: url(' + msg.Values.imgurl + ')}');
+
+					// add the item to the toolbar
+					w2ui['toolbar-up'].insert('save', [
+						{
+							type: 'button',
+							id: msg.Values.id,
+							img: msg.Values.id,
+							hint: _(msg.Values.hint), /* "Try" to localize ! */
+							postmessage: true /* Notify the host back when button is clicked */
+						}
+					]);
+					if (msg.Values.mobile)
+					{
+						// Add to our list of items to preserve when in mobile mode
+						// FIXME: Wrap the toolbar in a class so that we don't make use
+						// global variables and functions like this
+						var idx = toolbarUpMobileItems.indexOf('save');
+						toolbarUpMobileItems.splice(idx, 0, msg.Values.id);
+					}
+					resizeToolbar();
+				}
+			}
+		}
+		else if (msg.MessageId === 'Set_Settings') {
 			if (msg.Values) {
 				var alwaysActive = msg.Values.AlwaysActive;
 				this._map.options.alwaysActive = !!alwaysActive;
@@ -126,6 +155,7 @@ L.Map.WOPI = L.Handler.extend({
 		else if (msg.MessageId === 'Action_Save') {
 			var dontTerminateEdit = msg.Values && msg.Values['DontTerminateEdit'];
 			var dontSaveIfUnmodified = msg.Values && msg.Values['DontSaveIfUnmodified'];
+			this._notifySave = msg.Values && msg.Values['Notify'];
 
 			this._map.save(dontTerminateEdit, dontSaveIfUnmodified);
 		}
@@ -159,6 +189,14 @@ L.Map.WOPI = L.Handler.extend({
 		var msgId = e.msgId;
 		var values = e.args || {};
 		if (!!this.PostMessageOrigin && window.parent !== window.self) {
+			// Filter out unwanted save request response
+			if (msgId === 'Action_Save_Resp') {
+				if (!this._notifySave)
+					return;
+
+				this._notifySave = false;
+			}
+
 			var msg = {
 				'MessageId': msgId,
 				'SendTime': Date.now(),


More information about the Libreoffice-commits mailing list