| author | veltr |
| Thu, 22 Nov 2012 10:52:28 +0100 | |
| changeset 45 | f39df810caab |
| parent 41 | 3ec2343f2b85 |
| permissions | -rw-r--r-- |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
1 |
/* |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
2 |
* jQuery UI Tag-it! |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
3 |
* |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
4 |
* @version v2.0 (06/2011) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
5 |
* |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
6 |
* Copyright 2011, Levy Carneiro Jr. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
7 |
* Released under the MIT license. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
8 |
* http://aehlke.github.com/tag-it/LICENSE |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
9 |
* |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
10 |
* Homepage: |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
11 |
* http://aehlke.github.com/tag-it/ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
12 |
* |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
13 |
* Authors: |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
14 |
* Levy Carneiro Jr. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
15 |
* Martin Rehfeld |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
16 |
* Tobias Schmidt |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
17 |
* Skylar Challand |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
18 |
* Alex Ehlke |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
19 |
* |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
20 |
* Maintainer: |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
21 |
* Alex Ehlke - Twitter: @aehlke |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
22 |
* |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
23 |
* Dependencies: |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
24 |
* jQuery v1.4+ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
25 |
* jQuery UI v1.8+ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
26 |
*/ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
27 |
(function($) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
28 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
29 |
$.widget('ui.tagit', { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
30 |
options: { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
31 |
itemName : 'item', |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
32 |
fieldName : 'tags', |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
33 |
availableTags : [], |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
34 |
tagSource : null, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
35 |
removeConfirmation: false, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
36 |
caseSensitive : true, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
37 |
placeholderText : null, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
38 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
39 |
// When enabled, quotes are not neccesary |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
40 |
// for inputting multi-word tags. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
41 |
allowSpaces: false, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
42 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
43 |
// Whether to animate tag removals or not. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
44 |
animate: true, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
45 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
46 |
// The below options are for using a single field instead of several |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
47 |
// for our form values. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
48 |
// |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
49 |
// When enabled, will use a single hidden field for the form, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
50 |
// rather than one per tag. It will delimit tags in the field |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
51 |
// with singleFieldDelimiter. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
52 |
// |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
53 |
// The easiest way to use singleField is to just instantiate tag-it |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
54 |
// on an INPUT element, in which case singleField is automatically |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
55 |
// set to true, and singleFieldNode is set to that element. This |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
56 |
// way, you don't need to fiddle with these options. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
57 |
singleField: false, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
58 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
59 |
singleFieldDelimiter: ',', |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
60 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
61 |
// Set this to an input DOM node to use an existing form field. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
62 |
// Any text in it will be erased on init. But it will be |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
63 |
// populated with the text of tags as they are created, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
64 |
// delimited by singleFieldDelimiter. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
65 |
// |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
66 |
// If this is not set, we create an input node for it, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
67 |
// with the name given in settings.fieldName, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
68 |
// ignoring settings.itemName. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
69 |
singleFieldNode: null, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
70 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
71 |
// Optionally set a tabindex attribute on the input that gets |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
72 |
// created for tag-it. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
73 |
tabIndex: null, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
74 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
75 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
76 |
// Event callbacks. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
77 |
onTagAdded : null, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
78 |
onTagRemoved: null, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
79 |
onTagClicked: null |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
80 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
81 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
82 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
83 |
_create: function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
84 |
// for handling static scoping inside callbacks |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
85 |
var that = this; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
86 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
87 |
// There are 2 kinds of DOM nodes this widget can be instantiated on: |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
88 |
// 1. UL, OL, or some element containing either of these. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
89 |
// 2. INPUT, in which case 'singleField' is overridden to true, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
90 |
// a UL is created and the INPUT is hidden. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
91 |
if (this.element.is('input')) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
92 |
this.tagList = $('<ul></ul>').insertAfter(this.element); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
93 |
this.options.singleField = true; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
94 |
this.options.singleFieldNode = this.element; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
95 |
this.element.css('display', 'none'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
96 |
} else { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
97 |
this.tagList = this.element.find('ul, ol').andSelf().last(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
98 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
99 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
100 |
this._tagInput = $('<input type="text" />').addClass('ui-widget-content'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
101 |
if (this.options.tabIndex) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
102 |
this._tagInput.attr('tabindex', this.options.tabIndex); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
103 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
104 |
if (this.options.placeholderText) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
105 |
this._tagInput.attr('placeholder', this.options.placeholderText); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
106 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
107 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
108 |
this.options.tagSource = this.options.tagSource || function(search, showChoices) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
109 |
var filter = search.term.toLowerCase(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
110 |
var choices = $.grep(this.options.availableTags, function(element) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
111 |
// Only match autocomplete options that begin with the search term. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
112 |
// (Case insensitive.) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
113 |
return (element.toLowerCase().indexOf(filter) === 0); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
114 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
115 |
showChoices(this._subtractArray(choices, this.assignedTags())); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
116 |
}; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
117 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
118 |
// Bind tagSource callback functions to this context. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
119 |
if ($.isFunction(this.options.tagSource)) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
120 |
this.options.tagSource = $.proxy(this.options.tagSource, this); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
121 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
122 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
123 |
this.tagList |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
124 |
.addClass('tagit') |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
125 |
.addClass('ui-widget ui-widget-content ui-corner-all') |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
126 |
// Create the input field. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
127 |
.append($('<li class="tagit-new"></li>').append(this._tagInput)) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
128 |
.click(function(e) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
129 |
var target = $(e.target); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
130 |
if (target.hasClass('tagit-label')) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
131 |
that._trigger('onTagClicked', e, target.closest('.tagit-choice')); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
132 |
} else { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
133 |
// Sets the focus() to the input field, if the user |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
134 |
// clicks anywhere inside the UL. This is needed |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
135 |
// because the input field needs to be of a small size. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
136 |
that._tagInput.focus(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
137 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
138 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
139 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
140 |
// Add existing tags from the list, if any. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
141 |
this.tagList.children('li').each(function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
142 |
if (!$(this).hasClass('tagit-new')) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
143 |
that.createTag($(this).html(), $(this).attr('class')); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
144 |
$(this).remove(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
145 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
146 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
147 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
148 |
// Single field support. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
149 |
if (this.options.singleField) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
150 |
if (this.options.singleFieldNode) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
151 |
// Add existing tags from the input field. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
152 |
var node = $(this.options.singleFieldNode); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
153 |
var tags = node.val().split(this.options.singleFieldDelimiter); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
154 |
node.val(''); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
155 |
$.each(tags, function(index, tag) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
156 |
that.createTag(tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
157 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
158 |
} else { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
159 |
// Create our single field input after our list. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
160 |
this.options.singleFieldNode = this.tagList.after('<input type="hidden" style="display:none;" value="" name="' + this.options.fieldName + '" />'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
161 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
162 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
163 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
164 |
// Events. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
165 |
this._tagInput |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
166 |
.keydown(function(event) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
167 |
// Backspace is not detected within a keypress, so it must use keydown. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
168 |
if (event.which == $.ui.keyCode.BACKSPACE && that._tagInput.val() === '') { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
169 |
var tag = that._lastTag(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
170 |
if (!that.options.removeConfirmation || tag.hasClass('remove')) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
171 |
// When backspace is pressed, the last tag is deleted. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
172 |
that.removeTag(tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
173 |
} else if (that.options.removeConfirmation) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
174 |
tag.addClass('remove ui-state-highlight'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
175 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
176 |
} else if (that.options.removeConfirmation) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
177 |
that._lastTag().removeClass('remove ui-state-highlight'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
178 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
179 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
180 |
// Comma/Space/Enter are all valid delimiters for new tags, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
181 |
// except when there is an open quote or if setting allowSpaces = true. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
182 |
// Tab will also create a tag, unless the tag input is empty, in which case it isn't caught. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
183 |
if ( |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
184 |
event.which == $.ui.keyCode.COMMA || |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
185 |
event.which == $.ui.keyCode.ENTER || |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
186 |
( |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
187 |
event.which == $.ui.keyCode.TAB && |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
188 |
that._tagInput.val() !== '' |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
189 |
) || |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
190 |
( |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
191 |
event.which == $.ui.keyCode.SPACE && |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
192 |
that.options.allowSpaces !== true && |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
193 |
( |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
194 |
$.trim(that._tagInput.val()).replace( /^s*/, '' ).charAt(0) != '"' || |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
195 |
( |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
196 |
$.trim(that._tagInput.val()).charAt(0) == '"' && |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
197 |
$.trim(that._tagInput.val()).charAt($.trim(that._tagInput.val()).length - 1) == '"' && |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
198 |
$.trim(that._tagInput.val()).length - 1 !== 0 |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
199 |
) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
200 |
) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
201 |
) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
202 |
) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
203 |
event.preventDefault(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
204 |
that.createTag(that._cleanedInput()); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
205 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
206 |
// The autocomplete doesn't close automatically when TAB is pressed. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
207 |
// So let's ensure that it closes. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
208 |
that._tagInput.autocomplete('close'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
209 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
210 |
}).blur(function(e){ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
211 |
// Create a tag when the element loses focus (unless it's empty). |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
212 |
that.createTag(that._cleanedInput()); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
213 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
214 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
215 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
216 |
// Autocomplete. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
217 |
if (this.options.availableTags || this.options.tagSource) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
218 |
this._tagInput.autocomplete({ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
219 |
source: this.options.tagSource, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
220 |
select: function(event, ui) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
221 |
// Delete the last tag if we autocomplete something despite the input being empty |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
222 |
// This happens because the input's blur event causes the tag to be created when |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
223 |
// the user clicks an autocomplete item. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
224 |
// The only artifact of this is that while the user holds down the mouse button |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
225 |
// on the selected autocomplete item, a tag is shown with the pre-autocompleted text, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
226 |
// and is changed to the autocompleted text upon mouseup. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
227 |
if (that._tagInput.val() === '') { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
228 |
that.removeTag(that._lastTag(), false); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
229 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
230 |
that.createTag(ui.item.value); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
231 |
// Preventing the tag input to be updated with the chosen value. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
232 |
return false; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
233 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
234 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
235 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
236 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
237 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
238 |
_cleanedInput: function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
239 |
// Returns the contents of the tag input, cleaned and ready to be passed to createTag |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
240 |
return $.trim(this._tagInput.val().replace(/^"(.*)"$/, '$1')); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
241 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
242 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
243 |
_lastTag: function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
244 |
return this.tagList.children('.tagit-choice:last'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
245 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
246 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
247 |
assignedTags: function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
248 |
// Returns an array of tag string values |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
249 |
var that = this; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
250 |
var tags = []; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
251 |
if (this.options.singleField) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
252 |
tags = $(this.options.singleFieldNode).val().split(this.options.singleFieldDelimiter); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
253 |
if (tags[0] === '') { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
254 |
tags = []; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
255 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
256 |
} else { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
257 |
this.tagList.children('.tagit-choice').each(function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
258 |
tags.push(that.tagLabel(this)); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
259 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
260 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
261 |
return tags; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
262 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
263 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
264 |
_updateSingleTagsField: function(tags) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
265 |
// Takes a list of tag string values, updates this.options.singleFieldNode.val to the tags delimited by this.options.singleFieldDelimiter |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
266 |
$(this.options.singleFieldNode).val(tags.join(this.options.singleFieldDelimiter)); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
267 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
268 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
269 |
_subtractArray: function(a1, a2) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
270 |
var result = []; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
271 |
for (var i = 0; i < a1.length; i++) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
272 |
if ($.inArray(a1[i], a2) == -1) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
273 |
result.push(a1[i]); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
274 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
275 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
276 |
return result; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
277 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
278 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
279 |
tagLabel: function(tag) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
280 |
// Returns the tag's string label. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
281 |
if (this.options.singleField) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
282 |
return $(tag).children('.tagit-label').text(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
283 |
} else { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
284 |
return $(tag).children('input').val(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
285 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
286 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
287 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
288 |
_isNew: function(value) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
289 |
var that = this; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
290 |
var isNew = true; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
291 |
this.tagList.children('.tagit-choice').each(function(i) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
292 |
if (that._formatStr(value) == that._formatStr(that.tagLabel(this))) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
293 |
isNew = false; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
294 |
return false; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
295 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
296 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
297 |
return isNew; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
298 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
299 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
300 |
_formatStr: function(str) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
301 |
if (this.options.caseSensitive) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
302 |
return str; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
303 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
304 |
return $.trim(str.toLowerCase()); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
305 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
306 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
307 |
createTag: function(value, additionalClass) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
308 |
var that = this; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
309 |
// Automatically trims the value of leading and trailing whitespace. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
310 |
value = $.trim(value); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
311 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
312 |
if (!this._isNew(value) || value === '') { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
313 |
return false; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
314 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
315 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
316 |
var label = $(this.options.onTagClicked ? '<a class="tagit-label"></a>' : '<span class="tagit-label"></span>').text(value); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
317 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
318 |
// Create tag. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
319 |
var tag = $('<li></li>') |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
320 |
.addClass('tagit-choice ui-widget-content ui-state-default ui-corner-all') |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
321 |
.addClass(additionalClass) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
322 |
.append(label); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
323 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
324 |
// Button for removing the tag. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
325 |
var removeTagIcon = $('<span></span>') |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
326 |
.addClass('ui-icon ui-icon-close'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
327 |
var removeTag = $('<a><span class="text-icon">\xd7</span></a>') // \xd7 is an X |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
328 |
.addClass('tagit-close') |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
329 |
.append(removeTagIcon) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
330 |
.click(function(e) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
331 |
// Removes a tag when the little 'x' is clicked. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
332 |
that.removeTag(tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
333 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
334 |
tag.append(removeTag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
335 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
336 |
// Unless options.singleField is set, each tag has a hidden input field inline. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
337 |
if (this.options.singleField) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
338 |
var tags = this.assignedTags(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
339 |
tags.push(value); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
340 |
this._updateSingleTagsField(tags); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
341 |
} else { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
342 |
var escapedValue = label.html(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
343 |
tag.append('<input type="hidden" style="display:none;" value="' + escapedValue + '" name="' + this.options.itemName + '[' + this.options.fieldName + '][]" />'); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
344 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
345 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
346 |
this._trigger('onTagAdded', null, tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
347 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
348 |
// Cleaning the input. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
349 |
this._tagInput.val(''); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
350 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
351 |
// insert tag |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
352 |
this._tagInput.parent().before(tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
353 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
354 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
355 |
removeTag: function(tag, animate) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
356 |
animate = animate || this.options.animate; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
357 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
358 |
tag = $(tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
359 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
360 |
this._trigger('onTagRemoved', null, tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
361 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
362 |
if (this.options.singleField) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
363 |
var tags = this.assignedTags(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
364 |
var removedTagLabel = this.tagLabel(tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
365 |
tags = $.grep(tags, function(el){ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
366 |
return el != removedTagLabel; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
367 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
368 |
this._updateSingleTagsField(tags); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
369 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
370 |
// Animate the removal. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
371 |
if (animate) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
372 |
tag.fadeOut('fast').hide('blind', {direction: 'horizontal'}, 'fast', function(){ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
373 |
tag.remove(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
374 |
}).dequeue(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
375 |
} else { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
376 |
tag.remove(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
377 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
378 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
379 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
380 |
removeAll: function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
381 |
// Removes all tags. |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
382 |
var that = this; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
383 |
this.tagList.children('.tagit-choice').each(function(index, tag) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
384 |
that.removeTag(tag, false); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
385 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
386 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
387 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
388 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
389 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
390 |
})(jQuery); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
391 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
diff
changeset
|
392 |