1 (function($) { |
1 /* globals MyAMS */ |
2 |
2 (function($, globals) { |
3 PyAMS_thesaurus = { |
3 |
|
4 'use strict'; |
|
5 |
|
6 var PyAMS_thesaurus = { |
4 |
7 |
5 tree: { |
8 tree: { |
6 |
9 |
7 /** |
10 /** |
8 * Display term sub-nodes |
11 * Display term sub-nodes |
9 */ |
12 */ |
10 displaySubNodes: function(term, nodes, source) { |
13 displaySubNodes: function(term, nodes, source) { |
11 if (source === undefined) |
14 if (source === undefined) { |
12 source = $('span.term:withtext("' + term + '")').siblings('i[data-ams-click-handler]'); |
15 source = $('span.term:withtext("' + term + '")').siblings('i[data-ams-click-handler]'); |
|
16 } |
13 var group = source.parents('span.label').siblings('ul.group'); |
17 var group = source.parents('span.label').siblings('ul.group'); |
14 var parent = group.closest('ul.group').closest('li'); |
18 var parent = group.closest('ul.group').closest('li'); |
15 group.empty(); |
19 group.empty(); |
16 for (var index in nodes) { |
20 for (var index in nodes) { |
|
21 if (!nodes.hasOwnProperty(index)) { |
|
22 continue; |
|
23 } |
17 var node = nodes[index]; |
24 var node = nodes[index]; |
18 var li = $('<li></li>'); |
25 var li = $('<li></li>'); |
19 node.extracts.reverse(); |
26 node.extracts.reverse(); |
20 for (var ext_index in node.extracts) { |
27 for (var ext_index in node.extracts) { |
|
28 if (!node.extracts.hasOwnProperty(ext_index)) { |
|
29 continue; |
|
30 } |
21 var extract = node.extracts[ext_index]; |
31 var extract = node.extracts[ext_index]; |
22 var div = $('<div></div>').addClass('pull-right margin-right-2') |
32 var div = $('<div></div>').addClass('pull-right margin-right-2') |
23 .appendTo(li); |
33 .appendTo(li); |
24 var square = $('<i></i>').attr('data-ams-extract-name', extract.name) |
34 var square = $('<i></i>').attr('data-ams-extract-name', extract.name) |
25 .addClass('fa fa-fw fa-square extract-checker') |
35 .addClass('fa fa-fw fa-square extract-checker') |
44 } |
54 } |
45 var span = $('<span></span>').addClass('label label-success') |
55 var span = $('<span></span>').addClass('label label-success') |
46 .addClass(node.css_class) |
56 .addClass(node.css_class) |
47 .attr('data-ams-url', node.view) |
57 .attr('data-ams-url', node.view) |
48 .attr('data-toggle', 'modal'); |
58 .attr('data-toggle', 'modal'); |
49 if (node.expand) |
59 if (node.expand) { |
50 $('<i></i>').addClass('fa fa-lg fa-plus-circle') |
60 $('<i></i>').addClass('fa fa-lg fa-plus-circle') |
51 .attr('data-ams-click-handler', 'PyAMS_thesaurus.tree.expand') |
61 .attr('data-ams-click-handler', 'PyAMS_thesaurus.tree.expand') |
52 .attr('data-ams-stop-propagation', true) |
62 .attr('data-ams-stop-propagation', true) |
53 .appendTo(span); |
63 .appendTo(span); |
|
64 } |
54 $('<span></span>').addClass('term') |
65 $('<span></span>').addClass('term') |
55 .html(node.label) |
66 .html(node.label) |
56 .appendTo(span); |
67 .appendTo(span); |
57 span.appendTo(li); |
68 span.appendTo(li); |
58 $('<ul></ul>').addClass('hidden group') |
69 $('<ul></ul>').addClass('hidden group') |
59 .appendTo(li); |
70 .appendTo(li); |
60 li.appendTo(group); |
71 li.appendTo(group); |
61 if (node.subnodes) |
72 if (node.subnodes) { |
62 PyAMS_thesaurus.tree.displaySubNodes(node.label, node.subnodes); |
73 PyAMS_thesaurus.tree.displaySubNodes(node.label, node.subnodes); |
|
74 } |
63 } |
75 } |
64 group.removeClass('hidden'); |
76 group.removeClass('hidden'); |
65 source.removeClass('fa-gear') |
77 source.removeClass('fa-gear') |
66 .addClass('fa-minus-circle'); |
78 .addClass('fa-minus-circle'); |
67 }, |
79 }, |
97 /** |
109 /** |
98 * Update term label or status |
110 * Update term label or status |
99 */ |
111 */ |
100 updateTerm: function(options) { |
112 updateTerm: function(options) { |
101 var element = $('span.term:withtext("' + options.term + '")').siblings('i[data-ams-click-handler]'); |
113 var element = $('span.term:withtext("' + options.term + '")').siblings('i[data-ams-click-handler]'); |
102 if (element.hasClass('fa-minus-circle')) |
114 if (element.hasClass('fa-minus-circle')) { |
103 PyAMS_thesaurus.tree.collapse.call(element); |
115 PyAMS_thesaurus.tree.collapse.call(element); |
|
116 } |
104 PyAMS_thesaurus.tree.expand.call(element); |
117 PyAMS_thesaurus.tree.expand.call(element); |
105 }, |
118 }, |
106 |
119 |
107 /** |
120 /** |
108 * Find ans display term in thesaurus tree |
121 * Find ans display term in thesaurus tree |
114 $('html,body').animate({scrollTop: element.offset().top - 100}, 1000); |
127 $('html,body').animate({scrollTop: element.offset().top - 100}, 1000); |
115 element.css('background-color', 'darkgreen') |
128 element.css('background-color', 'darkgreen') |
116 .off('mouseover') |
129 .off('mouseover') |
117 .on('mouseover', function() { |
130 .on('mouseover', function() { |
118 $(this).css('background-color', ''); |
131 $(this).css('background-color', ''); |
119 }) |
132 }); |
120 }); |
133 }); |
121 }, |
134 }, |
122 |
135 |
123 /** |
136 /** |
124 * Extract display switcher |
137 * Extract display switcher |
128 */ |
141 */ |
129 switchExtract: function() { |
142 switchExtract: function() { |
130 return function() { |
143 return function() { |
131 var switcher = $('i.fa', $(this)); |
144 var switcher = $('i.fa', $(this)); |
132 var extract = switcher.parents('tr:first').data('ams-element-name'); |
145 var extract = switcher.parents('tr:first').data('ams-element-name'); |
133 if (switcher.hasClass('fa-eye-slash')) |
146 if (switcher.hasClass('fa-eye-slash')) { |
134 PyAMS_thesaurus.tree.showExtract.call(this, extract, switcher); |
147 PyAMS_thesaurus.tree.showExtract.call(this, extract, switcher); |
135 else |
148 } else { |
136 PyAMS_thesaurus.tree.hideExtract.call(this, extract, switcher); |
149 PyAMS_thesaurus.tree.hideExtract.call(this, extract, switcher); |
137 } |
150 } |
|
151 }; |
138 }, |
152 }, |
139 |
153 |
140 /** |
154 /** |
141 * Show extract |
155 * Show extract |
142 */ |
156 */ |
168 } |
182 } |
169 }; |
183 }; |
170 |
184 |
171 $(document).on('click', 'i.extract-checker', function(e) { |
185 $(document).on('click', 'i.extract-checker', function(e) { |
172 var checker = $(this); |
186 var checker = $(this); |
173 if (checker.hasClass('disabled')) |
187 if (checker.hasClass('disabled')) { |
174 return; |
188 return; |
|
189 } |
175 var term = $('span.term', checker.closest('div').siblings('span')); |
190 var term = $('span.term', checker.closest('div').siblings('span')); |
176 MyAMS.ajax.post('switch-extract.json', {term: term.text(), |
191 MyAMS.ajax.post('switch-extract.json', {term: term.text(), |
177 extract: checker.data('ams-extract-name')}, function(data) { |
192 extract: checker.data('ams-extract-name')}, function(data) { |
178 if (data.status) { // System view |
193 if (data.status) { // System view |
179 MyAMS.ajax.handleJSON(data); |
194 MyAMS.ajax.handleJSON(data); |