File size: 1,980 Bytes
34e0b30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
 *                        MINITPL
 *********************************************************
 * @licstart  The following is the entire license notice for the
 *  JavaScript code in this page.
 *
 * Copyright (C) 2013  Ophir LOJKINE
 *
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 *
 * @licend
 */

Minitpl = (function () {
  function Minitpl(elem, data) {
    this.elem = typeof elem === "string" ? document.querySelector(elem) : elem;
    if (!elem) {
      throw "Invalid element!";
    }
    this.parent = this.elem.parentNode;
    this.parent.removeChild(this.elem);
  }

  function transform(element, transformer) {
    if (typeof transformer === "function") {
      transformer(element);
    } else {
      element.textContent = transformer;
    }
  }

  Minitpl.prototype.add = function (data) {
    var newElem = this.elem.cloneNode(true);
    if (typeof data === "object") {
      for (var key in data) {
        var matches = newElem.querySelectorAll(key);
        for (var i = 0; i < matches.length; i++) {
          transform(matches[i], data[key]);
        }
      }
    } else {
      transform(newElem, data);
    }
    this.parent.appendChild(newElem);
    return newElem;
  };

  return Minitpl;
})();