[Libreoffice-commits] online.git: 12 commits - loleaflet/build loleaflet/debug loleaflet/dist loleaflet/README loleaflet/src loolwsd/LOOLSession.cpp loolwsd/LOOLSession.hpp
Mihai Varga
mihai.varga at collabora.com
Thu Sep 10 01:30:26 PDT 2015
loleaflet/README | 21 ++--
loleaflet/build/deps.js | 18 +--
loleaflet/debug/document/document_simple_example.html | 3
loleaflet/dist/images/edit.png |binary
loleaflet/dist/images/selection.png |binary
loleaflet/dist/leaflet.css | 6 -
loleaflet/src/control/Buttons.js | 23 ----
loleaflet/src/control/Control.Buttons.js | 64 ++++++++++--
loleaflet/src/control/Control.Fonts.js | 91 ++++++++++++++++++
loleaflet/src/control/Control.Styles.js | 29 +++--
loleaflet/src/control/Permission.js | 8 +
loleaflet/src/control/Styles.js | 17 ---
loleaflet/src/control/Toolbar.js | 66 +++++++++++++
loleaflet/src/core/Socket.js | 1
loleaflet/src/layer/tile/TileLayer.js | 33 ++++--
loolwsd/LOOLSession.cpp | 59 ++++++++---
loolwsd/LOOLSession.hpp | 6 -
17 files changed, 336 insertions(+), 109 deletions(-)
New commits:
commit 9a23b7abb9d851f2f04aea391f47abb8c2191b39
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Thu Sep 10 11:29:19 2015 +0300
loleaflet: renamed setStyle to applyStyle
diff --git a/loleaflet/README b/loleaflet/README
index f3073d7..c9b1144 100644
--- a/loleaflet/README
+++ b/loleaflet/README
@@ -204,6 +204,7 @@ CommandValues:
+ returns a JSON mapping of all possible values for the command
map.applyFont(fontName)
map.applyFontSize(fontSize)
+ map.applyStyle(style, styleFamily)
- events
map.on('updatetoolbarcommandvalues', function (e) {}) where
+ e.commandName = '.uno:StyleAplly', etc
diff --git a/loleaflet/src/control/Control.Styles.js b/loleaflet/src/control/Control.Styles.js
index c82a892..cfc4133 100644
--- a/loleaflet/src/control/Control.Styles.js
+++ b/loleaflet/src/control/Control.Styles.js
@@ -59,10 +59,10 @@ L.Control.Styles = L.Control.extend({
return;
}
if (this._map.getDocType() === 'text') {
- this._map.setStyle(style, 'ParagraphStyles');
+ this._map.applyStyle(style, 'ParagraphStyles');
}
else if (this._map.getDocType() === 'presentation') {
- this._map.setStyle(style, 'Default');
+ this._map.applyStyle(style, 'Default');
}
}
});
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index e3a1bea..16790d4 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -44,7 +44,7 @@ L.Map.include({
'options=' + options);
},
- setStyle: function (style, familyName) {
+ applyStyle: function (style, familyName) {
if (!style || !familyName) {
this.fire('error', {cmd: 'setStyle', kind: 'incorrectparam'});
return;
commit 87fae7f8547e715f4360e4cac9d8900e772ac2e3
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Thu Sep 10 11:26:47 2015 +0300
loleaflet: fonts control
diff --git a/loleaflet/README b/loleaflet/README
index 864d661..f3073d7 100644
--- a/loleaflet/README
+++ b/loleaflet/README
@@ -202,6 +202,8 @@ CommandValues:
- api:
map.getToolbarCommandValues(command)
+ returns a JSON mapping of all possible values for the command
+ map.applyFont(fontName)
+ map.applyFontSize(fontSize)
- events
map.on('updatetoolbarcommandvalues', function (e) {}) where
+ e.commandName = '.uno:StyleAplly', etc
diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index 4ac6c3c..dae1e80 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -315,6 +315,13 @@ var deps = {
desc: 'Handles styles selection'
},
+ ControlFonts: {
+ src: ['control/Control.js',
+ 'control/Control.Fonts.js'],
+ heading: 'Controls',
+ desc: 'Handles fonts selection'
+ },
+
ControlAttrib: {
src: ['control/Control.js',
'control/Control.Attribution.js'],
diff --git a/loleaflet/debug/document/document_simple_example.html b/loleaflet/debug/document/document_simple_example.html
index 03cd8d8..356dc6a 100644
--- a/loleaflet/debug/document/document_simple_example.html
+++ b/loleaflet/debug/document/document_simple_example.html
@@ -67,6 +67,7 @@
////// Controls /////
globalMap.addControl(L.control.styles());
+ globalMap.addControl(L.control.fonts());
globalMap.addControl(L.control.buttons());
globalMap.addControl(L.control.zoom());
globalMap.addControl(L.control.parts());
diff --git a/loleaflet/dist/leaflet.css b/loleaflet/dist/leaflet.css
index 7923877..b72dd39 100644
--- a/loleaflet/dist/leaflet.css
+++ b/loleaflet/dist/leaflet.css
@@ -790,7 +790,11 @@ input.leaflet-control-search-bar {
padding: 0.3em;
}
-.leaflet-control-styles {
+.leaflet-control-fonts-container {
+ display: inline;
+}
+
+select {
padding: 0.2em 0.4em 0.4em 0em;
background-color: white;
}
diff --git a/loleaflet/src/control/Control.Fonts.js b/loleaflet/src/control/Control.Fonts.js
new file mode 100644
index 0000000..b341a4f
--- /dev/null
+++ b/loleaflet/src/control/Control.Fonts.js
@@ -0,0 +1,91 @@
+/*
+ * L.Control.Fonts is used to display a dropdown list of fonts
+ */
+
+L.Control.Fonts = L.Control.extend({
+ options: {
+ fontsInfo: '- Fonts -',
+ sizesInfo: '- Sizes -'
+ },
+
+ onAdd: function (map) {
+ var fontsName = 'leaflet-control-fonts';
+ var sizesName = 'leaflet-control-sizes';
+ this._container = L.DomUtil.create('div', 'leaflet-control-fonts-container');
+ this._fontSelect = L.DomUtil.create('select', fontsName + ' leaflet-bar', this._container);
+ this._sizeSelect = L.DomUtil.create('select', sizesName + ' leaflet-bar', this._container);
+
+ map.on('updatepermission', this._onUpdatePermission, this);
+ map.on('updatetoolbarcommandvalues', this._initList, this);
+ L.DomEvent.on(this._fontSelect, 'change', this._onChangeFont, this);
+ L.DomEvent.on(this._sizeSelect, 'change', this._onChangeSize, this);
+
+ return this._container;
+ },
+
+ onRemove: function (map) {
+ map.off('updatepermission', this._searchResultFound, this);
+ },
+
+ _initList: function (e) {
+ if (e.commandName === '.uno:CharFontName') {
+ this._commandValues = e.commandValues;
+ var container = this._fontSelect;
+ var first = L.DomUtil.create('option', '', container);
+ first.innerHTML = this.options.fontsInfo;
+ var fonts = e.commandValues;
+ for (font in fonts) {
+ var item = L.DomUtil.create('option', '', container);
+ item.value = font;
+ item.innerHTML = font;
+ };
+
+ // Don't show any font sizes yet
+ first = L.DomUtil.create('option', '', this._sizeSelect);
+ first.innerHTML = this.options.sizesInfo;
+ }
+ },
+
+ _onUpdatePermission: function (e) {
+ if (e.perm === 'edit') {
+ this._fontSelect.disabled = false;
+ this._sizeSelect.disabled = false;
+ }
+ else {
+ this._fontSelect.disabled = true;
+ this._sizeSelect.disabled = true;
+ }
+ },
+
+ _onChangeFont: function (e) {
+ var font = e.target.value;
+ if (font === this.options.fontsInfo) {
+ return;
+ }
+ var container = this._sizeSelect;
+ for(var i = container.options.length - 1; i >= 0; i--) {
+ container.remove(i);
+ }
+ var first = L.DomUtil.create('option', '', container);
+ first.innerHTML = this.options.sizesInfo;
+ var sizes = this._commandValues[font];
+ sizes.forEach(function (size) {
+ var item = L.DomUtil.create('option', '', container);
+ item.value = size;
+ item.innerHTML = size;
+ });
+ this._map.applyFont(font);
+ },
+
+ _onChangeSize: function (e) {
+ var size = e.target.value;
+ if (size === this.options.sizesInfo) {
+ return;
+ }
+ this._map.applyFontSize(size);
+ }
+});
+
+L.control.fonts = function (options) {
+ return new L.Control.Fonts(options);
+};
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index 1331197..e3a1bea 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -5,9 +5,28 @@ L.Map.include({
// a mapping of uno commands to more readable toolbar items
unoToolbarCommands: [
+ '.uno:CharFontName',
'.uno:StyleApply'
],
+ applyFont: function (fontName) {
+ if (this.getPermission() === 'edit') {
+ var msg = 'uno .uno:CharFontName {' +
+ '"CharFontName.FamilyName": ' +
+ '{"type": "string", "value": "' + fontName + '"}}';
+ L.Socket.sendMessage(msg);
+ }
+ },
+
+ applyFontSize: function (fontSize) {
+ if (this.getPermission() === 'edit') {
+ var msg = 'uno .uno:FontHeight {' +
+ '"FontHeight.Height": ' +
+ '{"type": "float", "value": "' + fontSize + '"}}';
+ L.Socket.sendMessage(msg);
+ }
+ },
+
getToolbarCommandValues: function (command) {
return this._docLayer._toolbarCommandValues[command];
},
commit d7251aabefaf7642f47f9fd9a8405dba36ab5cb8
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Thu Sep 10 10:24:40 2015 +0300
loleaflet: show styles depending on docType
diff --git a/loleaflet/src/control/Control.Styles.js b/loleaflet/src/control/Control.Styles.js
index 436d3c1..c82a892 100644
--- a/loleaflet/src/control/Control.Styles.js
+++ b/loleaflet/src/control/Control.Styles.js
@@ -4,7 +4,7 @@
L.Control.Styles = L.Control.extend({
options: {
- info: '- Please select a style -'
+ info: '- Styles -'
},
onAdd: function (map) {
@@ -27,14 +27,20 @@ L.Control.Styles = L.Control.extend({
var container = this._container;
var first = L.DomUtil.create('option', '', container);
first.innerHTML = this.options.info;
- if (this._map._docLayer._docType === 'text') {
- var styles = e.commandValues.ParagraphStyles.slice(0, 12);
- styles.forEach(function (style) {
- var item = L.DomUtil.create('option', '', container);
- item.value = style;
- item.innerHTML = style;
- });
+ if (this._map.getDocType() === 'text') {
+ var styles = e.commandValues['ParagraphStyles'].slice(0, 12);
}
+ else if (this._map.getDocType() === 'presentation') {
+ styles = e.commandValues['Default'];
+ }
+ else {
+ styles = [];
+ }
+ styles.forEach(function (style) {
+ var item = L.DomUtil.create('option', '', container);
+ item.value = style;
+ item.innerHTML = style;
+ });
}
},
@@ -52,9 +58,12 @@ L.Control.Styles = L.Control.extend({
if (style === this.options.info) {
return;
}
- if (this._map._docLayer._docType === 'text') {
+ if (this._map.getDocType() === 'text') {
this._map.setStyle(style, 'ParagraphStyles');
}
+ else if (this._map.getDocType() === 'presentation') {
+ this._map.setStyle(style, 'Default');
+ }
}
});
commit c904486115109ea07b45fbbd7c1ce0a5a72d0e7b
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 20:35:36 2015 +0300
loleaflet: use the commandvalues server cmd
diff --git a/loleaflet/README b/loleaflet/README
index cd97f1d..864d661 100644
--- a/loleaflet/README
+++ b/loleaflet/README
@@ -191,15 +191,6 @@ Writer pages:
map.on('invalidatepreview', function (e) {})
+ e.id = the preview's id
-Styles:
- - API:
- map.getStyles()
- + returns a JSON object as a mapping of style families to a list of styles
- map.setStyle(style, familyName)
- - events:
- map.on('updatestyles', function (e) {}) where:
- e.styles = a JSON object as a mapping of style families to a list of styles
-
Error:
- events
map.on('error', function (e) {}) where
@@ -207,6 +198,15 @@ Error:
+ [e.cmd] = the command that caused the error
+ [e.kind] = the kind of error
+CommandValues:
+ - api:
+ map.getToolbarCommandValues(command)
+ + returns a JSON mapping of all possible values for the command
+ - events
+ map.on('updatetoolbarcommandvalues', function (e) {}) where
+ + e.commandName = '.uno:StyleAplly', etc
+ + e.commandValues = a JSON mapping of all possible values for the command
+
Testing
-------
- to simulate an editing session and to get the tile loading times
diff --git a/loleaflet/src/control/Control.Styles.js b/loleaflet/src/control/Control.Styles.js
index 27708ed..436d3c1 100644
--- a/loleaflet/src/control/Control.Styles.js
+++ b/loleaflet/src/control/Control.Styles.js
@@ -12,7 +12,7 @@ L.Control.Styles = L.Control.extend({
this._container = L.DomUtil.create('select', stylesName + ' leaflet-bar');
map.on('updatepermission', this._onUpdatePermission, this);
- map.on('updatestyles', this._initList, this);
+ map.on('updatetoolbarcommandvalues', this._initList, this);
L.DomEvent.on(this._container, 'change', this._onChange, this);
return this._container;
@@ -23,16 +23,18 @@ L.Control.Styles = L.Control.extend({
},
_initList: function (e) {
- var container = this._container;
- var first = L.DomUtil.create('option', '', container);
- first.innerHTML = this.options.info;
- if (this._map._docLayer._docType === 'text') {
- var styles = e.styles.ParagraphStyles.slice(0, 12);
- styles.forEach(function (style) {
- var item = L.DomUtil.create('option', '', container);
- item.value = style;
- item.innerHTML = style;
- });
+ if (e.commandName === '.uno:StyleApply') {
+ var container = this._container;
+ var first = L.DomUtil.create('option', '', container);
+ first.innerHTML = this.options.info;
+ if (this._map._docLayer._docType === 'text') {
+ var styles = e.commandValues.ParagraphStyles.slice(0, 12);
+ styles.forEach(function (style) {
+ var item = L.DomUtil.create('option', '', container);
+ item.value = style;
+ item.innerHTML = style;
+ });
+ }
}
},
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index cce5bc6..1331197 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -4,12 +4,12 @@
L.Map.include({
// a mapping of uno commands to more readable toolbar items
- unoToolbarCommands: {
- '.uno:StyleApply': 'styles'
- },
+ unoToolbarCommands: [
+ '.uno:StyleApply'
+ ],
- getStyles: function () {
- return this._docLayer._docStyles;
+ getToolbarCommandValues: function (command) {
+ return this._docLayer._toolbarCommandValues[command];
},
saveAs: function (url, format, options) {
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 4e2846f..57852d7 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -52,7 +52,6 @@ L.Socket = {
}
this.socket.send(msg);
this.socket.send('status');
- this.socket.send('styles');
for (var i = 0; i < this._msgQueue.length; i++) {
this.socket.send(this._msgQueue[i].msg);
L.Log.log(this._msgQueue[i].msg, this._msgQueue[i].coords);
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 2050675..bd22086 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -91,10 +91,12 @@ L.TileLayer = L.GridLayer.extend({
});
this._emptyTilesCount = 0;
this._msgQueue = [];
+ this._toolbarCommandValues = {};
},
onAdd: function (map) {
this._initContainer();
+ this._getToolbarCommandsValues();
this._selections = new L.LayerGroup();
map.addLayer(this._selections);
@@ -173,8 +175,18 @@ L.TileLayer = L.GridLayer.extend({
return tile;
},
+ _getToolbarCommandsValues: function() {
+ for (var i = 0; i < this._map.unoToolbarCommands.length; i++) {
+ var command = this._map.unoToolbarCommands[i];
+ L.Socket.sendMessage('commandvalues command=' + command);
+ }
+ },
+
_onMessage: function (textMsg, img) {
- if (textMsg.startsWith('cursorvisible:')) {
+ if (textMsg.startsWith('commandvalues:')) {
+ this._onCommandValuesMsg(textMsg);
+ }
+ else if (textMsg.startsWith('cursorvisible:')) {
this._onCursorVisibleMsg(textMsg);
}
else if (textMsg.startsWith('error:')) {
@@ -204,9 +216,6 @@ L.TileLayer = L.GridLayer.extend({
else if (textMsg.startsWith('statusindicator')) {
this._onStatusIndicatorMsg(textMsg);
}
- else if (textMsg.startsWith('styles:')) {
- this._onStylesMsg(textMsg);
- }
else if (textMsg.startsWith('textselection:')) {
this._onTextSelectionMsg(textMsg);
}
@@ -224,6 +233,17 @@ L.TileLayer = L.GridLayer.extend({
}
},
+ _onCommandValuesMsg: function (textMsg) {
+ var obj = JSON.parse(textMsg.substring(textMsg.indexOf('{')));
+ if (this._map.unoToolbarCommands.indexOf(obj.commandName) !== -1) {
+ this._toolbarCommandValues[obj.commandName] = obj.commandValues;
+ this._map.fire('updatetoolbarcommandvalues', {
+ commandName: obj.commandName,
+ commandValues: obj.commandValues
+ });
+ }
+ },
+
_onCursorVisibleMsg: function(textMsg) {
var command = textMsg.match('cursorvisible: true');
this._isCursorVisible = command ? true : false;
@@ -292,11 +312,6 @@ L.TileLayer = L.GridLayer.extend({
}
},
- _onStylesMsg: function (textMsg) {
- this._docStyles = JSON.parse(textMsg.substring(8));
- this._map.fire('updatestyles', {styles: this._docStyles});
- },
-
_onTextSelectionMsg: function (textMsg) {
var strTwips = textMsg.match(/\d+/g);
this._selections.clearLayers();
commit d1ecdbc3df047ee9d42429a25a61ba0ec90f1612
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 20:23:49 2015 +0300
loolwsd: parse the `commandvalues` command and cache the values
The values are chaced in the file named
"cmdValues" + unoCmd + ".txt"
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 06efe26..233e999 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -28,8 +28,11 @@
#include <LibreOfficeKit/LibreOfficeKit.h>
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <Poco/Dynamic/Var.h>
#include <Poco/Exception.h>
#include <Poco/File.h>
+#include <Poco/JSON/Object.h>
+#include <Poco/JSON/Parser.h>
#include <Poco/Net/HTTPStreamFactory.h>
#include <Poco/Net/WebSocket.h>
#include <Poco/Path.h>
@@ -57,8 +60,11 @@
using namespace LOOLProtocol;
+using Poco::Dynamic::Var;
using Poco::File;
using Poco::IOException;
+using Poco::JSON::Object;
+using Poco::JSON::Parser;
using Poco::Net::HTTPStreamFactory;
using Poco::Net::WebSocket;
using Poco::Path;
@@ -198,9 +204,15 @@ bool MasterProcessSession::handleInput(const char *buffer, int length)
{
peer->_tileCache->saveTextFile(std::string(buffer, length), "status.txt");
}
- else if (tokens[0] == "styles:")
+ else if (tokens[0] == "commandvalues:")
{
- peer->_tileCache->saveTextFile(std::string(buffer, length), "styles.txt");
+ std::string stringMsg(buffer);
+ std::string stringJSON = stringMsg.substr(stringMsg.find_first_of("{"));
+ Parser parser;
+ Var result = parser.parse(stringJSON);
+ Object::Ptr object = result.extract<Object::Ptr>();
+ std::string commandName = object->get("commandName").toString();
+ peer->_tileCache->saveTextFile(std::string(buffer, length), "cmdValues" + commandName + ".txt");
}
else if (tokens[0] == "invalidatetiles:")
{
@@ -270,6 +282,7 @@ bool MasterProcessSession::handleInput(const char *buffer, int length)
return loadDocument(buffer, length, tokens);
}
else if (tokens[0] != "canceltiles" &&
+ tokens[0] != "commandvalues" &&
tokens[0] != "gettextselection" &&
tokens[0] != "invalidatetiles" &&
tokens[0] != "key" &&
@@ -282,7 +295,6 @@ bool MasterProcessSession::handleInput(const char *buffer, int length)
tokens[0] != "setclientpart" &&
tokens[0] != "setpage" &&
tokens[0] != "status" &&
- tokens[0] != "styles" &&
tokens[0] != "tile" &&
tokens[0] != "uno")
{
@@ -299,6 +311,10 @@ bool MasterProcessSession::handleInput(const char *buffer, int length)
if (!_peer.expired())
forwardToPeer(buffer, length);
}
+ else if (tokens[0] == "commandvalues")
+ {
+ return getCommandValues(buffer, length, tokens);
+ }
else if (tokens[0] == "invalidatetiles")
{
return invalidateTiles(buffer, length, tokens);
@@ -307,10 +323,6 @@ bool MasterProcessSession::handleInput(const char *buffer, int length)
{
return getStatus(buffer, length);
}
- else if (tokens[0] == "styles")
- {
- return getStyles(buffer, length);
- }
else if (tokens[0] == "tile")
{
sendTile(buffer, length, tokens);
@@ -420,14 +432,19 @@ bool MasterProcessSession::getStatus(const char *buffer, int length)
return true;
}
-bool MasterProcessSession::getStyles(const char *buffer, int length)
+bool MasterProcessSession::getCommandValues(const char *buffer, int length, StringTokenizer& tokens)
{
- std::string styles;
+ std::string command;
+ if (tokens.count() != 2 || !getTokenString(tokens[1], "command", command))
+ {
+ sendTextFrame("error: cmd=commandvalues kind=syntax");
+ return false;
+ }
- styles = _tileCache->getTextFile("styles.txt");
- if (styles.size() > 0)
+ std::string cmdValues = _tileCache->getTextFile("cmdValues" + command + ".txt");
+ if (cmdValues.size() > 0)
{
- sendTextFrame(styles);
+ sendTextFrame(cmdValues);
return true;
}
@@ -612,6 +629,10 @@ bool ChildProcessSession::handleInput(const char *buffer, int length)
Application::instance().logger().information(Util::logPrefix() + _kindString + ",Input," + getAbbreviatedMessage(buffer, length));
+ if (tokens[0] == "commandvalues")
+ {
+ return getCommandValues(buffer, length, tokens);
+ }
if (tokens[0] == "load")
{
if (_docURL != "")
@@ -638,10 +659,6 @@ bool ChildProcessSession::handleInput(const char *buffer, int length)
{
return getStatus(buffer, length);
}
- else if (tokens[0] == "styles")
- {
- return getStyles(buffer, length);
- }
else if (tokens[0] == "tile")
{
sendTile(buffer, length, tokens);
@@ -866,9 +883,15 @@ bool ChildProcessSession::getStatus(const char *buffer, int length)
return true;
}
-bool ChildProcessSession::getStyles(const char *buffer, int length)
+bool ChildProcessSession::getCommandValues(const char *buffer, int length, StringTokenizer& tokens)
{
- sendTextFrame("styles: " + std::string(_loKitDocument->pClass->getStyles(_loKitDocument)));
+ std::string command;
+ if (tokens.count() != 2 || !getTokenString(tokens[1], "command", command))
+ {
+ sendTextFrame("error: cmd=commandvalues kind=syntax");
+ return false;
+ }
+ sendTextFrame("commandvalues: " + std::string(_loKitDocument->pClass->getCommandValues(_loKitDocument, command.c_str())));
return true;
}
diff --git a/loolwsd/LOOLSession.hpp b/loolwsd/LOOLSession.hpp
index fdd4008..247012c 100644
--- a/loolwsd/LOOLSession.hpp
+++ b/loolwsd/LOOLSession.hpp
@@ -45,7 +45,7 @@ public:
virtual bool getStatus(const char *buffer, int length) = 0;
- virtual bool getStyles(const char *buffer, int length) = 0;
+ virtual bool getCommandValues(const char *buffer, int length, Poco::StringTokenizer& tokens) = 0;
virtual bool handleInput(const char *buffer, int length) = 0;
@@ -111,7 +111,7 @@ public:
virtual bool getStatus(const char *buffer, int length);
- virtual bool getStyles(const char *buffer, int length);
+ virtual bool getCommandValues(const char *buffer, int length, Poco::StringTokenizer& tokens);
protected:
bool invalidateTiles(const char *buffer, int length, Poco::StringTokenizer& tokens);
@@ -159,7 +159,7 @@ public:
virtual bool getStatus(const char *buffer, int length);
- virtual bool getStyles(const char *buffer, int length);
+ virtual bool getCommandValues(const char *buffer, int length, Poco::StringTokenizer& tokens);
LibreOfficeKitDocument *_loKitDocument;
std::string _docType;
commit 3fc7766d7d6991730197b5e6a588d8225e973724
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 19:54:32 2015 +0300
loleaflet: fixed typo
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index f07e68d..cce5bc6 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -5,7 +5,7 @@ L.Map.include({
// a mapping of uno commands to more readable toolbar items
unoToolbarCommands: {
- 'uno.StyleApply': 'styles'
+ '.uno:StyleApply': 'styles'
},
getStyles: function () {
commit c10b6da7a12e37b7db5b2293bd64798b50243b47
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 19:48:10 2015 +0300
loleaflet: only set the style in editing mode
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index 02a7325..f07e68d 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -30,11 +30,13 @@ L.Map.include({
this.fire('error', {cmd: 'setStyle', kind: 'incorrectparam'});
return;
}
- var msg = 'uno .uno:StyleApply {' +
- '"Style":{"type":"string", "value": "' + style + '"},' +
- '"FamilyName":{"type":"string", "value":"' + familyName + '"}' +
- '}';
- L.Socket.sendMessage(msg);
+ if (this._docLayer._permission === 'edit') {
+ var msg = 'uno .uno:StyleApply {' +
+ '"Style":{"type":"string", "value": "' + style + '"},' +
+ '"FamilyName":{"type":"string", "value":"' + familyName + '"}' +
+ '}';
+ L.Socket.sendMessage(msg);
+ }
},
toggleCommandState: function (unoState) {
commit a9f5209f5a575c467f1752c10863b0b852331943
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 19:46:39 2015 +0300
loleaflet: uno command alias for the toolbar
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index e255bf4..02a7325 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -2,6 +2,12 @@
* Toolbar handler
*/
L.Map.include({
+
+ // a mapping of uno commands to more readable toolbar items
+ unoToolbarCommands: {
+ 'uno.StyleApply': 'styles'
+ },
+
getStyles: function () {
return this._docLayer._docStyles;
},
commit abe296c0b9a23aeecca66a7674da20042b8b2163
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 19:36:11 2015 +0300
loleaflet: buttons for enabiling editing / selection mode
Use those instead of the checkboxes to save some space in the toolbar
diff --git a/loleaflet/debug/document/document_simple_example.html b/loleaflet/debug/document/document_simple_example.html
index eaa173a..03cd8d8 100644
--- a/loleaflet/debug/document/document_simple_example.html
+++ b/loleaflet/debug/document/document_simple_example.html
@@ -71,8 +71,6 @@
globalMap.addControl(L.control.zoom());
globalMap.addControl(L.control.parts());
globalMap.addControl(L.control.search());
- globalMap.addControl(L.control.permissionSwitch());
- globalMap.addControl(L.control.selection());
globalMap.addControl(L.control.statusIndicator());
globalMap.addControl(L.control.scroll());
globalMap.addControl(L.control.dialog());
diff --git a/loleaflet/dist/images/edit.png b/loleaflet/dist/images/edit.png
new file mode 100644
index 0000000..d0dfaa5
Binary files /dev/null and b/loleaflet/dist/images/edit.png differ
diff --git a/loleaflet/dist/images/selection.png b/loleaflet/dist/images/selection.png
new file mode 100644
index 0000000..f9121b9
Binary files /dev/null and b/loleaflet/dist/images/selection.png differ
diff --git a/loleaflet/src/control/Control.Buttons.js b/loleaflet/src/control/Control.Buttons.js
index dd7625c..f2622cb 100644
--- a/loleaflet/src/control/Control.Buttons.js
+++ b/loleaflet/src/control/Control.Buttons.js
@@ -21,11 +21,13 @@ L.Control.Buttons = L.Control.extend({
'alignright': {title: 'Align right', uno: 'RightPara', iconName: 'alignright.png'},
'alignblock': {title: 'Justified', uno: 'JustifyPara', iconName: 'alignblock.png'},
'save': {title: 'Save', uno: 'Save', iconName: 'save.png'},
- 'saveas': {title: 'Save As', uno: '', iconName: 'saveas.png'}
+ 'saveas': {title: 'Save As', iconName: 'saveas.png'},
+ 'edit': {title: 'Enable editing', iconName: 'edit.png'},
+ 'selection': {title: 'Enable selection', iconName: 'selection.png'}
};
for (var key in this._buttons) {
var button = this._buttons[key];
- if (key === 'alignleft' || key === 'save') {
+ if (key === 'alignleft' || key === 'save' || key === 'edit') {
// add a separator
L.DomUtil.create('span', 'leaflet-control-button-separator', container);
}
@@ -65,9 +67,27 @@ L.Control.Buttons = L.Control.extend({
callback: L.bind(this._onSaveAs, this)
});
}
- else if (this._map._docLayer._permission === 'edit') {
+ else if (button.uno && this._map._docLayer._permission === 'edit') {
this._map.toggleCommandState(button.uno);
}
+ else if (id === 'edit' && !L.DomUtil.hasClass(button.el.firstChild, 'leaflet-control-buttons-disabled')) {
+ if (this._map.getPermission() === 'edit') {
+ this._map.setPermission('view');
+ }
+ else if (this._map.getPermission() === 'view') {
+ this._map.setPermission('edit');
+ }
+ }
+ else if (id === 'selection' && !L.DomUtil.hasClass(button.el.firstChild, 'leaflet-control-buttons-disabled')) {
+ if (this._map.isSelectionEnabled()) {
+ this._map.disableSelection();
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-active');
+ }
+ else {
+ this._map.enableSelection();
+ L.DomUtil.addClass(button.el.firstChild, 'leaflet-control-buttons-active');
+ }
+ }
},
_onStateChange: function (e) {
@@ -109,13 +129,39 @@ L.Control.Buttons = L.Control.extend({
},
_onPermissionUpdate: function (e) {
- for (var key in this._buttons) {
- var button = this._buttons[key];
- if (e.perm !== 'edit') {
- L.DomUtil.addClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ for (var id in this._buttons) {
+ var button = this._buttons[id];
+ if (button.uno) {
+ if (e.perm !== 'edit') {
+ L.DomUtil.addClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ }
+ else {
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ }
}
- else {
- L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ else if (id === 'edit') {
+ if (e.perm === 'edit') {
+ L.DomUtil.addClass(button.el.firstChild, 'leaflet-control-buttons-active');
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ }
+ else if (e.perm === 'view') {
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-active');
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ }
+ else if (e.perm === 'readonly') {
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-active');
+ L.DomUtil.addClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ }
+ }
+ else if (id === 'selection') {
+ if (e.perm === 'edit') {
+ L.DomUtil.addClass(button.el.firstChild, 'leaflet-control-buttons-active');
+ L.DomUtil.addClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ }
+ else if (e.perm === 'view' || e.perm === 'readonly') {
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-active');
+ L.DomUtil.removeClass(button.el.firstChild, 'leaflet-control-buttons-disabled');
+ }
}
}
}
commit f735791f4ea330742eda5a76bb4a2f401f413589
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 19:34:59 2015 +0300
loleaflet: method for getting the permission & mouse selection status
diff --git a/loleaflet/src/control/Permission.js b/loleaflet/src/control/Permission.js
index 5bb8a9a..b0689e5 100644
--- a/loleaflet/src/control/Permission.js
+++ b/loleaflet/src/control/Permission.js
@@ -31,5 +31,13 @@ L.Map.include({
return;
}
this.dragging.enable();
+ },
+
+ isSelectionEnabled: function () {
+ return !this.dragging.enabled();
+ },
+
+ getPermission: function () {
+ return this._docLayer._permission;
}
});
commit baa0806b7cc752e5d9e3a47513cf28c776c3cc74
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 18:59:53 2015 +0300
loleaflet: moved the style formating methods in Toolbar.js
diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index b55b129..4ac6c3c 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -358,11 +358,6 @@ var deps = {
desc: 'Scroll handler.'
},
- Styles: {
- src: ['control/Styles.js'],
- desc: 'Document styles handler.'
- },
-
AnimationPan: {
src: [
'dom/DomEvent.js',
diff --git a/loleaflet/src/control/Styles.js b/loleaflet/src/control/Styles.js
deleted file mode 100644
index 2e37af2..0000000
--- a/loleaflet/src/control/Styles.js
+++ /dev/null
@@ -1,17 +0,0 @@
-L.Map.include({
- getStyles: function () {
- return this._docLayer._docStyles;
- },
-
- setStyle: function (style, familyName) {
- if (!style || !familyName) {
- this.fire('error', {cmd: 'setStyle', kind: 'incorrectparam'});
- return;
- }
- var msg = 'uno .uno:StyleApply {' +
- '"Style":{"type":"string", "value": "' + style + '"},' +
- '"FamilyName":{"type":"string", "value":"' + familyName + '"}' +
- '}';
- L.Socket.sendMessage(msg);
- }
-});
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index 4385dcc..e255bf4 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -2,10 +2,8 @@
* Toolbar handler
*/
L.Map.include({
- toggleCommandState: function (unoState) {
- if (this._docLayer._permission === 'edit') {
- L.Socket.sendMessage('uno .uno:' + unoState);
- }
+ getStyles: function () {
+ return this._docLayer._docStyles;
},
saveAs: function (url, format, options) {
@@ -19,5 +17,23 @@ L.Map.include({
'url=' + url + ' ' +
'format=' + format + ' ' +
'options=' + options);
+ },
+
+ setStyle: function (style, familyName) {
+ if (!style || !familyName) {
+ this.fire('error', {cmd: 'setStyle', kind: 'incorrectparam'});
+ return;
+ }
+ var msg = 'uno .uno:StyleApply {' +
+ '"Style":{"type":"string", "value": "' + style + '"},' +
+ '"FamilyName":{"type":"string", "value":"' + familyName + '"}' +
+ '}';
+ L.Socket.sendMessage(msg);
+ },
+
+ toggleCommandState: function (unoState) {
+ if (this._docLayer._permission === 'edit') {
+ L.Socket.sendMessage('uno .uno:' + unoState);
+ }
}
});
commit 95463adc442368b80dcd6d4e5ddb84d16bd1b02d
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Wed Sep 9 18:47:14 2015 +0300
loleaflet: created a general toolbar methods handler
diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index c35d667..b55b129 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -343,9 +343,9 @@ var deps = {
desc: 'Permission change handler (edit, view, readonly).'
},
- Buttons: {
- src: ['control/Buttons.js'],
- desc: 'Toolbar buttons handler.'
+ Toolbar: {
+ src: ['control/Toolbar.js'],
+ desc: 'Toolbar handler.'
},
Parts: {
diff --git a/loleaflet/src/control/Buttons.js b/loleaflet/src/control/Toolbar.js
similarity index 94%
rename from loleaflet/src/control/Buttons.js
rename to loleaflet/src/control/Toolbar.js
index d9327c8..4385dcc 100644
--- a/loleaflet/src/control/Buttons.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -1,5 +1,5 @@
/*
- * Toolbar buttons handler
+ * Toolbar handler
*/
L.Map.include({
toggleCommandState: function (unoState) {
More information about the Libreoffice-commits
mailing list