NAVIGATION
This is an old revision of the document!
Translate
A simple JavaScript “tool tip” which converts the title tag within the inline element <abbr> in formated text.
(<abbr></abbr>)
V1.0 24.08.2011
Docu: –
Forum: –
Author: Craig Erskine http://qrayg.com
Enhanced: K.Heermann (flip-flop) http://planmatrix.de
CMS Version: >= 1.3
Version: V1.0
Tag: <abbr title="TitleText">Text</abbr>
Filenamen: qtip.css, qtip.js
Folder: template/inc_js/qtip/*
Condtion: –
Copy both files into the directory /template/inc_js/qtip/
In the file qtip.css the appearance of the box can be adjusted.
div#qTip { padding: 3px; border: 1px solid #666; border-right-width: 2px; border-bottom-width: 2px; display: none; background: #FFF9DF; /* #999; */ color: #444; /*#FFF; */ font: normal 10px Verdana, Arial, sans-serif; text-align: left; position: absolute; z-index: 1000; } abbr.glossary, abbr.myClass { border-bottom: dotted; border-color: #666; border-width: thin; cursor: help; }
In the file qtip.js you can be set which TAGs to be triggered, here for example qTipTag = "a,label,input,abbr".
The position of the output is also set here. (qTipX und qTipY).
// qTip - CSS Tool Tips - by Craig Erskine // http://qrayg.com // // Multi-tag support by James Crooke // http://www.cj-design.com // // Inspired by code from Travis Beckham // http://www.squidfingers.com | http://www.podlob.com // // Copyright (c) 2006 Craig Erskine // Permission is granted to copy, distribute and/or modify this document // under the terms of the GNU Free Documentation License, Version 1.3 // or any later version published by the Free Software Foundation; // with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. // A copy of the license is included in the section entitled "GNU // Free Documentation License". var qTipTag = "a,label,input,abbr"; //Which tag do you want to qTip-ize? Keep it lowercase!// var qTipX = 0; //This is qTip's X offset// var qTipY = 25; //This is qTip's Y offset// //There's No need to edit anything below this line// tooltip = { name : "qTip", offsetX : qTipX, offsetY : qTipY, tip : null } tooltip.init = function () { var tipNameSpaceURI = "http://www.w3.org/1999/xhtml"; if(!tipContainerID){ var tipContainerID = "qTip";} var tipContainer = document.getElementById(tipContainerID); if(!tipContainer) { tipContainer = document.createElementNS ? document.createElementNS(tipNameSpaceURI, "div") : document.createElement("div"); tipContainer.setAttribute("id", tipContainerID); document.getElementsByTagName("body").item(0).appendChild(tipContainer); } if (!document.getElementById) return; this.tip = document.getElementById (this.name); if (this.tip) document.onmousemove = function (evt) {tooltip.move (evt)}; var a, sTitle, elements; var elementList = qTipTag.split(","); for(var j = 0; j < elementList.length; j++) { elements = document.getElementsByTagName(elementList[j]); if(elements) { for (var i = 0; i < elements.length; i ++) { a = elements[i]; sTitle = a.getAttribute("title"); if(sTitle) { a.setAttribute("tiptitle", sTitle); a.removeAttribute("title"); a.removeAttribute("alt"); a.onmouseover = function() {tooltip.show(this.getAttribute('tiptitle'))}; a.onmouseout = function() {tooltip.hide()}; } } } } } tooltip.move = function (evt) { var x=0, y=0; if (document.all) {//IE x = (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft; y = (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop; x += window.event.clientX; y += window.event.clientY; } else {//Good Browsers x = evt.pageX; y = evt.pageY; } this.tip.style.left = (x + this.offsetX) + "px"; this.tip.style.top = (y + this.offsetY) + "px"; } tooltip.show = function (text) { if (!this.tip) return; this.tip.innerHTML = text; this.tip.style.display = "block"; } tooltip.hide = function () { if (!this.tip) return; this.tip.innerHTML = ""; this.tip.style.display = "none"; } window.onload = function () { tooltip.init (); }
Integrating the two files “qtip.css” and “qtip.js”:
<!-- CSS: {TEMPLATE}inc_js/qtip/qtip.css --> <!-- JS: {TEMPLATE}inc_js/qtip/qtip.js -->
For example in the source code is given:
<abbr class="myClass" title="<p>Dies ist ein <b>Titeltext</b><br /> in zwei Zeilen.</p> <p>Ein neuer Absatz.</p>">Text</abbr>
The script generates:
<abbr tiptitle="<p>Dies ist ein <b>Titeltext</b><br /> in zwei Zeilen.</p> <p>Ein neuer Absatzt.</p>" class="myClass">Text</abbr>
All items concerned will be changed into Entities by the script and “title” will be rewritten into “tiptitle”.
Ist nun JavaScript auf dem Client nicht eingeschaltet wird der Ursprungstext mit den HTML-Steuerzeichen ausgegeben.
Man muss sich also entscheiden, ob mit oder ohne Formatierung gearbeitet werden soll. Für die Formatierung muss JS auf dem Client eingeschaltet sein.
Dazu kommt noch, dass alle Bots natürlich den “title” mit den HTML-Steuerzeichen aufnehmen. In wie weit das ein Nachteil ist, kann ich nicht sagen.
Anmerkung: Es gibt keine wirklich zuverlässige Methode um mit PHP festzustellen ob JS auf dem Client ein- oder ausgeschaltet ist (Geht nur über Seitenweiterleitung per JS ….).
qtip.zip (2.42 KiB, 130 downloads)