// jQuery UI style "widget" for editing an iTop "dashlet" $(function() { // the widget definition, where "itop" is the namespace, // "dashlet" the widget name $.widget( "itop.dashlet", { // default options options: { dashlet_id: '', dashlet_class: '' }, // the constructor _create: function() { var me = this; this.element .addClass('itop-dashlet') .bind('click.itop-dashlet', function(event) { me._on_click(event); } ); this._update(); }, // to call when the contents are changed _update: function() { var me = this; this.closeBox = $('
'); this.closeBox .click(function() { me._remove_dashlet(); }) .prependTo(this.element); if (this.element.hasClass('dashlet-selected')) { this.closeBox.show(); } else { this.closeBox.hide(); } }, // called when created, and later when changing options _refresh: function() { }, // events bound via _bind are removed automatically // revert other modifications here destroy: function() { this.element .removeClass('itop-dashlet') .unbind('click.itop-dashlet'); this.closeBox.remove(); // call the original destroy method since we overwrote it $.Widget.prototype.destroy.call( this ); }, // _setOptions is called with a hash of all options that are changing _setOptions: function() { // in 1.9 would use _superApply $.Widget.prototype._setOptions.apply( this, arguments ); this._update(); }, // _setOption is called for each individual option that is changing _setOption: function( key, value ) { // in 1.9 would use _super $.Widget.prototype._setOption.call( this, key, value ); }, select: function() { this.element.addClass('dashlet-selected'); this.closeBox.fadeIn(500); $('#event_bus').trigger('dashlet-selected', {'dashlet_id': this.options.dashlet_id, 'dashlet_class': this.options.dashlet_class}) }, deselect: function() { this.element.removeClass('dashlet-selected'); this.closeBox.hide(); }, deselect_all: function() { $(':itop-dashlet').each(function(){ var sId = $(this).attr('id'); var oWidget = $(this).data('dashlet'); if (oWidget) { oWidget.deselect(); } }); }, _on_click: function(event) { this.deselect_all(); this.select(); }, get_params: function() { var oParams = {}; var oProperties = $('#dashlet_properties_'+this.options.dashlet_id); oProperties.find(':itop-property_field').each(function(){ var oWidget = $(this).data('property_field'); if (oWidget) { var oVal = oWidget._get_committed_value(); oParams[oVal.name] = oVal.value; } }); oParams.dashlet_id = this.options.dashlet_id; oParams.dashlet_class = this.options.dashlet_class; return oParams; }, get_drag_icon: function() { var oDragItem = $('#dashlet_'+this.options.dashlet_class).clone(); oDragItem.css({zIndex: 999}); oDragItem.appendTo('body'); return oDragItem; }, _remove_dashlet: function() { $('#dashlet_properties_'+this.options.dashlet_id).remove(); this.element.remove(); } }); });