mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #5125 from overleaf/jpa-portal-de-ng
[web] de-ng portals page GitOrigin-RevId: 2460c51fb0f81be758c5804e66803a98b614b304
This commit is contained in:
parent
ba460a6755
commit
011e719fdf
5 changed files with 96 additions and 16 deletions
|
@ -107,7 +107,7 @@ function sendReconfirmation(req, res, next) {
|
||||||
if (error) {
|
if (error) {
|
||||||
return next(error)
|
return next(error)
|
||||||
}
|
}
|
||||||
res.sendStatus(200)
|
res.sendStatus(204)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
mixin reconfirmAffiliationNotification-marketing(userEmail, location)
|
||||||
|
form(
|
||||||
|
data-ol-async-form
|
||||||
|
action='/user/emails/send-reconfirmation'
|
||||||
|
)
|
||||||
|
input(name="_csrf" type="hidden" value=csrfToken)
|
||||||
|
input(name="email" type="hidden" value=userEmail.email)
|
||||||
|
div(data-ol-form-messages)
|
||||||
|
|
||||||
|
.reconfirm-notification
|
||||||
|
div(data-ol-not-sent style="width:100%;")
|
||||||
|
i.fa.fa-warning
|
||||||
|
|
||||||
|
- var ssoEnabled = userEmail.affiliation && userEmail.affiliation.institution && userEmail.affiliation.institution.ssoEnabled
|
||||||
|
if ssoEnabled
|
||||||
|
- var institutionId = userEmail.affiliation && userEmail.affiliation.institution && userEmail.affiliation.institution.id
|
||||||
|
a.btn-reconfirm.btn.btn-sm.btn-info(
|
||||||
|
data-ol-slow-link
|
||||||
|
href=`${settings.saml.ukamf.initPath}?university_id=${institutionId}&reconfirm=${location}`
|
||||||
|
)
|
||||||
|
span(data-ol-inflight="idle") #{translate("confirm_affiliation")}
|
||||||
|
span(hidden data-ol-inflight="pending") #{translate("pending")}…
|
||||||
|
|
||||||
|
else
|
||||||
|
button.btn-reconfirm.btn.btn-sm.btn-info(
|
||||||
|
type="submit"
|
||||||
|
data-ol-disabled-inflight
|
||||||
|
)
|
||||||
|
span(data-ol-inflight="idle") #{translate("confirm_affiliation")}
|
||||||
|
span(hidden data-ol-inflight="pending") #{translate("pending")}…
|
||||||
|
|
||||||
|
| !{translate("are_you_still_at", {institutionName: userEmail.affiliation.institution.name}, ['strong'])}
|
||||||
|
|
||||||
|
if location == '/user/settings'
|
||||||
|
| !{translate('please_reconfirm_institutional_email', {}, [{ name: 'span' }])}
|
||||||
|
if userEmail.default
|
||||||
|
span #{translate('need_to_add_new_primary_before_remove')}
|
||||||
|
else
|
||||||
|
| !{translate("please_reconfirm_institutional_email", {}, [{name: 'a', attrs: {href: '/user/settings?remove=' + userEmail.email}}])}
|
||||||
|
|
||||||
|
|
|
||||||
|
a(href="/learn/how-to/Institutional_Email_Reconfirmation") #{translate("learn_more")}
|
||||||
|
|
||||||
|
div(hidden data-ol-sent)
|
||||||
|
| !{translate("please_check_your_inbox_to_confirm", {institutionName: userEmail.affiliation.institution.name}, ['strong'])}
|
||||||
|
|
|
||||||
|
button.btn-inline-link(
|
||||||
|
type="submit"
|
||||||
|
data-ol-disabled-inflight
|
||||||
|
)
|
||||||
|
span(data-ol-inflight="idle") #{translate('resend_confirmation_email')}
|
||||||
|
span(hidden data-ol-inflight="pending") #{translate("pending")}…
|
||||||
|
|
||||||
|
mixin reconfirmedAffiliationNotification-marketing(userEmail)
|
||||||
|
.alert.alert-info
|
||||||
|
.reconfirm-notification
|
||||||
|
div(style="width:100%;")
|
||||||
|
//- extra div for flex styling
|
||||||
|
| !{translate("your_affiliation_is_confirmed", {institutionName: userEmail.affiliation.institution.name}, ['strong'])}
|
||||||
|
|
|
||||||
|
| #{translate('thank_you_exclamation')}
|
|
@ -116,40 +116,48 @@ function showMessages(formEl, messageBag) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function formInflightHelper(el) {
|
export function inflightHelper(el) {
|
||||||
const disabledEl = el.querySelector('[data-ol-disabled-inflight]')
|
const disabledInflight = el.querySelectorAll('[data-ol-disabled-inflight]')
|
||||||
const showWhenNotInflightEl = el.querySelector('[data-ol-inflight="idle"]')
|
const showWhenNotInflight = el.querySelectorAll('[data-ol-inflight="idle"]')
|
||||||
const showWhenInflightEl = el.querySelector('[data-ol-inflight="pending"]')
|
const showWhenInflight = el.querySelectorAll('[data-ol-inflight="pending"]')
|
||||||
|
|
||||||
el.addEventListener('pending', () => {
|
el.addEventListener('pending', () => {
|
||||||
disabledEl.disabled = true
|
disabledInflight.forEach(el => {
|
||||||
toggleDisplay(showWhenNotInflightEl, showWhenInflightEl)
|
el.disabled = true
|
||||||
|
})
|
||||||
|
toggleDisplay(showWhenNotInflight, showWhenInflight)
|
||||||
})
|
})
|
||||||
|
|
||||||
el.addEventListener('idle', () => {
|
el.addEventListener('idle', () => {
|
||||||
disabledEl.disabled = false
|
disabledInflight.forEach(el => {
|
||||||
toggleDisplay(showWhenInflightEl, showWhenNotInflightEl)
|
el.disabled = false
|
||||||
|
})
|
||||||
|
toggleDisplay(showWhenInflight, showWhenNotInflight)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function formSentHelper(el) {
|
function formSentHelper(el) {
|
||||||
const showWhenPending = el.querySelector('[data-ol-not-sent]')
|
const showWhenPending = el.querySelectorAll('[data-ol-not-sent]')
|
||||||
const showWhenDone = el.querySelector('[data-ol-sent]')
|
const showWhenDone = el.querySelectorAll('[data-ol-sent]')
|
||||||
if (!showWhenDone) return
|
if (showWhenDone.length === 0) return
|
||||||
|
|
||||||
el.addEventListener('sent', () => {
|
el.addEventListener('sent', () => {
|
||||||
toggleDisplay(showWhenPending, showWhenDone)
|
toggleDisplay(showWhenPending, showWhenDone)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleDisplay(hideEl, showEl) {
|
function toggleDisplay(hide, show) {
|
||||||
hideEl.setAttribute('hidden', '')
|
hide.forEach(el => {
|
||||||
showEl.removeAttribute('hidden')
|
el.hidden = true
|
||||||
|
})
|
||||||
|
show.forEach(el => {
|
||||||
|
el.hidden = false
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function hydrateForm(el) {
|
export function hydrateForm(el) {
|
||||||
formSubmitHelper(el)
|
formSubmitHelper(el)
|
||||||
formInflightHelper(el)
|
inflightHelper(el)
|
||||||
formSentHelper(el)
|
formSentHelper(el)
|
||||||
|
|
||||||
el.querySelectorAll('input').forEach(inputEl => {
|
el.querySelectorAll('input').forEach(inputEl => {
|
||||||
|
|
10
services/web/frontend/js/features/link-helpers/slow-link.js
Normal file
10
services/web/frontend/js/features/link-helpers/slow-link.js
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import { inflightHelper } from '../form-helpers/hydrate-form'
|
||||||
|
|
||||||
|
function setup(el) {
|
||||||
|
inflightHelper(el)
|
||||||
|
el.addEventListener('click', function () {
|
||||||
|
el.dispatchEvent(new Event('pending'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll('[data-ol-slow-link]').forEach(setup)
|
|
@ -2,6 +2,7 @@ import './utils/webpack-public-path'
|
||||||
import 'jquery'
|
import 'jquery'
|
||||||
import 'bootstrap'
|
import 'bootstrap'
|
||||||
import './features/form-helpers/hydrate-form'
|
import './features/form-helpers/hydrate-form'
|
||||||
|
import './features/link-helpers/slow-link'
|
||||||
import './features/contact-form'
|
import './features/contact-form'
|
||||||
import './features/event-tracking'
|
import './features/event-tracking'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue