-
-
- *
- * 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 2570b67..0000000
Binary files a/dist/bootstrap-tagsinput.zip and /dev/null differ