114 lines
4.1 KiB
JavaScript
114 lines
4.1 KiB
JavaScript
/*
|
|
@author: Karl-Johan Sjögren / http://blog.crazybeavers.se/
|
|
@url: http://blog.crazybeavers.se/wp-content/demos/jquery.tag.editor/
|
|
@license: Creative Commons License - ShareAlike http://creativecommons.org/licenses/by-sa/3.0/
|
|
@version: 1.1
|
|
*/
|
|
(function($) {
|
|
$.fn.extend({
|
|
tagEditor: function(options) {
|
|
var defaults = {
|
|
separator: ',',
|
|
items: [],
|
|
className: 'tagEditor',
|
|
confirmRemoval: false,
|
|
completeOnSeparator: false,
|
|
completeOnBlur: false
|
|
}
|
|
|
|
var options = $.extend(defaults, options);
|
|
var listBase, textBase = this, hiddenText;
|
|
var itemBase = [];
|
|
|
|
return this.each(function() {
|
|
textBase.id = options.formField;
|
|
|
|
hiddenText = $(document.createElement('input'));
|
|
hiddenText.attr('type', 'hidden');
|
|
textBase.after(hiddenText);
|
|
|
|
listBase = $(document.createElement('ul'));
|
|
listBase.attr('class', options.className);
|
|
$(this).after(listBase);
|
|
|
|
for (var i = 0; i < options.items.length; i++) {
|
|
addTag(jQuery.trim(options.items[i]));
|
|
}
|
|
|
|
buildArray();
|
|
$(this).keypress(handleKeys);
|
|
$(this).blur(parse);
|
|
|
|
var form = $(this).parents("form");
|
|
form.submit(function() {
|
|
parse();
|
|
hiddenText.val(itemBase.join(options.separator));
|
|
hiddenText.attr("id", textBase.attr("id"));
|
|
hiddenText.attr("name", textBase.attr("name"));
|
|
textBase.attr("id", textBase.attr("id") + '_old');
|
|
textBase.attr("name", textBase.attr("name") + '_old');
|
|
});
|
|
|
|
function addTag(tag) {
|
|
tag = jQuery.trim(tag);
|
|
for (var i = 0; i < itemBase.length; i++) {
|
|
if (itemBase[i].toLowerCase() == tag.toLowerCase())
|
|
return;
|
|
}
|
|
|
|
var item = $(document.createElement('li'));
|
|
item.text(tag);
|
|
item.attr('title', 'Remove tag');
|
|
item.click(function() {
|
|
if (options.confirmRemoval)
|
|
if (!confirm("Do you really want to remove the tag?"))
|
|
return;
|
|
|
|
item.remove();
|
|
parse();
|
|
});
|
|
|
|
listBase.append(item);
|
|
}
|
|
|
|
function buildArray() {
|
|
itemBase = [];
|
|
var items = $("li", listBase);
|
|
|
|
for (var i = 0; i < items.length; i++) {
|
|
itemBase.push(jQuery.trim($(items[i]).text()));
|
|
}
|
|
}
|
|
|
|
function parse() {
|
|
var items = textBase.val().split(options.separator);
|
|
|
|
for (var i = 0; i < items.length; i++) {
|
|
var trimmedItem = jQuery.trim(items[i]);
|
|
if (trimmedItem.length > 0)
|
|
addTag(trimmedItem);
|
|
}
|
|
textBase.val("");
|
|
buildArray();
|
|
}
|
|
|
|
function handleKeys(ev) {
|
|
if (options.completeOnSeparator) {
|
|
if (String.fromCharCode(ev.keyCode) == options.separator) {
|
|
parse();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
switch (ev.keyCode) {
|
|
case 13:
|
|
{
|
|
parse();
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
})(jQuery); |