[Libreoffice-commits] online.git: 6 commits - loleaflet/dist loleaflet/reference.html loleaflet/src

Pranav Kant pranavk at collabora.co.uk
Tue Dec 26 12:07:28 UTC 2017


 loleaflet/dist/loleaflet.css               |    1 
 loleaflet/reference.html                   |   23 +++
 loleaflet/src/control/Control.LokDialog.js |  191 ++++++++++++-----------------
 loleaflet/src/layer/tile/TileLayer.js      |   14 --
 loleaflet/src/map/handler/Map.Keyboard.js  |   26 ++-
 5 files changed, 119 insertions(+), 136 deletions(-)

New commits:
commit d1c8de9bf9021dedb67446439f117b1b64c7e2d9
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Sat Dec 23 18:36:28 2017 +0530

    loleaflet: Unify dialog key handling logic with document's
    
    Change-Id: I422e813d76df9b52a860a05d09a89362dfb0b616

diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index 3e23fa6a..b6cb4c41 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -224,7 +224,9 @@ L.Control.LokDialog = L.Control.extend({
 			this._postWindowMouseEvent(lokEventType, this._toRawDlgId(strDlgId), e.offsetX, e.offsetY, 1, buttons, 0);
 		}, this);
 		L.DomEvent.on(dialogCanvas, 'keyup keypress keydown', function(e) {
-			this._handleDialogKeyEvent(e, this._toRawDlgId(strDlgId));
+			// _onKeyDown fn below requires this kind of structure but leaflet DomEvent.on doesn't pass it
+			e.originalEvent = e;
+			map['keyboard']._onKeyDown(e, L.bind(this._postWindowKeyboardEvent, this, this._toRawDlgId(strDlgId)));
 		}, this);
 		L.DomEvent.on(dialogCanvas, 'contextmenu', function() {
 			return false;
@@ -244,42 +246,6 @@ L.Control.LokDialog = L.Control.extend({
 		                              ' char=' + charcode + ' key=' + keycode);
 	},
 
-	_handleDialogKeyEvent: function(e, winid) {
-		var docLayer = this._map._docLayer;
-		this.modifier = 0;
-		var shift = e.shiftKey ? this._map['keyboard'].keyModifier.shift : 0;
-		var ctrl = e.ctrlKey ? this._map['keyboard'].keyModifier.ctrl : 0;
-		var alt = e.altKey ? this._map['keyboard'].keyModifier.alt : 0;
-		var cmd = e.metaKey ? this._map['keyboard'].keyModifier.ctrl : 0;
-		this.modifier = shift | ctrl | alt | cmd;
-
-		var charCode = e.charCode;
-		var keyCode = e.keyCode;
-		var unoKeyCode = this._map['keyboard']._toUNOKeyCode(keyCode);
-
-		if (this.modifier) {
-			unoKeyCode |= this.modifier;
-			if (e.type !== 'keyup') {
-				this._postWindowKeyboardEvent(winid, 'input', charCode, unoKeyCode);
-				return;
-			}
-		}
-
-		if (e.type === 'keydown' && this._map['keyboard'].handleOnKeyDownKeys[keyCode]) {
-			this._postWindowKeyboardEvent(winid, 'input', charCode, unoKeyCode);
-		}
-		else if (e.type === 'keypress' && (!this._map['keyboard'].handleOnKeyDownKeys[keyCode] || charCode !== 0)) {
-			if (charCode === keyCode && charCode !== 13) {
-				keyCode = 0;
-				unoKeyCode = this._map['keyboard']._toUNOKeyCode(keyCode);
-			}
-			this._postWindowKeyboardEvent(winid, 'input', charCode, unoKeyCode);
-		}
-		else if (e.type === 'keyup') {
-			this._postWindowKeyboardEvent(winid, 'up', charCode, unoKeyCode);
-		}
-	},
-
 	_onDialogClose: function(dialogId, notifyBackend) {
 		if (notifyBackend)
 			this._sendCloseWindow(dialogId);
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 26d12f8a..0046421b 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1430,20 +1430,6 @@ L.TileLayer = L.GridLayer.extend({
 		}
 	},
 
-	_postKeyboardEvents: function(type, charcodes, keycodes) {
-		// Both are arrays
-		if (typeof(charcodes.length) !== 'number' && typeof(keycodes.length) !== 'number')
-			return;
-
-		// both have same length
-		if (charcodes.length !== keycodes.length)
-			return;
-
-		for (var i = 0; i < charcodes.length; i++) {
-			this._postKeyboardEvent(type, charcodes[i], keycodes[i]);
-		}
-	},
-
 	_postKeyboardEvent: function(type, charcode, keycode) {
 		if (this._docType === 'spreadsheet' && this._prevCellCursor && type === 'input') {
 			if (keycode === 1030) { // PgUp
diff --git a/loleaflet/src/map/handler/Map.Keyboard.js b/loleaflet/src/map/handler/Map.Keyboard.js
index 134b37ff..637aa1b9 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -239,11 +239,15 @@ L.Map.Keyboard = L.Handler.extend({
 		return this.keymap[keyCode] || keyCode;
 	},
 
-	_onKeyDown: function (e) {
+	_onKeyDown: function (e, postEventFn) {
 		if (this._map.slideShow && this._map.slideShow.fullscreen) {
 			return;
 		}
 		var docLayer = this._map._docLayer;
+		if (!postEventFn) {
+			// default is to post keyboard events on the document
+			postEventFn = docLayer._postKeyboardEvent;
+		}
 		this.modifier = 0;
 		var shift = e.originalEvent.shiftKey ? this.keyModifier.shift : 0;
 		var ctrl = e.originalEvent.ctrlKey ? this.keyModifier.ctrl : 0;
@@ -313,7 +317,7 @@ L.Map.Keyboard = L.Handler.extend({
 		if (this.modifier) {
 			unoKeyCode |= this.modifier;
 			if (e.type !== 'keyup' && (this.modifier !== shift || (keyCode === 32 && !docLayer._isCursorVisible))) {
-				docLayer._postKeyboardEvent('input', charCode, unoKeyCode);
+				postEventFn.call(this, 'input', charCode, unoKeyCode);
 				e.originalEvent.preventDefault();
 				return;
 			}
@@ -327,7 +331,7 @@ L.Map.Keyboard = L.Handler.extend({
 				this._bufferedTextInputEvent = null;
 
 				if (this._handleOnKeyDown(keyCode, this.modifier) && charCode === 0) {
-					docLayer._postKeyboardEvent('input', charCode, unoKeyCode);
+					postEventFn.call(this, 'input', charCode, unoKeyCode);
 				}
 			}
 			else if ((e.type === 'keypress' || e.type === 'compositionend') &&
@@ -344,9 +348,11 @@ L.Map.Keyboard = L.Handler.extend({
 				}
 				if (e.type === 'compositionend') {
 					// Set all keycodes to zero
-					docLayer._postKeyboardEvents('input', compCharCodes, Array.apply(null, Array(compCharCodes.length)).map(Number.prototype.valueOf, 0));
+					for (var idx = 0; i < compCharCodes.length; ++i) {
+						postEventFn.call(this, 'input', compCharCodes[idx], 0);
+					}
 				} else {
-					docLayer._postKeyboardEvent('input', charCode, unoKeyCode);
+					postEventFn.call(this, 'input', charCode, unoKeyCode);
 				}
 
 				this._keyHandled = true;
@@ -375,13 +381,11 @@ L.Map.Keyboard = L.Handler.extend({
 				if (!this._keyHandled && this._bufferedTextInputEvent) {
 					var textInputData = this._bufferedTextInputEvent.originalEvent.data;
 					charCode = e.originalEvent.keyCode;
-					compCharCodes = [];
-					for (var idx = 0; i < textInputData.length; i++) {
-						compCharCodes.push(textInputData[idx].charCodeAt());
+					for (idx = 0; i < textInputData.length; i++) {
+						postEventFn.call(this, 'input', textInputData[idx].charCodeAt(), 0);
 					}
-					docLayer._postKeyboardEvents('input', compCharCodes, Array.apply(null, Array(compCharCodes.length)).map(Number.prototype.valueOf, 0));
 				}
-				docLayer._postKeyboardEvent('up', charCode, unoKeyCode);
+				postEventFn.call(this, 'up', charCode, unoKeyCode);
 
 				this._keyHandled = true;
 				this._bufferedTextInputEvent = null;
@@ -407,7 +411,7 @@ L.Map.Keyboard = L.Handler.extend({
 			else if (key in this._panKeys && e.originalEvent.shiftKey &&
 					docLayer._selections.getLayers().length !== 0) {
 				// if there is a selection and the user wants to modify it
-				docLayer._postKeyboardEvent('input', charCode, unoKeyCode);
+				postEventFn.call(this, 'input', charCode, unoKeyCode);
 			}
 			else if (key in this._zoomKeys) {
 				map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);
commit c7d268b4a432c06031de8ba7a5027ba9fa52a671
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Sat Dec 23 17:57:00 2017 +0530

    loleaflet: '/' or backspace launches browser-specific actions
    
    Make the canvas contentEditable which prevents such actions from being
    invoked. Other alternative would be to add a dummy text field but this
    seems to do the work as well.
    
    Change-Id: I8d39f06b02959459e0beeebad2eefcd8e9e00d9d

diff --git a/loleaflet/dist/loleaflet.css b/loleaflet/dist/loleaflet.css
index d97fc008..5230e2df 100644
--- a/loleaflet/dist/loleaflet.css
+++ b/loleaflet/dist/loleaflet.css
@@ -349,5 +349,6 @@ body {
 }
 
 .lokdialog_canvas {
+        cursor: default;
         display: block; /* required to remove all borders around canvas element */
 }
diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index 5c09528e..3e23fa6a 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -189,6 +189,7 @@ L.Control.LokDialog = L.Control.extend({
 		dialogCanvas.width = width;
 		dialogCanvas.height = height;
 		dialogCanvas.tabIndex = '0';
+		dialogCanvas.contentEditable = true;
 		dialogCanvas.id = strDlgId + '-canvas';
 
 		var that = this;
commit a46486b9e8742153c8e52addc1a8a071627f43cb
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Sat Dec 23 16:12:18 2017 +0530

    Clean up; use Leaflet DomUtil API wherever possible
    
    Not possible to use in all the cases while keeping the behavior same.
    Need further investigation.
    
    Also rearrange the API a bit in preparation to use the common
    Map.Keyboard.js handler to handle key events for both dialog and the
    document.
    
    Change-Id: Ifd4ba2a9c1cdda50eb9c41ee43c7f883d71f65b1

diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index c89550ee..5c09528e 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -39,12 +39,14 @@ L.Control.LokDialog = L.Control.extend({
 			$('#' + this._toDlgPrefix(dialogId)).length > 0;
 	},
 
+	// given a prefixed dialog id like 'lokdialog-323', gives a raw id, 323
 	_toRawDlgId: function(dialogId) {
 		if (typeof(dialogId) === 'string')
 			return parseInt(dialogId.replace(this.dialogIdPrefix, ''));
 		return dialogId;
 	},
 
+	// converts a raw dialog id like 432, to 'lokdialog-432'
 	_toDlgPrefix: function(id) {
 		return this.dialogIdPrefix + id;
 	},
@@ -85,16 +87,13 @@ L.Control.LokDialog = L.Control.extend({
 	_onDialogMsg: function(e) {
 		e.id = parseInt(e.id);
 		var strDlgId = this._toDlgPrefix(e.id);
+
 		if (e.action === 'created') {
 			var width = parseInt(e.size.split(',')[0]);
 			var height = parseInt(e.size.split(',')[1]);
 			if (e.winType === 'dialog') {
 				this._launchDialog(this._toDlgPrefix(e.id), width, height, e.title);
 				this._sendPaintWindow(e.id, this._createRectStr(e.id));
-				if (e.title) {
-					this._dialogs[e.id].title = e.title;
-					$('#' + strDlgId).dialog('option', 'title', e.title);
-				}
 			} else if (e.winType === 'child') {
 				if (!this._isOpen(e.parentId))
 					return;
@@ -128,8 +127,6 @@ L.Control.LokDialog = L.Control.extend({
 		} else if (e.action === 'size_changed') {
 			width = parseInt(e.size.split(',')[0]);
 			height = parseInt(e.size.split(',')[1]);
-
-			strDlgId = this._toDlgPrefix(e.id);
 			// FIXME: we don't really have to destroy and launch the dialog again but do it for
 			// now because the size sent to us previously in 'created' cb is not correct
 			$('#' + strDlgId).remove();
@@ -142,10 +139,12 @@ L.Control.LokDialog = L.Control.extend({
 				var y = parseInt(rectangle[1]);
 				height = parseInt(rectangle[3]);
 
-				$('#' + strDlgId + '-cursor').css({height: height});
-				// set the position of the lokdialog-cursor
-				$(this._dialogs[e.id].cursor).css({left: x, top: y});
-				$('#' + strDlgId + '-cursor').css({display: this._dialogs[e.id].cursorVisible ? 'block' : 'none'});
+				var dialogCursor = L.DomUtil.get(strDlgId + '-cursor');
+				L.DomUtil.setStyle(dialogCursor, 'height', height + 'px');
+				L.DomUtil.setStyle(dialogCursor, 'display', this._dialogs[e.id].cursorVisible ? 'block' : 'none');
+				// set the position of the cursor container element
+				L.DomUtil.setStyle(this._dialogs[e.id].cursor, 'left', x + 'px');
+				L.DomUtil.setStyle(this._dialogs[e.id].cursor, 'top', y + 'px');
 			}
 		} else if (e.action === 'title_changed') {
 			if (e.title && this._dialogs[parseInt(e.id)]) {
@@ -180,12 +179,20 @@ L.Control.LokDialog = L.Control.extend({
 	},
 
 	_launchDialog: function(strDlgId, width, height, title) {
-		var canvas = '<div class="lokdialog" style="padding: 0px; margin: 0px; overflow: hidden;" id="' + strDlgId + '">' +
-		    '<canvas class="lokdialog_canvas" tabindex="0" id="' + strDlgId + '-canvas" width="' + width + 'px" height="' + height + 'px"></canvas>' +
-		    '</div>';
-		$(document.body).append(canvas);
+		var dialogContainer = L.DomUtil.create('div', 'lokdialog', document.body);
+		L.DomUtil.setStyle(dialogContainer, 'padding', '0px');
+		L.DomUtil.setStyle(dialogContainer, 'margin', '0px');
+		L.DomUtil.setStyle(dialogContainer, 'overflow', 'hidden');
+		dialogContainer.id = strDlgId;
+
+		var dialogCanvas = L.DomUtil.create('canvas', 'lokdialog_canvas', dialogContainer);
+		dialogCanvas.width = width;
+		dialogCanvas.height = height;
+		dialogCanvas.tabIndex = '0';
+		dialogCanvas.id = strDlgId + '-canvas';
+
 		var that = this;
-		$('#' + strDlgId).dialog({
+		$(dialogContainer).dialog({
 			width: width,
 			title: title ? title : '',
 			modal: false,
@@ -207,27 +214,18 @@ L.Control.LokDialog = L.Control.extend({
 		// don't make 'TAB' focus on this button; we want to cycle focus in the lok dialog with each TAB
 		$('.lokdialog_container button.ui-dialog-titlebar-close').attr('tabindex', '-1').blur();
 
-		$('#' + strDlgId + '-canvas').on('mousedown', function(e) {
+		L.DomEvent.on(dialogCanvas, 'mousedown mouseup', function(e) {
 			var buttons = 0;
 			buttons |= e.button === map['mouse'].JSButtons.left ? map['mouse'].LOButtons.left : 0;
 			buttons |= e.button === map['mouse'].JSButtons.middle ? map['mouse'].LOButtons.middle : 0;
 			buttons |= e.button === map['mouse'].JSButtons.right ? map['mouse'].LOButtons.right : 0;
-			var modifier = 0;
-			that._postWindowMouseEvent('buttondown', strDlgId, e.offsetX, e.offsetY, 1, buttons, modifier);
-		});
-		$('#' + strDlgId + '-canvas').on('mouseup', function(e) {
-			var buttons = 0;
-			buttons |= e.button === map['mouse'].JSButtons.left ? map['mouse'].LOButtons.left : 0;
-			buttons |= e.button === map['mouse'].JSButtons.middle ? map['mouse'].LOButtons.middle : 0;
-			buttons |= e.button === map['mouse'].JSButtons.right ? map['mouse'].LOButtons.right : 0;
-			var modifier = 0;
-			that._postWindowMouseEvent('buttonup', strDlgId, e.offsetX, e.offsetY, 1, buttons, modifier);
-		});
-		$('#' + strDlgId + '-canvas').on('keyup keypress keydown', function(e) {
-			e.strDlgId = strDlgId;
-			that._handleDialogKeyEvent(e);
-		});
-		$('#' + strDlgId + '-canvas').on('contextmenu', function() {
+			var lokEventType = e.type.replace('mouse', 'button');
+			this._postWindowMouseEvent(lokEventType, this._toRawDlgId(strDlgId), e.offsetX, e.offsetY, 1, buttons, 0);
+		}, this);
+		L.DomEvent.on(dialogCanvas, 'keyup keypress keydown', function(e) {
+			this._handleDialogKeyEvent(e, this._toRawDlgId(strDlgId));
+		}, this);
+		L.DomEvent.on(dialogCanvas, 'contextmenu', function() {
 			return false;
 		});
 
@@ -235,48 +233,49 @@ L.Control.LokDialog = L.Control.extend({
 	},
 
 	_postWindowMouseEvent: function(type, winid, x, y, count, buttons, modifier) {
-		this._map._socket.sendMessage('windowmouse id=' + this._toRawDlgId(winid) +  ' type=' + type +
+		this._map._socket.sendMessage('windowmouse id=' + winid +  ' type=' + type +
 		                              ' x=' + x + ' y=' + y + ' count=' + count +
 		                              ' buttons=' + buttons + ' modifier=' + modifier);
 	},
 
-	_postWindowKeyboardEvent: function(type, winid, charcode, keycode) {
-		this._map._socket.sendMessage('windowkey id=' + this._toRawDlgId(winid) + ' type=' + type +
+	_postWindowKeyboardEvent: function(winid, type, charcode, keycode) {
+		this._map._socket.sendMessage('windowkey id=' + winid + ' type=' + type +
 		                              ' char=' + charcode + ' key=' + keycode);
 	},
 
-	_handleDialogKeyEvent: function(e) {
+	_handleDialogKeyEvent: function(e, winid) {
+		var docLayer = this._map._docLayer;
 		this.modifier = 0;
-		var shift = e.originalEvent.shiftKey ? this._map['keyboard'].keyModifier.shift : 0;
-		var ctrl = e.originalEvent.ctrlKey ? this._map['keyboard'].keyModifier.ctrl : 0;
-		var alt = e.originalEvent.altKey ? this._map['keyboard'].keyModifier.alt : 0;
-		var cmd = e.originalEvent.metaKey ? this._map['keyboard'].keyModifier.ctrl : 0;
+		var shift = e.shiftKey ? this._map['keyboard'].keyModifier.shift : 0;
+		var ctrl = e.ctrlKey ? this._map['keyboard'].keyModifier.ctrl : 0;
+		var alt = e.altKey ? this._map['keyboard'].keyModifier.alt : 0;
+		var cmd = e.metaKey ? this._map['keyboard'].keyModifier.ctrl : 0;
 		this.modifier = shift | ctrl | alt | cmd;
 
-		var charCode = e.originalEvent.charCode;
-		var keyCode = e.originalEvent.keyCode;
+		var charCode = e.charCode;
+		var keyCode = e.keyCode;
 		var unoKeyCode = this._map['keyboard']._toUNOKeyCode(keyCode);
 
 		if (this.modifier) {
 			unoKeyCode |= this.modifier;
 			if (e.type !== 'keyup') {
-				this._postWindowKeyboardEvent('input', e.strDlgId, charCode, unoKeyCode);
+				this._postWindowKeyboardEvent(winid, 'input', charCode, unoKeyCode);
 				return;
 			}
 		}
 
 		if (e.type === 'keydown' && this._map['keyboard'].handleOnKeyDownKeys[keyCode]) {
-			this._postWindowKeyboardEvent('input', e.strDlgId, charCode, unoKeyCode);
+			this._postWindowKeyboardEvent(winid, 'input', charCode, unoKeyCode);
 		}
 		else if (e.type === 'keypress' && (!this._map['keyboard'].handleOnKeyDownKeys[keyCode] || charCode !== 0)) {
 			if (charCode === keyCode && charCode !== 13) {
 				keyCode = 0;
 				unoKeyCode = this._map['keyboard']._toUNOKeyCode(keyCode);
 			}
-			this._postWindowKeyboardEvent('input', e.strDlgId, charCode, unoKeyCode);
+			this._postWindowKeyboardEvent(winid, 'input', charCode, unoKeyCode);
 		}
 		else if (e.type === 'keyup') {
-			this._postWindowKeyboardEvent('up', e.strDlgId, charCode, unoKeyCode);
+			this._postWindowKeyboardEvent(winid, 'up', charCode, unoKeyCode);
 		}
 	},
 
@@ -351,40 +350,33 @@ L.Control.LokDialog = L.Control.extend({
 	},
 
 	_removeDialogChild: function(id) {
+		if (typeof id === 'number')
+			id = this._toDlgPrefix(id);
 		$('#' + id + '-floating').remove();
 	},
 
 	_createDialogChild: function(childId, dialogId, top, left) {
 		var strDlgId = this._toDlgPrefix(dialogId);
-		var floatingCanvas = '<canvas class="lokdialogchild-canvas" id="' + strDlgId + '-floating"></canvas>';
-		$('#' + strDlgId).append(floatingCanvas);
-		$('#' + strDlgId + '-floating').css({position: 'absolute', left: left, top: top});
+		var dialogContainer = L.DomUtil.get(strDlgId);
+		var floatingCanvas = L.DomUtil.create('canvas', 'lokdialogchild-canvas', dialogContainer);
+		floatingCanvas.id = strDlgId + '-floating';
+		L.DomUtil.setStyle(floatingCanvas, 'position', 'absolute');
+		L.DomUtil.setStyle(floatingCanvas, 'left', left + 'px'); // yes, it's necessary to append 'px'
+		L.DomUtil.setStyle(floatingCanvas, 'top', top + 'px');
 
-		var that = this;
 		// attach events
-		$('#' + strDlgId + '-floating').on('mousedown', function(e) {
+		L.DomEvent.on(floatingCanvas, 'mousedown mouseup', function(e) {
 			var buttons = 0;
 			buttons |= e.button === map['mouse'].JSButtons.left ? map['mouse'].LOButtons.left : 0;
 			buttons |= e.button === map['mouse'].JSButtons.middle ? map['mouse'].LOButtons.middle : 0;
 			buttons |= e.button === map['mouse'].JSButtons.right ? map['mouse'].LOButtons.right : 0;
-			var modifier = 0;
-			that._postWindowMouseEvent('buttondown', childId, e.offsetX, e.offsetY, 1, buttons, modifier);
-		});
-
-		$('#' + strDlgId + '-floating').on('mouseup', function(e) {
-			var buttons = 0;
-			buttons |= e.button === map['mouse'].JSButtons.left ? map['mouse'].LOButtons.left : 0;
-			buttons |= e.button === map['mouse'].JSButtons.middle ? map['mouse'].LOButtons.middle : 0;
-			buttons |= e.button === map['mouse'].JSButtons.right ? map['mouse'].LOButtons.right : 0;
-			var modifier = 0;
-			that._postWindowMouseEvent('buttonup', childId, e.offsetX, e.offsetY, 1, buttons, modifier);
-		});
-
-		$('#' + strDlgId + '-floating').on('mousemove', function(e) {
-			that._postWindowMouseEvent('move', childId, e.offsetX, e.offsetY, 1, 0, 0);
-		});
-
-		$('#' + strDlgId + '-floating').on('contextmenu', function() {
+			var lokEventType = e.type.replace('mouse', 'button');
+			this._postWindowMouseEvent(lokEventType, childId, e.offsetX, e.offsetY, 1, buttons, 0);
+		}, this);
+		L.DomEvent.on(floatingCanvas, 'mousemove', function(e) {
+			this._postWindowMouseEvent('move', childId, e.offsetX, e.offsetY, 1, 0, 0);
+		}, this);
+		L.DomEvent.on(floatingCanvas, 'contextmenu', function() {
 			return false;
 		});
 	}
commit c257493e3056d92bb1f2a339de2e88aaa3109f7a
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Fri Dec 15 20:05:27 2017 +0530

    lokdialog: Handle 'title' field in the 'created' cb
    
    While at it, move the title, width, height properties to this._dialogs
    object as they are dialog specific.
    
    Change-Id: Ibffcc57b0af210150690b2baf45d627baf5897fb
    Reviewed-on: https://gerrit.libreoffice.org/46560
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>
    (cherry picked from commit 192a1f87024c97d4dda031a45cce4d4900416217)

diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index b710950d..c89550ee 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -24,6 +24,7 @@ L.Control.LokDialog = L.Control.extend({
 	},
 
 	_getParentDialog: function(id) {
+		id = parseInt(id);
 		for (var winId in this._dialogs) {
 			if (this._dialogs[winId].childid && this._dialogs[winId].childid === id) {
 				return winId;
@@ -39,7 +40,9 @@ L.Control.LokDialog = L.Control.extend({
 	},
 
 	_toRawDlgId: function(dialogId) {
-		return dialogId.replace(this.dialogIdPrefix, '');
+		if (typeof(dialogId) === 'string')
+			return parseInt(dialogId.replace(this.dialogIdPrefix, ''));
+		return dialogId;
 	},
 
 	_toDlgPrefix: function(id) {
@@ -48,11 +51,11 @@ L.Control.LokDialog = L.Control.extend({
 
 	// Create a rectangle string of form "x,y,width,height"
 	// if params are missing, assumes 0,0,dialog width, dialog height
-	_createRectStr: function(x, y, width, height) {
+	_createRectStr: function(id, x, y, width, height) {
 		if (!width)
-			width = this._width;
+			width = this._dialogs[parseInt(id)].width;
 		if (!height)
-			height = this._height;
+			height = this._dialogs[parseInt(id)].height;
 		if (!x)
 			x = 0;
 		if (!y)
@@ -80,15 +83,18 @@ L.Control.LokDialog = L.Control.extend({
 	},
 
 	_onDialogMsg: function(e) {
+		e.id = parseInt(e.id);
 		var strDlgId = this._toDlgPrefix(e.id);
 		if (e.action === 'created') {
 			var width = parseInt(e.size.split(',')[0]);
 			var height = parseInt(e.size.split(',')[1]);
 			if (e.winType === 'dialog') {
-				this._width = width;
-				this._height = height;
-				this._launchDialog(this._toDlgPrefix(e.id));
-				this._sendPaintWindow(e.id, this._createRectStr());
+				this._launchDialog(this._toDlgPrefix(e.id), width, height, e.title);
+				this._sendPaintWindow(e.id, this._createRectStr(e.id));
+				if (e.title) {
+					this._dialogs[e.id].title = e.title;
+					$('#' + strDlgId).dialog('option', 'title', e.title);
+				}
 			} else if (e.winType === 'child') {
 				if (!this._isOpen(e.parentId))
 					return;
@@ -104,7 +110,7 @@ L.Control.LokDialog = L.Control.extend({
 				this._dialogs[parentId].childx = left;
 				this._dialogs[parentId].childy = top;
 				this._createDialogChild(e.id, parentId, top, left);
-				this._sendPaintWindow(e.id, this._createRectStr(0, 0, width, height));
+				this._sendPaintWindow(e.id, this._createRectStr(null, 0, 0, width, height));
 			}
 		} else if (e.action === 'invalidate') {
 			var parent = this._getParentDialog(e.id);
@@ -116,20 +122,19 @@ L.Control.LokDialog = L.Control.extend({
 					return;
 
 				if (!rectangle)
-					rectangle = '0,0,' + this._width + ',' + this._height;
+					rectangle = '0,0,' + this._dialogs[e.id].width + ',' + this._dialogs[e.id].height;
 			}
 			this._sendPaintWindow(e.id, rectangle);
 		} else if (e.action === 'size_changed') {
-			this._width = parseInt(e.size.split(',')[0]);
-			this._height = parseInt(e.size.split(',')[1]);
+			width = parseInt(e.size.split(',')[0]);
+			height = parseInt(e.size.split(',')[1]);
 
 			strDlgId = this._toDlgPrefix(e.id);
 			// FIXME: we don't really have to destroy and launch the dialog again but do it for
 			// now because the size sent to us previously in 'created' cb is not correct
 			$('#' + strDlgId).remove();
-			this._launchDialog(strDlgId);
-			$('#' + strDlgId).dialog('option', 'title', this._title);
-			this._sendPaintWindow(e.id, this._createRectStr());
+			this._launchDialog(strDlgId, width, height, this._dialogs[parseInt(e.id)].title);
+			this._sendPaintWindow(e.id, this._createRectStr(e.id));
 		} else if (e.action === 'cursor_invalidate') {
 			if (this._isOpen(e.id) && !!e.rectangle) {
 				rectangle = e.rectangle.split(',');
@@ -143,8 +148,10 @@ L.Control.LokDialog = L.Control.extend({
 				$('#' + strDlgId + '-cursor').css({display: this._dialogs[e.id].cursorVisible ? 'block' : 'none'});
 			}
 		} else if (e.action === 'title_changed') {
-			this._title = e.title;
-			$('#' + strDlgId).dialog('option', 'title', e.title);
+			if (e.title && this._dialogs[parseInt(e.id)]) {
+				this._dialogs[parseInt(e.id)].title = e.title;
+				$('#' + strDlgId).dialog('option', 'title', e.title);
+			}
 		} else if (e.action === 'cursor_visible') {
 			this._dialogs[e.id].cursorVisible = e.visible === 'true';
 			if (this._dialogs[e.id].cursorVisible)
@@ -172,15 +179,15 @@ L.Control.LokDialog = L.Control.extend({
 		L.DomUtil.addClass(cursor, 'blinking-cursor');
 	},
 
-	_launchDialog: function(strDlgId) {
+	_launchDialog: function(strDlgId, width, height, title) {
 		var canvas = '<div class="lokdialog" style="padding: 0px; margin: 0px; overflow: hidden;" id="' + strDlgId + '">' +
-		    '<canvas class="lokdialog_canvas" tabindex="0" id="' + strDlgId + '-canvas" width="' + this._width + 'px" height="' + this._height + 'px"></canvas>' +
+		    '<canvas class="lokdialog_canvas" tabindex="0" id="' + strDlgId + '-canvas" width="' + width + 'px" height="' + height + 'px"></canvas>' +
 		    '</div>';
 		$(document.body).append(canvas);
 		var that = this;
 		$('#' + strDlgId).dialog({
-			width: this._width,
-			title: 'LOK Dialog', // TODO: Get the 'real' dialog title from the backend
+			width: width,
+			title: title ? title : '',
 			modal: false,
 			closeOnEscape: true,
 			resizable: false,
@@ -190,7 +197,12 @@ L.Control.LokDialog = L.Control.extend({
 			}
 		});
 
-		this._dialogs[this._toRawDlgId(strDlgId)] = { open: true };
+		this._dialogs[this._toRawDlgId(strDlgId)] = {
+			open: true,
+			width: width,
+			height: height,
+			title: title
+		};
 
 		// don't make 'TAB' focus on this button; we want to cycle focus in the lok dialog with each TAB
 		$('.lokdialog_container button.ui-dialog-titlebar-close').attr('tabindex', '-1').blur();
commit bc682b2331a4271572280ef54924e558d573d606
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Sat Dec 23 15:57:04 2017 +0530

    Document these helpful function
    
    Change-Id: I70b439223c107e88ca38acb7b0ed814af814a22a

diff --git a/loleaflet/reference.html b/loleaflet/reference.html
index a1b4f3a2..7894f2a7 100644
--- a/loleaflet/reference.html
+++ b/loleaflet/reference.html
@@ -7030,6 +7030,16 @@ Popups will also be automatically opened when the layer is clicked on and closed
 		<td>Returns the value for a certain style attribute on an element, including computed values or values set through CSS.</td>
 	</tr>
 	<tr>
+		<td><code><b>setStyle</b>(
+			<nobr><HTMLElement> <i>el</i></nobr>,
+			<nobr><String> <i>style</i> )</nobr>
+			<nobr><String> <i>value</i> )</nobr>
+		</code></td>
+
+		<td><code>String</code></td>
+		<td>Sets the value for a certain style attribute on an element, including computed values or values set through CSS.</td>
+	</tr>
+	<tr>
 		<td><code><b>create</b>(
 			<nobr><String> <i>tagName</i></nobr>,
 			<nobr><String> <i>className</i></nobr>,
@@ -7041,6 +7051,18 @@ Popups will also be automatically opened when the layer is clicked on and closed
 		<td>Creates an element with <code>tagName</code>, sets the <code>className</code>, and optionally appends it to <code>container</code> element.</td>
 	</tr>
 	<tr>
+		<td><code><b>createWithId</b>(
+			<nobr><String> <i>tagName</i></nobr>,
+			<nobr><String> <i>Id</i></nobr>,
+			<nobr><HTMLElement> <i>container?</i> )</nobr>
+		</code></td>
+
+		<td><code>HTMLElement</code></td>
+
+		<td>Creates an element with <code>tagName</code>, sets the <code>id</code>, and optionally appends it to <code>container</code> element.</td>
+	</tr>
+
+	<tr>
 		<td><code><b>remove</b>(
 			<nobr><HTMLElement> <i>el</i> )</nobr>
 		</code></td>
commit 993bda50aacf0fdbe0e55166200a47be72257735
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Sat Dec 23 15:55:48 2017 +0530

    Possibly leftover from incomplete merge conflict
    
    Change-Id: I60dbb7a81db10a399ba98cd0c8589ca4a975bcec

diff --git a/loleaflet/reference.html b/loleaflet/reference.html
index 9a1f39ae..a1b4f3a2 100644
--- a/loleaflet/reference.html
+++ b/loleaflet/reference.html
@@ -7004,7 +7004,6 @@ Popups will also be automatically opened when the layer is clicked on and closed
 
 <p>Utility functions to work with the DOM tree, used by Leaflet internally.</p>
 
->>>>>>> more layer docs
 <h3>Methods</h3>
 
 <table data-id='domutil'>


More information about the Libreoffice-commits mailing list