[Libreoffice-commits] online.git: loleaflet/dist loleaflet/src
Tor Lillqvist
tml at collabora.com
Wed Mar 28 11:24:50 UTC 2018
loleaflet/dist/framed.html | 38 ++++++++++++++++++----------------
loleaflet/src/layer/tile/TileLayer.js | 14 ++++++------
loleaflet/src/map/handler/Map.WOPI.js | 10 +++++---
3 files changed, 34 insertions(+), 28 deletions(-)
New commits:
commit a0158a143230a3ed573c56275f51d857f61d8da3
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Jan 19 12:16:55 2018 +0200
Be more generic in the calling of a Python script code
Hardcode SetCellColor just in the framed.html.
Change-Id: I4461e19191028637037338fe0e7c5621258b5d37
diff --git a/loleaflet/dist/framed.html b/loleaflet/dist/framed.html
index 84c0082a0..f287aab91 100644
--- a/loleaflet/dist/framed.html
+++ b/loleaflet/dist/framed.html
@@ -7,17 +7,20 @@
for output only.
When the submit button is pressed, the input fields are passed as
- a postMessage to the iframe, with the MessageId of
- 'SetCellColor'. That is then in our JavaScript passed on to a
- Python script that sets the background colour of the
- corresponding cell of the spreadsheet document open in the
- loleaflet iframe. The Python script return a value, which gets
- passed to loleaflet in a unocommandresult: message, and passed on
- to the event listener on this page, which writes it to the output
- field.
+ a postMessage to the iframe. The message also specifies what
+ Python script to call. (In this demo case, the 'SetCellColor'
+ script in scripting/examples/python/SetCellColor.py in
+ LibreOffice core.) The parameters are then in our JavaScript
+ passed on to the Python script that acts on the document open in
+ the iframe. The Python script returns a value, which gets passed
+ to loleaflet in a unocommandresult: message, and passed on to the
+ event listener on this page, which writes it to the output field.
+ For this to work, in the trivial proof of concept case of 'make
+ run', the below patch is needed to the C++ code. It is probably
+ not necessary in a "real" WOPI-based setup where iframes are
+ already used and things work fine.
- For this to work, the following patch is needed to the C++ code:
--- a/wsd/FileServer.cpp
+++ b/wsd/FileServer.cpp
@@ -172,7 +172,7 @@ void FileServerRequestHandler::handleRequest(const HTTPRequest& request, Poco::M
@@ -39,7 +42,6 @@
cspOss << "\r\n";
-
-->
<html>
@@ -48,7 +50,7 @@
<title>Online Editor</title>
<script>
- function foobar() {
+ function callPythonScript() {
window.frames[0].postMessage(JSON.stringify({'MessageId': 'Host_PostmessageReady'}), '*');
var x = document.forms[0].elements['x'].value;
var y = document.forms[0].elements['y'].value;
@@ -56,11 +58,13 @@
console.log('x=' + x + ' y=' + y + ' color=' + color);
color = parseInt('0x' + color.substring(1));
console.log('x=' + x + ' y=' + y + ' color=' + color);
- window.frames[0].postMessage(JSON.stringify({'MessageId': 'SetCellColor',
+ window.frames[0].postMessage(JSON.stringify({'MessageId': 'CallPythonScript',
'SendTime': Date.now(),
- 'Values': {'x': {'type': 'long', 'value': x },
- 'y': { 'type': 'long', 'value': y },
- 'color': { 'type': 'long', 'value': color }
+ 'ScriptFile': 'SetCellColor.py',
+ 'Function': 'SetCellColor',
+ 'Values': {'x': {'type': 'long', 'value': x},
+ 'y': {'type': 'long', 'value': y},
+ 'color': {'type': 'long', 'value': color}
}
}),
'*');
@@ -71,7 +75,7 @@
console.log('==== framed.html receiveMessage: ' + event.data);
console.log(' ' + msg);
if (msg.hasOwnProperty('MessageId') &&
- msg.MessageId === 'SetCellColor-Result' &&
+ msg.MessageId === 'CallPythonScript-Result' &&
msg.hasOwnProperty('Values') &&
msg.Values.hasOwnProperty('commandName') &&
msg.Values.commandName === 'vnd.sun.star.script:SetCellColor.py$SetCellColor?language=Python&location=share' &&
@@ -98,7 +102,7 @@
Cell: (<input type="number" name="x" min="0" max="20" value="0">, <input type="number" name="y" min="0" max="20" value="0">),
colour: <input type="text" name="color" value="#008000">
<br>
- Click <button onclick="foobar(); return false;">here</button>
+ Click <button onclick="callPythonScript(); return false;">here</button>
to send message to iframe below. It returned <input type="text" name="result" value="" readonly>.
</form>
</p>
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index f9b73d8ca..74a9f2266 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1097,13 +1097,13 @@ L.TileLayer = L.GridLayer.extend({
this._map.hideBusy();
this._map.fire('commandresult', {commandName: commandName, success: success, result: obj.result});
- if (this._map.SetCellColorSource != null) {
- this._map.SetCellColorSource.postMessage(JSON.stringify({'MessageId': 'SetCellColor-Result',
- 'SendTime': Date.now(),
- 'Values': obj
- }),
- '*');
- this._map.SetCellColorSource = null;
+ if (this._map.CallPythonScriptSource != null) {
+ this._map.CallPythonScriptSource.postMessage(JSON.stringify({'MessageId': 'CallPythonScript-Result',
+ 'SendTime': Date.now(),
+ 'Values': obj
+ }),
+ '*');
+ this._map.CallPythonScriptSource = null;
}
},
diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js
index a68c41a7a..ff08ba7c1 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -18,7 +18,7 @@ L.Map.WOPI = L.Handler.extend({
DisableCopy: false,
DisableInactiveMessages: false,
UserCanNotWriteRelative: true,
- SetCellColorSource: null,
+ CallPythonScriptSource: null,
_appLoadedConditions: {
docloaded: false,
@@ -245,9 +245,11 @@ L.Map.WOPI = L.Handler.extend({
this._map._socket.sendMessage('versionrestore prerestore');
}
}
- else if (msg.MessageId === 'SetCellColor') {
- this._map.SetCellColorSource = e.source;
- this._map.sendUnoCommand('vnd.sun.star.script:SetCellColor.py$SetCellColor?language=Python&location=share', msg.Values);
+ else if (msg.MessageId === 'CallPythonScript' &&
+ msg.hasOwnProperty('ScriptFile') &&
+ msg.hasOwnProperty('Function')) {
+ this._map.CallPythonScriptSource = e.source;
+ this._map.sendUnoCommand('vnd.sun.star.script:' + msg.ScriptFile + '$' + msg.Function + '?language=Python&location=share', msg.Values);
}
},
More information about the Libreoffice-commits
mailing list