Statistiques
| Révision :

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

Historique | Voir | Annoter | Télécharger (6,38 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 625 mdecorde
        var style = document.createElement("style");
135 1915 mdecorde
        try { style.appendChild(document.createTextNode("")); } catch (e) {};
136 625 mdecorde
        document.head.appendChild(style);
137 625 mdecorde
        sheet = style.sheet;
138 625 mdecorde
} catch (e) {
139 1915 mdecorde
        sheet = 'error';
140 625 mdecorde
}
141 625 mdecorde
142 625 mdecorde
//try {
143 1916 mdecorde
144 1916 mdecorde
//if (!Element.prototype.scrollIntoViewIfNeeded) {
145 1916 mdecorde
//Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView;
146 1916 mdecorde
////Element.prototype.scrollIntoViewIfNeeded = function(centerIfNeeded) {
147 1916 mdecorde
////centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
148 1916 mdecorde
////var parent = this.parentNode, parentComputedStyle = window
149 1916 mdecorde
////.getComputedStyle(parent, null), parentBorderTopWidth = parseInt(parentComputedStyle
150 1916 mdecorde
////.getPropertyValue('border-top-width')), parentBorderLeftWidth = parseInt(parentComputedStyle
151 1916 mdecorde
////.getPropertyValue('border-left-width')), overTop = this.offsetTop
152 1916 mdecorde
////- parent.offsetTop < parent.scrollTop, overBottom = (this.offsetTop
153 1916 mdecorde
////- parent.offsetTop + this.clientHeight - parentBorderTopWidth) > (parent.scrollTop + parent.clientHeight), overLeft = this.offsetLeft
154 1916 mdecorde
////- parent.offsetLeft < parent.scrollLeft, overRight = (this.offsetLeft
155 1916 mdecorde
////- parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) > (parent.scrollLeft + parent.clientWidth), alignWithTop = overTop
156 1916 mdecorde
////&& !overBottom;
157 1916 mdecorde
////if ((overTop || overBottom) && centerIfNeeded) {
158 1916 mdecorde
////parent.scrollTop = this.offsetTop - parent.offsetTop
159 1916 mdecorde
////- parent.clientHeight / 2 - parentBorderTopWidth
160 1916 mdecorde
////+ this.clientHeight / 2;
161 1916 mdecorde
////}
162 1916 mdecorde
////if ((overLeft || overRight) && centerIfNeeded) {
163 1916 mdecorde
////parent.scrollLeft = this.offsetLeft - parent.offsetLeft
164 1916 mdecorde
////- parent.clientWidth / 2 - parentBorderLeftWidth
165 1916 mdecorde
////+ this.clientWidth / 2;
166 1916 mdecorde
////}
167 1916 mdecorde
////if ((overTop || overBottom || overLeft || overRight)
168 1916 mdecorde
////&& !centerIfNeeded) {
169 1916 mdecorde
////this.scrollIntoView(alignWithTop);
170 1916 mdecorde
////}
171 1916 mdecorde
////};
172 1916 mdecorde
//}
173 625 mdecorde
//} catch (e) {
174 1916 mdecorde
//Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView
175 625 mdecorde
//}
176 625 mdecorde
177 625 mdecorde
function showElementIfNeeded(el) {
178 625 mdecorde
        if (!Element.prototype.scrollIntoViewIfNeeded) {
179 625 mdecorde
                if (!isAnyPartOfElementInViewport(el)) el.scrollIntoView(false);
180 625 mdecorde
        } else {
181 625 mdecorde
                el.scrollIntoViewIfNeeded();
182 625 mdecorde
        }
183 625 mdecorde
}
184 625 mdecorde
185 625 mdecorde
function isAnyPartOfElementInViewport(el) {
186 625 mdecorde
        try {
187 625 mdecorde
                const rect = el.getBoundingClientRect();
188 1916 mdecorde
                //         DOMRect { x: 8, y: 8, width: 100, height: 100, top: 8, right: 108, bottom: 108, left: 8 }
189 625 mdecorde
                const windowHeight = (window.innerHeight || document.documentElement.clientHeight);
190 625 mdecorde
                const windowWidth = (window.innerWidth || document.documentElement.clientWidth);
191 625 mdecorde
192 1916 mdecorde
                // http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap
193 625 mdecorde
                const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);
194 625 mdecorde
                const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);
195 625 mdecorde
196 625 mdecorde
                return (vertInView && horInView);
197 625 mdecorde
        } catch (e) {
198 625 mdecorde
                return false;
199 625 mdecorde
        }
200 625 mdecorde
}