From 187e13a244b75f1bc0358c85ab08303ef4493d4f Mon Sep 17 00:00:00 2001 From: cvillemure Date: Wed, 22 Jul 2015 15:21:51 -0400 Subject: [PATCH] Trigger change event for add/remove Trigger change event for add_widget / remove_widget methods and refactor the trigger into a method for uniformity --- README.md | 2 +- src/gridstack.js | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7135ae4d4..7748b5ba2 100644 --- a/README.md +++ b/README.md @@ -158,7 +158,7 @@ to completely lock the widget. ### onchange(items) -Occurs when widgets change their position/size +Occurs when adding/removing widgets or existing widgets change their position/size ```javascript var serialize_widget_map = function (items) { diff --git a/src/gridstack.js b/src/gridstack.js index 68326eddf..6cce89579 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -509,6 +509,21 @@ $(window).resize(on_resize_handler); on_resize_handler(); }; + + GridStack.prototype._trigger_change_event = function(forceTrigger) { + var elements = this.grid.get_dirty_nodes(); + var hasChanges = false; + + var eventParams = []; + if (elements && elements.length) { + eventParams.push(elements); + hasChanges = true; + } + + if (hasChanges || forceTrigger === true) { + this.container.trigger('change', eventParams); + } + }; GridStack.prototype._init_styles = function() { if (this._styles_id) { @@ -638,9 +653,7 @@ .attr('data-gs-height', node.height) .removeAttr('style'); self._update_container_height(); - var elements = self.grid.get_dirty_nodes(); - if (elements && elements.length) - self.container.trigger('change', [elements]); + self._trigger_change_event(); self.grid.end_update(); }; @@ -704,6 +717,7 @@ this.container.append(el); this._prepare_element(el); this._update_container_height(); + this._trigger_change_event(true); return el; }; @@ -722,6 +736,7 @@ this._update_container_height(); if (detach_node) el.remove(); + this._trigger_change_event(true); }; GridStack.prototype.remove_all = function(detach_node) { @@ -846,9 +861,7 @@ callback.call(this, el, node); self._update_container_height(); - var elements = self.grid.get_dirty_nodes(); - if (elements && elements.length) - self.container.trigger('change', [elements]); + self._trigger_change_event(); self.grid.end_update(); };