1 function filter_cascade_by_id (id, vals, is_hierarchical) {
2 var element = document.getElementById(id);
3 if (!element) { return };
5 if ( element.tagName == 'SELECT' ) {
6 var complete_select = document.getElementById(id + "-Complete" );
7 return filter_cascade_select(element, complete_select, vals, is_hierarchical);
10 if ( !( vals instanceof Array ) ) {
14 if ( is_hierarchical && (vals.length == 0 || (vals.length == 1 && vals[0] == '')) ) {
15 // no category, and the category is from a hierchical cf;
17 jQuery(element).find('div').hide();
20 jQuery(element).find('div').hide().find('input').prop('disabled', true);
21 jQuery(element).find('div[data-name=]').show().find('input').prop('disabled', false);
22 jQuery(element).find('div.none').show().find('input').prop('disabled',false);
23 for ( var j = 0; j < vals.length; j++ ) {
24 var match = jQuery(element).find('div[data-name]').filter(function(){
25 return jQuery(this).data('name').indexOf(vals[j]) == 0
27 match.show().find('input').prop('disabled', false);
33 function filter_cascade_select (select, complete_select, vals, is_hierarchical) {
34 if ( !( vals instanceof Array ) ) {
38 if (!select) { return };
40 var children = select.childNodes;
42 if ( complete_select ) {
43 jQuery(select).children().remove();
45 var complete_children = complete_select.childNodes;
47 var cloned_labels = {};
48 var cloned_empty_label;
49 for ( var j = 0; j < vals.length; j++ ) {
51 if ( val == '' && is_hierarchical ) {
52 // no category, and the category is from a hierchical cf;
53 // leave this set of options empty
54 } else if ( val == '' ) {
55 // no category, let's clone all node
56 jQuery(select).append(jQuery(complete_children).clone());
60 var labels_to_clone = {};
61 for (i = 0; i < complete_children.length; i++) {
62 if (!complete_children[i].label ||
63 (complete_children[i].hasAttribute &&
64 !complete_children[i].hasAttribute('label') ) ) {
65 if ( cloned_empty_label ) {
69 else if ( complete_children[i].label == val ) {
70 if ( cloned_labels[complete_children[i].label] ) {
73 labels_to_clone[complete_children[i].label] = true;
79 jQuery(select).append(jQuery(complete_children[i]).clone());
82 if ( !cloned_empty_label )
83 cloned_empty_label = true;
85 for ( label in labels_to_clone ) {
86 if ( !cloned_labels[label] )
87 cloned_labels[label] = true;
93 // for back compatibility
94 for (i = 0; i < children.length; i++) {
95 if (!children[i].label) { continue };
96 if ( val == '' && is_hierarchical ) {
100 if ( val == '' || children[i].label.substr(0, val.length) == val) {