DOM tree modification functions
[redakcja.git] / redakcja / static / js / wiki / xml-tools.js
1 (function() {
2
3   window.walk = function(node, handler) {
4     var child, nxt, textHandler, _results;
5     if (handler.text) {
6       textHandler = handler.text;
7     } else {
8       textHandler = handler;
9     }
10     switch (node.nodeType) {
11       case 1:
12       case 9:
13       case 11:
14         child = node.firstChild;
15         _results = [];
16         while (child) {
17           nxt = child.nextSibling;
18           walk(child, handler);
19           _results.push(child = nxt);
20         }
21         return _results;
22         break;
23       case 3:
24         return textHandler(node);
25     }
26   };
27
28   window.wrapInTag = function(regex, tagName) {
29     var fun;
30     return fun = function(node) {
31       var alien, frm, m, matches, node_rest, to, wrapper, _i, _len;
32       matches = [];
33       while (m = regex.exec(node.nodeValue)) {
34         matches.push([regex.lastIndex, m[0]]);
35       }
36       matches.reverse();
37       for (_i = 0, _len = matches.length; _i < _len; _i++) {
38         m = matches[_i];
39         to = m[0];
40         frm = m[0] - m[1].length;
41         node_rest = node.splitText(to);
42         alien = node.splitText(frm);
43         wrapper = node.ownerDocument.createElement(tagName);
44         node.parentNode.insertBefore(wrapper, node_rest);
45         wrapper.appendChild(alien);
46       }
47       return node;
48     };
49   };
50
51 }).call(this);