PageSourceSearch

https://cher-city.ru/sites/all/modules/hierarchical_select/hierarchical_select.js?3

js cher-city.ru collected 2026-10-02 10:34:55 UTC 25,512 bytes, 612 lines download raw bytes

1
2(function($) {
3
4Drupal.behaviors.HierarchicalSelect = function (context) {
5  $('.hierarchical-select-wrapper:not(.hierarchical-select-wrapper-processed)', context)
6  .addClass('hierarchical-select-wrapper-processed').each(function() {
7    var hsid = $(this).attr('id').replace(/^hierarchical-select-(\d+)-wrapper$/, "$1");
8    Drupal.HierarchicalSelect.initialize(hsid);
9  });
10};
11
12Drupal.HierarchicalSelect = {};
13
14Drupal.HierarchicalSelect.state = [];
15
16Drupal.HierarchicalSelect.context = function() {
17  return $("form .hierarchical-select-wrapper");
18};
19
20Drupal.HierarchicalSelect.initialize = function(hsid) {
21  // Prevent JS errors when Hierarchical Select is loaded dynamically.
22  if (undefined == Drupal.settings.HierarchicalSelect || undefined == Drupal.settings.HierarchicalSelect.settings[hsid]) {
23    return false;
24  }
25
26  // If you set Drupal.settings.HierarchicalSelect.pretendNoJS to *anything*,
27  // and as such, Hierarchical Select won't initialize its Javascript! It
28  // will seem as if your browser had Javascript disabled.
29  if (undefined != Drupal.settings.HierarchicalSelect.pretendNoJS) {
30    return false;
31  }
32
33  // Turn off Firefox' autocomplete feature. This causes Hierarchical Select
34  // form items to be disabled after a hard refresh.
35  // See http://drupal.org/node/453048 and
36  // http://www.ryancramer.com/journal/entries/radio_buttons_firefox/
37  if ($.browser.mozilla) {
38    $('#hierarchical-select-'+ hsid +'-wrapper').parents('form').attr('autocomplete', 'off');
39  }
40
41  if (this.cache != null) {
42    this.cache.initialize();
43  }
44
45  Drupal.settings.HierarchicalSelect.settings[hsid]['updatesEnabled'] = true;
46  if (undefined == Drupal.HierarchicalSelect.state[hsid]) {
47    Drupal.HierarchicalSelect.state[hsid] = {};
48  }
49
50  this.transform(hsid);
51  if (Drupal.settings.HierarchicalSelect.settings[hsid].resizable) {
52    this.resizable(hsid);
53  }
54  Drupal.HierarchicalSelect.attachBindings(hsid);
55
56  if (this.cache != null && this.cache.status()) {
57    this.cache.load(hsid);
58  }
59
60  Drupal.HierarchicalSelect.log(hsid);
61};
62
63Drupal.HierarchicalSelect.log = function(hsid, messages) {
64  // Only perform logging if logging is enabled.
65  if (Drupal.settings.HierarchicalSelect.initialLog == undefined || Drupal.settings.HierarchicalSelect.initialLog[hsid] == undefined) {
66    return;
67  }
68  else {
69    Drupal.HierarchicalSelect.state[hsid].log = [];
70  }
71
72  // Store the log messages. The first call to this function may not contain a
73  // message: the initial log included in the initial HTML rendering should be
74  // used instead.. 
75  if (Drupal.HierarchicalSelect.state[hsid].log.length == 0) {
76    Drupal.HierarchicalSelect.state[hsid].log.push(Drupal.settings.HierarchicalSelect.initialLog[hsid]);
77  }
78  else {
79      Drupal.HierarchicalSelect.state[hsid].log.push(messages);
80  }
81
82  // Print the log messages.
83  console.log("HIERARCHICAL SELECT " + hsid);
84  var logIndex = Drupal.HierarchicalSelect.state[hsid].log.length - 1;
85  for (var i = 0; i < Drupal.HierarchicalSelect.state[hsid].log[logIndex].length; i++) {
86    console.log(Drupal.HierarchicalSelect.state[hsid].log[logIndex][i]);
87  }
88  console.log(' ');
89};
90
91Drupal.HierarchicalSelect.transform = function(hsid) {
92  var removeString = $('#hierarchical-select-'+ hsid +'-wrapper .dropbox .dropbox-remove:first', Drupal.HierarchicalSelect.context).text();
93
94  $('#hierarchical-select-'+ hsid +'-wrapper', Drupal.HierarchicalSelect.context)
95  // Remove the .nojs div.
96  .find('.nojs').remove().end()
97  // Find all .dropbox-remove cells in the dropbox table.
98  .find('.dropbox .dropbox-remove')
99  // Hide the children of these table cells. We're not removing them because
100  // we want to continue to use the "Remove" checkboxes.
101  .find('*').css('display', 'none').end() // We can't use .hide() because of collapse.js: http://drupal.org/node/351458#comment-1258303.
102  // Put a "Remove" link there instead.
103  .append('<a href="">'+ removeString +'</a>');  
104};
105
106Drupal.HierarchicalSelect.resizable = function(hsid) {
107  var $selectsWrapper = $('#hierarchical-select-' + hsid + '-wrapper .hierarchical-select .selects', Drupal.HierarchicalSelect.context);
108
109  // No select wrapper present: the user is creating a new item.
110  if ($selectsWrapper.length == 0) {
111    return;
112  }
113
114  // Append the drag handle ("grippie").
115  $selectsWrapper.append($('<div class="grippie"></div>'));
116
117  // jQuery object that contains all selects in the hierarchical select, to
118  // speed up DOM manipulation during dragging.
119  var $selects = $selectsWrapper.find('select');
120
121  var defaultHeight = Drupal.HierarchicalSelect.state[hsid].defaultHeight = $selects.slice(0, 1).height();
122  var defaultSize = Drupal.HierarchicalSelect.state[hsid].defaultSize = $selects.slice(0, 1).attr('size');
123  defaultSize = (defaultSize == 0) ? 1 : defaultSize;
124  var margin = Drupal.HierarchicalSelect.state[hsid].margin = parseInt($selects.slice(0, 1).css('margin-bottom').replace(/^(\d+)px$/, "$1"));
125
126  // Bind the drag event.
127  $('.grippie', $selectsWrapper)
128  .mousedown(startDrag)
129  .dblclick(function() {
130    if (Drupal.HierarchicalSelect.state[hsid].resizedHeight == undefined) {
131      Drupal.HierarchicalSelect.state[hsid].resizedHeight = defaultHeight;
132    }
133    var resizedHeight = Drupal.HierarchicalSelect.state[hsid].resizedHeight = (Drupal.HierarchicalSelect.state[hsid].resizedHeight > defaultHeight + 2) ? defaultHeight : 4.6 / defaultSize * defaultHeight;
134    Drupal.HierarchicalSelect.resize($selects, defaultHeight, resizedHeight, defaultSize, margin);
135  });
136
137  function startDrag(e) {
138    staticOffset = $selects.slice(0, 1).height() - e.pageY;
139    $selects.css('opacity', 0.25);
140    $(document).mousemove(performDrag).mouseup(endDrag);
141    return false;
142  }
143
144  function performDrag(e) {
145    var resizedHeight = staticOffset + e.pageY;
146    Drupal.HierarchicalSelect.resize($selects, defaultHeight, resizedHeight, defaultSize, margin);
147    return false;
148  }
149
150  function endDrag(e) {
151    var height = $selects.slice(0, 1).height();
152
153    $(document).unbind("mousemove", performDrag).unbind("mouseup", endDrag);
154    $selects.css('opacity', 1);
155    if (height != Drupal.HierarchicalSelect.state[hsid].resizedHeight) {
156      Drupal.HierarchicalSelect.state[hsid].resizedHeight = (height > defaultHeight) ? height : defaultHeight;
157    }
158  }
159};
160
161Drupal.HierarchicalSelect.resize = function($selects, defaultHeight, resizedHeight, defaultSize, margin) {
162  if (resizedHeight == undefined) {
163    resizedHeight = defaultHeight;
164  }
165
166  $selects
167  .attr('size', (resizedHeight > defaultHeight) ? 2 : defaultSize)
168  .height(Math.max(defaultHeight + margin, resizedHeight)); // Without the margin component, the height() method would allow the select to be sized to low: defaultHeight - margin.
169};
170
171Drupal.HierarchicalSelect.disableForm = function(hsid) {
172  // Disable *all* submit buttons in this form, as well as all input-related
173  // elements of the current hierarchical select.
174  $('form:has(#hierarchical-select-' + hsid +'-wrapper) input[type=submit]')
175  .add('#hierarchical-select-' + hsid +'-wrapper .hierarchical-select .selects select')
176  .add('#hierarchical-select-' + hsid +'-wrapper .hierarchical-select input')
177  .attr('disabled', true);
178
179  // Add the 'waiting' class. Default style: make everything transparent.
180  $('#hierarchical-select-' + hsid +'-wrapper').addClass('waiting');
181
182  // Indicate that the user has to wait.
183  $('body').css('cursor', 'wait');
184};
185
186Drupal.HierarchicalSelect.enableForm = function(hsid) {
187  // This method undoes everything the disableForm() method did.
188
189  $e = $('form:has(#hierarchical-select-' + hsid +'-wrapper) input[type=submit]');
190  $e = $e.add('#hierarchical-select-' + hsid +'-wrapper .hierarchical-select input[type!=submit]');
191
192  // Don't enable the selects again if they've been disabled because the
193  // dropbox limit was exceeded.
194  dropboxLimitExceeded = $('#hierarchical-select-' + hsid +'-wrapper .hierarchical-select-dropbox-limit-warning').length > 0;
195  if (!dropboxLimitExceeded) {
196    $e = $e.add($('#hierarchical-select-' + hsid +'-wrapper .hierarchical-select .selects select'));
197  }
198  $e.attr('disabled', false);
199
200  // Don't enable the 'Add' button again if it's been disabled because the
201  // dropbox limit was exceeded.
202  if (dropboxLimitExceeded) {
203    $('#hierarchical-select-' + hsid +'-wrapper .hierarchical-select input[type=submit]')
204    .attr('disabled', true);
205  }
206
207  $('#hierarchical-select-' + hsid +'-wrapper').removeClass('waiting');
208
209  $('body').css('cursor', 'auto');
210};
211
212Drupal.HierarchicalSelect.throwError = function(hsid, message) {
213  // Show the error to the user.
214  alert(message);
215
216  // Log the error.
217  Drupal.HierarchicalSelect.log(hsid, [ message ]);
218
219  // Re-enable the form to allow the user to retry, but reset the selection to
220  // the level label if possible, otherwise the "<none>" option if possible.
221  var $select = $('#hierarchical-select-' + hsid +'-wrapper .hierarchical-select .selects select:first');
222  var levelLabelOption = $('option[value^=label_]', $select).val();
223  if (levelLabelOption !== undefined) {
224    $select.val(levelLabelOption);
225  }
226  else {
227    var noneOption = $('option[value=none]', $select).val();
228    if (noneOption !== undefined) {
229      $select.val(noneOption);
230    }
231  }
232  Drupal.HierarchicalSelect.enableForm(hsid);
233};
234
235Drupal.HierarchicalSelect.prepareGETSubmit = function(hsid) {
236  // Remove the name attributes of all form elements that end up in GET,
237  // except for the "flat select" form element.
238  $('#hierarchical-select-'+ hsid +'-wrapper', Drupal.HierarchicalSelect.context)
239  .find('input, select')
240  .not('.flat-select')
241  .removeAttr('name');
242
243  // Update the name attribute of the "flat select" form element
244  var $flatSelect = $('#hierarchical-select-'+ hsid +'-wrapper .flat-select', Drupal.HierarchicalSelect.context);
245  var newName = $flatSelect.attr('name').replace(/^([a-zA-Z0-9_\-]*)(?:\[flat_select\]){1}(\[\])?$/, "$1$2");
246  $flatSelect.attr('name', newName);
247
248  Drupal.HierarchicalSelect.triggerEvents(hsid, 'prepared-GET-submit', {});
249};
250
251Drupal.HierarchicalSelect.attachBindings = function(hsid) {
252  var addOpString = $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select input', Drupal.HierarchicalSelect.context).val();
253  var createNewItemOpString = $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .create-new-item-create', Drupal.HierarchicalSelect.context).val();
254  var cancelNewItemOpString = $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .create-new-item-cancel', Drupal.HierarchicalSelect.context).val();
255
256  var data = {};
257  data.hsid = hsid;
258
259  $('#hierarchical-select-'+ hsid +'-wrapper', this.context)
260  // "disable-updates" event
261  .unbind('disable-updates').bind('disable-updates', data, function(e) {
262    Drupal.settings.HierarchicalSelect.settings[e.data.hsid]['updatesEnabled'] 
262= false;
263  })
264  
265  // "enforce-update" event
266  .unbind('enforce-update').bind('enforce-update', data, function(e, extraPost) {
267     Drupal.HierarchicalSelect.update(e.data.hsid, 'enforced-update', { extraPost: extraPost });
268  })
269
270  // "prepare-GET-submit" event
271  .unbind('prepare-GET-submit').bind('prepare-GET-submit', data, function(e) {
272    Drupal.HierarchicalSelect.prepareGETSubmit(e.data.hsid);
273  })
274
275  // "update-hierarchical-select" event
276  .find('.hierarchical-select .selects select').unbind().change(function(_hsid) {
277    return function() {
278      if (Drupal.settings.HierarchicalSelect.settings[_hsid]['updatesEnabled']) {
279        Drupal.HierarchicalSelect.update(_hsid, 'update-hierarchical-select', { select_id : $(this).attr('id') });
280      }
281    };
282  }(hsid)).end()
283
284  // "create-new-item" event
285  .find('.hierarchical-select .create-new-item .create-new-item-create').unbind().click(function(_hsid) {
286    return function() {
287      Drupal.HierarchicalSelect.update(_hsid, 'create-new-item', { opString : createNewItemOpString });
288      return false; // Prevent the browser from POSTing the page.
289    };
290  }(hsid)).end()
291
292  // "cancel-new-item" event"
293  .find('.hierarchical-select .create-new-item .create-new-item-cancel').unbind().click(function(_hsid) {
294    return function() {
295      Drupal.HierarchicalSelect.update(_hsid, 'cancel-new-item', { opString : cancelNewItemOpString });
296      return false; // Prevent the browser from POSTing the page (in case of the "Cancel" button).
297    };
298  }(hsid)).end()
299
300  // "add-to-dropbox" event
301  .find('.hierarchical-select .add-to-dropbox').unbind().click(function(_hsid) {
302    return function() {
303      Drupal.HierarchicalSelect.update(_hsid, 'add-to-dropbox', { opString : addOpString });
304      return false; // Prevent the browser from POSTing the page.
305    };
306  }(hsid)).end()
307
308  // "remove-from-dropbox" event
309  // (anchors in the .dropbox-remove cells in the .dropbox table)
310  .find('.dropbox .dropbox-remove a').unbind().click(function(_hsid) {
311    return function() {
312      var isDisabled = $('#hierarchical-select-'+ hsid +'-wrapper', Drupal.HierarchicalSelect.context).attr('disabled');
313
314      // If the hierarchical select is disabled, then ignore this click.
315      if (isDisabled) {
316        return false;
317      }
318
319      // Check the (hidden, because JS is enabled) checkbox that marks this
320      // dropbox entry for removal. 
321      $(this).parent().find('input[type=checkbox]').attr('checked', true);
322      Drupal.HierarchicalSelect.update(_hsid, 'remove-from-dropbox', {});
323      return false; // Prevent the browser from POSTing the page.
324    };
325  }(hsid));
326};
327
328Drupal.HierarchicalSelect.preUpdateAnimations = function(hsid, updateType, lastUnchanged, callback) {
329  switch (updateType) {
330    case 'update-hierarchical-select':
331      // Drop out the selects of the levels deeper than the select of the
332      // level that just changed.
333      var animationDelay = Drupal.settings.HierarchicalSelect.settings[hsid]['animationDelay'];
334      var $animatedSelects = $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .selects select', Drupal.HierarchicalSelect.context).slice(lastUnchanged);
335      if ($animatedSelects.size() > 0) {
336        $animatedSelects.hide();
337        for (var i = 0; i < $animatedSelects.size(); i++) {
338          if (i < $animatedSelects.size() - 1) {
339            $animatedSelects.slice(i, i + 1).hide("drop", { direction: "left" }, animationDelay);
340          }
341          else {
342            $animatedSelects.slice(i, i + 1).hide("drop", { direction: "left" }, animationDelay, callback);
343          }
344        }
345      }
346      else if (callback) {
347        callback();
348      }
349      break;
350    default:
351      if (callback) {
352        callback();
353      }  
354      break;
355  }
356};
357
358Drupal.HierarchicalSelect.postUpdateAnimations = function(hsid, updateType, lastUnchanged, callback) {
359  if (Drupal.settings.HierarchicalSelect.settings[hsid].resizable) {
360    // Restore the resize.  
361    Drupal.HierarchicalSelect.resize(
362      $('#hierarchical-select-' + hsid + '-wrapper .hierarchical-select .selects select', Drupal.HierarchicalSelect.context),
363      Drupal.HierarchicalSelect.state[hsid].defaultHeight,
364      Drupal.HierarchicalSelect.state[hsid].resizedHeight,
365      Drupal.HierarchicalSelect.state[hsid].defaultSize,
366      Drupal.HierarchicalSelect.state[hsid].margin
367    );
368  }
369
370  switch (updateType) {
371    case 'update-hierarchical-select':
372      var $createNewItemInput = $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .create-new-item-input', Drupal.HierarchicalSelect.context);
373      
374      if ($createNewItemInput.size() == 0) {
375        // Give focus to the level below the one that has changed, if it
376        // exists.
377        if (!$.browser.mozilla) { // Don't give focus in Firefox: the user would have to click twice before he can make a selection.
378          $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .selects select', Drupal.HierarchicalSelect.context)
379          .slice(lastUnchanged, lastUnchanged + 1)
380          .focus();
381        }
382      }
383      else {
384        // Give focus to the input field of the "create new item/level"
385        // section, if it exists, and also select the existing text.
386        $createNewItemInput.focus();
387        $createNewItemInput[0].select();
388      }
389      // Hide the loaded selects after the one that was just changed, then
390      // drop them in.
391      var animationDelay = Drupal.settings.HierarchicalSelect.settings[hsid]['animationDelay'];
392      var $animatedSelects = $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .selects select', Drupal.HierarchicalSelect.context).slice(lastUnchanged);
393      if ($animatedSelects.size() > 0) {
394        $animatedSelects.hide();
395        for (var i = 0; i < $animatedSelects.size(); i++) {
396          if (i < $animatedSelects.size() - 1) {
397            $animatedSelects.slice(i, i + 1).show("drop", { direction: "left" }, animationDelay);
398          }
399          else {
400            $animatedSelects.slice(i, i + 1).show("drop", { direction: "left" }, animationDelay, callback);
401          }
402        }
403      }
404      else if (callback) {
405        callback();
406      }
407      break;
408
409    case 'create-new-item':
410      // Make sure that other Hierarchical Selects that represent the same
411      // hierarchy are also updated, to make sure that they have the newly
412      // created item!
413      var cacheId = Drupal.settings.HierarchicalSelect.settings[hsid].cacheId;
414      for (var otherHsid in Drupal.settings.HierarchicalSelect.settings) {
415        if (Drupal.settings.HierarchicalSelect.settings[otherHsid].cacheId == cacheId) {
416          $('#hierarchical-select-'+ otherHsid +'-wrapper')
417          .trigger('enforce-update');
418        }
419      }
420      // TRICKY: NO BREAK HERE!
421
422    case 'cancel-new-item':
423      // After an item/level has been created/cancelled, reset focus to the
424      // beginning of the hierarchical select.
425      $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .selects select', Drupal.HierarchicalSelect.context)
426      .slice(0, 1)
427      .focus();
428
429      if (callback) {
430        callback();
431      }
432      break;
433
434    default:
435      if (callback) {
436        callback();
437      }
438      break;
439  }
440};
441
442Drupal.HierarchicalSelect.triggerEvents = function(hsid, updateType, settings) {
443  $('#hierarchical-select-'+ hsid +'-wrapper', Drupal.HierarchicalSelect.context)
444  .trigger(updateType, [ hsid, settings ]);
445};
446
447Drupal.HierarchicalSelect.update = function(hsid, updateType, settings) {
448  var post = $('form:has(#hierarchical-select-' + hsid +'-wrapper)', Drupal.HierarchicalSelect.context).formToArray();
449
450  // Pass the hierarchical_select id via POST.
451  post.push({ name : 'hsid', value : hsid });
452  
453  // If a cache system is installed, let the server know if it's running
454  // properly. If it is running properly, the server will send back additional
455  // information to maintain a lazily-loaded cache.
456  if (Drupal.HierarchicalSelect.cache != null) {
457    post.push({ name : 'client_supports_caching', value : Drupal.HierarchicalSelect.cache.status() });
458  }
459
460  // updateType is one of:
461  // - 'none' (default)
462  // - 'update-hierarchical-select'
463  // - 'enforced-update'
464  // - 'create-new-item'
465  // - 'remove-from-dropbox'
466  switch (updateType) {
467    case 'update-hierarchical-select':
468      var value = $('#'+ settings.select_id).val();
469      var lastUnchanged = parseInt(settings.select_id.replace(/^.*-hierarchical-select-selects-(\d+)$/, "$1")) + 1;
470      var optionClass = $('#'+ settings.select_id).find('option[value='+ value +']').attr('class');
471
472      // Don't do anything (also no callback to the server!) when the selected
473      // item is:
474      // - the '<none>' option and the renderFlatSelect setting is disabled, or
475      // - a level label, or
476      // - an option of class 'has-no-children', and
477      //   (the renderFlatSelect setting is disabled or the dropbox is enabled)
478      //   and
479      //   (the createNewLevels setting is disabled).
480      if ((value == 'none' && Drupal.settings.HierarchicalSelect.settings[hsid]['renderFlatSelect'] == false)
481          || value.match(/^label_\d+$/)
482          || (optionClass == 'has-no-children'
483             &&
484             (
485               (Drupal.settings.HierarchicalSelect.settings[hsid]['renderFlatSelect'] == false
486                || $('#hierarchical-select-'+ hsid +'-wrapper .dropbox').length > 0
487               )
488               &&
489               Drupal.settings.HierarchicalSelect.settings[hsid]['createNewLevels'] == false
490             )
491           )
492         )
493      {
494        Drupal.HierarchicalSelect.preUpdateAnimations(hsid, updateType, lastUnchanged, function() {
495          // Remove the sublevels.
496          $('#hierarchical-select-'+ hsid +'-wrapper .hierarchical-select .selects select', Drupal.HierarchicalSelect.context)
497          .slice(lastUnchanged)
498          .remove();
499
500          // The selection of this hierarchical select has changed!
501          Drupal.HierarchicalSelect.triggerEvents(hsid, 'change-hierarchical-select', settings);
502        });
503        return;
504      }
505      break;
506    
507    case 'enforced-update':
508      post = post.concat(settings.extraPost);
509      break;
510
511    case 'create-new-item':
512    case 'cancel-new-item':
513    case 'add-to-dropbox':
514      post.push({ name : 'op', value : settings.opString });
515      break;
516  }
517
518  // Construct the URL the request should be made to. GET arguments may not be
519  // forgotten.
520  var url = Drupal.settings.HierarchicalSelect.basePath + Drupal.settings.HierarchicalSelect.settings[hsid]['path'];
521  if (Drupal.settings.HierarchicalSelect.getArguments.length > 0) {
522    url += (url.indexOf('?') == -1) ? '?' : '&';
523    url += Drupal.settings.HierarchicalSelect.getArguments;
524  }
525
526  // Construct the object that contains the options for a callback to the
527  // server. If a client-side cache is found however, it's possible that this
528  // won't be used.
529  var ajaxOptions = {
530    url:        url,
531    type:       'POST',
532    dataType:   'json',
533    data:       post,
534    beforeSend: function() {
535      Drupal.HierarchicalSelect.triggerEvents(hsid, 'before-' + updateType, settings);
536      Drupal.HierarchicalSelect.disableForm(hsid); 
537    },
538    error: function (XMLHttpRequest, textStatus, errorThrown) {
539      // When invalid HTML is received in Safari, jQuery calls this function.
540      Drupal.HierarchicalSelect.throwError(hsid, Drupal.t('Received an invali
540d response from the server.'));
541    },
542    success:    function(response) {
543      // When invalid HTML is received in Firefox, jQuery calls this function.
544      if ($('.hierarchical-select-wrapper > *', $(response.output)).length == 0) {
545        Drupal.HierarchicalSelect.throwError(hsid, Drupal.t('Received an invalid response from the server.'));
546        return;
547      }
548
549      // Replace the old HTML with the (relevant part of) retrieved HTML.
550      $('#hierarchical-select-'+ hsid +'-wrapper', Drupal.HierarchicalSelect.context)
551      .removeClass('hierarchical-select-wrapper-processed')
552      .html($('.hierarchical-select-wrapper > *', $(response.output)));
553
554      // Attach behaviors. This is just after the HTML has been updated, so
555      // it's as soon as we can.
556      Drupal.attachBehaviors(Drupal.HierarchicalSelect.context);
557
558      // Transform the hierarchical select and/or dropbox to the JS variant,
559      // make it resizable again and re-enable the disabled form items.
560      Drupal.HierarchicalSelect.enableForm(hsid);
561
562      Drupal.HierarchicalSelect.postUpdateAnimations(hsid, updateType, lastUnchanged, function() {
563        // Update the client-side cache when:
564        // - information for in the cache is provided in the response, and
565        // - the cache system is available, and
566        // - the cache system is running.
567        if (response.cache != null && Drupal.HierarchicalSelect.cache != null && Drupal.HierarchicalSelect.cache.status()) {
568          Drupal.HierarchicalSelect.cache.sync(hsid, response.cache);
569        }
570
571        if (response.log != undefined) {
572          Drupal.HierarchicalSelect.log(hsid, response.log);
573        }
574
575        Drupal.HierarchicalSelect.triggerEvents(hsid, updateType, settings);
576
577        if (updateType == 'update-hierarchical-select') {
578          // The selection of this hierarchical select has changed!
579          Drupal.HierarchicalSelect.triggerEvents(hsid, 'change-hierarchical-select', settings);
580        }
581      });
582    }
583  };
584
585  // Use the client-side cache to update the hierarchical select when:
586  // - the hierarchical select is being updated (i.e. no add/remove), and
587  // - the renderFlatSelect setting is disabled, and
588  // - the createNewItems setting is disabled, and
589  // - the cache system is available, and
590  // - the cache system is running.
591  // Otherwise, perform a normal dynamic form submit.
592  if (updateType == 'update-hierarchical-select'
593      && Drupal.settings.HierarchicalSelect.settings[hsid]['renderFlatSelect'] == false
594      && Drupal.settings.HierarchicalSelect.settings[hsid]['createNewItems'] == false
595      && Drupal.HierarchicalSelect.cache != null
596      && Drupal.HierarchicalSelect.cache.status())
597  {
598    Drupal.HierarchicalSelect.cache.updateHierarchicalSelect(hsid, value, settings, lastUnchanged, ajaxOptions);
599  }
600  else {
601    Drupal.HierarchicalSelect.preUpdateAnimations(hsid, updateType, lastUnchanged, function() {
602      $.ajax(ajaxOptions);
603    });
604  }
605};
606
607Drupal.HierarchicalSelect.ajaxViewPagerSettingsUpdate = function(target, response) {
608  $.extend(Drupal.settings.HierarchicalSelect.settings, response.hs_drupal_js_settings);
609  Drupal.attachBehaviors($(target));
610};
611
612})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.