PageContainer.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:8k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.widget.PageContainer");
  9. dojo.require("dojo.lang.func");
  10. dojo.require("dojo.widget.*");
  11. dojo.require("dojo.event.*");
  12. dojo.require("dojo.html.selection");
  13. dojo.widget.defineWidget("dojo.widget.PageContainer", dojo.widget.HtmlWidget, {isContainer:true, doLayout:true, templateString:"<div dojoAttachPoint='containerNode'></div>", selectedChild:"", fillInTemplate:function (args, frag) {
  14. var source = this.getFragNodeRef(frag);
  15. dojo.html.copyStyle(this.domNode, source);
  16. dojo.widget.PageContainer.superclass.fillInTemplate.apply(this, arguments);
  17. }, postCreate:function (args, frag) {
  18. if (this.children.length) {
  19. dojo.lang.forEach(this.children, this._setupChild, this);
  20. var initialChild;
  21. if (this.selectedChild) {
  22. this.selectChild(this.selectedChild);
  23. } else {
  24. for (var i = 0; i < this.children.length; i++) {
  25. if (this.children[i].selected) {
  26. this.selectChild(this.children[i]);
  27. break;
  28. }
  29. }
  30. if (!this.selectedChildWidget) {
  31. this.selectChild(this.children[0]);
  32. }
  33. }
  34. }
  35. }, addChild:function (child) {
  36. dojo.widget.PageContainer.superclass.addChild.apply(this, arguments);
  37. this._setupChild(child);
  38. this.onResized();
  39. if (!this.selectedChildWidget) {
  40. this.selectChild(child);
  41. }
  42. }, _setupChild:function (page) {
  43. page.hide();
  44. page.domNode.style.position = "relative";
  45. dojo.event.topic.publish(this.widgetId + "-addChild", page);
  46. }, removeChild:function (page) {
  47. dojo.widget.PageContainer.superclass.removeChild.apply(this, arguments);
  48. if (this._beingDestroyed) {
  49. return;
  50. }
  51. dojo.event.topic.publish(this.widgetId + "-removeChild", page);
  52. this.onResized();
  53. if (this.selectedChildWidget === page) {
  54. this.selectedChildWidget = undefined;
  55. if (this.children.length > 0) {
  56. this.selectChild(this.children[0], true);
  57. }
  58. }
  59. }, selectChild:function (page, callingWidget) {
  60. page = dojo.widget.byId(page);
  61. this.correspondingPageButton = callingWidget;
  62. if (this.selectedChildWidget) {
  63. this._hideChild(this.selectedChildWidget);
  64. }
  65. this.selectedChildWidget = page;
  66. this.selectedChild = page.widgetId;
  67. this._showChild(page);
  68. page.isFirstChild = (page == this.children[0]);
  69. page.isLastChild = (page == this.children[this.children.length - 1]);
  70. dojo.event.topic.publish(this.widgetId + "-selectChild", page);
  71. }, forward:function () {
  72. var index = dojo.lang.find(this.children, this.selectedChildWidget);
  73. this.selectChild(this.children[index + 1]);
  74. }, back:function () {
  75. var index = dojo.lang.find(this.children, this.selectedChildWidget);
  76. this.selectChild(this.children[index - 1]);
  77. }, onResized:function () {
  78. if (this.doLayout && this.selectedChildWidget) {
  79. with (this.selectedChildWidget.domNode.style) {
  80. top = dojo.html.getPixelValue(this.containerNode, "padding-top", true);
  81. left = dojo.html.getPixelValue(this.containerNode, "padding-left", true);
  82. }
  83. var content = dojo.html.getContentBox(this.containerNode);
  84. this.selectedChildWidget.resizeTo(content.width, content.height);
  85. }
  86. }, _showChild:function (page) {
  87. if (this.doLayout) {
  88. var content = dojo.html.getContentBox(this.containerNode);
  89. page.resizeTo(content.width, content.height);
  90. }
  91. page.selected = true;
  92. page.show();
  93. }, _hideChild:function (page) {
  94. page.selected = false;
  95. page.hide();
  96. }, closeChild:function (page) {
  97. var remove = page.onClose(this, page);
  98. if (remove) {
  99. this.removeChild(page);
  100. page.destroy();
  101. }
  102. }, destroy:function () {
  103. this._beingDestroyed = true;
  104. dojo.event.topic.destroy(this.widgetId + "-addChild");
  105. dojo.event.topic.destroy(this.widgetId + "-removeChild");
  106. dojo.event.topic.destroy(this.widgetId + "-selectChild");
  107. dojo.widget.PageContainer.superclass.destroy.apply(this, arguments);
  108. }});
  109. dojo.widget.defineWidget("dojo.widget.PageController", dojo.widget.HtmlWidget, {templateString:"<span wairole='tablist' dojoAttachEvent='onKey'></span>", isContainer:true, containerId:"", buttonWidget:"PageButton", "class":"dojoPageController", fillInTemplate:function () {
  110. dojo.html.addClass(this.domNode, this["class"]);
  111. dojo.widget.wai.setAttr(this.domNode, "waiRole", "role", "tablist");
  112. }, postCreate:function () {
  113. this.pane2button = {};
  114. var container = dojo.widget.byId(this.containerId);
  115. if (container) {
  116. dojo.lang.forEach(container.children, this.onAddChild, this);
  117. }
  118. dojo.event.topic.subscribe(this.containerId + "-addChild", this, "onAddChild");
  119. dojo.event.topic.subscribe(this.containerId + "-removeChild", this, "onRemoveChild");
  120. dojo.event.topic.subscribe(this.containerId + "-selectChild", this, "onSelectChild");
  121. }, destroy:function () {
  122. dojo.event.topic.unsubscribe(this.containerId + "-addChild", this, "onAddChild");
  123. dojo.event.topic.unsubscribe(this.containerId + "-removeChild", this, "onRemoveChild");
  124. dojo.event.topic.unsubscribe(this.containerId + "-selectChild", this, "onSelectChild");
  125. dojo.widget.PageController.superclass.destroy.apply(this, arguments);
  126. }, onAddChild:function (page) {
  127. var button = dojo.widget.createWidget(this.buttonWidget, {label:page.label, closeButton:page.closable});
  128. this.addChild(button);
  129. this.domNode.appendChild(button.domNode);
  130. this.pane2button[page] = button;
  131. page.controlButton = button;
  132. var _this = this;
  133. dojo.event.connect(button, "onClick", function () {
  134. _this.onButtonClick(page);
  135. });
  136. dojo.event.connect(button, "onCloseButtonClick", function () {
  137. _this.onCloseButtonClick(page);
  138. });
  139. }, onRemoveChild:function (page) {
  140. if (this._currentChild == page) {
  141. this._currentChild = null;
  142. }
  143. var button = this.pane2button[page];
  144. if (button) {
  145. button.destroy();
  146. }
  147. this.pane2button[page] = null;
  148. }, onSelectChild:function (page) {
  149. if (this._currentChild) {
  150. var oldButton = this.pane2button[this._currentChild];
  151. oldButton.clearSelected();
  152. }
  153. var newButton = this.pane2button[page];
  154. newButton.setSelected();
  155. this._currentChild = page;
  156. }, onButtonClick:function (page) {
  157. var container = dojo.widget.byId(this.containerId);
  158. container.selectChild(page, false, this);
  159. }, onCloseButtonClick:function (page) {
  160. var container = dojo.widget.byId(this.containerId);
  161. container.closeChild(page);
  162. }, onKey:function (evt) {
  163. if ((evt.keyCode == evt.KEY_RIGHT_ARROW) || (evt.keyCode == evt.KEY_LEFT_ARROW)) {
  164. var current = 0;
  165. var next = null;
  166. var current = dojo.lang.find(this.children, this.pane2button[this._currentChild]);
  167. if (evt.keyCode == evt.KEY_RIGHT_ARROW) {
  168. next = this.children[(current + 1) % this.children.length];
  169. } else {
  170. next = this.children[(current + (this.children.length - 1)) % this.children.length];
  171. }
  172. dojo.event.browser.stopEvent(evt);
  173. next.onClick();
  174. }
  175. }});
  176. dojo.widget.defineWidget("dojo.widget.PageButton", dojo.widget.HtmlWidget, {templateString:"<span class='item'>" + "<span dojoAttachEvent='onClick' dojoAttachPoint='titleNode' class='selectButton'>${this.label}</span>" + "<span dojoAttachEvent='onClick:onCloseButtonClick' class='closeButton'>[X]</span>" + "</span>", label:"foo", closeButton:false, onClick:function () {
  177. this.focus();
  178. }, onCloseButtonMouseOver:function () {
  179. dojo.html.addClass(this.closeButtonNode, "closeHover");
  180. }, onCloseButtonMouseOut:function () {
  181. dojo.html.removeClass(this.closeButtonNode, "closeHover");
  182. }, onCloseButtonClick:function (evt) {
  183. }, setSelected:function () {
  184. dojo.html.addClass(this.domNode, "current");
  185. this.titleNode.setAttribute("tabIndex", "0");
  186. }, clearSelected:function () {
  187. dojo.html.removeClass(this.domNode, "current");
  188. this.titleNode.setAttribute("tabIndex", "-1");
  189. }, focus:function () {
  190. if (this.titleNode.focus) {
  191. this.titleNode.focus();
  192. }
  193. }});
  194. dojo.lang.extend(dojo.widget.Widget, {label:"", selected:false, closable:false, onClose:function () {
  195. return true;
  196. }});