cypress_test/integration_tests/desktop/example_desktop_test_spec.js  |   24 +-
 cypress_test/integration_tests/desktop/example_desktop_test_spec2.js |   24 +-
 cypress_test/integration_tests/mobile/focus_spec.js                  |  117 
++++++++++
 cypress_test/integration_tests/mobile/toolbar_spec.js                |   98 
++++----
 loleaflet/.eslintrc                                                  |    3 
 loleaflet/js/global.js                                               |   18 -
 loleaflet/src/control/Control.ContextMenu.js                         |    2 
 loleaflet/src/control/Control.DownloadProgress.js                    |    2 
 loleaflet/src/control/Control.Header.js                              |    4 
 loleaflet/src/control/Control.Infobar.js                             |    2 
 loleaflet/src/control/Control.JSDialogBuilder.js                     |   16 -
 loleaflet/src/control/Control.LokDialog.js                           |    2 
 loleaflet/src/control/Control.Menubar.js                             |   10 
 loleaflet/src/control/Control.MobileWizard.js                        |    6 
 loleaflet/src/control/Control.PartsPreview.js                        |    2 
 loleaflet/src/control/Control.RowHeader.js                           |    2 
 loleaflet/src/control/Control.Tabs.js                                |    2 
 loleaflet/src/control/Control.Toolbar.js                             |   12 -
 loleaflet/src/control/Signing.js                                     |    4 
 loleaflet/src/control/Toolbar.js                                     |    2 
 loleaflet/src/dom/Draggable.js                                       |    4 
 loleaflet/src/layer/CalcGridLines.js                                 |    2 
 loleaflet/src/layer/marker/TextInput.js                              |    2 
 loleaflet/src/layer/tile/GridLayer.js                                |    4 
 loleaflet/src/layer/tile/TileLayer.TableOverlay.js                   |    2 
 loleaflet/src/layer/tile/TileLayer.js                                |    4 
 loleaflet/src/layer/vector/Path.Drag.js                              |    2 
 loleaflet/src/map/Clipboard.js                                       |   10 
 28 files changed, 250 insertions(+), 132 deletions(-)

New commits:
commit 9a3db385c75a690e0c564fba05bc2e3176c62540
Author:     Tamás Zolnai <[email protected]>
AuthorDate: Thu Jan 16 15:44:23 2020 +0100
Commit:     Tamás Zolnai <[email protected]>
CommitDate: Thu Jan 16 15:46:38 2020 +0100

    eslint: Enable "semi" rule as an error.
    
    This checks whether all statements end with a semicolon.
    We already use this rule in the code, so I enable to check
    this rule by eslint to keep the code consistent.
    
    Change-Id: I5ea46376d2b6fb488224d4d69e4d117139763a8c

