PageRenderTime 39ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/branches/jsdoc_tk_gui/setup/workingDirectory/Webeo/gui/tooltip/Tooltip.js

http://jsdoc-toolkit.googlecode.com/
JavaScript | 310 lines | 151 code | 48 blank | 111 comment | 24 complexity | 3a0157ff61402a96a7f917c7c190ab86 MD5 | raw file
  1. //TODO
  2. ek.require("gui.tools.Position");
  3. ek.require("gui.tools.Dom");
  4. ek.require("gui.fx.Fade");
  5. ek.require("gui.tooltip.TooltipManager");
  6. ek.require("gui.tooltip.TooltipTemplate");
  7. ek.register("gui.tooltip.Tooltip");
  8. ek.requireCSS("css.gui.tooltip.Tooltip", "tooltip.Tooltip");
  9. //LINKS
  10. //Tooltip = Tooltip;
  11. /**
  12. * The Object used to parameterize a Tooltip component.
  13. *
  14. * @param cssClass
  15. * @param pos
  16. * @param timeToShow
  17. * @param timeToHide
  18. * @param isAlpha
  19. * @param mustManageEvent
  20. * @param tooltipTemplate The template used to render the tooltip
  21. * @param logLevel the level of the logger
  22. * @class
  23. * @constructor
  24. */
  25. function TooltipParams (cssClass, pos, timeToShow, timeToHide, isAlpha, mustManageEvent, tooltipTemplate, logLevel){
  26. this.cssClass = (cssClass)? cssClass : 'tooltip';
  27. this.position = (pos && pos instanceof Position) ? pos : new Position();
  28. this.timeToShow = (timeToShow)? timeToShow : 1000;
  29. this.timeToHide = (timeToHide)? timeToHide : 500;
  30. this.isAlpha = (isAlpha!=null && !isAlpha instanceof FadeParams) ? isAlpha : true;
  31. this.fadeParams = (isAlpha instanceof FadeParams) ? isAlpha : null;
  32. this.mustManageEvent = (mustManageEvent!=null)? mustManageEvent : true;
  33. this.tooltipTemplate = new TooltipTemplate(tooltipTemplate);
  34. this.logLevel = (logLevel) ? logLevel : Logger.LEVEL_NONE;
  35. }
  36. Tooltip.prototype.version = "1.0";
  37. /**
  38. *@vis public
  39. */
  40. Tooltip.prototype.getVersion = function (alert){
  41. if(alert)
  42. alert('Tooltip.js => version: ' +this.version);
  43. else
  44. return this.version;
  45. }
  46. /**
  47. * Affiche un Tooltip pour un élement Dom
  48. * Exemple de classe CSS pour le tooltip
  49. * .tooltip{
  50. * position: absolute;
  51. * z-index: 3;
  52. * background-color : #cdd7e1;
  53. * border-style: solid;
  54. * border-width: 1px;
  55. * border-color: #6688aa;
  56. * text-align: center ;
  57. * color:637e9a;
  58. * font-size: 11pt;
  59. * font-style: normal;
  60. * }
  61. *@requires Position
  62. *@requires Fade
  63. *@requires Dom
  64. *@requires Logger
  65. *@param dom élément Dom du tooltip ou l'id de l'élément dom
  66. *@param relativeDom élément Dom par rapport auqiel le tooltip se placera ou l'id de l'élément dom
  67. *@param mustManageEvent si Vrai on gére les event de la souris Sinon le developpeur doit appeler mayShow et mayHide
  68. *@param toolTipText Texte du tooltip
  69. *@param cssClass ==> Classe CSS ? utiliser par le tooltip
  70. *@param timeToShow ==> temps d'attente avant de montrer le tooltip
  71. *@param timeToHide ==> temps d'attente avant de caher le tooltip
  72. *@param pos Objet position
  73. *@vis public
  74. */
  75. function Tooltip (dom, toolTipText, params, relativeDom){
  76. this.hideTimer = undefined;
  77. this.showTimer = undefined;
  78. this.parentDom = new Array();
  79. //PARAMETERS SET
  80. this.params = (params !=null && params instanceof TooltipParams)? params : new TooltipParams();
  81. //try{
  82. if(dom instanceof Array){
  83. for(var i = 0 ; i < dom.length ; i++){
  84. this.parentDom[i] = (typeof dom[i] == "object")? dom[i] : Dom.getElement(dom[i]);
  85. }
  86. }else{
  87. this.parentDom[0] = (typeof dom == "object")? dom : Dom.getElement(dom);
  88. }
  89. this.getLogger().trace("new Tooltip( dom="+dom+", tooltiptext="+toolTipText+", params="+params+", relativeDom="+relativeDom+")");
  90. this.divNameTT = this.parentDom[0].id + '_TT';
  91. this.drawTooltip(toolTipText, this.params.cssClass);
  92. if(relativeDom != null )
  93. this.relativeDom = (typeof relativeDom == "object") ? relativeDom : Dom.getElement(relativeDom);
  94. else
  95. this.relativeDom = this.parentDom[0];
  96. //this.domTT.innerHTML = toolTipText;
  97. //this.domTT.className = this.params.cssClass;
  98. //Sauvegarde this pour les événements
  99. this.domTT.ttModel = this;
  100. //Gestion des événements
  101. this.domTT.onmouseover = this.getOver;
  102. this.domTT.onmouseout = this.getOut;
  103. //Positionnement par rapport ? l'élément parent
  104. if(this.parentDom[0].style.position=="")
  105. this.parentDom[0].style.position = "relative";
  106. this.domTT.style.position = "absolute";
  107. if(this.params.mustManageEvent){
  108. for(var i = 0 ; i < this.parentDom.length; i++){
  109. this.parentDom[i].ttModel = this;
  110. this.parentDom[i].onmouseover = this.getParentOver;
  111. this.parentDom[i].onmouseout = this.getParentOut;
  112. }
  113. }
  114. //Else you must call the mayShow and mayHide functions with your own listener
  115. if(this.params.isAlpha){
  116. Fade.register(this.divNameTT, this.params.fadeParams);
  117. }
  118. this.hide();
  119. /*}catch(e){
  120. alert("Tooltip error: "+e);
  121. }*/
  122. }
  123. Tooltip.prototype.getLogger = function (){
  124. if(!this.logger){
  125. this.logger = getLogger("TOOLTIP");
  126. this.logger.setLevel(this.params.logLevel);
  127. }
  128. this.logger.setCurrentID(this.parentDom[0].id);
  129. return this.logger;
  130. }
  131. /**
  132. * Write the tooltip into the document
  133. * <div class="tooltip style="display:none;" "id="TT_'+name+'_'+ this.divName+ '"></div>
  134. *@vis public
  135. */
  136. Tooltip.prototype.drawTooltip = function (text, clazz){
  137. this.getLogger().trace("Drawing the tooltip");
  138. //this.domTT = Dom.createHTMLDivElement(text, clazz, this.divNameTT);
  139. this.domTT = this.params.tooltipTemplate.getTemplate(text, clazz, this.divNameTT);
  140. if(this.parentDom[0].parentNode)
  141. this.parentDom[0].parentNode.appendChild(this.domTT);
  142. }
  143. Tooltip.prototype.applyParams = function (params){
  144. this.getLogger().trace("Apply Params: "+params.toString());
  145. this.params = params;
  146. this.domTT.className = this.params.cssClass;
  147. if(this.params.isAlpha){
  148. Fade.register(this.divNameTT);
  149. }
  150. }
  151. /**
  152. * Affiche le Tooltip
  153. *@vis private
  154. */
  155. Tooltip.prototype.show = function (){
  156. this.getLogger().trace("Show Tooltip");
  157. ll = Dom.getStyle(this.domTT, "width");
  158. this.domTT.style.left = this.params.position.getLeftPosition(this.relativeDom.offsetLeft, this.relativeDom.offsetWidth, ll.substring(0,ll.indexOf('px')) ) +"px";
  159. tt = Dom.getStyle(this.domTT, "height");
  160. this.domTT.style.top = this.params.position.getTopPosition(this.relativeDom.offsetTop, this.relativeDom.offsetHeight , tt.substring(0,tt.indexOf('px')) ) +"px";
  161. //this.domTT.style.left = this.params.position.getLeftPosition(this.relativeDom.offsetLeft, this.relativeDom.offsetWidth, this.domTT.style.width.substring(0,this.domTT.style.width.indexOf('px')) );
  162. //this.domTT.style.top = this.params.position.getTopPosition(this.relativeDom.offsetHeight, this.relativeDom.offsetHeight, this.domTT.style.height.substring(0,this.domTT.style.height.indexOf('px')) );
  163. //this.clearTimer(false);
  164. if(this.params.isAlpha){
  165. Fade.fadeIn(this.divNameTT);
  166. this.isShown = true;
  167. }else{
  168. this.domTT.style.display = '';
  169. this.isShown = true;
  170. }
  171. }
  172. /**
  173. * Cache le Tooltip
  174. *@private
  175. */
  176. Tooltip.prototype.hide = function (e){
  177. this.getLogger().trace("Hide Tooltip");
  178. //this.clearTimer(true);
  179. if(this.params.isAlpha){
  180. Fade.fadeOut(this.divNameTT);
  181. this.isShown = false;
  182. }else{
  183. this.domTT.style.display ='none';
  184. this.isShown = false;
  185. }
  186. }
  187. /**
  188. * Si un compte a rebours pour cacher le tooltip existe alors on le stoppe
  189. *@private
  190. */
  191. Tooltip.prototype.clearTimer = function (show){
  192. (show) ? this.getLogger().trace("Clear Show-timer") : this.getLogger().trace("Clear Hide-timer");
  193. if(show && this.showTimer){
  194. window.clearTimeout(this.showTimer);
  195. this.showTimer = undefined;
  196. }
  197. if(!show && this.hideTimer){
  198. window.clearTimeout(this.hideTimer);
  199. this.hideTimer = undefined;
  200. }
  201. }
  202. /**
  203. * Lors d'un survol du tooltip on le montre
  204. *@vis private
  205. */
  206. Tooltip.prototype.getOver = function (){
  207. this.ttModel.getLogger().trace("onMouseOver");
  208. this.ttModel.clearTimer(false);
  209. this.ttModel.show();
  210. }
  211. /**
  212. * Lorsqu'on quitte le survol du tooltip on le cache
  213. */
  214. Tooltip.prototype.getOut = function (){
  215. this.ttModel.getLogger().trace("onMouseOut");
  216. this.ttModel.clearTimer(true);
  217. this.ttModel.hide();
  218. }
  219. /**
  220. * Lors d'un survol du parent on montre le tooltip
  221. *@vis private
  222. */
  223. Tooltip.prototype.getParentOver = function (){
  224. this.ttModel.getLogger().trace("onParentMouseOver")
  225. this.ttModel.mayShow();
  226. }
  227. /**
  228. * Lorsqu'on quitte le survol du parent on cache le tooltip
  229. */
  230. Tooltip.prototype.getParentOut = function (){
  231. this.ttModel.getLogger().trace("onParentMouseOut")
  232. this.ttModel.mayHide();
  233. }
  234. /**
  235. * Lors d'un survol du tooltip on le montre
  236. *@vis private
  237. */
  238. Tooltip.prototype.mayShow = function (){
  239. this.getLogger().trace("mayShow");
  240. this.clearTimer(false);
  241. //if(!this.isShown)
  242. this.showTimer = window.setTimeout("document.getElementById('" + this.divNameTT + "').ttModel.show()", this.params.timeToShow);
  243. }
  244. /**
  245. * Lors d'un survol du tooltip on le montre
  246. *@vis private
  247. */
  248. Tooltip.prototype.mayHide = function (){
  249. this.getLogger().trace("mayHide");
  250. this.clearTimer(true);
  251. //On annule le timeout destiné ? affiché le tooltip
  252. //window.clearTimeout(this.showTimer);
  253. //if(this.isShown)
  254. this.hideTimer = window.setTimeout("document.getElementById('" + this.divNameTT + "').ttModel.hide()", this.params.timeToHide);
  255. }
  256. /**
  257. *
  258. */
  259. Tooltip.prototype.erase = function (){
  260. this.getLogger().trace("Erase");
  261. alert("erasing tooltip "+this.divName);
  262. }