dynamic-insertion.js 933 B

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