loleaflet/src/layer/AnnotationManager.js |   73 +++++++++++++++++++++++++++++--
 loleaflet/src/layer/marker/Annotation.js |    6 ++
 loleaflet/src/layer/tile/TileLayer.js    |    3 +
 3 files changed, 77 insertions(+), 5 deletions(-)

New commits:
commit 4b5c667d239f0775b9775b58bc7fb94a49d67670
Author: Henry Castro <hcas...@collabora.com>
Date:   Wed Feb 15 17:47:46 2017 -0400

    loleaflet: sync annotations with server side

diff --git a/loleaflet/src/layer/AnnotationManager.js 
b/loleaflet/src/layer/AnnotationManager.js
index 3fef9d1..92ee3f6 100644
--- a/loleaflet/src/layer/AnnotationManager.js
+++ b/loleaflet/src/layer/AnnotationManager.js
@@ -65,7 +65,7 @@ L.AnnotationManager = L.Class.extend({
        },
 
        unselect: function () {
-               this._selected.annotation = null;
+               this._selected = {};
                this._map.removeLayer(this._arrow);
                this.layout();
        },
@@ -74,7 +74,7 @@ L.AnnotationManager = L.Class.extend({
                var topRight = 
this._map.project(this._map.options.maxBounds.getNorthEast());
                var annotation = this._items[id];
                var point0, point1, point2, point3;
-               if (annotation.id !== id) {
+               if (!this._selected.annotation || 
this._selected.annotation._data.id !== annotation._data.id) {
                        this._selected.annotation = annotation;
                        this.layout();
                        point0 = 
this._map._docLayer._twipsToPixels(annotation._data.anchorPos);
@@ -165,13 +165,44 @@ L.AnnotationManager = L.Class.extend({
                this.unselect();
                this._map.removeLayer(this._items[id]);
                delete this._items[id];
-               this._map.focus();
+       },
+
+       onACKComment: function (textMsg) {
+               textMsg = textMsg.substring('comment:'.length + 1);
+               var obj = JSON.parse(textMsg);
+
+               if (obj.comment.action === 'Add') {
+                       if (this._items['new']) {
+                               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);
+                               });
+                               this._items[obj.comment.id]._updateContent();
+                               this.layout();
+                       }
+
+               } else if (obj.comment.action === 'Remove') {
+                       if (this._items[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) {
+                               // something wrong here
+                       }
+               }
        },
 
        _onAnnotationCancel: function (e) {
                if (e.id === 'new') {
                        this.remove(e.id);
                }
+               this._map.focus();
        },
 
        _onAnnotationClick: function (e) {
@@ -185,11 +216,45 @@ L.AnnotationManager = L.Class.extend({
        },
 
        _onAnnotationRemove: function (id) {
+               var comment = {
+                       Id: {
+                               type: 'long',
+                               value: id
+                       }
+               };
+               this._map.sendUnoCommand('.uno:DeleteComment', comment);
                this.remove(id);
+               this._map.focus();
        },
 
        _onAnnotationSave: function (e) {
-               this.layout();
+               if (e.id === 'new') {
+                       var comment = {
+                               Text: {
+                                       type: 'string',
+                                       value: this._items[e.id]._data.text
+                               },
+                               Author: {
+                                       type: 'string',
+                                       value: this._items[e.id]._data.author
+                               }
+                       };
+                       this._map.sendUnoCommand('.uno:InsertAnnotation', 
comment);
+               } else {
+                       var comment = {
+                               Id: {
+                                       type: 'long',
+                                       value: e.id
+                               },
+                               Text: {
+                                       type: 'string',
+                                       value: this._items[e.id]._data.text
+                               }
+                       };
+                       this._map.sendUnoCommand('.uno:EditAnnotation', 
comment);
+               }
+               this.unselect();
+               this._map.focus();
        },
 
        _removeAnchor: function (id) {
diff --git a/loleaflet/src/layer/marker/Annotation.js 
b/loleaflet/src/layer/marker/Annotation.js
index ca6afd4..53bb993 100644
--- a/loleaflet/src/layer/marker/Annotation.js
+++ b/loleaflet/src/layer/marker/Annotation.js
@@ -112,17 +112,20 @@ L.Annotation = L.Layer.extend({
        },
 
        _onCancelClick: function (e) {
+               L.DomEvent.stopPropagation(e);
                this._editText.value = this._contentText.innerHTML;
                this.show();
                this._map.fire('AnnotationCancel', {id: this._data.id});
        },
 
        _onMouseClick: function (e) {
+               L.DomEvent.stopPropagation(e);
                this._map.fire('AnnotationClick', {id: this._data.id});
        },
 
        _onSaveClick: function (e) {
-               this._contentText.innerHTML = this._editText.value;
+               L.DomEvent.stopPropagation(e);
+               this._data.text = this._contentText.innerHTML = 
this._editText.value;
                this.show();
                this._map.fire('AnnotationSave', {id: this._data.id});
        },
@@ -138,6 +141,7 @@ 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;
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 62180dd..6deb46e 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -397,6 +397,9 @@ L.TileLayer = L.GridLayer.extend({
                else if (textMsg.startsWith('graphicviewselection:')) {
                        this._onGraphicViewSelectionMsg(textMsg);
                }
+               else if (textMsg.startsWith('comment:')) {
+                       this._annotations.onACKComment(textMsg);
+               }
        },
 
        toggleTileDebugMode: function() {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to