From 5814815d40660f382849a7d36c876b16e6e0a4c2 Mon Sep 17 00:00:00 2001 From: romainmenke Date: Sun, 3 Jul 2022 12:12:30 +0200 Subject: [PATCH 1/3] postcss-blank : browser compat --- plugins/css-blank-pseudo/src/browser.js | 94 +++++++++++++++------ plugins/css-blank-pseudo/test/_browser.html | 1 + rollup/presets/browser.javascript.js | 4 +- 3 files changed, 69 insertions(+), 30 deletions(-) diff --git a/plugins/css-blank-pseudo/src/browser.js b/plugins/css-blank-pseudo/src/browser.js index 5706d8713..8f1dc7315 100644 --- a/plugins/css-blank-pseudo/src/browser.js +++ b/plugins/css-blank-pseudo/src/browser.js @@ -1,8 +1,14 @@ -/* global document,MutationObserver */ +/* global document,window,self,MutationObserver */ import isValidReplacement from './is-valid-replacement.mjs'; // form control elements selector -const BLANK_CANDIDATES = 'input,select,textarea'; +function isFormControlElement(element) { + if (element.nodeName === 'INPUT' || element.nodeName === 'SELECT' || element.nodeName === 'TEXTAREA') { + return true; + } + + return false; +} function createNewEvent(eventName) { let event; @@ -21,8 +27,6 @@ function generateHandler(replaceWith) { let selector; let remove; let add; - const matches = typeof document.body.matches === 'function' - ? 'matches' : 'msMatchesSelector'; if (replaceWith[0] === '.') { selector = replaceWith.slice(1); @@ -37,7 +41,7 @@ function generateHandler(replaceWith) { return function handleInputOrChangeEvent(event) { const element = event.target; - if (!element[matches](BLANK_CANDIDATES)) { + if (!isFormControlElement(element)) { return; } @@ -83,16 +87,18 @@ function observeValueOfHTMLElement(HTMLElement, handler) { } export default function cssBlankPseudoInit(opts) { - // configuration - const options = Object.assign( - // Default options - { - force: false, - replaceWith: '[blank]', - }, - // Provided options - opts, - ); + const options = { + force: false, + replaceWith: '[blank]', + }; + + if (typeof opts !== 'undefined' && 'force' in opts) { + options.force = opts.force; + } + + if (typeof opts !== 'undefined' && 'replaceWith' in opts) { + options.replaceWith = opts.replaceWith; + } if (!isValidReplacement(options.replaceWith)) { throw new Error(`${options.replaceWith} is not a valid replacement since it can't be applied to single elements.`); @@ -108,39 +114,71 @@ export default function cssBlankPseudoInit(opts) { const handler = generateHandler(options.replaceWith); - document.body.addEventListener('change', handler); - document.body.addEventListener('input', handler); - - // observe value changes on ,