diff --git 
a/cypress_test/integration_tests/desktop/example_desktop_test_spec.js 
b/cypress_test/integration_tests/desktop/example_desktop_test_spec.js
index 8a39b455f..e6762e746 100644
--- a/cypress_test/integration_tests/desktop/example_desktop_test_spec.js
+++ b/cypress_test/integration_tests/desktop/example_desktop_test_spec.js
@@ -11,29 +11,29 @@ describe('Example test suit 1', function() {
 
                // Open test document
                
cy.visit('http://localhost:9980/loleaflet/fc04ba550/loleaflet.html?file_path=file://'
 +
-               Cypress.env('WORKDIR') + 'simple.odt')
+                       Cypress.env('WORKDIR') + 'simple.odt');
 
                // Wait for the document to fully load
-               cy.get('.leaflet-tile-loaded')
+               cy.get('.leaflet-tile-loaded');
 
                // Select a text
-               cy.get('#document-container').dblclick()
-               cy.get('.leaflet-marker-icon')
+               cy.get('#document-container').dblclick();
+               cy.get('.leaflet-marker-icon');
 
                // Click on bold toolbar button
-               cy.get('#tb_editbar_item_bold').click()
+               cy.get('#tb_editbar_item_bold').click();
 
                // Remove selection and do a reselection
-               cy.get('#document-container').click()
+               cy.get('#document-container').click();
                cy.get('.leaflet-marker-icon').should('not.be.visible');
 
-               cy.get('#document-container').dblclick()
-               cy.get('.leaflet-marker-icon')
+               cy.get('#document-container').dblclick();
+               cy.get('.leaflet-marker-icon');
 
                // Bold toolbar button is checked
-               cy.get('#tb_editbar_item_bold table.w2ui-button.checked')
+               cy.get('#tb_editbar_item_bold table.w2ui-button.checked');
 
                // Click on bold toolbar button
-               cy.get('#tb_editbar_item_bold').click()
-       })
-})
+               cy.get('#tb_editbar_item_bold').click();
+       });
+});
diff --git 
a/cypress_test/integration_tests/desktop/example_desktop_test_spec2.js 
b/cypress_test/integration_tests/desktop/example_desktop_test_spec2.js
index 163a28c84..8eb72e561 100644
--- a/cypress_test/integration_tests/desktop/example_desktop_test_spec2.js
+++ b/cypress_test/integration_tests/desktop/example_desktop_test_spec2.js
@@ -11,29 +11,29 @@ describe('Example test suit 2', function() {
 
                // Open test document
                
cy.visit('http://localhost:9980/loleaflet/fc04ba550/loleaflet.html?file_path=file://'
 +
-                       Cypress.env('WORKDIR') + 'simple.odt')
+                       Cypress.env('WORKDIR') + 'simple.odt');
 
                // Wait for the document to fully load
-               cy.get('.leaflet-tile-loaded')
+               cy.get('.leaflet-tile-loaded');
 
                // Select a text
-               cy.get('#document-container').dblclick()
-               cy.get('.leaflet-marker-icon')
+               cy.get('#document-container').dblclick();
+               cy.get('.leaflet-marker-icon');
 
                // Click on bold toolbar button
-               cy.get('#tb_editbar_item_italic').click()
+               cy.get('#tb_editbar_item_italic').click();
 
                // Remove selection and do a reselection
-               cy.get('#document-container').click()
+               cy.get('#document-container').click();
                cy.get('.leaflet-marker-icon').should('not.be.visible');
 
-               cy.get('#document-container').dblclick()
-               cy.get('.leaflet-marker-icon')
+               cy.get('#document-container').dblclick();
+               cy.get('.leaflet-marker-icon');
 
                // Bold toolbar button is checked
-               cy.get('#tb_editbar_item_italic table.w2ui-button.checked')
+               cy.get('#tb_editbar_item_italic table.w2ui-button.checked');
 
                // Click on bold toolbar button
-               cy.get('#tb_editbar_item_italic').click()
-       })
-})
+               cy.get('#tb_editbar_item_italic').click();
+       });
+});
diff --git a/cypress_test/integration_tests/mobile/focus_spec.js 
b/cypress_test/integration_tests/mobile/focus_spec.js
index 78bef645f..705bfc447 100644
--- a/cypress_test/integration_tests/mobile/focus_spec.js
+++ b/cypress_test/integration_tests/mobile/focus_spec.js
@@ -16,18 +16,18 @@ describe('Focus tests', function() {
 
                // Wait for the document to fully load
                cy.get('.leaflet-tile-loaded');
-       })
+       });
 
        it('Focus after document fully loaded.', function() {
                // The document body should have the focus
                cy.document().its('activeElement.tagName')
-                       .should('be.eq', 'BODY')
-       })
+                       .should('be.eq', 'BODY');
+       });
 
        it('Focus after closing a dialog.', function() {
                // The document body has the focus first
                cy.document().its('activeElement.tagName')
-                       .should('be.eq', 'BODY')
+                       .should('be.eq', 'BODY');
 
                // Click on edit button
                cy.get('#mobile-edit-button').click();
@@ -41,7 +41,7 @@ describe('Focus tests', function() {
 
                // The dialog grabs the focus
                cy.document().its('activeElement.className')
-                       .should('be.eq', 'loleaflet-annotation-textarea')
+                       .should('be.eq', 'loleaflet-annotation-textarea');
 
                // Close the dialog
                cy.contains('Cancel').click();
@@ -49,13 +49,13 @@ describe('Focus tests', function() {
 
                // The document should have the focus again
                cy.document().its('activeElement.tagName')
-                       .should('be.eq', 'BODY')
-       })
+                       .should('be.eq', 'BODY');
+       });
 
        it('Focus when using insertion mobile wizard.', function() {
                // The document body has the focus first
                cy.document().its('activeElement.tagName')
-                       .should('be.eq', 'BODY')
+                       .should('be.eq', 'BODY');
 
                // Click on edit button
                cy.get('#mobile-edit-button').click();
@@ -71,22 +71,22 @@ describe('Focus tests', function() {
                // This fails here: the document still has the focus
                // The wizard changes the focus
                //cy.document().its('activeElement.className')
-               //      .should('be.eq', 'clipboard')
+               //      .should('be.eq', 'clipboard');
 
                // Close the mobile wizard
-               cy.get('#tb_actionbar_item_insertion_mobile_wizard').click()
+               cy.get('#tb_actionbar_item_insertion_mobile_wizard').click();
                cy.get('#mobile-wizard').should('not.be.visible');
 
                // This fails here: the focus is not on the document body
                // The document should have the focus again
                //cy.document().its('activeElement.tagName')
-               //      .should('be.eq', 'BODY')
-       })
+               //      .should('be.eq', 'BODY');
+       });
 
        it('Focus after insertion.', function() {
                // The document body has the focus first
                cy.document().its('activeElement.tagName')
-                       .should('be.eq', 'BODY')
+                       .should('be.eq', 'BODY');
 
                // Click on edit button
                cy.get('#mobile-edit-button').click();
@@ -97,7 +97,7 @@ describe('Focus tests', function() {
                        .click();
 
                cy.get('#mobile-wizard-content')
-                       .should('not.be.empty')
+                       .should('not.be.empty');
 
                // Select More Fields
                cy.get('.ui-header.level-0.mobile-wizard.ui-widget 
.sub-menu-title')
@@ -112,6 +112,6 @@ describe('Focus tests', function() {
                // This fails here: the focus is not on the document body
                // The document should have the focus again
                //cy.document().its('activeElement.tagName')
-               //      .should('be.eq', 'BODY')
-       })
-})
+               //      .should('be.eq', 'BODY');
+       });
+});
diff --git a/cypress_test/integration_tests/mobile/toolbar_spec.js 
b/cypress_test/integration_tests/mobile/toolbar_spec.js
index 3ef580d3a..29f9a67bf 100644
--- a/cypress_test/integration_tests/mobile/toolbar_spec.js
+++ b/cypress_test/integration_tests/mobile/toolbar_spec.js
@@ -10,110 +10,110 @@ describe('Toolbar tests', function() {
                });
 
                // Open test document
-               cy.viewport('iphone-3')
+               cy.viewport('iphone-3');
                
cy.visit('http://localhost:9980/loleaflet/fc04ba550/loleaflet.html?file_path=file://'
 +
-                       Cypress.env('WORKDIR') + 'empty.odt')
+                       Cypress.env('WORKDIR') + 'empty.odt');
 
                // Wait for the document to fully load
