epuber 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +6 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +46 -0
  5. data/bin/epuber +10 -0
  6. data/epuber.gemspec +51 -0
  7. data/lib/epuber.rb +14 -0
  8. data/lib/epuber/book.rb +267 -0
  9. data/lib/epuber/book/contributor.rb +90 -0
  10. data/lib/epuber/book/file_request.rb +68 -0
  11. data/lib/epuber/book/target.rb +284 -0
  12. data/lib/epuber/book/toc_item.rb +130 -0
  13. data/lib/epuber/checker.rb +19 -0
  14. data/lib/epuber/checker/text_checker.rb +129 -0
  15. data/lib/epuber/checker_transformer_base.rb +71 -0
  16. data/lib/epuber/command.rb +65 -0
  17. data/lib/epuber/command/compile.rb +142 -0
  18. data/lib/epuber/command/init.rb +145 -0
  19. data/lib/epuber/command/server.rb +59 -0
  20. data/lib/epuber/compiler.rb +255 -0
  21. data/lib/epuber/compiler/compilation_context.rb +86 -0
  22. data/lib/epuber/compiler/file_finders/abstract.rb +270 -0
  23. data/lib/epuber/compiler/file_finders/imaginary.rb +167 -0
  24. data/lib/epuber/compiler/file_finders/normal.rb +22 -0
  25. data/lib/epuber/compiler/file_resolver.rb +316 -0
  26. data/lib/epuber/compiler/file_types/abstract_file.rb +119 -0
  27. data/lib/epuber/compiler/file_types/bade_file.rb +39 -0
  28. data/lib/epuber/compiler/file_types/container_xml_file.rb +26 -0
  29. data/lib/epuber/compiler/file_types/generated_file.rb +29 -0
  30. data/lib/epuber/compiler/file_types/ibooks_display_options_file.rb +31 -0
  31. data/lib/epuber/compiler/file_types/image_file.rb +42 -0
  32. data/lib/epuber/compiler/file_types/mime_type_file.rb +20 -0
  33. data/lib/epuber/compiler/file_types/nav_file.rb +42 -0
  34. data/lib/epuber/compiler/file_types/opf_file.rb +27 -0
  35. data/lib/epuber/compiler/file_types/source_file.rb +52 -0
  36. data/lib/epuber/compiler/file_types/static_file.rb +18 -0
  37. data/lib/epuber/compiler/file_types/stylus_file.rb +20 -0
  38. data/lib/epuber/compiler/file_types/xhtml_file.rb +102 -0
  39. data/lib/epuber/compiler/generator.rb +67 -0
  40. data/lib/epuber/compiler/meta_inf_generator.rb +41 -0
  41. data/lib/epuber/compiler/nav_generator.rb +201 -0
  42. data/lib/epuber/compiler/opf_generator.rb +284 -0
  43. data/lib/epuber/compiler/xhtml_processor.rb +254 -0
  44. data/lib/epuber/config.rb +133 -0
  45. data/lib/epuber/dsl/attribute.rb +248 -0
  46. data/lib/epuber/dsl/attribute_support.rb +130 -0
  47. data/lib/epuber/dsl/object.rb +145 -0
  48. data/lib/epuber/dsl/tree_object.rb +101 -0
  49. data/lib/epuber/helper.rb +19 -0
  50. data/lib/epuber/lockfile.rb +55 -0
  51. data/lib/epuber/plugin.rb +108 -0
  52. data/lib/epuber/ruby_extensions/match_data.rb +40 -0
  53. data/lib/epuber/ruby_extensions/thread.rb +13 -0
  54. data/lib/epuber/server.rb +614 -0
  55. data/lib/epuber/server/auto_refresh/auto_refresh.coffee +97 -0
  56. data/lib/epuber/server/auto_refresh/connector.coffee +125 -0
  57. data/lib/epuber/server/auto_refresh/protocol.coffee +41 -0
  58. data/lib/epuber/server/auto_refresh/reloader.coffee +261 -0
  59. data/lib/epuber/server/base.styl +3 -0
  60. data/lib/epuber/server/basic.styl +211 -0
  61. data/lib/epuber/server/book_content.styl +39 -0
  62. data/lib/epuber/server/default_cover.png +0 -0
  63. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-Bold.ttf +0 -0
  64. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-BoldItalic.ttf +0 -0
  65. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-Italic.ttf +0 -0
  66. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-Regular.ttf +0 -0
  67. data/lib/epuber/server/handlers.rb +67 -0
  68. data/lib/epuber/server/keyboard_control.coffee +6 -0
  69. data/lib/epuber/server/pages/book.bade +75 -0
  70. data/lib/epuber/server/pages/common.bade +59 -0
  71. data/lib/epuber/server/pages/files.bade +17 -0
  72. data/lib/epuber/server/pages/toc.bade +29 -0
  73. data/lib/epuber/server/support.coffee +10 -0
  74. data/lib/epuber/templates/template.bookspec +143 -0
  75. data/lib/epuber/third_party/bower.rb +22 -0
  76. data/lib/epuber/third_party/bower/bower.json +10 -0
  77. data/lib/epuber/third_party/bower/bower_components/cookies-js/bower.json +10 -0
  78. data/lib/epuber/third_party/bower/bower_components/cookies-js/dist/cookies.d.ts +33 -0
  79. data/lib/epuber/third_party/bower/bower_components/cookies-js/dist/cookies.js +173 -0
  80. data/lib/epuber/third_party/bower/bower_components/cookies-js/dist/cookies.min.js +6 -0
  81. data/lib/epuber/third_party/bower/bower_components/jquery/MIT-LICENSE.txt +21 -0
  82. data/lib/epuber/third_party/bower/bower_components/jquery/bower.json +28 -0
  83. data/lib/epuber/third_party/bower/bower_components/jquery/dist/jquery.js +9210 -0
  84. data/lib/epuber/third_party/bower/bower_components/jquery/dist/jquery.min.js +5 -0
  85. data/lib/epuber/third_party/bower/bower_components/jquery/dist/jquery.min.map +1 -0
  86. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax.js +786 -0
  87. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/jsonp.js +89 -0
  88. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/load.js +75 -0
  89. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  90. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/parseXML.js +28 -0
  91. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/script.js +64 -0
  92. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  93. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  94. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/xhr.js +136 -0
  95. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes.js +11 -0
  96. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/attr.js +141 -0
  97. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/classes.js +158 -0
  98. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/prop.js +94 -0
  99. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/support.js +35 -0
  100. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/val.js +161 -0
  101. data/lib/epuber/third_party/bower/bower_components/jquery/src/callbacks.js +205 -0
  102. data/lib/epuber/third_party/bower/bower_components/jquery/src/core.js +502 -0
  103. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/access.js +60 -0
  104. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/init.js +123 -0
  105. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/parseHTML.js +39 -0
  106. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/ready.js +97 -0
  107. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  108. data/lib/epuber/third_party/bower/bower_components/jquery/src/css.js +450 -0
  109. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/addGetHookIf.js +22 -0
  110. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/curCSS.js +57 -0
  111. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  112. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  113. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/support.js +96 -0
  114. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/swap.js +28 -0
  115. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  116. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/getStyles.js +12 -0
  117. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/isHidden.js +13 -0
  118. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/rmargin.js +3 -0
  119. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  120. data/lib/epuber/third_party/bower/bower_components/jquery/src/data.js +178 -0
  121. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/Data.js +181 -0
  122. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/accepts.js +20 -0
  123. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/var/data_priv.js +5 -0
  124. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/var/data_user.js +5 -0
  125. data/lib/epuber/third_party/bower/bower_components/jquery/src/deferred.js +149 -0
  126. data/lib/epuber/third_party/bower/bower_components/jquery/src/deprecated.js +13 -0
  127. data/lib/epuber/third_party/bower/bower_components/jquery/src/dimensions.js +50 -0
  128. data/lib/epuber/third_party/bower/bower_components/jquery/src/effects.js +648 -0
  129. data/lib/epuber/third_party/bower/bower_components/jquery/src/effects/Tween.js +114 -0
  130. data/lib/epuber/third_party/bower/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  131. data/lib/epuber/third_party/bower/bower_components/jquery/src/event.js +868 -0
  132. data/lib/epuber/third_party/bower/bower_components/jquery/src/event/ajax.js +13 -0
  133. data/lib/epuber/third_party/bower/bower_components/jquery/src/event/alias.js +39 -0
  134. data/lib/epuber/third_party/bower/bower_components/jquery/src/event/support.js +9 -0
  135. data/lib/epuber/third_party/bower/bower_components/jquery/src/exports/amd.js +24 -0
  136. data/lib/epuber/third_party/bower/bower_components/jquery/src/exports/global.js +32 -0
  137. data/lib/epuber/third_party/bower/bower_components/jquery/src/intro.js +44 -0
  138. data/lib/epuber/third_party/bower/bower_components/jquery/src/jquery.js +37 -0
  139. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation.js +580 -0
  140. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  141. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation/support.js +32 -0
  142. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  143. data/lib/epuber/third_party/bower/bower_components/jquery/src/offset.js +207 -0
  144. data/lib/epuber/third_party/bower/bower_components/jquery/src/outro.js +1 -0
  145. data/lib/epuber/third_party/bower/bower_components/jquery/src/queue.js +142 -0
  146. data/lib/epuber/third_party/bower/bower_components/jquery/src/queue/delay.js +22 -0
  147. data/lib/epuber/third_party/bower/bower_components/jquery/src/selector-native.js +172 -0
  148. data/lib/epuber/third_party/bower/bower_components/jquery/src/selector-sizzle.js +14 -0
  149. data/lib/epuber/third_party/bower/bower_components/jquery/src/selector.js +1 -0
  150. data/lib/epuber/third_party/bower/bower_components/jquery/src/serialize.js +111 -0
  151. data/lib/epuber/third_party/bower/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  152. data/lib/epuber/third_party/bower/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  153. data/lib/epuber/third_party/bower/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  154. data/lib/epuber/third_party/bower/bower_components/jquery/src/traversing.js +199 -0
  155. data/lib/epuber/third_party/bower/bower_components/jquery/src/traversing/findFilter.js +100 -0
  156. data/lib/epuber/third_party/bower/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  157. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/arr.js +3 -0
  158. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/class2type.js +4 -0
  159. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/concat.js +5 -0
  160. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/hasOwn.js +5 -0
  161. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/indexOf.js +5 -0
  162. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/pnum.js +3 -0
  163. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/push.js +5 -0
  164. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/rnotwhite.js +3 -0
  165. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/slice.js +5 -0
  166. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/strundefined.js +3 -0
  167. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/support.js +4 -0
  168. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/toString.js +5 -0
  169. data/lib/epuber/third_party/bower/bower_components/jquery/src/wrap.js +79 -0
  170. data/lib/epuber/third_party/bower/bower_components/keymaster/MIT-LICENSE +20 -0
  171. data/lib/epuber/third_party/bower/bower_components/keymaster/Makefile +4 -0
  172. data/lib/epuber/third_party/bower/bower_components/keymaster/README.markdown +212 -0
  173. data/lib/epuber/third_party/bower/bower_components/keymaster/bower.json +27 -0
  174. data/lib/epuber/third_party/bower/bower_components/keymaster/keymaster.js +296 -0
  175. data/lib/epuber/third_party/bower/bower_components/keymaster/package.json +11 -0
  176. data/lib/epuber/third_party/bower/bower_components/keymaster/test.html +93 -0
  177. data/lib/epuber/third_party/bower/bower_components/spin.js/LICENSE.txt +21 -0
  178. data/lib/epuber/third_party/bower/bower_components/spin.js/README.md +21 -0
  179. data/lib/epuber/third_party/bower/bower_components/spin.js/bower.json +18 -0
  180. data/lib/epuber/third_party/bower/bower_components/spin.js/jquery.spin.js +80 -0
  181. data/lib/epuber/third_party/bower/bower_components/spin.js/spin.js +337 -0
  182. data/lib/epuber/third_party/bower/bower_components/uri.js/LICENSE.txt +21 -0
  183. data/lib/epuber/third_party/bower/bower_components/uri.js/README.md +534 -0
  184. data/lib/epuber/third_party/bower/bower_components/uri.js/bower.json +16 -0
  185. data/lib/epuber/third_party/bower/bower_components/uri.js/contributing.md +19 -0
  186. data/lib/epuber/third_party/bower/bower_components/uri.js/src/IPv6.js +188 -0
  187. data/lib/epuber/third_party/bower/bower_components/uri.js/src/SecondLevelDomains.js +241 -0
  188. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.fragmentQuery.js +104 -0
  189. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.fragmentURI.js +97 -0
  190. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.js +2115 -0
  191. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.min.js +86 -0
  192. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URITemplate.js +499 -0
  193. data/lib/epuber/third_party/bower/bower_components/uri.js/src/jquery.URI.js +235 -0
  194. data/lib/epuber/third_party/bower/bower_components/uri.js/src/jquery.URI.min.js +7 -0
  195. data/lib/epuber/third_party/bower/bower_components/uri.js/src/punycode.js +508 -0
  196. data/lib/epuber/transformer.rb +19 -0
  197. data/lib/epuber/transformer/text_transformer.rb +60 -0
  198. data/lib/epuber/user_interface.rb +186 -0
  199. data/lib/epuber/vendor/globals_context.rb +26 -0
  200. data/lib/epuber/vendor/hash_binding.rb +26 -0
  201. data/lib/epuber/vendor/nokogiri_extensions.rb +30 -0
  202. data/lib/epuber/vendor/ruby_templater.rb +71 -0
  203. data/lib/epuber/vendor/size.rb +20 -0
  204. data/lib/epuber/vendor/version.rb +83 -0
  205. data/lib/epuber/version.rb +4 -0
  206. metadata +556 -0
