* Add ProMembership model * Implement ProMembershipsController#create * Implement basic ProMembershipsController#show * Add ProMembership to ledger * Populate user history after pro subscription is created * Add fields for expiration notifications * Add ProMemberships::ExpirationNotifier to notify users of expiring memberships * Add tasks for recurring jobs to notify users of expiration * Add auto_recharge column to ProMembership * Add ProMemberships::Biller (incomplete) * Fix specs * Add ProMembership to Administrate * Fix spec * Add has_enough_credits? to User and Organization * Add Payments::Customer class * Finish ProMembership::Biller functionality * Fix ProMemberships::Creator check for credits * Disable destroy actions for ProMembershipsController * Correctly authenticate ProMembershipsController actions * Make sure only pro user's history can be indexed * Add ProMembershipsController#update action for auto recharge * Use regular AR to save new credits and add touch to the purchaser * Clarify Pro membership create policy * Display information about an existing pro membership * Add UI to show page * Add system test for Pro membership creation * Implement edit membership * Make sure users with pro memberships can access history and dashboard pro * Fix padding issue * Show a different text for a user that has credits but not enough for Pro * Move Pro Membership functionality inside settings * Update Pro Membership link in email notifications * Bust all relevant caches * Add the Pro checkmark around the website * Use Users::ResaveArticlesJob instead of delay * Add/remove user from pro-members chat channel * Use the appropriate Pro checkmark * Remove unfinished pro elements * Remove checkmark JS
48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
/* global timestampToLocalDateTime */
|
|
|
|
function initializeSettings() {
|
|
// highlights organization secret on click
|
|
const settingsOrgSecret = document.getElementById('settings-org-secret');
|
|
if (settingsOrgSecret) {
|
|
settingsOrgSecret.addEventListener('click', event => {
|
|
event.target.select();
|
|
});
|
|
}
|
|
|
|
// shows RSS fetch time in local time
|
|
let timeNode = document.getElementById('rss-fetch-time');
|
|
if (timeNode) {
|
|
var timeStamp = timeNode.getAttribute('datetime');
|
|
var timeOptions = {
|
|
month: 'long',
|
|
day: 'numeric',
|
|
hour: 'numeric',
|
|
minute: 'numeric',
|
|
second: 'numeric',
|
|
};
|
|
|
|
timeNode.textContent = timestampToLocalDateTime(
|
|
timeStamp,
|
|
navigator.language,
|
|
timeOptions,
|
|
);
|
|
}
|
|
|
|
// asks for confirmation on activating pro membership
|
|
const createProForm = document.getElementById('new_pro_membership');
|
|
if (createProForm) {
|
|
createProForm.addEventListener('submit', event => {
|
|
event.preventDefault();
|
|
|
|
if (window.confirm('Are you sure?')) {
|
|
// eslint-disable-line no-alert
|
|
event.target.submit();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
});
|
|
}
|
|
}
|