-               cy.get('.leaflet-tile-loaded')
+               cy.get('.leaflet-tile-loaded');
        });
 
        it('State of mobile wizard toolbar item.', function() {
                // Mobile wizard toolbar button is disabled by default
                cy.get('#tb_actionbar_item_mobile_wizard')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Button should be enabled now
                cy.get('#tb_actionbar_item_mobile_wizard')
-                       .should('not.have.class', 'disabled')
-       })
+                       .should('not.have.class', 'disabled');
+       });
 
        it('State of insertion mobile wizard toolbar item.', function() {
                // Insertion mobile wizard toolbar button is disabled by default
                cy.get('#tb_actionbar_item_insertion_mobile_wizard')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Button should be enabled now
                cy.get('#tb_actionbar_item_insertion_mobile_wizard')
-                       .should('not.have.class', 'disabled')
-       })
+                       .should('not.have.class', 'disabled');
+       });
 
        it('State of insert comment toolbar item.', function() {
                // Insertion mobile wizard toolbar button is disabled by default
                cy.get('#tb_actionbar_item_insertcomment')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Button should be enabled now
                cy.get('#tb_actionbar_item_insertcomment')
-                       .should('not.have.class', 'disabled')
-       })
+                       .should('not.have.class', 'disabled');
+       });
 
        it('State of undo toolbar item.', function() {
                // Insertion mobile wizard toolbar button is disabled by default
                cy.get('#tb_actionbar_item_undo')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Button should be still disabled
                cy.get('#tb_actionbar_item_undo')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Type somthing in the document
-               cy.get('#document-container').type('x')
+               cy.get('#document-container').type('x');
 
                // Button should become enabled
                cy.get('#tb_actionbar_item_undo')
-                       .should('not.have.class', 'disabled')
-       })
+                       .should('not.have.class', 'disabled');
+       });
 
        it('State of redo toolbar item.', function() {
                // Insertion mobile wizard toolbar button is disabled by default
                cy.get('#tb_actionbar_item_redo')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Button should be still disabled
                cy.get('#tb_actionbar_item_redo')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Type somthing in the document
-               cy.get('#document-container').type('x')
+               cy.get('#document-container').type('x');
 
                // Button should be still disabled
                cy.get('#tb_actionbar_item_redo')
-                       .should('have.class', 'disabled')
+                       .should('have.class', 'disabled');
 
                // Do an undo
                cy.get('#tb_actionbar_item_undo')
-                       .should('not.have.class', 'disabled')
-               cy.get('#tb_actionbar_item_undo').click()
+                       .should('not.have.class', 'disabled');
+               cy.get('#tb_actionbar_item_undo').click();
 
                // Button should become enabled
                cy.get('#tb_actionbar_item_redo')
-                       .should('not.have.class', 'disabled')
-       })
+                       .should('not.have.class', 'disabled');
+       });
 
        it('Open and close mobile wizard by toolbar item.', function() {
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Click on mobile wizard toolbar item
                cy.get('#tb_actionbar_item_mobile_wizard')
                        .should('not.have.class', 'disabled')
-                       .click()
+                       .click();
 
                // Mobile wizard is opened and it has any content
                cy.get('#mobile-wizard-content')
@@ -121,36 +121,36 @@ describe('Toolbar tests', function() {
 
                // Toolbar button is checked
                cy.get('#tb_actionbar_item_mobile_wizard table')
-                       .should('have.class', 'checked')
+                       .should('have.class', 'checked');
 
                cy.get('#tb_actionbar_item_mobile_wizard')
-                       .click()
+                       .click();
 
                // Mobile wizard is closed
                cy.get('#mobile_wizard')
                        .should('not.be.visible');
 
                cy.get('#tb_actionbar_item_mobile_wizard table')
-                       .should('not.have.class', 'checked')
+                       .should('not.have.class', 'checked');
 
                // Open mobile wizard again
                cy.get('#tb_actionbar_item_mobile_wizard')
-                       .click()
+                       .click();
 
                // Mobile wizard is opened and it has any content
                // TODO: fix this bug
                /*cy.get('#mobile-wizard-content')
                        .should('not.be.empty'); */
-       })
+       });
 
        it('Open and close insertion mobile wizard by toolbar item.', 
function() {
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Click on toolbar item
                cy.get('#tb_actionbar_item_insertion_mobile_wizard')
                        .should('not.have.class', 'disabled')
-                       .click()
+                       .click();
 
                // Mobile wizard is opened and it has any content
                cy.get('#mobile-wizard-content')
@@ -158,36 +158,36 @@ describe('Toolbar tests', function() {
 
                // Toolbar button is checked
                cy.get('#tb_actionbar_item_insertion_mobile_wizard table')
-                       .should('have.class', 'checked')
+                       .should('have.class', 'checked');
 
                // Click on toolbar item again
                cy.get('#tb_actionbar_item_insertion_mobile_wizard')
-                       .click()
+                       .click();
 
                // Mobile wizard is closed
                cy.get('#mobile_wizard')
                        .should('not.be.visible');
 
                cy.get('#tb_actionbar_item_insertion_mobile_wizard table')
-                       .should('not.have.class', 'checked')
+                       .should('not.have.class', 'checked');
 
                // Open mobile wizard again
                cy.get('#tb_actionbar_item_insertion_mobile_wizard')
-                       .click()
+                       .click();
 
                // Mobile wizard is opened and it has any content
                cy.get('#mobile-wizard-content')
                        .should('not.be.empty');
-       })
+       });
 
        it('Open insert comment dialog by toolbar item.', function() {
                // Click on edit button
-               cy.get('#mobile-edit-button').click()
+               cy.get('#mobile-edit-button').click();
 
                // Click on toolbar item
                cy.get('#tb_actionbar_item_insertcomment')
                        .should('not.have.class', 'disabled')
-                       .click()
+                       .click();
 
                // Comment insertion dialog is opened
                cy.get('.loleaflet-annotation-table')
@@ -195,9 +195,9 @@ describe('Toolbar tests', function() {
 
                // Close the dialog
                cy.contains('Cancel')
-                       .click()
+                       .click();
 
                cy.get('.loleaflet-annotation-table')
                        .should('be.not.visible');
-       })
-})
+       });
+});
diff --git a/loleaflet/.eslintrc b/loleaflet/.eslintrc
index 48a6d2ad5..a5a054eef 100644
--- a/loleaflet/.eslintrc
+++ b/loleaflet/.eslintrc
@@ -16,7 +16,8 @@
     "strict": 0,
     "key-spacing": 0,
     "no-shadow": 0,
