ruby-dynamic-insertion.js (933B)
1 window.onload = function() { 2 // Force a reflow before any changes. 3 document.body.clientWidth; 4 5 var elems = document.querySelectorAll('[data-insert]'); 6 Array.from(elems).forEach(function(e) { 7 var parent, ref; 8 switch (e.dataset.insert) { 9 case 'start': 10 parent = e; 11 ref = e.firstChild; 12 break; 13 14 case 'end': 15 parent = e; 16 ref = null; 17 break; 18 19 case 'before': 20 parent = e.parentNode; 21 ref = e; 22 break; 23 24 case 'after': 25 parent = e.parentNode; 26 ref = e.nextSibling; 27 break; 28 } 29 30 var elem, textnode; 31 if ('text' in e.dataset) { 32 textnode = document.createTextNode(e.dataset.text); 33 } 34 if ('tag' in e.dataset) { 35 elem = document.createElement(e.dataset.tag); 36 if (textnode) { 37 elem.appendChild(textnode); 38 } 39 } 40 parent.insertBefore(elem ? elem : textnode, ref); 41 }); 42 };