<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Daviscabral's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Wed, 20 Aug 2008 19:23:43 GMT</pubDate>
    <description>DZone Snippets: Daviscabral's Code Snippets</description>
    <item>
      <title>IM.Tooltip // Teste de colis&#227;o com selects</title>
      <link>http://snippets.dzone.com/posts/show/4238</link>
      <description>Um exemplo de uso da fun&#231;&#227;o hitTest do site JSFromHell.com.&lt;br /&gt;Implementei com base nela um esquema de Tooltips, baseado em um script que n&#227;o me recordo onde peguei.&lt;br /&gt;&lt;br /&gt;Com isso as selects que estiverem atr&#225;s dessa tooltip somem quando ela &#233; mostrada.&lt;br /&gt;&lt;br /&gt;Esse esquema transforma atributos title="" de elementos &lt;a&gt; em tooltips.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;IM = {}&lt;br /&gt;/* Utils&lt;br /&gt; ***************************************************************************/&lt;br /&gt;IM.Utils = {&lt;br /&gt;  hitTest: function(o, l){&lt;br /&gt;    function getOffset(o){&lt;br /&gt;      for(var r = {l: o.offsetLeft, t: o.offsetTop, r: o.offsetWidth, b: o.offsetHeight};&lt;br /&gt;        o = o.offsetParent; r.l += o.offsetLeft, r.t += o.offsetTop);&lt;br /&gt;      return r.r += r.l, r.b += r.t, r;&lt;br /&gt;    }&lt;br /&gt;    for(var b, s, r = [], a = getOffset(o), j = isNaN(l.length), i = (j ? l = [l] : l).length; i;&lt;br /&gt;      b = getOffset(l[--i]), (a.l == b.l || (a.l &gt; b.l ? a.l &lt;= b.r : b.l &lt;= a.r))&lt;br /&gt;      &amp;&amp; (a.t == b.t || (a.t &gt; b.t ? a.t &lt;= b.b : b.t &lt;= a.b)) &amp;&amp; (r[r.length] = l[i]));&lt;br /&gt;    return j ? !!r.length : r;&lt;br /&gt;  },&lt;br /&gt;  setOpacity: function(el, op){&lt;br /&gt;    el.style.filter="alpha(opacity:"+op+")";&lt;br /&gt;    el.style.KHTMLOpacity="0."+op;&lt;br /&gt;    el.style.MozOpacity="0."+op;&lt;br /&gt;    el.style.opacity="0."+op;&lt;br /&gt;  },&lt;br /&gt;  showElement: function(x) { // show element ( object element )&lt;br /&gt;    x.style.display = "block";&lt;br /&gt;    if(!x.ieFix)&lt;br /&gt;        x.ieFix = IM.Utils.hitTest(x, d.getElementsByTagName("select"));&lt;br /&gt;    for(var i = x.ieFix.length; i; x.ieFix[--i].style.visibility = "hidden");&lt;br /&gt;  },&lt;br /&gt;  hideElement: function(x) { // hide element ( object element )&lt;br /&gt;    x.style.display = "none";&lt;br /&gt;    if (x.ieFix)&lt;br /&gt;      for(var i = x.ieFix.length; i; x.ieFix[--i].style.visibility = "visible");&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Tooltip&lt;br /&gt; ***************************************************************************/&lt;br /&gt;IM.Tooltip = {&lt;br /&gt;  init: function(id) {&lt;br /&gt;    var links,i,h;&lt;br /&gt;    if(!d.getElementById || !d.getElementsByTagName ) return;&lt;br /&gt;    if(!$(id)) return;&lt;br /&gt;    h = IM.DOM.cE("span");&lt;br /&gt;    h.setAttribute("id",'im-tooltip');&lt;br /&gt;    h.style.position="absolute";&lt;br /&gt;    if ( $('im-tooltip') ) Element.remove("im-tooltip");&lt;br /&gt;    d.getElementsByTagName("body")[0].appendChild(h);&lt;br /&gt;    if(id==null) links=d.getElementsByTagName("a");&lt;br /&gt;    else links=($(id)).getElementsByTagName("a");&lt;br /&gt;    for(i=0;i&lt;links.length;i++){&lt;br /&gt;      this.load(links[i]);&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;  load: function(el) {&lt;br /&gt;    var tooltip,t,b,s,l;&lt;br /&gt;    t=el.getAttribute("title");&lt;br /&gt;    if(t==null || t.length==0) return;&lt;br /&gt;    el.removeAttribute("title");&lt;br /&gt;    tooltip=this.cE("span","tooltip");&lt;br /&gt;    s=this.cE("span","top");&lt;br /&gt;    s.appendChild(d.createTextNode(t));&lt;br /&gt;    tooltip.appendChild(s);&lt;br /&gt;    b=this.cE("b","bottom");&lt;br /&gt;    tooltip.appendChild(b);&lt;br /&gt;    IM.Utils.setOpacity(tooltip, '90');&lt;br /&gt;    el.tooltip=tooltip;&lt;br /&gt;    el.onmouseover=this.sT;&lt;br /&gt;    el.onmouseout=this.hT;&lt;br /&gt;    el.onmousemove=this.pos;&lt;br /&gt;  },&lt;br /&gt;  sT: function(e) { // showTooltip&lt;br /&gt;    var x = $('im-tooltip');&lt;br /&gt;    x.appendChild(this.tooltip);&lt;br /&gt;    IM.Tooltip.pos(e);&lt;br /&gt;  },&lt;br /&gt;  hT: function(e) { // hideTooltip&lt;br /&gt;    var d = $('im-tooltip');&lt;br /&gt;    if(d.childNodes.length&gt;0) d.removeChild(d.childNodes[0]);&lt;br /&gt;    if (d.ieFix)&lt;br /&gt;      for(var i = d.ieFix.length; i; d.ieFix[--i].style.visibility = "visible");&lt;br /&gt;  },&lt;br /&gt;  cE: function(t,c) {&lt;br /&gt;    var x = d.createElement(t);&lt;br /&gt;    x.className = c;&lt;br /&gt;    x.style.display="block";&lt;br /&gt;    return(x);&lt;br /&gt;  },&lt;br /&gt;  pos: function(e) {&lt;br /&gt;    var posx=0,posy=0;&lt;br /&gt;    if(e==null) e=window.event;&lt;br /&gt;    posx = Event.pointerX(e);&lt;br /&gt;    posy = Event.pointerY(e);&lt;br /&gt;    var x = $('im-tooltip');&lt;br /&gt;    x.style.top=(posy+10)+"px";&lt;br /&gt;    x.style.left=(posx-20)+"px";&lt;br /&gt;    if(!x.ieFix)&lt;br /&gt;        x.ieFix = IM.Utils.hitTest(x, d.getElementsByTagName("select"));&lt;br /&gt;    for(var i = x.ieFix.length; i; x.ieFix[--i].style.visibility = "hidden");&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 02 Jul 2007 18:08:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4238</guid>
      <author>daviscabral (Davis Zanetti Cabral)</author>
    </item>
  </channel>
</rss>
