integration/lib/tag-it.js
author veltr
Thu, 22 Nov 2012 10:52:28 +0100
changeset 45 f39df810caab
parent 41 3ec2343f2b85
permissions -rw-r--r--
Segments show up in search engine
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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