loleaflet/Makefile.am | 13 ++- loleaflet/html/loleaflet.html.m4 | 25 +++---- loleaflet/js/global.js | 137 +++++++++++++++++++++++++++------------ loleaflet/js/main.js | 3 loleaflet/src/core/Socket.js | 15 +++- loleaflet/src/map/Map.js | 4 - 6 files changed, 133 insertions(+), 64 deletions(-)
New commits: commit a5e3bcec43fa4e82639adfff15ec9f1fa11b32ff Author: Henry Castro <hcas...@collabora.com> AuthorDate: Sun Jan 27 16:46:41 2019 -0400 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Tue May 14 15:50:22 2019 +0200 loleaflet: uglify global.js file Change-Id: Ibcc265830c10042a918784b350fe93566147993a diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am index f0212d338..5054070fa 100644 --- a/loleaflet/Makefile.am +++ b/loleaflet/Makefile.am @@ -217,6 +217,10 @@ $(builddir)/dist/bundle.css: $(LOLEAFLET_CSS) @echo "Uglify loleaflet css files..." @NODE_PATH=$(abs_builddir)/node_modules $(NODE) node_modules/uglifycss/uglifycss $(LOLEAFLET_CSS) > $@ +$(builddir)/dist/global.js: $(srcdir)/js/global.js + @echo "Uglify global.js file..." + @NODE_PATH=$(abs_builddir)/node_modules $(NODE) node_modules/uglify-js/bin/uglifyjs $< --output $@ + $(builddir)/dist/bundle.js: $(NODE_MODULES_JS_SRC) \ $(LOLEAFLET_PREFIX)/dist/loleaflet-src.js \ $(builddir)/dist/global.js \ commit 18a4cd16da9e8d6708cd3c0ebbcd5b50e8cc5bbb Author: Henry Castro <hcas...@collabora.com> AuthorDate: Sun Jan 27 14:04:26 2019 -0400 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Tue May 14 15:50:22 2019 +0200 loleaflet: improve early "websocket" connection Normally the "websocket" is created and start a connection when browser evaluate "bundle.js" after download it. So we create an early "websocket" connection after the browser parse "loleaflet.html" and start receiving tiles to improve load page performance Change-Id: I56fca7a2da39031222c1d43781825997221385a1 diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am index a952cac41..f0212d338 100644 --- a/loleaflet/Makefile.am +++ b/loleaflet/Makefile.am @@ -123,9 +123,6 @@ endif NODE_MODULES_JS_SRC = $(patsubst %.js,$(builddir)/%.js,$(NODE_MODULES_JS)) NODE_MODULES_JS_DST = $(patsubst %.js,$(builddir)/dist/%.js,$(NODE_MODULES_JS)) -GLOBAL_JS =\ - global.js - LOLEAFLET_JS = $(strip $(shell NODE_PATH=$(abs_builddir)/node_modules $(NODE) -e "try {console.log(require('$(1)').getFiles().join(' '))} catch(e) {}")) LOPLUGIN_JS = $(strip $(shell NODE_PATH=$(abs_builddir)/node_modules $(NODE) -e "try {console.log(require('$(1)').deps.join(' '))} catch(e) {}")) @@ -222,7 +219,7 @@ $(builddir)/dist/bundle.css: $(LOLEAFLET_CSS) $(builddir)/dist/bundle.js: $(NODE_MODULES_JS_SRC) \ $(LOLEAFLET_PREFIX)/dist/loleaflet-src.js \ - $(srcdir)/js/global.js \ + $(builddir)/dist/global.js \ $(srcdir)/js/jquery.mCustomScrollbar.js \ $(srcdir)/js/w2ui-1.5.rc1.js \ $(srcdir)/js/toolbar.js \ @@ -249,7 +246,8 @@ $(builddir)/dist/loleaflet.html: $(srcdir)/html/loleaflet.html.m4 $(LOLEAFLET_HT -DMOBILEAPPNAME="$(APP_NAME)" \ -DLOLEAFLET_CSS="$(subst $(SPACE),$(COMMA),$(LOLEAFLET_CSS_M4))" \ -DBUNDLE_CSS="$(abs_builddir)/dist/bundle.css" \ - -DLOLEAFLET_JS="$(subst $(SPACE),$(COMMA),$(GLOBAL_JS) $(NODE_MODULES_JS) \ + -DGLOBAL_JS="$(abs_builddir)/dist/global.js" \ + -DLOLEAFLET_JS="$(subst $(SPACE),$(COMMA),$(NODE_MODULES_JS) \ $(call LOLEAFLET_JS,$(srcdir)/build/build.js) \ $(patsubst %.js,plugins/draw-$(DRAW_VERSION)/%.js,$(call LOLEAFLET_JS,$(srcdir)/plugins/draw-$(DRAW_VERSION)/build/build.js)) \ $(patsubst %.js,plugins/path-transform/%.js,$(call LOPLUGIN_JS,$(srcdir)/plugins/path-transform/build/deps.js)) \ diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4 index 54dc9fb45..367ed3fe6 100644 --- a/loleaflet/html/loleaflet.html.m4 +++ b/loleaflet/html/loleaflet.html.m4 @@ -179,6 +179,7 @@ ifelse(MOBILEAPP,[true], window.outOfFocusTimeoutSecs = %OUT_OF_FOCUS_TIMEOUT_SECS%; window.idleTimeoutSecs = %IDLE_TIMEOUT_SECS%; window.tileSize = 256;]) +syscmd([cat ]GLOBAL_JS)dnl </script> <script defer> diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js index 9b529af8b..1b7f07883 100644 --- a/loleaflet/js/global.js +++ b/loleaflet/js/global.js @@ -49,4 +49,59 @@ } }; + var docParams, wopiParams; + var filePath = global.getParameterByName('file_path'); + var wopiSrc = global.getParameterByName('WOPISrc'); + if (wopiSrc != '') { + global.docURL = decodeURIComponent(wopiSrc); + wopiSrc = '?WOPISrc=' + wopiSrc + '&compat=/ws'; + if (global.accessToken !== '') { + wopiParams = { 'access_token': global.accessToken, 'access_token_ttl': global.accessTokenTTL }; + } + else if (global.accessHeader !== '') { + wopiParams = { 'access_header': global.accessHeader }; + } + docParams = Object.keys(wopiParams).map(function(key) { + return encodeURIComponent(key) + '=' + encodeURIComponent(wopiParams[key]) + }).join('&'); + } else { + global.docURL = filePath; + } + + var websocketURI = global.host + global.serviceRoot + '/lool/' + encodeURIComponent(global.docURL + (docParams ? '?' + docParams : '')) + '/ws' + wopiSrc; + + try { + global.socket = new WebSocket(websocketURI); + } catch (err) { + console.log(err); + } + + global.queueMsg = []; + if (global.socket && global.socket.readyState !== 3) { + global.socket.onopen = function () { + if (global.socket.readyState === 1) { + var ProtocolVersionNumber = '0.1'; + global.socket.send('loolclient ' + ProtocolVersionNumber); + global.socket.send('load url=' + encodeURIComponent(global.docURL)); + } + } + + global.socket.onerror = function (event) { + console.log(event); + } + + global.socket.onclose = function (event) { + console.log(event); + } + + global.socket.onmessage = function (event) { + if (global.L && global.socket instanceof global.L.Socket) { + global.socket._onMessage(event); + } else { + global.queueMsg.push(event.data); + } + } + + global.socket.binaryType = 'arraybuffer'; + } }(window)); diff --git a/loleaflet/js/main.js b/loleaflet/js/main.js index 15e859606..801cf33b6 100644 --- a/loleaflet/js/main.js +++ b/loleaflet/js/main.js @@ -79,8 +79,9 @@ map.addControl(L.control.columnHeader()); map.addControl(L.control.rowHeader()); map.addControl(L.control.contextMenu()); map.addControl(L.control.infobar()); -map.loadDocument(); +map.loadDocument(global.socket); +global.socket = map._socket; window.addEventListener('beforeunload', function () { if (map && map._socket) { map._socket.close(); diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js index 884a0c8d2..290016fcd 100644 --- a/loleaflet/src/core/Socket.js +++ b/loleaflet/src/core/Socket.js @@ -50,7 +50,7 @@ L.Socket = L.Class.extend({ this._msgQueue = []; }, - connect: function() { + connect: function(socket) { var map = this._map; if (map.options.permission) { map.options.docParams['permission'] = map.options.permission; @@ -61,7 +61,9 @@ L.Socket = L.Class.extend({ if (window.ThisIsAMobileApp) { this.socket = new FakeWebSocket(); window.TheFakeWebSocket = this.socket; - } else { + } else if (socket && (socket.readyState === 1 || socket.readyState === 0)) { + this.socket = socket; + } else { var wopiSrc = ''; if (map.options.wopiSrc != '') { wopiSrc = '?WOPISrc=' + map.options.wopiSrc + '&compat=/ws'; @@ -105,6 +107,15 @@ L.Socket = L.Class.extend({ this._accessTokenExpireTimeout = setTimeout(L.bind(this._sessionExpiredWarning, this), parseInt(map.options.docParams.access_token_ttl) - Date.now() - tokenExpiryWarning); } + + // process messages for early socket connection + if (socket && ((socket.readyState === 1 || socket.readyState === 0)) && + window.queueMsg && window.queueMsg.length > 0) { + for (var it = 0; it < window.queueMsg.length; it++) { + this._onMessage({data: window.queueMsg[it]}); + } + window.queueMsg = []; + } }, _sessionExpiredWarning: function() { diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 9e25fbe04..c1413504b 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -254,8 +254,8 @@ L.Map = L.Evented.extend({ }, this); }, - loadDocument: function() { - this._socket.connect(); + loadDocument: function(socket) { + this._socket.connect(socket); }, sendInitUNOCommands: function() { commit f1d49854c75fb9049ae18092cb85c4915f6a9242 Author: Henry Castro <hcas...@collabora.com> AuthorDate: Sun Jan 27 13:42:44 2019 -0400 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Tue May 14 15:50:22 2019 +0200 loleaflet: expand inline bundle.css style into html Change-Id: Id26180777a1b9838c3a9b5dc1e541023d0299595 diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am index 8b93f4a8e..a952cac41 100644 --- a/loleaflet/Makefile.am +++ b/loleaflet/Makefile.am @@ -248,6 +248,7 @@ $(builddir)/dist/loleaflet.html: $(srcdir)/html/loleaflet.html.m4 $(LOLEAFLET_HT -DGTKAPP=$(ENABLE_GTKAPP) \ -DMOBILEAPPNAME="$(APP_NAME)" \ -DLOLEAFLET_CSS="$(subst $(SPACE),$(COMMA),$(LOLEAFLET_CSS_M4))" \ + -DBUNDLE_CSS="$(abs_builddir)/dist/bundle.css" \ -DLOLEAFLET_JS="$(subst $(SPACE),$(COMMA),$(GLOBAL_JS) $(NODE_MODULES_JS) \ $(call LOLEAFLET_JS,$(srcdir)/build/build.js) \ $(patsubst %.js,plugins/draw-$(DRAW_VERSION)/%.js,$(call LOLEAFLET_JS,$(srcdir)/plugins/draw-$(DRAW_VERSION)/build/build.js)) \ diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4 index b0e1bd5c1..54dc9fb45 100644 --- a/loleaflet/html/loleaflet.html.m4 +++ b/loleaflet/html/loleaflet.html.m4 @@ -44,16 +44,16 @@ var Base64ToArrayBuffer = function(base64Str) { </script> ifelse(MOBILEAPP,[true], - ifelse(DEBUG,[true], + [ifelse(DEBUG,[true], foreachq([fileCSS],[LOLEAFLET_CSS],[<link rel="stylesheet" href="fileCSS" /> ]), - [<link rel="stylesheet" href="bundle.css" /> - ]), - ifelse(DEBUG,[true], + [<style>syscmd([cat ]BUNDLE_CSS)</style> + ])], + [ifelse(DEBUG,[true], foreachq([fileCSS],[LOLEAFLET_CSS],[<link rel="stylesheet" href="%SERVICE_ROOT%/loleaflet/%VERSION%/fileCSS" /> ]), - [<link rel="stylesheet" href="%SERVICE_ROOT%/loleaflet/%VERSION%/bundle.css" /> - ])dnl + [<style>syscmd([cat ]BUNDLE_CSS)</style> + ])]dnl )dnl <!--%BRANDING_CSS%--> <!-- add your logo here --> ifelse(IOSAPP,[true], commit c3feda5e71eb0c414243aff396602ceffd0c21d4 Author: Henry Castro <hcas...@collabora.com> AuthorDate: Sun Jan 27 13:27:37 2019 -0400 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Tue May 14 15:50:22 2019 +0200 loleaflet: add defer attribute to the script tag A script that will not run until after the page has loaded Change-Id: I7a835138ba22e70150db4345629231c59b84973b diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4 index 440454c5d..b0e1bd5c1 100644 --- a/loleaflet/html/loleaflet.html.m4 +++ b/loleaflet/html/loleaflet.html.m4 @@ -159,7 +159,7 @@ ifelse(MOBILEAPP,[true], <p>Copyright _YEAR_, Collabora Productivity Limited.</p> </div> - <script> + <script defer> ifelse(MOBILEAPP,[true], [window.host = ''; window.serviceRoot = ''; @@ -180,7 +180,7 @@ ifelse(MOBILEAPP,[true], window.idleTimeoutSecs = %IDLE_TIMEOUT_SECS%; window.tileSize = 256;]) </script> - <script> + <script defer> dnl# For use in conditionals in JS: window.ThisIsAMobileApp, window.ThisIsTheiOSApp, dnl# and window.ThisIsTheGtkApp @@ -201,14 +201,14 @@ ifelse(GTKAPP,[true], ifelse(MOBILEAPP,[true], ifelse(DEBUG,[true],foreachq([fileJS],[LOLEAFLET_JS], - [ <script src="fileJS"></script> + [ <script src="fileJS" defer></script> ]), - [ <script src="bundle.js"></script> + [ <script src="bundle.js" defer></script> ]), ifelse(DEBUG,[true],foreachq([fileJS],[LOLEAFLET_JS], - [ <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/fileJS"></script> + [ <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/fileJS" defer></script> ]), - [ <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/bundle.js"></script> + [ <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/bundle.js" defer></script> ]) )dnl <!--%BRANDING_JS%--> <!-- logo onclick handler --> commit 33b248886d9d3fce1a908196398c2be910dd1bea Author: Henry Castro <hcas...@collabora.com> AuthorDate: Sat Jan 26 17:21:48 2019 -0400 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Tue May 14 15:50:22 2019 +0200 loleaflet: indent global.js Change-Id: Ib04a18bcedb26ce267a80fd7990454f590de1a3d diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js index c7fed9b39..9b529af8b 100644 --- a/loleaflet/js/global.js +++ b/loleaflet/js/global.js @@ -1,54 +1,52 @@ /* -*- js-indent-level: 8 -*- */ -/* global loleafletLogging */ -/*eslint indent: [error, "tab", { "outerIIFEBody": 0 }]*/ (function (global) { -// If not debug, don't print anything on the console -// except in tile debug mode (Ctrl-Shift-Alt-d) -console.log2 = console.log; -if (loleafletLogging !== 'true') { - var methods = ['warn', 'info', 'debug', 'trace', 'log', 'assert', 'time', 'timeEnd']; - for (var i = 0; i < methods.length; i++) { - console[methods[i]] = function() {}; + // If not debug, don't print anything on the console + // except in tile debug mode (Ctrl-Shift-Alt-d) + console.log2 = console.log; + if (global.loleafletLogging !== 'true') { + var methods = ['warn', 'info', 'debug', 'trace', 'log', 'assert', 'time', 'timeEnd']; + for (var i = 0; i < methods.length; i++) { + console[methods[i]] = function() {}; + } } -} -// fix jquery-ui -// var jQuery = require('jquery'); -global.require = function (path) { - if (path=='jquery') { - return global.jQuery; - } -}; + // fix jquery-ui + // var jQuery = require('jquery'); + global.require = function (path) { + if (path=='jquery') { + return global.jQuery; + } + }; -global.getParameterByName = function (name) { - name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); - var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); - var results = regex.exec(location.search); - return results === null ? '' : results[1].replace(/\+/g, ' '); -}; + global.getParameterByName = function (name) { + name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); + var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); + var results = regex.exec(location.search); + return results === null ? '' : results[1].replace(/\+/g, ' '); + }; -global._ = function (string) { - // In the mobile app case we can't use the stuff from l10n-for-node, as that assumes HTTP. - if (window.ThisIsTheiOSApp) { - // We use another approach just for iOS for now. - if (window.LOCALIZATIONS.hasOwnProperty(string)) { - // window.webkit.messageHandlers.debug.postMessage('_(' + string + '): YES: ' + window.LOCALIZATIONS[string]); - var result = window.LOCALIZATIONS[string]; - if (window.LANG === 'de-CH') { - result = result.replace(/ß/g, 'ss'); + global._ = function (string) { + // In the mobile app case we can't use the stuff from l10n-for-node, as that assumes HTTP. + if (window.ThisIsTheiOSApp) { + // We use another approach just for iOS for now. + if (window.LOCALIZATIONS.hasOwnProperty(string)) { + // window.webkit.messageHandlers.debug.postMessage('_(' + string + '): YES: ' + window.LOCALIZATIONS[string]); + var result = window.LOCALIZATIONS[string]; + if (window.LANG === 'de-CH') { + result = result.replace(/ß/g, 'ss'); + } + return result; + } else { + // window.webkit.messageHandlers.debug.postMessage('_(' + string + '): NO'); + return string; } - return result; + } else if (window.ThisIsAMobileApp) { + // And bail out without translations on other mobile platforms. + return string.toLocaleString(); } else { - // window.webkit.messageHandlers.debug.postMessage('_(' + string + '): NO'); - return string; + return string.toLocaleString(); } - } else if (window.ThisIsAMobileApp) { - // And bail out without translations on other mobile platforms. - return string; - } else { - return string.toLocaleString(); - } -}; + }; }(window)); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits