1function getReferences(content, type) {
2 var typeMarker = '<div data-type="' + type + '" data-key="';
3 var splitContent = content.split(typeMarker);
4 var results = [];
5 if (splitContent.length > 1) {
6 for (var i = 1; i < splitContent.length; i++) {
7 var endTagMatches = splitContent[i].match(/(\/>)|(>[^<]*<\/div>)/i);
8 var match = endTagMatches[0] || ">";
9 results.push(typeMarker + splitContent[i].split(match)[0] + match);
10 }
11 }
12 return results;
13}
14
15function compile(asset, channel) {
16 asset = asset || {};
17 var content = asset.superContent || asset.content || asset.design;
18 if (content) {
19 ["slot", "block"].forEach(function (type) {
20 var references = getReferences(content, type);
21 var types = type + "s";
22 references.forEach(function (reference) {
23 var refKey = reference.split('data-key="')[1].split('"')[0];
24 if (asset[types] && asset[types][refKey]) {
25 content = content.replace(reference, compile(asset[types][refKey]));
26 } else {
27 console.error("Bad Asset: referenced " + type + " does not exist: " + refKey);
28 }
29 });
30 });
31 return content;
32 } else if (asset.views) {
33 if (asset.views[channel]) {
34 return compile(asset.views[channel], channel);
35 } else if (asset.views.html) {
36 return compile(asset.views.html, channel);
37 }
38 }
39 return "";
40}