Files
iTop/js/dashlet.js
Denis Flaven e21656c550 #1142 Dashboard editor: protects from unwanted "exit" without saving the modifications:
- mark the dashboard as modified when a dashlet was added / moved / deleted
- prevent clicking on the hyperlinks inside the preview of the dashboard

Unrelated modification of the stylesheet to make "actions" buttons look nicer (no gap in the background color) when the displayed at a zoom level different from 100% (e.g. 90% or 75 %)

SVN:trunk[3739]
2015-09-09 09:51:02 +00:00

136 lines
3.3 KiB
JavaScript

// 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 = $('<div class="close-box"/>');
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();
},
// _setOptions is called with a hash of all options that are changing
_setOptions: function()
{
// in 1.9 would use _superApply
this._superApply(arguments);
this._update();
},
// _setOption is called for each individual option that is changing
_setOption: function( key, value )
{
// in 1.9 would use _super
this._superApply(arguments);
},
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('itopDashlet');
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('itopProperty_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()
{
var iDashletId = this.options.dashlet_id;
var sDashletClass = this.options.dashlet_class;
var oContainer = this.element.parent();
$('#dashlet_properties_'+iDashletId).remove();
this.element.remove();
$('#event_bus').trigger('dashlet-removed', {'dashlet_id': iDashletId, 'dashlet_class': sDashletClass, 'container': oContainer});
$('.itop-dashboard').trigger('mark_as_modified');
}
});
});