[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