| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | /* global $, APP, AJS */
/**
 * Associates tooltip element position (in the terms of
 * {@link UIUtil#setTooltip} which do not look like CSS <tt>position</tt>) with
 * AUI tooltip <tt>gravity</tt>.
 */
const TOOLTIP_POSITIONS = {
    'bottom': 'n',
    'bottom-left': 'ne',
    'bottom-right': 'nw',
    'left': 'e',
    'right': 'w',
    'top': 's',
    'top-left': 'se',
    'top-right': 'sw'
};
/**
 * Sets a global handler for all tooltips. Once invoked, create a new
 * tooltip by merely updating a DOM node with the appropriate class (e.g.
 * <tt>tooltip-n</tt>) and the attribute <tt>content</tt>.
 */
export function activateTooltips() {
    AJS.$('[data-tooltip]').tooltip({
        gravity() {
            return this.getAttribute('data-tooltip');
        },
        title() {
            return this.getAttribute('content');
        },
        html: true, // Handle multiline tooltips.
        // The following two prevent tooltips from being stuck:
        hoverable: false, // Make custom tooltips behave like native ones.
        live: true // Attach listener to document element.
    });
}
/**
 * Sets the tooltip to the given element.
 *
 * @param element the element to set the tooltip to
 * @param key the tooltip data-i18n key
 * @param position the position of the tooltip in relation to the element
 */
export function setTooltip(element, key, position) {
    if (element) {
        const selector = element.jquery ? element : $(element);
        selector.attr('data-tooltip', TOOLTIP_POSITIONS[position]);
        selector.attr('data-i18n', `[content]${key}`);
        APP.translation.translateElement(selector);
    }
}
/**
 * Sets the tooltip to the given element, but instead of using translation
 * key uses text value.
 *
 * @param element the element to set the tooltip to
 * @param text the tooltip text
 * @param position the position of the tooltip in relation to the element
 */
export function setTooltipText(element, text, position) {
    if (element) {
        removeTooltip(element);
        element.setAttribute('data-tooltip', TOOLTIP_POSITIONS[position]);
        element.setAttribute('content', text);
    }
}
/**
 * Removes the tooltip to the given element.
 *
 * @param element the element to remove the tooltip from
 */
export function removeTooltip(element) {
    element.removeAttribute('data-tooltip', '');
    element.removeAttribute('data-i18n','');
    element.removeAttribute('content','');
}
 |