[Libreoffice-commits] online.git: loleaflet/build loleaflet/dist loleaflet/src
Henry Castro
hcastro at collabora.com
Fri Mar 10 03:00:39 UTC 2017
loleaflet/build/deps.js | 6
loleaflet/dist/loleaflet.css | 60 +++++++++
loleaflet/src/control/Control.Scroll.Annotation.js | 62 +++++++++
loleaflet/src/layer/marker/Annotation.js | 5
loleaflet/src/layer/tile/ImpressTileLayer.js | 139 +++++++++++++++++++--
loleaflet/src/layer/tile/TileLayer.js | 4
6 files changed, 265 insertions(+), 11 deletions(-)
New commits:
commit bd911ff9d55d3945e9d10c02aacc77b1b7c5e59b
Author: Henry Castro <hcastro at collabora.com>
Date: Thu Mar 9 22:39:48 2017 -0400
loleaflet: rework Impress annotations
LO Impress does not have an anchor position of the annotation object
Change-Id: Ifaa08bb3f62f442f3ee58242e835b6377901a592
diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index e1b2786..6cce092 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -435,6 +435,12 @@ var deps = {
desc: 'Group Annotations to put on the map.'
},
+ AnnotationScroll: {
+ src: ['control/Control.js',
+ 'control/Control.Scroll.Annotation.js'],
+ desc: 'Basic scroll control'
+ },
+
Annotation: {
src: ['layer/marker/Annotation.js'],
desc: 'Annotation to put on the map.'
diff --git a/loleaflet/dist/loleaflet.css b/loleaflet/dist/loleaflet.css
index 8225027..fbecbf7 100644
--- a/loleaflet/dist/loleaflet.css
+++ b/loleaflet/dist/loleaflet.css
@@ -247,3 +247,63 @@ body {
.loleaflet-annotation-caption {
font-weight: bold;
}
+
+.loleaflet-bar {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.65);
+ border-radius: 4px;
+ display: inline-block;
+ margin: 3px;
+ vertical-align: middle;
+}
+
+.loleaflet-bar a,
+.loleaflet-bar a:hover {
+ background-color: #fff;
+ border-bottom: 1px solid #ccc;
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ display: block;
+ text-align: center;
+ text-decoration: none;
+ color: black;
+}
+
+.loleaflet-bar a {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
+}
+
+.loleaflet-bar a:hover {
+ background-color: #f4f4f4;
+}
+
+.loleaflet-bar a:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.loleaflet-bar a:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom: none;
+}
+
+.loleaflet-bar a.leaflet-disabled {
+ cursor: default;
+ background-color: #f4f4f4;
+ color: #bbb;
+}
+
+.loleaflet-bar a {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+
+.loleaflet-control-scroll-up,
+.loleaflet-control-scroll-down {
+ font: bold 18px 'Lucida Console', Monaco, monospace;
+ text-indent: 1px;
+}
diff --git a/loleaflet/src/control/Control.Scroll.Annotation.js b/loleaflet/src/control/Control.Scroll.Annotation.js
new file mode 100644
index 0000000..0eb3b2c
--- /dev/null
+++ b/loleaflet/src/control/Control.Scroll.Annotation.js
@@ -0,0 +1,62 @@
+/*
+ * L.Control.Scroll.Annotation
+ */
+
+L.Control.Scroll.Annotation = L.Control.extend({
+ options: {
+ position: 'topright',
+ arrowUp: '0x25b2',
+ arrowUpTitle: _('Scroll up annotations'),
+ arrowDown: '0x25bc',
+ arrowDownTitle: _('Scroll down annotations')
+ },
+
+ onAdd: function (map) {
+ var scrollName = 'leaflet-control-scroll',
+ container = L.DomUtil.create('div', 'loleaflet-bar');
+
+ this._map = map;
+
+ this._buttonUp = this._createButton(
+ this.options.arrowUp, this.options.arrowUpTitle,
+ scrollName + '-up', container, this._onScrollUp, this);
+ this._buttonDown = this._createButton(
+ this.options.arrowDown, this.options.arrowDownTitle,
+ scrollName + '-down', container, this._onScrollDown, this);
+
+ return container;
+ },
+
+ onRemove: function (map) {
+ },
+
+ _onScrollUp: function (e) {
+ this._map.fire('AnnotationScrollUp');
+ },
+
+ _onScrollDown: function (e) {
+ this._map.fire('AnnotationScrollDown');
+ },
+
+ _createButton: function (html, title, className, container, fn, context) {
+ var link = L.DomUtil.create('a', className, container);
+ link.innerHTML = String.fromCharCode(html);
+ link.href = '#';
+ link.title = title;
+
+ var stop = L.DomEvent.stopPropagation;
+
+ L.DomEvent
+ .on(link, 'click', stop)
+ .on(link, 'mousedown', stop)
+ .on(link, 'dblclick', stop)
+ .on(link, 'click', L.DomEvent.preventDefault)
+ .on(link, 'click', fn, context);
+
+ return link;
+ }
+});
+
+L.control.scroll.annotation = function (options) {
+ return new L.Control.Scroll.Annotation(options);
+};
diff --git a/loleaflet/src/layer/marker/Annotation.js b/loleaflet/src/layer/marker/Annotation.js
index 774dd3c..4482837 100644
--- a/loleaflet/src/layer/marker/Annotation.js
+++ b/loleaflet/src/layer/marker/Annotation.js
@@ -61,6 +61,11 @@ L.Annotation = L.Layer.extend({
this._editNode.style.display = 'none';
},
+ hide: function () {
+ this._container.style.visibility = 'hidden';
+ this._editNode.style.display = 'none';
+ },
+
edit: function () {
this._container.style.visibility = '';
this._contentNode.style.display = 'none';
diff --git a/loleaflet/src/layer/tile/ImpressTileLayer.js b/loleaflet/src/layer/tile/ImpressTileLayer.js
index 0c6f0ed..8afd5c7 100644
--- a/loleaflet/src/layer/tile/ImpressTileLayer.js
+++ b/loleaflet/src/layer/tile/ImpressTileLayer.js
@@ -6,25 +6,124 @@
L.ImpressTileLayer = L.TileLayer.extend({
newAnnotation: function (comment) {
- if (!comment.anchorPos && this._isCursorVisible) {
- comment.anchorPos = this._latLngToTwips(this._visibleCursor.getNorthWest());
- }
- if (comment.anchorPos) {
- this._annotations.add(comment, true);
+ var annotation = L.annotation(this._map.getCenter(), comment).addTo(this._map);
+ annotation.edit();
+ annotation.focus();
+ },
+
+ beforeAdd: function (map) {
+ map.on('AnnotationCancel', this.onAnnotationCancel, this);
+ map.on('AnnotationSave', this.onAnnotationSave, this);
+ map.on('AnnotationScrollUp', this.onAnnotationScrollUp, this);
+ map.on('AnnotationScrollDown', this.onAnnotationScrollDown, this);
+ },
+
+ getAnnotation: function (id) {
+ for (var index in this._annotations) {
+ if (this._annotations[index]._data.id === id) {
+ return this._annotations[index];
+ }
}
+ return null;
},
onAdd: function (map) {
L.TileLayer.prototype.onAdd.call(this, map);
- this._annotations = L.annotationManager(map);
+ this._annotations = [];
+ },
+
+ onAnnotationCancel: function (e) {
+ this._map.removeLayer(e.annotation);
+ this._map.focus();
},
onAnnotationModify: function (annotation) {
- this._annotations.modify(annotation);
+ var draft = L.annotation(this._map.getCenter(), annotation._data).addTo(this._map);
+ draft.edit();
+ draft.focus();
},
onAnnotationRemove: function (id) {
- this._annotations.remove(id);
+ var comment = {
+ Id: {
+ type: 'string',
+ value: id
+ }
+ };
+ this._map.sendUnoCommand('.uno:DeleteAnnotation', comment);
+ this._map.focus();
+ },
+
+ onAnnotationSave: function (e) {
+ var comment;
+ if (e.annotation._data.id === 'new') {
+ comment = {
+ Text: {
+ type: 'string',
+ value: e.annotation._data.text
+ }
+ };
+ this._map.sendUnoCommand('.uno:InsertAnnotation', comment);
+ } else {
+ comment = {
+ Id: {
+ type: 'string',
+ value: e.annotation._data.id
+ },
+ Text: {
+ type: 'string',
+ value: e.annotation._data.text
+ }
+ };
+ this._map.sendUnoCommand('.uno:EditAnnotation', comment);
+ }
+ this._map.removeLayer(e.annotation);
+ this._map.focus();
+ },
+
+ onAnnotationScrollDown: function (e) {
+ this._topAnnotation = Math.min(++this._topAnnotation, this._annotations.length - 1);
+ this.layoutAnnotations();
+ },
+
+ onAnnotationScrollUp: function (e) {
+ this._topAnnotation = Math.max(--this._topAnnotation, 0);
+ this.layoutAnnotations();
+ },
+
+ removeAnnotation: function (id) {
+ for (var index in this._annotations) {
+ if (this._annotations[index]._data.id == id) {
+ this._map.removeLayer(this._annotations[index]);
+ this._annotations.splice(index, 1);
+ break;
+ }
+ }
+ },
+
+ layoutAnnotations: function () {
+ var topRight = this._map.latLngToLayerPoint(this._map.options.maxBounds.getNorthEast()).add(L.point(this.options.marginX, this.options.marginY));
+ var bounds, annotation;
+ for (var index in this._annotations) {
+ annotation = this._annotations[index];
+ if (index >= this._topAnnotation) {
+ annotation.setLatLng(bounds ? this._map.layerPointToLatLng(bounds.getBottomLeft()) : this._map.layerPointToLatLng(topRight));
+ bounds = annotation.getBounds();
+ bounds.extend(L.point(bounds.max.x, bounds.max.y + this.options.marginY));
+ annotation.show();
+ } else {
+ annotation.hide();
+ }
+ }
+ if (bounds) {
+ if (!this._scrollAnnotation) {
+ this._scrollAnnotation = L.control.scroll.annotation();
+ this._scrollAnnotation.addTo(this._map);
+ }
+ } else if (this._scrollAnnotation) {
+ this._map.removeControl(this._scrollAnnotation);
+ this._scrollAnnotation = null;
+ }
},
_onCommandValuesMsg: function (textMsg) {
@@ -34,7 +133,12 @@ L.ImpressTileLayer = L.TileLayer.extend({
}
if (values.comments) {
- this._annotations.fill(values.comments);
+ for (var index in values.comments) {
+ comment = values.comments[index];
+ this._annotations.push(L.annotation(this._map.options.maxBounds.getSouthEast(), comment).addTo(this._map));
+ }
+ this._topAnnotation = 0;
+ this.layoutAnnotations();
} else {
L.TileLayer.prototype._onCommandValuesMsg.call(this, textMsg);
}
@@ -42,7 +146,22 @@ L.ImpressTileLayer = L.TileLayer.extend({
_onMessage: function (textMsg, img) {
if (textMsg.startsWith('comment:')) {
- this._annotations.onACKComment(textMsg);
+ var obj = JSON.parse(textMsg.substring('comment:'.length + 1));
+ if (obj.comment.action === 'Add') {
+ this._annotations.push(L.annotation(this._map.options.maxBounds.getSouthEast(), obj.comment).addTo(this._map));
+ this._topAnnotation = Math.min(this._topAnnotation, this._annotations.length - 1);
+ this.layoutAnnotations();
+ } else if (obj.comment.action === 'Remove') {
+ this.removeAnnotation(obj.comment.id);
+ this._topAnnotation = Math.min(this._topAnnotation, this._annotations.length - 1);
+ this.layoutAnnotations();
+ } else if (obj.comment.action === 'Modify') {
+ var modified = this.getAnnotation(obj.comment.id);
+ if (modified) {
+ modified._data = obj.comment;
+ modified.update();
+ }
+ }
} else {
L.TileLayer.prototype._onMessage.call(this, textMsg, img);
}
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 8fae7f9..901e753 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -48,7 +48,9 @@ L.TileLayer = L.GridLayer.extend({
zoomReverse: false,
detectRetina: true,
crossOrigin: false,
- previewInvalidationTimeout: 1000
+ previewInvalidationTimeout: 1000,
+ marginX: 50,
+ marginY: 10
},
initialize: function (url, options) {
More information about the Libreoffice-commits
mailing list