| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 | 
/** * @file js for changing weights of terms with Up and Down arrows */(function ($) {//object to store weights (tid => weight)var termWeightsData = new Object();Drupal.behaviors.TaxonomyManagerWeights = {  attach: function(context, settings) {    var weightSettings = settings.updateWeight || [];    if (!$('#edit-toolbar.tm-weights-processed').length) {      $('#edit-toolbar').addClass('tm-weights-processed');      termWeightsData['form_token'] = $('input[name=form_token]').val();      termWeightsData['form_id'] = $('input[name=form_id]').val();      termWeightsData['weights'] = new Object();      Drupal.attachUpdateWeightToolbar(weightSettings['up'], weightSettings['down']);      Drupal.attachUpdateWeightTerms();    }  }}/** * adds click events for Up and Down buttons in the toolbar, which * allow the moving of selected (can be more) terms */Drupal.attachUpdateWeightToolbar = function(upButton, downButton) {  var selected;  var url = Drupal.settings.updateWeight['url'];  $('#'+ upButton).click(function() {    selected = Drupal.getSelectedTerms();    for (var i=0; i < selected.length; i++) {      var upTerm = selected[i];      var downTerm = $(upTerm).prev();      Drupal.orderTerms(upTerm, downTerm);    }    if (selected.length > 0) {      $.post(url, termWeightsData);    }  });  $('#'+ downButton).click(function() {    selected = Drupal.getSelectedTerms();    for (var i=selected.length-1; i >= 0; i--) {      var downTerm = selected[i];      var upTerm = $(downTerm).next();      Drupal.orderTerms(upTerm, downTerm);    }    if (selected.length > 0) {      $.post(url, termWeightsData);    }  });}/** * adds small up and down arrows to each term * arrows get displayed on mouseover */Drupal.attachUpdateWeightTerms = function(parent, currentIndex) {  var settings = Drupal.settings.updateWeight || [];  var disable = settings['disable_mouseover'];  if (!disable) {    var url = Drupal.settings.updateWeight['url'];    var termLineClass = 'div.term-line';    var termUpClass = 'img.term-up';    var termDownClass = 'img.term-down';    if (parent && currentIndex) {      parent = $(parent).slice(currentIndex);    }    if (parent) {      termLineClass = $(parent).find(termLineClass);      termUpClass = $(parent).find(termUpClass);      termDownClass = $(parent).find(termDownClass);    }    $(termLineClass).mouseover(function() {      $(this).find('div.term-operations').show();    });    $(termLineClass).mouseout(function() {      $(this).find('div.term-operations').hide();    });    $(termUpClass).click(function() {      var upTerm = $(this).parents("li").eq(0);      var downTerm = $(upTerm).prev();      Drupal.orderTerms(upTerm, downTerm);      $.post(url, termWeightsData);      $(downTerm).find(termLineClass).unbind('mouseover');      setTimeout(function() {        $(upTerm).find('div.term-operations').hide();        $(downTerm).find(termLineClass).mouseover(function() {          $(this).find('div.term-operations').show();        });      }, 1500);    });    $(termDownClass).click(function() {      var downTerm = $(this).parents("li").eq(0);      var upTerm = $(downTerm).next();      Drupal.orderTerms(upTerm, downTerm);      $.post(url, termWeightsData);      $(upTerm).find(termLineClass).unbind('mouseover');      setTimeout(function() {        $(downTerm).find('div.term-operations').hide();        $(upTerm).find(termLineClass).mouseover(function() {          $(this).find('div.term-operations').show();        });      }, 1500);    });  }}/** * return array of selected terms */Drupal.getSelectedTerms = function() {  var terms = new Array();  $('.treeview').find("input:checked").each(function() {    var term = $(this).parents("li").eq(0);    terms.push(term);  });  return terms;}/** * reorders terms *   - swap list elements in DOM *   - post updated weights to callback in php *   - update classes of tree view */Drupal.orderTerms = function(upTerm, downTerm) {  try {    Drupal.getTermId(upTerm);    Drupal.swapTerms(upTerm, downTerm);    Drupal.swapWeights(upTerm, downTerm);    Drupal.updateTree(upTerm, downTerm);  } catch(e) {    //no next item, because term to update is last child, continue  }}/** * simple swap of two elements */Drupal.swapTerms = function(upTerm, downTerm) {  $(upTerm).after(downTerm);  $(downTerm).before(upTerm);}/** * updating weights of swaped terms * if two terms have different weights, then weights are being swapped * else, if both have same weights, upTerm gets decreased * * if prev/next siblings of up/down terms have same weights as current * swapped, they have to be updated by de/increasing weight (by 1) to ensure * unique position of swapped terms */Drupal.swapWeights = function(upTerm, downTerm) {  var upWeight = Drupal.getWeight(upTerm);  var downWeight = Drupal.getWeight(downTerm);  var downTid = Drupal.getTermId(downTerm);  var upTid = Drupal.getTermId(upTerm);  //same weight, decrease upTerm  if (upWeight == downWeight) {    termWeightsData['weights'][upTid] = --upWeight;  }  //different weights, swap  else {    termWeightsData['weights'][upTid] = downWeight;    termWeightsData['weights'][downTid] = upWeight;  }  //update prev siblings if necessary  try {    if (Drupal.getWeight($(upTerm).prev()) >= upWeight) {      $(upTerm).prevAll().each(function() {        var id = Drupal.getTermId(this);        var weight = Drupal.getWeight(this);        termWeightsData['weights'][id] = --weight;      });    }  } catch(e) {    //no prev  }  //update next siblings if necessary  try {    if (Drupal.getWeight($(downTerm).next()) <= downWeight) {      $(downTerm).nextAll().each(function() {        var id = Drupal.getTermId(this);        var weight = Drupal.getWeight(this);        termWeightsData['weights'][id] = ++weight;      });    }  } catch(e) {    //no next  }}/** * helper to return weight of a term */Drupal.getWeight = function(li) {  var id = Drupal.getTermId(li);  var weight;  if (termWeightsData['weights'][id] != null) {    weight = termWeightsData['weights'][id];  }  else {    weight = $(li).find("input:hidden[class=weight-form]").attr("value");  }  return weight;}})(jQuery);
 |