This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/initializers/signup-cta.js.es6

70 lines
2.0 KiB
JavaScript

import Session from "discourse/models/session";
const ANON_TOPIC_IDS = 2;
const ANON_PROMPT_READ_TIME = 2 * 60 * 1000;
const ONE_DAY = 24 * 60 * 60 * 1000;
const PROMPT_HIDE_DURATION = ONE_DAY;
export default {
name: "signup-cta",
initialize(container) {
const screenTrack = container.lookup("screen-track:main");
const session = Session.current();
const siteSettings = container.lookup("site-settings:main");
const keyValueStore = container.lookup("key-value-store:main");
const user = container.lookup("current-user:main");
screenTrack.keyValueStore = keyValueStore;
// Preconditions
if (user) return; // must not be logged in
if (keyValueStore.get("anon-cta-never")) return; // "never show again"
if (!siteSettings.allow_new_registrations) return;
if (siteSettings.invite_only) return;
if (siteSettings.login_required) return;
if (!siteSettings.enable_signup_cta) return;
function checkSignupCtaRequirements() {
if (session.get("showSignupCta")) {
return; // already shown
}
if (session.get("hideSignupCta")) {
return; // hidden for session
}
if (keyValueStore.get("anon-cta-never")) {
return; // hidden forever
}
const now = new Date().getTime();
const hiddenAt = keyValueStore.getInt("anon-cta-hidden", 0);
if (hiddenAt > now - PROMPT_HIDE_DURATION) {
return; // hidden in last 24 hours
}
const readTime = keyValueStore.getInt("anon-topic-time");
if (readTime < ANON_PROMPT_READ_TIME) {
return;
}
const topicIdsString = keyValueStore.get("anon-topic-ids");
if (!topicIdsString) {
return;
}
let topicIdsAry = topicIdsString.split(",");
if (topicIdsAry.length < ANON_TOPIC_IDS) {
return;
}
// Requirements met.
session.set("showSignupCta", true);
}
screenTrack.registerAnonCallback(checkSignupCtaRequirements);
checkSignupCtaRequirements();
}
};