forked from alekam/django-tagging-autocomplete
/
jquery.tag-it.min.js
executable file
·12 lines (12 loc) · 5.73 KB
/
jquery.tag-it.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/* jQuery UI Tag-it! http://aehlke.github.com/tag-it/ http://aehlke.github.com/tag-it/LICENSE *pyright 2011, Levy Carneiro Jr. */
(function(b){b.widget("ui.tagit",{options:{itemName:"item",fieldName:"tags",availableTags:[],tagSource:null,minLength:1,removeConfirmation:!1,caseSensitive:!0,placeholderText:null,itemName:"item",fieldName:"tags",availableTags:[],tagSource:null,removeConfirmation:!1,caseSensitive:!0,maxLength:20,maxTags:25,allowSpaces:!1,animate:!0,singleField:!1,singleFieldDelimiter:",",singleFieldNode:null,tabIndex:null,onTagAdded:null,onTagRemoved:null,onTagClicked:null,onMaxTagsExceeded:null},_create:function(){var a=
this;this.element.is("input")?(this.tagList=b("<ul></ul>").insertAfter(this.element),this.options.singleField=!0,this.options.singleFieldNode=this.element,this.element.css("display","none")):this.tagList=this.element.find("ul, ol").andSelf().last();this._tagInput=b('<input type="text" />').addClass("ui-widget-content");this.options.tabIndex&&this._tagInput.attr("tabindex",this.options.tabIndex);this.options.placeholderText&&this._tagInput.attr("placeholder",this.options.placeholderText);this.options.maxLength&&
this._tagInput.attr("maxlength",this.options.maxLength);this.options.tagSource=this.options.tagSource||function(a,c){var d=a.term.toLowerCase(),h=b.grep(this.options.availableTags,function(a){return 0===a.toLowerCase().indexOf(d)});c(this._subtractArray(h,this.assignedTags()))};b.isFunction(this.options.tagSource)&&(this.options.tagSource=b.proxy(this.options.tagSource,this));this.tagList.addClass("tagit").addClass("ui-widget ui-widget-content ui-corner-all").append(b('<li class="tagit-new"></li>').append(this._tagInput)).click(function(e){var c=
b(e.target);c.hasClass("tagit-label")?a._trigger("onTagClicked",e,c.closest(".tagit-choice")):a._tagInput.focus()});this.tagList.children("li").each(function(){b(this).hasClass("tagit-new")||(a.createTag(b(this).html(),b(this).attr("class")),b(this).remove())});if(this.options.singleField)if(this.options.singleFieldNode){var c=b(this.options.singleFieldNode),d=c.val().split(this.options.singleFieldDelimiter);c.val("");b.each(d,function(b,c){a.createTag(c)})}else this.options.singleFieldNode=this.tagList.after('<input type="hidden" style="display:none;" value="" name="'+
this.options.fieldName+'" />');this._tagInput.keydown(function(c){if(c.which==b.ui.keyCode.BACKSPACE&&""===a._tagInput.val()){var d=a._lastTag();!a.options.removeConfirmation||d.hasClass("remove")?a.removeTag(d):a.options.removeConfirmation&&d.addClass("remove ui-state-highlight")}else a.options.removeConfirmation&&a._lastTag().removeClass("remove ui-state-highlight");if(c.which==b.ui.keyCode.COMMA||c.which==b.ui.keyCode.ENTER||c.which==b.ui.keyCode.TAB&&""!==a._tagInput.val()||c.which==b.ui.keyCode.SPACE&&
!0!==a.options.allowSpaces&&('"'!=b.trim(a._tagInput.val()).replace(/^s*/,"").charAt(0)||'"'==b.trim(a._tagInput.val()).charAt(0)&&'"'==b.trim(a._tagInput.val()).charAt(b.trim(a._tagInput.val()).length-1)&&0!==b.trim(a._tagInput.val()).length-1))c.preventDefault(),a.createTag(a._cleanedInput()),a._tagInput.autocomplete("close")}).blur(function(){a.createTag(a._cleanedInput())});(this.options.availableTags||this.options.tagSource)&&this._tagInput.autocomplete({source:this.options.tagSource,select:function(b,
c){""===a._tagInput.val()&&a.removeTag(a._lastTag(),!1);a.createTag(c.item.value);return!1},minLength:this.options.minLength})},_cleanedInput:function(){return b.trim(this._tagInput.val().replace(/^"(.*)"$/,"$1"))},_lastTag:function(){return this.tagList.children(".tagit-choice:last")},assignedTags:function(){var a=this,c=[];this.options.singleField?(c=b(this.options.singleFieldNode).val().split(this.options.singleFieldDelimiter),""===c[0]&&(c=[])):this.tagList.children(".tagit-choice").each(function(){c.push(a.tagLabel(this))});
return c},_updateSingleTagsField:function(a){b(this.options.singleFieldNode).val(a.join(this.options.singleFieldDelimiter))},_subtractArray:function(a,c){for(var d=[],e=0;e<a.length;e++)-1==b.inArray(a[e],c)&&d.push(a[e]);return d},tagLabel:function(a){return this.options.singleField?b(a).children(".tagit-label").text():b(a).children("input").val()},_isNew:function(a){var b=this,d=!0;this.tagList.children(".tagit-choice").each(function(){if(b._formatStr(a)==b._formatStr(b.tagLabel(this)))return d=
!1});return d},_formatStr:function(a){return this.options.caseSensitive?a:b.trim(a.toLowerCase())},createTag:function(a,c){var d=this,a=b.trim(a);if(!this._isNew(a)||""===a)return!1;if(this.tagList.children("li").length>this.options.maxTags)this._trigger("onMaxTagsExceeded",null,a);else{var e=b(this.options.onTagClicked?'<a class="tagit-label"></a>':'<span class="tagit-label"></span>').text(a),f=b("<li></li>").addClass("tagit-choice ui-widget-content ui-state-default ui-corner-all").addClass(c).data("value",
a).append(e),g=b("<span></span>").addClass("ui-icon ui-icon-close"),g=b('<a><span class="text-icon">\u00d7</span></a>').addClass("tagit-close").append(g).click(function(){d.removeTag(f)});f.append(g);this.options.singleField?(e=this.assignedTags(),e.push(a),this._updateSingleTagsField(e)):(e=e.html(),f.append('<input type="hidden" style="display:none;" value="'+e+'" name="'+this.options.itemName+"["+this.options.fieldName+'][]" />'));this._trigger("onTagAdded",null,f);this._tagInput.val("");this._tagInput.parent().before(f)}},
removeTag:function(a,c){c=c||this.options.animate;a=b(a);this._trigger("onTagRemoved",null,a);if(this.options.singleField){var d=this.assignedTags(),e=this.tagLabel(a),d=b.grep(d,function(a){return a!=e});this._updateSingleTagsField(d)}c?a.fadeOut("fast").hide("blind",{direction:"horizontal"},"fast",function(){a.remove()}).dequeue():a.remove()},removeAll:function(){var a=this;this.tagList.children(".tagit-choice").each(function(b,d){a.removeTag(d,!1)})}})})(jQuery);