/* * Modified input field favicon indicator * 1.0.20180325.0 * * By Eli Grey, https://eligrey.com * License: Dedicated to the public domain. * See LICENSE.md */ // requires Emoji Favicon Toolkit: https://github.com/eligrey/emoji-favicon-toolkit // REQUIRED: set `var favicon` to your current emoji favicon string // I might add generic support for non-EFT favicons later "use strict"; (()=>{ const modified_inputs = new Set; const input_modified = "💬"; const original_favicon = favicon; const defaultValue = "defaultValue"; // store default values addEventListener("beforeinput", (evt) => { const target = evt.target; if (!(defaultValue in target || defaultValue in target.dataset)) { target.dataset[defaultValue] = ("" + (target.value || target.textContent)).trim(); } }); // detect input modifications addEventListener("input", (evt) => { const target = evt.target; const original = defaultValue in target ? target[defaultValue] : target.dataset[defaultValue]; if (original !== ("" + (target.value || target.textContent)).trim()) { if (modified_inputs.add(target).size && favicon !== input_modified) { set_emoji_favicon(favicon = input_modified); } } else if (modified_inputs.delete(target) && favicon === input_modified && !modified_inputs.size) { set_emoji_favicon(favicon = original_favicon); } }); })();