mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Merge pull request #125 from brokenseal/master
Possible solution to memory leak #124
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
node_modules/
|
||||
gh-pages/
|
||||
demo/
|
||||
.idea
|
4
dist/jquery.gridster.css
vendored
4
dist/jquery.gridster.css
vendored
@@ -1,6 +1,6 @@
|
||||
/*! gridster.js - v0.1.0 - 2012-10-20
|
||||
/*! gridster.js - v0.1.0 - 2013-02-15
|
||||
* http://gridster.net/
|
||||
* Copyright (c) 2012 ducksboard; Licensed MIT */
|
||||
* Copyright (c) 2013 ducksboard; Licensed MIT */
|
||||
|
||||
.gridster {
|
||||
position:relative;
|
||||
|
115
dist/jquery.gridster.js
vendored
115
dist/jquery.gridster.js
vendored
@@ -1,6 +1,6 @@
|
||||
/*! gridster.js - v0.1.0 - 2012-10-20
|
||||
/*! gridster.js - v0.1.0 - 2013-02-15
|
||||
* http://gridster.net/
|
||||
* Copyright (c) 2012 ducksboard; Licensed MIT */
|
||||
* Copyright (c) 2013 ducksboard; Licensed MIT */
|
||||
|
||||
;(function($, window, document, undefined){
|
||||
/**
|
||||
@@ -368,7 +368,7 @@
|
||||
autoscroll: true,
|
||||
ignore_dragging: ['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON'],
|
||||
handle: null
|
||||
// ,drag: function(e){},
|
||||
// drag: function(e){},
|
||||
// start : function(e, ui){},
|
||||
// stop : function(e){}
|
||||
};
|
||||
@@ -425,24 +425,26 @@
|
||||
this.disabled = false;
|
||||
this.events();
|
||||
|
||||
$(window).bind('resize',
|
||||
throttle($.proxy(this.calculate_positions, this), 200));
|
||||
this.on_window_resize = throttle($.proxy(this.calculate_positions, this), 200);
|
||||
$(window).bind('resize', this.on_window_resize);
|
||||
};
|
||||
|
||||
fn.events = function() {
|
||||
this.$container.on('selectstart', $.proxy(this.on_select_start, this));
|
||||
this.proxied_on_select_start = $.proxy(this.on_select_start, this);
|
||||
this.$container.on('selectstart', this.proxied_on_select_start);
|
||||
|
||||
this.$container.on(pointer_events.start, this.options.items, $.proxy(
|
||||
this.drag_handler, this));
|
||||
this.proxied_drag_handler = $.proxy(this.drag_handler, this);
|
||||
this.$container.on(pointer_events.start, this.options.items, this.proxied_drag_handler);
|
||||
|
||||
this.$body.on(pointer_events.end, $.proxy(function(e) {
|
||||
this.proxied_pointer_events_end = $.proxy(function(e) {
|
||||
this.is_dragging = false;
|
||||
if (this.disabled) { return; }
|
||||
this.$body.off(pointer_events.move);
|
||||
if (this.drag_start) {
|
||||
this.on_dragstop(e);
|
||||
}
|
||||
}, this));
|
||||
}, this);
|
||||
this.$body.on(pointer_events.end, this.proxied_pointer_events_end);
|
||||
};
|
||||
|
||||
fn.get_actual_pos = function($el) {
|
||||
@@ -549,7 +551,7 @@
|
||||
this.mouse_init_pos = this.get_mouse_pos(e);
|
||||
this.offsetY = this.mouse_init_pos.top - this.el_init_pos.top;
|
||||
|
||||
this.$body.on(pointer_events.move, function(mme){
|
||||
this.on_pointer_events_move = function(mme){
|
||||
var mouse_actual_pos = self.get_mouse_pos(mme);
|
||||
var diff_x = Math.abs(
|
||||
mouse_actual_pos.left - self.mouse_init_pos.left);
|
||||
@@ -557,7 +559,7 @@
|
||||
mouse_actual_pos.top - self.mouse_init_pos.top);
|
||||
if (!(diff_x > self.options.distance ||
|
||||
diff_y > self.options.distance)
|
||||
) {
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -572,7 +574,9 @@
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
};
|
||||
|
||||
this.$body.on(pointer_events.move, this.on_pointer_events_move);
|
||||
|
||||
return false;
|
||||
};
|
||||
@@ -678,6 +682,13 @@
|
||||
|
||||
fn.destroy = function(){
|
||||
this.disable();
|
||||
|
||||
this.$container.off('selectstart', this.proxied_on_select_start);
|
||||
this.$container.off(pointer_events.start, this.proxied_drag_handler);
|
||||
this.$body.off(pointer_events.end, this.proxied_pointer_events_end);
|
||||
this.$body.off(pointer_events.move, this.on_pointer_events_move);
|
||||
$(window).unbind('resize', this.on_window_resize);
|
||||
|
||||
$.removeData(this.$container, 'drag');
|
||||
};
|
||||
|
||||
@@ -802,8 +813,9 @@
|
||||
this.$wrapper.addClass('ready');
|
||||
this.draggable();
|
||||
|
||||
$(window).bind(
|
||||
'resize', throttle($.proxy(this.recalculate_faux_grid, this), 200));
|
||||
this.on_window_resize = throttle($.proxy(this.recalculate_faux_grid, this), 200);
|
||||
|
||||
$(window).bind('resize', this.on_window_resize);
|
||||
};
|
||||
|
||||
|
||||
@@ -1060,7 +1072,7 @@
|
||||
* occupy.
|
||||
* @param {Number} size_y The number of rows that the group of cells
|
||||
* occupy.
|
||||
* @param {HTMLElement} $exclude Exclude widgets from being moved.
|
||||
* @param {HTMLElement} exclude Exclude widgets from being moved.
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.remove_empty_cells = function(col, row, size_x, size_y, exclude) {
|
||||
@@ -1361,8 +1373,8 @@
|
||||
* This function is executed when the player begins to be dragged.
|
||||
*
|
||||
* @method on_start_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_start_drag = function(event, ui) {
|
||||
|
||||
@@ -1412,8 +1424,8 @@
|
||||
* This function is executed when the player is being dragged.
|
||||
*
|
||||
* @method on_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_drag = function(event, ui) {
|
||||
//break if dragstop has been fired
|
||||
@@ -1455,8 +1467,8 @@
|
||||
* This function is executed when the player stops being dragged.
|
||||
*
|
||||
* @method on_stop_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_stop_drag = function(event, ui) {
|
||||
this.$helper.add(this.$player).add(this.$wrapper)
|
||||
@@ -1525,7 +1537,7 @@
|
||||
*/
|
||||
fn.on_overlapped_column_change = function(start_callback, stop_callback) {
|
||||
if (!this.colliders_data.length) {
|
||||
return;
|
||||
return this;
|
||||
}
|
||||
var cols = this.get_targeted_columns(
|
||||
this.colliders_data[0].el.data.col);
|
||||
@@ -1558,14 +1570,14 @@
|
||||
*
|
||||
* @param {Function} start_callback Function executed when a new row begins
|
||||
* to be overlapped. The row is passed as first argument.
|
||||
* @param {Function} stop_callback Function executed when a row stops being
|
||||
* @param {Function} end_callback Function executed when a row stops being
|
||||
* overlapped. The row is passed as first argument.
|
||||
* @method on_overlapped_row_change
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.on_overlapped_row_change = function(start_callback, end_callback) {
|
||||
if (!this.colliders_data.length) {
|
||||
return;
|
||||
return this;
|
||||
}
|
||||
var rows = this.get_targeted_rows(this.colliders_data[0].el.data.row);
|
||||
var last_n_rows = this.last_rows.length;
|
||||
@@ -1591,12 +1603,11 @@
|
||||
/**
|
||||
* Sets the current position of the player
|
||||
*
|
||||
* @param {Function} start_callback Function executed when a new row begins
|
||||
* to be overlapped. The row is passed as first argument.
|
||||
* @param {Function} stop_callback Function executed when a row stops being
|
||||
* overlapped. The row is passed as first argument.
|
||||
* @param {Number} col
|
||||
* @param {Number} row
|
||||
* @param {Boolean} no_player
|
||||
* @method set_player
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
* @return {object}
|
||||
*/
|
||||
fn.set_player = function(col, row, no_player) {
|
||||
var self = this;
|
||||
@@ -1647,9 +1658,9 @@
|
||||
* a upper row and which not.
|
||||
*
|
||||
* @method widgets_contraints
|
||||
* @param {HTMLElements} $widgets A jQuery wrapped collection of
|
||||
* @param {jQuery} $widgets A jQuery wrapped collection of
|
||||
* HTMLElements.
|
||||
* @return {Array} Returns a literal Object with two keys: `can_go_up` &
|
||||
* @return {object} Returns a literal Object with two keys: `can_go_up` &
|
||||
* `can_not_go_up`. Each contains a set of HTMLElements.
|
||||
*/
|
||||
fn.widgets_constraints = function($widgets) {
|
||||
@@ -1767,7 +1778,7 @@
|
||||
* each widget) in descending way.
|
||||
*
|
||||
* @method manage_movements
|
||||
* @param {HTMLElements} $widgets A jQuery collection of HTMLElements
|
||||
* @param {jQuery} $widgets A jQuery collection of HTMLElements
|
||||
* representing the widgets you want to move.
|
||||
* @param {Number} to_col The column to which we want to move the widgets.
|
||||
* @param {Number} to_row The row to which we want to move the widgets.
|
||||
@@ -2214,7 +2225,7 @@
|
||||
* Get widgets overlapping with the player.
|
||||
*
|
||||
* @method get_widgets_overlapped
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.get_widgets_overlapped = function() {
|
||||
var $w;
|
||||
@@ -2247,7 +2258,7 @@
|
||||
*
|
||||
* @method on_start_overlapping_column
|
||||
* @param {Number} col The collided column.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_start_overlapping_column = function(col) {
|
||||
this.set_player(col, false);
|
||||
@@ -2258,8 +2269,8 @@
|
||||
* A callback executed when the player begins to collide with a row.
|
||||
*
|
||||
* @method on_start_overlapping_row
|
||||
* @param {Number} col The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @param {Number} row The collided row.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_start_overlapping_row = function(row) {
|
||||
this.set_player(false, row);
|
||||
@@ -2271,7 +2282,7 @@
|
||||
*
|
||||
* @method on_stop_overlapping_column
|
||||
* @param {Number} col The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_stop_overlapping_column = function(col) {
|
||||
this.set_player(col, false);
|
||||
@@ -2289,7 +2300,7 @@
|
||||
*
|
||||
* @method on_stop_overlapping_row
|
||||
* @param {Number} row The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_stop_overlapping_row = function(row) {
|
||||
this.set_player(false, row);
|
||||
@@ -2399,9 +2410,9 @@
|
||||
* Move down the specified widget and all below it.
|
||||
*
|
||||
* @method move_widget_down
|
||||
* @param {HTMLElement} $widget The jQuery object representing the widget
|
||||
* @param {jQuery} $widget The jQuery object representing the widget
|
||||
* you want to move.
|
||||
* @param {Number} The number of cells that the widget has to move.
|
||||
* @param {Number} y_units The number of cells that the widget has to move.
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.move_widget_down = function($widget, y_units) {
|
||||
@@ -2537,7 +2548,7 @@
|
||||
*
|
||||
* @method widgets_below
|
||||
* @param {HTMLElement} $el The jQuery wrapped HTMLElement.
|
||||
* @return {HTMLElements} A jQuery collection of HTMLElements.
|
||||
* @return {jQuery} A jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.widgets_below = function($el) {
|
||||
var el_grid_data = $.isPlainObject($el) ? $el : $el.coords().grid;
|
||||
@@ -3217,6 +3228,26 @@
|
||||
return this.generate_faux_grid(this.rows, this.cols);
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroy this gridster by removing any sign of its presence, making it easy to avoid memory leaks
|
||||
*
|
||||
* @method destroy
|
||||
* @return {undefined}
|
||||
*/
|
||||
fn.destroy = function(){
|
||||
// remove bound callback on window resize
|
||||
$(window).unbind('resize', this.on_window_resize);
|
||||
|
||||
if(this.drag_api){
|
||||
this.drag_api.destroy();
|
||||
}
|
||||
|
||||
// lastly, remove gridster element
|
||||
// this will additionally cause any data associated to this element to be removed, including this
|
||||
// very gridster instance
|
||||
this.$el.remove();
|
||||
};
|
||||
|
||||
|
||||
//jQuery adapter
|
||||
$.fn.gridster = function(options) {
|
||||
|
6
dist/jquery.gridster.min.js
vendored
6
dist/jquery.gridster.min.js
vendored
File diff suppressed because one or more lines are too long
115
dist/jquery.gridster.with-extras.js
vendored
115
dist/jquery.gridster.with-extras.js
vendored
@@ -1,6 +1,6 @@
|
||||
/*! gridster.js - v0.1.0 - 2012-10-20
|
||||
/*! gridster.js - v0.1.0 - 2013-02-15
|
||||
* http://gridster.net/
|
||||
* Copyright (c) 2012 ducksboard; Licensed MIT */
|
||||
* Copyright (c) 2013 ducksboard; Licensed MIT */
|
||||
|
||||
;(function($, window, document, undefined){
|
||||
/**
|
||||
@@ -368,7 +368,7 @@
|
||||
autoscroll: true,
|
||||
ignore_dragging: ['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON'],
|
||||
handle: null
|
||||
// ,drag: function(e){},
|
||||
// drag: function(e){},
|
||||
// start : function(e, ui){},
|
||||
// stop : function(e){}
|
||||
};
|
||||
@@ -425,24 +425,26 @@
|
||||
this.disabled = false;
|
||||
this.events();
|
||||
|
||||
$(window).bind('resize',
|
||||
throttle($.proxy(this.calculate_positions, this), 200));
|
||||
this.on_window_resize = throttle($.proxy(this.calculate_positions, this), 200);
|
||||
$(window).bind('resize', this.on_window_resize);
|
||||
};
|
||||
|
||||
fn.events = function() {
|
||||
this.$container.on('selectstart', $.proxy(this.on_select_start, this));
|
||||
this.proxied_on_select_start = $.proxy(this.on_select_start, this);
|
||||
this.$container.on('selectstart', this.proxied_on_select_start);
|
||||
|
||||
this.$container.on(pointer_events.start, this.options.items, $.proxy(
|
||||
this.drag_handler, this));
|
||||
this.proxied_drag_handler = $.proxy(this.drag_handler, this);
|
||||
this.$container.on(pointer_events.start, this.options.items, this.proxied_drag_handler);
|
||||
|
||||
this.$body.on(pointer_events.end, $.proxy(function(e) {
|
||||
this.proxied_pointer_events_end = $.proxy(function(e) {
|
||||
this.is_dragging = false;
|
||||
if (this.disabled) { return; }
|
||||
this.$body.off(pointer_events.move);
|
||||
if (this.drag_start) {
|
||||
this.on_dragstop(e);
|
||||
}
|
||||
}, this));
|
||||
}, this);
|
||||
this.$body.on(pointer_events.end, this.proxied_pointer_events_end);
|
||||
};
|
||||
|
||||
fn.get_actual_pos = function($el) {
|
||||
@@ -549,7 +551,7 @@
|
||||
this.mouse_init_pos = this.get_mouse_pos(e);
|
||||
this.offsetY = this.mouse_init_pos.top - this.el_init_pos.top;
|
||||
|
||||
this.$body.on(pointer_events.move, function(mme){
|
||||
this.on_pointer_events_move = function(mme){
|
||||
var mouse_actual_pos = self.get_mouse_pos(mme);
|
||||
var diff_x = Math.abs(
|
||||
mouse_actual_pos.left - self.mouse_init_pos.left);
|
||||
@@ -557,7 +559,7 @@
|
||||
mouse_actual_pos.top - self.mouse_init_pos.top);
|
||||
if (!(diff_x > self.options.distance ||
|
||||
diff_y > self.options.distance)
|
||||
) {
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -572,7 +574,9 @@
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
};
|
||||
|
||||
this.$body.on(pointer_events.move, this.on_pointer_events_move);
|
||||
|
||||
return false;
|
||||
};
|
||||
@@ -678,6 +682,13 @@
|
||||
|
||||
fn.destroy = function(){
|
||||
this.disable();
|
||||
|
||||
this.$container.off('selectstart', this.proxied_on_select_start);
|
||||
this.$container.off(pointer_events.start, this.proxied_drag_handler);
|
||||
this.$body.off(pointer_events.end, this.proxied_pointer_events_end);
|
||||
this.$body.off(pointer_events.move, this.on_pointer_events_move);
|
||||
$(window).unbind('resize', this.on_window_resize);
|
||||
|
||||
$.removeData(this.$container, 'drag');
|
||||
};
|
||||
|
||||
@@ -802,8 +813,9 @@
|
||||
this.$wrapper.addClass('ready');
|
||||
this.draggable();
|
||||
|
||||
$(window).bind(
|
||||
'resize', throttle($.proxy(this.recalculate_faux_grid, this), 200));
|
||||
this.on_window_resize = throttle($.proxy(this.recalculate_faux_grid, this), 200);
|
||||
|
||||
$(window).bind('resize', this.on_window_resize);
|
||||
};
|
||||
|
||||
|
||||
@@ -1060,7 +1072,7 @@
|
||||
* occupy.
|
||||
* @param {Number} size_y The number of rows that the group of cells
|
||||
* occupy.
|
||||
* @param {HTMLElement} $exclude Exclude widgets from being moved.
|
||||
* @param {HTMLElement} exclude Exclude widgets from being moved.
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.remove_empty_cells = function(col, row, size_x, size_y, exclude) {
|
||||
@@ -1361,8 +1373,8 @@
|
||||
* This function is executed when the player begins to be dragged.
|
||||
*
|
||||
* @method on_start_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_start_drag = function(event, ui) {
|
||||
|
||||
@@ -1412,8 +1424,8 @@
|
||||
* This function is executed when the player is being dragged.
|
||||
*
|
||||
* @method on_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_drag = function(event, ui) {
|
||||
//break if dragstop has been fired
|
||||
@@ -1455,8 +1467,8 @@
|
||||
* This function is executed when the player stops being dragged.
|
||||
*
|
||||
* @method on_stop_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_stop_drag = function(event, ui) {
|
||||
this.$helper.add(this.$player).add(this.$wrapper)
|
||||
@@ -1525,7 +1537,7 @@
|
||||
*/
|
||||
fn.on_overlapped_column_change = function(start_callback, stop_callback) {
|
||||
if (!this.colliders_data.length) {
|
||||
return;
|
||||
return this;
|
||||
}
|
||||
var cols = this.get_targeted_columns(
|
||||
this.colliders_data[0].el.data.col);
|
||||
@@ -1558,14 +1570,14 @@
|
||||
*
|
||||
* @param {Function} start_callback Function executed when a new row begins
|
||||
* to be overlapped. The row is passed as first argument.
|
||||
* @param {Function} stop_callback Function executed when a row stops being
|
||||
* @param {Function} end_callback Function executed when a row stops being
|
||||
* overlapped. The row is passed as first argument.
|
||||
* @method on_overlapped_row_change
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.on_overlapped_row_change = function(start_callback, end_callback) {
|
||||
if (!this.colliders_data.length) {
|
||||
return;
|
||||
return this;
|
||||
}
|
||||
var rows = this.get_targeted_rows(this.colliders_data[0].el.data.row);
|
||||
var last_n_rows = this.last_rows.length;
|
||||
@@ -1591,12 +1603,11 @@
|
||||
/**
|
||||
* Sets the current position of the player
|
||||
*
|
||||
* @param {Function} start_callback Function executed when a new row begins
|
||||
* to be overlapped. The row is passed as first argument.
|
||||
* @param {Function} stop_callback Function executed when a row stops being
|
||||
* overlapped. The row is passed as first argument.
|
||||
* @param {Number} col
|
||||
* @param {Number} row
|
||||
* @param {Boolean} no_player
|
||||
* @method set_player
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
* @return {object}
|
||||
*/
|
||||
fn.set_player = function(col, row, no_player) {
|
||||
var self = this;
|
||||
@@ -1647,9 +1658,9 @@
|
||||
* a upper row and which not.
|
||||
*
|
||||
* @method widgets_contraints
|
||||
* @param {HTMLElements} $widgets A jQuery wrapped collection of
|
||||
* @param {jQuery} $widgets A jQuery wrapped collection of
|
||||
* HTMLElements.
|
||||
* @return {Array} Returns a literal Object with two keys: `can_go_up` &
|
||||
* @return {object} Returns a literal Object with two keys: `can_go_up` &
|
||||
* `can_not_go_up`. Each contains a set of HTMLElements.
|
||||
*/
|
||||
fn.widgets_constraints = function($widgets) {
|
||||
@@ -1767,7 +1778,7 @@
|
||||
* each widget) in descending way.
|
||||
*
|
||||
* @method manage_movements
|
||||
* @param {HTMLElements} $widgets A jQuery collection of HTMLElements
|
||||
* @param {jQuery} $widgets A jQuery collection of HTMLElements
|
||||
* representing the widgets you want to move.
|
||||
* @param {Number} to_col The column to which we want to move the widgets.
|
||||
* @param {Number} to_row The row to which we want to move the widgets.
|
||||
@@ -2214,7 +2225,7 @@
|
||||
* Get widgets overlapping with the player.
|
||||
*
|
||||
* @method get_widgets_overlapped
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.get_widgets_overlapped = function() {
|
||||
var $w;
|
||||
@@ -2247,7 +2258,7 @@
|
||||
*
|
||||
* @method on_start_overlapping_column
|
||||
* @param {Number} col The collided column.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_start_overlapping_column = function(col) {
|
||||
this.set_player(col, false);
|
||||
@@ -2258,8 +2269,8 @@
|
||||
* A callback executed when the player begins to collide with a row.
|
||||
*
|
||||
* @method on_start_overlapping_row
|
||||
* @param {Number} col The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @param {Number} row The collided row.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_start_overlapping_row = function(row) {
|
||||
this.set_player(false, row);
|
||||
@@ -2271,7 +2282,7 @@
|
||||
*
|
||||
* @method on_stop_overlapping_column
|
||||
* @param {Number} col The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_stop_overlapping_column = function(col) {
|
||||
this.set_player(col, false);
|
||||
@@ -2289,7 +2300,7 @@
|
||||
*
|
||||
* @method on_stop_overlapping_row
|
||||
* @param {Number} row The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_stop_overlapping_row = function(row) {
|
||||
this.set_player(false, row);
|
||||
@@ -2399,9 +2410,9 @@
|
||||
* Move down the specified widget and all below it.
|
||||
*
|
||||
* @method move_widget_down
|
||||
* @param {HTMLElement} $widget The jQuery object representing the widget
|
||||
* @param {jQuery} $widget The jQuery object representing the widget
|
||||
* you want to move.
|
||||
* @param {Number} The number of cells that the widget has to move.
|
||||
* @param {Number} y_units The number of cells that the widget has to move.
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.move_widget_down = function($widget, y_units) {
|
||||
@@ -2537,7 +2548,7 @@
|
||||
*
|
||||
* @method widgets_below
|
||||
* @param {HTMLElement} $el The jQuery wrapped HTMLElement.
|
||||
* @return {HTMLElements} A jQuery collection of HTMLElements.
|
||||
* @return {jQuery} A jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.widgets_below = function($el) {
|
||||
var el_grid_data = $.isPlainObject($el) ? $el : $el.coords().grid;
|
||||
@@ -3217,6 +3228,26 @@
|
||||
return this.generate_faux_grid(this.rows, this.cols);
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroy this gridster by removing any sign of its presence, making it easy to avoid memory leaks
|
||||
*
|
||||
* @method destroy
|
||||
* @return {undefined}
|
||||
*/
|
||||
fn.destroy = function(){
|
||||
// remove bound callback on window resize
|
||||
$(window).unbind('resize', this.on_window_resize);
|
||||
|
||||
if(this.drag_api){
|
||||
this.drag_api.destroy();
|
||||
}
|
||||
|
||||
// lastly, remove gridster element
|
||||
// this will additionally cause any data associated to this element to be removed, including this
|
||||
// very gridster instance
|
||||
this.$el.remove();
|
||||
};
|
||||
|
||||
|
||||
//jQuery adapter
|
||||
$.fn.gridster = function(options) {
|
||||
|
6
dist/jquery.gridster.with-extras.min.js
vendored
6
dist/jquery.gridster.with-extras.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -16,7 +16,7 @@
|
||||
autoscroll: true,
|
||||
ignore_dragging: ['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON'],
|
||||
handle: null
|
||||
// ,drag: function(e){},
|
||||
// drag: function(e){},
|
||||
// start : function(e, ui){},
|
||||
// stop : function(e){}
|
||||
};
|
||||
@@ -73,24 +73,26 @@
|
||||
this.disabled = false;
|
||||
this.events();
|
||||
|
||||
$(window).bind('resize',
|
||||
throttle($.proxy(this.calculate_positions, this), 200));
|
||||
this.on_window_resize = throttle($.proxy(this.calculate_positions, this), 200);
|
||||
$(window).bind('resize', this.on_window_resize);
|
||||
};
|
||||
|
||||
fn.events = function() {
|
||||
this.$container.on('selectstart', $.proxy(this.on_select_start, this));
|
||||
this.proxied_on_select_start = $.proxy(this.on_select_start, this);
|
||||
this.$container.on('selectstart', this.proxied_on_select_start);
|
||||
|
||||
this.$container.on(pointer_events.start, this.options.items, $.proxy(
|
||||
this.drag_handler, this));
|
||||
this.proxied_drag_handler = $.proxy(this.drag_handler, this);
|
||||
this.$container.on(pointer_events.start, this.options.items, this.proxied_drag_handler);
|
||||
|
||||
this.$body.on(pointer_events.end, $.proxy(function(e) {
|
||||
this.proxied_pointer_events_end = $.proxy(function(e) {
|
||||
this.is_dragging = false;
|
||||
if (this.disabled) { return; }
|
||||
this.$body.off(pointer_events.move);
|
||||
if (this.drag_start) {
|
||||
this.on_dragstop(e);
|
||||
}
|
||||
}, this));
|
||||
}, this);
|
||||
this.$body.on(pointer_events.end, this.proxied_pointer_events_end);
|
||||
};
|
||||
|
||||
fn.get_actual_pos = function($el) {
|
||||
@@ -197,7 +199,7 @@
|
||||
this.mouse_init_pos = this.get_mouse_pos(e);
|
||||
this.offsetY = this.mouse_init_pos.top - this.el_init_pos.top;
|
||||
|
||||
this.$body.on(pointer_events.move, function(mme){
|
||||
this.on_pointer_events_move = function(mme){
|
||||
var mouse_actual_pos = self.get_mouse_pos(mme);
|
||||
var diff_x = Math.abs(
|
||||
mouse_actual_pos.left - self.mouse_init_pos.left);
|
||||
@@ -205,7 +207,7 @@
|
||||
mouse_actual_pos.top - self.mouse_init_pos.top);
|
||||
if (!(diff_x > self.options.distance ||
|
||||
diff_y > self.options.distance)
|
||||
) {
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -220,7 +222,9 @@
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
};
|
||||
|
||||
this.$body.on(pointer_events.move, this.on_pointer_events_move);
|
||||
|
||||
return false;
|
||||
};
|
||||
@@ -326,6 +330,13 @@
|
||||
|
||||
fn.destroy = function(){
|
||||
this.disable();
|
||||
|
||||
this.$container.off('selectstart', this.proxied_on_select_start);
|
||||
this.$container.off(pointer_events.start, this.proxied_drag_handler);
|
||||
this.$body.off(pointer_events.end, this.proxied_pointer_events_end);
|
||||
this.$body.off(pointer_events.move, this.on_pointer_events_move);
|
||||
$(window).unbind('resize', this.on_window_resize);
|
||||
|
||||
$.removeData(this.$container, 'drag');
|
||||
};
|
||||
|
||||
|
@@ -106,8 +106,9 @@
|
||||
this.$wrapper.addClass('ready');
|
||||
this.draggable();
|
||||
|
||||
$(window).bind(
|
||||
'resize', throttle($.proxy(this.recalculate_faux_grid, this), 200));
|
||||
this.on_window_resize = throttle($.proxy(this.recalculate_faux_grid, this), 200);
|
||||
|
||||
$(window).bind('resize', this.on_window_resize);
|
||||
};
|
||||
|
||||
|
||||
@@ -364,7 +365,7 @@
|
||||
* occupy.
|
||||
* @param {Number} size_y The number of rows that the group of cells
|
||||
* occupy.
|
||||
* @param {HTMLElement} $exclude Exclude widgets from being moved.
|
||||
* @param {HTMLElement} exclude Exclude widgets from being moved.
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.remove_empty_cells = function(col, row, size_x, size_y, exclude) {
|
||||
@@ -665,8 +666,8 @@
|
||||
* This function is executed when the player begins to be dragged.
|
||||
*
|
||||
* @method on_start_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_start_drag = function(event, ui) {
|
||||
|
||||
@@ -716,8 +717,8 @@
|
||||
* This function is executed when the player is being dragged.
|
||||
*
|
||||
* @method on_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_drag = function(event, ui) {
|
||||
//break if dragstop has been fired
|
||||
@@ -759,8 +760,8 @@
|
||||
* This function is executed when the player stops being dragged.
|
||||
*
|
||||
* @method on_stop_drag
|
||||
* @param {Event} The original browser event
|
||||
* @param {Object} A prepared ui object.
|
||||
* @param {Event} event The original browser event
|
||||
* @param {Object} ui A prepared ui object.
|
||||
*/
|
||||
fn.on_stop_drag = function(event, ui) {
|
||||
this.$helper.add(this.$player).add(this.$wrapper)
|
||||
@@ -829,7 +830,7 @@
|
||||
*/
|
||||
fn.on_overlapped_column_change = function(start_callback, stop_callback) {
|
||||
if (!this.colliders_data.length) {
|
||||
return;
|
||||
return this;
|
||||
}
|
||||
var cols = this.get_targeted_columns(
|
||||
this.colliders_data[0].el.data.col);
|
||||
@@ -862,14 +863,14 @@
|
||||
*
|
||||
* @param {Function} start_callback Function executed when a new row begins
|
||||
* to be overlapped. The row is passed as first argument.
|
||||
* @param {Function} stop_callback Function executed when a row stops being
|
||||
* @param {Function} end_callback Function executed when a row stops being
|
||||
* overlapped. The row is passed as first argument.
|
||||
* @method on_overlapped_row_change
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.on_overlapped_row_change = function(start_callback, end_callback) {
|
||||
if (!this.colliders_data.length) {
|
||||
return;
|
||||
return this;
|
||||
}
|
||||
var rows = this.get_targeted_rows(this.colliders_data[0].el.data.row);
|
||||
var last_n_rows = this.last_rows.length;
|
||||
@@ -895,12 +896,11 @@
|
||||
/**
|
||||
* Sets the current position of the player
|
||||
*
|
||||
* @param {Function} start_callback Function executed when a new row begins
|
||||
* to be overlapped. The row is passed as first argument.
|
||||
* @param {Function} stop_callback Function executed when a row stops being
|
||||
* overlapped. The row is passed as first argument.
|
||||
* @param {Number} col
|
||||
* @param {Number} row
|
||||
* @param {Boolean} no_player
|
||||
* @method set_player
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
* @return {object}
|
||||
*/
|
||||
fn.set_player = function(col, row, no_player) {
|
||||
var self = this;
|
||||
@@ -951,9 +951,9 @@
|
||||
* a upper row and which not.
|
||||
*
|
||||
* @method widgets_contraints
|
||||
* @param {HTMLElements} $widgets A jQuery wrapped collection of
|
||||
* @param {jQuery} $widgets A jQuery wrapped collection of
|
||||
* HTMLElements.
|
||||
* @return {Array} Returns a literal Object with two keys: `can_go_up` &
|
||||
* @return {object} Returns a literal Object with two keys: `can_go_up` &
|
||||
* `can_not_go_up`. Each contains a set of HTMLElements.
|
||||
*/
|
||||
fn.widgets_constraints = function($widgets) {
|
||||
@@ -1071,7 +1071,7 @@
|
||||
* each widget) in descending way.
|
||||
*
|
||||
* @method manage_movements
|
||||
* @param {HTMLElements} $widgets A jQuery collection of HTMLElements
|
||||
* @param {jQuery} $widgets A jQuery collection of HTMLElements
|
||||
* representing the widgets you want to move.
|
||||
* @param {Number} to_col The column to which we want to move the widgets.
|
||||
* @param {Number} to_row The row to which we want to move the widgets.
|
||||
@@ -1518,7 +1518,7 @@
|
||||
* Get widgets overlapping with the player.
|
||||
*
|
||||
* @method get_widgets_overlapped
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.get_widgets_overlapped = function() {
|
||||
var $w;
|
||||
@@ -1551,7 +1551,7 @@
|
||||
*
|
||||
* @method on_start_overlapping_column
|
||||
* @param {Number} col The collided column.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_start_overlapping_column = function(col) {
|
||||
this.set_player(col, false);
|
||||
@@ -1562,8 +1562,8 @@
|
||||
* A callback executed when the player begins to collide with a row.
|
||||
*
|
||||
* @method on_start_overlapping_row
|
||||
* @param {Number} col The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @param {Number} row The collided row.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_start_overlapping_row = function(row) {
|
||||
this.set_player(false, row);
|
||||
@@ -1575,7 +1575,7 @@
|
||||
*
|
||||
* @method on_stop_overlapping_column
|
||||
* @param {Number} col The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_stop_overlapping_column = function(col) {
|
||||
this.set_player(col, false);
|
||||
@@ -1593,7 +1593,7 @@
|
||||
*
|
||||
* @method on_stop_overlapping_row
|
||||
* @param {Number} row The collided row.
|
||||
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
||||
* @return {jQuery} Returns a jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.on_stop_overlapping_row = function(row) {
|
||||
this.set_player(false, row);
|
||||
@@ -1703,9 +1703,9 @@
|
||||
* Move down the specified widget and all below it.
|
||||
*
|
||||
* @method move_widget_down
|
||||
* @param {HTMLElement} $widget The jQuery object representing the widget
|
||||
* @param {jQuery} $widget The jQuery object representing the widget
|
||||
* you want to move.
|
||||
* @param {Number} The number of cells that the widget has to move.
|
||||
* @param {Number} y_units The number of cells that the widget has to move.
|
||||
* @return {Class} Returns the instance of the Gridster Class.
|
||||
*/
|
||||
fn.move_widget_down = function($widget, y_units) {
|
||||
@@ -1841,7 +1841,7 @@
|
||||
*
|
||||
* @method widgets_below
|
||||
* @param {HTMLElement} $el The jQuery wrapped HTMLElement.
|
||||
* @return {HTMLElements} A jQuery collection of HTMLElements.
|
||||
* @return {jQuery} A jQuery collection of HTMLElements.
|
||||
*/
|
||||
fn.widgets_below = function($el) {
|
||||
var el_grid_data = $.isPlainObject($el) ? $el : $el.coords().grid;
|
||||
@@ -2521,6 +2521,26 @@
|
||||
return this.generate_faux_grid(this.rows, this.cols);
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroy this gridster by removing any sign of its presence, making it easy to avoid memory leaks
|
||||
*
|
||||
* @method destroy
|
||||
* @return {undefined}
|
||||
*/
|
||||
fn.destroy = function(){
|
||||
// remove bound callback on window resize
|
||||
$(window).unbind('resize', this.on_window_resize);
|
||||
|
||||
if(this.drag_api){
|
||||
this.drag_api.destroy();
|
||||
}
|
||||
|
||||
// lastly, remove gridster element
|
||||
// this will additionally cause any data associated to this element to be removed, including this
|
||||
// very gridster instance
|
||||
this.$el.remove();
|
||||
};
|
||||
|
||||
|
||||
//jQuery adapter
|
||||
$.fn.gridster = function(options) {
|
||||
|
Reference in New Issue
Block a user