annotate core/misc/tableresponsive.js @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
rev   line source
Chris@0 1 /**
Chris@0 2 * DO NOT EDIT THIS FILE.
Chris@0 3 * See the following change record for more information,
Chris@0 4 * https://www.drupal.org/node/2815083
Chris@0 5 * @preserve
Chris@0 6 **/
Chris@0 7
Chris@0 8 (function ($, Drupal, window) {
Chris@0 9 Drupal.behaviors.tableResponsive = {
Chris@0 10 attach: function attach(context, settings) {
Chris@0 11 var $tables = $(context).find('table.responsive-enabled').once('tableresponsive');
Chris@0 12 if ($tables.length) {
Chris@0 13 var il = $tables.length;
Chris@0 14 for (var i = 0; i < il; i++) {
Chris@0 15 TableResponsive.tables.push(new TableResponsive($tables[i]));
Chris@0 16 }
Chris@0 17 }
Chris@0 18 }
Chris@0 19 };
Chris@0 20
Chris@0 21 function TableResponsive(table) {
Chris@0 22 this.table = table;
Chris@0 23 this.$table = $(table);
Chris@0 24 this.showText = Drupal.t('Show all columns');
Chris@0 25 this.hideText = Drupal.t('Hide lower priority columns');
Chris@0 26
Chris@0 27 this.$headers = this.$table.find('th');
Chris@0 28
Chris@0 29 this.$link = $('<button type="button" class="link tableresponsive-toggle"></button>').attr('title', Drupal.t('Show table cells that were hidden to make the table fit within a small screen.')).on('click', $.proxy(this, 'eventhandlerToggleColumns'));
Chris@0 30
Chris@0 31 this.$table.before($('<div class="tableresponsive-toggle-columns"></div>').append(this.$link));
Chris@0 32
Chris@0 33 $(window).on('resize.tableresponsive', $.proxy(this, 'eventhandlerEvaluateColumnVisibility')).trigger('resize.tableresponsive');
Chris@0 34 }
Chris@0 35
Chris@0 36 $.extend(TableResponsive, {
Chris@0 37 tables: []
Chris@0 38 });
Chris@0 39
Chris@0 40 $.extend(TableResponsive.prototype, {
Chris@0 41 eventhandlerEvaluateColumnVisibility: function eventhandlerEvaluateColumnVisibility(e) {
Chris@0 42 var pegged = parseInt(this.$link.data('pegged'), 10);
Chris@0 43 var hiddenLength = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden').length;
Chris@0 44
Chris@0 45 if (hiddenLength > 0) {
Chris@0 46 this.$link.show().text(this.showText);
Chris@0 47 }
Chris@0 48
Chris@0 49 if (!pegged && hiddenLength === 0) {
Chris@0 50 this.$link.hide().text(this.hideText);
Chris@0 51 }
Chris@0 52 },
Chris@0 53 eventhandlerToggleColumns: function eventhandlerToggleColumns(e) {
Chris@0 54 e.preventDefault();
Chris@0 55 var self = this;
Chris@0 56 var $hiddenHeaders = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden');
Chris@0 57 this.$revealedCells = this.$revealedCells || $();
Chris@0 58
Chris@0 59 if ($hiddenHeaders.length > 0) {
Chris@0 60 $hiddenHeaders.each(function (index, element) {
Chris@0 61 var $header = $(this);
Chris@0 62 var position = $header.prevAll('th').length;
Chris@0 63 self.$table.find('tbody tr').each(function () {
Chris@0 64 var $cells = $(this).find('td').eq(position);
Chris@0 65 $cells.show();
Chris@0 66
Chris@0 67 self.$revealedCells = $().add(self.$revealedCells).add($cells);
Chris@0 68 });
Chris@0 69 $header.show();
Chris@0 70
Chris@0 71 self.$revealedCells = $().add(self.$revealedCells).add($header);
Chris@0 72 });
Chris@0 73 this.$link.text(this.hideText).data('pegged', 1);
Chris@0 74 } else {
Chris@0 75 this.$revealedCells.hide();
Chris@0 76
Chris@0 77 this.$revealedCells.each(function (index, element) {
Chris@0 78 var $cell = $(this);
Chris@0 79 var properties = $cell.attr('style').split(';');
Chris@0 80 var newProps = [];
Chris@0 81
Chris@0 82 var match = /^display\s*:\s*none$/;
Chris@0 83 for (var i = 0; i < properties.length; i++) {
Chris@0 84 var prop = properties[i];
Chris@0 85 prop.trim();
Chris@0 86
Chris@0 87 var isDisplayNone = match.exec(prop);
Chris@0 88 if (isDisplayNone) {
Chris@0 89 continue;
Chris@0 90 }
Chris@0 91 newProps.push(prop);
Chris@0 92 }
Chris@0 93
Chris@0 94 $cell.attr('style', newProps.join(';'));
Chris@0 95 });
Chris@0 96 this.$link.text(this.showText).data('pegged', 0);
Chris@0 97
Chris@0 98 $(window).trigger('resize.tableresponsive');
Chris@0 99 }
Chris@0 100 }
Chris@0 101 });
Chris@0 102
Chris@0 103 Drupal.TableResponsive = TableResponsive;
Chris@0 104 })(jQuery, Drupal, window);