cms/drupal/modules/simpletest/simpletest.js
changeset 541 e756a8c72c3d
equal deleted inserted replaced
540:07239de796bb 541:e756a8c72c3d
       
     1 (function ($) {
       
     2 
       
     3 /**
       
     4  * Add the cool table collapsing on the testing overview page.
       
     5  */
       
     6 Drupal.behaviors.simpleTestMenuCollapse = {
       
     7   attach: function (context, settings) {
       
     8     var timeout = null;
       
     9     // Adds expand-collapse functionality.
       
    10     $('div.simpletest-image').once('simpletest-image', function () {
       
    11       var $this = $(this);
       
    12       var direction = settings.simpleTest[this.id].imageDirection;
       
    13       $this.html(settings.simpleTest.images[direction]);
       
    14 
       
    15       // Adds group toggling functionality to arrow images.
       
    16       $this.click(function () {
       
    17         var trs = $this.closest('tbody').children('.' + settings.simpleTest[this.id].testClass);
       
    18         var direction = settings.simpleTest[this.id].imageDirection;
       
    19         var row = direction ? trs.length - 1 : 0;
       
    20 
       
    21         // If clicked in the middle of expanding a group, stop so we can switch directions.
       
    22         if (timeout) {
       
    23           clearTimeout(timeout);
       
    24         }
       
    25 
       
    26         // Function to toggle an individual row according to the current direction.
       
    27         // We set a timeout of 20 ms until the next row will be shown/hidden to
       
    28         // create a sliding effect.
       
    29         function rowToggle() {
       
    30           if (direction) {
       
    31             if (row >= 0) {
       
    32               $(trs[row]).hide();
       
    33               row--;
       
    34               timeout = setTimeout(rowToggle, 20);
       
    35             }
       
    36           }
       
    37           else {
       
    38             if (row < trs.length) {
       
    39               $(trs[row]).removeClass('js-hide').show();
       
    40               row++;
       
    41               timeout = setTimeout(rowToggle, 20);
       
    42             }
       
    43           }
       
    44         }
       
    45 
       
    46         // Kick-off the toggling upon a new click.
       
    47         rowToggle();
       
    48 
       
    49         // Toggle the arrow image next to the test group title.
       
    50         $this.html(settings.simpleTest.images[(direction ? 0 : 1)]);
       
    51         settings.simpleTest[this.id].imageDirection = !direction;
       
    52 
       
    53       });
       
    54     });
       
    55   }
       
    56 };
       
    57 
       
    58 /**
       
    59  * Select/deselect all the inner checkboxes when the outer checkboxes are
       
    60  * selected/deselected.
       
    61  */
       
    62 Drupal.behaviors.simpleTestSelectAll = {
       
    63   attach: function (context, settings) {
       
    64     $('td.simpletest-select-all').once('simpletest-select-all', function () {
       
    65       var testCheckboxes = settings.simpleTest['simpletest-test-group-' + $(this).attr('id')].testNames;
       
    66       var groupCheckbox = $('<input type="checkbox" class="form-checkbox" id="' + $(this).attr('id') + '-select-all" />');
       
    67 
       
    68       // Each time a single-test checkbox is checked or unchecked, make sure
       
    69       // that the associated group checkbox gets the right state too.
       
    70       var updateGroupCheckbox = function () {
       
    71         var checkedTests = 0;
       
    72         for (var i = 0; i < testCheckboxes.length; i++) {
       
    73           $('#' + testCheckboxes[i]).each(function () {
       
    74             if (($(this).attr('checked'))) {
       
    75               checkedTests++;
       
    76             }
       
    77           });
       
    78         }
       
    79         $(groupCheckbox).attr('checked', (checkedTests == testCheckboxes.length));
       
    80       };
       
    81 
       
    82       // Have the single-test checkboxes follow the group checkbox.
       
    83       groupCheckbox.change(function () {
       
    84         var checked = !!($(this).attr('checked'));
       
    85         for (var i = 0; i < testCheckboxes.length; i++) {
       
    86           $('#' + testCheckboxes[i]).attr('checked', checked);
       
    87         }
       
    88       });
       
    89 
       
    90       // Have the group checkbox follow the single-test checkboxes.
       
    91       for (var i = 0; i < testCheckboxes.length; i++) {
       
    92         $('#' + testCheckboxes[i]).change(function () {
       
    93           updateGroupCheckbox();
       
    94         });
       
    95       }
       
    96 
       
    97       // Initialize status for the group checkbox correctly.
       
    98       updateGroupCheckbox();
       
    99       $(this).append(groupCheckbox);
       
   100     });
       
   101   }
       
   102 };
       
   103 
       
   104 })(jQuery);