diff options
Diffstat (limited to 'phpBB/adm/style/tooltip.js')
| -rw-r--r-- | phpBB/adm/style/tooltip.js | 304 | 
1 files changed, 147 insertions, 157 deletions
| diff --git a/phpBB/adm/style/tooltip.js b/phpBB/adm/style/tooltip.js index 3a89008706..68964034f0 100644 --- a/phpBB/adm/style/tooltip.js +++ b/phpBB/adm/style/tooltip.js @@ -10,206 +10,196 @@ phpBB Development Team:  	- further adjustements  */ -var head_text, tooltip_mode; +(function($) { // Avoid conflicts with other libraries -/** -* Enable tooltip replacements for links -*/ -function enable_tooltips_link(id, headline, sub_id) { -	var links, i, 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'; +'use strict'; -	document.getElementsByTagName('body')[0].appendChild(hold); - -	if (id === null) { -		links = document.getElementsByTagName('a'); -	} else { -		links = document.getElementById(id).getElementsByTagName('a'); -	} - -	for (i = 0; i < links.length; i++) { -		if (sub_id) { -			if (links[i].id.substr(0, sub_id.length) === sub_id) { -				prepare(links[i]); -			} -		} else { -			prepare(links[i]); -		} -	} - -	tooltip_mode = 'link'; -} +var tooltips = [];  /** -* Enable tooltip replacements for selects + * 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} [subId] Sub ID that should only be using tooltips (optional)  */ -function enable_tooltips_select(id, headline, sub_id) { -	var links, i, hold; - -	head_text = headline; - -	if (!document.getElementById || !document.getElementsByTagName) { -		return; -	} +phpbb.enableTooltipsSelect = function (id, headline, subId) { +	var $links, hold; -	hold = document.createElement('span'); -	hold.id = '_tooltip_container'; -	hold.setAttribute('id', '_tooltip_container'); -	hold.style.position = 'absolute'; +	hold = $('<span />', { +		id:		'_tooltip_container', +		css: { +			position: 'absolute' +		} +	}); -	document.getElementsByTagName('body')[0].appendChild(hold); +	$('body').append(hold); -	if (id === null) { -		links = document.getElementsByTagName('option'); +	if (!id) { +		$links = $('.roles-options li');  	} else { -		links = document.getElementById(id).getElementsByTagName('option'); +		$links = $('.roles-options li', '#' + id);  	} -	for (i = 0; i < links.length; i++) { -		if (sub_id) { -			if (links[i].parentNode.id.substr(0, sub_id.length) === sub_id) { -				prepare(links[i]); +	$links.each(function () { +		var $this = $(this); + +		if (subId) { +			if ($this.parent().attr('id').substr(0, subId.length) === subId) { +				phpbb.prepareTooltips($this, headline);  			}  		} else { -			prepare(links[i]); +			phpbb.prepareTooltips($this, headline);  		} -	} - -	tooltip_mode = 'select'; -} +	}); +};  /** -* Prepare elements to replace + * Prepare elements to replace + * + * @param {jQuery} $element Element to prepare for tooltips + * @param {string} headText Text heading to display  */ -function prepare(element) { -	var tooltip, text, desc, title; +phpbb.prepareTooltips = function ($element, headText) { +	var $tooltip, text, $desc, $title; -	text = element.getAttribute('title'); +	text = $element.attr('data-title');  	if (text === null || text.length === 0) {  		return;  	} -	element.removeAttribute('title'); -	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); +	$title = $('<span />', { +		class: 'top', +		css: { +			display:	'block' +		} +	}) +		.append(document.createTextNode(headText)); + +	$desc = $('<span />', { +		class: 'bottom', +		html: text, +		css: { +			display: 'block' +		} +	}); -	element.tooltip = tooltip; -	element.onmouseover = show_tooltip; -	element.onmouseout = hide_tooltip; +	$tooltip = $('<span />', { +		class: 'tooltip', +		css: { +			display: 'block' +		} +	}) +		.append($title) +		.append($desc); -	if (tooltip_mode === 'link') { -		element.onmousemove = locate; -	} -} +	tooltips[$element.attr('data-id')] = $tooltip; +	$element.on('mouseover', phpbb.showTooltip); +	$element.on('mouseout', phpbb.hideTooltip); +};  /** -* Show tooltip + * Show tooltip + * + * @param {object} $element Element passed by .on()  */ -function show_tooltip(e) { -	document.getElementById('_tooltip_container').appendChild(this.tooltip); -	locate(this); -} +phpbb.showTooltip = function ($element) { +	var $this = $($element.target); +	$('#_tooltip_container').append(tooltips[$this.attr('data-id')]); +	phpbb.positionTooltip($this); +};  /** -* Hide tooltip + * Hide tooltip  */ -function hide_tooltip(e) { +phpbb.hideTooltip = function () {  	var d = document.getElementById('_tooltip_container');  	if (d.childNodes.length > 0) {  		d.removeChild(d.firstChild);  	} -} +};  /** -* Set opacity on tooltip element + * Correct positioning of tooltip container + * + * @param {jQuery} $element Tooltip element that should be positioned  */ -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'; -} +phpbb.positionTooltip = function ($element) { +	var offset; -/** -* 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 -*/ -function locate(e) { -	var posx = 0; -	var posy = 0; +	$element = $element.parent(); +	offset = $element.offset(); -	e = e.parentNode; +	$('#_tooltip_container').css({ +		top: offset.top + 30, +		left: offset.left - 205 +	}); +}; -	if (e.offsetParent) { -		for (posx = 0, posy = 0; e.offsetParent; e = e.offsetParent) { -			posx += e.offsetLeft; -			posy += e.offsetTop; +/** + * Prepare roles drop down select + */ +phpbb.prepareRolesDropdown = function () { +	var $options = $('.roles-options li'); +	var $rolesOptions = $options.closest('.roles-options'); +	var $span = $rolesOptions.children('span'); + +	// Prepare highlighting of select options and settings update +	$options.each(function () { +		var $this = $(this); + +		// Correctly show selected option +		if (typeof $this.attr('data-selected') !== 'undefined') { +			$rolesOptions.closest('.roles-options') +				.children('span') +				.text($this.text()) +				.attr('data-default', $this.text()) +				.attr('data-default-val', $this.attr('data-id'));  		} -	} else { -		posx = e.offsetLeft; -		posy = e.offsetTop; -	} -	if (tooltip_mode === 'link') { -		document.getElementById('_tooltip_container').style.top=(posy+20) + 'px'; -		document.getElementById('_tooltip_container').style.left=(posx-20) + 'px'; -	} else { -		document.getElementById('_tooltip_container').style.top=(posy+30) + 'px'; -		document.getElementById('_tooltip_container').style.left=(posx-205) + 'px'; +		$this.on('mouseover', function () { +			var $this = $(this); +			$options.removeClass('roles-highlight'); +			$this.addClass('roles-highlight'); +		}).on('click', function () { +			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 +			$rolesOptions.children('span') +				.text($this.text()); +			$rolesOptions.children('input[type=hidden]') +				.val($this.attr('data-id')); + +			// Trigger hiding of selection options +			$('body').trigger('click'); +		}); +	}); + +	// Save default text of drop down if there is no default set yet +	if (typeof $span.attr('data-default') === 'undefined') { +		$span.attr('data-default', $span.text());  	} -/* -	if (e == null) -	{ -		e = window.event; -	} +	// Prepare resetting drop down on form reset +	$options.closest('form').on('reset', function () { +		$span.text($span.attr('data-default')); +		$rolesOptions.children('input[type=hidden]') +			.val($span.attr('data-id')); +	}); -	if (e.pageX || e.pageY) -	{ -		posx = e.pageX; -		posy = e.pageY; -	} -	else if (e.clientX || e.clientY) -	{ -		if (document.documentElement.scrollTop) -		{ -			posx = e.clientX+document.documentElement.scrollLeft; -			posy = e.clientY+document.documentElement.scrollTop; -		} -		else -		{ -			posx = e.clientX+document.body.scrollLeft; -			posy = e.clientY+document.body.scrollTop; -		} -	} -*/ -} +}; + +// Run onload functions for RolesDropdown and tooltips +$(function() { +	// Enable tooltips +	phpbb.enableTooltipsSelect('set-permissions', $('#set-permissions').attr('data-role-description'), 'role'); + +	// Prepare dropdown +	phpbb.prepareRolesDropdown(); +}); + +})(jQuery); // Avoid conflicts with other libraries | 
