[Libreoffice-commits] online.git: loleaflet/src

Henry Castro hcastro at collabora.com
Fri Feb 17 18:21:57 UTC 2017


 loleaflet/src/layer/AnnotationManager.js |  120 +++++++++++++++----------------
 loleaflet/src/layer/marker/Annotation.js |    9 +-
 2 files changed, 65 insertions(+), 64 deletions(-)

New commits:
commit 450f8342483c873c6abd0cbc1c8bf774bb44d039
Author: Henry Castro <hcastro at collabora.com>
Date:   Fri Feb 17 14:20:35 2017 -0400

    loleaflet: simplify annotation operations
    
    LO Core sends a list sorted by anchor positions, so no need to
    have an additional anchor array list in client side

diff --git a/loleaflet/src/layer/AnnotationManager.js b/loleaflet/src/layer/AnnotationManager.js
index 26d0a76..2abf86f 100644
--- a/loleaflet/src/layer/AnnotationManager.js
+++ b/loleaflet/src/layer/AnnotationManager.js
@@ -11,8 +11,7 @@ L.AnnotationManager = L.Class.extend({
 
 	initialize: function (map) {
 		this._map = map;
-		this._items = {};
-		this._anchors = [];
+		this._items = [];
 		this._selected = {};
 		this._arrow = L.polyline([], {color: 'darkblue', weight: 1});
 		this._map.on('AnnotationCancel', this._onAnnotationCancel, this);
@@ -26,13 +25,13 @@ L.AnnotationManager = L.Class.extend({
 				modify: {
 					name: _('Modify'),
 					callback: function (key, options) {
-						that._onAnnotationModify.call(that, options.$trigger.attr('id'));
+						that._onAnnotationModify.call(that, options.$trigger.get(0).annotation);
 					}
 				},
 				remove: {
 					name: _('Remove'),
 					callback: function (key, options) {
-						that._onAnnotationRemove.call(that, options.$trigger.attr('id'));
+						that._onAnnotationRemove.call(that, options.$trigger.get(0).annotation._data.id);
 					}
 				}
 			}
@@ -44,8 +43,7 @@ L.AnnotationManager = L.Class.extend({
 			this._map.removeLayer(this._items[key]);
 		}
 		this._map.removeLayer(this._arrow);
-		this._items = {};
-		this._anchors = [];
+		this._items = [];
 		this._selected = {};
 	},
 
@@ -55,12 +53,8 @@ L.AnnotationManager = L.Class.extend({
 		for (var index in comments) {
 			comment = comments[index];
 			comment.anchorPos = L.LOUtil.stringToPoint(comment.anchorPos);
-			this._items[comment.id] = L.annotation(this._map.options.maxBounds.getSouthEast(), comment).addTo(this._map);
-			this._anchors.push({anchor: comment.anchorPos, id: comment.id});
+			this._items.push(L.annotation(this._map.options.maxBounds.getSouthEast(), comment).addTo(this._map));
 		}
-		this._anchors.sort(function(a, b) {
-			return Math.abs(a.anchor.y) - Math.abs(b.anchor.y);
-		});
 		this.layout();
 	},
 
@@ -70,9 +64,29 @@ L.AnnotationManager = L.Class.extend({
 		this.layout();
 	},
 
-	select: function (id) {
+	getItem: function (id) {
+		for (var iterator in this._items) {
+			if (this._items[iterator]._data.id === id) {
+				return this._items[iterator];
+			}
+		}
+		return null;
+	},
+
+	removeItem: function (id) {
+		var annotation;
+		for (var iterator in this._items) {
+			annotation = this._items[iterator];
+			if (annotation._data.id === id) {
+				this._items.splice(iterator, 1);
+				return annotation;
+			}
+		}
+	},
+
+	select: function (obj) {
 		var topRight = this._map.project(this._map.options.maxBounds.getNorthEast());
-		var annotation = this._items[id];
+		var annotation = obj instanceof L.Annotation ? obj : this.getItem(obj);
 		var point0, point1, point2, point3;
 		if (!this._selected.annotation || this._selected.annotation._data.id !== annotation._data.id) {
 			this._selected.annotation = annotation;
@@ -101,8 +115,8 @@ L.AnnotationManager = L.Class.extend({
 			this._selected.bounds = bounds;
 		}
 
-		for (var itAnchor in this._anchors) {
-			annotation = this._items[this._anchors[itAnchor].id];
+		for (var iterator in this._items) {
+			annotation = this._items[iterator];
 			if (annotation === this._selected.annotation) {
 				continue;
 			}
@@ -151,68 +165,65 @@ L.AnnotationManager = L.Class.extend({
 	},
 
 	add: function (comment) {
-		this._items[comment.id] = L.annotation(this._map.options.maxBounds.getSouthEast(), comment).addTo(this._map).edit();
-		this._anchors.push({anchor: comment.anchorPos, id: comment.id});
-		this._anchors.sort(function(a, b) {
-			return Math.abs(a.anchor.y) - Math.abs(b.anchor.y);
+		var annotation = L.annotation(this._map.options.maxBounds.getSouthEast(), comment).addTo(this._map).edit();
+		this._items.push(annotation);
+		this._items.sort(function(a, b) {
+			return Math.abs(a._data.anchorPos.y) - Math.abs(b._data.anchorPos.y) ||
+			       Math.abs(a._data.anchorPos.x) - Math.abs(b._data.anchorPos.x);
 		});
-		this.select(comment.id);
-		this._items[comment.id].focus();
+		this.select(annotation);
+		annotation.focus();
 	},
 
 	remove: function (id) {
-		this._removeAnchor(id);
+		this._map.removeLayer(this.removeItem(id));
 		this.unselect();
-		this._map.removeLayer(this._items[id]);
-		delete this._items[id];
 	},
 
 	onACKComment: function (textMsg) {
-		textMsg = textMsg.substring('comment:'.length + 1);
-		var obj = JSON.parse(textMsg);
+		var obj = JSON.parse(textMsg.substring('comment:'.length + 1));
+		obj.comment.anchorPos = L.LOUtil.stringToPoint(obj.comment.anchorPos);
 
 		if (obj.comment.action === 'Add') {
-			if (this._items['new']) {
+			var added = this.getItem('new');
+			if (added) {
 				delete obj.comment.action;
-				obj.comment.anchorPos = L.LOUtil.stringToPoint(obj.comment.anchorPos);
-				this._items[obj.comment.id] = this._items['new'];
-				this._items[obj.comment.id]._data = obj.comment;
-				this._items['new'] = null;
-				this._removeAnchor('new');
-				this._anchors.push({anchor: obj.comment.anchorPos, id: obj.comment.id});
-				this._anchors.sort(function(a, b) {
-					return Math.abs(a.anchor.y) - Math.abs(b.anchor.y);
+				added._data = obj.comment;
+				this._items.sort(function(a, b) {
+					return Math.abs(a._data.anchorPos.y) - Math.abs(b._data.anchorPos.y) ||
+					       Math.abs(a._data.anchorPos.x) - Math.abs(b._data.anchorPos.x);
 				});
-				this._items[obj.comment.id]._updateContent();
+				added._updateContent();
 				this.layout();
 			}
 
 		} else if (obj.comment.action === 'Remove') {
-			if (this._items[obj.comment.id]) {
+			if (this.getItem(obj.comment.id)) {
 				// something wrong here
 			}
 		} else if (obj.comment.action === 'Modify') {
-			if (this._items[obj.comment.id] && this._items[obj.comment.id].text !== obj.comment.text) {
+			var modified = this.getItem(obj.comment.id);
+			if (modified && modified.text !== obj.comment.text) {
 				// something wrong here
 			}
 		}
 	},
 
 	_onAnnotationCancel: function (e) {
-		if (e.id === 'new') {
-			this.remove(e.id);
+		if (e.annotation._data.id === 'new') {
+			this.remove(e.annotation._data.id);
 		}
 		this._map.focus();
 	},
 
 	_onAnnotationClick: function (e) {
-		this.select(e.id);
+		this.select(e.annotation);
 	},
 
-	_onAnnotationModify: function (id) {
-		this._items[id].edit();
-		this.select(id);
-		this._items[id].focus();
+	_onAnnotationModify: function (annotation) {
+		annotation.edit();
+		this.select(annotation);
+		annotation.focus();
 	},
 
 	_onAnnotationRemove: function (id) {
@@ -228,15 +239,15 @@ L.AnnotationManager = L.Class.extend({
 	},
 
 	_onAnnotationSave: function (e) {
-		if (e.id === 'new') {
+		if (e.annotation._data.id === 'new') {
 			var comment = {
 				Text: {
 					type: 'string',
-					value: this._items[e.id]._data.text
+					value: e.annotation._data.text
 				},
 				Author: {
 					type: 'string',
-					value: this._items[e.id]._data.author
+					value: e.annotation._data.author
 				}
 			};
 			this._map.sendUnoCommand('.uno:InsertAnnotation', comment);
@@ -244,26 +255,17 @@ L.AnnotationManager = L.Class.extend({
 			var comment = {
 				Id: {
 					type: 'long',
-					value: e.id
+					value: e.annotation._data.id
 				},
 				Text: {
 					type: 'string',
-					value: this._items[e.id]._data.text
+					value: e.annotation._data.text
 				}
 			};
 			this._map.sendUnoCommand('.uno:EditAnnotation', comment);
 		}
 		this.unselect();
 		this._map.focus();
-	},
-
-	_removeAnchor: function (id) {
-		for (var index in this._anchors) {
-			if (this._anchors[index].id === id) {
-				this._anchors.splice(index, 1);
-				break;
-			}
-		}
 	}
 });
 
diff --git a/loleaflet/src/layer/marker/Annotation.js b/loleaflet/src/layer/marker/Annotation.js
index 53bb993..9ff0942 100644
--- a/loleaflet/src/layer/marker/Annotation.js
+++ b/loleaflet/src/layer/marker/Annotation.js
@@ -80,9 +80,9 @@ L.Annotation = L.Layer.extend({
 
 		L.DomEvent.disableScrollPropagation(this._container);
 		this._contentNode = L.DomUtil.create('div', 'loleaflet-annotation-content', wrapper);
+		this._contentNode.annotation = this;
 		this._editNode = L.DomUtil.create('div', 'loleaflet-annotation-edit', wrapper);
 
-		this._contentNode.setAttribute('id', this._data.id);
 		this._contentText = L.DomUtil.create('div', '', this._contentNode);
 		this._contentAuthor = L.DomUtil.create('div', '', this._contentNode);
 		this._contentDate = L.DomUtil.create('div', '', this._contentNode);
@@ -115,19 +115,19 @@ L.Annotation = L.Layer.extend({
 		L.DomEvent.stopPropagation(e);
 		this._editText.value = this._contentText.innerHTML;
 		this.show();
-		this._map.fire('AnnotationCancel', {id: this._data.id});
+		this._map.fire('AnnotationCancel', {annotation: this});
 	},
 
 	_onMouseClick: function (e) {
 		L.DomEvent.stopPropagation(e);
-		this._map.fire('AnnotationClick', {id: this._data.id});
+		this._map.fire('AnnotationClick', {annotation: this});
 	},
 
 	_onSaveClick: function (e) {
 		L.DomEvent.stopPropagation(e);
 		this._data.text = this._contentText.innerHTML = this._editText.value;
 		this.show();
-		this._map.fire('AnnotationSave', {id: this._data.id});
+		this._map.fire('AnnotationSave', {annotation: this});
 	},
 
 	_updateLayout: function () {
@@ -141,7 +141,6 @@ L.Annotation = L.Layer.extend({
 	},
 
 	_updateContent: function () {
-		this._contentNode.setAttribute('id', this._data.id);
 		this._contentText.innerHTML = this._editText.innerHTML = this._data.text;
 		this._contentAuthor.innerHTML = this._editAuthor.innerHTML = this._data.author;
 		this._contentDate.innerHTML = this._editDate.innerHTML = this._data.dateTime;


More information about the Libreoffice-commits mailing list