@passcore/jquery
Connector de jQuery
@passcore/jquery afegeix $.fn.password() a jQuery 3 i 4. Aplica’l a un camp de contrasenya i afegirà un indicador accessible al contenidor més proper, a més de llançar esdeveniments mentre s’escriu.
pnpm add @passcore/jquery jquery
Tots els indicadors d’aquesta pàgina parlen la teva llengua. L’espai de proves dona a cadascun els textos de la llengua que triïs a dalt i el seu nom accessible. Perquè els fragments de codi siguin breus, només les demostracions de traducció mostren com es fa; el botó per mostrar i amagar la contrasenya és de l’espai de proves, no del paquet.
Per defecte
Tal com ve, l’indicador espera amagat fins que el camp rep el focus i aleshores apareix lliscant. Si el camp es queda buit, torna a amagar-se.
import $ from 'jquery'
import '@passcore/jquery'
import '@passcore/jquery/styles.css'
$('#default-password').password()
Llista de requisits
El clàssic formulari de registre: totes les condicions, en vermell o en verd mentre s’escriu. password.score porta el resultat complet, i result.rules enumera totes les regles actives, per ordre, amb el seu id, passed i params. El connector llegeix el nom d’usuari quan canvia la contrasenya, així que aquest camp també llança una actualització. Cada element es queda en gris fins que s’hi escriu alguna cosa: una contrasenya buida tampoc no és “comuna”, i mostrar-ho en verd seria enganyós.
Requisits
- Almenys 8 caràcters , complert , no complert
- Que no sigui una contrasenya comuna , complert , no complert
- Sense dades personals, com el teu nom d’usuari , complert , no complert
- Una lletra minúscula , complert , no complert
- Una lletra majúscula , complert , no complert
- Un número , complert , no complert
- Un símbol , complert , no complert
7 requisits per complir
// the list: <li data-rule="minLength" data-state="idle">At least 8 characters</li>, and so on
const $summary = $('#checklist-summary')
$('#signup-password')
.password({
userInputs: ['#signup-username'],
rules: { minLength: 8, lowercase: 1, uppercase: 1, numbers: 1, symbols: 1 },
animate: false,
})
.on('password.score', (event, percent, result) => {
const typed = event.target.value !== ''
for (const rule of result.rules) {
$(`#checklist [data-rule="${rule.id}"]`)
.attr('data-state', !typed ? 'idle' : rule.passed ? 'met' : 'unmet')
}
// a live region: only touch it when the count changes
const met = result.rules.filter((rule) => rule.passed).length
const text = typed ? `${met} of ${result.rules.length} requirements met` : `${result.rules.length} requirements to meet`
if ($summary.text() !== text) {
$summary.text(text)
}
})
// the plugin reads the username when the password changes: update on its changes too
$('#signup-username').on('input', () => $('#signup-password').trigger('input'))
Sempre visible, amb el percentatge
Amb animate: false l’indicador es veu des del principi, i showPercent hi afegeix el número.
$('#always-password').password({
animate: false,
showPercent: true,
})
Vinculat a un nom d’usuari
Amb userInputs la contrasenya no pot contenir el nom d’usuari: prova d’escriure’l als dos camps. Els camps es llegeixen a cada pulsació.
$('#linked-password').password({
userInputs: ['#username'],
showPercent: true,
})
Traduccions incloses
Els fitxers inclosos van a translations, i locale tria les formes del plural. Canvia la llengua a dalt: el connector llegeix els textos una sola vegada, així que l’espai de proves el torna a muntar.
import en from '@passcore/jquery/locales/en.json'
import es from '@passcore/jquery/locales/es.json'
import ca from '@passcore/jquery/locales/ca.json'
const locales = { en, es, ca }
$('#translations-password').password({
translations: locales[lang],
locale: lang,
animate: false,
showPercent: true,
})
Traduccions amb i18next
translate rep la funció t d’una instància d’i18next, aquí la del mateix espai de proves. El connector només reescriu el missatge quan canvia, així que un canvi de llengua obliga a tornar-lo a muntar.
import i18next from 'i18next'
import es from '@passcore/jquery/locales/es.json'
import ca from '@passcore/jquery/locales/ca.json'
i18next.addResourceBundle('es', 'passcore', es)
i18next.addResourceBundle('ca', 'passcore', ca)
const $input = $('#i18next-password')
const mount = () => $input.password({
translate: (key, params) => i18next.t(key, { ns: 'passcore', ...params }),
animate: false,
showPercent: true,
})
mount()
// the texts are translated on every update: refresh the meter after changing language
i18next.on('languageChanged', () => $input.password('refresh'))
Callbacks i esdeveniments
password.score es llança a cada pulsació, amb el percentatge i el resultat complet. Aquí controla la puntuació i el botó Envia.
$('#events-password')
.password({ animate: false })
.on('password.score', (event, percent) => {
$('#send').prop('disabled', percent <= 75)
$('#events-score').text(percent + '%')
})
Grup de camps
Per defecte, l’indicador va al div més proper. Amb closestSelector: '.form-group' es col·loca a sota de tot el grup de camps.
$('#group-password').password({
animate: false,
closestSelector: '.form-group',
})
Temes
Els colors, la pista i l’alçada són propietats personalitzades de CSS: de --pass-color-very-weak a --pass-color-strong, --pass-track i --pass-height. Juga-hi aquí: el CSS de sota canvia alhora.
- Molt feble
- Feble
- Acceptable
- Bona
- Forta
.signup {
--pass-height: 6px;
--pass-track: #e4e2db;
--pass-color-very-weak: #d92d20;
--pass-color-weak: #e06a0f;
--pass-color-fair: #c99400;
--pass-color-good: #5e9e0f;
--pass-color-strong: #16884a;
}
Els controls només canvien aquesta previsualització, de manera que les altres demostracions mantenen el seu aspecte. Defineix les propietats a :root per aplicar el tema a tot un lloc web.