PageRenderTime 33ms CodeModel.GetById 8ms RepoModel.GetById 0ms app.codeStats 0ms

/1.3/api/source/popup.html

https://github.com/yiminghe/kissyteam.github.com
HTML | 221 lines | 197 code | 24 blank | 0 comment | 0 complexity | 1f99d296b404fbc176220c5a02df9fdf MD5 | raw file
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>The source code</title>
  6. <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
  7. <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
  8. <style type="text/css">
  9. .highlight { display: block; background-color: #ddd; }
  10. </style>
  11. <script type="text/javascript">
  12. function highlight() {
  13. document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
  14. }
  15. </script>
  16. </head>
  17. <body onload="prettyPrint(); highlight();">
  18. <pre class="prettyprint lang-js"><span id='global-property-'>/**
  19. </span> * @ignore
  20. * KISSY.Popup
  21. * @author qiaohua@taobao.com, yiminghe@gmail.com
  22. */
  23. KISSY.add('overlay/popup', function (S, Overlay, undefined) {
  24. <span id='KISSY-Overlay-Popup'> /**
  25. </span> * @class KISSY.Overlay.Popup
  26. * KISSY Popup Component. xclass: 'popup'.
  27. * @extends KISSY.Overlay
  28. */
  29. return Overlay.extend({
  30. initializer: function () {
  31. var self = this,
  32. // 获取相关联的 DOM 节点
  33. trigger = self.get(&quot;trigger&quot;);
  34. if (trigger) {
  35. if (self.get(&quot;triggerType&quot;) === 'mouse') {
  36. self._bindTriggerMouse();
  37. self.on('afterRenderUI', function () {
  38. self._bindContainerMouse();
  39. });
  40. } else {
  41. self._bindTriggerClick();
  42. }
  43. }
  44. },
  45. _bindTriggerMouse: function () {
  46. var self = this,
  47. trigger = self.get(&quot;trigger&quot;),
  48. timer;
  49. self.__mouseEnterPopup = function (ev) {
  50. self._clearHiddenTimer();
  51. timer = S.later(function () {
  52. self._showing(ev);
  53. timer = undefined;
  54. }, self.get('mouseDelay') * 1000);
  55. };
  56. trigger.on('mouseenter', self.__mouseEnterPopup);
  57. self._mouseLeavePopup = function () {
  58. if (timer) {
  59. timer.cancel();
  60. timer = undefined;
  61. }
  62. self._setHiddenTimer();
  63. };
  64. trigger.on('mouseleave', self._mouseLeavePopup);
  65. },
  66. _bindContainerMouse: function () {
  67. var self = this;
  68. self.get('el')
  69. .on('mouseleave', self._setHiddenTimer, self)
  70. .on('mouseenter', self._clearHiddenTimer, self);
  71. },
  72. _setHiddenTimer: function () {
  73. var self = this;
  74. self._hiddenTimer = S.later(function () {
  75. self._hiding();
  76. }, self.get('mouseDelay') * 1000);
  77. },
  78. _clearHiddenTimer: function () {
  79. var self = this;
  80. if (self._hiddenTimer) {
  81. self._hiddenTimer.cancel();
  82. self._hiddenTimer = undefined;
  83. }
  84. },
  85. _bindTriggerClick: function () {
  86. var self = this;
  87. self.__clickPopup = function (ev) {
  88. ev.halt();
  89. if (self.get('toggle')) {
  90. self[self.get('visible') ? '_hiding' : '_showing'](ev);
  91. } else {
  92. self._showing(ev);
  93. }
  94. };
  95. self.get(&quot;trigger&quot;).on('click', self.__clickPopup);
  96. },
  97. _showing: function (ev) {
  98. var self = this;
  99. self.set('currentTrigger', S.one(ev.target));
  100. self.show();
  101. },
  102. _hiding: function () {
  103. this.set('currentTrigger', undefined);
  104. this.hide();
  105. },
  106. destructor: function () {
  107. var self = this,
  108. root,
  109. t = self.get(&quot;trigger&quot;);
  110. if (t) {
  111. if (self.__clickPopup) {
  112. t.detach('click', self.__clickPopup);
  113. }
  114. if (self.__mouseEnterPopup) {
  115. t.detach('mouseenter', self.__mouseEnterPopup);
  116. }
  117. if (self._mouseLeavePopup) {
  118. t.detach('mouseleave', self._mouseLeavePopup);
  119. }
  120. }
  121. if (root = self.get('el')) {
  122. root.detach('mouseleave', self._setHiddenTimer, self)
  123. .detach('mouseenter', self._clearHiddenTimer, self);
  124. }
  125. }
  126. }, {
  127. ATTRS: {
  128. <span id='KISSY-Overlay-Popup-cfg-trigger'> /**
  129. </span> * Trigger elements to show popup.
  130. * @cfg {KISSY.NodeList} trigger
  131. */
  132. <span id='global-property-trigger'> /**
  133. </span> * @ignore
  134. */
  135. trigger: { // 触发器
  136. setter: function (v) {
  137. return S.all(v);
  138. }
  139. },
  140. <span id='KISSY-Overlay-Popup-cfg-triggerType'> /**
  141. </span> * How to activate trigger element, &quot;click&quot; or &quot;mouse&quot;.
  142. *
  143. * Defaults to: &quot;click&quot;.
  144. *
  145. * @cfg {String} triggerType
  146. */
  147. <span id='global-property-triggerType'> /**
  148. </span> * @ignore
  149. */
  150. triggerType: {
  151. // 触发类型
  152. value: 'click'
  153. },
  154. currentTrigger: {},
  155. <span id='KISSY-Overlay-Popup-cfg-mouseDelay'> /**
  156. </span> * When trigger type is mouse, the delayed time to show popup.
  157. *
  158. * Defaults to: 0.1, in seconds.
  159. *
  160. * @cfg {Number} mouseDelay
  161. */
  162. <span id='global-property-mouseDelay'> /**
  163. </span> * @ignore
  164. */
  165. mouseDelay: {
  166. // triggerType 为 mouse 时, Popup 显示的延迟时间, 默认为 100ms
  167. value: 0.1
  168. },
  169. <span id='KISSY-Overlay-Popup-cfg-toggle'> /**
  170. </span> * When trigger type is click, whether support toggle.
  171. *
  172. * Defaults to: false
  173. *
  174. * @cfg {Boolean} toggle
  175. */
  176. <span id='global-property-toggle'> /**
  177. </span> * @ignore
  178. */
  179. toggle: {
  180. // triggerType 为 click 时, Popup 是否有toggle功能
  181. value: false
  182. }
  183. }
  184. }, {
  185. xclass: 'popup',
  186. priority: 20
  187. });
  188. }, {
  189. requires: [&quot;./base&quot;]
  190. });
  191. <span id='global-property-'>/**
  192. </span> * @ignore
  193. * 2011-05-17
  194. * - yiminghe@gmail.com:利用 initializer , destructor ,ATTRS
  195. **/</pre>
  196. </body>
  197. </html>