PageRenderTime 34ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/jsdoc_tk_gui/setup/workingDirectory/Webeo/gui/layout/TabbedPane.js

http://jsdoc-toolkit.googlecode.com/
JavaScript | 236 lines | 174 code | 25 blank | 37 comment | 37 complexity | fcb33bae223b4e03b50310792cc29159 MD5 | raw file
  1. ek.require("ao.ajax.Ajax");
  2. ek.require("gui.fx.Fade");
  3. ek.require("gui.tools.Dom");
  4. ek.register("gui.layout.TabbedPane");
  5. ek.requireCSS("css.gui.layout.TabbedPane", "layout.tab1");
  6. /**
  7. * require "tabbedPane.css"
  8. *@require ao.ajax.Ajax.js
  9. *@require gui.tools.FadeManager.js
  10. *@require gui.tools.Dom.js
  11. */
  12. function TabbedPane (divName, isFading, requiredCSS){
  13. try{
  14. this.isFading = (isFading != undefined) ? isFading : true;
  15. this.mainPanel = (typeof divName == "object")? divName : Dom.getElement(divName);
  16. if(this.mainPanel == null){
  17. //TODO
  18. this.mainPanel = document.createElement("div");
  19. var id = document.createAttribute("id");
  20. id.nodeValue = divName;
  21. this.mainPanel.setAttributeNode(id);
  22. document.body.appendChild(this.mainPanel);
  23. }
  24. this.showedPanelCSS = "selectedPanel";
  25. this.hiddenPanelCSS = "panel";
  26. this.showedHeaderCSS = "selectedHeader";
  27. this.hiddenHeaderCSS = "header";
  28. this.headers = new Array();
  29. this.panels = new Array();
  30. this.ajax = new Array();
  31. this.currentPanel = -1;
  32. }catch(e){
  33. alert(e);
  34. }
  35. }
  36. /**
  37. *
  38. */
  39. TabbedPane.prototype.read = function (){
  40. var nodes = this.mainPanel.childNodes;
  41. for(var i = 0 ; i < nodes.length ; i++){
  42. //TODO IE COMPATIBILITY alert(typeof nodes[i] +' ' + nodes[i]);
  43. //alert(nodes[i].innerHTML);
  44. if(nodes[i].nodeName == "#text" /* instanceof Text*/){
  45. continue;
  46. }else if(nodes[i].nodeName == "DIV" /*instanceof HTMLDivElement*/){
  47. if(nodes[i].id == this.mainPanel.id + "_headers"){
  48. this.readHeaders(nodes[i].childNodes);
  49. this.headersDom = nodes[i];
  50. }else if(nodes[i].id == this.mainPanel.id + "_panels"){
  51. this.readPanels(nodes[i].childNodes);
  52. this.panelsDom = nodes[i];
  53. }
  54. }
  55. }
  56. this.createTooltip();
  57. this.show(0);
  58. }
  59. TabbedPane.prototype.readHeaders = function (divHeaders){
  60. for(var i = 0 ; i < divHeaders.length ; i++){
  61. if(divHeaders[i].nodeName == "#text"/* instanceof Text*/){
  62. continue;
  63. }else if(divHeaders[i].nodeName == "A" /*instanceof HTMLAnchorElement*/){
  64. divHeaders[i].model = this;
  65. divHeaders[i].panel = this.headers.length;
  66. divHeaders[i].onclick = this.performClick;
  67. this.createSpanElements(divHeaders[i]);
  68. //this.checkOutSpanElement(divHeaders[i].childNodes);
  69. this.addHeader(divHeaders[i]);
  70. }
  71. }
  72. }
  73. TabbedPane.prototype.createSpanElements = function (anchorNode){
  74. var content = anchorNode.innerHTML;
  75. anchorNode.innerHTML = "";
  76. anchorNode.appendChild(Dom.createHTMLSpanElement(null, "leftHeader"));
  77. anchorNode.appendChild(Dom.createHTMLSpanElement(content, "midHeader"));
  78. anchorNode.appendChild(Dom.createHTMLSpanElement(null , "rightHeader"));
  79. }
  80. TabbedPane.prototype.checkOutSpanElement = function (anchorChildNodes){
  81. var spanCounter = 0;
  82. for(var i = 0 ; i < anchorChildNodes.length ; i++){
  83. if(anchorChildNodes[i].nodeName == "SPAN"){
  84. spanCounter++;
  85. switch(spanCounter){
  86. case 1: anchorChildNodes[i].className = "leftHeader";
  87. anchorChildNodes[i].innerHTML = Dom.NBSP;
  88. break;
  89. case 2: anchorChildNodes[i].className = "midHeader";
  90. break;
  91. case 3: anchorChildNodes[i].className = "rightHeader";
  92. anchorChildNodes[i].innerHTML = Dom.NBSP;
  93. break;
  94. default: break;
  95. }
  96. }
  97. }
  98. }
  99. TabbedPane.prototype.readPanels = function (divPanels){
  100. for(var i = 0 ; i < divPanels.length ; i++){
  101. if(divPanels[i].nodeName == "#text"/* instanceof Text*/){
  102. continue;
  103. }else if(divPanels[i].nodeName == "DIV"/* instanceof HTMLDivElement*/){
  104. divPanels[i].className = this.hiddenPanelCSS;
  105. this.addPanel(divPanels[i]);
  106. }
  107. }
  108. }
  109. TabbedPane.prototype.createTooltip = function (header){
  110. /*for(var i = 0 ; i < this.panels.length ;i++){
  111. t = new Tooltip(this.panels[i], null, true, "Hellowwww", "tooltip", 50, 50, new Position(false,0,true,0));
  112. }*/
  113. }
  114. TabbedPane.prototype.addHeader = function (header){
  115. header.className = this.hiddenHeaderCSS;
  116. this.headers.push(header);
  117. }
  118. TabbedPane.prototype.addPanel = function (panel){
  119. panel.className = this.hiddenPanelCSS;
  120. this.panels.push(panel);
  121. if(this.isFading){
  122. panel.id = this.mainPanel.id + '_panel_' + this.panels.length;
  123. Fade.register(panel.id);
  124. }
  125. }
  126. TabbedPane.prototype.addTab = function (tabName, contentOrLocation){
  127. if(!this.headersDom){
  128. if(Dom.getElement(this.mainPanel.id + "_headers")==null){
  129. this.headersDom = Dom.createHTMLDivElement(null, "headers", this.mainPanel.id + "_headers");
  130. this.mainPanel.appendChild(this.headersDom);
  131. }else{
  132. this.headersDom = Dom.getElement(this.mainPanel.id + "_headers");
  133. }
  134. }
  135. if(!this.panelsDom){
  136. if(Dom.getElement(this.mainPanel.id + "_panels")==null){
  137. this.panelsDom = Dom.createHTMLDivElement(null, "panels", this.mainPanel.id + "_panels");
  138. this.mainPanel.appendChild(this.panelsDom);
  139. }else{
  140. this.panelsDom = Dom.getElement(this.mainPanel.id + "_panels");
  141. }
  142. }
  143. a = Dom.createHTMLAnchorElement("", null, null, null);
  144. a.appendChild(Dom.createHTMLSpanElement(null, "leftHeader"));
  145. a.appendChild(Dom.createHTMLSpanElement(tabName, "midHeader"));
  146. a.appendChild(Dom.createHTMLSpanElement(null , "rightHeader"));
  147. //a = document.createElement("a");
  148. //a.textContent = tabName;
  149. a.model = this;
  150. a.panel = this.headers.length;
  151. a.onclick = this.performClick;
  152. //this.headersDom.appendChild(Dom.createHTMLQuoteElement("&nbsp;", "leftHeader"));
  153. this.headersDom.appendChild(a);
  154. //this.headersDom.appendChild(Dom.createHTMLQuoteElement("&nbsp;", "rightHeader"));
  155. this.addHeader(a);
  156. d = document.createElement("div");
  157. if(contentOrLocation instanceof Ajax){
  158. contentOrLocation.onload = this.loadAjaxTab;
  159. this.ajax[this.headers.length] = contentOrLocation;
  160. }else{
  161. d.innerHTML = contentOrLocation;
  162. }
  163. this.panelsDom.appendChild(d);
  164. this.addPanel(d);
  165. }
  166. TabbedPane.prototype.loadAjaxTab = function (){
  167. this.panels[i].innerHTML = 'titi';//.show(this.panel);
  168. }
  169. TabbedPane.prototype.performClick = function (){
  170. this.model.show(this.panel);
  171. }
  172. /**
  173. * This method is used to change the panel shown.
  174. * @newPanel the panel to show
  175. */
  176. TabbedPane.prototype.show = function (newPanel){
  177. //If same panel no change
  178. if(newPanel == this.currentPanel)
  179. return;
  180. if(this.isFading){
  181. //Fadeout old Panel
  182. if(this.currentPanel>=0){
  183. //Clear the fading timeout of the current panel
  184. //alert(getFadeManager().get(this.panels[this.currentPanel].id));
  185. //Fix the min height of the main panel
  186. //TODO CHECK minheight
  187. this.mainPanel.style.minHeight = this.headers[this.currentPanel].offsetHeight + this.panels[this.currentPanel].offsetHeight + 'px';
  188. this.headers[this.currentPanel].className = this.hiddenHeaderCSS;
  189. Fade.fadeOut(this.panels[this.currentPanel].id, "Fade.fadeIn(\""+this.panels[newPanel].id+"\")");
  190. }else{
  191. Fade.fadeIn(this.panels[newPanel].id); //first init
  192. }
  193. //FadeIn the new panel
  194. this.headers[newPanel].className = this.showedHeaderCSS;
  195. this.panels[newPanel].className = this.showedPanelCSS;
  196. //getFadeManager().fadeIn(this.panels[newPanel].id);
  197. }else{
  198. if(this.currentPanel>=0){
  199. this.headers[this.currentPanel].className = this.hiddenHeaderCSS;
  200. this.panels[this.currentPanel].className = this.hiddenPanelCSS;
  201. }
  202. //On selectionne le header et on montre le panel
  203. this.headers[newPanel].className = this.showedHeaderCSS;
  204. this.panels[newPanel].className = this.showedPanelCSS;
  205. //this.panels[i].style.left = "-500";
  206. //this.panels[i].id = "panel"+i;
  207. //move(this.panels[i].id, "0");
  208. }
  209. //O n change l'index du panel courant
  210. this.currentPanel = newPanel;
  211. }