mysociety/alaveteli

View on GitHub
app/assets/javascripts/alaveteli_pro/batch_authority_search/browse.js

Summary

Maintainability
A
0 mins
Test Coverage
// Handles submission of the search form via ajax
(function($, BatchAuthoritySearch, DraftBatchSummary){
  BatchAuthoritySearch.Browse = {};

  var SearchEvents = BatchAuthoritySearch.Events;
  var DraftEvents = DraftBatchSummary.Events;
  var $search,
      $draft;
  var listItemSelector = '.batch-builder__list__item';
  var groupSelector = '.batch-builder__list__group';
  var closedClass = 'batch-builder__list__group--closed';
  var loadingClass = 'batch-builder__list__group--loading';

  var toggleCaret = function toogleCaret(group) {
    group.toggleClass(closedClass);
  };

  var toggleSpinner = function toggleSpinner(group) {
    group.toggleClass(loadingClass);
  };

  var fetchBodies = function fetchBodies(url, group) {
    toggleSpinner(group);
    $.ajax({
      url: DraftBatchSummary.urlWithDraftID(url),
      dataType: 'html',
      success: function (data) {
        group.append(data);
        toggleCaret(group);
        toggleSpinner(group);
        $draft.trigger(DraftEvents.bodyAdded);
        $search.trigger(SearchEvents.domUpdated);
        $search.trigger(SearchEvents.rendered);
      }
    });
  }

  var bindListItemAnchors = function bindListItemAnchors() {
    $('.batch-builder__list__item__anchor', $search).on('click', function (e) {
      e.preventDefault();

      var listItem = $(this).parent(listItemSelector);
      var group = listItem.parent(groupSelector);
      var childList = listItem.siblings('ul');

      if (childList.is('*')) {
        toggleCaret(group);
      } else {
        var url = $(this).attr('href');
        fetchBodies(url, group);
      }
    });
  };

  var collapseTopLevelGroups = function collapseTopLevelGroups() {
    var groups = $('.batch-builder__list > .batch-builder__list__group');
    toggleCaret(groups);
  };

  $(function(){
    $search = BatchAuthoritySearch.$el;
    $draft = DraftBatchSummary.$el;

    collapseTopLevelGroups();
    bindListItemAnchors();
  });
})(window.jQuery,
   window.AlaveteliPro.BatchAuthoritySearch,
   window.AlaveteliPro.DraftBatchSummary);