<html>
<head>
<title>Tagify - async validation</title>
<meta name="description" content="Tagify">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<meta name="author" content="Yair Even Or">
<script src="https://unpkg.com/@yaireo/tagify"></script>
<script src="https://unpkg.com/@yaireo/tagify@3.1.0/dist/tagify.polyfills.min.js"></script>
<link href="https://unpkg.com/@yaireo/tagify/dist/tagify.css" rel="stylesheet" type="text/css" />
<style>
.tagify+input{
display: block !important;
position: static !important;
transform: none !important;
width: 100%;
margin-top: 1em;
padding: .5em;
}
</style>
</head>
<body>
<input placeholder="type tags">
</body>
</html>
body{
font: 13px arial;
}
/* method 1 */
.tagify__tag + .tagify__input::before{ opacity:0; }
/* method 2 */
.tagify:not(.tagify--noTags){
--placeholder-color: transparent;
--placeholder-color-focus: transparent;
}
// Async validation example:
// https://gist.github.com/yairEO/ed5da9df0144fdbd2d214b4760406443
const mockAjax = (timeout => (RES, duration) => {
clearTimeout(timeout); // abort last request
return new Promise((resolve, reject) => timeout = setTimeout(resolve, duration || 0, RES))
})()
var input = document.querySelector('input')
var tagify = new Tagify(input, {
dropdown: {
maxItems :0,
enabled: 0
},
whitelist: ["a", "aa", "aaa", "b", "bb", "ccc"]
})
const onAddTag = async ({detail: {data, tag}}) => {
tagify.tagLoading(tag, true)
// mock server validation
const isValid = await mockAjax(Math.random() > .5, 1000);
tagify.tagLoading(tag, false)
if( !isValid )
tagify.replaceTag(tag, {data, __isValid: "Custom validation error"})
}
tagify.on('add', onAddTag)
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |