diff --git a/core/misc/tabledrag.js b/core/misc/tabledrag.js index e5ffbe4196f9f575ef3692d1923faf21201367c1..ebba5f4edd375095a237cbcc263357064458a974 100644 --- a/core/misc/tabledrag.js +++ b/core/misc/tabledrag.js @@ -2,6 +2,12 @@ "use strict"; +/** + * Store the state of weight columns display for all tables. + * Default value is to hide weight columns. + */ +var showWeight = JSON.parse(localStorage.getItem('Drupal.tableDrag.showWeight')); + /** * Drag and drop table rows with field manipulation. * @@ -89,15 +95,10 @@ Drupal.tableDrag = function (table, tableSettings) { // Add a link before the table for users to show or hide weight columns. $table.before($('<a href="#" class="tabledrag-toggle-weight"></a>') .attr('title', Drupal.t('Re-order rows by numerical weight instead of dragging.')) - .click(function () { - if ($.cookie('Drupal.tableDrag.showWeight') === '1') { - self.hideColumns(); - } - else { - self.showColumns(); - } - return false; - }) + .click($.proxy(function (e) { + e.preventDefault(); + this.toggleColumns(); + }, this)) .wrap('<div class="tabledrag-toggle-weight-wrapper"></div>') .parent() ); @@ -112,6 +113,15 @@ Drupal.tableDrag = function (table, tableSettings) { // as event handlers do not have direct access to the tableDrag object. $(document).bind('mousemove', function (event) { return self.dragRow(event, self); }); $(document).bind('mouseup', function (event) { return self.dropRow(event, self); }); + // React to localStorage event showing or hiding weight columns. + $(window).bind('storage', $.proxy(function (e) { + // Only react to 'Drupal.tableDrag.showWeight' value change. + if (e.originalEvent.key === 'Drupal.tableDrag.showWeight') { + // This was changed in another window, get the new value for this window. + showWeight = JSON.parse(e.originalEvent.newValue); + this.displayColumns(showWeight); + } + }, this)); }; /** @@ -120,7 +130,7 @@ Drupal.tableDrag = function (table, tableSettings) { * * Identify and mark each cell with a CSS class so we can easily toggle * show/hide it. Finally, hide columns if user does not have a - * 'Drupal.tableDrag.showWeight' cookie. + * 'Drupal.tableDrag.showWeight' localStorage value. */ Drupal.tableDrag.prototype.initColumns = function () { var $table = $(this.table); @@ -163,25 +173,42 @@ Drupal.tableDrag.prototype.initColumns = function () { }); } } + this.displayColumns(showWeight); +}; - // Now hide cells and reduce colspans unless cookie indicates previous choice. - // Set a cookie if it is not already present. - if ($.cookie('Drupal.tableDrag.showWeight') === null) { - $.cookie('Drupal.tableDrag.showWeight', 0, { - path: Drupal.settings.basePath, - // The cookie expires in one year. - expires: 365 - }); +/** + * Hide or display weight columns. Triggers an event on change. + * + * @param bool displayWeight + * 'true' will show weight columns. + */ +Drupal.tableDrag.prototype.displayColumns = function (displayWeight) { + if (displayWeight) { + this.showColumns(); + } + // Default action is to hide columns. + else { this.hideColumns(); } - // Check cookie value and show/hide weight columns accordingly. + // Trigger an event to allow other scripts to react to this display change. + // Force the extra parameter as a bool. + $('table.tabledrag-processed').trigger('columnschange', !!displayWeight); +}; + +/** + * Toggle the weight column depending on 'showWeight' value. + * Store only default override. + */ +Drupal.tableDrag.prototype.toggleColumns = function () { + showWeight = !showWeight; + this.displayColumns(showWeight); + if (showWeight) { + // Save default override. + localStorage.setItem('Drupal.tableDrag.showWeight', showWeight); + } else { - if ($.cookie('Drupal.tableDrag.showWeight') === '1') { - this.showColumns(); - } - else { - this.hideColumns(); - } + // Reset the value to its default. + localStorage.removeItem('Drupal.tableDrag.showWeight'); } }; @@ -201,14 +228,6 @@ Drupal.tableDrag.prototype.hideColumns = function () { }); // Change link text. $('.tabledrag-toggle-weight').text(Drupal.t('Show row weights')); - // Change cookie. - $.cookie('Drupal.tableDrag.showWeight', 0, { - path: Drupal.settings.basePath, - // The cookie expires in one year. - expires: 365 - }); - // Trigger an event to allow other scripts to react to this display change. - $('table.tabledrag-processed').trigger('columnschange', 'hide'); }; /**