loleaflet/dist/menubar.css | 5 loleaflet/src/control/Control.Menubar.js | 254 +++++++++++++++++-------------- loleaflet/src/map/handler/Map.WOPI.js | 46 +++-- 3 files changed, 171 insertions(+), 134 deletions(-)
New commits: commit a986238f4e3583ab67856180f5fb60333508a031 Author: Pranav Kant <pran...@collabora.co.uk> Date: Tue Jun 13 15:26:44 2017 +0530 loleaflet: Wrap find & replace inside a function For better readability in our action if-else tree. Change-Id: Id0e39ed25362da5feb70002b887b5963a49900b1 diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js index 9fe98e3f..3d2eb51f 100644 --- a/loleaflet/src/control/Control.Menubar.js +++ b/loleaflet/src/control/Control.Menubar.js @@ -438,22 +438,9 @@ L.Control.Menubar = L.Control.extend({ }); }, - _executeAction: function(item) { - var id = $(item).data('id'); - if (id === 'save') { - map.save(true, true); - } else if (id === 'print') { - map.print(); - } else if (id.startsWith('downloadas-')) { - var format = id.substring('downloadas-'.length); - // remove the extension if any - var fileName = title.substr(0, title.lastIndexOf('.')) || title; - // check if it is empty - fileName = fileName === '' ? 'document' : fileName; - map.downloadAs(fileName + '.' + format, format); - } else if (id === 'findandreplace') { - var findReplaceContent = - '\ + _onClickFindAndReplace: function() { + var findReplaceContent = + '\ <table class="findreplacetable">\ <tr>\ <td>\ @@ -473,104 +460,121 @@ L.Control.Menubar = L.Control.extend({ </tr>\ </table>\ '; - var mouseMoveFunc; - vex.dialog.open({ - showCloseButton: true, - escapeButtonCloses: true, - className: 'vex-theme-plain findReplaceVex', - message: _('Find & Replace'), - input: findReplaceContent, - buttons: [ - $.extend({}, vex.dialog.buttons.replace, { - text: _('Replace'), - click: function($vexContent, e) { - $vexContent.data().vex.option = 'replace'; - }}), - $.extend({}, vex.dialog.buttons.replaceAll, { - text: _('Replace All'), - click: function($vexContent, e) { - $vexContent.data().vex.option = 'replaceAll'; - }}), - $.extend({}, vex.dialog.buttons.findPrev, { - text: _('Previous'), - className: 'btnArrow', - click: function($vexContent, e) { - $vexContent.data().vex.option = 'previous'; - }}), - $.extend({}, vex.dialog.buttons.findNext, { - text: _('Next'), - className: 'btnArrow', - click: function($vexContent, e) { - $vexContent.data().vex.option = 'next'; - }}) - ], - afterOpen: function(e) { - $('.vex-overlay').remove(); - $('.vex').css('position', 'static'); - var selected = null; - var xPos = 0, yPos = 0; - var xElem = 0, yElem = 0; - var maxH = window.innerHeight, maxW = window.innerWidth; - - $('#findthis').on('input', function() { - if (this.value.length != 0) { - map.search(this.value, false, '', 0, true); - } - }); - $('.vex-content').on('mousedown', function(e) { - selected = this; - selected.style.cursor = 'move'; - xElem = xPos - selected.offsetLeft; - yElem = yPos - selected.offsetTop; - }); - $('.vex-content').on('mouseup', function(e) { - selected.style.cursor = 'default'; - selected = null; - }); - var mouseMoveFunc = function(e) { - xPos = e.pageX; - yPos = e.pageY; - if (selected !== null) { - var isOutVert = (yPos - yElem >= 0 && (yPos - yElem + selected.offsetHeight) <= maxH); - var isOutHor = (xPos - xElem >= 0 && (xPos - xElem + selected.offsetWidth) <= maxW); - if (isOutHor) { - selected.style.left = (xPos - xElem) + 'px'; - } - if (isOutVert) { - selected.style.top = (yPos - yElem) + 'px'; - } - } - }; - $(document).on('mousemove', mouseMoveFunc); - }, - afterClose: function(e) { - $(document).off('mousemove', mouseMoveFunc); - }, - onSubmit: function(event) { - var $vexContent = $(this).parent(); - event.preventDefault(); - event.stopPropagation(); - - var opt = $vexContent.data().vex.option; - var findText = this.findthis.value; - var replaceText = this.replacewith.value; - - if (findText.length != 0) { - if (opt === 'next') { - map.search(findText); - } - else if (opt === 'previous') { - map.search(findText, true); - } - else if (opt === 'replace') { - map.search(findText, false, replaceText, 2); + var mouseMoveFunc; + vex.dialog.open({ + showCloseButton: true, + escapeButtonCloses: true, + className: 'vex-theme-plain findReplaceVex', + message: _('Find & Replace'), + input: findReplaceContent, + buttons: [ + $.extend({}, vex.dialog.buttons.replace, { + text: _('Replace'), + click: function($vexContent, e) { + $vexContent.data().vex.option = 'replace'; + }}), + $.extend({}, vex.dialog.buttons.replaceAll, { + text: _('Replace All'), + click: function($vexContent, e) { + $vexContent.data().vex.option = 'replaceAll'; + }}), + $.extend({}, vex.dialog.buttons.findPrev, { + text: _('Previous'), + className: 'btnArrow', + click: function($vexContent, e) { + $vexContent.data().vex.option = 'previous'; + }}), + $.extend({}, vex.dialog.buttons.findNext, { + text: _('Next'), + className: 'btnArrow', + click: function($vexContent, e) { + $vexContent.data().vex.option = 'next'; + }}) + ], + afterOpen: function(e) { + $('.vex-overlay').remove(); + $('.vex').css('position', 'static'); + var selected = null; + var xPos = 0, yPos = 0; + var xElem = 0, yElem = 0; + var maxH = window.innerHeight, maxW = window.innerWidth; + + $('#findthis').on('input', function() { + if (this.value.length != 0) { + map.search(this.value, false, '', 0, true); + } + }); + $('.vex-content').on('mousedown', function(e) { + selected = this; + selected.style.cursor = 'move'; + xElem = xPos - selected.offsetLeft; + yElem = yPos - selected.offsetTop; + }); + $('.vex-content').on('mouseup', function(e) { + selected.style.cursor = 'default'; + selected = null; + }); + var mouseMoveFunc = function(e) { + xPos = e.pageX; + yPos = e.pageY; + if (selected !== null) { + var isOutVert = (yPos - yElem >= 0 && (yPos - yElem + selected.offsetHeight) <= maxH); + var isOutHor = (xPos - xElem >= 0 && (xPos - xElem + selected.offsetWidth) <= maxW); + if (isOutHor) { + selected.style.left = (xPos - xElem) + 'px'; } - else if (opt === 'replaceAll') { - map.search(findText, false, replaceText, 3); + if (isOutVert) { + selected.style.top = (yPos - yElem) + 'px'; } } + }; + $(document).on('mousemove', mouseMoveFunc); + }, + afterClose: function(e) { + $(document).off('mousemove', mouseMoveFunc); + }, + onSubmit: function(event) { + var $vexContent = $(this).parent(); + event.preventDefault(); + event.stopPropagation(); + + var opt = $vexContent.data().vex.option; + var findText = this.findthis.value; + var replaceText = this.replacewith.value; + + if (findText.length != 0) { + if (opt === 'next') { + map.search(findText); + } + else if (opt === 'previous') { + map.search(findText, true); + } + else if (opt === 'replace') { + map.search(findText, false, replaceText, 2); + } + else if (opt === 'replaceAll') { + map.search(findText, false, replaceText, 3); + } } - }, this); + } + }, this); + }, + + _executeAction: function(item) { + var id = $(item).data('id'); + if (id === 'save') { + map.save(true, true); + } else if (id === 'print') { + map.print(); + } else if (id.startsWith('downloadas-')) { + var format = id.substring('downloadas-'.length); + // remove the extension if any + var fileName = title.substr(0, title.lastIndexOf('.')) || title; + // check if it is empty + fileName = fileName === '' ? 'document' : fileName; + map.downloadAs(fileName + '.' + format, format); + } else if (id === 'findandreplace') { + this._onClickFindAndReplace(); } else if (id === 'insertcomment') { map.insertComment(); } else if (id === 'insertgraphic') { commit caa4aa12c7beeb112dbd58222bd5928326e7e101 Author: Pranav Kant <pran...@collabora.co.uk> Date: Tue Jun 13 15:23:21 2017 +0530 loleaflet: Add button to menu bar if toolbar doesn't exist ... in case of Insert_Button PostMessage API when the document is loaded in readonly mode. Change-Id: I65a316d0b3cf22751a6926bc7aa430a249be5244 diff --git a/loleaflet/dist/menubar.css b/loleaflet/dist/menubar.css index eb115d77..9d57445b 100644 --- a/loleaflet/dist/menubar.css +++ b/loleaflet/dist/menubar.css @@ -223,7 +223,10 @@ */ #menu-closedocument.readonly { display: block; - top: 3px; /* This is not a menu, plain action, but we want it to appear like a menu */ + } + + .readonly { + top: 3px; } } diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js index e236c218..9fe98e3f 100644 --- a/loleaflet/src/control/Control.Menubar.js +++ b/loleaflet/src/control/Control.Menubar.js @@ -2,7 +2,7 @@ * Control.Menubar */ -/* global $ _ map title vex revHistoryEnabled closebutton */ +/* global $ _ map title vex revHistoryEnabled closebutton L */ L.Control.Menubar = L.Control.extend({ // TODO: Some mechanism to stop the need to copy duplicate menus (eg. Help) options: { @@ -299,6 +299,25 @@ L.Control.Menubar = L.Control.extend({ this._menubarCont = L.DomUtil.get('main-menu'); map.on('doclayerinit', this._onDocLayerInit, this); + map.on('addmenu', this._addMenu, this); + }, + + _addMenu: function(e) { + var alreadyExists = L.DomUtil.get('menu-' + e.id); + if (alreadyExists) + return; + + var liItem = L.DomUtil.create('li', ''); + liItem.id = 'menu-' + e.id; + if (map._permission === 'readonly') { + L.DomUtil.addClass(liItem, 'readonly'); + } + var aItem = L.DomUtil.create('a', '', liItem); + $(aItem).text(e.label); + $(aItem).data('id', e.id); + $(aItem).data('type', 'action'); + $(aItem).data('postmessage', 'true'); + this._menubarCont.insertBefore(liItem, this._menubarCont.firstChild); }, _onDocLayerInit: function() { @@ -419,7 +438,8 @@ L.Control.Menubar = L.Control.extend({ }); }, - _executeAction: function(id) { + _executeAction: function(item) { + var id = $(item).data('id'); if (id === 'save') { map.save(true, true); } else if (id === 'print') { @@ -432,7 +452,7 @@ L.Control.Menubar = L.Control.extend({ fileName = fileName === '' ? 'document' : fileName; map.downloadAs(fileName + '.' + format, format); } else if (id === 'findandreplace') { - findReplaceContent = + var findReplaceContent = '\ <table class="findreplacetable">\ <tr>\ @@ -464,7 +484,7 @@ L.Control.Menubar = L.Control.extend({ $.extend({}, vex.dialog.buttons.replace, { text: _('Replace'), click: function($vexContent, e) { - $vexContent.data().vex.option = 'replace' + $vexContent.data().vex.option = 'replace'; }}), $.extend({}, vex.dialog.buttons.replaceAll, { text: _('Replace All'), @@ -511,8 +531,8 @@ L.Control.Menubar = L.Control.extend({ xPos = e.pageX; yPos = e.pageY; if (selected !== null) { - isOutVert = (yPos - yElem >= 0 && (yPos - yElem + selected.offsetHeight) <= maxH); - isOutHor = (xPos - xElem >= 0 && (xPos - xElem + selected.offsetWidth) <= maxW); + var isOutVert = (yPos - yElem >= 0 && (yPos - yElem + selected.offsetHeight) <= maxH); + var isOutHor = (xPos - xElem >= 0 && (xPos - xElem + selected.offsetWidth) <= maxW); if (isOutHor) { selected.style.left = (xPos - xElem) + 'px'; } @@ -527,13 +547,13 @@ L.Control.Menubar = L.Control.extend({ $(document).off('mousemove', mouseMoveFunc); }, onSubmit: function(event) { - $vexContent = $(this).parent(); + var $vexContent = $(this).parent(); event.preventDefault(); event.stopPropagation(); - opt = $vexContent.data().vex.option; - findText = this.findthis.value; - replaceText = this.replacewith.value; + var opt = $vexContent.data().vex.option; + var findText = this.findthis.value; + var replaceText = this.replacewith.value; if (findText.length != 0) { if (opt === 'next') { @@ -638,6 +658,11 @@ L.Control.Menubar = L.Control.extend({ map.sendUnoCommand('.uno:AttributePageSize {"AttributePageSize.Height":{"type":"long", "value": "21590"},"AttributePageSize.Width":{"type":"long", "value": "35560"}}'); map.sendUnoCommand('.uno:AttributePage {"AttributePage.Landscape":{"type":"boolean", "value": "true"}}'); } + + // Inform the host if asked + if ($(item).data('postmessage') === 'true') { + map.fire('postMessage', {msgId: 'Clicked_Button', args: {Id: id} }); + } }, _onDeleteSlide: function(e) { @@ -653,11 +678,10 @@ L.Control.Menubar = L.Control.extend({ var unoCommand = $(item).data('uno'); map.sendUnoCommand(unoCommand); } else if (type === 'action') { - var id = $(item).data('id'); - self._executeAction(id); + self._executeAction(item); } - if (id !== 'insertcomment') + if ($(item).data('id') !== 'insertcomment') map.focus(); }, diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js index 6ff295d2..44f4917b 100644 --- a/loleaflet/src/map/handler/Map.WOPI.js +++ b/loleaflet/src/map/handler/Map.WOPI.js @@ -103,29 +103,35 @@ L.Map.WOPI = L.Handler.extend({ 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', [ + && msg.Values.imgurl) { + if (this._map._permission === 'edit') { + // 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) { - 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 */ + // 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); } - ]); - 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 (this._map._permission === 'readonly') { + // Just add a menu entry for it + this._map.fire('addmenu', {id: msg.Values.id, label: msg.Values.hint}); } - resizeToolbar(); } } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits