'use strict';
var jQuery = require('jquery');
var Core = require('br/Core');
/**
* @module br/presenter/view/knockout/TooltipPlugin
*/
// TODO: TAT - this class needs testing
var jQuery = require('jquery');
var presenter_knockout = require('presenter-knockout');
/**
* @private
* @class
* @alias module:br/presenter/view/knockout/TooltipPlugin
*/
function TooltipPlugin() {
var sTooltipHtml = '<div class="ui-tooltip cpl-tooltip qtip ui-helper-reset ui-tooltip-default ui-tooltip-red ui-tooltip-validation ui-tooltip-focus ui-tooltip-pos-bc"><div class="ui-tooltip-tip" ></div><div class="ui-tooltip-content"></div></div>';
TooltipPlugin.element = jQuery(sTooltipHtml);
jQuery('body').append(TooltipPlugin.element);
TooltipPlugin._removeTooltip(); // hide tooltip
jQuery(document).click(TooltipPlugin._removeTooltip);
}
/** @private */
TooltipPlugin.prototype.init = function(eElement, fValueAccessor, fAllBindingsAccessor, oViewModel) {
eElement = jQuery(eElement);
var oField = fAllBindingsAccessor().tooltip;
eElement.bind('focusin', {
eElement: eElement,
oField: oField
}, TooltipPlugin._onFocusIn);
eElement.bind('focusout', TooltipPlugin._onFocusOut);
eElement.click(TooltipPlugin.m_fClickFunction);
};
TooltipPlugin.prototype.update = function(eElement, fValueAccessor, fAllBindingsAccessor, oViewModel) {};
TooltipPlugin._onFocusIn = function(oEvent) {
if (oEvent.data.oField && oEvent.data.oField.hasError
&& oEvent.data.oField.hasError.getValue() === true) {
var vMessage = oEvent.data.oField.failureMessage.getValue();
TooltipPlugin._showToolTip(oEvent.data.eElement, oEvent.target, vMessage);
}
};
TooltipPlugin._onFocusOut = function(oEvent) {
TooltipPlugin._removeTooltip();
};
TooltipPlugin._showToolTip = function(eElement, eContainingElement, vMessage) {
TooltipPlugin.element.show().find('.ui-tooltip-content').html(vMessage);
var containingElementPosition = jQuery(eContainingElement).offset();
var bodyMarginTop = parseInt(jQuery('body').css('margin-top'));
var bodyMarginLeft = parseInt(jQuery('body').css('margin-left'));
bodyMarginTop = isNaN(bodyMarginTop) ? 0 : bodyMarginTop;
bodyMarginLeft = isNaN(bodyMarginLeft) ? 0 : bodyMarginLeft;
var top = containingElementPosition.top - bodyMarginTop - (8 + TooltipPlugin.element.outerHeight());
var left = containingElementPosition.left - bodyMarginLeft + jQuery(eContainingElement).outerWidth() / 2 - TooltipPlugin.element.outerWidth() / 2;
TooltipPlugin.element.css({
display: 'block',
position: 'absolute',
top: top,
left: left < 10 ? 10 : left
});
TooltipPlugin.element[0].style.opacity = 1;
};
TooltipPlugin._removeTooltip = function(event) {
TooltipPlugin.element.hide();
TooltipPlugin.element[0].style.opacity = 0;
};
TooltipPlugin.m_fClickFunction = function(e) {
e.stopPropagation(); return false;
};
module.exports = TooltipPlugin;