Mercurial > hg > cmmr2012-drupal-site
diff core/misc/tableselect.js @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/misc/tableselect.js Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,95 @@ +/** +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ + +(function ($, Drupal) { + Drupal.behaviors.tableSelect = { + attach: function attach(context, settings) { + $(context).find('th.select-all').closest('table').once('table-select').each(Drupal.tableSelect); + } + }; + + Drupal.tableSelect = function () { + if ($(this).find('td input[type="checkbox"]').length === 0) { + return; + } + + var table = this; + var checkboxes = void 0; + var lastChecked = void 0; + var $table = $(table); + var strings = { + selectAll: Drupal.t('Select all rows in this table'), + selectNone: Drupal.t('Deselect all rows in this table') + }; + var updateSelectAll = function updateSelectAll(state) { + $table.prev('table.sticky-header').addBack().find('th.select-all input[type="checkbox"]').each(function () { + var $checkbox = $(this); + var stateChanged = $checkbox.prop('checked') !== state; + + $checkbox.attr('title', state ? strings.selectNone : strings.selectAll); + + if (stateChanged) { + $checkbox.prop('checked', state).trigger('change'); + } + }); + }; + + $table.find('th.select-all').prepend($('<input type="checkbox" class="form-checkbox" />').attr('title', strings.selectAll)).on('click', function (event) { + if ($(event.target).is('input[type="checkbox"]')) { + checkboxes.each(function () { + var $checkbox = $(this); + var stateChanged = $checkbox.prop('checked') !== event.target.checked; + + if (stateChanged) { + $checkbox.prop('checked', event.target.checked).trigger('change'); + } + + $checkbox.closest('tr').toggleClass('selected', this.checked); + }); + + updateSelectAll(event.target.checked); + } + }); + + checkboxes = $table.find('td input[type="checkbox"]:enabled').on('click', function (e) { + $(this).closest('tr').toggleClass('selected', this.checked); + + if (e.shiftKey && lastChecked && lastChecked !== e.target) { + Drupal.tableSelectRange($(e.target).closest('tr')[0], $(lastChecked).closest('tr')[0], e.target.checked); + } + + updateSelectAll(checkboxes.length === checkboxes.filter(':checked').length); + + lastChecked = e.target; + }); + + updateSelectAll(checkboxes.length === checkboxes.filter(':checked').length); + }; + + Drupal.tableSelectRange = function (from, to, state) { + var mode = from.rowIndex > to.rowIndex ? 'previousSibling' : 'nextSibling'; + + for (var i = from[mode]; i; i = i[mode]) { + var $i = $(i); + + if (i.nodeType !== 1) { + continue; + } + + $i.toggleClass('selected', state); + $i.find('input[type="checkbox"]').prop('checked', state); + + if (to.nodeType) { + if (i === to) { + break; + } + } else if ($.filter(to, [i]).r.length) { + break; + } + } + }; +})(jQuery, Drupal); \ No newline at end of file