loleaflet/dist/leaflet.css | 1 loleaflet/reference.html | 5 loleaflet/spec/loleaflet.html | 5 loleaflet/spec/loleaflet/control/PartsSpec.js | 163 ++++++++++++++++++++ loleaflet/spec/loleaflet/control/PermissionSpec.js | 129 ++++++++++++++++ loleaflet/spec/loleaflet/control/SearchSpec.js | 103 ++++++++++++ loleaflet/spec/loleaflet/control/ToolbarSpec.js | 61 +++++++ loleaflet/spec/loleaflet/loleafletSpec.js | 169 --------------------- loleaflet/src/control/Control.PartsPreview.js | 2 loleaflet/src/control/Toolbar.js | 13 + loleaflet/src/core/Socket.js | 1 loleaflet/src/layer/tile/GridLayer.js | 5 loleaflet/src/layer/tile/TileLayer.js | 7 loleaflet/src/map/Map.js | 3 loleaflet/src/map/handler/Map.Keyboard.js | 2 loleaflet/src/map/handler/Map.Print.js | 4 16 files changed, 492 insertions(+), 181 deletions(-)
New commits: commit 829005749b212c1456c8cc272e0a63aac46baf31 Author: Mihai Varga <mihai.va...@collabora.com> Date: Wed Oct 21 18:41:24 2015 +0300 loleaflet: added a map.print() method Also renamed the print handler so that it does not interfere with the new method diff --git a/loleaflet/reference.html b/loleaflet/reference.html index 07574de..4f13e94 100644 --- a/loleaflet/reference.html +++ b/loleaflet/reference.html @@ -1598,6 +1598,11 @@ var map = L.map('map', { <td><code>undefined</code></td> <td>Download the document as "format" with the name "name" by applying the filter options.</td> </tr> + <tr> + <td><code><b>print</b>()</code></td> + <td><code>undefined</code></td> + <td>Opens the browser's print dialog or promts the user to download a pdf version of the document.</td> + </tr> </table> <h2 id="loleaflet-page">Page oriented</h2> diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js index 8b04431..2b85406 100644 --- a/loleaflet/src/control/Toolbar.js +++ b/loleaflet/src/control/Toolbar.js @@ -46,6 +46,10 @@ L.Map.include({ 'options=' + options); }, + print: function () { + this.downloadAs('print.pdf', 'pdf', null, 'print'); + }, + saveAs: function (url, format, options) { if (format === undefined || format === null) { format = ''; @@ -80,5 +84,9 @@ L.Map.include({ } L.Socket.sendMessage('uno ' + unoState); } + }, + + insertFile: function (file) { + this.fire('insertfile', {file: file}); } }); diff --git a/loleaflet/src/map/handler/Map.Keyboard.js b/loleaflet/src/map/handler/Map.Keyboard.js index 4d51958..1f32539 100644 --- a/loleaflet/src/map/handler/Map.Keyboard.js +++ b/loleaflet/src/map/handler/Map.Keyboard.js @@ -284,7 +284,7 @@ L.Map.Keyboard = L.Handler.extend({ L.Socket.sendMessage('uno .uno:LeftPara'); break; case 80: // p - this._map.downloadAs('print.pdf', 'pdf', null, 'print'); + this._map.print(); break; case 82: // r L.Socket.sendMessage('uno .uno:RightPara'); diff --git a/loleaflet/src/map/handler/Map.Print.js b/loleaflet/src/map/handler/Map.Print.js index 1a92c8b..9adda5b 100644 --- a/loleaflet/src/map/handler/Map.Print.js +++ b/loleaflet/src/map/handler/Map.Print.js @@ -3,7 +3,7 @@ */ L.Map.mergeOptions({ - print: true + printHandler: true }); L.Map.Print = L.Handler.extend({ @@ -59,4 +59,4 @@ L.Map.Print = L.Handler.extend({ } }); -L.Map.addInitHook('addHandler', 'print', L.Map.Print); +L.Map.addInitHook('addHandler', 'printHandler', L.Map.Print); commit 68a159dae7fc1212810869ba8be0979354281259 Author: Mihai Varga <mihai.va...@collabora.com> Date: Wed Oct 21 11:22:55 2015 +0300 loleaflet: stick the parts preview to the left diff --git a/loleaflet/dist/leaflet.css b/loleaflet/dist/leaflet.css index 77c0381..96a9a38 100644 --- a/loleaflet/dist/leaflet.css +++ b/loleaflet/dist/leaflet.css @@ -703,6 +703,7 @@ a.leaflet-control-buttons:hover:first-child { background: #DFDFDF; position: absolute; top: 70px; + left: 0px; bottom: 0px; max-width: 195px; overflow: hidden; diff --git a/loleaflet/src/control/Control.PartsPreview.js b/loleaflet/src/control/Control.PartsPreview.js index 5439b49..2a6c5ad 100644 --- a/loleaflet/src/control/Control.PartsPreview.js +++ b/loleaflet/src/control/Control.PartsPreview.js @@ -29,7 +29,7 @@ L.Control.PartsPreview = L.Control.extend({ if (!this._previewInitialized && docType === 'presentation') { // make room for the preview var docContainer = L.DomUtil.get('document-container'); - L.DomUtil.setStyle(docContainer, 'left', '200px'); + L.DomUtil.setStyle(docContainer, 'left', '195px'); setTimeout(L.bind(function () { this._map.invalidateSize(); $('.scroll-container').mCustomScrollbar('update'); commit 5d88bb25917c999f46fc7ec9350fd0e3e44618ca Author: Mihai Varga <mihai.va...@collabora.com> Date: Tue Oct 20 11:54:07 2015 +0300 loleaflet: downloadAs unit test diff --git a/loleaflet/spec/loleaflet.html b/loleaflet/spec/loleaflet.html index a61707e..131d757 100644 --- a/loleaflet/spec/loleaflet.html +++ b/loleaflet/spec/loleaflet.html @@ -31,6 +31,7 @@ <script type="text/javascript" src="loleaflet/control/PermissionSpec.js"></script> <script type="text/javascript" src="loleaflet/control/PartsSpec.js"></script> <script type="text/javascript" src="loleaflet/control/SearchSpec.js"></script> + <script type="text/javascript" src="loleaflet/control/ToolbarSpec.js"></script> <div id="toolbar" style="hidden"> </div> diff --git a/loleaflet/spec/loleaflet/control/ToolbarSpec.js b/loleaflet/spec/loleaflet/control/ToolbarSpec.js new file mode 100644 index 0000000..f83480e --- /dev/null +++ b/loleaflet/spec/loleaflet/control/ToolbarSpec.js @@ -0,0 +1,61 @@ +describe('Toolbar', function () { + this.timeout(10000); + var map; + var url; + + before(function () { + var htmlPath = window.location.pathname; + var dir = htmlPath.substring(0, htmlPath.lastIndexOf('/')); + var fileURL = 'file://' + dir + '/data/eval.odt'; + // initialize the map and load the document + map = L.map('map', { + server: 'ws://localhost:9980', + doc: fileURL, + edit: false, + readOnly: false, + print: false + }); + }); + + afterEach(function () { + map.off('statusindicator'); + }); + + after(function () { + map.remove(); + }); + + describe('Load the document', function () { + it('Loleaflet initialized', function (done) { + map.on('statusindicator', function (e) { + if (e.statusType === 'loleafletloaded') { + done(); + } + }); + }); + }); + + describe('Download as', function () { + it('Request pdf export url', function (done) { + map.once('print', function (e) { + console.log(e.url); + url = e.url; + console.log(url); + done(); + }); + map.downloadAs('test.pdf', 'pdf', null, 'print'); + }); + + it('Download the pdf export', function (done) { + var xmlHttp = new XMLHttpRequest(); + xmlHttp.onreadystatechange = function () { + if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { + done(); + } + }; + xmlHttp.open('GET', url, true); + xmlHttp.responseType = 'blob'; + xmlHttp.send(); + }); + }); +}); commit a7e24234d3c3aada811fdc4a357123bcf6675bb9 Author: Mihai Varga <mihai.va...@collabora.com> Date: Tue Oct 20 11:53:38 2015 +0300 loleaflet: remove event listeners after each test diff --git a/loleaflet/spec/loleaflet/control/PartsSpec.js b/loleaflet/spec/loleaflet/control/PartsSpec.js index e368827..c7438e5 100644 --- a/loleaflet/spec/loleaflet/control/PartsSpec.js +++ b/loleaflet/spec/loleaflet/control/PartsSpec.js @@ -15,6 +15,10 @@ describe('Parts and Pages', function () { }); }); + afterEach(function () { + map.off('statusindicator'); + }); + after(function () { map.remove(); }); @@ -23,7 +27,6 @@ describe('Parts and Pages', function () { it('All tiles loaded', function (done) { map.on('statusindicator', function (e) { if (e.statusType === 'alltilesloaded') { - map.off('statusindicator'); done(); } }); diff --git a/loleaflet/spec/loleaflet/control/PermissionSpec.js b/loleaflet/spec/loleaflet/control/PermissionSpec.js index 9c5dca1..3d8b456 100644 --- a/loleaflet/spec/loleaflet/control/PermissionSpec.js +++ b/loleaflet/spec/loleaflet/control/PermissionSpec.js @@ -20,6 +20,10 @@ describe('Permissions', function () { }); }); + afterEach(function () { + map.off('statusindicator'); + }); + after(function () { map.remove(); }); @@ -28,7 +32,6 @@ describe('Permissions', function () { it('Initialize the tile layer', function (done) { map.on('statusindicator', function (e) { if (e.statusType === 'loleafletloaded') { - map.off('statusindicator'); done(); } }); diff --git a/loleaflet/spec/loleaflet/control/SearchSpec.js b/loleaflet/spec/loleaflet/control/SearchSpec.js index 3c24354..7db5ae5 100644 --- a/loleaflet/spec/loleaflet/control/SearchSpec.js +++ b/loleaflet/spec/loleaflet/control/SearchSpec.js @@ -15,6 +15,10 @@ describe('Search', function () { }); }); + afterEach(function () { + map.off('statusindicator'); + }); + after(function () { map.remove(); }); @@ -23,7 +27,6 @@ describe('Search', function () { it('All tiles loaded', function (done) { map.on('statusindicator', function (e) { if (e.statusType === 'alltilesloaded') { - map.off('statusindicator'); done(); } }); commit 6c9690cb8886e90af25bf72c321e2a77ba775003 Author: Mihai Varga <mihai.va...@collabora.com> Date: Tue Oct 20 11:48:42 2015 +0300 loleaflet: better handle map.remove() diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js index 947adf5..a1c3e72 100644 --- a/loleaflet/src/core/Socket.js +++ b/loleaflet/src/core/Socket.js @@ -22,6 +22,7 @@ L.Socket = { close: function () { this.socket.onerror = function () {}; this.socket.onclose = function () {}; + this.socket.onmessage = function () {}; this.socket.close(); }, diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js index b11a51a..df981f5 100644 --- a/loleaflet/src/layer/tile/GridLayer.js +++ b/loleaflet/src/layer/tile/GridLayer.js @@ -44,7 +44,12 @@ L.GridLayer = L.Layer.extend({ this._container = null; this._tileZoom = null; clearTimeout(this._preFetchIdle); + clearTimeout(this._previewInvalidator); clearInterval(this._tilesPreFetcher); + + if (this._selections) { + this._map.removeLayer(this._selections); + } if (this._cursorMarker) { this._cursorMarker.remove(); } diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index df230b9..a0ced6d 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -246,9 +246,6 @@ L.Map = L.Evented.extend({ } if (this._docLayer) { - if (this._docLayer._selections) { - this.removeLayer(this._docLayer._selections); - } this.removeLayer(this._docLayer); } this.removeControls(); commit e43f9df786cd97004967e2674593775d4cc136f8 Author: Mihai Varga <mihai.va...@collabora.com> Date: Tue Oct 20 11:09:08 2015 +0300 loleaflet: add id paramater to downloadAs method Conflicts: loleaflet/src/map/handler/Map.SlideShow.js diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js index c319926..8b04431 100644 --- a/loleaflet/src/control/Toolbar.js +++ b/loleaflet/src/control/Toolbar.js @@ -31,16 +31,17 @@ L.Map.include({ return this._docLayer._toolbarCommandValues[command]; }, - downloadAs: function (name, format, options) { + downloadAs: function (name, format, options, id) { if (format === undefined || format === null) { format = ''; } if (options === undefined || options === null) { options = ''; } + id = id || -1; // not a special download L.Socket.sendMessage('downloadas ' + 'name=' + name + ' ' + - 'id=-1 ' + // not a special download + 'id=' + id + ' ' + 'format=' + format + ' ' + 'options=' + options); }, diff --git a/loleaflet/src/map/handler/Map.Keyboard.js b/loleaflet/src/map/handler/Map.Keyboard.js index c674240..4d51958 100644 --- a/loleaflet/src/map/handler/Map.Keyboard.js +++ b/loleaflet/src/map/handler/Map.Keyboard.js @@ -284,7 +284,7 @@ L.Map.Keyboard = L.Handler.extend({ L.Socket.sendMessage('uno .uno:LeftPara'); break; case 80: // p - L.Socket.sendMessage('downloadas name=print.pdf id=print format=pdf options='); + this._map.downloadAs('print.pdf', 'pdf', null, 'print'); break; case 82: // r L.Socket.sendMessage('uno .uno:RightPara'); commit a4637d4fe3aa4703030026e95d647d4fb9493190 Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 17:46:49 2015 +0300 loleaflet: if window's protocol is file: add http: to download url diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index 527ae71..6f822bb 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -274,8 +274,9 @@ L.TileLayer = L.GridLayer.extend({ _onDownloadAsMsg: function (textMsg) { var command = L.Socket.parseServerCmd(textMsg); var parser = document.createElement('a'); + var protocol = window.location.protocol === 'file:' ? 'http:' : window.location.protocol; parser.href = this._map.options.server; - var url = window.location.protocol + '//' + parser.hostname + ':' + command.port + '/' + + var url = protocol + '//' + parser.hostname + ':' + command.port + '/' + command.jail + '/' + command.dir + '/' + command.name; if (command.id !== '-1') { commit e15c31de33b9a8011e69f43c7d6e039e1379a70d Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 17:42:12 2015 +0300 loleaflet: removed unused variable from unit test diff --git a/loleaflet/spec/loleaflet/control/SearchSpec.js b/loleaflet/spec/loleaflet/control/SearchSpec.js index da6f5c2..3c24354 100644 --- a/loleaflet/spec/loleaflet/control/SearchSpec.js +++ b/loleaflet/spec/loleaflet/control/SearchSpec.js @@ -1,7 +1,6 @@ describe('Search', function () { this.timeout(10000); var map; - var mapSize; before(function () { var htmlPath = window.location.pathname; @@ -25,7 +24,6 @@ describe('Search', function () { map.on('statusindicator', function (e) { if (e.statusType === 'alltilesloaded') { map.off('statusindicator'); - mapSize = map.getSize(); done(); } }); commit 935f936ce5505b45cd15582a27047ea9b9e2dcf2 Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 17:38:02 2015 +0300 loleaflet: removed the old unit test diff --git a/loleaflet/spec/loleaflet/loleafletSpec.js b/loleaflet/spec/loleaflet/loleafletSpec.js deleted file mode 100644 index 4ddba4b..0000000 --- a/loleaflet/spec/loleaflet/loleafletSpec.js +++ /dev/null @@ -1,112 +0,0 @@ -describe('LOLeaflet test', function () { - this.timeout(10000); - var map; - var timeOut - - var log = function (msg) { - // write custom log messages - var cont = document.getElementById('mocha-report'); - var li = document.createElement('li'); - li.style.class = 'test pass'; - li.innerHTML = '<h2>' + msg + '</h2>'; - cont.appendChild(li); - } - - before(function () { - var htmlPath = window.location.pathname; - var dir = htmlPath.substring(0, htmlPath.lastIndexOf('/')); - var fileURL = 'file://' + dir + '/data/eval.odt'; - // initialize the map and load the document - map = L.map('map', { - server: 'ws://localhost:9980', - doc: fileURL, - edit: false, - readOnly: false - }); - - map.on('scrollto', function (e) { - map.scrollTop(e.y); - map.scrollLeft(e.x); - }); - }); - - afterEach(function () { - map.off('statusindicator'); - }); - - after(function () { - map.remove(); - }); - - describe('', function () { - it('Load all new tiles', function (done) { - map.on('statusindicator', function (e) { - if (e.statusType === 'alltilesloaded') { - done(); - } - }); - }); - - it('Make a word Bold', function (done) { - map.once('commandstatechanged', function (e) { - expect(e.commandName).to.be('.uno:Bold'); - expect(e.state).to.be('false'); - done(); - }); - map.toggleCommandState('Bold') - }); - - it('Search backwards', function (done) { - map.once('scrollto', function (e) { - expect(e.x).to.be(0); - expect(e.y).to.be(174); - //expect(e.y).to.be(2321); - done(); - }); - map.search('document', true); - }); - - it('Search not found', function (done) { - map.once('search', function (e) { - expect(e.originalPhrase).to.be('something-not-found'); - expect(e.count).to.be(0); - done(); - }); - map.search('something-not-found'); - }); - - it('Scroll to the top', function (done) { - map.once('updatescrolloffset', function (e) { - expect(e.x).to.be(0); - expect(e.y).to.be(0); - done(); - }); - map.scrollTop(0, {update: true}); - }); - - it('Scroll to the middle', function (done) { - var size = map.getDocSize(); - var x = Math.round(size.x / 2); - var y = Math.round(size.y / 2); - map.once('updatescrolloffset', function (e) { - expect(e.x).to.be(0); - expect(e.y).to.be(y); - done(); - }); - map.scroll(x, y, {update: true}); - }); - - it('Check if pre-fetching works', function (done) { - // clear the tiles - map._docLayer._tiles = {}; - map._docLayer._resetPreFetching(true); - - this.timeout(7000); - // tiles are pre-fetched after 6seconds - setTimeout(function () { - expect(Object.keys(map._docLayer._tiles).length).to.be.above(5); - done(); - }, 6000); - }); - }); -}); commit 42da9c15db0c795b21d05719dd033e6919c95f42 Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 17:37:44 2015 +0300 loleaflet: search unit tests diff --git a/loleaflet/spec/loleaflet.html b/loleaflet/spec/loleaflet.html index 84df9cd..a61707e 100644 --- a/loleaflet/spec/loleaflet.html +++ b/loleaflet/spec/loleaflet.html @@ -30,6 +30,7 @@ <!-- spec files --> <script type="text/javascript" src="loleaflet/control/PermissionSpec.js"></script> <script type="text/javascript" src="loleaflet/control/PartsSpec.js"></script> + <script type="text/javascript" src="loleaflet/control/SearchSpec.js"></script> <div id="toolbar" style="hidden"> </div> diff --git a/loleaflet/spec/loleaflet/control/SearchSpec.js b/loleaflet/spec/loleaflet/control/SearchSpec.js new file mode 100644 index 0000000..da6f5c2 --- /dev/null +++ b/loleaflet/spec/loleaflet/control/SearchSpec.js @@ -0,0 +1,102 @@ +describe('Search', function () { + this.timeout(10000); + var map; + var mapSize; + + before(function () { + var htmlPath = window.location.pathname; + var dir = htmlPath.substring(0, htmlPath.lastIndexOf('/')); + var fileURL = 'file://' + dir + '/data/eval.odt'; + // initialize the map and load the document + map = L.map('map', { + server: 'ws://localhost:9980', + doc: fileURL, + edit: false, + readOnly: false + }); + }); + + after(function () { + map.remove(); + }); + + describe('Load the document', function () { + it('All tiles loaded', function (done) { + map.on('statusindicator', function (e) { + if (e.statusType === 'alltilesloaded') { + map.off('statusindicator'); + mapSize = map.getSize(); + done(); + } + }); + }); + }); + + describe('Search', function () { + it('Search forward', function (done) { + map.once('search', function (e) { + expect(e.originalPhrase).to.be('doc'); + expect(e.count).to.be(1); + expect(e.results[0].part).to.be(0); + // the first page contains the search result + expect(map.getPageSizes().pixels[0].contains(e.results[0].rectangles[0])).to.be.ok(); + done(); + }); + map.search('doc'); + }); + + it('Search backward', function (done) { + map.once('search', function (e) { + expect(e.originalPhrase).to.be('doc'); + expect(e.count).to.be(1); + expect(e.results[0].part).to.be(0); + // the second page contains the search result + expect(map.getPageSizes().pixels[1].contains(e.results[0].rectangles[0])).to.be.ok(); + done(); + }); + map.search('doc', true); + }); + + it('Search not found', function (done) { + map.once('search', function (e) { + expect(e.originalPhrase).to.be('something-not-found'); + expect(e.count).to.be(0); + expect(e.results).to.be(undefined); + done(); + }); + map.search('something-not-found', true); + }); + }); + + describe('Search all', function () { + it('Search forward', function (done) { + map.once('search', function (e) { + expect(e.originalPhrase).to.be('doc'); + expect(e.count).to.be(5); + expect(e.results.length).to.be(5); + done(); + }); + map.searchAll('doc'); + }); + + it('Search backward', function (done) { + map.once('search', function (e) { + expect(e.originalPhrase).to.be('doc'); + expect(e.count).to.be(5); + expect(e.results.length).to.be(5); + done(); + }); + map.searchAll('doc', true); + }); + + it('Search not found', function (done) { + map.once('search', function (e) { + expect(e.originalPhrase).to.be('something-not-found'); + expect(e.count).to.be(0); + expect(e.results).to.be(undefined); + done(); + }); + map.searchAll('something-not-found', true); + }); + }); +}); commit a141760ab6b94560a74a7e78f80d22774be46574 Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 17:35:39 2015 +0300 loleaflet: parse the integer in the search result message diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index 5f047b8..527ae71 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -373,7 +373,7 @@ L.TileLayer = L.GridLayer.extend({ var results = []; for (var i = 0; i < obj.searchResultSelection.length; i++) { results.push({ - part: obj.searchResultSelection[i].part, + part: parseInt(obj.searchResultSelection[i].part), rectangles: this._twipsRectanglesToPixelBounds(obj.searchResultSelection[i].rectangles) }); } commit 4216ed83db93677c8fb62db81fee2d1f5d559766 Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 16:36:59 2015 +0300 loleaflet: parts and pages unit tests diff --git a/loleaflet/spec/loleaflet.html b/loleaflet/spec/loleaflet.html index 135ef75..84df9cd 100644 --- a/loleaflet/spec/loleaflet.html +++ b/loleaflet/spec/loleaflet.html @@ -29,7 +29,7 @@ <!-- spec files --> <script type="text/javascript" src="loleaflet/control/PermissionSpec.js"></script> - <script type="text/javascript" src="loleaflet/loleafletSpec.js"></script> + <script type="text/javascript" src="loleaflet/control/PartsSpec.js"></script> <div id="toolbar" style="hidden"> </div> diff --git a/loleaflet/spec/loleaflet/control/PartsSpec.js b/loleaflet/spec/loleaflet/control/PartsSpec.js new file mode 100644 index 0000000..e368827 --- /dev/null +++ b/loleaflet/spec/loleaflet/control/PartsSpec.js @@ -0,0 +1,160 @@ +describe('Parts and Pages', function () { + this.timeout(10000); + var map; + + before(function () { + var htmlPath = window.location.pathname; + var dir = htmlPath.substring(0, htmlPath.lastIndexOf('/')); + var fileURL = 'file://' + dir + '/data/eval.odt'; + // initialize the map and load the document + map = L.map('map', { + server: 'ws://localhost:9980', + doc: fileURL, + edit: false, + readOnly: false + }); + }); + + after(function () { + map.remove(); + }); + + describe('Load the document', function () { + it('All tiles loaded', function (done) { + map.on('statusindicator', function (e) { + if (e.statusType === 'alltilesloaded') { + map.off('statusindicator'); + done(); + } + }); + }); + }); + + describe('Document preview', function () { + it('Page preview', function (done) { + map.once('tilepreview', function (e) { + expect(e.id).to.be('1'); + expect(e.width).to.be.within(0, 100); + expect(e.height).to.be.within(0, 200); + expect(e.part).to.be(0); + expect(e.docType).to.be('text'); + done(); + }); + map.getPreview(1, 0, 100, 200, {autoUpdate: true}); + }); + + it('Page custom preview', function (done) { + map.once('tilepreview', function (e) { + expect(e.id).to.be('2'); + expect(e.width).to.be(100); + expect(e.height).to.be(200); + expect(e.part).to.be(0); + expect(e.docType).to.be('text'); + done(); + }); + map.getCustomPreview(2, 0, 100, 200, 0, 0, 3000, 6000, {autoUpdate: true}); + }); + + + it('Automatic preview invalidation', function (done) { + var count = 0; + map.on('tilepreview', function (e) { + if (e.id === '1' || e.id === '2') { + count += 1; + } + if (count === 2) { + // as we have 2 previews + map.off('tilepreview'); + done(); + } + }); + L.Socket.sendMessage('uno .uno:LeftPara'); + }); + + it('Remove the first preview', function (done) { + map.once('tilepreview', function (e) { + expect(e.id).to.be('2'); + map.removePreviewUpdate(2); + done(); + }); + map.removePreviewUpdate(1); + L.Socket.sendMessage('uno .uno:CenterPara'); + }); + }); + + describe('Page navigation', function () { + it('Get current page number', function () { + expect(map.getCurrentPageNumber()).to.be(0); + }); + + it('Go to the second page', function (done) { + map.once('updatescrolloffset', function (e) { + expect(e.y).to.be.above(1000); + done(); + }); + map.goToPage(1); + }); + + it('Go to the first page by following the cursor', function (done) { + map.once('scrollto', function (e) { + expect(e.y).to.be(0); + done(); + }); + map.once('updatepermission', function (e) { + if (e.perm === 'edit') { + map.goToPage(0); + } + }); + map.setPermission('edit'); + }); + + + it('Scroll to the first page', function (done) { + map.once('pagenumberchanged', function (e) { + expect(e.currentPage).to.be(0); + expect(e.pages).to.be(2); + expect(e.docType).to.be('text'); + done(); + }); + map.scrollTop(0); + }); + }); + + describe('Doc stats', function () { + it('Get number of pages', function () { + expect(map.getNumberOfPages()).to.be(2); + }); + + it('Get number of parts', function () { + expect(map.getNumberOfParts()).to.be(1); + }); + + it('Get current page number', function () { + expect(map.getCurrentPageNumber()).to.be(0); + }); + + it('Get current part number', function () { + expect(map.getCurrentPartNumber()).to.be(0); + }); + + it('Get document size', function () { + expect(Math.floor(map.getDocSize().x)).to.be(1064); + expect(Math.floor(map.getDocSize().y)).to.be(2946); + }); + + it('Get page sizes', function () { + var pageSizes = map.getPageSizes(); + expect(pageSizes).to.only.have.keys(['twips', 'pixels']); + expect(pageSizes.twips.length).to.be(map.getNumberOfPages()); + expect(pageSizes.pixels.length).to.be(map.getNumberOfPages()); + expect(pageSizes.twips[0].min.equals(new L.Point(284, 284))).to.be.ok(); + expect(pageSizes.twips[0].max.equals(new L.Point(12190, 17122))).to.be.ok(); + expect(pageSizes.twips[1].min.equals(new L.Point(284, 17406))).to.be.ok(); + expect(pageSizes.twips[1].max.equals(new L.Point(12190, 34244))).to.be.ok(); + }); + + it('Get document type', function () { + expect(map.getDocType()).to.be('text'); + }); + }); +}); diff --git a/loleaflet/spec/loleaflet/loleafletSpec.js b/loleaflet/spec/loleaflet/loleafletSpec.js index 9b61c43..4ddba4b 100644 --- a/loleaflet/spec/loleaflet/loleafletSpec.js +++ b/loleaflet/spec/loleaflet/loleafletSpec.js @@ -56,32 +56,6 @@ describe('LOLeaflet test', function () { map.toggleCommandState('Bold') }); - it('Get document size', function () { - var size = map.getDocSize(); - expect(Math.round(size.x)).to.be(1064); - expect(Math.round(size.y)).to.be(2946); - }); - - it('Get document type', function () { - expect(map.getDocType()).to.be('text'); - }); - - it('Check pages', function () { - expect(map.getNumberOfPages()).to.be(2); - expect(map.getNumberOfParts()).to.be(1); - expect(map.getCurrentPageNumber()).to.be(0); - }); - - it('Go to the next page', function (done) { - map.once('pagenumberchanged', function (e) { - expect(e.currentPage).to.be(1); - expect(e.pages).to.be(2); - expect(e.docType).to.be('text'); - done(); - }); - map.goToPage(1); - }); - it('Search backwards', function (done) { map.once('scrollto', function (e) { expect(e.x).to.be(0); @@ -101,7 +75,6 @@ describe('LOLeaflet test', function () { map.search('something-not-found'); }); - it('Scroll to the top', function (done) { map.once('updatescrolloffset', function (e) { expect(e.x).to.be(0); commit d1cec4abebab77001819d446648b5438043b3c2a Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 15:06:51 2015 +0300 loleaflet: initialize the part/page rectangles arrays diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index 9c722fb..5f047b8 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -87,6 +87,8 @@ L.TileLayer = L.GridLayer.extend({ this._msgQueue = []; this._toolbarCommandValues = {}; this._previewInvalidations = []; + this._partPageRectanglesTwips = []; + this._partPageRectanglesPixels = []; }, onAdd: function (map) { commit d7025db15501082810163494fe23d3882ca7450f Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Oct 19 14:23:12 2015 +0300 loleaflet: permissions unit tests diff --git a/loleaflet/spec/loleaflet.html b/loleaflet/spec/loleaflet.html index eb399b3..135ef75 100644 --- a/loleaflet/spec/loleaflet.html +++ b/loleaflet/spec/loleaflet.html @@ -28,6 +28,7 @@ </script> <!-- spec files --> + <script type="text/javascript" src="loleaflet/control/PermissionSpec.js"></script> <script type="text/javascript" src="loleaflet/loleafletSpec.js"></script> <div id="toolbar" style="hidden"> diff --git a/loleaflet/spec/loleaflet/control/PermissionSpec.js b/loleaflet/spec/loleaflet/control/PermissionSpec.js new file mode 100644 index 0000000..9c5dca1 --- /dev/null +++ b/loleaflet/spec/loleaflet/control/PermissionSpec.js @@ -0,0 +1,126 @@ +describe('Permissions', function () { + this.timeout(10000); + var map; + + before(function () { + var htmlPath = window.location.pathname; + var dir = htmlPath.substring(0, htmlPath.lastIndexOf('/')); + var fileURL = 'file://' + dir + '/data/eval.odt'; + // initialize the map and load the document + map = L.map('map', { + server: 'ws://localhost:9980', + doc: fileURL, + edit: false, + readOnly: false + }); + + map.on('scrollto', function (e) { + map.scrollTop(e.y); + map.scrollLeft(e.x); + }); + }); + + after(function () { + map.remove(); + }); + + describe('Load the document', function () { + it('Initialize the tile layer', function (done) { + map.on('statusindicator', function (e) { + if (e.statusType === 'loleafletloaded') { + map.off('statusindicator'); + done(); + } + }); + }); + }); + + describe('ReadOnly', function () { + it('Set permission to "readonly"', function (done) { + map.once('updatepermission', function (e) { + expect(e.perm).to.be('readonly'); + done(); + }); + map.setPermission('readonly'); + }); + + it('Dragging is enabled', function () { + expect(map.dragging.enabled()).to.be(true); + }); + + it('Selection is disabled', function () { + expect(map.isSelectionEnabled()).to.be(false); + }); + + it('Current permission is "readonly"', function () { + expect(map.getPermission()).to.be('readonly'); + }); + }); + + describe('View', function () { + it('Set permission to "view"', function (done) { + map.once('updatepermission', function (e) { + expect(e.perm).to.be('view'); + done(); + }); + map.setPermission('view'); + }); + + it('Dragging is enabled', function () { + expect(map.dragging.enabled()).to.be(true); + }); + + it('Selection is disabled', function () { + expect(map.isSelectionEnabled()).to.be(false); + }); + + it('Current permission is "view"', function () { + expect(map.getPermission()).to.be('view'); + }); + + it('Click to switch to "edit"', function (done) { + map.once('updatepermission', function (e) { + expect(e.perm).to.be('edit'); + done(); + }); + + // simulate a click + var latlng = map.unproject(new L.Point(1, 1)); + var events = ['mousedown', 'mouseup']; + for (var i = 0; i < events.length; i++) { + map.fire(events[i], { + latlng: latlng, + layerPoint: map.latLngToLayerPoint(latlng), + containerPoint: map.latLngToContainerPoint(latlng), + originalEvent: {button:0} + }); + } + }); + + it('Current permission is "edit"', function () { + expect(map.getPermission()).to.be('edit'); + }); + }); + + describe('Edit', function () { + it('Sets permission to "edit"', function (done) { + map.once('updatepermission', function (e) { + expect(e.perm).to.be('edit'); + done(); + }); + map.setPermission('edit'); + }); + + it('Dragging is disabled', function () { + expect(map.dragging.enabled()).to.be(false); + }); + + it('Selection is enabled', function () { + expect(map.isSelectionEnabled()).to.be(true); + }); + + it('Current permission is "edit"', function () { + expect(map.getPermission()).to.be('edit'); + }); + }); +}); diff --git a/loleaflet/spec/loleaflet/loleafletSpec.js b/loleaflet/spec/loleaflet/loleafletSpec.js index 4efa1b9..9b61c43 100644 --- a/loleaflet/spec/loleaflet/loleafletSpec.js +++ b/loleaflet/spec/loleaflet/loleafletSpec.js @@ -47,36 +47,6 @@ describe('LOLeaflet test', function () { }); }); - it('Set permission to "readonly"', function (done) { - map.once('updatepermission', function (e) { - expect(e.perm).to.be('readonly'); - done(); - }); - map.setPermission('readonly'); - }); - - it('Set permission to "edit"', function (done) { - map.once('updatepermission', function (e) { - expect(e.perm).to.be('edit'); - done(); - }); - map.setPermission('edit'); - }); - - it('Set permission to "view"', function (done) { - map.once('updatepermission', function (e) { - expect(e.perm).to.be('view'); - done(); - }); - map.setPermission('view'); - }); - - it('Place the coursor by clicking', function () { - map._docLayer._postMouseEvent('buttondown', 2500, 3515, 1); - map._docLayer._postMouseEvent('buttonup', 2500, 3515, 1); - map.setPermission('edit'); - }); - it('Make a word Bold', function (done) { map.once('commandstatechanged', function (e) { expect(e.commandName).to.be('.uno:Bold'); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits