Skip to content

Commit 9ac8499

Browse files
authored
Merge pull request #3 from mcclatchy/zephr-updates
Updates zephr to allow for subscriber and dma data
2 parents 73f51e2 + 166b919 commit 9ac8499

File tree

6 files changed

+66
-150
lines changed

6 files changed

+66
-150
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,7 @@ This object asks Zephr for a dynamic payload and passes any Yozons configuration
8686
| Property | Value |
8787
| --- | --- |
8888
| feature | the slug of the feature in Zephr |
89+
| dataset[].type | "subscriber" and "dma" wait for promise resolution, "config" makes a generic Yozons request |
8990
| dataset[].name | the custom input key sent to Zephr |
9091
| dataset[].config | the Yozons config value sent to Zephr |
92+
| dataset[].value | the generic value sent to Zephr if no type is declared |

config/story.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
"feature": "zone-taboola-recommendations",
3939
"dataset": [
4040
{
41-
"name": "dma",
42-
"value": true
41+
"type": "dma",
42+
"name": "dma"
4343
}
4444
]
4545
},

demo/locker.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ const locker = {
2525
case "zone.zeeto":
2626
return true;
2727
case "zone.moneycom":
28-
return true;
28+
return false;
2929
case "zone.communityEvents":
3030
return true;
31+
case "zone.taboolaRecommendations":
32+
return true;
3133
default:
3234
return undefined;
3335
}
@@ -36,15 +38,15 @@ const locker = {
3638
// user info
3739
user: {
3840
isSubscriber() {
39-
return true;
41+
return false;
4042
},
4143

4244
isLoggedIn() {
4345
return false;
4446
},
4547

4648
isInDMA() {
47-
return Promise.resolve(true);
49+
return Promise.resolve(false);
4850
}
4951
},
5052

lib/config.js

Lines changed: 56 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function load(url) {
1515
const res = await fetch(url);
1616
const data = await res.json();
1717
const subscriber = locker.user.isSubscriber();
18-
const dma = await locker.user.isInDMA();
18+
const dma = subscriber ? true : await locker.user.isInDMA();
1919

2020
// Load WPS zones
2121
if(data.base) {
@@ -62,69 +62,66 @@ export function load(url) {
6262

6363
// Render
6464
if(show) {
65-
renderZone(config)
66-
}
67-
});
68-
69-
resolve();
70-
});
71-
}
65+
const zone = new Zone(config.id);
66+
67+
// Zephr connection
68+
if(config.zephr) {
69+
const { feature, dataset } = config.zephr;
70+
71+
if(dataset) {
72+
dataset.forEach(d => {
73+
const {type, name, value} = d;
74+
75+
switch(type) {
76+
case "subscriber":
77+
zone.dataset[name] = subscriber;
78+
break;
79+
case "dma":
80+
zone.dataset[name] = dma;
81+
break;
82+
case "config":
83+
zone.dataset[name] = locker.getConfig(value);
84+
break;
85+
default:
86+
zone.dataset[name] = value;
87+
}
88+
});
89+
}
7290

73-
/**
74-
* Renders a zone by config
75-
* @param config {object} a zone config object
76-
*/
91+
zone.zephr(feature);
92+
}
7793

78-
function renderZone(config) {
79-
const zone = new Zone(config.id);
94+
// Add classes
95+
if(config.classList) {
96+
zone.classList.add(...config.classList)
97+
}
8098

81-
// Zephr connection
82-
if(config.zephr) {
83-
const { feature, dataset } = config.zephr;
99+
// Add type
100+
if(config.type) {
101+
zone.dataset.type = config.type;
102+
}
84103

85-
if(dataset) {
86-
dataset.forEach(d => {
87-
const {type, name, value} = d;
104+
// Placement
105+
if(config.placement) {
106+
const {type, value} = config.placement;
88107

89-
switch(type) {
90-
case "config":
91-
zone.dataset[name] = locker.getConfig(value);
92-
break;
93-
default:
94-
zone.dataset[name] = value;
108+
switch(type) {
109+
case "query":
110+
zone.vip = document.querySelector(value);
111+
break
112+
case "before":
113+
zone.before(value);
114+
break;
115+
case "after":
116+
zone.after(value);
117+
break;
118+
default:
119+
zone.vip = value;
120+
}
95121
}
96-
});
97-
}
122+
}
123+
});
98124

99-
zone.zephr(feature);
100-
}
101-
102-
// Add classes
103-
if(config.classList) {
104-
zone.classList.add(...config.classList)
105-
}
106-
107-
// Add type
108-
if(config.type) {
109-
zone.dataset.type = config.type;
110-
}
111-
112-
// Placement
113-
if(config.placement) {
114-
const {type, value} = config.placement;
115-
116-
switch(type) {
117-
case "query":
118-
zone.vip = document.querySelector(value);
119-
break
120-
case "before":
121-
zone.before(value);
122-
break;
123-
case "after":
124-
zone.after(value);
125-
break;
126-
default:
127-
zone.vip = value;
128-
}
129-
}
125+
resolve();
126+
});
130127
}

lib/zones.js

Lines changed: 0 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -370,91 +370,6 @@ export function render() {
370370
window.dispatchEvent(new Event("zones-loaded"));
371371
}
372372

373-
/*
374-
* Renders a zone config file
375-
* @param url {string} the url to the file
376-
*/
377-
378-
export async function loadConfig(url) {
379-
const res = await fetch(url);
380-
const config = await res.json();
381-
const subscriber = locker.user.isSubscriber();
382-
const dma = await locker.user.isInDMA();
383-
384-
config.zones.forEach(config => {
385-
const {id, filters, zephr, placement, classList} = config;
386-
387-
// Filter check
388-
const show = filters.every(f => {
389-
switch(f.type) {
390-
case "subscriber":
391-
return subscriber === f.value;
392-
case "dma":
393-
return dma === f.value;
394-
case "config":
395-
let prop = locker.getConfig(f.name);
396-
397-
if(typeof f.value == "boolean") {
398-
return prop === f.value;
399-
} else {
400-
let rx = new RegExp(f.value);
401-
return rx.test(prop);
402-
}
403-
}
404-
});
405-
406-
// Render
407-
if(show) {
408-
const zone = get(id);
409-
410-
// Add classes
411-
if(classList) {
412-
zone.classList.add(...classList)
413-
}
414-
415-
// Zephr connection
416-
if(zephr) {
417-
const dataset = zephr.dataset || [];
418-
419-
dataset.forEach(d => {
420-
const {type, name, value} = d;
421-
422-
switch(type) {
423-
case "config":
424-
zone.dataset[name] = locker.getConfig(value);
425-
break;
426-
default:
427-
zone.dataset[name] = value;
428-
}
429-
});
430-
431-
zone.zephr(zephr.feature);
432-
}
433-
434-
// Placement
435-
if(placement) {
436-
let {type, value} = placement;
437-
438-
switch(type) {
439-
case "query":
440-
zone.vip = document.querySelector(value);
441-
break
442-
case "before":
443-
zone.before(value);
444-
break;
445-
case "after":
446-
zone.after(value);
447-
break;
448-
default:
449-
zone.vip = value;
450-
}
451-
}
452-
}
453-
});
454-
455-
return config;
456-
}
457-
458373
/*
459374
* IntersectionObserver callback
460375
*/

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mcclatchy/zones",
3-
"version": "1.0.23",
3+
"version": "1.1.0",
44
"description": "A Yozons extension to dynamically distribute or re-distribute zones on the websites.",
55
"main": "index.js",
66
"directories": {

0 commit comments

Comments
 (0)