@@ -0,0 +1,181 @@
1
+ define([
2
+ "../core",
3
+ "../var/rnotwhite",
4
+ "./accepts"
5
+ ], function( jQuery, rnotwhite ) {
6
+
7
+ function Data() {
8
+ // Support: Android<4,
9
+ // Old WebKit does not have Object.preventExtensions/freeze method,
10
+ // return new empty object instead with no [[set]] accessor
11
+ Object.defineProperty( this.cache = {}, 0, {
12
+ get: function() {
13
+ return {};
14
+ }
15
+ });
16
+
17
+ this.expando = jQuery.expando + Data.uid++;
18
+ }
19
+
20
+ Data.uid = 1;
21
+ Data.accepts = jQuery.acceptData;
22
+
23
+ Data.prototype = {
24
+ key: function( owner ) {
25
+ // We can accept data for non-element nodes in modern browsers,
26
+ // but we should not, see #8335.
27
+ // Always return the key for a frozen object.
28
+ if ( !Data.accepts( owner ) ) {
29
+ return 0;
30
+ }
31
+
32
+ var descriptor = {},
33
+ // Check if the owner object already has a cache key
34
+ unlock = owner[ this.expando ];
35
+
36
+ // If not, create one
37
+ if ( !unlock ) {
38
+ unlock = Data.uid++;
39
+
40
+ // Secure it in a non-enumerable, non-writable property
41
+ try {
42
+ descriptor[ this.expando ] = { value: unlock };
43
+ Object.defineProperties( owner, descriptor );
44
+
45
+ // Support: Android<4
46
+ // Fallback to a less secure definition
47
+ } catch ( e ) {
48
+ descriptor[ this.expando ] = unlock;
49
+ jQuery.extend( owner, descriptor );
50
+ }
51
+ }
52
+
53
+ // Ensure the cache object
54
+ if ( !this.cache[ unlock ] ) {
55
+ this.cache[ unlock ] = {};
56
+ }
57
+
58
+ return unlock;
59
+ },
60
+ set: function( owner, data, value ) {
61
+ var prop,
62
+ // There may be an unlock assigned to this node,
63
+ // if there is no entry for this "owner", create one inline
64
+ // and set the unlock as though an owner entry had always existed
65
+ unlock = this.key( owner ),
66
+ cache = this.cache[ unlock ];
67
+
68
+ // Handle: [ owner, key, value ] args
69
+ if ( typeof data === "string" ) {
70
+ cache[ data ] = value;
71
+
72
+ // Handle: [ owner, { properties } ] args
73
+ } else {
74
+ // Fresh assignments by object are shallow copied
75
+ if ( jQuery.isEmptyObject( cache ) ) {
76
+ jQuery.extend( this.cache[ unlock ], data );
77
+ // Otherwise, copy the properties one-by-one to the cache object
78
+ } else {
79
+ for ( prop in data ) {
80
+ cache[ prop ] = data[ prop ];
81
+ }
82
+ }
83
+ }
84
+ return cache;
85
+ },
86
+ get: function( owner, key ) {
87
+ // Either a valid cache is found, or will be created.
88
+ // New caches will be created and the unlock returned,
89
+ // allowing direct access to the newly created
90
+ // empty data object. A valid owner object must be provided.
91
+ var cache = this.cache[ this.key( owner ) ];
92
+
93
+ return key === undefined ?
94
+ cache : cache[ key ];
95
+ },
96
+ access: function( owner, key, value ) {
97
+ var stored;
98
+ // In cases where either:
99
+ //
100
+ // 1. No key was specified
101
+ // 2. A string key was specified, but no value provided
102
+ //
103
+ // Take the "read" path and allow the get method to determine
104
+ // which value to return, respectively either:
105
+ //
106
+ // 1. The entire cache object
107
+ // 2. The data stored at the key
108
+ //
109
+ if ( key === undefined ||
110
+ ((key && typeof key === "string") && value === undefined) ) {
111
+
112
+ stored = this.get( owner, key );
113
+
114
+ return stored !== undefined ?
115
+ stored : this.get( owner, jQuery.camelCase(key) );
116
+ }
117
+
118
+ // [*]When the key is not a string, or both a key and value
119
+ // are specified, set or extend (existing objects) with either:
120
+ //
121
+ // 1. An object of properties
122
+ // 2. A key and value
123
+ //
124
+ this.set( owner, key, value );
125
+
126
+ // Since the "set" path can have two possible entry points
127
+ // return the expected data based on which path was taken[*]
128
+ return value !== undefined ? value : key;
129
+ },
130
+ remove: function( owner, key ) {
131
+ var i, name, camel,
132
+ unlock = this.key( owner ),
133
+ cache = this.cache[ unlock ];
134
+
135
+ if ( key === undefined ) {
136
+ this.cache[ unlock ] = {};
137
+
138
+ } else {
139
+ // Support array or space separated string of keys
140
+ if ( jQuery.isArray( key ) ) {
141
+ // If "name" is an array of keys...
142
+ // When data is initially created, via ("key", "val") signature,
143
+ // keys will be converted to camelCase.
144
+ // Since there is no way to tell _how_ a key was added, remove
145
+ // both plain key and camelCase key. #12786
146
+ // This will only penalize the array argument path.
147
+ name = key.concat( key.map( jQuery.camelCase ) );
148
+ } else {
149
+ camel = jQuery.camelCase( key );
150
+ // Try the string as a key before any manipulation
151
+ if ( key in cache ) {
152
+ name = [ key, camel ];
153
+ } else {
154
+ // If a key with the spaces exists, use it.
155
+ // Otherwise, create an array by matching non-whitespace
156
+ name = camel;
157
+ name = name in cache ?
158
+ [ name ] : ( name.match( rnotwhite ) || [] );
159
+ }
160
+ }
161
+
162
+ i = name.length;
163
+ while ( i-- ) {
164
+ delete cache[ name[ i ] ];
165
+ }
166
+ }
167
+ },
168
+ hasData: function( owner ) {
169
+ return !jQuery.isEmptyObject(
170
+ this.cache[ owner[ this.expando ] ] || {}
171
+ );
172
+ },
173
+ discard: function( owner ) {
174
+ if ( owner[ this.expando ] ) {
175
+ delete this.cache[ owner[ this.expando ] ];
176
+ }
177
+ }
178
+ };
179
+
180
+ return Data;
181
+ });
@@ -0,0 +1,20 @@
1
+ define([
2
+ "../core"
3
+ ], function( jQuery ) {
4
+
5
+ /**
6
+ * Determines whether an object can have data
7
+ */
8
+ jQuery.acceptData = function( owner ) {
9
+ // Accepts only:
10
+ // - Node
11
+ // - Node.ELEMENT_NODE
12
+ // - Node.DOCUMENT_NODE
13
+ // - Object
14
+ // - Any
15
+ /* jshint -W018 */
16
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
17
+ };
18
+
19
+ return jQuery.acceptData;
20
+ });
@@ -0,0 +1,5 @@
1
+ define([
2
+ "../Data"
3
+ ], function( Data ) {
4
+ return new Data();
5
+ });
@@ -0,0 +1,5 @@
1
+ define([
2
+ "../Data"
3
+ ], function( Data ) {
4
+ return new Data();
5
+ });
@@ -0,0 +1,149 @@
1
+ define([
2
+ "./core",
3
+ "./var/slice",
4
+ "./callbacks"
5
+ ], function( jQuery, slice ) {
6
+
7
+ jQuery.extend({
8
+
9
+ Deferred: function( func ) {
10
+ var tuples = [
11
+ // action, add listener, listener list, final state
12
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
13
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
14
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
15
+ ],
16
+ state = "pending",
17
+ promise = {
18
+ state: function() {
19
+ return state;
20
+ },
21
+ always: function() {
22
+ deferred.done( arguments ).fail( arguments );
23
+ return this;
24
+ },
25
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
26
+ var fns = arguments;
27
+ return jQuery.Deferred(function( newDefer ) {
28
+ jQuery.each( tuples, function( i, tuple ) {
29
+ var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
30
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
31
+ deferred[ tuple[1] ](function() {
32
+ var returned = fn && fn.apply( this, arguments );
33
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
34
+ returned.promise()
35
+ .done( newDefer.resolve )
36
+ .fail( newDefer.reject )
37
+ .progress( newDefer.notify );
38
+ } else {
39
+ newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
40
+ }
41
+ });
42
+ });
43
+ fns = null;
44
+ }).promise();
45
+ },
46
+ // Get a promise for this deferred
47
+ // If obj is provided, the promise aspect is added to the object
48
+ promise: function( obj ) {
49
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
50
+ }
51
+ },
52
+ deferred = {};
53
+
54
+ // Keep pipe for back-compat
55
+ promise.pipe = promise.then;
56
+
57
+ // Add list-specific methods
58
+ jQuery.each( tuples, function( i, tuple ) {
59
+ var list = tuple[ 2 ],
60
+ stateString = tuple[ 3 ];
61
+
62
+ // promise[ done | fail | progress ] = list.add
63
+ promise[ tuple[1] ] = list.add;
64
+
65
+ // Handle state
66
+ if ( stateString ) {
67
+ list.add(function() {
68
+ // state = [ resolved | rejected ]
69
+ state = stateString;
70
+
71
+ // [ reject_list | resolve_list ].disable; progress_list.lock
72
+ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
73
+ }
74
+
75
+ // deferred[ resolve | reject | notify ]
76
+ deferred[ tuple[0] ] = function() {
77
+ deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
78
+ return this;
79
+ };
80
+ deferred[ tuple[0] + "With" ] = list.fireWith;
81
+ });
82
+
83
+ // Make the deferred a promise
84
+ promise.promise( deferred );
85
+
86
+ // Call given func if any
87
+ if ( func ) {
88
+ func.call( deferred, deferred );
89
+ }
90
+
91
+ // All done!
92
+ return deferred;
93
+ },
94
+
95
+ // Deferred helper
96
+ when: function( subordinate /* , ..., subordinateN */ ) {
97
+ var i = 0,
98
+ resolveValues = slice.call( arguments ),
99
+ length = resolveValues.length,
100
+
101
+ // the count of uncompleted subordinates
102
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
103
+
104
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
105
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
106
+
107
+ // Update function for both resolve and progress values
108
+ updateFunc = function( i, contexts, values ) {
109
+ return function( value ) {
110
+ contexts[ i ] = this;
111
+ values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
112
+ if ( values === progressValues ) {
113
+ deferred.notifyWith( contexts, values );
114
+ } else if ( !( --remaining ) ) {
115
+ deferred.resolveWith( contexts, values );
116
+ }
117
+ };
118
+ },
119
+
120
+ progressValues, progressContexts, resolveContexts;
121
+
122
+ // Add listeners to Deferred subordinates; treat others as resolved
123
+ if ( length > 1 ) {
124
+ progressValues = new Array( length );
125
+ progressContexts = new Array( length );
126
+ resolveContexts = new Array( length );
127
+ for ( ; i < length; i++ ) {
128
+ if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
129
+ resolveValues[ i ].promise()
130
+ .done( updateFunc( i, resolveContexts, resolveValues ) )
131
+ .fail( deferred.reject )
132
+ .progress( updateFunc( i, progressContexts, progressValues ) );
133
+ } else {
134
+ --remaining;
135
+ }
136
+ }
137
+ }
138
+
139
+ // If we're not waiting on anything, resolve the master
140
+ if ( !remaining ) {
141
+ deferred.resolveWith( resolveContexts, resolveValues );
142
+ }
143
+
144
+ return deferred.promise();
145
+ }
146
+ });
147
+
148
+ return jQuery;
149
+ });
@@ -0,0 +1,13 @@
1
+ define([
2
+ "./core",
3
+ "./traversing"
4
+ ], function( jQuery ) {
5
+
6
+ // The number of elements contained in the matched element set
7
+ jQuery.fn.size = function() {
8
+ return this.length;
9
+ };
10
+
11
+ jQuery.fn.andSelf = jQuery.fn.addBack;
12
+
13
+ });
@@ -0,0 +1,50 @@
1
+ define([
2
+ "./core",
3
+ "./core/access",
4
+ "./css"
5
+ ], function( jQuery, access ) {
6
+
7
+ // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
8
+ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
9
+ jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
10
+ // Margin is only for outerHeight, outerWidth
11
+ jQuery.fn[ funcName ] = function( margin, value ) {
12
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
13
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
14
+
15
+ return access( this, function( elem, type, value ) {
16
+ var doc;
17
+
18
+ if ( jQuery.isWindow( elem ) ) {
19
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
20
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
21
+ // https://github.com/jquery/jquery/pull/764
22
+ return elem.document.documentElement[ "client" + name ];
23
+ }
24
+
25
+ // Get document width or height
26
+ if ( elem.nodeType === 9 ) {
27
+ doc = elem.documentElement;
28
+
29
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
30
+ // whichever is greatest
31
+ return Math.max(
32
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
33
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
34
+ doc[ "client" + name ]
35
+ );
36
+ }
37
+
38
+ return value === undefined ?
39
+ // Get width or height on the element, requesting but not forcing parseFloat
40
+ jQuery.css( elem, type, extra ) :
41
+
42
+ // Set width or height on the element
43
+ jQuery.style( elem, type, value, extra );
44
+ }, type, chainable ? margin : undefined, chainable, null );
45
+ };
46
+ });
47
+ });
48
+
49
+ return jQuery;
50
+ });
@@ -0,0 +1,648 @@
1
+ define([
2
+ "./core",
3
+ "./var/pnum",
4
+ "./css/var/cssExpand",
5
+ "./css/var/isHidden",
6
+ "./css/defaultDisplay",
7
+ "./data/var/data_priv",
8
+
9
+ "./core/init",
10
+ "./effects/Tween",
11
+ "./queue",
12
+ "./css",
13
+ "./deferred",
14
+ "./traversing"
15
+ ], function( jQuery, pnum, cssExpand, isHidden, defaultDisplay, data_priv ) {
16
+
17
+ var
18
+ fxNow, timerId,
19
+ rfxtypes = /^(?:toggle|show|hide)$/,
20
+ rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
21
+ rrun = /queueHooks$/,
22
+ animationPrefilters = [ defaultPrefilter ],
23
+ tweeners = {
24
+ "*": [ function( prop, value ) {
25
+ var tween = this.createTween( prop, value ),
26
+ target = tween.cur(),
27
+ parts = rfxnum.exec( value ),
28
+ unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
29
+
30
+ // Starting value computation is required for potential unit mismatches
31
+ start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
32
+ rfxnum.exec( jQuery.css( tween.elem, prop ) ),
33
+ scale = 1,
34
+ maxIterations = 20;
35
+
36
+ if ( start && start[ 3 ] !== unit ) {
37
+ // Trust units reported by jQuery.css
38
+ unit = unit || start[ 3 ];
39
+
40
+ // Make sure we update the tween properties later on
41
+ parts = parts || [];
42
+
43
+ // Iteratively approximate from a nonzero starting point
44
+ start = +target || 1;
45
+
46
+ do {
47
+ // If previous iteration zeroed out, double until we get *something*.
48
+ // Use string for doubling so we don't accidentally see scale as unchanged below
49
+ scale = scale || ".5";
50
+
51
+ // Adjust and apply
52
+ start = start / scale;
53
+ jQuery.style( tween.elem, prop, start + unit );
54
+
55
+ // Update scale, tolerating zero or NaN from tween.cur(),
56
+ // break the loop if scale is unchanged or perfect, or if we've just had enough
57
+ } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
58
+ }
59
+
60
+ // Update tween properties
61
+ if ( parts ) {
62
+ start = tween.start = +start || +target || 0;
63
+ tween.unit = unit;
64
+ // If a +=/-= token was provided, we're doing a relative animation
65
+ tween.end = parts[ 1 ] ?
66
+ start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
67
+ +parts[ 2 ];
68
+ }
69
+
70
+ return tween;
71
+ } ]
72
+ };
73
+
74
+ // Animations created synchronously will run synchronously
75
+ function createFxNow() {
76
+ setTimeout(function() {
77
+ fxNow = undefined;
78
+ });
79
+ return ( fxNow = jQuery.now() );
80
+ }
81
+
82
+ // Generate parameters to create a standard animation
83
+ function genFx( type, includeWidth ) {
84
+ var which,
85
+ i = 0,
86
+ attrs = { height: type };
87
+
88
+ // If we include width, step value is 1 to do all cssExpand values,
89
+ // otherwise step value is 2 to skip over Left and Right
90
+ includeWidth = includeWidth ? 1 : 0;
91
+ for ( ; i < 4 ; i += 2 - includeWidth ) {
92
+ which = cssExpand[ i ];
93
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
94
+ }
95
+
96
+ if ( includeWidth ) {
97
+ attrs.opacity = attrs.width = type;
98
+ }
99
+
100
+ return attrs;
101
+ }
102
+
103
+ function createTween( value, prop, animation ) {
104
+ var tween,
105
+ collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
106
+ index = 0,
107
+ length = collection.length;
108
+ for ( ; index < length; index++ ) {
109
+ if ( (tween = collection[ index ].call( animation, prop, value )) ) {
110
+
111
+ // We're done with this property
112
+ return tween;
113
+ }
114
+ }
115
+ }
116
+
117
+ function defaultPrefilter( elem, props, opts ) {
118
+ /* jshint validthis: true */
119
+ var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
120
+ anim = this,
121
+ orig = {},
122
+ style = elem.style,
123
+ hidden = elem.nodeType && isHidden( elem ),
124
+ dataShow = data_priv.get( elem, "fxshow" );
125
+
126
+ // Handle queue: false promises
127
+ if ( !opts.queue ) {
128
+ hooks = jQuery._queueHooks( elem, "fx" );
129
+ if ( hooks.unqueued == null ) {
130
+ hooks.unqueued = 0;
131
+ oldfire = hooks.empty.fire;
132
+ hooks.empty.fire = function() {
133
+ if ( !hooks.unqueued ) {
134
+ oldfire();
135
+ }
136
+ };
137
+ }
138
+ hooks.unqueued++;
139
+
140
+ anim.always(function() {
141
+ // Ensure the complete handler is called before this completes
142
+ anim.always(function() {
143
+ hooks.unqueued--;
144
+ if ( !jQuery.queue( elem, "fx" ).length ) {
145
+ hooks.empty.fire();
146
+ }
147
+ });
148
+ });
149
+ }
150
+
151
+ // Height/width overflow pass
152
+ if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
153
+ // Make sure that nothing sneaks out
154
+ // Record all 3 overflow attributes because IE9-10 do not
155
+ // change the overflow attribute when overflowX and
156
+ // overflowY are set to the same value
157
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
158
+
159
+ // Set display property to inline-block for height/width
160
+ // animations on inline elements that are having width/height animated
161
+ display = jQuery.css( elem, "display" );
162
+
163
+ // Test default display if display is currently "none"
164
+ checkDisplay = display === "none" ?
165
+ data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
166
+
167
+ if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
168
+ style.display = "inline-block";
169
+ }
170
+ }
171
+
172
+ if ( opts.overflow ) {
173
+ style.overflow = "hidden";
174
+ anim.always(function() {
175
+ style.overflow = opts.overflow[ 0 ];
176
+ style.overflowX = opts.overflow[ 1 ];
177
+ style.overflowY = opts.overflow[ 2 ];
178
+ });
179
+ }
180
+
181
+ // show/hide pass
182
+ for ( prop in props ) {
183
+ value = props[ prop ];
184
+ if ( rfxtypes.exec( value ) ) {
185
+ delete props[ prop ];
186
+ toggle = toggle || value === "toggle";
187
+ if ( value === ( hidden ? "hide" : "show" ) ) {
188
+
189
+ // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
190
+ if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
191
+ hidden = true;
192
+ } else {
193
+ continue;
194
+ }
195
+ }
196
+ orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
197
+
198
+ // Any non-fx value stops us from restoring the original display value
199
+ } else {
200
+ display = undefined;
201
+ }
202
+ }
203
+
204
+ if ( !jQuery.isEmptyObject( orig ) ) {
205
+ if ( dataShow ) {
206
+ if ( "hidden" in dataShow ) {
207
+ hidden = dataShow.hidden;
208
+ }
209
+ } else {
210
+ dataShow = data_priv.access( elem, "fxshow", {} );
211
+ }
212
+
213
+ // Store state if its toggle - enables .stop().toggle() to "reverse"
214
+ if ( toggle ) {
215
+ dataShow.hidden = !hidden;
216
+ }
217
+ if ( hidden ) {
218
+ jQuery( elem ).show();
219
+ } else {
220
+ anim.done(function() {
221
+ jQuery( elem ).hide();
222
+ });
223
+ }
224
+ anim.done(function() {
225
+ var prop;
226
+
227
+ data_priv.remove( elem, "fxshow" );
228
+ for ( prop in orig ) {
229
+ jQuery.style( elem, prop, orig[ prop ] );
230
+ }
231
+ });
232
+ for ( prop in orig ) {
233
+ tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
234
+
235
+ if ( !( prop in dataShow ) ) {
236
+ dataShow[ prop ] = tween.start;
237
+ if ( hidden ) {
238
+ tween.end = tween.start;
239
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
240
+ }
241
+ }
242
+ }
243
+
244
+ // If this is a noop like .hide().hide(), restore an overwritten display value
245
+ } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
246
+ style.display = display;
247
+ }
248
+ }
249
+
250
+ function propFilter( props, specialEasing ) {
251
+ var index, name, easing, value, hooks;
252
+
253
+ // camelCase, specialEasing and expand cssHook pass
254
+ for ( index in props ) {
255
+ name = jQuery.camelCase( index );
256
+ easing = specialEasing[ name ];
257
+ value = props[ index ];
258
+ if ( jQuery.isArray( value ) ) {
259
+ easing = value[ 1 ];
260
+ value = props[ index ] = value[ 0 ];
261
+ }
262
+
263
+ if ( index !== name ) {
264
+ props[ name ] = value;
265
+ delete props[ index ];
266
+ }
267
+
268
+ hooks = jQuery.cssHooks[ name ];
269
+ if ( hooks && "expand" in hooks ) {
270
+ value = hooks.expand( value );
271
+ delete props[ name ];
272
+
273
+ // Not quite $.extend, this won't overwrite existing keys.
274
+ // Reusing 'index' because we have the correct "name"
275
+ for ( index in value ) {
276
+ if ( !( index in props ) ) {
277
+ props[ index ] = value[ index ];
278
+ specialEasing[ index ] = easing;
279
+ }
280
+ }
281
+ } else {
282
+ specialEasing[ name ] = easing;
283
+ }
284
+ }
285
+ }
286
+
287
+ function Animation( elem, properties, options ) {
288
+ var result,
289
+ stopped,
290
+ index = 0,
291
+ length = animationPrefilters.length,
292
+ deferred = jQuery.Deferred().always( function() {
293
+ // Don't match elem in the :animated selector
294
+ delete tick.elem;
295
+ }),
296
+ tick = function() {
297
+ if ( stopped ) {
298
+ return false;
299
+ }
300
+ var currentTime = fxNow || createFxNow(),
301
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
302
+ // Support: Android 2.3
303
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
304
+ temp = remaining / animation.duration || 0,
305
+ percent = 1 - temp,
306
+ index = 0,
307
+ length = animation.tweens.length;
308
+
309
+ for ( ; index < length ; index++ ) {
310
+ animation.tweens[ index ].run( percent );
311
+ }
312
+
313
+ deferred.notifyWith( elem, [ animation, percent, remaining ]);
314
+
315
+ if ( percent < 1 && length ) {
316
+ return remaining;
317
+ } else {
318
+ deferred.resolveWith( elem, [ animation ] );
319
+ return false;
320
+ }
321
+ },
322
+ animation = deferred.promise({
323
+ elem: elem,
324
+ props: jQuery.extend( {}, properties ),
325
+ opts: jQuery.extend( true, { specialEasing: {} }, options ),
326
+ originalProperties: properties,
327
+ originalOptions: options,
328
+ startTime: fxNow || createFxNow(),
329
+ duration: options.duration,
330
+ tweens: [],
331
+ createTween: function( prop, end ) {
332
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
333
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
334
+ animation.tweens.push( tween );
335
+ return tween;
336
+ },
337
+ stop: function( gotoEnd ) {
338
+ var index = 0,
339
+ // If we are going to the end, we want to run all the tweens
340
+ // otherwise we skip this part
341
+ length = gotoEnd ? animation.tweens.length : 0;
342
+ if ( stopped ) {
343
+ return this;
344
+ }
345
+ stopped = true;
346
+ for ( ; index < length ; index++ ) {
347
+ animation.tweens[ index ].run( 1 );
348
+ }
349
+
350
+ // Resolve when we played the last frame; otherwise, reject
351
+ if ( gotoEnd ) {
352
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
353
+ } else {
354
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
355
+ }
356
+ return this;
357
+ }
358
+ }),
359
+ props = animation.props;
360
+
361
+ propFilter( props, animation.opts.specialEasing );
362
+
363
+ for ( ; index < length ; index++ ) {
364
+ result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
365
+ if ( result ) {
366
+ return result;
367
+ }
368
+ }
369
+
370
+ jQuery.map( props, createTween, animation );
371
+
372
+ if ( jQuery.isFunction( animation.opts.start ) ) {
373
+ animation.opts.start.call( elem, animation );
374
+ }
375
+
376
+ jQuery.fx.timer(
377
+ jQuery.extend( tick, {
378
+ elem: elem,
379
+ anim: animation,
380
+ queue: animation.opts.queue
381
+ })
382
+ );
383
+
384
+ // attach callbacks from options
385
+ return animation.progress( animation.opts.progress )
386
+ .done( animation.opts.done, animation.opts.complete )
387
+ .fail( animation.opts.fail )
388
+ .always( animation.opts.always );
389
+ }
390
+
391
+ jQuery.Animation = jQuery.extend( Animation, {
392
+
393
+ tweener: function( props, callback ) {
394
+ if ( jQuery.isFunction( props ) ) {
395
+ callback = props;
396
+ props = [ "*" ];
397
+ } else {
398
+ props = props.split(" ");
399
+ }
400
+
401
+ var prop,
402
+ index = 0,
403
+ length = props.length;
404
+
405
+ for ( ; index < length ; index++ ) {
406
+ prop = props[ index ];
407
+ tweeners[ prop ] = tweeners[ prop ] || [];
408
+ tweeners[ prop ].unshift( callback );
409
+ }
410
+ },
411
+
412
+ prefilter: function( callback, prepend ) {
413
+ if ( prepend ) {
414
+ animationPrefilters.unshift( callback );
415
+ } else {
416
+ animationPrefilters.push( callback );
417
+ }
418
+ }
419
+ });
420
+
421
+ jQuery.speed = function( speed, easing, fn ) {
422
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
423
+ complete: fn || !fn && easing ||
424
+ jQuery.isFunction( speed ) && speed,
425
+ duration: speed,
426
+ easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
427
+ };
428
+
429
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
430
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
431
+
432
+ // Normalize opt.queue - true/undefined/null -> "fx"
433
+ if ( opt.queue == null || opt.queue === true ) {
434
+ opt.queue = "fx";
435
+ }
436
+
437
+ // Queueing
438
+ opt.old = opt.complete;
439
+
440
+ opt.complete = function() {
441
+ if ( jQuery.isFunction( opt.old ) ) {
442
+ opt.old.call( this );
443
+ }
444
+
445
+ if ( opt.queue ) {
446
+ jQuery.dequeue( this, opt.queue );
447
+ }
448
+ };
449
+
450
+ return opt;
451
+ };
452
+
453
+ jQuery.fn.extend({
454
+ fadeTo: function( speed, to, easing, callback ) {
455
+
456
+ // Show any hidden elements after setting opacity to 0
457
+ return this.filter( isHidden ).css( "opacity", 0 ).show()
458
+
459
+ // Animate to the value specified
460
+ .end().animate({ opacity: to }, speed, easing, callback );
461
+ },
462
+ animate: function( prop, speed, easing, callback ) {
463
+ var empty = jQuery.isEmptyObject( prop ),
464
+ optall = jQuery.speed( speed, easing, callback ),
465
+ doAnimation = function() {
466
+ // Operate on a copy of prop so per-property easing won't be lost
467
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
468
+
469
+ // Empty animations, or finishing resolves immediately
470
+ if ( empty || data_priv.get( this, "finish" ) ) {
471
+ anim.stop( true );
472
+ }
473
+ };
474
+ doAnimation.finish = doAnimation;
475
+
476
+ return empty || optall.queue === false ?
477
+ this.each( doAnimation ) :
478
+ this.queue( optall.queue, doAnimation );
479
+ },
480
+ stop: function( type, clearQueue, gotoEnd ) {
481
+ var stopQueue = function( hooks ) {
482
+ var stop = hooks.stop;
483
+ delete hooks.stop;
484
+ stop( gotoEnd );
485
+ };
486
+
487
+ if ( typeof type !== "string" ) {
488
+ gotoEnd = clearQueue;
489
+ clearQueue = type;
490
+ type = undefined;
491
+ }
492
+ if ( clearQueue && type !== false ) {
493
+ this.queue( type || "fx", [] );
494
+ }
495
+
496
+ return this.each(function() {
497
+ var dequeue = true,
498
+ index = type != null && type + "queueHooks",
499
+ timers = jQuery.timers,
500
+ data = data_priv.get( this );
501
+
502
+ if ( index ) {
503
+ if ( data[ index ] && data[ index ].stop ) {
504
+ stopQueue( data[ index ] );
505
+ }
506
+ } else {
507
+ for ( index in data ) {
508
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
509
+ stopQueue( data[ index ] );
510
+ }
511
+ }
512
+ }
513
+
514
+ for ( index = timers.length; index--; ) {
515
+ if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
516
+ timers[ index ].anim.stop( gotoEnd );
517
+ dequeue = false;
518
+ timers.splice( index, 1 );
519
+ }
520
+ }
521
+
522
+ // Start the next in the queue if the last step wasn't forced.
523
+ // Timers currently will call their complete callbacks, which
524
+ // will dequeue but only if they were gotoEnd.
525
+ if ( dequeue || !gotoEnd ) {
526
+ jQuery.dequeue( this, type );
527
+ }
528
+ });
529
+ },
530
+ finish: function( type ) {
531
+ if ( type !== false ) {
532
+ type = type || "fx";
533
+ }
534
+ return this.each(function() {
535
+ var index,
536
+ data = data_priv.get( this ),
537
+ queue = data[ type + "queue" ],
538
+ hooks = data[ type + "queueHooks" ],
539
+ timers = jQuery.timers,
540
+ length = queue ? queue.length : 0;
541
+
542
+ // Enable finishing flag on private data
543
+ data.finish = true;
544
+
545
+ // Empty the queue first
546
+ jQuery.queue( this, type, [] );
547
+
548
+ if ( hooks && hooks.stop ) {
549
+ hooks.stop.call( this, true );
550
+ }
551
+
552
+ // Look for any active animations, and finish them
553
+ for ( index = timers.length; index--; ) {
554
+ if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
555
+ timers[ index ].anim.stop( true );
556
+ timers.splice( index, 1 );
557
+ }
558
+ }
559
+
560
+ // Look for any animations in the old queue and finish them
561
+ for ( index = 0; index < length; index++ ) {
562
+ if ( queue[ index ] && queue[ index ].finish ) {
563
+ queue[ index ].finish.call( this );
564
+ }
565
+ }
566
+
567
+ // Turn off finishing flag
568
+ delete data.finish;
569
+ });
570
+ }
571
+ });
572
+
573
+ jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
574
+ var cssFn = jQuery.fn[ name ];
575
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
576
+ return speed == null || typeof speed === "boolean" ?
577
+ cssFn.apply( this, arguments ) :
578
+ this.animate( genFx( name, true ), speed, easing, callback );
579
+ };
580
+ });
581
+
582
+ // Generate shortcuts for custom animations
583
+ jQuery.each({
584
+ slideDown: genFx("show"),
585
+ slideUp: genFx("hide"),
586
+ slideToggle: genFx("toggle"),
587
+ fadeIn: { opacity: "show" },
588
+ fadeOut: { opacity: "hide" },
589
+ fadeToggle: { opacity: "toggle" }
590
+ }, function( name, props ) {
591
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
592
+ return this.animate( props, speed, easing, callback );
593
+ };
594
+ });
595
+
596
+ jQuery.timers = [];
597
+ jQuery.fx.tick = function() {
598
+ var timer,
599
+ i = 0,
600
+ timers = jQuery.timers;
601
+
602
+ fxNow = jQuery.now();
603
+
604
+ for ( ; i < timers.length; i++ ) {
605
+ timer = timers[ i ];
606
+ // Checks the timer has not already been removed
607
+ if ( !timer() && timers[ i ] === timer ) {
608
+ timers.splice( i--, 1 );
609
+ }
610
+ }
611
+
612
+ if ( !timers.length ) {
613
+ jQuery.fx.stop();
614
+ }
615
+ fxNow = undefined;
616
+ };
617
+
618
+ jQuery.fx.timer = function( timer ) {
619
+ jQuery.timers.push( timer );
620
+ if ( timer() ) {
621
+ jQuery.fx.start();
622
+ } else {
623
+ jQuery.timers.pop();
624
+ }
625
+ };
626
+
627
+ jQuery.fx.interval = 13;
628
+
629
+ jQuery.fx.start = function() {
630
+ if ( !timerId ) {
631
+ timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
632
+ }
633
+ };
634
+
635
+ jQuery.fx.stop = function() {
636
+ clearInterval( timerId );
637
+ timerId = null;
638
+ };
639
+
640
+ jQuery.fx.speeds = {
641
+ slow: 600,
642
+ fast: 200,
643
+ // Default speed
644
+ _default: 400
645
+ };
646
+
647
+ return jQuery;
648
+ });