├── .gitignore ├── package.json ├── webpack.mix.js ├── index.html ├── README.md ├── src ├── inputTags.less ├── inputTags.css └── index.js └── dist ├── inputTags.min.css └── inputTags.jquery.min.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | node_modules/* 3 | /.vs 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "inputTags.js", 3 | "version": "1.0.0", 4 | "description": "inputTags.js is a simple jQuery plugin allowing to add, edit or remove tags in a tags list.", 5 | "scripts": { 6 | "build": "cross-env NODE_ENV=production npx mix" 7 | }, 8 | "devDependencies": { 9 | "cross-env": "^7.0.3", 10 | "laravel-mix": "^6.0.43", 11 | "less": "^4.1.2", 12 | "less-loader": "^10.2.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | // webpack.mix.js 2 | 3 | let mix = require('laravel-mix') 4 | let { rmSync, renameSync } = require('fs') 5 | 6 | mix 7 | .disableNotifications() 8 | .disableSuccessNotifications() 9 | .before(() => { 10 | try { 11 | rmSync('src/inputTags.css') 12 | } catch {} 13 | 14 | try { 15 | rmSync('dist/', { recursive: true, force: true }) 16 | } catch {} 17 | }) 18 | .js('src/index', 'dist/inputTags.jquery') 19 | .less('src/inputTags.less', 'src/inputTags.css') 20 | .minify([ 21 | 'dist/inputTags.jquery.js', 22 | 'src/inputTags.css' 23 | ]) 24 | .options({ manifest: false }) 25 | .after(() => { 26 | setTimeout(() => { 27 | rmSync('dist/inputTags.jquery.js') 28 | renameSync('src/inputTags.min.css', 'dist/inputTags.min.css') 29 | }) 30 | }) 31 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | inputTags 6 | 7 | 8 | 9 | 51 | 52 | 53 |
54 |

inputTags jQuery plugin

55 | 56 |

57 | Event: 58 | 59 |

60 |

61 | Autocomplete: 62 | 63 |

64 |
65 | 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # inputTags.js 2 | 3 | ## Presentation 4 | [inputTags.js](http://betaweb.github.io/inputTags-jQuery-plugin/) is a simple jQuery plugin allowing to add, edit or remove tags in a tags list. 5 | 6 | ## Installation 7 | Make sure you include the script after the jQuery library. 8 | ```html 9 | 10 | 11 | ``` 12 | 13 | ## Getting started 14 | Setting up [inputTags.js](http://betaweb.github.io/inputTags-jQuery-plugin/) is very easy. You just have to add this few lines below and that's it ! 15 | 16 | **HTML**: 17 | 18 | ```html 19 | 20 | ``` 21 | 22 | **JS**: 23 | ```js 24 | $('#tags').inputTags(); 25 | ``` 26 | 27 | 28 | ## Basic usage 29 | 30 | **Initialize plugin with custom tags** 31 | Allows you to add custom tags on plugin initialization. 32 | ```js 33 | $('#tags').inputTags({ 34 | tags: ['jQuery', 'tags', 'plugin'] // Custom tags list 35 | }); 36 | ``` 37 | 38 | ## Advanced usage 39 | 40 | **Initialize plugin with tags autocomplete** 41 | Allows you to add a custom list from which the user can choose one or more tags. 42 | ```js 43 | $('#tags').inputTags({ 44 | autocomplete: { 45 | values: ['Pellentesque', 'habitant', 'morbi', 'tristique', 'senectus'] // autocomplete list 46 | } 47 | }); 48 | ``` 49 | 50 | ### Methods 51 | **Coming soon...** 52 | 53 | ### Events 54 | **Add events listener on plugin initialization** 55 | ```js 56 | $('#tags').inputTags({ 57 | init: function($elem) { 58 | console.log('Event called on plugin init', $elem); 59 | }, 60 | create: function() { 61 | console.log('Event called when an item is created'); 62 | }, 63 | update: function() { 64 | console.log('Event called when an item is updated'); 65 | }, 66 | destroy: function() { 67 | console.log('Event called when an item is deleted'); 68 | }, 69 | selected: function() { 70 | console.log('Event called when an item is selected'); 71 | }, 72 | unselected: function() { 73 | console.log('Event called when an item is unselected'); 74 | }, 75 | change: function($elem) { 76 | console.log('Event called on item change', $elem); 77 | } 78 | }); 79 | ``` 80 |
81 | **Add events after plugin initialization** 82 | ```js 83 | $('#tags').inputTags().on('change', function($elem) { 84 | console.log('Event called on item change', $elem); 85 | }); 86 | ``` 87 | same as: 88 | ```js 89 | $('#tags').inputTags('event', 'change', function($elem) { 90 | console.log('Event called on item change', $elem); 91 | }); 92 | ``` 93 | -------------------------------------------------------------------------------- /src/inputTags.less: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,300italic,400italic,600italic); 2 | @import url(http://fonts.googleapis.com/css?family=Ubuntu+Condensed); 3 | 4 | @border: #ddd; 5 | @black: #000; 6 | @white: #fff; 7 | @red: #e74c3c; 8 | @error: fade(@red, 70%); 9 | @blue: #3498db; 10 | @main: #19BC9C; 11 | @container: #f9f9f9; 12 | 13 | .transform(@string) { 14 | -webkit-transform: @string; 15 | -khtml-transform: @string; 16 | -moz-transform: @string; 17 | -ms-transform: @string; 18 | -o-transform: @string; 19 | } 20 | 21 | .transform-origin(@x:center, @y:center) { 22 | -webkit-transform-origin: @x @y; 23 | -khtml-transform-origin: @x @y; 24 | -moz-transform-origin: @x @y; 25 | -ms-transform-origin: @x @y; 26 | -o-transform-origin: @x @y; 27 | } 28 | 29 | .transition(@transition) { 30 | -webkit-transition: @transition; 31 | -khtml-transition: @transition; 32 | -moz-transition: @transition; 33 | -ms-transition: @transition; 34 | -o-transition: @transition; 35 | } 36 | 37 | .transition-duration(@duration:0) { 38 | -webkit-transition-duration: @duration; 39 | -khtml-transition-duration: @duration; 40 | -moz-transition-duration: @duration; 41 | -ms-transition-duration: @duration; 42 | -o-transition-duration: @duration; 43 | } 44 | 45 | .border-radius(@radius: 4px) { 46 | -webkit-border-radius: @radius; 47 | -moz-border-radius: @radius; 48 | border-radius: @radius; 49 | 50 | -moz-background-clip: padding; 51 | -webkit-background-clip: padding-box; 52 | background-clip: padding-box; 53 | } 54 | 55 | @radius: 4px; 56 | 57 | * { box-sizing: border-box; } 58 | .color{ color: @main !important; } 59 | 60 | html, body{ 61 | width: 100%; height: 100%; 62 | margin: 0; 63 | font-family: 'Ubuntu Condensed', sans-serif; 64 | background-color: @white; 65 | } 66 | 67 | h1{ 68 | text-align: center; 69 | margin-bottom: 32px; 70 | } 71 | 72 | div.container{ 73 | display: block; 74 | width: 50%; 75 | margin: 32px auto; 76 | padding: 16px 32px; 77 | background-color: @white; 78 | box-shadow: 2px 2px 8px fade(@black, 10%); 79 | } 80 | 81 | div.inputTags-list{ 82 | display: inline-block; 83 | width: 100%; 84 | padding: 6px; 85 | border: 1px solid fade(@main, 35%); 86 | background-color: @container; 87 | box-shadow: 1px 2px 2px fade(@border, 20%); 88 | .border-radius(@radius); 89 | 90 | span.inputTags-item{ 91 | position: relative; 92 | display: inline-block; 93 | margin: 2px; padding: 3px 22px 4px 8px; 94 | background-color: @main; 95 | text-align: center; 96 | color: @white; 97 | opacity: 1; 98 | .border-radius(3px); 99 | 100 | &.is-edit{ display: none; } 101 | &.is-hidden{ display: none !important; } 102 | &.is-exists{ background-color: @error; } 103 | 104 | span.value{ cursor: pointer; } 105 | 106 | i{ 107 | position: absolute; 108 | top: 50%; right: 6px; 109 | font-size: 20px; 110 | cursor: pointer; 111 | z-index: 10; 112 | font-weight: 400; 113 | font-family: sans-serif; 114 | line-height: 1; 115 | font-style: normal; 116 | .transition(color .2s); 117 | .transform(translateY(-50%)); 118 | 119 | &:hover{ color: @red; } 120 | } 121 | } 122 | input.inputTags-field{ 123 | border: none; 124 | margin-left: 4px; 125 | background-color: transparent; 126 | 127 | &:focus, &:active{ outline: none; } 128 | &.is-edit{ 129 | margin: 0 2px; 130 | padding: 4px 8px 3px 8px; 131 | border: 1px dashed darken(@border, 10%); 132 | .border-radius(@radius); 133 | } 134 | } 135 | 136 | ul.inputTags-autocomplete-list{ 137 | position: absolute; 138 | max-height: 192px; 139 | margin: 0; padding: 0; 140 | list-style-type: none; 141 | background-color: @white; 142 | border: 1px solid @border; 143 | overflow-y: auto; 144 | z-index: 100; 145 | opacity: 0; 146 | .border-radius(@radius); 147 | .transform(scaleY(0)); 148 | .transform-origin(50%, 0); 149 | .transition-duration(.2s); 150 | 151 | &.is-active{ 152 | opacity: 1; 153 | .transform(scaleY(1)); 154 | } 155 | 156 | li{ 157 | height: 32px; line-height: 32px; 158 | padding: 0 16px; 159 | cursor: pointer; 160 | border-bottom: 1px solid @border; 161 | .transition-duration(.3s); 162 | .transition-duration(.2s); 163 | 164 | &:last-child{ border: none; } 165 | 166 | &:hover{ 167 | background-color: @main; 168 | color: @white; 169 | } 170 | 171 | &.is-disabled{ 172 | cursor: default; 173 | background-color: lighten(@border, 10%); 174 | color: initial; 175 | } 176 | } 177 | } 178 | } 179 | 180 | p.inputTags-error{ 181 | position: relative; 182 | margin: 0; padding: 0.5em 1em; 183 | color: @white; 184 | background-color: @error; 185 | cursor: pointer; 186 | .border-radius(@radius); 187 | 188 | &:first-of-type{ margin-top: 8px; } 189 | &:after{ 190 | position: absolute; 191 | content: "\000D7"; 192 | top: 50%; right: 0.5em; 193 | .transform(translateY(-50%)); 194 | font-size: 28px; 195 | } 196 | } -------------------------------------------------------------------------------- /dist/inputTags.min.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18E.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDc.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18E.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdr.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7g.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdr.ttf) format("truetype")}@font-face{font-family:Ubuntu Condensed;font-style:normal;font-weight:400;src:url(http://fonts.gstatic.com/s/ubuntucondensed/v15/u-4k0rCzjgs5J7oXnJcM_0kACGMtT-Dfrg.ttf) format("truetype")}*{box-sizing:border-box}.color{color:#19bc9c!important}body,html{background-color:#fff;font-family:Ubuntu Condensed,sans-serif;height:100%;margin:0;width:100%}h1{margin-bottom:32px;text-align:center}div.container{background-color:#fff;box-shadow:2px 2px 8px rgba(0,0,0,.1);display:block;margin:32px auto;padding:16px 32px;width:50%}div.inputTags-list{background-color:#f9f9f9;border:1px solid rgba(25,188,156,.35);border-radius:4px;box-shadow:1px 2px 2px hsla(0,0%,87%,.2);padding:6px;width:100%}div.inputTags-list,div.inputTags-list span.inputTags-item{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;display:inline-block}div.inputTags-list span.inputTags-item{background-color:#19bc9c;border-radius:3px;color:#fff;margin:2px;opacity:1;padding:3px 22px 4px 8px;position:relative;text-align:center}div.inputTags-list span.inputTags-item.is-edit{display:none}div.inputTags-list span.inputTags-item.is-hidden{display:none!important}div.inputTags-list span.inputTags-item.is-exists{background-color:rgba(231,76,60,.7)}div.inputTags-list span.inputTags-item span.value{cursor:pointer}div.inputTags-list span.inputTags-item i{cursor:pointer;font-family:sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1;position:absolute;right:6px;top:50%;-webkit-transform:translateY(-50%);-khtml-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);-webkit-transition:color .2s;-khtml-transition:color .2s;-moz-transition:color .2s;-ms-transition:color .2s;-o-transition:color .2s;z-index:10}div.inputTags-list span.inputTags-item i:hover{color:#e74c3c}div.inputTags-list input.inputTags-field{background-color:transparent;border:none;margin-left:4px}div.inputTags-list input.inputTags-field:active,div.inputTags-list input.inputTags-field:focus{outline:0}div.inputTags-list input.inputTags-field.is-edit{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px dashed #c4c4c4;border-radius:4px;margin:0 2px;padding:4px 8px 3px}div.inputTags-list ul.inputTags-autocomplete-list{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background-color:#fff;border:1px solid #ddd;border-radius:4px;list-style-type:none;margin:0;max-height:192px;opacity:0;overflow-y:auto;padding:0;position:absolute;-webkit-transform:scaleY(0);-khtml-transform:scaleY(0);-moz-transform:scaleY(0);-ms-transform:scaleY(0);-o-transform:scaleY(0);-webkit-transform-origin:50% 0;-khtml-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;-o-transform-origin:50% 0;-webkit-transition-duration:.2s;-khtml-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s;z-index:100}div.inputTags-list ul.inputTags-autocomplete-list.is-active{opacity:1;-webkit-transform:scaleY(1);-khtml-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1)}div.inputTags-list ul.inputTags-autocomplete-list li{border-bottom:1px solid #ddd;cursor:pointer;height:32px;line-height:32px;padding:0 16px;-webkit-transition-duration:.3s;-khtml-transition-duration:.3s;-moz-transition-duration:.3s;-ms-transition-duration:.3s;-o-transition-duration:.3s;-webkit-transition-duration:.2s;-khtml-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s}div.inputTags-list ul.inputTags-autocomplete-list li:last-child{border:none}div.inputTags-list ul.inputTags-autocomplete-list li:hover{background-color:#19bc9c;color:#fff}div.inputTags-list ul.inputTags-autocomplete-list li.is-disabled{background-color:#f7f7f7;color:initial;cursor:default}p.inputTags-error{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background-color:rgba(231,76,60,.7);border-radius:4px;color:#fff;cursor:pointer;margin:0;padding:.5em 1em;position:relative}p.inputTags-error:first-of-type{margin-top:8px}p.inputTags-error:after{content:"\000D7";font-size:28px;position:absolute;right:.5em;top:50%;-webkit-transform:translateY(-50%);-khtml-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%)} 2 | -------------------------------------------------------------------------------- /src/inputTags.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18E.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDc.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18E.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdr.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7g.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(http://fonts.gstatic.com/s/sourcesanspro/v18/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdr.ttf) format("truetype")}@font-face{font-family:Ubuntu Condensed;font-style:normal;font-weight:400;src:url(http://fonts.gstatic.com/s/ubuntucondensed/v15/u-4k0rCzjgs5J7oXnJcM_0kACGMtT-Dfrg.ttf) format("truetype")}*{box-sizing:border-box}.color{color:#19bc9c!important}body,html{background-color:#fff;font-family:Ubuntu Condensed,sans-serif;height:100%;margin:0;width:100%}h1{margin-bottom:32px;text-align:center}div.container{background-color:#fff;box-shadow:2px 2px 8px rgba(0,0,0,.1);display:block;margin:32px auto;padding:16px 32px;width:50%}div.inputTags-list{background-color:#f9f9f9;border:1px solid rgba(25,188,156,.35);border-radius:4px;box-shadow:1px 2px 2px hsla(0,0%,87%,.2);padding:6px;width:100%}div.inputTags-list,div.inputTags-list span.inputTags-item{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;display:inline-block}div.inputTags-list span.inputTags-item{background-color:#19bc9c;border-radius:3px;color:#fff;margin:2px;opacity:1;padding:3px 22px 4px 8px;position:relative;text-align:center}div.inputTags-list span.inputTags-item.is-edit{display:none}div.inputTags-list span.inputTags-item.is-hidden{display:none!important}div.inputTags-list span.inputTags-item.is-exists{background-color:rgba(231,76,60,.7)}div.inputTags-list span.inputTags-item span.value{cursor:pointer}div.inputTags-list span.inputTags-item i{cursor:pointer;font-family:sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1;position:absolute;right:6px;top:50%;-webkit-transform:translateY(-50%);-khtml-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);-webkit-transition:color .2s;-khtml-transition:color .2s;-moz-transition:color .2s;-ms-transition:color .2s;-o-transition:color .2s;z-index:10}div.inputTags-list span.inputTags-item i:hover{color:#e74c3c}div.inputTags-list input.inputTags-field{background-color:transparent;border:none;margin-left:4px}div.inputTags-list input.inputTags-field:active,div.inputTags-list input.inputTags-field:focus{outline:none}div.inputTags-list input.inputTags-field.is-edit{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px dashed #c4c4c4;border-radius:4px;margin:0 2px;padding:4px 8px 3px}div.inputTags-list ul.inputTags-autocomplete-list{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background-color:#fff;border:1px solid #ddd;border-radius:4px;list-style-type:none;margin:0;max-height:192px;opacity:0;overflow-y:auto;padding:0;position:absolute;-webkit-transform:scaleY(0);-khtml-transform:scaleY(0);-moz-transform:scaleY(0);-ms-transform:scaleY(0);-o-transform:scaleY(0);-webkit-transform-origin:50% 0;-khtml-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;-o-transform-origin:50% 0;-webkit-transition-duration:.2s;-khtml-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s;z-index:100}div.inputTags-list ul.inputTags-autocomplete-list.is-active{opacity:1;-webkit-transform:scaleY(1);-khtml-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1)}div.inputTags-list ul.inputTags-autocomplete-list li{border-bottom:1px solid #ddd;cursor:pointer;height:32px;line-height:32px;padding:0 16px;-webkit-transition-duration:.3s;-khtml-transition-duration:.3s;-moz-transition-duration:.3s;-ms-transition-duration:.3s;-o-transition-duration:.3s;-webkit-transition-duration:.2s;-khtml-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s}div.inputTags-list ul.inputTags-autocomplete-list li:last-child{border:none}div.inputTags-list ul.inputTags-autocomplete-list li:hover{background-color:#19bc9c;color:#fff}div.inputTags-list ul.inputTags-autocomplete-list li.is-disabled{background-color:#f7f7f7;color:initial;cursor:default}p.inputTags-error{-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background-color:rgba(231,76,60,.7);border-radius:4px;color:#fff;cursor:pointer;margin:0;padding:.5em 1em;position:relative}p.inputTags-error:first-of-type{margin-top:8px}p.inputTags-error:after{content:"\000D7";font-size:28px;position:absolute;right:.5em;top:50%;-webkit-transform:translateY(-50%);-khtml-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%)} 2 | -------------------------------------------------------------------------------- /dist/inputTags.jquery.min.js: -------------------------------------------------------------------------------- 1 | (()=>{var t,e={419:()=>{function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}var e;(e=jQuery).fn.inputTags=function(n){if("inputTags"in window||(window.inputTags={instances:[]}),window.inputTags.methods={tags:function(e,n){if(e){switch(t(e)){case"string":switch(e){case"_toString":var o=i.tags.toString();return n?n(o):o;case"_toObject":var s=i._toObject(i.tags);return n?n(s):s;case"_toJSON":s=i._toObject(i.tags);var a=JSON.stringify(s);return n?n(a):a;case"_toArray":return n?n(i.tags):i.tags}var r=e.split(",");if(r.length>1){var u=i.tags;i.tags=u.concat(r)}else i.tags.push(r[0]);break;case"object":u=i.tags,"[object Object]"===Object.prototype.toString.call(e)&&(e=Object.keys(e).map((function(t){return e[t]}))),i.tags=u.concat(e);break;case"function":return e(i.tags)}if(i._clean(),i._fill(),i._updateValue(),i.destroy(),i._setInstance(i),n)return n(i.tags)}return i.tags},event:function(t,e){i.options[t]=e,i._setInstance(i)},options:function(t,e){return t||e?e?(i.options[t]=e,void i._setInstance(i)):i.options[t]:i.options},destroy:function(){var t=e(this).attr("data-uniqid");delete window.inputTags.instances[t]}},"object"===t(n)||!n)return n=e.extend(!0,{},e.fn.inputTags.defaults,n),this.each((function(){var o=e(this);o.KEY_ENTER="Enter",o.KEY_COMMA=",",o.KEY_ESCAPE="Escape",o.UNIQID=Math.round(Date.now()/(494*Math.random()-54)),o.DEFAULT_CLASS="inputTags",o.ELEMENT_CLASS=o.DEFAULT_CLASS+"-"+o.UNIQID,o.LIST_CLASS=o.DEFAULT_CLASS+"-list",o.ITEM_CLASS=o.DEFAULT_CLASS+"-item",o.ITEM_CONTENT='%s×',o.FIELD_CLASS=o.DEFAULT_CLASS+"-field",o.ERROR_CLASS=o.DEFAULT_CLASS+"-error",o.ERROR_CONTENT='

%s

',o.AUTOCOMPLETE_LIST_CLASS=o.DEFAULT_CLASS+"-autocomplete-list",o.AUTOCOMPLETE_ITEM_CLASS=o.DEFAULT_CLASS+"-autocomplete-item",o.AUTOCOMPLETE_ITEM_CONTENT='
  • %s
  • ',o.options=n,o.keys=[o.KEY_ENTER,o.KEY_COMMA,o.KEY_ESCAPE],o.tags=[],o.options.keys.length>0&&(o.keys=o.keys.concat(o.options.keys)),o.init=function(){o.addClass(o.ELEMENT_CLASS).attr("data-uniqid",o.UNIQID),o.$element=e("."+o.ELEMENT_CLASS),o.$element.hide(),o.build(),o.fill(),o.save(),o.edit(),o.destroy(),o._autocomplete._init(),o._focus()},o.build=function(){o.$html=e("
    ").addClass(o.LIST_CLASS),o.$input=e("").attr({type:"text",class:o.FIELD_CLASS}),o.$html.insertAfter(o.$element).prepend(o.$input),o.$list=o.$element.next("."+o.LIST_CLASS),o.$list.on("click",(function(t){if(e(t.target).hasClass("inputTags-field"))return!1;o.$input.focus()}))},o.fill=function(){if(o._getDefaultValues(),0===o.options.tags)return!1;o._concatenate(),o._updateValue(),o._fill()},o._fill=function(){o.tags.forEach((function(t,e){var n=o._validate(t,!1);(!0===n||"max"===n&&e+1<=o.options.max)&&o._buildItem(t)}))},o._clean=function(){e("."+o.ITEM_CLASS,o.$list).remove()},o.save=function(){o.$input.on("keyup",(function(t){t.preventDefault();var n=t.key,i=o.$input.val().trim();if(e.inArray(n,o.keys)<0)return o._autocomplete._init(!0),o._autocomplete._show(),!1;if(o.KEY_ESCAPE===n)return o._cancel(),o._autocomplete._hide(),!1;if(i=o.KEY_COMMA===n?i.slice(0,-1):i,!o._validate(i,!0))return!1;if(o.options.only&&o._exists(i))return o._errors("exists"),!1;if(o.$input.hasClass("is-edit")){var s=o.$input.attr("data-old-value");if(s===i)return o._cancel(),!0;o._update(s,i),o._clean(),o._fill()}else{if(o._autocomplete._isSet()&&o._autocomplete._get("only")&&e.inArray(i,o._autocomplete._get("values"))<0)return o._autocomplete._hide(),o._errors("autocomplete_only"),!1;if(o._exists(i)){o.$input.removeClass("is-autocomplete"),o._errors("exists");var a=e('[data-tag="'+i+'"]',o.$list);return a.addClass("is-exists"),setTimeout((function(){a.removeClass("is-exists")}),300),!1}o._buildItem(i),o._insert(i)}return o._cancel(),o._updateValue(),o.destroy(),o._autocomplete._build(),o._setInstance(o),o.$input.focus(),!1}))},o.edit=function(){o.$list.on("click","."+o.ITEM_CLASS,(function(t){if(e(t.target).hasClass("close-item")||!1===o.options.editable||o._autocomplete._isSet()&&o._autocomplete._get("only"))return o._cancel(),!0;var n=e(this).addClass("is-edit"),i=e(".value",n).text();o.$input.width(n.outerWidth()).insertAfter(n).addClass("is-edit").attr("data-old-value",i).val(i).focus(),o._bindEvent("selected"),o.$input.on("blur",(function(){o._cancel(),o._bindEvent("unselected")}))}))},o.destroy=function(){e("."+o.ITEM_CLASS,o.$list).off("click").on("click",".close-item",(function(){var t=e(this).parent("."+o.ITEM_CLASS),n=e(".value",t).text();t.addClass("is-closed"),setTimeout((function(){o._pop(n),o._updateValue(),t.remove(),o._autocomplete._build(),o.$input.focus(),o._setInstance(o)}),200)}))},o._buildItem=function(t){var n=e(o.ITEM_CONTENT.replace("%s",t));e("").addClass(o.ITEM_CLASS+" is-closed").attr("data-tag",t).html(n).insertBefore(o.$input).delay(100).queue((function(){e(this).removeClass("is-closed")}))},o._getIndex=function(t){return o.tags.indexOf(t)},o._concatenate=function(){o.options.max>0&&o.options.tags.length>o.options.max&&o.options.tags.splice(-Math.abs(o.options.tags.length-o.options.max)),o.tags=o.tags.concat(o.options.tags)},o._getDefaultValues=function(){o.$element.val().length>0?o.tags=o.tags.concat(o.$element.val().split(o.KEY_COMMA)):o.$element.prop("value","")},o._insert=function(t){o.tags.push(t),o._bindEvent(["change","create"])},o._update=function(t,e){var n=o._getIndex(t);o.tags[n]=e,o._bindEvent(["change","update"])},o._pop=function(t){var e=o._getIndex(t);if(e<0)return!1;o.tags.splice(e,1),o._bindEvent(["change","destroy"])},o._cancel=function(){e("."+o.ITEM_CLASS).removeClass("is-edit"),o.$input.removeClass("is-edit is-autocomplete").removeAttr("data-old-value style").val("").appendTo(o.$list)},o._autocomplete={_isSet:function(){return o.options.autocomplete.values.length>0},_init:function(t){if(!o._autocomplete._isSet())return!1;o._autocomplete._build(t)},_build:function(t){var n=o.$input.val().trim().toLowerCase();o._autocomplete._exists()&&o.$autocomplete.remove(),o.$autocomplete=e("