1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-06-01 03:54:56 +02:00
php-phpbb/phpBB/adm/style/tooltip.js
Marc Alexander 795776db4b [ticket/6466] Removed link tooltip
It wasn't being used anymore and didn't work anymore.

PHPBB3-6466
2015-05-29 17:07:47 +02:00

192 lines
4.4 KiB
JavaScript

/*
javascript for Bubble Tooltips by Alessandro Fulciniti
- http://pro.html.it - http://web-graphics.com
obtained from: http://web-graphics.com/mtarchive/001717.php
phpBB Development Team:
- modified to adhere to our coding guidelines
- integration into our design
- added ability to perform tooltips on select elements
- further adjustements
*/
(function($) { // Avoid conflicts with other libraries
'use strict';
var head_text, tooltips;
tooltips = [];
/**
* Enable tooltip replacements for selects
* @param {string} id ID tag of select
* @param {string} headline Text that should appear on top of tooltip
* @param {string} sub_id Sub ID that should only be using tooltips (optional)
*/
function enable_tooltips_select(id, headline, sub_id) {
var $links, hold;
head_text = headline;
if (!document.getElementById || !document.getElementsByTagName) {
return;
}
hold = document.createElement('span');
hold.id = '_tooltip_container';
hold.setAttribute('id', '_tooltip_container');
hold.style.position = 'absolute';
$('body').append(hold);
if (id === null) {
$links = $('.roles-options li');
} else {
$links = $('.roles-options li', '#' + id);
}
$links.each(function () {
var $this = $(this);
if (sub_id) {
if ($this.parent().attr('id').substr(0, sub_id.length) === sub_id) {
prepare($this);
}
} else {
prepare($this);
}
});
}
/**
* Prepare elements to replace
*
* @param {object} $element Element to prepare for tooltips
*/
function prepare($element) {
var tooltip, text, desc, title;
text = $element.attr('data-title');;
if (text === null || text.length === 0) {
return;
}
tooltip = create_element('span', 'tooltip');
title = create_element('span', 'top');
title.appendChild(document.createTextNode(head_text));
tooltip.appendChild(title);
desc = create_element('span', 'bottom');
desc.innerHTML = text;
tooltip.appendChild(desc);
set_opacity(tooltip);
tooltips[$element.attr('data-id')] = tooltip;
$element.on('mouseover', show_tooltip);
$element.on('mouseout', hide_tooltip);
}
/**
* Show tooltip
*
* @param {object} $element Element passed by .on()
*/
function show_tooltip($element) {
var $this = $($element.target);
$('#_tooltip_container').append(tooltips[$this.attr('data-id')]);
locate($this);
}
/**
* Hide tooltip
*
* @param {object} $element Element passed by .on()
*/
function hide_tooltip($element) {
var d = document.getElementById('_tooltip_container');
if (d.childNodes.length > 0) {
d.removeChild(d.firstChild);
}
}
/**
* Set opacity on tooltip element
*/
function set_opacity(element) {
element.style.filter = 'alpha(opacity:95)';
element.style.KHTMLOpacity = '0.95';
element.style.MozOpacity = '0.95';
element.style.opacity = '0.95';
}
/**
* Create new element
*/
function create_element(tag, c) {
var x = document.createElement(tag);
x.className = c;
x.style.display = 'block';
return x;
}
/**
* Correct positioning of tooltip container
*
* @param {object} $element Tooltip element that should be positioned
*/
function locate($element) {
var offset;
$element = $element.parent();
offset = $element.offset();
$('#_tooltip_container').css({
top: offset.top + 30,
left: offset.left - 205
});
}
$(function() {
var $options;
// Enable tooltips
enable_tooltips_select('set-permissions', $('#set-permissions').attr('data-role-description'), 'role');
$options = $('.roles-options li');
// Prepare highlighting of select options and settings update
$options.each(function () {
var $this = $(this);
var $roles_options = $this.closest('.roles-options');
// Correctly show selected option
if (typeof $this.attr('data-selected') !== 'undefined') {
$this.closest('.roles-options').children('span').text($this.text());
$('')
}
$this.on('mouseover', function (e) {
var $this = $(this);
$options.removeClass('roles-highlight');
$this.addClass('roles-highlight');
}).on('click', function (e) {
var $this = $(this);
// Update settings
set_role_settings($this.attr('data-id'), $this.attr('data-target-id'));
init_colours($this.attr('data-target-id').replace('advanced', ''));
// Set selected setting
$roles_options.children('span').text($this.text());
$roles_options.children('input[type=hidden]').val($this.attr('data-id'));
// Trigger hiding of selection options
$('body').trigger('click');
});
});
});
})(jQuery); // Avoid conflicts with other libraries