discourse/app/assets/javascripts/discourse/initializers/signup-cta.js.es6

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