Advertisement
Guest User

Untitled

a guest
Jun 28th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. function compileTemplate(templateElement, data){
  2. //hack to get unencoded symbols from HTML node
  3. var textarea = document.createElement('textarea');
  4. textarea.innerHTML = templateElement.innerHTML;
  5.  
  6. var text = eval("with(data){html`" + textarea.value + "`}");
  7.  
  8. var tmpElement = document.createElement('div');
  9.  
  10. tmpElement.innerHTML = text;
  11.  
  12. var fragment = document.createDocumentFragment();
  13.  
  14. while (tmpElement.childNodes.length > 0) {
  15. fragment.appendChild(tmpElement.childNodes[0]);
  16. }
  17.  
  18. function html(literals, ...substs) {
  19. return literals.raw.reduce((acc, lit, i) => {
  20. let subst = substs[i-1];
  21. if (Array.isArray(subst)) {
  22. subst = subst.join('');
  23. }
  24. if (acc.endsWith('$')) {
  25. subst = htmlEscape(subst);
  26. acc = acc.slice(0, -1);
  27. }
  28. return acc + subst + lit;
  29. });
  30. }
  31.  
  32. function htmlEscape(str) {
  33. return str.replace(/&/g, '&') // first!
  34. .replace(/>/g, '>')
  35. .replace(/</g, '<')
  36. .replace(/"/g, '"')
  37. .replace(/'/g, '&#39;')
  38. .replace(/`/g, '&#96;');
  39. }
  40.  
  41. return fragment;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement