root / tmp / org.txm.edition.rcp / res / js / functions.js @ 3081
Historique | Voir | Annoter | Télécharger (6,83 ko)
1 | 3081 | mdecorde | getNodeText = function getNodeText(node) { |
---|---|---|---|
2 | 625 | mdecorde | if (typeof node == 'string') |
3 | 625 | mdecorde | return node;
|
4 | 625 | mdecorde | else if (typeof node.innerText != 'undefined') |
5 | 625 | mdecorde | return node.innerText;
|
6 | 625 | mdecorde | else if (typeof node.InnerText != 'undefined') |
7 | 625 | mdecorde | return node.InnerText;
|
8 | 625 | mdecorde | else if (typeof node.textContent != 'undefined') |
9 | 625 | mdecorde | return node.textContent;
|
10 | 625 | mdecorde | else
|
11 | 625 | mdecorde | return null; |
12 | 625 | mdecorde | } |
13 | 3081 | mdecorde | txmGetParent = function txmGetParent(node) { |
14 | 625 | mdecorde | if (typeof node.parentNode != 'undefined') |
15 | 625 | mdecorde | return node.parentNode;
|
16 | 625 | mdecorde | else
|
17 | 625 | mdecorde | return null; |
18 | 625 | mdecorde | } |
19 | 3081 | mdecorde | txmGetChildren = function txmGetChildren(node) { |
20 | 625 | mdecorde | if (typeof node == 'string') |
21 | 625 | mdecorde | return 'STRING HTML'; |
22 | 625 | mdecorde | else if (typeof node.children != 'undefined') |
23 | 625 | mdecorde | return node.children;
|
24 | 625 | mdecorde | else if (typeof node.ChildNodes != 'undefined') |
25 | 625 | mdecorde | return node.ChildNodes;
|
26 | 625 | mdecorde | else if (typeof node.childNodes != 'undefined') |
27 | 625 | mdecorde | return node.childNodes;
|
28 | 625 | mdecorde | else
|
29 | 625 | mdecorde | return null; |
30 | 625 | mdecorde | } |
31 | 3081 | mdecorde | txmGetSelection = function txmGetSelection() { |
32 | 625 | mdecorde | if (typeof window.getSelection != 'undefined') { |
33 | 625 | mdecorde | return window.getSelection();
|
34 | 625 | mdecorde | } else if (typeof document.selection != 'undefined') { |
35 | 625 | mdecorde | return document.selection;
|
36 | 625 | mdecorde | } else
|
37 | 625 | mdecorde | return 'NO SELECTION'; |
38 | 625 | mdecorde | } |
39 | 3081 | mdecorde | txmGetRangeSize = function txmGetRangeSize(selection) { |
40 | 625 | mdecorde | if (typeof selection.rangeCount != 'undefined') { |
41 | 625 | mdecorde | return selection.rangeCount;
|
42 | 625 | mdecorde | } else if (typeof selection.createRangeCollection != 'undefined') { |
43 | 625 | mdecorde | return selection.createRangeCollection().length();
|
44 | 625 | mdecorde | } // IE5 has no multiple selection
|
45 | 625 | mdecorde | } |
46 | 3081 | mdecorde | txmGetRange = function txmGetRange(selection, i) { |
47 | 625 | mdecorde | if (typeof selection.getRangeAt != 'undefined') { |
48 | 625 | mdecorde | return selection.getRangeAt(i);
|
49 | 625 | mdecorde | } else if (typeof selection.createRangeCollection != 'undefined') { |
50 | 625 | mdecorde | return selection.createRangeCollection().item(i);
|
51 | 625 | mdecorde | } else if (typeof selection.createRange != 'undefined') { |
52 | 625 | mdecorde | return selection.createRange();
|
53 | 625 | mdecorde | } // IE5 has no multiple selection
|
54 | 625 | mdecorde | else
|
55 | 625 | mdecorde | return 'NO RANGE'; |
56 | 625 | mdecorde | } |
57 | 3081 | mdecorde | txmGetParentElementRange = function txmGetParentElementRange(range) { |
58 | 625 | mdecorde | if (typeof range.parentElement != 'undefined') { |
59 | 625 | mdecorde | return range.parentElement();
|
60 | 625 | mdecorde | } else if (typeof range.startContainer != 'undefined') { |
61 | 625 | mdecorde | return range.startContainer.parentNode;
|
62 | 625 | mdecorde | } else
|
63 | 625 | mdecorde | return 'NO PARENT'; |
64 | 625 | mdecorde | } |
65 | 3081 | mdecorde | txmGetFragment = function txmGetFragment(range) { |
66 | 625 | mdecorde | if (typeof range.cloneContents != 'undefined') { |
67 | 625 | mdecorde | return range.cloneContents();
|
68 | 625 | mdecorde | } else if (typeof range.htmlText != 'undefined') { |
69 | 625 | mdecorde | var node = document.createElement('sel'); |
70 | 625 | mdecorde | node.innerHTML = range.htmlText; |
71 | 625 | mdecorde | return node;
|
72 | 625 | mdecorde | } else
|
73 | 625 | mdecorde | return 'NO FRAG'; |
74 | 625 | mdecorde | } |
75 | 3081 | mdecorde | txmGetTagName = function txmGetTagName(node) { |
76 | 625 | mdecorde | if (typeof node.tagName != 'undefined') { |
77 | 625 | mdecorde | return node.tagName;
|
78 | 625 | mdecorde | } else if (typeof node.nodeName != 'undefined') { |
79 | 625 | mdecorde | return node.nodeName;
|
80 | 625 | mdecorde | } else if (typeof node.name != 'undefined') { |
81 | 625 | mdecorde | return node.name;
|
82 | 625 | mdecorde | } else
|
83 | 625 | mdecorde | return 'NO TAGNAME'; |
84 | 625 | mdecorde | } |
85 | 3081 | mdecorde | findSpans = function findSpans(children, all) { |
86 | 625 | mdecorde | for (var i = 0; i < children.length; i++) { |
87 | 625 | mdecorde | var node = children.item(i);
|
88 | 625 | mdecorde | if (node.nodeType == 1) { |
89 | 625 | mdecorde | var id = node.getAttribute('id'); |
90 | 625 | mdecorde | if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 |
91 | 625 | mdecorde | && getNodeText(node).length > 0) {
|
92 | 625 | mdecorde | if (id != null) |
93 | 625 | mdecorde | all.push(id); |
94 | 625 | mdecorde | } else {
|
95 | 625 | mdecorde | findSpans(txmGetChildren(node), all) |
96 | 625 | mdecorde | } |
97 | 625 | mdecorde | } |
98 | 625 | mdecorde | } |
99 | 625 | mdecorde | } |
100 | 3081 | mdecorde | findIdsInString = function findIdsInString(str, all) { |
101 | 625 | mdecorde | for (var i = 0; i < children.length; i++) { |
102 | 625 | mdecorde | var node = children.item(i);
|
103 | 625 | mdecorde | if (node.nodeType == 1) { |
104 | 625 | mdecorde | var id = node.getAttribute('id'); |
105 | 625 | mdecorde | if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 |
106 | 625 | mdecorde | && getNodeText(node).length > 0) {
|
107 | 625 | mdecorde | if (id != null) |
108 | 625 | mdecorde | all.push(id); |
109 | 625 | mdecorde | } else {
|
110 | 625 | mdecorde | findSpans(txmGetChildren(node), all) |
111 | 625 | mdecorde | } |
112 | 625 | mdecorde | } |
113 | 625 | mdecorde | } |
114 | 625 | mdecorde | } |
115 | 3081 | mdecorde | get_type = function get_type(thing) { |
116 | 625 | mdecorde | if (thing === null) |
117 | 625 | mdecorde | return "[object Null]"; |
118 | 625 | mdecorde | return Object.prototype.toString.call(thing);
|
119 | 625 | mdecorde | } |
120 | 625 | mdecorde | |
121 | 3081 | mdecorde | getDetailedObject = function getDetailedObject(inputObject) { |
122 | 625 | mdecorde | var detailedObject = {};
|
123 | 625 | mdecorde | var properties;
|
124 | 625 | mdecorde | do {
|
125 | 625 | mdecorde | properties = Object.getOwnPropertyNames(inputObject); |
126 | 625 | mdecorde | for ( var o in properties) { |
127 | 625 | mdecorde | detailedObject[properties[o]] = inputObject[properties[o]]; |
128 | 625 | mdecorde | } |
129 | 625 | mdecorde | } while (inputObject = Object.getPrototypeOf(inputObject));
|
130 | 625 | mdecorde | return detailedObject;
|
131 | 625 | mdecorde | } |
132 | 625 | mdecorde | |
133 | 625 | mdecorde | try {
|
134 | 1927 | mdecorde | if ("undefined" == typeof sheet || "undefined" == typeof txmstyle) { |
135 | 1927 | mdecorde | txmstyle = document.createElement("style");
|
136 | 1928 | mdecorde | txmstyle.title = "txm_btt"
|
137 | 1928 | mdecorde | try {
|
138 | 1928 | mdecorde | txmstyle.appendChild(document.createTextNode(""));
|
139 | 1928 | mdecorde | } catch (e) {
|
140 | 1928 | mdecorde | } |
141 | 1928 | mdecorde | |
142 | 1928 | mdecorde | document.body.appendChild(txmstyle); |
143 | 1927 | mdecorde | sheet = txmstyle.sheet; |
144 | 1927 | mdecorde | } |
145 | 625 | mdecorde | } catch (e) {
|
146 | 1915 | mdecorde | sheet = 'error';
|
147 | 625 | mdecorde | } |
148 | 625 | mdecorde | |
149 | 1928 | mdecorde | // try {
|
150 | 1916 | mdecorde | |
151 | 1928 | mdecorde | // if (!Element.prototype.scrollIntoViewIfNeeded) {
|
152 | 1928 | mdecorde | // Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView;
|
153 | 1928 | mdecorde | // //Element.prototype.scrollIntoViewIfNeeded = function(centerIfNeeded) {
|
154 | 1928 | mdecorde | // //centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
|
155 | 1928 | mdecorde | // //var parent = this.parentNode, parentComputedStyle = window
|
156 | 1928 | mdecorde | // //.getComputedStyle(parent, null), parentBorderTopWidth =
|
157 | 1928 | mdecorde | // parseInt(parentComputedStyle
|
158 | 1928 | mdecorde | // //.getPropertyValue('border-top-width')), parentBorderLeftWidth =
|
159 | 1928 | mdecorde | // parseInt(parentComputedStyle
|
160 | 1928 | mdecorde | // //.getPropertyValue('border-left-width')), overTop = this.offsetTop
|
161 | 1928 | mdecorde | // //- parent.offsetTop < parent.scrollTop, overBottom = (this.offsetTop
|
162 | 1928 | mdecorde | // //- parent.offsetTop + this.clientHeight - parentBorderTopWidth) >
|
163 | 1928 | mdecorde | // (parent.scrollTop + parent.clientHeight), overLeft = this.offsetLeft
|
164 | 1928 | mdecorde | // //- parent.offsetLeft < parent.scrollLeft, overRight = (this.offsetLeft
|
165 | 1928 | mdecorde | // //- parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) >
|
166 | 1928 | mdecorde | // (parent.scrollLeft + parent.clientWidth), alignWithTop = overTop
|
167 | 1928 | mdecorde | // //&& !overBottom;
|
168 | 1928 | mdecorde | // //if ((overTop || overBottom) && centerIfNeeded) {
|
169 | 1928 | mdecorde | // //parent.scrollTop = this.offsetTop - parent.offsetTop
|
170 | 1928 | mdecorde | // //- parent.clientHeight / 2 - parentBorderTopWidth
|
171 | 1928 | mdecorde | // //+ this.clientHeight / 2;
|
172 | 1928 | mdecorde | // //}
|
173 | 1928 | mdecorde | // //if ((overLeft || overRight) && centerIfNeeded) {
|
174 | 1928 | mdecorde | // //parent.scrollLeft = this.offsetLeft - parent.offsetLeft
|
175 | 1928 | mdecorde | // //- parent.clientWidth / 2 - parentBorderLeftWidth
|
176 | 1928 | mdecorde | // //+ this.clientWidth / 2;
|
177 | 1928 | mdecorde | // //}
|
178 | 1928 | mdecorde | // //if ((overTop || overBottom || overLeft || overRight)
|
179 | 1928 | mdecorde | // //&& !centerIfNeeded) {
|
180 | 1928 | mdecorde | // //this.scrollIntoView(alignWithTop);
|
181 | 1928 | mdecorde | // //}
|
182 | 1928 | mdecorde | // //};
|
183 | 1928 | mdecorde | // }
|
184 | 1928 | mdecorde | // } catch (e) {
|
185 | 1928 | mdecorde | // Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView
|
186 | 1928 | mdecorde | // }
|
187 | 625 | mdecorde | |
188 | 3081 | mdecorde | showElementIfNeeded = function showElementIfNeeded(el) { |
189 | 625 | mdecorde | if (!Element.prototype.scrollIntoViewIfNeeded) {
|
190 | 1928 | mdecorde | if (!isAnyPartOfElementInViewport(el))
|
191 | 1928 | mdecorde | el.scrollIntoView(false);
|
192 | 625 | mdecorde | } else {
|
193 | 625 | mdecorde | el.scrollIntoViewIfNeeded(); |
194 | 625 | mdecorde | } |
195 | 625 | mdecorde | } |
196 | 625 | mdecorde | |
197 | 3081 | mdecorde | isAnyPartOfElementInViewport = function isAnyPartOfElementInViewport(el) { |
198 | 1928 | mdecorde | try {
|
199 | 625 | mdecorde | const rect = el.getBoundingClientRect(); |
200 | 1928 | mdecorde | // DOMRect { x: 8, y: 8, width: 100, height: 100, top: 8, right: 108,
|
201 | 1928 | mdecorde | // bottom: 108, left: 8 }
|
202 | 625 | mdecorde | const windowHeight = (window.innerHeight || document.documentElement.clientHeight); |
203 | 625 | mdecorde | const windowWidth = (window.innerWidth || document.documentElement.clientWidth); |
204 | 625 | mdecorde | |
205 | 1916 | mdecorde | // http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap
|
206 | 1928 | mdecorde | const vertInView = (rect.top <= windowHeight) |
207 | 1928 | mdecorde | && ((rect.top + rect.height) >= 0);
|
208 | 1928 | mdecorde | const horInView = (rect.left <= windowWidth) |
209 | 1928 | mdecorde | && ((rect.left + rect.width) >= 0);
|
210 | 625 | mdecorde | |
211 | 625 | mdecorde | return (vertInView && horInView);
|
212 | 625 | mdecorde | } catch (e) {
|
213 | 625 | mdecorde | return false; |
214 | 625 | mdecorde | } |
215 | 3081 | mdecorde | } |
216 | 3081 | mdecorde | |
217 | 3081 | mdecorde | return true |