Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Input2Tags

Version 3.1.1

Supercedes js-input-tags (v2.01)

Check the CodePen.io basic example; autocomplete example.

Project objective: simple but powerful vanilla ES6 javascript (code: 350 lines) input tag generator for any input fields; with auto-completion lists.

Based off the inspiration work of github.com/rk4bir/simple-tags-input; using his idea and CSS but then rewritten for ES6 and more features. Can record special keys (Meta, Alt, Tab, MouseLeft, VolumeUp, etc) as key presses.

This project is mobile-device friendly.

Demo

Demos & Instructions

Video illustrations: demonstration

special-keys

Options

Only required tags are inputId

  • allowDelete: allow the [x] deleting of tags (default true)
  • allowDuplicates: allow duplicate tags (default false)
  • allowSpaces: allow spaces in tags (default false)
  • allowCustomKeys: enables special character handling (default false)
  • autocomplete: array of auto-complete options
  • initialTags: array of initial tags to display
  • targetEl: target list element (if UL) or parent for the created list element
  • onAdd: a function called before adding the tag text (returns text or modified version)
  • onDelete: a function called before deleting a tag (returns true if allowed, false otherwise)
  • onInput: a function called after new user input received
  • onChange: a function called after change to tags (new tag added, re-arranged, deleted tag)

Methods

With a valid Input2Tags() instance you have these methods:

  • getTags(): get the list of tags created
  • setTags([]): set the list of tags
  • addTag(tag): add a new tag to input tags instance
  • deleteTag(index): remove a tag, the index of it's placement
  • showAutocomplete(query): showes autoComplete with matches for the query
  • hideAutocomplete()
  • destroy(): remove the instance

Usage

There are 3 steps to using it

  1. Include the CSS & JS files. 2a. Have an input box (INPUT) that it will use. 2b. If no tag list (UL) is given, it will create one above the input box; if you want to place it differently, create your own and pass it in.
  2. Run the function: const inputTags = new Input2Tags(inputEl, { ...options });

That's it!

BASIC Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"(codewillgohere)</script>

Step 2 - Insert needed HTML into your code

<div><ulid="tagsList"></ul><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl);

Quick example html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" content="IE=edge"><metaname="viewport" content="width=device-width, initial-scale=1.0"><!-- Bootstrap 5 not used by Input Tags --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"><!-- Only CSS used by Input2Tags --><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style.css"></head><body><divclass="container mt-5"><h1class="text-center mb-4">Tags Input</h1><divclass="mb-3"><pclass="mb-2">Tag List:</p><!-- specify the ul LIST element to show the tags --><ulid="myTagList"><li><strong>List:</strong></li></ul><!-- include the input box to input the tags --><p><i>Type something and press Enter</i></p><inputtype="text" id="newTag" class="form-control mt-2" spellcheck="false" placeholder="Enter a tag" /></div><divclass="mb-3"><pclass="mb-2">List results: <strong><spanid="tagsData"></span></strong></p><divclass="mt-5 d-grid gap-2 d-md-flex justify-content-md-start"><buttonclass="btn btn-secondary ms-md-2" onClick="btnAddTag('hello')">Add Tag 'hello'</button></div></div></div><!--Simple tags input implementation--><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest"constinputEl=document.getElementById('newTag');constinput2Tags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],// initialTags: ['one','two','three'], // pre-populate (1)targetEl: document.getElementById('myTagList'),// pre-populate (2)onChange: (tags)=>document.getElementById('tagsData').innerHTML=tags?.join(',')||''});// show initial tags by adding somethingsetTimeout(()=>input2Tags.addTag('Auto-Add'),100)// export module functions for DOMwindow.btnAddTag=(tag)=>input2Tags.addTag(tag);</script></body></html>

AutoComplete Example

Check the CodePen.io example.

Step 1 - Include Files (change path to match where they are)

<head><linkrel="stylesheet" href="https://unpkg.com/input2tags@latest/style"></head><scripttype="module">importInput2Tagsfrom"https://unpkg.com/input2tags@latest?module"</script>

Step 2 - Insert needed HTML into your code

Really just having an input box to enter tags is all that is needed. The package can use an existing list (UL) otherwise it will create one and pre-pend above the INPUT box.

<div><inputtype="text" id="newTag" spellcheck="false" placeholder="Enter a tag" /><buttononClick="btnAddTag('hello')">Add Tag 'hello'</button></div>

Step 3 - Run Javascript (to initialize INPUT field)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{autocomplete: ['apple','banana','cherry'],initialTags: ['one','two','three'],// pre-populate (1)// targetEl: document.getElementById('myTagList'), // pre-populate (2)// onChange: (tags) => document.getElementById('tagsData').innerHTML = tags?.join(',') || ''});// export module functions for DOM access if neededwindow.inputTags=inputTags;

Advanced Ideas

You can use the 4 hooks to limit characters allow in inputs, prevent certain tags from being created, or others from being deleted (with these hooks: onInput, onAdd, onDelete)

constinputEl=document.getElementById('newTag');constinputTags=newInput2Tags(inputEl,{targetEl: document.getElementById('myList'),autocomplete: ['apple','banana','cherry','pear','pineapple'],// allowCustomKeys: true,// onInput: (value,e) => customKeyHandling(value,e),
onInput,
onAdd,
onDelete,onChange: (tags)=>document.getElementById('tagsOutput').value=tags?.join(',')||'',});
  • AutoComplete: Triggering display of autocomplete: see example/advanced.html "Show AutoComplete" button.
<buttononClick="showList('apple')">Show AutoComplete List</button>
window.showList=(search)=>inputTags.showAutocomplete(search);

If you modify the javascript in src/inputtags.js, you can build it with npm run build for distribution.

Before forking and spreading another version, please contact the author with a PR if you have improvements you would like. I'd be happy to integrate improvements.

About

Simple and powerful vanilla javascript plugin to create TAGS from input (and autocomplete)! 🌐 πŸš€

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages