1 | var extend = require("raptor-util/extend");
|
2 | var componentsUtil = require("./components/util");
|
3 | var destroyComponentForNode = componentsUtil.___destroyComponentForNode;
|
4 | var destroyNodeRecursive = componentsUtil.___destroyNodeRecursive;
|
5 | var helpers = require("./vdom/morphdom/helpers");
|
6 |
|
7 | var insertBefore = helpers.___insertBefore;
|
8 | var insertAfter = helpers.___insertAfter;
|
9 | var removeChild = helpers.___removeChild;
|
10 |
|
11 | function resolveEl(el) {
|
12 | if (typeof el == "string") {
|
13 | var elId = el;
|
14 | el = document.getElementById(elId);
|
15 | if (!el) {
|
16 | throw Error("Not found: " + elId);
|
17 | }
|
18 | }
|
19 | return el;
|
20 | }
|
21 |
|
22 | function beforeRemove(referenceEl) {
|
23 | destroyNodeRecursive(referenceEl);
|
24 | destroyComponentForNode(referenceEl);
|
25 | }
|
26 |
|
27 | module.exports = function(target, getEl, afterInsert) {
|
28 | extend(target, {
|
29 | appendTo: function(referenceEl) {
|
30 | referenceEl = resolveEl(referenceEl);
|
31 | var el = getEl(this, referenceEl);
|
32 | insertBefore(el, null, referenceEl);
|
33 | return afterInsert(this, referenceEl);
|
34 | },
|
35 | prependTo: function(referenceEl) {
|
36 | referenceEl = resolveEl(referenceEl);
|
37 | var el = getEl(this, referenceEl);
|
38 | insertBefore(el, referenceEl.firstChild || null, referenceEl);
|
39 | return afterInsert(this, referenceEl);
|
40 | },
|
41 | replace: function(referenceEl) {
|
42 | referenceEl = resolveEl(referenceEl);
|
43 | var el = getEl(this, referenceEl);
|
44 | beforeRemove(referenceEl);
|
45 | insertBefore(el, referenceEl, referenceEl.parentNode);
|
46 | removeChild(referenceEl);
|
47 | return afterInsert(this, referenceEl);
|
48 | },
|
49 | replaceChildrenOf: function(referenceEl) {
|
50 | referenceEl = resolveEl(referenceEl);
|
51 | var el = getEl(this, referenceEl);
|
52 |
|
53 | var curChild = referenceEl.firstChild;
|
54 | while (curChild) {
|
55 | var nextSibling = curChild.nextSibling;
|
56 | beforeRemove(curChild);
|
57 | curChild = nextSibling;
|
58 | }
|
59 |
|
60 | referenceEl.innerHTML = "";
|
61 | insertBefore(el, null, referenceEl);
|
62 | return afterInsert(this, referenceEl);
|
63 | },
|
64 | insertBefore: function(referenceEl) {
|
65 | referenceEl = resolveEl(referenceEl);
|
66 | var el = getEl(this, referenceEl);
|
67 | insertBefore(el, referenceEl, referenceEl.parentNode);
|
68 | return afterInsert(this, referenceEl);
|
69 | },
|
70 | insertAfter: function(referenceEl) {
|
71 | referenceEl = resolveEl(referenceEl);
|
72 | var el = getEl(this, referenceEl);
|
73 | insertAfter(el, referenceEl, referenceEl.parentNode);
|
74 | return afterInsert(this, referenceEl);
|
75 | }
|
76 | });
|
77 | };
|