Statistiques
| Révision :

root / tmp / org.txm.edition.rcp / res / js / functions.js @ 2397

Historique | Voir | Annoter | Télécharger (6,55 ko)

1 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
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 625 mdecorde
}