aboutsummaryrefslogtreecommitdiffhomepage
path: root/inc/awesomplete-multiple-tags.js
blob: c38dc38ee809099531aa6a92a5c9d8385eece6da (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/** @licstart  The following is the entire license notice for the
 *  JavaScript code in this page.
 *
 *   Copyright: (c) 2011-2015 Sébastien SAUVAGE <sebsauvage@sebsauvage.net>
 *              (c) 2011-2017 The Shaarli Community, see AUTHORS
 *
 *   This software is provided 'as-is', without any express or implied warranty.
 *   In no event will the authors be held liable for any damages arising from
 *   the use of this software.
 *
 *   Permission is granted to anyone to use this software for any purpose,
 *   including commercial applications, and to alter it and redistribute it
 *   freely, subject to the following restrictions:
 *
 *   1. The origin of this software must not be misrepresented; you must not
 *   claim that you wrote the original software. If you use this software
 *   in a product, an acknowledgment in the product documentation would
 *   be appreciated but is not required.
 *
 *   2. Altered source versions must be plainly marked as such, and must
 *   not be misrepresented as being the original software.
 *
 *   3. This notice may not be removed or altered from any source distribution.
 *
 *  @licend  The above is the entire license notice
 *  for the JavaScript code in this page.
 */

var awp = Awesomplete.$;
var autocompleteFields = document.querySelectorAll('input[data-multiple]');
[].forEach.call(autocompleteFields, function(autocompleteField) {
    awesomplete = new Awesomplete(awp(autocompleteField), {
        filter: function (text, input) {
            return Awesomplete.FILTER_CONTAINS(text, input.match(/[^ ]*$/)[0]);
        },
        replace: function (text) {
            var before = this.input.value.match(/^.+ \s*|/)[0];
            this.input.value = before + text + " ";
        },
        minChars: 1
    })
});

/**
 * Remove already selected items from autocompletion list.
 * HTML list is never updated, so removing a tag will add it back to awesomplete.
 *
 * FIXME: This a workaround waiting for awesomplete to handle this.
 *  https://github.com/LeaVerou/awesomplete/issues/16749
 */
function awesompleteUniqueTag(selector) {
    var input = document.querySelector(selector);
    input.addEventListener('input', function()
    {
        proposedTags = input.getAttribute('data-list').replace(/,/g, '').split(' ');
        reg = /(\w+) /g;
        while((match = reg.exec(input.value)) !== null) {
            id = proposedTags.indexOf(match[1]);
            if(id != -1 ) {
                proposedTags.splice(id, 1);
            }
        }

        awesomplete.list = proposedTags;
    });
}