/* --------------------------------------------------------------
tooltip_icon.js 2018-08-09 gm
Gambio GmbH
http://www.gambio.de
Copyright (c) 2018 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
/**
* ## Tooltip Icon Widget
*
* This widget will automatically transform the following markup to an icon widget.
*
* ### Options
*
* **Type | `data-tooltip_icon-type` | String | Optional**
*
* The type of the tooltip icon. Possible options are `'info'` and `'warning'`.
*
* ### Example
*
* ```html
* <div class="gx-container" style="width:50px">
* <span data-gx-widget="tooltip_icon" data-tooltip_icon-type="warning">
* This is the tooltip content of the warning tooltip icon.
* </span>
* <span data-gx-widget="tooltip_icon" data-tooltip_icon-type="info">
* This is the tooltip content of the info tooltip icon.
* </span>
* </div>
* ```
* **Note:** Currently, the wrapping `<div>` of the tooltip icon widget, has to have a CSS-Style
* of `50px`.
*
* @todo Make sure to set the width automatically. Currently, a style of 50px has to be applied manually.
* @module Admin/Widgets/tooltip_icon
*/
gx.widgets.module(
'tooltip_icon',
[
`${jse.source}/vendor/qtip2/jquery.qtip.css`,
`${jse.source}/vendor/qtip2/jquery.qtip.js`
],
/** @lends module:Widgets/tooltip_icon */
function (data) {
'use strict';
// ------------------------------------------------------------------------
// VARIABLES DEFINITION
// ------------------------------------------------------------------------
var
/**
* Module Selector
*
* @var {object}
*/
$this = $(this),
/**
* Default Options
*
* @type {object}
*/
defaults = {
type: 'info'
},
/**
* Final Options
*
* @var {object}
*/
options = $.extend(true, {}, defaults, data),
/**
* Module Object
*
* @type {object}
*/
module = {};
// ------------------------------------------------------------------------
// PRIVATE METHODS
// ------------------------------------------------------------------------
/**
* Gets the content and tries to add the
* images at "Configuration > Image-Options" to the content.
* @returns {String | HTML}
*/
var _getContent = function () {
// Is this from a configuration.php row?
var $parentConfigRow = $this.parents('[data-config-key]:first');
var isConfigRow = !!$parentConfigRow.length;
// Try to get image and append it to the tooltip description
if (isConfigRow) {
var $image = $parentConfigRow.find('img:first');
var hasImage = !!$image.length;
if (hasImage) {
$this.append('<br><br>');
$this.append($image);
}
}
return $this.html();
};
/**
* Get the image tag element selector for the widget.
*
* This method will return a different image depending on the provided type option.
*/
var _getImageElement = function () {
var $icon;
switch (options.type) {
case 'warning':
$icon = $('<span class="gx-container tooltip-icon pull-left ' + options.type + '">' +
'<i class="fa fa-exclamation-triangle"></i>' +
'</span>');
break;
case 'info':
$icon = $('<span class="gx-container tooltip-icon ' + options.type + '">' +
'<i class="fa fa-info-circle"></i>' +
'</span>');
break;
}
$icon.qtip({
content: _getContent(),
style: {
classes: 'gx-container gx-qtip ' + options.type // use the type as a class for styling
},
position: {
my: options.type === 'warning' ? 'bottom left' : 'left center',
at: options.type === 'warning' ? 'top left' : 'right center',
viewport: $(window)
},
hide: { // Delay the tooltip hide by 300ms so that users can interact with it.
fixed: true,
delay: 300
}
});
return $icon;
};
// ------------------------------------------------------------------------
// INITIALIZATION
// ------------------------------------------------------------------------
module.init = function (done) {
if ($this.text().replace(/\s+/, '') !== '') {
var $icon = _getImageElement();
$this.text('');
$icon.appendTo($this);
}
done();
};
return module;
});