loleaflet/dist/searchControl.css | 28 +++++++ loleaflet/dist/toolbar/toolbar.js | 4 - loleaflet/src/control/Control.Menubar.js | 119 ++++++++++++++++++++++++++++++- loleaflet/src/control/Search.js | 30 +++++-- 4 files changed, 168 insertions(+), 13 deletions(-)
New commits: commit 781aceedeb4da4a7ffc878f3ce518655d01708e3 Author: Aditya Dewan <iit2015...@iiita.ac.in> Date: Thu Jun 1 02:57:16 2017 +0530 tdf#97020 Adding find&replace functionality Change-Id: I4d8d22368e6f8ee85873c86f9e80fbdffc2ad17a Reviewed-on: https://gerrit.libreoffice.org/38287 Reviewed-by: pranavk <pran...@collabora.co.uk> Tested-by: pranavk <pran...@collabora.co.uk> (cherry picked from commit ccca292d7d50c7bbb0a5bdf29ac9981be07c41c1) Reviewed-on: https://gerrit.libreoffice.org/38439 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/loleaflet/dist/searchControl.css b/loleaflet/dist/searchControl.css index 85928da6..1bd0c1c6 100644 --- a/loleaflet/dist/searchControl.css +++ b/loleaflet/dist/searchControl.css @@ -1,3 +1,29 @@ +.findReplaceVex .findreplacetable { + width: 100%; +} +.findReplaceVex .findreplacetable label, .findReplaceVex .findreplacetable input { + font-size: .9em; + width: 95%; +} +.findReplaceVex .vex-content{ + width: 650px !important; + position: absolute !important; + z-index: 1100; + left: calc(50vw - 325px); + box-shadow: 0 4px 16px rgba(0,0,0,.2); + border: 1px solid rgba(0,0,0,.333); +} +.vex-dialog-message { + font-size: 1.2em; +} +.findReplaceVex .btnArrow { + float: left !important; + margin: 0px !important; + margin-right: 6px !important; +} +.findReplaceVex .vex-dialog-button { + text-transform: initial !important; +} .search-not-found { background-color: red; -webkit-transition: background-color 0.8s linear; @@ -5,4 +31,4 @@ -o-transition: background-color 0.8s linear; transition: background-color 0.8s linear; -} +} \ No newline at end of file diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js index 755c5fd8..53edf075 100644 --- a/loleaflet/dist/toolbar/toolbar.js +++ b/loleaflet/dist/toolbar/toolbar.js @@ -737,7 +737,7 @@ function selectItem(item, func) } function onSearch(e) { var toolbar = w2ui['toolbar-down']; - map.search(L.DomUtil.get('search-input').value, false, 0, true /* expand search */); + map.search(L.DomUtil.get('search-input').value, false, '', 0, true /* expand search */); toolbar.enable('searchprev'); toolbar.enable('searchnext'); toolbar.show('cancelsearch'); @@ -1236,8 +1236,10 @@ map.on('search', function (e) { toolbar.disable('searchnext'); toolbar.hide('cancelsearch'); L.DomUtil.addClass(searchInput, 'search-not-found'); + $('#findthis').addClass('search-not-found'); map.resetSelection(); setTimeout(function () { + $('#findthis').removeClass('search-not-found'); L.DomUtil.removeClass(searchInput, 'search-not-found'); }, 500); } diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js index 0b786615..87d224e7 100644 --- a/loleaflet/src/control/Control.Menubar.js +++ b/loleaflet/src/control/Control.Menubar.js @@ -28,6 +28,8 @@ L.Control.Menubar = L.Control.extend({ {type: 'separator'}, {name: _('Select all'), type: 'unocommand', uno: '.uno:SelectAll'}, {type: 'separator'}, + {name: _('Find & Replace'), id: 'findandreplace', type: 'action'}, + {type: 'separator'}, {name: _('Track Changes'), type: 'menu', menu: [ {name: _('Record'), type: 'unocommand', uno: '.uno:TrackChanges'}, {name: _('Show'), type: 'unocommand', uno: '.uno:ShowTrackedChanges'}, @@ -428,6 +430,121 @@ L.Control.Menubar = L.Control.extend({ // check if it is empty fileName = fileName === '' ? 'document' : fileName; map.downloadAs(fileName + '.' + format, format); + } else if (id === 'findandreplace') { + findReplaceContent = + '\ + <table class="findreplacetable">\ + <tr>\ + <td>\ + <label for="findthis">Find</label>\ + </td>\ + <td>\ + <input id="findthis" name="findthis">\ + </td>\ + </tr>\ + <tr>\ + <td>\ + <label for="replacewith">Replace with</label>\ + </td>\ + <td>\ + <input name="replacewith">\ + </td>\ + </tr>\ + </table>\ + '; + 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: '⯠' + _('Prev'), + 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; + }); + $('.vex').on('mousemove', function(e) { + 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); + if (isOutHor) { + selected.style.left = (xPos - xElem) + 'px'; + } + if (isOutVert) { + selected.style.top = (yPos - yElem) + 'px'; + } + } + }); + }, + onSubmit: function(event) { + $vexContent = $(this).parent(); + event.preventDefault(); + event.stopPropagation(); + + opt = $vexContent.data().vex.option; + findText = this.findthis.value; + 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); } else if (id === 'insertcomment') { map.insertComment(); } else if (id === 'insertgraphic') { @@ -559,7 +676,7 @@ L.Control.Menubar = L.Control.extend({ if (menu[i].type === 'action') { if ((menu[i].id === 'rev-history' && !revHistoryEnabled) || - (menu[i].id === 'closedocument' && !closebutton)) { + (menu[i].id === 'closedocument' && !closebutton)) { continue; } } diff --git a/loleaflet/src/control/Search.js b/loleaflet/src/control/Search.js index f030a7ba..cd7974b1 100644 --- a/loleaflet/src/control/Search.js +++ b/loleaflet/src/control/Search.js @@ -1,10 +1,13 @@ L.Map.include({ - search: function (text, backward, all, expand) { + search: function (text, backward, replaceString, command, expand) { if (backward === undefined) { backward = false; } - if (all === undefined) { - all = 0; + if (command === undefined) { + command = 0; + } + if (replaceString === undefined) { + replaceString = ''; } if (this._docLayer._searchResults && text !== this._docLayer._searchTerm) { @@ -15,8 +18,20 @@ L.Map.include({ 'SearchItem.SearchString': { 'type': 'string' }, + 'SearchItem.ReplaceString': { + 'type': 'string' + }, 'SearchItem.Backward': { 'type': 'boolean' + }, + 'SearchItem.SearchStartPointX': { + 'type': 'long' + }, + 'SearchItem.SearchStartPointY': { + 'type': 'long' + }, + 'SearchItem.Command': { + 'type': 'long' } }; @@ -41,15 +56,10 @@ L.Map.include({ searchCmd['SearchItem.SearchString'].value = text; searchCmd['SearchItem.Backward'].value = backward; - searchCmd['SearchItem.SearchStartPointX'] = {}; - searchCmd['SearchItem.SearchStartPointX'].type = 'long'; + searchCmd['SearchItem.ReplaceString'].value = replaceString; searchCmd['SearchItem.SearchStartPointX'].value = searchStartPointX; - searchCmd['SearchItem.SearchStartPointY'] = {}; - searchCmd['SearchItem.SearchStartPointY'].type = 'long'; searchCmd['SearchItem.SearchStartPointY'].value = searchStartPointY; - searchCmd['SearchItem.Command'] = {}; - searchCmd['SearchItem.Command'].type = 'long'; - searchCmd['SearchItem.Command'].value = all; + searchCmd['SearchItem.Command'].value = command; this._searchRequested = true; this._socket.sendMessage('uno .uno:ExecuteSearch ' + JSON.stringify(searchCmd)); },
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits