-
Notifications
You must be signed in to change notification settings - Fork 8
/
addInSplashAds.js
55 lines (47 loc) · 1.77 KB
/
addInSplashAds.js
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
'use strict';
const _forEach = require('lodash/forEach'),
_compact = require('lodash/compact');
function getComponentType(component) {
const componentTypeMatch = component._ref.match(/\/components\/([A-Za-z\-]+)\/instances\//);
if (componentTypeMatch && componentTypeMatch.length >= 2) {
return componentTypeMatch[1];
}
}
/**
* Add in article ads to list of components in an article
* @param {array} content - the list of components in the article
* @param {object} articleData - the entire article's data, used to pull in the different ad units defined
* @param {string} afterComponent - the component type to insert the ad after
* @return {object} splash
*/
module.exports = function (content, articleData, afterComponent) {
var adUnits;
let newContent = []; // don't just replace the content (it's a sealed array), create a new array!
if (articleData) {
adUnits = articleData.inSplashDesktopAd || articleData.inSplashTabletAd || articleData.inSplashMobileAd;
}
if (adUnits) {
_forEach(content, function (component) {
const componentType = getComponentType(component);
// add the current component before any ads
newContent.push(component);
if (componentType === afterComponent) {
if (articleData.inSplashMobileAd) {
newContent.push(articleData.inSplashMobileAd);
}
if (articleData.inSplashTabletAd) {
newContent.push(articleData.inSplashTabletAd);
}
if (articleData.inSplashDesktopAd) {
newContent.push(articleData.inSplashDesktopAd);
}
}
});
return _compact(newContent); // get rid of undefined ads
} else {
return content;
}
};
module.exports.example = {
code: '{{> component-list (addInSplashAds content this "picks-links-container") }}'
};