annotate annotator_files/lib/range.js @ 4:6979313586cf

new version of annotator.
author casties
date Mon, 27 Aug 2012 19:05:38 +0200
parents 6356e78ccf5c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
1 // Generated by CoffeeScript 1.3.3
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
2 var Range,
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
3 __hasProp = {}.hasOwnProperty,
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
4 __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
5
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
6 Range = {};
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
7
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
8 Range.sniff = function(r) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
9 if (r.commonAncestorContainer != null) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
10 return new Range.BrowserRange(r);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
11 } else if (typeof r.start === "string") {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
12 return new Range.SerializedRange(r);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
13 } else if (r.start && typeof r.start === "object") {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
14 return new Range.NormalizedRange(r);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
15 } else {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
16 console.error(_t("Could not sniff range type"));
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
17 return false;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
18 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
19 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
20
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
21 Range.nodeFromXPath = function(xpath, root) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
22 var customResolver, evaluateXPath, namespace, node, segment;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
23 if (root == null) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
24 root = document;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
25 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
26 evaluateXPath = function(xp, nsResolver) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
27 if (nsResolver == null) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
28 nsResolver = null;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
29 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
30 return document.evaluate('.' + xp, root, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
31 };
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
32 if (!$.isXMLDoc(document.documentElement)) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
33 return evaluateXPath(xpath);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
34 } else {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
35 customResolver = document.createNSResolver(document.ownerDocument === null ? document.documentElement : document.ownerDocument.documentElement);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
36 node = evaluateXPath(xpath, customResolver);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
37 if (!node) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
38 xpath = ((function() {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
39 var _i, _len, _ref, _results;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
40 _ref = xpath.split('/');
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
41 _results = [];
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
42 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
43 segment = _ref[_i];
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
44 if (segment && segment.indexOf(':') === -1) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
45 _results.push(segment.replace(/^([a-z]+)/, 'xhtml:$1'));
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
46 } else {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
47 _results.push(segment);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
48 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
49 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
50 return _results;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
51 })()).join('/');
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
52 namespace = document.lookupNamespaceURI(null);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
53 customResolver = function(ns) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
54 if (ns === 'xhtml') {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
55 return namespace;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
56 } else {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
57 return document.documentElement.getAttribute('xmlns:' + ns);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
58 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
59 };
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
60 node = evaluateXPath(xpath, customResolver);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
61 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
62 return node;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
63 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
64 };
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
65
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
66 Range.RangeError = (function(_super) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
67
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
68 __extends(RangeError, _super);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
69
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
70 function RangeError(type, message, parent) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
71 this.type = type;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
72 this.message = message;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
73 this.parent = parent != null ? parent : null;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
74 RangeError.__super__.constructor.call(this, this.message);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
75 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
76
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
77 return RangeError;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
78
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
79 })(Error);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
80
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
81 Range.BrowserRange = (function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
82
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
83 function BrowserRange(obj) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
84 this.commonAncestorContainer = obj.commonAncestorContainer;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
85 this.startContainer = obj.startContainer;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
86 this.startOffset = obj.startOffset;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
87 this.endContainer = obj.endContainer;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
88 this.endOffset = obj.endOffset;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
89 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
90
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
91 BrowserRange.prototype.normalize = function(root) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
92 var it, node, nr, offset, p, r, _i, _len, _ref;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
93 if (this.tainted) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
94 console.error(_t("You may only call normalize() once on a BrowserRange!"));
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
95 return false;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
96 } else {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
97 this.tainted = true;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
98 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
99 r = {};
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
100 nr = {};
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
101 _ref = ['start', 'end'];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
102 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
103 p = _ref[_i];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
104 node = this[p + 'Container'];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
105 offset = this[p + 'Offset'];
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
106 if (!((node != null) && (offset != null))) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
107 return false;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
108 }
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
109 if (node.nodeType === 1) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
110 it = node.childNodes[offset];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
111 node = it || node.childNodes[offset - 1];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
112 if (node.nodeType === 1 && !node.firstChild) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
113 it = null;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
114 node = node.previousSibling;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
115 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
116 while (node.nodeType !== 3) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
117 node = node.firstChild;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
118 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
119 offset = it ? 0 : node.nodeValue.length;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
120 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
121 r[p] = node;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
122 r[p + 'Offset'] = offset;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
123 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
124 nr.start = r.startOffset > 0 ? r.start.splitText(r.startOffset) : r.start;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
125 if (r.start === r.end) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
126 if ((r.endOffset - r.startOffset) < nr.start.nodeValue.length) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
127 nr.start.splitText(r.endOffset - r.startOffset);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
128 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
129 nr.end = nr.start;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
130 } else {
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
131 if (r.endOffset < r.end.nodeValue.length) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
132 r.end.splitText(r.endOffset);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
133 }
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
134 nr.end = r.end;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
135 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
136 nr.commonAncestor = this.commonAncestorContainer;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
137 while (nr.commonAncestor.nodeType !== 1) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
138 nr.commonAncestor = nr.commonAncestor.parentNode;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
139 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
140 return new Range.NormalizedRange(nr);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
141 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
142
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
143 BrowserRange.prototype.serialize = function(root, ignoreSelector) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
144 return this.normalize(root).serialize(root, ignoreSelector);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
145 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
146
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
147 return BrowserRange;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
148
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
149 })();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
150
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
151 Range.NormalizedRange = (function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
152
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
153 function NormalizedRange(obj) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
154 this.commonAncestor = obj.commonAncestor;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
155 this.start = obj.start;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
156 this.end = obj.end;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
157 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
158
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
159 NormalizedRange.prototype.normalize = function(root) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
160 return this;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
161 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
162
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
163 NormalizedRange.prototype.limit = function(bounds) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
164 var nodes, parent, startParents, _i, _len, _ref;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
165 nodes = $.grep(this.textNodes(), function(node) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
166 return node.parentNode === bounds || $.contains(bounds, node.parentNode);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
167 });
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
168 if (!nodes.length) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
169 return null;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
170 }
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
171 this.start = nodes[0];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
172 this.end = nodes[nodes.length - 1];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
173 startParents = $(this.start).parents();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
174 _ref = $(this.end).parents();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
175 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
176 parent = _ref[_i];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
177 if (startParents.index(parent) !== -1) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
178 this.commonAncestor = parent;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
179 break;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
180 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
181 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
182 return this;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
183 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
184
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
185 NormalizedRange.prototype.serialize = function(root, ignoreSelector) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
186 var end, serialization, start;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
187 serialization = function(node, isEnd) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
188 var n, nodes, offset, origParent, textNodes, xpath, _i, _len;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
189 if (ignoreSelector) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
190 origParent = $(node).parents(":not(" + ignoreSelector + ")").eq(0);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
191 } else {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
192 origParent = $(node).parent();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
193 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
194 xpath = origParent.xpath(root)[0];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
195 textNodes = origParent.textNodes();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
196 nodes = textNodes.slice(0, textNodes.index(node));
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
197 offset = 0;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
198 for (_i = 0, _len = nodes.length; _i < _len; _i++) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
199 n = nodes[_i];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
200 offset += n.nodeValue.length;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
201 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
202 if (isEnd) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
203 return [xpath, offset + node.nodeValue.length];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
204 } else {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
205 return [xpath, offset];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
206 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
207 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
208 start = serialization(this.start);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
209 end = serialization(this.end, true);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
210 return new Range.SerializedRange({
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
211 start: start[0],
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
212 end: end[0],
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
213 startOffset: start[1],
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
214 endOffset: end[1]
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
215 });
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
216 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
217
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
218 NormalizedRange.prototype.text = function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
219 var node;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
220 return ((function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
221 var _i, _len, _ref, _results;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
222 _ref = this.textNodes();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
223 _results = [];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
224 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
225 node = _ref[_i];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
226 _results.push(node.nodeValue);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
227 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
228 return _results;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
229 }).call(this)).join('');
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
230 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
231
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
232 NormalizedRange.prototype.textNodes = function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
233 var end, start, textNodes, _ref;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
234 textNodes = $(this.commonAncestor).textNodes();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
235 _ref = [textNodes.index(this.start), textNodes.index(this.end)], start = _ref[0], end = _ref[1];
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
236 return $.makeArray(textNodes.slice(start, end + 1 || 9e9));
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
237 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
238
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
239 NormalizedRange.prototype.toRange = function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
240 var range;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
241 range = document.createRange();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
242 range.setStartBefore(this.start);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
243 range.setEndAfter(this.end);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
244 return range;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
245 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
246
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
247 return NormalizedRange;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
248
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
249 })();
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
250
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
251 Range.SerializedRange = (function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
252
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
253 function SerializedRange(obj) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
254 this.start = obj.start;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
255 this.startOffset = obj.startOffset;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
256 this.end = obj.end;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
257 this.endOffset = obj.endOffset;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
258 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
259
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
260 SerializedRange.prototype.normalize = function(root) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
261 var contains, length, node, p, range, tn, _i, _j, _len, _len1, _ref, _ref1;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
262 range = {};
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
263 _ref = ['start', 'end'];
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
264 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
265 p = _ref[_i];
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
266 try {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
267 node = Range.nodeFromXPath(this[p], root);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
268 } catch (e) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
269 throw new Range.RangeError(p, ("Error while finding " + p + " node: " + this[p] + ": ") + e, e);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
270 }
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
271 if (!node) {
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
272 throw new Range.RangeError(p, "Couldn't find " + p + " node: " + this[p]);
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
273 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
274 length = 0;
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
275 _ref1 = $(node).textNodes();
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
276 for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
277 tn = _ref1[_j];
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
278 if (length + tn.nodeValue.length >= this[p + 'Offset']) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
279 range[p + 'Container'] = tn;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
280 range[p + 'Offset'] = this[p + 'Offset'] - length;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
281 break;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
282 } else {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
283 length += tn.nodeValue.length;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
284 }
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
285 }
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
286 if (!(range[p + 'Offset'] != null)) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
287 throw new Range.RangeError("" + p + "offset", "Couldn't find offset " + this[p + 'Offset'] + " in element " + this[p]);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
288 }
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
289 }
4
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
290 contains = !(document.compareDocumentPosition != null) ? function(a, b) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
291 return a.contains(b);
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
292 } : function(a, b) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
293 return a.compareDocumentPosition(b) & 16;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
294 };
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
295 $(range.startContainer).parents().reverse().each(function() {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
296 if (contains(this, range.endContainer)) {
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
297 range.commonAncestorContainer = this;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
298 return false;
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
299 }
6979313586cf new version of annotator.
casties
parents: 3
diff changeset
300 });
3
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
301 return new Range.BrowserRange(range).normalize(root);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
302 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
303
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
304 SerializedRange.prototype.serialize = function(root, ignoreSelector) {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
305 return this.normalize(root).serialize(root, ignoreSelector);
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
306 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
307
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
308 SerializedRange.prototype.toObject = function() {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
309 return {
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
310 start: this.start,
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
311 startOffset: this.startOffset,
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
312 end: this.end,
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
313 endOffset: this.endOffset
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
314 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
315 };
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
316
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
317 return SerializedRange;
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
318
6356e78ccf5c new version contains Annotator JS files to be used with FilesystemSite.
casties
parents:
diff changeset
319 })();