#-- # Copyright (c) 2007 by Michael Neumann (mneumann@ntecs.de) #++ class DOM def self.appendChild(parent, child) ` if (#.nodeType == 3) { #.appendChild(#); #.removeChild(#); } #.appendChild(#); return #` end def self.insertChild(parent, child, index) ` var count = 0, child = #.firstChild, before = null; while (child) { if (child.nodeType == 1) { if (count == #) { before = child; break; } ++count; } child = child.nextSibling; } if (#.nodeType == 3) { #.appendChild(#); #.removeChild(#); } #.insertBefore(#, before); return #` end def self.insertBefore(parent, child, before) ` if (#.nodeType == 3) { #.appendChild(#); #.removeChild(#); } #.insertBefore(#, #); return #` end def self.replace(elem, newElem) ` var p = #.parentNode; if (!p) return; if (#.nodeType == 3) { p.appendChild(#); p.removeChild(#); } p.insertBefore(#, #); p.removeChild(#); return #` end def self.setInnerHTML(elem, html='') ` #.innerHTML = #; if (#.search("<") == -1) { // contains no HTML, so we have to assign it twice #.innerHTML = #; } return #` end def self.setInnerText(elem, text) ` // Remove all children first. while (#.firstChild) { #.removeChild(#.firstChild); } // Add a new text node. if (# !== #) { var n = document.createTextNode(#); #.appendChild(n); #.removeChild(n); #.appendChild(n); } return #` end end