Reverting some changes in commit 6302b98

Check to avoid generation of duplicated stylesheet-tags shouldn't have
been removed from Gridster. It's useful when calling multiple times 
`generate_stylesheet` method once Gridster is initializated. We use it
at ducksboard to generate a TVmode version of the grid with bigger widgets.

Refactored the way stylesheet tags are removed. When created I push them 
to a jQuery collection which is removed when `destroy` method is executed.
This commit is contained in:
vieron
2013-05-01 23:43:36 +02:00
parent 3d755fd793
commit 4c02e4c1ed

View File

@ -31,12 +31,9 @@
collision: {},
draggable: {
distance: 4
},
style_tag_id_prefix: 'gridster-style-tags-'
}
};
var instanceCounter = 0;
/**
* @class Gridster
* @uses Draggable
@ -86,21 +83,25 @@
* @constructor
*/
function Gridster(el, options) {
this.options = $.extend(true, defaults, options);
this.$el = $(el);
this.$wrapper = this.$el.parent();
this.$widgets = this.$el.children(this.options.widget_selector).addClass('gs_w');
this.widgets = [];
this.$changed = $([]);
this.wrapper_width = this.$wrapper.width();
this.min_widget_width = (this.options.widget_margins[0] * 2) +
this.options.widget_base_dimensions[0];
this.min_widget_height = (this.options.widget_margins[1] * 2) +
this.options.widget_base_dimensions[1];
this.instanceId = instanceCounter++;
this.init();
this.options = $.extend(true, defaults, options);
this.$el = $(el);
this.$wrapper = this.$el.parent();
this.$widgets = this.$el.children(this.options.widget_selector).addClass('gs_w');
this.widgets = [];
this.$changed = $([]);
this.wrapper_width = this.$wrapper.width();
this.min_widget_width = (this.options.widget_margins[0] * 2) +
this.options.widget_base_dimensions[0];
this.min_widget_height = (this.options.widget_margins[1] * 2) +
this.options.widget_base_dimensions[1];
this.$style_tags = $([]);
this.init();
}
Gridster.generated_stylesheets = [];
var fn = Gridster.prototype;
fn.init = function() {
@ -2280,6 +2281,14 @@
opts.min_widget_height = (opts.widget_margins[1] * 2) +
opts.widget_base_dimensions[1];
// don't duplicate stylesheets for the same configuration
var serialized_opts = $.param(opts);
if ($.inArray(serialized_opts, Gridster.generated_stylesheets) >= 0) {
return false;
}
Gridster.generated_stylesheets.push(serialized_opts);
/* generate CSS styles for cols */
for (i = opts.cols; i >= 0; i--) {
styles += (opts.namespace + ' [data-col="'+ (i + 1) + '"] { left:' +
@ -2325,13 +2334,15 @@
d.getElementsByTagName('head')[0].appendChild(tag);
tag.setAttribute('type', 'text/css');
tag.setAttribute('id', this.options.style_tag_id_prefix + this.instanceId);
if (tag.styleSheet) {
tag.styleSheet.cssText = css;
}else{
tag.appendChild(document.createTextNode(css));
}
this.$style_tags = this.$style_tags.add(tag);
return this;
};
@ -2342,8 +2353,8 @@
* @method remove_style_tag
* @return {Object} Returns the instance of the Gridster class.
*/
fn.remove_style_tag = function() {
$('#' + this.options.style_tag_id_prefix + this.instanceId).remove();
fn.remove_style_tags = function() {
this.$style_tags.remove();
};
@ -2558,12 +2569,14 @@
this.drag_api.destroy();
}
this.remove_style_tag();
this.remove_style_tags();
// 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();
return this;
};