[Libreoffice-commits] online.git: loleaflet/build loleaflet/debug loleaflet/dist loleaflet/src
Pranav Kant
pranavk at collabora.com
Mon May 16 09:08:33 UTC 2016
loleaflet/build/deps.js | 7 +
loleaflet/debug/document/loleaflet.html | 1
loleaflet/dist/contextMenu/jquery.contextMenu.css | 8 +
loleaflet/dist/images/lc_checkbox.png |binary
loleaflet/dist/images/lc_radiobutton.png |binary
loleaflet/dist/loleaflet.html | 1
loleaflet/src/control/Control.ContextMenu.js | 148 ++++++++++++++++++++++
7 files changed, 165 insertions(+)
New commits:
commit 58c1714ee855f95bdd57ff0b94ed735d79b98712
Author: Pranav Kant <pranavk at collabora.com>
Date: Fri May 13 20:53:35 2016 +0530
loleaflet: Setup context menu
But use a whitelist to not show items/uno commands that
correspond to opening a dialog. Whitelist is limited as of now,
but can be extended easily to include more commands to the
context menu as required.
Change-Id: I3ff8cf722d395aa643d512c98db41ebeee0a95d1
diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index 13c6fe1..f7cc95b 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -308,6 +308,13 @@ var deps = {
desc: 'Row Header bar'
},
+ ControlContextmenu: {
+ src: ['control/Control.js',
+ 'control/Control.ContextMenu.js'],
+ heading: 'Controls',
+ desc: 'Context Menu'
+ },
+
ControlTabs: {
src: ['control/Control.js',
'control/Control.Tabs.js'],
diff --git a/loleaflet/debug/document/loleaflet.html b/loleaflet/debug/document/loleaflet.html
index ac8d861..f9939d5 100644
--- a/loleaflet/debug/document/loleaflet.html
+++ b/loleaflet/debug/document/loleaflet.html
@@ -122,6 +122,7 @@
map.addControl(L.control.tabs());
map.addControl(L.control.columnHeader());
map.addControl(L.control.rowHeader());
+ map.addControl(L.control.contextMenu());
</script>
diff --git a/loleaflet/dist/contextMenu/jquery.contextMenu.css b/loleaflet/dist/contextMenu/jquery.contextMenu.css
index de954d8..f8de521 100644
--- a/loleaflet/dist/contextMenu/jquery.contextMenu.css
+++ b/loleaflet/dist/contextMenu/jquery.contextMenu.css
@@ -72,6 +72,14 @@
content: "";
}
+.context-menu-icon-checkmark:before {
+ content: url('/loleaflet/dist/images/lc_checkbox.png');
+}
+
+.context-menu-icon-radio:before {
+ content: url('/loleaflet/dist/images/lc_radiobutton.png');
+}
+
.context-menu-icon.context-menu-hover:before {
color: #fff;
}
diff --git a/loleaflet/dist/images/lc_checkbox.png b/loleaflet/dist/images/lc_checkbox.png
new file mode 100644
index 0000000..9de726b
Binary files /dev/null and b/loleaflet/dist/images/lc_checkbox.png differ
diff --git a/loleaflet/dist/images/lc_radiobutton.png b/loleaflet/dist/images/lc_radiobutton.png
new file mode 100644
index 0000000..5f04485
Binary files /dev/null and b/loleaflet/dist/images/lc_radiobutton.png differ
diff --git a/loleaflet/dist/loleaflet.html b/loleaflet/dist/loleaflet.html
index b547251..75a0b52 100644
--- a/loleaflet/dist/loleaflet.html
+++ b/loleaflet/dist/loleaflet.html
@@ -122,6 +122,7 @@
map.addControl(L.control.tabs());
map.addControl(L.control.columnHeader());
map.addControl(L.control.rowHeader());
+ map.addControl(L.control.contextMenu());
</script>
diff --git a/loleaflet/src/control/Control.ContextMenu.js b/loleaflet/src/control/Control.ContextMenu.js
new file mode 100644
index 0000000..1940e3b
--- /dev/null
+++ b/loleaflet/src/control/Control.ContextMenu.js
@@ -0,0 +1,148 @@
+/*
+* Control.ContextMenu
+*/
+
+/* global */
+L.Control.ContextMenu = L.Control.extend({
+ options: {
+ SEPERATOR: '---------',
+ /*
+ * Enter UNO commands that should appear in the context menu.
+ * Entering a UNO command under `general' would enable it for all types
+ * of documents. If you do not want that, whitelist it in document specific filter.
+ */
+ whitelist: {
+ general: ['Cut', 'Copy', 'Paste', 'PasteSpecialMenu', 'PasteUnformatted',
+ 'NumberingStart', 'ContinueNumbering', 'IncrementLevel', 'DecrementLevel',
+ 'OpenHyperlinkLocation', 'CopyHyperlinkLocation', 'RemoveHyperlink',
+ 'ArrangeFrameMenu', 'ArrangeMenu', 'BringToFront', 'ObjectForwardOne', 'ObjectBackOne', 'SendToBack',
+ 'RotateMenu', 'RotateLeft', 'RotateRight'],
+
+ text: ['TableInsertMenu',
+ 'InsertRowsBefore', 'InsertRowsAfter', 'InsertColumnsBefore', 'InsertColumnsAfter',
+ 'TableDeleteMenu',
+ 'DeleteRows', 'DeleteColumns', 'DeleteTable',
+ 'MergeCells', 'SetOptimalColumnWidth', 'SetOptimalRowWidth'],
+
+ spreadsheet: ['MergeCells', 'SplitCells',
+ 'InsertAnnotation', 'EditAnnotation', 'DeleteNote', 'ShowNote', 'HideNote'],
+
+ presentation: [],
+ drawing: []
+ }
+ },
+
+
+
+ onAdd: function (map) {
+ this._prevMousePos = null;
+
+ map.on('locontextmenu', this._onContextMenu, this);
+ map.on('mousedown', this._onMouseDown, this);
+ },
+
+ _onMouseDown: function(e) {
+ this._prevMousePos = {x: e.originalEvent.pageX, y: e.originalEvent.pageY};
+
+ $.contextMenu('destroy', '.leaflet-layer');
+ },
+
+ _onContextMenu: function(obj) {
+ if (!map._editlock) {
+ return;
+ }
+
+ var contextMenu = this._createContextMenuStructure(obj);
+ var d = $.contextMenu({
+ selector: '.leaflet-layer',
+ trigger: 'none',
+ build: function(triggerEle, e) {
+ return {
+ callback: function(key, options) {
+ map.sendUnoCommand(key);
+ },
+ items: contextMenu
+ };
+ }
+ });
+
+ $('.leaflet-layer').contextMenu(this._prevMousePos);
+ },
+
+ _createContextMenuStructure: function(obj) {
+ var docType = map.getDocType();
+ var contextMenu = {};
+ var sepIdx = 1, itemName;
+ var isLastItemText = false;
+ for (var idx in obj['menu']) {
+ var item = obj['menu'][idx];
+ if (item['enabled'] === 'false') {
+ continue;
+ }
+
+ if (item['type'] === 'separator') {
+ if (isLastItemText) {
+ contextMenu['sep' + sepIdx++] = this.options.SEPERATOR;
+ }
+ isLastItemText = false;
+ }
+ else {
+ // Only show whitelisted items
+ // Command name (excluding '.uno:') starts from index = 5
+ var commandName = item['command'].substring(5);
+ if (this.options.whitelist.general.indexOf(commandName) === -1 &&
+ !(docType === 'text' && this.options.whitelist.text.indexOf(commandName) !== -1) &&
+ !(docType === 'spreadsheet' && this.options.whitelist.spreadsheet.indexOf(commandName) !== -1) &&
+ !(docType === 'presentation' && this.options.whitelist.presentation.indexOf(commandName) !== -1) &&
+ !(docType === 'drawing' && this.optinos.whitelist.drawing.indexOf(commandName) !== -1)) {
+ continue;
+ }
+
+ if (item['type'] === 'command') {
+ itemName = item['text'].replace('~', '');
+ contextMenu[item['command']] = {
+ name: itemName
+ };
+
+ if (item['checktype'] === 'checkmark') {
+ if (item['checked'] === 'true') {
+ contextMenu[item['command']]['icon'] = 'checkmark';
+ }
+ } else if (item['checktype'] === 'radio') {
+ if (item['checked'] === 'true') {
+ contextMenu[item['command']]['icon'] = 'radio';
+ }
+ }
+
+ isLastItemText = true;
+ } else if (item['type'] === 'menu') {
+ itemName = item['text'].replace('~', '');
+ var submenu = this._createContextMenuStructure(item);
+ // ignore submenus with all items disabled
+ if (Object.keys(submenu).length === 0) {
+ continue;
+ }
+
+ contextMenu[item['command']] = {
+ name: itemName,
+ items: submenu
+ };
+ isLastItemText = true;
+ }
+ }
+
+ }
+
+ // Remove seperator, if present, in the end
+ var lastItem = Object.keys(contextMenu)[Object.keys(contextMenu).length - 1];
+ if (lastItem !== undefined && lastItem.startsWith('sep')) {
+ delete contextMenu[lastItem];
+ }
+
+ return contextMenu;
+ }
+});
+
+L.control.contextMenu = function (options) {
+ return new L.Control.ContextMenu(options);
+};
More information about the Libreoffice-commits
mailing list