/* eslint-disable @stylistic/max-len */ import { Autofill } from './autofill' import { ConfigManager } from './config-manager' import type { AutofillConfig, AutofillDomForm, AutofillForm, AutofillOptions } from './types/autofill.types' import constants from './constants' export default class Overlay { constructor( private autofill: Autofill, private configManager: ConfigManager, public domForms: AutofillDomForm[], ) {} // @todo nombre de form détecté dans le dom public init(): void { const link = document.createElement('link') link.setAttribute('rel', 'stylesheet') link.setAttribute('type', 'text/css') link.onload = this.show.bind(this) link.setAttribute('href', Overlay.cssLink()) document.querySelectorAll('head')[0].append(link) } private show(): void { const autofill = this.autofill ;(document.querySelector('body') as HTMLElement).style.paddingTop = '35px' const html = `
` document.body.insertAdjacentHTML('beforeend', html) ;(document.querySelector('.js-btn-reset') as HTMLButtonElement).addEventListener('click', () => { this.domForms.forEach(domForm => { if (domForm.form !== null) { domForm.form.reset() } domForm.inputs.forEach(input => { if (input instanceof HTMLInputElement) { input.checked = false if (autofill.configManager.config.valueAttribute) { input.removeAttribute('value') } } }) }) }) ;(document.querySelector('.js-btn-autofill') as HTMLButtonElement).addEventListener('click', () => { this.autofill.fill() }) ;(document.querySelector('.js-btn-infos') as HTMLButtonElement).addEventListener('click', () => { const config = { ...this.configManager.config } const forms = { ...this.configManager.forms } const groupTitleStyle = 'color: #81aece;' const configTitleStyle = 'color: #b24bd6;' const consoleLogKeyStyle = 'color: #cf7b3a; font-weight: 600;' console.log(`%cAutofill.js - v${this.autofill.infos.version}`, ` padding: 0.5rem 1.5rem; color: #212529; background-color: #81aece; `) console.groupCollapsed('%cAutofill Instance', groupTitleStyle) console.log(this.autofill) console.groupEnd() console.groupCollapsed('%cInfos', groupTitleStyle) console.table(this.autofill.infos) console.groupEnd() // BEGIN config console.groupCollapsed('%cConfig', groupTitleStyle) console.groupCollapsed('%cDefault', configTitleStyle) for (const key in this.configManager.defaultConfig) { const value = this.configManager.defaultConfig[key as keyof AutofillConfig] console.log(`%c${key}`, consoleLogKeyStyle, value) } console.groupEnd() console.groupCollapsed('%cConstructor', configTitleStyle) for (const key in this.configManager.options) { const value = this.configManager.options[key as keyof AutofillOptions] console.log(`%c${key}`, consoleLogKeyStyle, value) } console.groupEnd() console.group('%cInstance', configTitleStyle) for (const key in config) { const value = config[key as keyof AutofillConfig] console.log(`%c${key}`, consoleLogKeyStyle, value) } console.groupEnd() console.groupEnd() // END config if (Object.keys(forms).length > 0) { console.groupCollapsed('%cForms', groupTitleStyle) for (const selector in forms) { const form = forms[selector] const inputs = form.inputs console.groupCollapsed(`%c${selector}`, 'color: #e74747') for (const key in form) { if (key !== 'inputs') { console.log(`%c${key}`, consoleLogKeyStyle, form[key as keyof AutofillForm]) } } console.table(inputs) console.groupEnd() } console.groupEnd() } }) } private static cssLink(): string { const { CDN_CSS_URL, DEV_HOSTS } = constants const devPorts = DEV_HOSTS.map(host => host.split(':')[1]) return devPorts.includes(window.location.port) ? `//${window.location.host}/dist/css/autofill.css` : CDN_CSS_URL } private static icon(name: string): string { const icons: Record