-    "no-console": 0
+    "no-console": 0,
+    "semi": 2
   },
   "globals": {
     "L": true,
diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js
index 8445ecb4f..9e5578163 100644
--- a/loleaflet/js/global.js
+++ b/loleaflet/js/global.js
@@ -26,15 +26,15 @@
                };
                this.onopen = function() {
                };
-       }
+       };
 
        global.FakeWebSocket.prototype.close = function() {
-       }
+       };
 
        global.FakeWebSocket.prototype.send = function(data) {
                this.sendCounter++;
                window.postMobileMessage(data);
-       }
+       };
 
        // If not debug, don't print anything on the console
        // except in tile debug mode (Ctrl-Shift-Alt-d)
@@ -71,7 +71,7 @@
                        }
 
                        return false;
-               }
+               };
        }
 
        // fix jquery-ui
@@ -122,7 +122,7 @@
                        wopiParams = { 'access_header': global.accessHeader };
                }
                docParams = Object.keys(wopiParams).map(function(key) {
-                       return encodeURIComponent(key) + '=' + 
encodeURIComponent(wopiParams[key])
+                       return encodeURIComponent(key) + '=' + 
encodeURIComponent(wopiParams[key]);
                }).join('&');
        } else {
                global.docURL = filePath;
@@ -168,15 +168,15 @@
                                }
                                global.socket.send(msg);
                        }
-               }
+               };
 
                global.socket.onerror = function (event) {
                        console.log(event);
-               }
+               };
 
                global.socket.onclose = function (event) {
                        console.log(event);
-               }
+               };
 
                global.socket.onmessage = function (event) {
                        if (typeof global.socket._onMessage === 'function') {
@@ -184,7 +184,7 @@
                        } else {
                                global.queueMsg.push(event.data);
                        }
-               }
+               };
 
                global.socket.binaryType = 'arraybuffer';
 
diff --git a/loleaflet/src/control/Control.ContextMenu.js 
b/loleaflet/src/control/Control.ContextMenu.js
index 954dab877..a1c364c0c 100644
--- a/loleaflet/src/control/Control.ContextMenu.js
+++ b/loleaflet/src/control/Control.ContextMenu.js
@@ -263,7 +263,7 @@ L.Control.ContextMenu = L.Control.extend({
                if (itemCommand.includes('sep'))
                        return null;
 
-               var itemText = ''
+               var itemText = '';
                if (menu.name)
                        itemText = menu.name;
 
diff --git a/loleaflet/src/control/Control.DownloadProgress.js 
b/loleaflet/src/control/Control.DownloadProgress.js
index 2fce6a714..7ad98d053 100644
--- a/loleaflet/src/control/Control.DownloadProgress.js
+++ b/loleaflet/src/control/Control.DownloadProgress.js
@@ -155,7 +155,7 @@ L.Control.DownloadProgress = L.Control.extend({
                                var reader = new FileReader();
                                reader.onload = function() {
                                        var text = reader.result;
-                                       console.log('async clipboard parse 
done: ' + text.substring(0, 256))
+                                       console.log('async clipboard parse 
done: ' + text.substring(0, 256));
                                        var idx = text.indexOf('<!DOCTYPE 
HTML');
                                        if (idx > 0)
                                                text = text.substring(idx, 
text.length);
diff --git a/loleaflet/src/control/Control.Header.js 
b/loleaflet/src/control/Control.Header.js
index 7f77a1990..76eea58ee 100644
--- a/loleaflet/src/control/Control.Header.js
+++ b/loleaflet/src/control/Control.Header.js
@@ -222,7 +222,7 @@ L.Control.Header = L.Control.extend({
        // Called whenever the cell cursor is in a cell corresponding to the 
cursorPos-th
        // column/row.
        updateCurrent: function (cursorPos, slim) {
-               if (!this._tickMap) {return}
+               if (!this._tickMap) {return;}
 
                if (cursorPos < 0) {
                        this.unselect(this._tickMap.getGap(this._current));
@@ -845,7 +845,7 @@ L.Control.Header.GapTickMap = L.Class.extend({
                        end: end,
                        size: end - start,
                        pos: end,
-               }
+               };
        },
 
        // Returns true when the i-th gap has zero size.
diff --git a/loleaflet/src/control/Control.Infobar.js 
b/loleaflet/src/control/Control.Infobar.js
index ae1443177..b00d0cdb2 100644
--- a/loleaflet/src/control/Control.Infobar.js
+++ b/loleaflet/src/control/Control.Infobar.js
@@ -25,7 +25,7 @@ L.Control.Infobar = L.Control.extend({
                                        var win = window.open(e.action, 
'_blank');
                                        win.focus();
                                }
-                       }
+                       };
                }
 
                vex.dialog.open({
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index eaa414018..dd32aedda 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -123,7 +123,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                                                $(controlElement).click(
                                                        // avoid to access 
mutable variable (that is `i` dependent) in closure
                                                        (function (lhandler, 
leventData) {
-                                                               return 
function() { lhandler(leventData) };
+                                                               return 
function() { lhandler(leventData); };
                                                        })(handler, eventData)
                                                );
                                        }
@@ -246,7 +246,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        var icon = L.DomUtil.create('img', 'menu-entry-icon', 
leftDiv);
                        icon.src = iconPath;
                        icon.alt = '';
-                       titleClass = 'menu-entry-with-icon'
+                       titleClass = 'menu-entry-with-icon';
                }
                var titleSpan = L.DomUtil.create('span', titleClass, leftDiv);
 
@@ -269,7 +269,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        } else {
                                titleSpan.innerHTML = data.text;
                        }
-               }
+               };
 
                updateCallback ? updateCallback(titleSpan) : 
updateFunction(titleSpan);
 
@@ -528,7 +528,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                                $(checkbox).attr('checked', 'checked');
                        else if (state)
                                $(checkbox).removeAttr('checked', 'checked');
-               }
+               };
 
                updateFunction();
 
@@ -942,7 +942,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                                value = data.children[0].text;
 
                        $(spinfield).attr('value', 
builder._cleanValueFromUnits(value));
-               }
+               };
 
                updateFunction();
 
@@ -1187,7 +1187,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                                        $(button).addClass('selected');
                                else
                                        $(button).removeClass('selected');
-                       }
+                       };
 
                        updateFunction();
 
