Skip to content

Commit d91660b

Browse files
author
Friedrich
committed
Merge pull request #879 from kossebau/addAnnotationWith0Length
In OpAddAnnotation support annotated ranges with 0 length
2 parents ca7d2e6 + 1d24d46 commit d91660b

5 files changed

Lines changed: 93 additions & 25 deletions

File tree

ChangeLog.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@
66

77
* Fix breaking all empty annotations on merging the paragraph they are contained in with the one before ([#877](https://github.com/kogmbh/WebODF/pull/877)))
88

9+
### Improvements
10+
11+
* In OpAddAnnotation support annotated ranges with 0 length ([#879](https://github.com/kogmbh/WebODF/pull/879)))
12+
13+
### Breaking changes
14+
15+
* OpAddAnnotation spec changed: length=0 no longer means unranged annotation, but a range of 0 length. For unranged annotations now use length=undefined.
16+
17+
18+
## Wodo.TextEditor
19+
See also section about WebODF
20+
921

1022
# Changes between 0.5.5 and 0.5.6
1123

webodf/lib/gui/AnnotationController.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,12 @@ gui.AnnotationController = function AnnotationController(session, sessionConstra
109109
return;
110110
}
111111

112-
position = length >= 0 ? position : position + length;
113-
length = Math.abs(length);
112+
if (length === 0) {
113+
length = undefined;
114+
} else {
115+
position = length >= 0 ? position : position + length;
116+
length = Math.abs(length);
117+
}
114118

115119
op.init({
116120
memberid: inputMemberId,

webodf/lib/ops/OpAddAnnotation.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ ops.OpAddAnnotation = function OpAddAnnotation() {
3434
var memberid, timestamp,
3535
/**@type{number}*/
3636
position,
37-
/**@type{number}*/
37+
/**@type{!number|undefined}*/
3838
length,
3939
/**@type{string}*/
4040
name,
@@ -48,7 +48,7 @@ ops.OpAddAnnotation = function OpAddAnnotation() {
4848
memberid = data.memberid;
4949
timestamp = parseInt(data.timestamp, 10);
5050
position = parseInt(data.position, 10);
51-
length = parseInt(data.length, 10) || 0;
51+
length = (data.length !== undefined) ? (parseInt(data.length, 10) || 0) : undefined;
5252
name = data.name;
5353
};
5454

@@ -149,7 +149,7 @@ ops.OpAddAnnotation = function OpAddAnnotation() {
149149

150150
annotation = createAnnotationNode(odtDocument, new Date(timestamp));
151151

152-
if (length) {
152+
if (length !== undefined) {
153153
annotationEnd = createAnnotationEnd();
154154
// link annotation end to start
155155
annotation.annotationEndElement = annotationEnd;
@@ -197,15 +197,15 @@ ops.OpAddAnnotation = function OpAddAnnotation() {
197197
memberid:string,
198198
timestamp:number,
199199
position:number,
200-
length:number,
200+
length:(!number|undefined),
201201
name:string
202202
}}*/
203203
ops.OpAddAnnotation.Spec;
204204
/**@typedef{{
205205
memberid:string,
206206
timestamp:(number|undefined),
207207
position:number,
208-
length:number,
208+
length:(!number|undefined),
209209
name:string
210210
}}*/
211211
ops.OpAddAnnotation.InitSpec;

webodf/tests/ops/OperationTests.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,18 @@ ops.OperationTests = function OperationTests(runner) {
437437
};
438438

439439
/*jslint emptyblock: true*/
440+
function linkAnnotationEndToStart() {
441+
return {
442+
setUp: function () {
443+
var rootElement = t.odfContainer.rootElement,
444+
annotation = rootElement.getElementsByTagNameNS(odf.Namespaces.officens, "annotation")[0],
445+
annotationEnd = rootElement.getElementsByTagNameNS(odf.Namespaces.officens, "annotation-end")[0];
446+
annotation.annotationEndElement = annotationEnd;
447+
},
448+
tearDown: function () {}
449+
};
450+
}
451+
440452
this.setUps = {
441453
"ApplyDirectStyling_FixesCursorPositions" : function () {
442454
// Test specifically requires the cursor node to have a child element of some sort to
@@ -450,17 +462,8 @@ ops.OperationTests = function OperationTests(runner) {
450462
tearDown: function () {t.odtDocument.unsubscribe(ops.Document.signalCursorAdded, appendToCursor); }
451463
};
452464
},
453-
"RemoveAnnotation_ranged" : function () {
454-
return {
455-
setUp: function () {
456-
var rootElement = t.odfContainer.rootElement,
457-
annotation = rootElement.getElementsByTagNameNS(odf.Namespaces.officens, "annotation")[0],
458-
annotationEnd = rootElement.getElementsByTagNameNS(odf.Namespaces.officens, "annotation-end")[0];
459-
annotation.annotationEndElement = annotationEnd;
460-
},
461-
tearDown: function () {}
462-
};
463-
},
465+
"RemoveAnnotation_ranged" : linkAnnotationEndToStart,
466+
"RemoveAnnotation_rangedZero" : linkAnnotationEndToStart,
464467
"RemoveText_CopesWithEmptyTextNodes" : function () {
465468
return {
466469
setUp: function () {

webodf/tests/ops/operationtests.xml

Lines changed: 56 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,7 +1421,7 @@
14211421
<office:text><text:p>ABCD</text:p></office:text>
14221422
</before>
14231423
<ops>
1424-
<op optype="AddAnnotation" memberid="Alice" position="2" length="0" name="alice_1" timestamp="1375706047061">
1424+
<op optype="AddAnnotation" memberid="Alice" position="2" name="alice_1" timestamp="1375706047061">
14251425
</op>
14261426
</ops>
14271427
<after>
@@ -1447,7 +1447,7 @@
14471447
<setProperties fullName="John Doe">
14481448
</setProperties>
14491449
</op>
1450-
<op optype="AddAnnotation" memberid="John" position="2" length="0" name="alice_1" timestamp="1375706047061">
1450+
<op optype="AddAnnotation" memberid="John" position="2" name="alice_1" timestamp="1375706047061">
14511451
</op>
14521452
</ops>
14531453
<after>
@@ -1473,7 +1473,7 @@
14731473
<setProperties fullName="John Doe">
14741474
</setProperties>
14751475
</op>
1476-
<op optype="AddAnnotation" memberid="John" position="2" length="0" name="alice_1" timestamp="1375706047061">
1476+
<op optype="AddAnnotation" memberid="John" position="2" name="alice_1" timestamp="1375706047061">
14771477
</op>
14781478
<op optype="UpdateMember" memberid="John">
14791479
<setProperties fullName="Don Joe">
@@ -1520,13 +1520,39 @@
15201520
</office:text>
15211521
</after>
15221522
</test>
1523+
<test name="AddAnnotation_rangedZero">
1524+
<before>
1525+
<office:text>
1526+
<text:p>ABCD</text:p>
1527+
<text:p>EFG<text:span>HIJ</text:span></text:p>
1528+
</office:text>
1529+
</before>
1530+
<ops>
1531+
<op optype="AddAnnotation" memberid="Alice" position="3" length="0" name="alice_2" timestamp="1375706047061">
1532+
</op>
1533+
</ops>
1534+
<after>
1535+
<office:text>
1536+
<text:p>ABC<office:annotation office:name="alice_2">
1537+
<dc:creator e:memberid="Alice">Alice</dc:creator>
1538+
<dc:date>2013-08-05T12:34:07.061Z</dc:date>
1539+
<text:list>
1540+
<text:list-item>
1541+
<text:p></text:p>
1542+
</text:list-item>
1543+
</text:list>
1544+
</office:annotation><office:annotation-end office:name="alice_2"/>D</text:p>
1545+
<text:p>EFG<text:span>HIJ</text:span></text:p>
1546+
</office:text>
1547+
</after>
1548+
</test>
15231549
<test name="AddAnnotation_rangedMultiple">
15241550
<before>
15251551
<office:text><text:p>ABCD</text:p><text:p>EFG<text:span>HIJ</text:span></text:p></office:text>
15261552
</before>
15271553
<ops>
15281554
<op optype="AddAnnotation" memberid="Alice" position="3" length="6" name="alice_1" timestamp="1375706047061"/>
1529-
<op optype="AddAnnotation" memberid="Alice" position="3" length="0" name="alice_2" timestamp="1375706047061"/>
1555+
<op optype="AddAnnotation" memberid="Alice" position="3" name="alice_2" timestamp="1375706047061"/>
15301556
</ops>
15311557
<after>
15321558
<office:text>
@@ -1573,6 +1599,29 @@
15731599
<office:text><text:p>ABCD</text:p><text:p>EFG<text:span>HIJ</text:span></text:p></office:text>
15741600
</after>
15751601
</test>
1602+
<test name="RemoveAnnotation_rangedZero" hasSetup="true">
1603+
<before>
1604+
<office:text>
1605+
<text:p>ABC<office:annotation office:name="alice_2">
1606+
<dc:creator e:memberid="Alice">Alice</dc:creator>
1607+
<dc:date>2013-08-05T12:34:07.061Z</dc:date>
1608+
<text:list>
1609+
<text:list-item>
1610+
<text:p>xyz</text:p>
1611+
</text:list-item>
1612+
</text:list>
1613+
</office:annotation><office:annotation-end office:name="alice_2"/>D</text:p>
1614+
<text:p>EFG<text:span>HIJ</text:span></text:p>
1615+
</office:text>
1616+
</before>
1617+
<ops>
1618+
<op optype="RemoveAnnotation" memberid="Alice" position="4" length="3">
1619+
</op>
1620+
</ops>
1621+
<after>
1622+
<office:text><text:p>ABCD</text:p><text:p>EFG<text:span>HIJ</text:span></text:p></office:text>
1623+
</after>
1624+
</test>
15761625
<test name="RemoveAnnotation_simple">
15771626
<before>
15781627
<office:text>
@@ -1702,7 +1751,7 @@
17021751
<op optype="MoveCursor" memberid="Bob" position="3"/>
17031752
<op optype="AddCursor" memberid="Eve"/>
17041753
<op optype="MoveCursor" memberid="Eve" position="3"/>
1705-
<op optype="AddAnnotation" memberid="Alice" position="3" length="0" name="alice_1" timestamp="1375706047061"/>
1754+
<op optype="AddAnnotation" memberid="Alice" position="3" name="alice_1" timestamp="1375706047061"/>
17061755
</ops>
17071756
<after>
17081757
<office:text>
@@ -1725,7 +1774,7 @@
17251774
<op optype="MoveCursor" memberid="Alice" position="3"/>
17261775
<op optype="AddCursor" memberid="Bob"/>
17271776
<op optype="MoveCursor" memberid="Bob" position="3"/>
1728-
<op optype="AddAnnotation" memberid="Alice" position="3" length="0" name="alice_1" timestamp="1375706047061"/>
1777+
<op optype="AddAnnotation" memberid="Alice" position="3" name="alice_1" timestamp="1375706047061"/>
17291778
<op optype="AddCursor" memberid="Eve"/>
17301779
<op optype="MoveCursor" memberid="Eve" position="3"/>
17311780
</ops>
@@ -2164,7 +2213,7 @@
21642213
</before>
21652214
<ops>
21662215
<op optype="AddCursor" memberid="Alice"/>
2167-
<op optype="AddAnnotation" memberid="Alice" position="3" length="0" name="b" timestamp="1375706047061"/>
2216+
<op optype="AddAnnotation" memberid="Alice" position="3" name="b" timestamp="1375706047061"/>
21682217
<op optype="AddAnnotation" memberid="Alice" position="1" length="2" name="a" timestamp="1375706047061"/>
21692218
<op optype="ApplyDirectStyling" memberid="Alice" position="4" length="1">
21702219
<setProperties><style:text-properties fo:font-style="italic" /></setProperties>

0 commit comments

Comments
 (0)