* set up refactored onboarding * create onboarding page * add in first slide and change slide functionality * fix test suite * profile refactor * profile refactor * refactor to api * add checkbox fields * add checkbox fields * remove puts * add basic css * add styling * add redirect * hide back and next at first and last slides * test refactored onboarding * test refactored onboarding * remove article edits * Fix schema * Add deleted file back in * Add default value for checked_t&c column * Adjust HTML structure to keep nav buttons in place * Fix ESLint issues on Onboarding.jsx file * Handling for undefined or empty followedTags on getUserTags * Fix codeclimate issues * Fix codeclimate issues * Fix more codeclimate issues * Fix more codeclimate issues * Update Onboarding snapshots * Uncheck the CoC and T&C checkboxes on render * Update snapshots * Return false instead of raising error * Update spec to use new onboarding * Redirect to onboarding if haven't seen it yet * Prevent redirect to onboarding from /signout_confirm * Use assign_attributes instead of saving twice * Move COC and T&C checkbox page to second slide * Add 'go back to original page' functionality * Reuse ready prototype logic * Keep track of the last visited onboarding page * Fix email subscription bug * Fix overflow issue for tags page * Remove height to prevent page container scrolling * Check for CoC and T&C for displaying onboarding * Add InstantClick redirect and preserve referrer in client * Fix async update + check by using localStorage * Turn off onboarding for tests * Finalize design for onboarding * Finalize design for onboarding * Make bulk follows during onboarding * Fix bulk follow test
91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
function loadFunctionality() {
|
|
if (!document.getElementById('notification-subscriptions-area')) {
|
|
return;
|
|
}
|
|
const { notifiableId } = document.getElementById(
|
|
'notification-subscriptions-area',
|
|
).dataset;
|
|
const { notifiableType } = document.getElementById(
|
|
'notification-subscriptions-area',
|
|
).dataset;
|
|
|
|
const userStatus = document
|
|
.getElementsByTagName('body')[0]
|
|
.getAttribute('data-user-status');
|
|
|
|
if (userStatus === 'logged-in') {
|
|
fetch(`/notification_subscriptions/${notifiableType}/${notifiableId}`, {
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
'Content-Type': 'application/json',
|
|
},
|
|
credentials: 'same-origin',
|
|
})
|
|
.then(response => response.json())
|
|
.then(result => {
|
|
document
|
|
.getElementById(`notification-subscription-label_${result.config}`)
|
|
.classList.add('selected');
|
|
// checkbox.checked = result;
|
|
});
|
|
}
|
|
|
|
let updateStatus = () => {};
|
|
|
|
if (userStatus === 'logged-out') {
|
|
updateStatus = () => {
|
|
// Disabled because showModal() is globally defined in asset pipeline
|
|
// eslint-disable-next-line no-undef
|
|
showModal('notification-subscription');
|
|
};
|
|
} else {
|
|
updateStatus = target => {
|
|
const allButtons = document.getElementsByClassName(
|
|
'notification-subscription-label',
|
|
);
|
|
for (let i = 0; i < allButtons.length; i += 1) {
|
|
allButtons[i].classList.remove('selected');
|
|
}
|
|
target.classList.add('selected');
|
|
fetch(`/notification_subscriptions/${notifiableType}/${notifiableId}`, {
|
|
method: 'POST',
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'X-CSRF-Token': window.csrfToken,
|
|
'Content-Type': 'application/json',
|
|
},
|
|
credentials: 'same-origin',
|
|
body: JSON.stringify({
|
|
config: target.dataset.payload,
|
|
// notifiable params are passed via URL
|
|
}),
|
|
});
|
|
};
|
|
}
|
|
|
|
const subscriptionButtons = document.getElementsByClassName(
|
|
'notification-subscription-label',
|
|
);
|
|
|
|
for (let i = 0; i < subscriptionButtons.length; i += 1) {
|
|
subscriptionButtons[i].addEventListener('click', e => {
|
|
e.preventDefault();
|
|
updateStatus(e.target);
|
|
if (typeof sendHapticMessage !== 'undefined') {
|
|
sendHapticMessage('medium');
|
|
}
|
|
});
|
|
subscriptionButtons[i].addEventListener('keydown', e => {
|
|
if (e.key === 'Enter') {
|
|
updateStatus(e.target);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
window.InstantClick.on('change', () => {
|
|
loadFunctionality();
|
|
});
|
|
|
|
loadFunctionality();
|