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.must_approve_users) 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(); } };