DOM tree modification functions
[redakcja.git] / redakcja / static / js / wiki / xml-tools.coffee
1
2 window.walk = (node, handler) ->
3   if handler.text
4     textHandler = handler.text
5   else
6     textHandler = handler
7
8   switch node.nodeType
9     when 1, 9, 11
10       child = node.firstChild
11       while child
12         nxt = child.nextSibling
13         walk(child, handler)
14         child = nxt
15     when 3
16       textHandler node
17
18
19 window.wrapInTag = (regex, tagName) ->
20   fun = (node) ->
21     matches = []
22     while m = regex.exec(node.nodeValue)
23       matches.push [regex.lastIndex, m[0]]
24
25     matches.reverse()
26
27     for m in matches
28       to = m[0]
29       frm = m[0] - m[1].length
30
31       node_rest = node.splitText(to)
32       alien = node.splitText(frm)
33       wrapper = node.ownerDocument.createElement tagName
34       node.parentNode.insertBefore wrapper, node_rest
35       wrapper.appendChild alien
36     node
37
38
39 # window._test_xml_tools = ->
40 #   p = new DOMParser()
41 #   dom = p.parseFromString("<a><b>łuków</b><c>jakaś jeszcze ~</c></a>", 'text/xml')
42
43 #   walk(dom.firstChild, wrapInTag(ALIEN_REGEX, 'alien'))
44 #   dom
45
46
47 # window.ALIEN_REGEX = /[^a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s<>«»\\*_!,:;?&%."'=#()\/-]+/g
48 # " just for syntax coloring.