API Docs for: 3.13.0
Show:

File: tree/js/extensions/tree-openable.js

  1. /*jshint expr:true, onevar:false */
  2.  
  3. /**
  4. Extension for `Tree` that adds the concept of open/closed state for nodes.
  5.  
  6. @module tree
  7. @submodule tree-openable
  8. @main tree-openable
  9. **/
  10.  
  11. /**
  12. Extension for `Tree` that adds the concept of open/closed state for nodes.
  13.  
  14. @class Tree.Openable
  15. @constructor
  16. @extensionfor Tree
  17. **/
  18.  
  19. /**
  20. Fired when a node is closed.
  21.  
  22. @event close
  23. @param {Tree.Node} node Node being closed.
  24. @param {String} src Source of the event.
  25. @preventable _defCloseFn
  26. **/
  27. var EVT_CLOSE = 'close';
  28.  
  29. /**
  30. Fired when a node is opened.
  31.  
  32. @event open
  33. @param {Tree.Node} node Node being opened.
  34. @param {String} src Source of the event.
  35. @preventable _defOpenFn
  36. **/
  37. var EVT_OPEN = 'open';
  38.  
  39. function Openable() {}
  40.  
  41. Openable.prototype = {
  42. // -- Lifecycle ------------------------------------------------------------
  43. initializer: function () {
  44. this.nodeExtensions = this.nodeExtensions.concat(Y.Tree.Node.Openable);
  45. },
  46.  
  47. // -- Public Methods -------------------------------------------------------
  48.  
  49. /**
  50. Closes the specified node if it isn't already closed.
  51.  
  52. @method closeNode
  53. @param {Tree.Node} node Node to close.
  54. @param {Object} [options] Options.
  55. @param {Boolean} [options.silent=false] If `true`, the `close` event
  56. will be suppressed.
  57. @param {String} [options.src] Source of the change, to be passed along
  58. to the event facade of the resulting event. This can be used to
  59. distinguish between changes triggered by a user and changes
  60. triggered programmatically, for example.
  61. @chainable
  62. **/
  63. closeNode: function (node, options) {
  64. if (node.canHaveChildren && node.isOpen()) {
  65. this._fireTreeEvent(EVT_CLOSE, {
  66. node: node,
  67. src : options && options.src
  68. }, {
  69. defaultFn: this._defCloseFn,
  70. silent : options && options.silent
  71. });
  72. }
  73.  
  74. return this;
  75. },
  76.  
  77. /**
  78. Opens the specified node if it isn't already open.
  79.  
  80. @method openNode
  81. @param {Tree.Node} node Node to open.
  82. @param {Object} [options] Options.
  83. @param {Boolean} [options.silent=false] If `true`, the `open` event
  84. will be suppressed.
  85. @param {String} [options.src] Source of the change, to be passed along
  86. to the event facade of the resulting event. This can be used to
  87. distinguish between changes triggered by a user and changes
  88. triggered programmatically, for example.
  89. @chainable
  90. **/
  91. openNode: function (node, options) {
  92. if (node.canHaveChildren && !node.isOpen()) {
  93. this._fireTreeEvent(EVT_OPEN, {
  94. node: node,
  95. src : options && options.src
  96. }, {
  97. defaultFn: this._defOpenFn,
  98. silent : options && options.silent
  99. });
  100. }
  101.  
  102. return this;
  103. },
  104.  
  105. /**
  106. Toggles the open/closed state of the specified node, closing it if it's
  107. currently open or opening it if it's currently closed.
  108.  
  109. @method toggleOpenNode
  110. @param {Tree.Node} node Node to toggle.
  111. @param {Object} [options] Options.
  112. @param {Boolean} [options.silent=false] If `true`, events will be
  113. suppressed.
  114. @param {String} [options.src] Source of the change, to be passed along
  115. to the event facade of the resulting event. This can be used to
  116. distinguish between changes triggered by a user and changes
  117. triggered programmatically, for example.
  118. @chainable
  119. **/
  120. toggleOpenNode: function (node, options) {
  121. return node.isOpen() ? this.closeNode(node, options) :
  122. this.openNode(node, options);
  123. },
  124.  
  125. // -- Default Event Handlers -----------------------------------------------
  126.  
  127. /**
  128. Default handler for the `close` event.
  129.  
  130. @method _defCloseFn
  131. @param {EventFacade} e
  132. @protected
  133. **/
  134. _defCloseFn: function (e) {
  135. delete e.node.state.open;
  136. },
  137.  
  138. /**
  139. Default handler for the `open` event.
  140.  
  141. @method _defOpenFn
  142. @param {EventFacade} e
  143. @protected
  144. **/
  145. _defOpenFn: function (e) {
  146. e.node.state.open = true;
  147. }
  148. };
  149.  
  150. Y.Tree.Openable = Openable;
  151.