| 1 |
//check js availability
|
| 2 |
if (Drupal.jsEnabled) {
|
| 3 |
//start at onload-event
|
| 4 |
$(document).ready(draggableviews_load);
|
| 5 |
}
|
| 6 |
|
| 7 |
//load editfield-plugin
|
| 8 |
function draggableviews_load(){
|
| 9 |
$(".tabledrag-root").each( function(i) {
|
| 10 |
var nid = $(this).find('td > .hidden_nid').attr('value');
|
| 11 |
$(this).find('td:first').each( function(i) {
|
| 12 |
//$(this).append('<a class="draggableviews-expand" href="#" onclick="javascript:draggableviews_collapse('+nid+')">collapse</a>');
|
| 13 |
$(this).append('<div class="draggableviews-expand" href="#"></div>').children('.draggableviews-expand').bind('click', function(){draggableviews_collapse(nid);});
|
| 14 |
});
|
| 15 |
|
| 16 |
// apply collapsed/expanded state
|
| 17 |
if (Drupal.settings.draggableviews.states) {
|
| 18 |
if (Drupal.settings.draggableviews.states[nid]) {
|
| 19 |
// when list should be collapsed..
|
| 20 |
if (Drupal.settings.draggableviews.states[nid] == 1) {
|
| 21 |
// ..collapse list
|
| 22 |
draggableviews_collapse(nid);
|
| 23 |
|
| 24 |
// and set hidden field
|
| 25 |
draggableviews_set_state_field(nid, true);
|
| 26 |
}
|
| 27 |
}
|
| 28 |
}
|
| 29 |
});
|
| 30 |
|
| 31 |
// collapse all by default if set
|
| 32 |
if( Drupal.settings.draggableviews.expand_default &&
|
| 33 |
Drupal.settings.draggableviews.expand_default == 1 )
|
| 34 |
{
|
| 35 |
draggableviews_collapse_all();
|
| 36 |
}
|
| 37 |
}
|
| 38 |
|
| 39 |
function draggableviews_expand(parent_id){
|
| 40 |
// show elements
|
| 41 |
draggableviews_show(parent_id);
|
| 42 |
|
| 43 |
// swap link to collapse link
|
| 44 |
$("tr:has(td > .hidden_nid[value="+parent_id+"])").each( function (i){
|
| 45 |
$(this).find('.draggableviews-collapse').each( function (i){
|
| 46 |
$(this).unbind('click');
|
| 47 |
$(this).attr('class', 'draggableviews-expand');
|
| 48 |
$(this).bind('click', function(){ draggableviews_collapse(parent_id); });
|
| 49 |
// set state as value of a hidden field
|
| 50 |
draggableviews_set_state_field(parent_id, false);
|
| 51 |
});
|
| 52 |
});
|
| 53 |
}
|
| 54 |
|
| 55 |
// show recursively
|
| 56 |
function draggableviews_show(parent_id) {
|
| 57 |
$("tr:has(td > ." + Drupal.settings.draggableviews.parent + "[value="+parent_id+"])").each( function (i){
|
| 58 |
$(this).show();
|
| 59 |
var nid = $(this).find('td > .hidden_nid').attr('value');
|
| 60 |
if (nid) {
|
| 61 |
draggableviews_show(nid);
|
| 62 |
}
|
| 63 |
});
|
| 64 |
}
|
| 65 |
|
| 66 |
function draggableviews_collapse(parent_id){
|
| 67 |
// hide elements
|
| 68 |
draggableviews_hide(parent_id);
|
| 69 |
|
| 70 |
// swap link to expand link
|
| 71 |
$("tr:has(td > .hidden_nid[value=" + parent_id + "])").each( function (i){
|
| 72 |
$(this).find('.draggableviews-expand').each( function (i){
|
| 73 |
//$(this).unbind('onclick');
|
| 74 |
$(this).unbind('click');
|
| 75 |
$(this).attr('class', 'draggableviews-collapse');
|
| 76 |
$(this).bind('click', function(){ draggableviews_expand(parent_id); });
|
| 77 |
|
| 78 |
// set state as value of a hidden field
|
| 79 |
draggableviews_set_state_field(parent_id, true);
|
| 80 |
});
|
| 81 |
});
|
| 82 |
}
|
| 83 |
|
| 84 |
// hide recursively
|
| 85 |
function draggableviews_hide(parent_id) {
|
| 86 |
$("tr:has(td > ." + Drupal.settings.draggableviews.parent + "[value="+parent_id+"])").each( function (i){
|
| 87 |
$(this).hide();
|
| 88 |
var nid = $(this).find('td > .hidden_nid').attr('value');
|
| 89 |
if (nid) {
|
| 90 |
draggableviews_hide(nid);
|
| 91 |
}
|
| 92 |
});
|
| 93 |
}
|
| 94 |
|
| 95 |
function draggableviews_collapse_all() {
|
| 96 |
// hide elements
|
| 97 |
$("tr:has(td > ." + Drupal.settings.draggableviews.parent + "[value<>0])").each( function (i) {
|
| 98 |
$(this).hide();
|
| 99 |
});
|
| 100 |
|
| 101 |
// swap links to expand links
|
| 102 |
$("tr:has(td > .hidden_nid)").each( function (i){
|
| 103 |
var parent_id = $(this).find('td > .hidden_nid').attr('value');
|
| 104 |
|
| 105 |
$(this).find('.draggableviews-expand').each( function (i){
|
| 106 |
// set new action and class
|
| 107 |
$(this).unbind('click');
|
| 108 |
$(this).attr('class', 'draggableviews-collapse');
|
| 109 |
$(this).bind('click', function(){ draggableviews_expand(parent_id); });
|
| 110 |
|
| 111 |
// set collapsed/expanded state
|
| 112 |
draggableviews_set_state_field(parent_id, true);
|
| 113 |
});
|
| 114 |
});
|
| 115 |
|
| 116 |
// $(this).bind('click', function(){ draggableviews_expand(1); });
|
| 117 |
//});
|
| 118 |
}
|
| 119 |
|
| 120 |
// save state of expanded/collapsed fields in a hidden field
|
| 121 |
function draggableviews_set_state_field(parent_id, state) {
|
| 122 |
//build field name
|
| 123 |
var field_name = 'draggableviews_collapsed_' + parent_id;
|
| 124 |
|
| 125 |
$("input[name='hidden_nid'][value='" + parent_id + "']")
|
| 126 |
.parent().each( function(i){
|
| 127 |
var replaced = false;
|
| 128 |
|
| 129 |
// "check" if field already exists (..by just selecting it)
|
| 130 |
$(this).find('input[name="' + field_name + '"]').each( function(i){
|
| 131 |
$(this).attr('value', state?'1':'0');
|
| 132 |
replaced = true;
|
| 133 |
});
|
| 134 |
// if no field existed yet -> create it
|
| 135 |
if (replaced == false) {
|
| 136 |
$(this).append('<input type="hidden" name="' + field_name + '" value="' + (state?'1':'0') + '" />');
|
| 137 |
}
|
| 138 |
});
|
| 139 |
}
|