src/pyams_thesaurus/zmi/resources/js/pyams_thesaurus.js
changeset 27 ad5f7192d437
parent 5 86ddb444d0a9
child 74 9f4143b02965
equal deleted inserted replaced
26:f8e004744ae9 27:ad5f7192d437
     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);
   192 															  .addClass('fa-square disabled')
   207 															  .addClass('fa-square disabled')
   193 															  .css('color', 'silver');
   208 															  .css('color', 'silver');
   194 			}
   209 			}
   195 		});
   210 		});
   196 	});
   211 	});
   197 
   212 	globals.PyAMS_thesaurus = PyAMS_thesaurus;
   198 })(jQuery);
   213 
       
   214 })(jQuery, this);