Chris@0: /** Chris@0: * DO NOT EDIT THIS FILE. Chris@0: * See the following change record for more information, Chris@0: * https://www.drupal.org/node/2815083 Chris@0: * @preserve Chris@0: **/ Chris@0: Chris@0: (function ($, Drupal, window) { Chris@0: function TableResponsive(table) { Chris@0: this.table = table; Chris@0: this.$table = $(table); Chris@0: this.showText = Drupal.t('Show all columns'); Chris@0: this.hideText = Drupal.t('Hide lower priority columns'); Chris@0: Chris@0: this.$headers = this.$table.find('th'); Chris@0: Chris@0: this.$link = $('').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: Chris@0: this.$table.before($('
').append(this.$link)); Chris@0: Chris@0: $(window).on('resize.tableresponsive', $.proxy(this, 'eventhandlerEvaluateColumnVisibility')).trigger('resize.tableresponsive'); Chris@0: } Chris@0: Chris@17: Drupal.behaviors.tableResponsive = { Chris@17: attach: function attach(context, settings) { Chris@17: var $tables = $(context).find('table.responsive-enabled').once('tableresponsive'); Chris@17: if ($tables.length) { Chris@17: var il = $tables.length; Chris@17: for (var i = 0; i < il; i++) { Chris@17: TableResponsive.tables.push(new TableResponsive($tables[i])); Chris@17: } Chris@17: } Chris@17: } Chris@17: }; Chris@17: Chris@0: $.extend(TableResponsive, { Chris@0: tables: [] Chris@0: }); Chris@0: Chris@0: $.extend(TableResponsive.prototype, { Chris@0: eventhandlerEvaluateColumnVisibility: function eventhandlerEvaluateColumnVisibility(e) { Chris@0: var pegged = parseInt(this.$link.data('pegged'), 10); Chris@0: var hiddenLength = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden').length; Chris@0: Chris@0: if (hiddenLength > 0) { Chris@0: this.$link.show().text(this.showText); Chris@0: } Chris@0: Chris@0: if (!pegged && hiddenLength === 0) { Chris@0: this.$link.hide().text(this.hideText); Chris@0: } Chris@0: }, Chris@0: eventhandlerToggleColumns: function eventhandlerToggleColumns(e) { Chris@0: e.preventDefault(); Chris@0: var self = this; Chris@0: var $hiddenHeaders = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden'); Chris@0: this.$revealedCells = this.$revealedCells || $(); Chris@0: Chris@0: if ($hiddenHeaders.length > 0) { Chris@0: $hiddenHeaders.each(function (index, element) { Chris@0: var $header = $(this); Chris@0: var position = $header.prevAll('th').length; Chris@0: self.$table.find('tbody tr').each(function () { Chris@0: var $cells = $(this).find('td').eq(position); Chris@0: $cells.show(); Chris@0: Chris@0: self.$revealedCells = $().add(self.$revealedCells).add($cells); Chris@0: }); Chris@0: $header.show(); Chris@0: Chris@0: self.$revealedCells = $().add(self.$revealedCells).add($header); Chris@0: }); Chris@0: this.$link.text(this.hideText).data('pegged', 1); Chris@0: } else { Chris@0: this.$revealedCells.hide(); Chris@0: Chris@0: this.$revealedCells.each(function (index, element) { Chris@0: var $cell = $(this); Chris@0: var properties = $cell.attr('style').split(';'); Chris@0: var newProps = []; Chris@0: Chris@14: var match = /^display\s*:\s*none$/; Chris@0: for (var i = 0; i < properties.length; i++) { Chris@0: var prop = properties[i]; Chris@0: prop.trim(); Chris@0: Chris@0: var isDisplayNone = match.exec(prop); Chris@0: if (isDisplayNone) { Chris@0: continue; Chris@0: } Chris@0: newProps.push(prop); Chris@0: } Chris@0: Chris@0: $cell.attr('style', newProps.join(';')); Chris@0: }); Chris@0: this.$link.text(this.showText).data('pegged', 0); Chris@0: Chris@0: $(window).trigger('resize.tableresponsive'); Chris@0: } Chris@0: } Chris@0: }); Chris@0: Chris@0: Drupal.TableResponsive = TableResponsive; Chris@0: })(jQuery, Drupal, window);