10
|
1
|
|
2 $("#filterTag").focus();
|
|
3
|
|
4 var model = {
|
|
5 filterTags: ko.observableArray(currentFilter())
|
|
6 };
|
|
7
|
|
8 function currentFilter() {
|
|
9 var p = window.location.pathname;
|
|
10 var comps = p.split("/");
|
|
11 if (toRoot == ".") {
|
|
12 return [];
|
|
13 } else {
|
|
14 return (comps[comps.length-1] || "").split("+");
|
|
15 }
|
|
16 }
|
|
17
|
|
18 function toggleTag(tag) {
|
|
19 var selected = currentFilter();
|
|
20
|
|
21 if (selected.indexOf(tag) == -1) {
|
|
22 selected.push(tag);
|
|
23 } else {
|
|
24 selected.splice(selected.indexOf(tag), 1);
|
|
25 }
|
|
26 setPageTags(selected);
|
|
27 }
|
|
28
|
|
29 function setPageTags(tags) {
|
|
30
|
|
31 var newPath = window.location.pathname;
|
|
32 if (toRoot == ".") {
|
|
33 newPath += "/";
|
|
34 } else {
|
|
35 newPath = newPath.replace(
|
|
36 /(.*\/)[^\/]*$/, "$1")
|
|
37 }
|
|
38 console.log("user root", newPath);
|
|
39 if (tags.length) {
|
|
40 newPath += tags.join("+")
|
|
41 } else {
|
|
42 newPath = newPath.substr(0, newPath.length - 1);
|
|
43 }
|
|
44 console.log("done", newPath);
|
|
45
|
|
46 window.location.pathname = newPath;
|
|
47 }
|
|
48
|
|
49 function backspaceLastTag() {
|
|
50 var p = window.location.pathname;
|
|
51 var comps = p.split("/");
|
|
52 var selected = (comps[comps.length-1] || "").split("+");
|
|
53 if (selected.length == 0) {
|
|
54 return;
|
|
55 }
|
|
56 toggleTag(selected[selected.length-1]);
|
|
57 }
|
|
58
|
|
59 $("a.tag").click(function () {
|
|
60 var tag = $(this).text();
|
|
61 toggleTag(tag);
|
|
62 return false;
|
|
63 });
|
|
64
|
|
65 $("#filterTag").change(function () {
|
|
66 var tags = $(this).val().split(",");
|
|
67 setPageTags(tags);
|
|
68 return false;
|
|
69 });
|
|
70
|
|
71 var filterCompleteWords = "";
|
|
72 $("#filterTag").select2({
|
|
73 allowClear: true,
|
|
74 multiple: true,
|
|
75 tokenSeparators: [' ', ','],
|
|
76 query: function (opts) {
|
|
77 $.ajax({
|
|
78 url: toRoot + "/tags",
|
|
79 data: {user: user, have: opts.element.val()},
|
|
80 success: function (data) {
|
|
81 opts.callback({results: data.tags});
|
|
82 }
|
|
83 });
|
|
84 },
|
|
85 change: function (ev) {
|
|
86 console.log("ch", ev.val);
|
|
87 },
|
|
88 initSelection: function (element, callback) {
|
|
89 var data = [];
|
|
90 $(element.val().split(",")).each(function () {
|
|
91 data.push({id: this, text: this});
|
|
92 });
|
|
93 callback(data);
|
|
94 }
|
|
95 });
|
|
96 $("#filterTag").select2("val", model.filterTags());
|
|
97
|
|
98 ko.applyBindings(model);
|