@@ -1444,7 +1444,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                                if (window.insertionMobileWizard)
                                        window.onClick(null, 
'insertion_mobile_wizard');
                                else if (window.mobileMenuWizard)
-                                       $('#main-menu-state').click()
+                                       $('#main-menu-state').click();
                                else if (window.contextMenuWizard) {
                                        window.contextMenuWizard = false;
                                        builder.map.fire('closemobilewizard');
@@ -1460,7 +1460,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                                            data.checked && data.checked === 
true) {
                                                return;
                                        }
-                                       builder.map.sendUnoCommand(data.command)
+                                       
builder.map.sendUnoCommand(data.command);
                                }
                        });
                } else {
diff --git a/loleaflet/src/control/Control.LokDialog.js 
b/loleaflet/src/control/Control.LokDialog.js
index 2abdc0246..3478729c4 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -790,7 +790,7 @@ L.Control.LokDialog = L.Control.extend({
                        startX: offsetX,
                        startY: offsetY,
                        initScale: ratio
-               }
+               };
                var transformation = {
                        translate: { x: offsetX, y: offsetY },
                        scale: ratio,
diff --git a/loleaflet/src/control/Control.Menubar.js 
b/loleaflet/src/control/Control.Menubar.js
index fe28ce9a6..18b14c3ed 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -846,11 +846,11 @@ L.Control.Menubar = L.Control.extend({
                                                return item.name === _(style);
                                        };
 
-                                       var foundMenu = 
this._findSubMenuByName(target, _UNO('.uno:InsertPageHeader', 'text'))
+                                       var foundMenu = 
this._findSubMenuByName(target, _UNO('.uno:InsertPageHeader', 'text'));
                                        if (foundMenu && 
foundMenu.menu.find(findFunction) === undefined)
                                                foundMenu.menu.push({name: 
_(style), tag: style, uno: constHeader + encodeURIComponent(style) + constArg});
 
-                                       foundMenu = 
this._findSubMenuByName(target, _UNO('.uno:InsertPageFooter', 'text'))
+                                       foundMenu = 
this._findSubMenuByName(target, _UNO('.uno:InsertPageFooter', 'text'));
                                        if (foundMenu && 
foundMenu.menu.find(findFunction) === undefined)
                                                foundMenu.menu.push({name: 
_(style), tag: style, uno: constFooter + encodeURIComponent(style) + constArg});
                                }
@@ -1425,7 +1425,7 @@ L.Control.Menubar = L.Control.extend({
                        if (id && id == 'menu-' + targetId) {
                                return true;
                        }
-                       return false
+                       return false;
                });
                return found.length ? found : null;
        },
@@ -1483,8 +1483,8 @@ L.Control.Menubar = L.Control.extend({
                var docType = this._map.getDocType();
                var target = this.options['mobileInsertMenu'][docType];
 
-               var menuStructure = this._generateMenuStructure(target, 
docType, true)
-               return menuStructure
+               var menuStructure = this._generateMenuStructure(target, 
docType, true);
+               return menuStructure;
        },
 
        _generateMenuStructure: function(item, docType, mainMenu) {
diff --git a/loleaflet/src/control/Control.MobileWizard.js 
b/loleaflet/src/control/Control.MobileWizard.js
index f186a2412..1bf384762 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -162,11 +162,11 @@ L.Control.MobileWizard = L.Control.extend({
                        this._hideWizard();
                        this._currentDepth = 0;
                        if (window.mobileWizard === true) {
-                               w2ui['actionbar'].click('mobile_wizard')
+                               w2ui['actionbar'].click('mobile_wizard');
                        } else if (window.insertionMobileWizard === true) {
-                               
w2ui['actionbar'].click('insertion_mobile_wizard')
+                               
w2ui['actionbar'].click('insertion_mobile_wizard');
                        } else if (window.mobileMenuWizard === true) {
-                               $('#main-menu-state').click()
+                               $('#main-menu-state').click();
                        } else if (window.contextMenuWizard) {
                                window.contextMenuWizard = false;
                                this.map.fire('closemobilewizard');
diff --git a/loleaflet/src/control/Control.PartsPreview.js 
b/loleaflet/src/control/Control.PartsPreview.js
index 12c5bab19..94b6c6af4 100644
--- a/loleaflet/src/control/Control.PartsPreview.js
+++ b/loleaflet/src/control/Control.PartsPreview.js
@@ -429,7 +429,7 @@ L.Control.PartsPreview = L.Control.extend({
                if (elem) {
                        elem.setAttribute('draggable', true);
                        elem.addEventListener('dragstart', 
this._handleDragStart, false);
-                       elem.addEventListener('dragenter', 
this._handleDragEnter, false)
+                       elem.addEventListener('dragenter', 
this._handleDragEnter, false);
                        elem.addEventListener('dragover', this._handleDragOver, 
false);
                        elem.addEventListener('dragleave', 
this._handleDragLeave, false);
                        elem.addEventListener('drop', this._handleDrop, false);
diff --git a/loleaflet/src/control/Control.RowHeader.js 
b/loleaflet/src/control/Control.RowHeader.js
index c29d64000..8709a72c5 100644
--- a/loleaflet/src/control/Control.RowHeader.js
+++ b/loleaflet/src/control/Control.RowHeader.js
@@ -243,7 +243,7 @@ L.Control.RowHeader = L.Control.Header.extend({
                        var w = width - 4;
                        var size = 2;
                        var offset = 1;
-                       ctx.fillStyle = '#BBBBBB'
+                       ctx.fillStyle = '#BBBBBB';
                        ctx.fillRect(x + 2, center - size - offset, w - 4, 
size);
                        ctx.fillRect(x + 2, center + offset, w - 4, size);
                }
diff --git a/loleaflet/src/control/Control.Tabs.js 
b/loleaflet/src/control/Control.Tabs.js
index eac204c3b..aaa4f1b28 100644
--- a/loleaflet/src/control/Control.Tabs.js
+++ b/loleaflet/src/control/Control.Tabs.js
@@ -138,7 +138,7 @@ L.Control.Tabs = L.Control.extend({
                                                return function() {
                                                        this._tabForContextMenu 
= j;
                                                        $('spreadsheet-tab' + 
j).contextMenu();
-                                               }
+                                               };
                                        }(i).bind(this));
                                        
                                        tab.textContent = e.partNames[i];
diff --git a/loleaflet/src/control/Control.Toolbar.js 
b/loleaflet/src/control/Control.Toolbar.js
index b22f5e479..7f28579e7 100644
--- a/loleaflet/src/control/Control.Toolbar.js
+++ b/loleaflet/src/control/Control.Toolbar.js
@@ -264,10 +264,10 @@ function onClick(e, id, item, subItem) {
                onColorPick(id, e.color);
        }
        else if (id === 'backcolor' && typeof e.color !== 'undefined') {
-               onColorPick(id, e.color)
+               onColorPick(id, e.color);
        }
        else if (id === 'backgroundcolor' && typeof e.color !== 'undefined') {
-               onColorPick(id, e.color)
+               onColorPick(id, e.color);
        }
        else if (id === 'sum') {
                map.sendUnoCommand('.uno:AutoSum');
@@ -501,7 +501,7 @@ function insertTable() {
 
                        map._socket.sendMessage(msg);
 
-                       closePopup()
+                       closePopup();
                }
        }, '.col');
 }
@@ -1073,7 +1073,7 @@ function initNormalToolbar() {
                });
        }
 
-       toolbar = $('#spreadsheet-toolbar')
+       toolbar = $('#spreadsheet-toolbar');
        toolbar.w2toolbar({
                name: 'spreadsheet-toolbar',
                tooltip: 'bottom',
@@ -1732,7 +1732,7 @@ function onDocLayerInit() {
                tags: true,
                sorter: function(data) { return data.sort(function(a, b) {
                        return parseFloat(a.text) - parseFloat(b.text);
-               })}
+               });}
        });
        $('.fontsizes-select').off('select2:select', 
onFontSizeSelect).on('select2:select', onFontSizeSelect);
 }
@@ -2192,7 +2192,7 @@ function onUpdatePermission(e) {
                // copy the first array
                var items = toolbar.items.slice();
                for (var idx in items) {
-                       var found = enabledButtons.filter(function(id) { return 
id === items[idx].id });
+                       var found = enabledButtons.filter(function(id) { return 
id === items[idx].id; });
                        var alwaysEnable = found.length !== 0;
 
                        if (e.perm === 'edit') {
diff --git a/loleaflet/src/control/Signing.js b/loleaflet/src/control/Signing.js
index 4489f325f..7a253ddf0 100644
--- a/loleaflet/src/control/Signing.js
+++ b/loleaflet/src/control/Signing.js
@@ -12,7 +12,7 @@ var passportCertificates = [];
 
 var oldtoolbarSize = null;
 var _map = null;
-var currentDocumentSigningStatus = 'N/A'
+var currentDocumentSigningStatus = 'N/A';
 
 var awaitForDocumentStatusToUpload = false;
 var currentDocumentType = null;
@@ -389,7 +389,7 @@ function vereignExportSignAndUploadToVereign(documentType) {
                                                wopiUrl: getVereignWopiURL() + 
'files',
                                                token: 
resultArray[i].AccessToken,
                                                type: documentType
-                                       }
+                                       };
                                        var blob = new 
Blob(['exportsignanduploaddocument\n', JSON.stringify(parameters)]);
                                        _map._socket.sendMessage(blob);
                                }
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index cd912777e..2d9e007f2 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -231,7 +231,7 @@ L.Map.include({
                                buttons: {},
                                afterOpen: function() {
                                        var $vexContent = $(this.contentEl);
-                                       this.contentEl.style.width = w + 'px'
+                                       this.contentEl.style.width = w + 'px';
                                        map.enable(false);
                                        var i;
                                        // Display keyboard shortcut or online 
help
diff --git a/loleaflet/src/dom/Draggable.js b/loleaflet/src/dom/Draggable.js
index d3183704a..5ed23ed73 100644
--- a/loleaflet/src/dom/Draggable.js
+++ b/loleaflet/src/dom/Draggable.js
@@ -151,9 +151,9 @@ L.Draggable = L.Evented.extend({
                this._newPos = this._startPos.add(offset);
 
                if (this._freezeY)
-                       this._newPos.y = this._startPos.y
+                       this._newPos.y = this._startPos.y;
                if (this._freezeX)
-                       this._newPos.x = this._startPos.x
+                       this._newPos.x = this._startPos.x;
 
                this._moving = true;
 
diff --git a/loleaflet/src/layer/CalcGridLines.js 
b/loleaflet/src/layer/CalcGridLines.js
index 8d745999d..4b4e58d3a 100644
--- a/loleaflet/src/layer/CalcGridLines.js
+++ b/loleaflet/src/layer/CalcGridLines.js
@@ -51,7 +51,7 @@ L.CalcGridLines = L.LayerGroup.extend({
                                        str = 'M0 0';
                                }
 
-                               this._setPath(layer, str, closed)
+                               this._setPath(layer, str, closed);
                        }.bind(this.options.renderer);
                }
 
diff --git a/loleaflet/src/layer/marker/TextInput.js 
b/loleaflet/src/layer/marker/TextInput.js
index bc6d047a7..6a404298e 100644
--- a/loleaflet/src/layer/marker/TextInput.js
+++ b/loleaflet/src/layer/marker/TextInput.js
@@ -56,7 +56,7 @@ L.TextInput = L.Layer.extend({
                }).on('dragend', this._onCursorHandlerDragEnd, this);
 
                var that = this;
-               this._selectionHandler = function(ev) { that._onEvent(ev); }
+               this._selectionHandler = function(ev) { that._onEvent(ev); };
 
                // Auto-correct characters can trigger auto-correction, but
                // must be sent as key-up/down if we want correction.
diff --git a/loleaflet/src/layer/tile/GridLayer.js 
b/loleaflet/src/layer/tile/GridLayer.js
index 4db50a473..470d611d5 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -25,7 +25,7 @@ L.GridLayer = L.Layer.extend({
        initialize: function (options) {
                L.setOptions(this, options);
 
-               this._resetClientVisArea()
+               this._resetClientVisArea();
        },
 
        onAdd: function () {
@@ -744,7 +744,7 @@ L.GridLayer = L.Layer.extend({
                        // Visible area is dirty, update it on the server
                        this._map._socket.sendMessage(newClientVisibleArea);
                        if (!this._map._fatal && this._map._active && 
this._map._socket.connected())
-                               this._clientVisibleArea = newClientVisibleArea
+                               this._clientVisibleArea = newClientVisibleArea;
                        if (this._debug) {
                                this._debugInfo.clearLayers();
                                for (var key in this._tiles) {
diff --git a/loleaflet/src/layer/tile/TileLayer.TableOverlay.js 
b/loleaflet/src/layer/tile/TileLayer.TableOverlay.js
index 25e8f93e7..12b45d5df 100644
--- a/loleaflet/src/layer/tile/TileLayer.TableOverlay.js
+++ b/loleaflet/src/layer/tile/TileLayer.TableOverlay.js
@@ -327,7 +327,7 @@ L.TileLayer.include({
                                        type : 'int32',
                                        value : offset
                                }
-                       }
+                       };
 
                        
this._map.sendUnoCommand('.uno:TableChangeCurrentBorderPosition', params);
                }
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 8d31a7647..861846e3b 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -773,7 +773,7 @@ L.TileLayer = L.GridLayer.extend({
                                index: idx,
                                enabled: true,
                                children: []
-                       }
+                       };
                        entries.push(entry);
                        entries[entries.length-1].children[0] = {
                                id: '',
@@ -1147,7 +1147,7 @@ L.TileLayer = L.GridLayer.extend({
                }
 
                if (this._map._viewInfo[editorId])
-                       this._map.fire('updateEditorName', {username: 
this._map._viewInfo[editorId].username})
+                       this._map.fire('updateEditorName', {username: 
this._map._viewInfo[editorId].username});
        },
 
        _onInvalidateViewCursorMsg: function (textMsg) {
diff --git a/loleaflet/src/layer/vector/Path.Drag.js 
b/loleaflet/src/layer/vector/Path.Drag.js
index 0b8193247..47fd8e0e2 100644
--- a/loleaflet/src/layer/vector/Path.Drag.js
+++ b/loleaflet/src/layer/vector/Path.Drag.js
@@ -271,7 +271,7 @@ L.Handler.PathDrag = L.Handler.extend(/** @lends  
L.Path.Drag.prototype */ {
 
                if (!this._path.options.manualDrag && !moved) {
                        this._path._map._handleDOMEvent(this._mouseDown);
-                       this._path._map._handleDOMEvent(evt)
+                       this._path._map._handleDOMEvent(evt);
                }
        },
 
diff --git a/loleaflet/src/map/Clipboard.js b/loleaflet/src/map/Clipboard.js
index a3a4c3add..b4d76884a 100644
--- a/loleaflet/src/map/Clipboard.js
+++ b/loleaflet/src/map/Clipboard.js
@@ -39,7 +39,7 @@ L.Clipboard = L.Class.extend({
                this._resetDiv();
 
                var that = this;
-               var beforeSelect = function(ev) { return 
that._beforeSelect(ev); }
+               var beforeSelect = function(ev) { return 
that._beforeSelect(ev); };
                if (L.Browser.isInternetExplorer)
                {
                        document.addEventListener('cut',   function(ev)   { 
return that.cut(ev); });
@@ -261,7 +261,7 @@ L.Clipboard = L.Class.extend({
                                        'POST', dest, formData,
                                        function() {
                                                console.log('up-load done, now 
paste');
-                                               
that._map._socket.sendMessage('uno .uno:Paste')
+                                               
that._map._socket.sendMessage('uno .uno:Paste');
                                        },
                                        function(progress) { return 50 + 
progress/2; }
                                );
@@ -289,7 +289,7 @@ L.Clipboard = L.Class.extend({
                                        'POST', dest, formData,
                                        function() {
                                                console.log('up-load of 
fallback done, now paste');
-                                               
that._map._socket.sendMessage('uno .uno:Paste')
+                                               
that._map._socket.sendMessage('uno .uno:Paste');
                                        },
                                        function(progress) { return 50 + 
progress/2; },
                                        function() {
@@ -381,7 +381,7 @@ L.Clipboard = L.Class.extend({
                                        if (files !== null)
                                        {
                                                for (var f = 0; f < 
files.length; ++f)
-                                                       
this._asyncReadPasteImage(files[f])
+                                                       
this._asyncReadPasteImage(files[f]);
                                        }
                                        else // IE / Edge
                                                
this._asyncReadPasteImage(dataTransfer.items[t].getAsFile());
@@ -612,7 +612,7 @@ L.Clipboard = L.Class.extend({
                                console.log('help did not arive for ' + 
operation);
                                that._warnCopyPaste();
                        }
-               }, 150 /* ms */)
+               }, 150 /* ms */);
        },
 
        // Pull UNO clipboard commands out from menus and normal user input.
commit 9a056ebd4691331277fe9eff722f3948c18ea028
Author:     Tamás Zolnai <[email protected]>
AuthorDate: Thu Jan 16 15:00:54 2020 +0100
Commit:     Tamás Zolnai <[email protected]>
CommitDate: Thu Jan 16 15:46:32 2020 +0100

    cypress: mobile: add some examples for testing focus.
    
    Change-Id: I63267bdd1d4b4db0d30da78c61b82c5d7d5535dc

diff --git a/cypress_test/integration_tests/mobile/focus_spec.js 
b/cypress_test/integration_tests/mobile/focus_spec.js
new file mode 100644
index 000000000..78bef645f
--- /dev/null
+++ b/cypress_test/integration_tests/mobile/focus_spec.js
@@ -0,0 +1,117 @@
+/* global describe it cy Cypress beforeEach*/
+
+describe('Focus tests', function() {
+       beforeEach(function() {
+               // Get a clean test document
+               cy.task('copyFile', {
+                       sourceDir: Cypress.env('DATA_FOLDER'),
+                       destDir: Cypress.env('WORKDIR'),
+                       fileName: 'empty.odt',
+               });
+
+               // Open test document
+               cy.viewport('iphone-3');
+               
cy.visit('http://localhost:9980/loleaflet/fc04ba550/loleaflet.html?file_path=file://'
 +
+                       Cypress.env('WORKDIR') + 'empty.odt');
+
+               // Wait for the document to fully load
+               cy.get('.leaflet-tile-loaded');
+       })
+
+       it('Focus after document fully loaded.', function() {
+               // The document body should have the focus
+               cy.document().its('activeElement.tagName')
+                       .should('be.eq', 'BODY')
+       })
+
+       it('Focus after closing a dialog.', function() {
+               // The document body has the focus first
+               cy.document().its('activeElement.tagName')
+                       .should('be.eq', 'BODY')
+
+               // Click on edit button
+               cy.get('#mobile-edit-button').click();
+
+               // Open comment insertion dialog
+               cy.get('#tb_actionbar_item_insertcomment')
+                       .should('not.have.class', 'disabled')
+                       .click();
+
+               cy.get('.loleaflet-annotation-table').should('be.visible');
+
+               // The dialog grabs the focus
+               cy.document().its('activeElement.className')
+                       .should('be.eq', 'loleaflet-annotation-textarea')
+
+               // Close the dialog
+               cy.contains('Cancel').click();
+               cy.get('.loleaflet-annotation-table').should('be.not.visible');
+
+               // The document should have the focus again
+               cy.document().its('activeElement.tagName')
+                       .should('be.eq', 'BODY')
+       })
+
+       it('Focus when using insertion mobile wizard.', function() {
+               // The document body has the focus first
+               cy.document().its('activeElement.tagName')
+                       .should('be.eq', 'BODY')
+
+               // Click on edit button
+               cy.get('#mobile-edit-button').click();
+
+               // Open insertion mobile wizard
+               cy.get('#tb_actionbar_item_insertion_mobile_wizard')
+                       .should('not.have.class', 'disabled')
+                       .click();
+
+               cy.get('#mobile-wizard-content')
+                       .should('not.be.empty');
+
+               // This fails here: the document still has the focus
+               // The wizard changes the focus
+               //cy.document().its('activeElement.className')
+               //      .should('be.eq', 'clipboard')
+
+               // Close the mobile wizard
+               cy.get('#tb_actionbar_item_insertion_mobile_wizard').click()
+               cy.get('#mobile-wizard').should('not.be.visible');
+
+               // This fails here: the focus is not on the document body
+               // The document should have the focus again
+               //cy.document().its('activeElement.tagName')
+               //      .should('be.eq', 'BODY')
+       })
+
+       it('Focus after insertion.', function() {
+               // The document body has the focus first
+               cy.document().its('activeElement.tagName')
+                       .should('be.eq', 'BODY')
+
+               // Click on edit button
+               cy.get('#mobile-edit-button').click();
+
+               // Open insertion mobile wizard
+               cy.get('#tb_actionbar_item_insertion_mobile_wizard')
+                       .should('not.have.class', 'disabled')
+                       .click();
+
+               cy.get('#mobile-wizard-content')
+                       .should('not.be.empty')
+
+               // Select More Fields
+               cy.get('.ui-header.level-0.mobile-wizard.ui-widget 
.sub-menu-title')
+                       .contains('More Fields...')
+                       .parent().click();
+
+               // Insert a field
+               cy.get('.ui-header.level-1.mobile-wizard.ui-widget 
.menu-entry-with-icon')
+                       .contains('Page Number').click();
+               cy.get('#mobile_wizard').should('not.be.visible');
+
+               // This fails here: the focus is not on the document body
+               // The document should have the focus again
+               //cy.document().its('activeElement.tagName')
+               //      .should('be.eq', 'BODY')
+       })
+})
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to