103 lines
2.3 KiB
Plaintext
103 lines
2.3 KiB
Plaintext
|
import AdComponent from "discourse/plugins/discourse-adplugin/discourse/components/ad-component";
|
||
|
import {
|
||
|
default as computed,
|
||
|
observes,
|
||
|
on
|
||
|
} from "ember-addons/ember-computed-decorators";
|
||
|
|
||
|
const adIndex = {
|
||
|
topic_list_top: null,
|
||
|
topic_above_post_stream: null,
|
||
|
topic_above_suggested: null,
|
||
|
post_bottom: null
|
||
|
};
|
||
|
|
||
|
export default AdComponent.extend({
|
||
|
classNames: ["house-creative"],
|
||
|
classNameBindings: ["adUnitClass"],
|
||
|
adHtml: "",
|
||
|
|
||
|
@computed("placement", "showAd")
|
||
|
adUnitClass(placement, showAd) {
|
||
|
return showAd ? `house-${placement}` : "";
|
||
|
},
|
||
|
|
||
|
@computed("showToGroups", "showAfterPost")
|
||
|
showAd(showToGroups, showAfterPost) {
|
||
|
return showToGroups && showAfterPost;
|
||
|
},
|
||
|
|
||
|
@computed("postNumber")
|
||
|
showAfterPost(postNumber) {
|
||
|
if (!postNumber) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return this.isNthPost(
|
||
|
parseInt(this.site.get("house_creatives.settings.after_nth_post"))
|
||
|
);
|
||
|
},
|
||
|
|
||
|
chooseAdHtml() {
|
||
|
const houseAds = this.site.get("house_creatives"),
|
||
|
placement = this.get("placement").replace(/-/g, "_"),
|
||
|
adNames = this.adsNamesForSlot(placement);
|
||
|
|
||
|
if (adNames.length > 0) {
|
||
|
if (!adIndex[placement]) {
|
||
|
adIndex[placement] = 0;
|
||
|
}
|
||
|
let ad = houseAds.creatives[adNames[adIndex[placement]]] || "";
|
||
|
adIndex[placement] = (adIndex[placement] + 1) % adNames.length;
|
||
|
return ad;
|
||
|
} else {
|
||
|
return "";
|
||
|
}
|
||
|
},
|
||
|
|
||
|
adsNamesForSlot(placement) {
|
||
|
const houseAds = this.site.get("house_creatives"),
|
||
|
adsForSlot = houseAds.settings[placement];
|
||
|
|
||
|
if (
|
||
|
Object.keys(houseAds.creatives).length > 0 &&
|
||
|
!Ember.isBlank(adsForSlot)
|
||
|
) {
|
||
|
return adsForSlot.split("|");
|
||
|
} else {
|
||
|
return [];
|
||
|
}
|
||
|
},
|
||
|
|
||
|
@observes("refreshOnChange")
|
||
|
refreshAd() {
|
||
|
if (this.get("listLoading")) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this.set("adHtml", this.chooseAdHtml());
|
||
|
},
|
||
|
|
||
|
didInsertElement() {
|
||
|
this._super(...arguments);
|
||
|
|
||
|
if (!this.get("showAd")) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (this.get("listLoading")) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!adIndex["topic_list_top"]) {
|
||
|
// start at a random spot in the ad inventory
|
||
|
Object.keys(adIndex).forEach(placement => {
|
||
|
const adNames = this.adsNamesForSlot(placement);
|
||
|
adIndex[placement] = Math.floor(Math.random() * adNames.length);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
this.refreshAd();
|
||
|
}
|
||
|
});
|