-
-
- *
- * Options:
- * @param limit (integer) - The cutoff character count for the field
- * Default: 200
- * @param warningLimit (integer) - The remaining character count to trigger class change
- * Default: 10
- * @param statusMessage (string) - A jQuery selector to id an existing status container DOM element
- * If left empty, a default will be added after the element
- * Default: ''
- * @param counterClass (string) - Class to apply to the status area, and replaced on warning
- * Default: 'text-primary' (Bootstrap helper class)
- * @param warningClass (string) - Class applied to status area when warningLimit is reached.
- * Replaces the counterClass on warning
- * Default: 'text-danger' (Bootstrap helper class)
- * @param containerElement (string) - DOM element to be inserted if statusMessage is undefined
- * Default: '
'
- * @param containerClass (string) - Class applied to the status container.
- * Default: 'limit-text-status' (no definition)
- */
-
-
-+function ($) {
-
- 'use strict';
-
- /**
- * LimitText Class Definition
- */
- var LimitText = function (element, options) {
- this.options = options;
- this.$element = $(element);
- // if an existing container is not defined, then a default will be created
- this.$status = (this.options.statusMessage.length) ?
- $(this.options.statusMessage) : $(this.options.containerElement);
-
- // Add classes to the status container, and insert base text
- this.$status
- .addClass(this.options.containerClass + ' ' + this.options.counterClass)
- .append('' +
- this.options.limit + ' characters remaining');
-
- // reference not available til we've appended the html snippet
- this.$count = $('strong', this.$status);
-
- // insert the default message container if one isn't already defined
- if (!this.options.statusMessage.length) this.$element.after(this.$status);
-
- // set our event handler and proxy it to properly set the context
- this.$element.on('input.limitText.data-api propertychange.limitText.data-api', $.proxy(this.checkCount, this));
-
- // and run initial check of current value
- this.checkCount();
- };
-
- LimitText.VERSION = '0.0.1';
- LimitText.NAME = 'limitText';
-
- LimitText.DEFAULTS = {
- limit: 200,
- warningLimit: 10,
- statusMessage: '',
- // These two are Bootstrap text emphasis classes
- // that you can override in the config, or roll
- // your own of the same name
- counterClass: 'text-primary',
- warningClass: 'text-danger',
- // The default container element is only used if an
- // existing container (statusMessage) is not defined
- containerElement: '
',
- containerClass: 'limit-text-status'
- };
-
- LimitText.prototype.checkCount = function () {
- var currVal = this.$element.val();
-
- if (currVal.length > this.options.limit) {
- // reset the currVal, so that it stays within the limit
- currVal = currVal.substr(0, this.options.limit - 1);
- this.$element.val(currVal);
- }
-
- var remaining = this.options.limit - currVal.length;
-
- this.$count.html(remaining);
-
- if (remaining <= this.options.warningLimit) {
- this.$status.removeClass(this.options.counterClass).addClass(this.options.warningClass);
- } else {
- this.$status.removeClass(this.options.warningClass).addClass(this.options.counterClass);
- }
- };
-
- LimitText.prototype.destroy = function () {
- $.removeData(this.$element[0], 'limitText');
-
- // remove the inserted status container
- if (!this.options.statusMessage.length) {
- this.$status.remove();
- } else {
- this.$status
- .removeClass(
- this.options.containerClass + ' ' +
- this.options.counterClass + ' ' +
- this.options.warningClass)
- .empty();
- }
-
- this.$element.off('input.limitText.data-api propertychange.limitText.data-api');
- this.$element = null;
- };
-
- // limitText Plugin Definition
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this),
- data = $this.data('limitText'),
- options = $.extend({}, LimitText.DEFAULTS, $this.data(), typeof option == 'object' && option);
-
- if (!data) $this.data('limitText', (data = new LimitText(this, options)));
- if (typeof option == 'string') data[option]();
- });
- }
-
- var old = $.fn.limitText;
-
- $.fn.limitText = Plugin;
- $.fn.limitText.Constructor = LimitText;
-
- // limitText No Conflict
-
- $.fn.limitText.noConflict = function () {
- $.fn.limitText = old;
- return this;
- };
-
-}(jQuery);
\ No newline at end of file
diff --git a/assets/jquery.limitText.min.js b/assets/jquery.limitText.min.js
deleted file mode 100644
index 69108bc..0000000
--- a/assets/jquery.limitText.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* jquery.limitText.js v0.0.1 - (c)2015 Phillip Molaro - MIT Licensed https://github.com/twbs/bootstrap/blob/master/LICENSE */
-+function(t){"use strict";var s=function(s,i){this.options=i,this.$element=t(s),this.$status=t(this.options.statusMessage.length?this.options.statusMessage:this.options.containerElement),this.$status.addClass(this.options.containerClass+" "+this.options.counterClass).append(""+this.options.limit+" characters remaining"),this.$count=t("strong",this.$status),this.options.statusMessage.length||this.$element.after(this.$status),this.$element.on("input.limitText.data-api propertychange.limitText.data-api",t.proxy(this.checkCount,this)),this.checkCount()};s.VERSION="0.0.1",s.NAME="limitText",s.DEFAULTS={limit:200,warningLimit:10,statusMessage:"",counterClass:"text-primary",warningClass:"text-danger",containerElement:"
",containerClass:"limit-text-status"},s.prototype.checkCount=function(){var t=this.$element.val();t.length>this.options.limit&&(t=t.substr(0,this.options.limit-1),this.$element.val(t));var s=this.options.limit-t.length;this.$count.html(s),s<=this.options.warningLimit?this.$status.removeClass(this.options.counterClass).addClass(this.options.warningClass):this.$status.removeClass(this.options.warningClass).addClass(this.options.counterClass)},s.prototype.destroy=function(){t.removeData(this.$element[0],"limitText"),this.options.statusMessage.length?this.$status.removeClass(this.options.containerClass+" "+this.options.counterClass+" "+this.options.warningClass).empty():this.$status.remove(),this.$element.off("input.limitText.data-api propertychange.limitText.data-api"),this.$element=null};var i=t.fn.limitText;t.fn.limitText=function(i){return this.each(function(){var n=t(this),e=n.data("limitText"),a=t.extend({},s.DEFAULTS,n.data(),"object"==typeof i&&i);e||n.data("limitText",e=new s(this,a)),"string"==typeof i&&e[i]()})},t.fn.limitText.Constructor=s,t.fn.limitText.noConflict=function(){return t.fn.limitText=i,this}}(jQuery);
\ No newline at end of file
diff --git a/dist/bootstrap-tagsinput-angular.js b/dist/bootstrap-tagsinput-angular.js
deleted file mode 100644
index 7ba1d14..0000000
--- a/dist/bootstrap-tagsinput-angular.js
+++ /dev/null
@@ -1,93 +0,0 @@
-angular.module('bootstrap-tagsinput', [])
- .directive('bootstrapTagsinput', [function () {
-
- function getItemProperty(scope, property) {
- if (!property)
- return undefined;
-
- if (angular.isFunction(scope.$parent[property]))
- return scope.$parent[property];
-
- return function (item) {
- return item[property];
- };
- }
-
- return {
- restrict: 'EA',
- scope: {
- model: '=ngModel'
- },
- template: '',
- replace: false,
- link: function (scope, element, attrs) {
- $(function () {
- if (!angular.isArray(scope.model))
- scope.model = [];
-
- var select = $('select', element);
- var typeaheadSourceArray = attrs.typeaheadSource ? attrs.typeaheadSource.split('.') : null;
- var typeaheadSource = typeaheadSourceArray ?
- (typeaheadSourceArray.length > 1 ?
- scope.$parent[typeaheadSourceArray[0]][typeaheadSourceArray[1]]
- : scope.$parent[typeaheadSourceArray[0]])
- : null;
-
- select.tagsinput(scope.$parent[attrs.options || ''] || {
- typeahead: {
- source: angular.isFunction(typeaheadSource) ? typeaheadSource : null
- },
- itemValue: getItemProperty(scope, attrs.itemvalue),
- itemText: getItemProperty(scope, attrs.itemtext),
- confirmKeys: getItemProperty(scope, attrs.confirmkeys) ? JSON.parse(attrs.confirmkeys) : [13],
- tagClass: angular.isFunction(scope.$parent[attrs.tagclass]) ? scope.$parent[attrs.tagclass] : function (item) {
- return attrs.tagclass;
- }
- });
-
- for (var i = 0; i < scope.model.length; i++) {
- select.tagsinput('add', scope.model[i]);
- }
-
- select.on('itemAdded', function (event) {
- if (scope.model.indexOf(event.item) === -1)
- scope.model.push(event.item);
- });
-
- select.on('itemRemoved', function (event) {
- var idx = scope.model.indexOf(event.item);
- if (idx !== -1)
- scope.model.splice(idx, 1);
- });
-
- // create a shallow copy of model's current state, needed to determine
- // diff when model changes
- var prev = scope.model.slice();
- scope.$watch("model", function () {
- var added = scope.model.filter(function (i) {
- return prev.indexOf(i) === -1;
- }),
- removed = prev.filter(function (i) {
- return scope.model.indexOf(i) === -1;
- }),
- i;
-
- prev = scope.model.slice();
-
- // Remove tags no longer in binded model
- for (i = 0; i < removed.length; i++) {
- select.tagsinput('remove', removed[i]);
- }
-
- // Refresh remaining tags
- select.tagsinput('refresh');
-
- // Add new items in model as tags
- for (i = 0; i < added.length; i++) {
- select.tagsinput('add', added[i]);
- }
- }, true);
- });
- }
- };
- }]);
diff --git a/dist/bootstrap-tagsinput-angular.min.js b/dist/bootstrap-tagsinput-angular.min.js
deleted file mode 100644
index b1372b1..0000000
--- a/dist/bootstrap-tagsinput-angular.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- * bootstrap-tagsinput v0.6.1 by Tim Schlechter
- *
- */
-
-angular.module("bootstrap-tagsinput",[]).directive("bootstrapTagsinput",[function(){function a(a,b){return b?angular.isFunction(a.$parent[b])?a.$parent[b]:function(a){return a[b]}:void 0}return{restrict:"EA",scope:{model:"=ngModel"},template:"",replace:!1,link:function(b,c,d){$(function(){angular.isArray(b.model)||(b.model=[]);var e=$("select",c),f=d.typeaheadSource?d.typeaheadSource.split("."):null,g=f?f.length>1?b.$parent[f[0]][f[1]]:b.$parent[f[0]]:null;e.tagsinput(b.$parent[d.options||""]||{typeahead:{source:angular.isFunction(g)?g:null},itemValue:a(b,d.itemvalue),itemText:a(b,d.itemtext),confirmKeys:a(b,d.confirmkeys)?JSON.parse(d.confirmkeys):[13],tagClass:angular.isFunction(b.$parent[d.tagclass])?b.$parent[d.tagclass]:function(a){return d.tagclass}});for(var h=0;h
');
- this.$input = $('').appendTo(this.$container);
-
- this.$element.before(this.$container);
-
- this.build(options);
- }
-
- TagsInput.prototype = {
- constructor: TagsInput,
-
- /**
- * Adds the given item as a new tag. Pass true to dontPushVal to prevent
- * updating the elements val()
- */
- add: function (item, dontPushVal, options) {
- var self = this;
-
- if (self.options.maxTags && self.itemsArray.length >= self.options.maxTags)
- return;
-
- // Ignore falsey values, except false
- if (item !== false && !item)
- return;
-
- // Trim value
- if (typeof item === "string" && self.options.trimValue) {
- item = $.trim(item);
- }
-
- // Throw an error when trying to add an object while the itemValue option was not set
- if (typeof item === "object" && !self.objectItems)
- throw("Can't add objects when itemValue option is not set");
-
- // Ignore strings only containg whitespace
- if (item.toString().match(/^\s*$/))
- return;
-
- // If SELECT but not multiple, remove current tag
- if (self.isSelect && !self.multiple && self.itemsArray.length > 0)
- self.remove(self.itemsArray[0]);
-
- if (typeof item === "string" && this.$element[0].tagName === 'INPUT') {
- var delimiter = (self.options.delimiterRegex) ? self.options.delimiterRegex : self.options.delimiter;
- var items = item.split(delimiter);
- if (items.length > 1) {
- for (var i = 0; i < items.length; i++) {
- this.add(items[i], true);
- }
-
- if (!dontPushVal)
- self.pushVal();
- return;
- }
- }
-
- var itemValue = self.options.itemValue(item),
- itemText = self.options.itemText(item),
- tagClass = self.options.tagClass(item),
- itemTitle = self.options.itemTitle(item);
-
- // Ignore items allready added
- var existing = $.grep(self.itemsArray, function (item) {
- return self.options.itemValue(item) === itemValue;
- })[0];
- if (existing && !self.options.allowDuplicates) {
- // Invoke onTagExists
- if (self.options.onTagExists) {
- var $existingTag = $(".tag", self.$container).filter(function () {
- return $(this).data("item") === existing;
- });
- self.options.onTagExists(item, $existingTag);
- }
- return;
- }
-
- // if length greater than limit
- if (self.items().toString().length + item.length + 1 > self.options.maxInputLength)
- return;
-
- // raise beforeItemAdd arg
- var beforeItemAddEvent = $.Event('beforeItemAdd', {item: item, cancel: false, options: options});
- self.$element.trigger(beforeItemAddEvent);
- if (beforeItemAddEvent.cancel)
- return;
-
- // register item in internal array and map
- self.itemsArray.push(item);
-
- // add a tag element
-
- var $tag = $('' + htmlEncode(itemText) + '');
- $tag.data('item', item);
- self.findInputWrapper().before($tag);
- $tag.after(' ');
-
- // add if item represents a value not present in one of the 's options
- if (self.isSelect && !$('option[value="' + encodeURIComponent(itemValue) + '"]', self.$element)[0]) {
- var $option = $('');
- $option.data('item', item);
- $option.attr('value', itemValue);
- self.$element.append($option);
- }
-
- if (!dontPushVal)
- self.pushVal();
-
- // Add class when reached maxTags
- if (self.options.maxTags === self.itemsArray.length || self.items().toString().length === self.options.maxInputLength)
- self.$container.addClass('bootstrap-tagsinput-max');
-
- self.$element.trigger($.Event('itemAdded', {item: item, options: options}));
- },
-
- /**
- * Removes the given item. Pass true to dontPushVal to prevent updating the
- * elements val()
- */
- remove: function (item, dontPushVal, options) {
- var self = this;
-
- if (self.objectItems) {
- if (typeof item === "object")
- item = $.grep(self.itemsArray, function (other) {
- return self.options.itemValue(other) == self.options.itemValue(item);
- });
- else
- item = $.grep(self.itemsArray, function (other) {
- return self.options.itemValue(other) == item;
- });
-
- item = item[item.length - 1];
- }
-
- if (item) {
- var beforeItemRemoveEvent = $.Event('beforeItemRemove', {item: item, cancel: false, options: options});
- self.$element.trigger(beforeItemRemoveEvent);
- if (beforeItemRemoveEvent.cancel)
- return;
-
- $('.tag', self.$container).filter(function () {
- return $(this).data('item') === item;
- }).remove();
- $('option', self.$element).filter(function () {
- return $(this).data('item') === item;
- }).remove();
- if ($.inArray(item, self.itemsArray) !== -1)
- self.itemsArray.splice($.inArray(item, self.itemsArray), 1);
- }
-
- if (!dontPushVal)
- self.pushVal();
-
- // Remove class when reached maxTags
- if (self.options.maxTags > self.itemsArray.length)
- self.$container.removeClass('bootstrap-tagsinput-max');
-
- self.$element.trigger($.Event('itemRemoved', {item: item, options: options}));
- },
-
- /**
- * Removes all items
- */
- removeAll: function () {
- var self = this;
-
- $('.tag', self.$container).remove();
- $('option', self.$element).remove();
-
- while (self.itemsArray.length > 0)
- self.itemsArray.pop();
-
- self.pushVal();
- },
-
- /**
- * Refreshes the tags so they match the text/value of their corresponding
- * item.
- */
- refresh: function () {
- var self = this;
- $('.tag', self.$container).each(function () {
- var $tag = $(this),
- item = $tag.data('item'),
- itemValue = self.options.itemValue(item),
- itemText = self.options.itemText(item),
- tagClass = self.options.tagClass(item);
-
- // Update tag's class and inner text
- $tag.attr('class', null);
- $tag.addClass('tag ' + htmlEncode(tagClass));
- $tag.contents().filter(function () {
- return this.nodeType == 3;
- })[0].nodeValue = htmlEncode(itemText);
-
- if (self.isSelect) {
- var option = $('option', self.$element).filter(function () {
- return $(this).data('item') === item;
- });
- option.attr('value', itemValue);
- }
- });
- },
-
- /**
- * Returns the items added as tags
- */
- items: function () {
- return this.itemsArray;
- },
-
- /**
- * Assembly value by retrieving the value of each item, and set it on the
- * element.
- */
- pushVal: function () {
- var self = this,
- val = $.map(self.items(), function (item) {
- return self.options.itemValue(item).toString();
- });
-
- self.$element.val(val, true).trigger('change');
- },
-
- /**
- * Initializes the tags input behaviour on the element
- */
- build: function (options) {
- var self = this;
-
- self.options = $.extend({}, defaultOptions, options);
- // When itemValue is set, freeInput should always be false
- if (self.objectItems)
- self.options.freeInput = false;
-
- makeOptionItemFunction(self.options, 'itemValue');
- makeOptionItemFunction(self.options, 'itemText');
- makeOptionFunction(self.options, 'tagClass');
-
- // Typeahead Bootstrap version 2.3.2
- if (self.options.typeahead) {
- var typeahead = self.options.typeahead || {};
-
- makeOptionFunction(typeahead, 'source');
-
- self.$input.typeahead($.extend({}, typeahead, {
- source: function (query, process) {
- function processItems(items) {
- var texts = [];
-
- for (var i = 0; i < items.length; i++) {
- var text = self.options.itemText(items[i]);
- map[text] = items[i];
- texts.push(text);
- }
- process(texts);
- }
-
- this.map = {};
- var map = this.map,
- data = typeahead.source(query);
-
- if ($.isFunction(data.success)) {
- // support for Angular callbacks
- data.success(processItems);
- } else if ($.isFunction(data.then)) {
- // support for Angular promises
- data.then(processItems);
- } else {
- // support for functions and jquery promises
- $.when(data)
- .then(processItems);
- }
- },
- updater: function (text) {
- self.add(this.map[text]);
- return this.map[text];
- },
- matcher: function (text) {
- return (text.toLowerCase().indexOf(this.query.trim().toLowerCase()) !== -1);
- },
- sorter: function (texts) {
- return texts.sort();
- },
- highlighter: function (text) {
- var regex = new RegExp('(' + this.query + ')', 'gi');
- return text.replace(regex, "$1");
- }
- }));
- }
-
- // typeahead.js
- if (self.options.typeaheadjs) {
- var typeaheadConfig = null;
- var typeaheadDatasets = {};
-
- // Determine if main configurations were passed or simply a dataset
- var typeaheadjs = self.options.typeaheadjs;
- if ($.isArray(typeaheadjs)) {
- typeaheadConfig = typeaheadjs[0];
- typeaheadDatasets = typeaheadjs[1];
- } else {
- typeaheadDatasets = typeaheadjs;
- }
-
- self.$input.typeahead(typeaheadConfig, typeaheadDatasets).on('typeahead:selected', $.proxy(function (obj, datum) {
- if (typeaheadDatasets.valueKey)
- self.add(datum[typeaheadDatasets.valueKey]);
- else
- self.add(datum);
- self.$input.typeahead('val', '');
- }, self));
- }
-
- self.$container.on('click', $.proxy(function (event) {
- if (!self.$element.attr('disabled')) {
- self.$input.removeAttr('disabled');
- }
- self.$input.focus();
- }, self));
-
- if (self.options.addOnBlur && self.options.freeInput) {
- self.$input.on('focusout', $.proxy(function (event) {
- // HACK: only process on focusout when no typeahead opened, to
- // avoid adding the typeahead text as tag
- if ($('.typeahead, .twitter-typeahead', self.$container).length === 0) {
- self.add(self.$input.val());
- self.$input.val('');
- }
- }, self));
- }
-
-
- self.$container.on('keydown', 'input', $.proxy(function (event) {
- var $input = $(event.target),
- $inputWrapper = self.findInputWrapper();
-
- if (self.$element.attr('disabled')) {
- self.$input.attr('disabled', 'disabled');
- return;
- }
-
- switch (event.which) {
- // BACKSPACE
- case 8:
- if (doGetCaretPosition($input[0]) === 0) {
- var prev = $inputWrapper.prev();
- if (prev.length) {
- self.remove(prev.data('item'));
- }
- }
- break;
-
- // DELETE
- case 46:
- if (doGetCaretPosition($input[0]) === 0) {
- var next = $inputWrapper.next();
- if (next.length) {
- self.remove(next.data('item'));
- }
- }
- break;
-
- // LEFT ARROW
- case 37:
- // Try to move the input before the previous tag
- var $prevTag = $inputWrapper.prev();
- if ($input.val().length === 0 && $prevTag[0]) {
- $prevTag.before($inputWrapper);
- $input.focus();
- }
- break;
- // RIGHT ARROW
- case 39:
- // Try to move the input after the next tag
- var $nextTag = $inputWrapper.next();
- if ($input.val().length === 0 && $nextTag[0]) {
- $nextTag.after($inputWrapper);
- $input.focus();
- }
- break;
- default:
- // ignore
- }
-
- // Reset internal input's size
- var textLength = $input.val().length,
- wordSpace = Math.ceil(textLength / 5),
- size = textLength + wordSpace + 1;
- $input.attr('size', Math.max(this.inputSize, $input.val().length));
- }, self));
-
- self.$container.on('keypress', 'input', $.proxy(function (event) {
- var $input = $(event.target);
-
- if (self.$element.attr('disabled')) {
- self.$input.attr('disabled', 'disabled');
- return;
- }
-
- var text = $input.val(),
- maxLengthReached = self.options.maxChars && text.length >= self.options.maxChars;
- if (self.options.freeInput && (keyCombinationInList(event, self.options.confirmKeys) || maxLengthReached)) {
- // Only attempt to add a tag if there is data in the field
- if (text.length !== 0) {
- self.add(maxLengthReached ? text.substr(0, self.options.maxChars) : text);
- $input.val('');
- }
-
- // If the field is empty, let the event triggered fire as usual
- if (self.options.cancelConfirmKeysOnEmpty === false) {
- event.preventDefault();
- }
- }
-
- // Reset internal input's size
- var textLength = $input.val().length,
- wordSpace = Math.ceil(textLength / 5),
- size = textLength + wordSpace + 1;
- $input.attr('size', Math.max(this.inputSize, $input.val().length));
- }, self));
-
- // Remove icon clicked
- self.$container.on('click', '[data-role=remove]', $.proxy(function (event) {
- if (self.$element.attr('disabled')) {
- return;
- }
- self.remove($(event.target).closest('.tag').data('item'));
- }, self));
-
- // Only add existing value as tags when using strings as tags
- if (self.options.itemValue === defaultOptions.itemValue) {
- if (self.$element[0].tagName === 'INPUT') {
- self.add(self.$element.val());
- } else {
- $('option', self.$element).each(function () {
- self.add($(this).attr('value'), true);
- });
- }
- }
- },
-
- /**
- * Removes all tagsinput behaviour and unregsiter all event handlers
- */
- destroy: function () {
- var self = this;
-
- // Unbind events
- self.$container.off('keypress', 'input');
- self.$container.off('click', '[role=remove]');
-
- self.$container.remove();
- self.$element.removeData('tagsinput');
- self.$element.show();
- },
-
- /**
- * Sets focus on the tagsinput
- */
- focus: function () {
- this.$input.focus();
- },
-
- /**
- * Returns the internal input element
- */
- input: function () {
- return this.$input;
- },
-
- /**
- * Returns the element which is wrapped around the internal input. This
- * is normally the $container, but typeahead.js moves the $input element.
- */
- findInputWrapper: function () {
- var elt = this.$input[0],
- container = this.$container[0];
- while (elt && elt.parentNode !== container)
- elt = elt.parentNode;
-
- return $(elt);
- }
- };
-
- /**
- * Register JQuery plugin
- */
- $.fn.tagsinput = function (arg1, arg2, arg3) {
- var results = [];
-
- this.each(function () {
- var tagsinput = $(this).data('tagsinput');
- // Initialize a new tags input
- if (!tagsinput) {
- tagsinput = new TagsInput(this, arg1);
- $(this).data('tagsinput', tagsinput);
- results.push(tagsinput);
-
- if (this.tagName === 'SELECT') {
- $('option', $(this)).attr('selected', 'selected');
- }
-
- // Init tags from $(this).val()
- $(this).val($(this).val());
- } else if (!arg1 && !arg2) {
- // tagsinput already exists
- // no function, trying to init
- results.push(tagsinput);
- } else if (tagsinput[arg1] !== undefined) {
- // Invoke function on existing tags input
- if (tagsinput[arg1].length === 3 && arg3 !== undefined) {
- var retVal = tagsinput[arg1](arg2, null, arg3);
- } else {
- var retVal = tagsinput[arg1](arg2);
- }
- if (retVal !== undefined)
- results.push(retVal);
- }
- });
-
- if (typeof arg1 == 'string') {
- // Return the results from the invoked function calls
- return results.length > 1 ? results : results[0];
- } else {
- return results;
- }
- };
-
- $.fn.tagsinput.Constructor = TagsInput;
-
- /**
- * Most options support both a string or number as well as a function as
- * option value. This function makes sure that the option with the given
- * key in the given options is wrapped in a function
- */
- function makeOptionItemFunction(options, key) {
- if (typeof options[key] !== 'function') {
- var propertyName = options[key];
- options[key] = function (item) {
- return item[propertyName];
- };
- }
- }
-
- function makeOptionFunction(options, key) {
- if (typeof options[key] !== 'function') {
- var value = options[key];
- options[key] = function () {
- return value;
- };
- }
- }
-
- /**
- * HtmlEncodes the given value
- */
- var htmlEncodeContainer = $('');
-
- function htmlEncode(value) {
- if (value) {
- return htmlEncodeContainer.text(value).html();
- } else {
- return '';
- }
- }
-
- /**
- * Returns the position of the caret in the given input field
- * http://flightschool.acylt.com/devnotes/caret-position-woes/
- */
- function doGetCaretPosition(oField) {
- var iCaretPos = 0;
- if (document.selection) {
- oField.focus();
- var oSel = document.selection.createRange();
- oSel.moveStart('character', -oField.value.length);
- iCaretPos = oSel.text.length;
- } else if (oField.selectionStart || oField.selectionStart == '0') {
- iCaretPos = oField.selectionStart;
- }
- return (iCaretPos);
- }
-
- /**
- * Returns boolean indicates whether user has pressed an expected key combination.
- * @param object keyPressEvent: JavaScript event object, refer
- * http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
- * @param object lookupList: expected key combinations, as in:
- * [13, {which: 188, shiftKey: true}]
- */
- function keyCombinationInList(keyPressEvent, lookupList) {
- var found = false;
- $.each(lookupList, function (index, keyCombination) {
- if (typeof (keyCombination) === 'number' && keyPressEvent.which === keyCombination) {
- found = true;
- return false;
- }
-
- if (keyPressEvent.which === keyCombination.which) {
- var alt = !keyCombination.hasOwnProperty('altKey') || keyPressEvent.altKey === keyCombination.altKey,
- shift = !keyCombination.hasOwnProperty('shiftKey') || keyPressEvent.shiftKey === keyCombination.shiftKey,
- ctrl = !keyCombination.hasOwnProperty('ctrlKey') || keyPressEvent.ctrlKey === keyCombination.ctrlKey;
- if (alt && shift && ctrl) {
- found = true;
- return false;
- }
- }
- });
-
- return found;
- }
-
- /**
- * Initialize tagsinput behaviour on inputs and selects which have
- * data-role=tagsinput
- */
- $(function () {
- $("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput();
- });
-})(window.jQuery);
diff --git a/dist/bootstrap-tagsinput.less b/dist/bootstrap-tagsinput.less
deleted file mode 100644
index d5f03f8..0000000
--- a/dist/bootstrap-tagsinput.less
+++ /dev/null
@@ -1,53 +0,0 @@
-.bootstrap-tagsinput {
- background-color: #fff;
- border: 1px solid #ccc;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- display: inline-block;
- padding: 4px 6px;
- margin-bottom: 10px;
- color: #555;
- vertical-align: middle;
- border-radius: 4px;
- max-width: 100%;
- line-height: 22px;
- cursor: text;
-
- input {
- border: none;
- box-shadow: none;
- outline: none;
- background-color: transparent;
- padding: 0;
- margin: 0;
- width: auto !important;
- max-width: inherit;
-
- &:focus {
- border: none;
- box-shadow: none;
- }
- }
-
- .tag {
- margin-right: 2px;
- color: white;
-
- [data-role="remove"] {
- margin-left: 8px;
- cursor: pointer;
-
- &:after {
- content: "x";
- padding: 0px 2px;
- }
-
- &:hover {
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-
- &:active {
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- }
- }
- }
- }
-}
diff --git a/dist/bootstrap-tagsinput.min.js b/dist/bootstrap-tagsinput.min.js
deleted file mode 100644
index 3adbfd9..0000000
--- a/dist/bootstrap-tagsinput.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- * bootstrap-tagsinput v0.6.1 by Tim Schlechter
- *
- */
-
-!function(a){"use strict";function b(b,c){this.itemsArray=[],this.$element=a(b),this.$element.hide(),this.isSelect="SELECT"===b.tagName,this.multiple=this.isSelect&&b.hasAttribute("multiple"),this.objectItems=c&&c.itemValue,this.placeholderText=b.hasAttribute("placeholder")?this.$element.attr("placeholder"):"",this.inputSize=Math.max(1,this.placeholderText.length),this.$container=a(''),this.$input=a('').appendTo(this.$container),this.$element.before(this.$container),this.build(c)}function c(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(a){return a[c]}}}function d(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(){return c}}}function e(a){return a?i.text(a).html():""}function f(a){var b=0;if(document.selection){a.focus();var c=document.selection.createRange();c.moveStart("character",-a.value.length),b=c.text.length}else(a.selectionStart||"0"==a.selectionStart)&&(b=a.selectionStart);return b}function g(b,c){var d=!1;return a.each(c,function(a,c){if("number"==typeof c&&b.which===c)return d=!0,!1;if(b.which===c.which){var e=!c.hasOwnProperty("altKey")||b.altKey===c.altKey,f=!c.hasOwnProperty("shiftKey")||b.shiftKey===c.shiftKey,g=!c.hasOwnProperty("ctrlKey")||b.ctrlKey===c.ctrlKey;if(e&&f&&g)return d=!0,!1}}),d}var h={tagClass:function(a){return"label label-info"},itemValue:function(a){return a?a.toString():a},itemText:function(a){return this.itemValue(a)},itemTitle:function(a){return null},freeInput:!0,addOnBlur:!0,maxTags:void 0,maxChars:void 0,confirmKeys:[13,44],delimiter:",",delimiterRegex:null,cancelConfirmKeysOnEmpty:!0,onTagExists:function(a,b){b.hide().fadeIn()},trimValue:!1,allowDuplicates:!1};b.prototype={constructor:b,add:function(b,c,d){var f=this;if(!(f.options.maxTags&&f.itemsArray.length>=f.options.maxTags)&&(b===!1||b)){if("string"==typeof b&&f.options.trimValue&&(b=a.trim(b)),"object"==typeof b&&!f.objectItems)throw"Can't add objects when itemValue option is not set";if(!b.toString().match(/^\s*$/)){if(f.isSelect&&!f.multiple&&f.itemsArray.length>0&&f.remove(f.itemsArray[0]),"string"==typeof b&&"INPUT"===this.$element[0].tagName){var g=f.options.delimiterRegex?f.options.delimiterRegex:f.options.delimiter,h=b.split(g);if(h.length>1){for(var i=0;if.options.maxInputLength)){var o=a.Event("beforeItemAdd",{item:b,cancel:!1,options:d});if(f.$element.trigger(o),!o.cancel){f.itemsArray.push(b);var p=a(''+e(k)+'');if(p.data("item",b),f.findInputWrapper().before(p),p.after(" "),f.isSelect&&!a('option[value="'+encodeURIComponent(j)+'"]',f.$element)[0]){var q=a("");q.data("item",b),q.attr("value",j),f.$element.append(q)}c||f.pushVal(),(f.options.maxTags===f.itemsArray.length||f.items().toString().length===f.options.maxInputLength)&&f.$container.addClass("bootstrap-tagsinput-max"),f.$element.trigger(a.Event("itemAdded",{item:b,options:d}))}}}else if(f.options.onTagExists){var r=a(".tag",f.$container).filter(function(){return a(this).data("item")===n});f.options.onTagExists(b,r)}}}},remove:function(b,c,d){var e=this;if(e.objectItems&&(b="object"==typeof b?a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==e.options.itemValue(b)}):a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==b}),b=b[b.length-1]),b){var f=a.Event("beforeItemRemove",{item:b,cancel:!1,options:d});if(e.$element.trigger(f),f.cancel)return;a(".tag",e.$container).filter(function(){return a(this).data("item")===b}).remove(),a("option",e.$element).filter(function(){return a(this).data("item")===b}).remove(),-1!==a.inArray(b,e.itemsArray)&&e.itemsArray.splice(a.inArray(b,e.itemsArray),1)}c||e.pushVal(),e.options.maxTags>e.itemsArray.length&&e.$container.removeClass("bootstrap-tagsinput-max"),e.$element.trigger(a.Event("itemRemoved",{item:b,options:d}))},removeAll:function(){var b=this;for(a(".tag",b.$container).remove(),a("option",b.$element).remove();b.itemsArray.length>0;)b.itemsArray.pop();b.pushVal()},refresh:function(){var b=this;a(".tag",b.$container).each(function(){var c=a(this),d=c.data("item"),f=b.options.itemValue(d),g=b.options.itemText(d),h=b.options.tagClass(d);if(c.attr("class",null),c.addClass("tag "+e(h)),c.contents().filter(function(){return 3==this.nodeType})[0].nodeValue=e(g),b.isSelect){var i=a("option",b.$element).filter(function(){return a(this).data("item")===d});i.attr("value",f)}})},items:function(){return this.itemsArray},pushVal:function(){var b=this,c=a.map(b.items(),function(a){return b.options.itemValue(a).toString()});b.$element.val(c,!0).trigger("change")},build:function(b){var e=this;if(e.options=a.extend({},h,b),e.objectItems&&(e.options.freeInput=!1),c(e.options,"itemValue"),c(e.options,"itemText"),d(e.options,"tagClass"),e.options.typeahead){var i=e.options.typeahead||{};d(i,"source"),e.$input.typeahead(a.extend({},i,{source:function(b,c){function d(a){for(var b=[],d=0;d$1")}}))}if(e.options.typeaheadjs){var j=null,k={},l=e.options.typeaheadjs;a.isArray(l)?(j=l[0],k=l[1]):k=l,e.$input.typeahead(j,k).on("typeahead:selected",a.proxy(function(a,b){k.valueKey?e.add(b[k.valueKey]):e.add(b),e.$input.typeahead("val","")},e))}e.$container.on("click",a.proxy(function(a){e.$element.attr("disabled")||e.$input.removeAttr("disabled"),e.$input.focus()},e)),e.options.addOnBlur&&e.options.freeInput&&e.$input.on("focusout",a.proxy(function(b){0===a(".typeahead, .twitter-typeahead",e.$container).length&&(e.add(e.$input.val()),e.$input.val(""))},e)),e.$container.on("keydown","input",a.proxy(function(b){var c=a(b.target),d=e.findInputWrapper();if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");switch(b.which){case 8:if(0===f(c[0])){var g=d.prev();g.length&&e.remove(g.data("item"))}break;case 46:if(0===f(c[0])){var h=d.next();h.length&&e.remove(h.data("item"))}break;case 37:var i=d.prev();0===c.val().length&&i[0]&&(i.before(d),c.focus());break;case 39:var j=d.next();0===c.val().length&&j[0]&&(j.after(d),c.focus())}var k=c.val().length;Math.ceil(k/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("keypress","input",a.proxy(function(b){var c=a(b.target);if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");var d=c.val(),f=e.options.maxChars&&d.length>=e.options.maxChars;e.options.freeInput&&(g(b,e.options.confirmKeys)||f)&&(0!==d.length&&(e.add(f?d.substr(0,e.options.maxChars):d),c.val("")),e.options.cancelConfirmKeysOnEmpty===!1&&b.preventDefault());var h=c.val().length;Math.ceil(h/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("click","[data-role=remove]",a.proxy(function(b){e.$element.attr("disabled")||e.remove(a(b.target).closest(".tag").data("item"))},e)),e.options.itemValue===h.itemValue&&("INPUT"===e.$element[0].tagName?e.add(e.$element.val()):a("option",e.$element).each(function(){e.add(a(this).attr("value"),!0)}))},destroy:function(){var a=this;a.$container.off("keypress","input"),a.$container.off("click","[role=remove]"),a.$container.remove(),a.$element.removeData("tagsinput"),a.$element.show()},focus:function(){this.$input.focus()},input:function(){return this.$input},findInputWrapper:function(){for(var b=this.$input[0],c=this.$container[0];b&&b.parentNode!==c;)b=b.parentNode;return a(b)}},a.fn.tagsinput=function(c,d,e){var f=[];return this.each(function(){var g=a(this).data("tagsinput");if(g)if(c||d){if(void 0!==g[c]){if(3===g[c].length&&void 0!==e)var h=g[c](d,null,e);else var h=g[c](d);void 0!==h&&f.push(h)}}else f.push(g);else g=new b(this,c),a(this).data("tagsinput",g),f.push(g),"SELECT"===this.tagName&&a("option",a(this)).attr("selected","selected"),a(this).val(a(this).val())}),"string"==typeof c?f.length>1?f:f[0]:f},a.fn.tagsinput.Constructor=b;var i=a("");a(function(){a("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput()})}(window.jQuery);
-//# sourceMappingURL=bootstrap-tagsinput.min.js.map
\ No newline at end of file
diff --git a/dist/bootstrap-tagsinput.min.js.map b/dist/bootstrap-tagsinput.min.js.map
deleted file mode 100644
index c3e12e1..0000000
--- a/dist/bootstrap-tagsinput.min.js.map
+++ /dev/null
@@ -1,194 +0,0 @@
-{
- "version": 3,
- "sources": [
- "../src/bootstrap-tagsinput.js"
- ],
- "names": [
- "$",
- "TagsInput",
- "element",
- "options",
- "this",
- "itemsArray",
- "$element",
- "hide",
- "isSelect",
- "tagName",
- "multiple",
- "hasAttribute",
- "objectItems",
- "itemValue",
- "placeholderText",
- "attr",
- "inputSize",
- "Math",
- "max",
- "length",
- "$container",
- "$input",
- "appendTo",
- "before",
- "build",
- "makeOptionItemFunction",
- "key",
- "propertyName",
- "item",
- "makeOptionFunction",
- "value",
- "htmlEncode",
- "htmlEncodeContainer",
- "text",
- "html",
- "doGetCaretPosition",
- "oField",
- "iCaretPos",
- "document",
- "selection",
- "focus",
- "oSel",
- "createRange",
- "moveStart",
- "selectionStart",
- "keyCombinationInList",
- "keyPressEvent",
- "lookupList",
- "found",
- "each",
- "index",
- "keyCombination",
- "which",
- "alt",
- "hasOwnProperty",
- "altKey",
- "shift",
- "shiftKey",
- "ctrl",
- "ctrlKey",
- "defaultOptions",
- "tagClass",
- "toString",
- "itemText",
- "itemTitle",
- "freeInput",
- "addOnBlur",
- "maxTags",
- "undefined",
- "maxChars",
- "confirmKeys",
- "delimiter",
- "delimiterRegex",
- "cancelConfirmKeysOnEmpty",
- "onTagExists",
- "$tag",
- "fadeIn",
- "trimValue",
- "allowDuplicates",
- "prototype",
- "constructor",
- "add",
- "dontPushVal",
- "self",
- "trim",
- "match",
- "remove",
- "items",
- "split",
- "i",
- "pushVal",
- "existing",
- "grep",
- "maxInputLength",
- "beforeItemAddEvent",
- "Event",
- "cancel",
- "trigger",
- "push",
- "data",
- "findInputWrapper",
- "after",
- "encodeURIComponent",
- "$option",
- "append",
- "addClass",
- "$existingTag",
- "filter",
- "other",
- "beforeItemRemoveEvent",
- "inArray",
- "splice",
- "removeClass",
- "removeAll",
- "pop",
- "refresh",
- "contents",
- "nodeType",
- "nodeValue",
- "option",
- "val",
- "map",
- "extend",
- "typeahead",
- "source",
- "query",
- "process",
- "processItems",
- "texts",
- "isFunction",
- "success",
- "then",
- "when",
- "updater",
- "matcher",
- "toLowerCase",
- "indexOf",
- "sorter",
- "sort",
- "highlighter",
- "regex",
- "RegExp",
- "replace",
- "typeaheadjs",
- "typeaheadConfig",
- "typeaheadDatasets",
- "isArray",
- "on",
- "proxy",
- "obj",
- "datum",
- "valueKey",
- "event",
- "removeAttr",
- "target",
- "$inputWrapper",
- "prev",
- "next",
- "$prevTag",
- "$nextTag",
- "textLength",
- "ceil",
- "maxLengthReached",
- "substr",
- "preventDefault",
- "closest",
- "destroy",
- "off",
- "removeData",
- "show",
- "input",
- "elt",
- "container",
- "parentNode",
- "fn",
- "tagsinput",
- "arg1",
- "arg2",
- "arg3",
- "results",
- "retVal",
- "Constructor",
- "window",
- "jQuery"
- ],
- "mappings": "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",
- "file": "bootstrap-tagsinput.min.js"
-}
\ No newline at end of file
diff --git a/dist/bootstrap-tagsinput.zip b/dist/bootstrap-tagsinput.zip
deleted file mode 100644
index 2570b673eb43885a643b0e13949e04dc82e74184..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 52110
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