@qooxdoo/framework 7.0.0-beta.5 → 7.0.0-beta.9

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 (1562) hide show
  1. package/CHANGELOG.md +3 -6
  2. package/Manifest.json +1 -1
  3. package/README.md +9 -3
  4. package/lib/compiler/compile-info.json +50 -48
  5. package/lib/compiler/index.js +6948 -4175
  6. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +1 -1
  7. package/lib/resource/qx/tool/loadsass.js +16 -13
  8. package/lib/resource/qx/tool/schema/compile-1-0-0.json +13 -13
  9. package/lib/resource/qx/tool/website/build/assets/bluebird.min.js +4593 -9
  10. package/lib/resource/qx/tool/website/build/assets/buttons.js +391 -1
  11. package/lib/resource/qx/tool/website/build/assets/fontawesome-all.js +8963 -1
  12. package/lib/resource/qx/tool/website/build/assets/jquery.js +5452 -3
  13. package/lib/resource/qx/tool/website/build/diagnostics/dependson.js +31 -31
  14. package/lib/resource/qx/tool/website/build/diagnostics/requiredby.js +32 -36
  15. package/lib/resource/qx/tool/website/build/scripts/serve.js +87 -66
  16. package/lib/resource/qx/tool/website/src/assets/bluebird.min.js +4593 -9
  17. package/lib/resource/qx/tool/website/src/assets/buttons.js +391 -1
  18. package/lib/resource/qx/tool/website/src/assets/fontawesome-all.js +8963 -1
  19. package/lib/resource/qx/tool/website/src/assets/jquery.js +5452 -3
  20. package/lib/resource/qx/tool/website/src/diagnostics/dependson.js +31 -31
  21. package/lib/resource/qx/tool/website/src/diagnostics/requiredby.js +32 -36
  22. package/lib/resource/qx/tool/website/src/scripts/serve.js +87 -66
  23. package/npm-shrinkwrap.json +7293 -0
  24. package/package.json +19 -4
  25. package/source/class/q.js +4 -2
  26. package/source/class/qx/Annotation.js +48 -57
  27. package/source/class/qx/Bootstrap.js +206 -207
  28. package/source/class/qx/Class.js +602 -504
  29. package/source/class/qx/Interface.js +169 -137
  30. package/source/class/qx/Mixin.js +156 -120
  31. package/source/class/qx/Part.js +48 -77
  32. package/source/class/qx/Promise.js +5891 -4655
  33. package/source/class/qx/Theme.js +200 -134
  34. package/source/class/qx/__init__.js +8 -8
  35. package/source/class/qx/application/AbstractGui.js +20 -32
  36. package/source/class/qx/application/Basic.js +9 -18
  37. package/source/class/qx/application/IApplication.js +6 -10
  38. package/source/class/qx/application/Inline.js +4 -7
  39. package/source/class/qx/application/Mobile.js +22 -45
  40. package/source/class/qx/application/Native.js +8 -19
  41. package/source/class/qx/application/Routing.js +88 -114
  42. package/source/class/qx/application/Standalone.js +4 -9
  43. package/source/class/qx/application/__init__.js +1 -1
  44. package/source/class/qx/bom/AnimationFrame.js +26 -25
  45. package/source/class/qx/bom/Blocker.js +92 -100
  46. package/source/class/qx/bom/Cookie.js +18 -22
  47. package/source/class/qx/bom/Document.js +24 -31
  48. package/source/class/qx/bom/Element.js +65 -51
  49. package/source/class/qx/bom/Event.js +68 -78
  50. package/source/class/qx/bom/FileReader.js +110 -115
  51. package/source/class/qx/bom/Font.js +82 -122
  52. package/source/class/qx/bom/FullScreen.js +32 -41
  53. package/source/class/qx/bom/GeoLocation.js +39 -44
  54. package/source/class/qx/bom/HashHistory.js +58 -64
  55. package/source/class/qx/bom/History.js +61 -89
  56. package/source/class/qx/bom/Html.js +75 -71
  57. package/source/class/qx/bom/IdleCallback.js +20 -23
  58. package/source/class/qx/bom/Iframe.js +37 -69
  59. package/source/class/qx/bom/IframeHistory.js +83 -88
  60. package/source/class/qx/bom/Input.js +50 -66
  61. package/source/class/qx/bom/Label.js +65 -86
  62. package/source/class/qx/bom/Lifecycle.js +7 -9
  63. package/source/class/qx/bom/MediaQuery.js +324 -307
  64. package/source/class/qx/bom/NativeHistory.js +51 -46
  65. package/source/class/qx/bom/Notification.js +41 -47
  66. package/source/class/qx/bom/PageVisibility.js +19 -25
  67. package/source/class/qx/bom/Range.js +20 -30
  68. package/source/class/qx/bom/Selection.js +163 -172
  69. package/source/class/qx/bom/Selector.js +2401 -2181
  70. package/source/class/qx/bom/Shortcut.js +103 -129
  71. package/source/class/qx/bom/Storage.js +9 -8
  72. package/source/class/qx/bom/String.js +285 -290
  73. package/source/class/qx/bom/Style.js +30 -31
  74. package/source/class/qx/bom/Stylesheet.js +36 -60
  75. package/source/class/qx/bom/Template.js +730 -657
  76. package/source/class/qx/bom/Viewport.js +40 -46
  77. package/source/class/qx/bom/Vml.js +43 -28
  78. package/source/class/qx/bom/WebWorker.js +61 -50
  79. package/source/class/qx/bom/Window.js +88 -105
  80. package/source/class/qx/bom/__init__.js +11 -11
  81. package/source/class/qx/bom/client/Browser.js +45 -47
  82. package/source/class/qx/bom/client/Css.js +85 -85
  83. package/source/class/qx/bom/client/CssAnimation.js +41 -49
  84. package/source/class/qx/bom/client/CssTransform.js +21 -29
  85. package/source/class/qx/bom/client/CssTransition.js +9 -12
  86. package/source/class/qx/bom/client/Device.js +45 -45
  87. package/source/class/qx/bom/client/EcmaScript.js +153 -96
  88. package/source/class/qx/bom/client/Engine.js +38 -35
  89. package/source/class/qx/bom/client/Event.js +75 -63
  90. package/source/class/qx/bom/client/Html.js +97 -97
  91. package/source/class/qx/bom/client/Idle.js +4 -6
  92. package/source/class/qx/bom/client/Locale.js +15 -15
  93. package/source/class/qx/bom/client/OperatingSystem.js +89 -106
  94. package/source/class/qx/bom/client/Pdfjs.js +1364 -1067
  95. package/source/class/qx/bom/client/PhoneGap.js +6 -9
  96. package/source/class/qx/bom/client/Plugin.js +93 -97
  97. package/source/class/qx/bom/client/Runtime.js +14 -12
  98. package/source/class/qx/bom/client/Scroll.js +20 -16
  99. package/source/class/qx/bom/client/Stylesheet.js +44 -32
  100. package/source/class/qx/bom/client/Transport.js +38 -41
  101. package/source/class/qx/bom/client/Xml.js +39 -41
  102. package/source/class/qx/bom/client/__init__.js +4 -4
  103. package/source/class/qx/bom/element/Animation.js +15 -12
  104. package/source/class/qx/bom/element/AnimationCss.js +95 -64
  105. package/source/class/qx/bom/element/AnimationHandle.js +22 -29
  106. package/source/class/qx/bom/element/AnimationJs.js +94 -71
  107. package/source/class/qx/bom/element/Attribute.js +119 -134
  108. package/source/class/qx/bom/element/Background.js +35 -35
  109. package/source/class/qx/bom/element/BoxSizing.js +43 -44
  110. package/source/class/qx/bom/element/Class.js +50 -72
  111. package/source/class/qx/bom/element/Clip.js +36 -60
  112. package/source/class/qx/bom/element/Cursor.js +13 -20
  113. package/source/class/qx/bom/element/Dataset.js +33 -31
  114. package/source/class/qx/bom/element/Decoration.js +178 -168
  115. package/source/class/qx/bom/element/Dimension.js +78 -60
  116. package/source/class/qx/bom/element/Location.js +87 -94
  117. package/source/class/qx/bom/element/Opacity.js +42 -44
  118. package/source/class/qx/bom/element/Scroll.js +78 -88
  119. package/source/class/qx/bom/element/Style.js +61 -101
  120. package/source/class/qx/bom/element/Transform.js +38 -56
  121. package/source/class/qx/bom/element/__init__.js +4 -4
  122. package/source/class/qx/bom/media/Abstract.js +136 -143
  123. package/source/class/qx/bom/media/Audio.js +7 -12
  124. package/source/class/qx/bom/media/Video.js +15 -27
  125. package/source/class/qx/bom/request/IRequest.js +18 -21
  126. package/source/class/qx/bom/request/Jsonp.js +34 -39
  127. package/source/class/qx/bom/request/Script.js +94 -90
  128. package/source/class/qx/bom/request/SimpleXhr.js +111 -79
  129. package/source/class/qx/bom/request/Xhr.js +196 -143
  130. package/source/class/qx/bom/request/__init__.js +1 -1
  131. package/source/class/qx/bom/rest/Resource.js +269 -203
  132. package/source/class/qx/bom/storage/Memory.js +18 -29
  133. package/source/class/qx/bom/storage/UserData.js +28 -35
  134. package/source/class/qx/bom/storage/Web.js +19 -30
  135. package/source/class/qx/bom/webfonts/Manager.js +199 -130
  136. package/source/class/qx/bom/webfonts/Validator.js +84 -118
  137. package/source/class/qx/bom/webfonts/WebFont.js +24 -28
  138. package/source/class/qx/bom/webfonts/__init__.js +1 -1
  139. package/source/class/qx/core/Aspect.js +15 -22
  140. package/source/class/qx/core/Assert.js +391 -333
  141. package/source/class/qx/core/AssertionError.js +6 -15
  142. package/source/class/qx/core/BaseInit.js +25 -28
  143. package/source/class/qx/core/Environment.js +72 -86
  144. package/source/class/qx/core/GlobalError.js +12 -20
  145. package/source/class/qx/core/IDisposable.js +6 -9
  146. package/source/class/qx/core/Id.js +25 -15
  147. package/source/class/qx/core/Init.js +20 -20
  148. package/source/class/qx/core/MAssert.js +54 -97
  149. package/source/class/qx/core/MBindTo.js +10 -14
  150. package/source/class/qx/core/MEvent.js +76 -65
  151. package/source/class/qx/core/MLogging.js +9 -18
  152. package/source/class/qx/core/MObjectId.js +104 -65
  153. package/source/class/qx/core/MProperty.js +18 -34
  154. package/source/class/qx/core/Object.js +93 -122
  155. package/source/class/qx/core/ObjectRegistry.js +58 -81
  156. package/source/class/qx/core/Property.js +974 -780
  157. package/source/class/qx/core/ValidationError.js +3 -4
  158. package/source/class/qx/core/WindowError.js +13 -24
  159. package/source/class/qx/core/Wrapper.js +8 -9
  160. package/source/class/qx/data/Array.js +178 -191
  161. package/source/class/qx/data/Conversion.js +11 -18
  162. package/source/class/qx/data/IListData.js +11 -20
  163. package/source/class/qx/data/MBinding.js +31 -26
  164. package/source/class/qx/data/SingleValueBinding.js +491 -225
  165. package/source/class/qx/data/__init__.js +1 -1
  166. package/source/class/qx/data/controller/CheckedList.js +82 -54
  167. package/source/class/qx/data/controller/Form.js +81 -69
  168. package/source/class/qx/data/controller/IControllerDelegate.js +7 -12
  169. package/source/class/qx/data/controller/ISelection.js +6 -10
  170. package/source/class/qx/data/controller/List.js +151 -167
  171. package/source/class/qx/data/controller/MSelection.js +53 -72
  172. package/source/class/qx/data/controller/Object.js +106 -77
  173. package/source/class/qx/data/controller/Tree.js +164 -142
  174. package/source/class/qx/data/controller/__init__.js +1 -1
  175. package/source/class/qx/data/controller/website/List.js +34 -43
  176. package/source/class/qx/data/controller/website/__init__.js +2 -2
  177. package/source/class/qx/data/marshal/IMarshaler.js +4 -7
  178. package/source/class/qx/data/marshal/IMarshalerDelegate.js +10 -18
  179. package/source/class/qx/data/marshal/Json.js +112 -85
  180. package/source/class/qx/data/marshal/MEventBubbling.js +44 -42
  181. package/source/class/qx/data/marshal/__init__.js +1 -1
  182. package/source/class/qx/data/store/IStoreDelegate.js +6 -9
  183. package/source/class/qx/data/store/Json.js +71 -85
  184. package/source/class/qx/data/store/Jsonp.js +19 -25
  185. package/source/class/qx/data/store/Offline.js +21 -29
  186. package/source/class/qx/data/store/Rest.js +25 -23
  187. package/source/class/qx/data/store/__init__.js +1 -1
  188. package/source/class/qx/dev/Debug.js +105 -124
  189. package/source/class/qx/dev/FakeServer.js +68 -65
  190. package/source/class/qx/dev/ObjectSummary.js +33 -39
  191. package/source/class/qx/dev/Profile.js +62 -63
  192. package/source/class/qx/dev/StackTrace.js +64 -70
  193. package/source/class/qx/dev/Tokenizer.js +114 -126
  194. package/source/class/qx/dev/unit/AbstractTestSuite.js +17 -31
  195. package/source/class/qx/dev/unit/AsyncWrapper.js +22 -26
  196. package/source/class/qx/dev/unit/JsUnitTestResult.js +9 -21
  197. package/source/class/qx/dev/unit/MMeasure.js +46 -37
  198. package/source/class/qx/dev/unit/MMock.js +236 -240
  199. package/source/class/qx/dev/unit/MRequirements.js +53 -79
  200. package/source/class/qx/dev/unit/MRequirementsBasic.js +24 -19
  201. package/source/class/qx/dev/unit/MTestLoader.js +52 -57
  202. package/source/class/qx/dev/unit/MeasurementResult.js +18 -22
  203. package/source/class/qx/dev/unit/RequirementError.js +8 -17
  204. package/source/class/qx/dev/unit/Sinon.js +18826 -4613
  205. package/source/class/qx/dev/unit/TestCase.js +40 -51
  206. package/source/class/qx/dev/unit/TestClass.js +22 -23
  207. package/source/class/qx/dev/unit/TestFunction.js +28 -48
  208. package/source/class/qx/dev/unit/TestLoader.js +11 -14
  209. package/source/class/qx/dev/unit/TestLoaderBasic.js +3 -6
  210. package/source/class/qx/dev/unit/TestLoaderInline.js +8 -14
  211. package/source/class/qx/dev/unit/TestLoaderMobile.js +8 -14
  212. package/source/class/qx/dev/unit/TestLoaderNative.js +7 -13
  213. package/source/class/qx/dev/unit/TestResult.js +140 -118
  214. package/source/class/qx/dev/unit/TestSuite.js +46 -55
  215. package/source/class/qx/dom/Element.js +29 -74
  216. package/source/class/qx/dom/Hierarchy.js +60 -95
  217. package/source/class/qx/dom/Node.js +54 -81
  218. package/source/class/qx/dom/__init__.js +9 -9
  219. package/source/class/qx/event/AcceleratingTimer.js +28 -46
  220. package/source/class/qx/event/Emitter.js +54 -49
  221. package/source/class/qx/event/GlobalError.js +22 -38
  222. package/source/class/qx/event/IEventDispatcher.js +4 -9
  223. package/source/class/qx/event/IEventHandler.js +7 -13
  224. package/source/class/qx/event/Idle.js +32 -47
  225. package/source/class/qx/event/Manager.js +222 -237
  226. package/source/class/qx/event/Messaging.js +55 -48
  227. package/source/class/qx/event/Pool.js +5 -8
  228. package/source/class/qx/event/Registration.js +128 -118
  229. package/source/class/qx/event/Timer.js +50 -96
  230. package/source/class/qx/event/Utils.js +41 -28
  231. package/source/class/qx/event/dispatch/AbstractBubbling.js +133 -93
  232. package/source/class/qx/event/dispatch/Direct.js +46 -51
  233. package/source/class/qx/event/dispatch/DomBubbling.js +8 -15
  234. package/source/class/qx/event/dispatch/MouseCapture.js +74 -91
  235. package/source/class/qx/event/handler/Appear.js +40 -77
  236. package/source/class/qx/event/handler/Application.js +100 -126
  237. package/source/class/qx/event/handler/Capture.js +15 -37
  238. package/source/class/qx/event/handler/DragDrop.js +342 -228
  239. package/source/class/qx/event/handler/Element.js +45 -72
  240. package/source/class/qx/event/handler/ElementResize.js +35 -70
  241. package/source/class/qx/event/handler/Focus.js +908 -637
  242. package/source/class/qx/event/handler/Gesture.js +144 -93
  243. package/source/class/qx/event/handler/GestureCore.js +214 -163
  244. package/source/class/qx/event/handler/Iframe.js +21 -35
  245. package/source/class/qx/event/handler/Input.js +332 -209
  246. package/source/class/qx/event/handler/Keyboard.js +325 -270
  247. package/source/class/qx/event/handler/Mouse.js +212 -173
  248. package/source/class/qx/event/handler/Object.js +13 -31
  249. package/source/class/qx/event/handler/Offline.js +52 -67
  250. package/source/class/qx/event/handler/Orientation.js +56 -62
  251. package/source/class/qx/event/handler/OrientationCore.js +33 -43
  252. package/source/class/qx/event/handler/Pointer.js +84 -72
  253. package/source/class/qx/event/handler/PointerCore.js +183 -105
  254. package/source/class/qx/event/handler/Touch.js +43 -59
  255. package/source/class/qx/event/handler/TouchCore.js +159 -120
  256. package/source/class/qx/event/handler/Transition.js +91 -100
  257. package/source/class/qx/event/handler/UserAction.js +18 -42
  258. package/source/class/qx/event/handler/Video.js +12 -12
  259. package/source/class/qx/event/handler/Window.js +53 -69
  260. package/source/class/qx/event/message/Bus.js +109 -128
  261. package/source/class/qx/event/message/Message.js +14 -29
  262. package/source/class/qx/event/type/Data.js +11 -22
  263. package/source/class/qx/event/type/Dom.js +37 -52
  264. package/source/class/qx/event/type/Drag.js +37 -56
  265. package/source/class/qx/event/type/Event.js +80 -104
  266. package/source/class/qx/event/type/Focus.js +5 -8
  267. package/source/class/qx/event/type/GeoPosition.js +32 -41
  268. package/source/class/qx/event/type/KeyInput.js +9 -19
  269. package/source/class/qx/event/type/KeySequence.js +10 -21
  270. package/source/class/qx/event/type/Mouse.js +69 -72
  271. package/source/class/qx/event/type/MouseWheel.js +5 -9
  272. package/source/class/qx/event/type/Native.js +16 -27
  273. package/source/class/qx/event/type/Orientation.js +18 -30
  274. package/source/class/qx/event/type/Pinch.js +21 -27
  275. package/source/class/qx/event/type/Pointer.js +38 -41
  276. package/source/class/qx/event/type/Rest.js +7 -10
  277. package/source/class/qx/event/type/Roll.js +49 -58
  278. package/source/class/qx/event/type/Rotate.js +21 -27
  279. package/source/class/qx/event/type/Swipe.js +75 -86
  280. package/source/class/qx/event/type/Tap.js +2 -4
  281. package/source/class/qx/event/type/Touch.js +262 -286
  282. package/source/class/qx/event/type/Track.js +23 -28
  283. package/source/class/qx/event/type/dom/Custom.js +24 -20
  284. package/source/class/qx/event/type/dom/Pointer.js +86 -60
  285. package/source/class/qx/event/util/Keyboard.js +94 -106
  286. package/source/class/qx/html/Blocker.js +17 -18
  287. package/source/class/qx/html/Canvas.js +13 -29
  288. package/source/class/qx/html/Element.js +372 -497
  289. package/source/class/qx/html/Factory.js +31 -26
  290. package/source/class/qx/html/Iframe.js +35 -69
  291. package/source/class/qx/html/Image.js +43 -55
  292. package/source/class/qx/html/Input.js +44 -57
  293. package/source/class/qx/html/Jsx.js +49 -41
  294. package/source/class/qx/html/JsxRef.js +3 -5
  295. package/source/class/qx/html/Label.js +20 -32
  296. package/source/class/qx/html/Node.js +362 -422
  297. package/source/class/qx/html/Root.js +7 -16
  298. package/source/class/qx/html/Text.js +34 -27
  299. package/source/class/qx/io/ImageLoader.js +66 -90
  300. package/source/class/qx/io/PartLoader.js +17 -30
  301. package/source/class/qx/io/__init__.js +5 -3
  302. package/source/class/qx/io/exception/Cancel.js +33 -0
  303. package/source/class/qx/io/exception/Exception.js +37 -0
  304. package/source/class/qx/io/exception/Protocol.js +25 -0
  305. package/source/class/qx/io/exception/Transport.js +38 -0
  306. package/source/class/qx/io/exception/__init__.js +4 -0
  307. package/source/class/qx/io/graphql/Client.js +122 -0
  308. package/source/class/qx/io/graphql/__init__.js +9 -0
  309. package/source/class/qx/io/graphql/protocol/Message.js +65 -0
  310. package/source/class/qx/io/graphql/protocol/Request.js +93 -0
  311. package/source/class/qx/io/graphql/protocol/Response.js +63 -0
  312. package/source/class/qx/io/graphql/protocol/__init__.js +6 -0
  313. package/source/class/qx/io/jsonrpc/Client.js +355 -0
  314. package/source/class/qx/io/jsonrpc/__init__.js +15 -0
  315. package/source/class/qx/io/jsonrpc/protocol/Batch.js +103 -0
  316. package/source/class/qx/io/jsonrpc/protocol/Error.js +65 -0
  317. package/source/class/qx/io/jsonrpc/protocol/Message.js +48 -0
  318. package/source/class/qx/io/jsonrpc/protocol/Notification.js +47 -0
  319. package/source/class/qx/io/jsonrpc/protocol/Parser.js +105 -0
  320. package/source/class/qx/io/jsonrpc/protocol/Request.js +94 -0
  321. package/source/class/qx/io/jsonrpc/protocol/Result.js +49 -0
  322. package/source/class/qx/io/jsonrpc/protocol/__init__.js +5 -0
  323. package/source/class/qx/io/part/ClosurePart.js +16 -35
  324. package/source/class/qx/io/part/Package.js +35 -63
  325. package/source/class/qx/io/part/Part.js +29 -53
  326. package/source/class/qx/io/part/__init__.js +4 -4
  327. package/source/class/qx/io/request/AbstractRequest.js +268 -201
  328. package/source/class/qx/io/request/Jsonp.js +16 -19
  329. package/source/class/qx/io/request/Xhr.js +38 -37
  330. package/source/class/qx/io/request/__init__.js +1 -1
  331. package/source/class/qx/io/request/authentication/Basic.js +7 -13
  332. package/source/class/qx/io/request/authentication/Bearer.js +46 -0
  333. package/source/class/qx/io/request/authentication/IAuthentication.js +3 -6
  334. package/source/class/qx/io/request/authentication/__init__.js +1 -1
  335. package/source/class/qx/io/rest/Resource.js +122 -90
  336. package/source/class/qx/io/transport/AbstractClient.js +121 -0
  337. package/source/class/qx/io/transport/AbstractTransport.js +40 -0
  338. package/source/class/qx/io/transport/Fetch.js +98 -0
  339. package/source/class/qx/io/transport/ITransport.js +42 -0
  340. package/source/class/qx/io/transport/PostMessage.js +54 -0
  341. package/source/class/qx/io/transport/Websocket.js +97 -0
  342. package/source/class/qx/io/transport/Xhr.js +138 -0
  343. package/source/class/qx/io/transport/__init__.js +18 -0
  344. package/source/class/qx/lang/Array.js +133 -170
  345. package/source/class/qx/lang/Function.js +101 -104
  346. package/source/class/qx/lang/Json.js +1041 -774
  347. package/source/class/qx/lang/Number.js +11 -16
  348. package/source/class/qx/lang/Object.js +129 -100
  349. package/source/class/qx/lang/String.js +86 -94
  350. package/source/class/qx/lang/Type.js +44 -65
  351. package/source/class/qx/lang/normalize/Array.js +39 -49
  352. package/source/class/qx/lang/normalize/Date.js +50 -32
  353. package/source/class/qx/lang/normalize/Error.js +4 -7
  354. package/source/class/qx/lang/normalize/Function.js +11 -19
  355. package/source/class/qx/lang/normalize/Number.js +3 -5
  356. package/source/class/qx/lang/normalize/Object.js +17 -18
  357. package/source/class/qx/lang/normalize/String.js +39 -40
  358. package/source/class/qx/locale/Date.js +175 -178
  359. package/source/class/qx/locale/Key.js +13 -11
  360. package/source/class/qx/locale/LocalizedString.js +18 -15
  361. package/source/class/qx/locale/MTranslation.js +22 -23
  362. package/source/class/qx/locale/Manager.js +62 -100
  363. package/source/class/qx/locale/Number.js +20 -12
  364. package/source/class/qx/locale/String.js +26 -15
  365. package/source/class/qx/log/Logger.js +128 -180
  366. package/source/class/qx/log/__init__.js +3 -3
  367. package/source/class/qx/log/appender/Console.js +100 -111
  368. package/source/class/qx/log/appender/Element.js +25 -39
  369. package/source/class/qx/log/appender/Formatter.js +117 -66
  370. package/source/class/qx/log/appender/Native.js +4 -10
  371. package/source/class/qx/log/appender/NodeConsole.js +20 -28
  372. package/source/class/qx/log/appender/PhoneGap.js +5 -13
  373. package/source/class/qx/log/appender/RhinoConsole.js +12 -23
  374. package/source/class/qx/log/appender/RhinoFile.js +19 -26
  375. package/source/class/qx/log/appender/RingBuffer.js +10 -19
  376. package/source/class/qx/log/appender/Util.js +11 -9
  377. package/source/class/qx/module/Animation.js +73 -63
  378. package/source/class/qx/module/Attribute.js +27 -46
  379. package/source/class/qx/module/Blocker.js +33 -41
  380. package/source/class/qx/module/Cookie.js +6 -10
  381. package/source/class/qx/module/Css.js +82 -97
  382. package/source/class/qx/module/Dataset.js +12 -24
  383. package/source/class/qx/module/Environment.js +4 -6
  384. package/source/class/qx/module/Event.js +124 -127
  385. package/source/class/qx/module/Io.js +5 -9
  386. package/source/class/qx/module/Manipulating.js +98 -117
  387. package/source/class/qx/module/MatchMedia.js +50 -24
  388. package/source/class/qx/module/Messaging.js +6 -10
  389. package/source/class/qx/module/Placeholder.js +54 -44
  390. package/source/class/qx/module/Placement.js +33 -33
  391. package/source/class/qx/module/Rest.js +3 -4
  392. package/source/class/qx/module/Storage.js +34 -48
  393. package/source/class/qx/module/Template.js +6 -9
  394. package/source/class/qx/module/TextSelection.js +13 -21
  395. package/source/class/qx/module/Transform.js +28 -45
  396. package/source/class/qx/module/Traversing.js +160 -154
  397. package/source/class/qx/module/__init__.js +1 -1
  398. package/source/class/qx/module/dev/FakeServer.js +19 -25
  399. package/source/class/qx/module/event/GestureHandler.js +25 -13
  400. package/source/class/qx/module/event/Keyboard.js +42 -31
  401. package/source/class/qx/module/event/Mouse.js +48 -46
  402. package/source/class/qx/module/event/Native.js +18 -30
  403. package/source/class/qx/module/event/Orientation.js +11 -18
  404. package/source/class/qx/module/event/OrientationHandler.js +19 -17
  405. package/source/class/qx/module/event/Pinch.js +13 -14
  406. package/source/class/qx/module/event/Pointer.js +22 -22
  407. package/source/class/qx/module/event/PointerHandler.js +14 -11
  408. package/source/class/qx/module/event/Rotate.js +13 -14
  409. package/source/class/qx/module/event/Swipe.js +18 -24
  410. package/source/class/qx/module/event/Tap.js +25 -25
  411. package/source/class/qx/module/event/Touch.js +4 -7
  412. package/source/class/qx/module/event/TouchHandler.js +16 -16
  413. package/source/class/qx/module/event/Track.js +13 -14
  414. package/source/class/qx/module/util/Array.js +30 -41
  415. package/source/class/qx/module/util/Function.js +1 -2
  416. package/source/class/qx/module/util/Object.js +8 -11
  417. package/source/class/qx/module/util/String.js +10 -18
  418. package/source/class/qx/module/util/Type.js +3 -4
  419. package/source/class/qx/test/Annotation.js +195 -89
  420. package/source/class/qx/test/Bootstrap.js +98 -124
  421. package/source/class/qx/test/Browser.js +8 -11
  422. package/source/class/qx/test/Class.js +164 -198
  423. package/source/class/qx/test/Dom.js +10 -28
  424. package/source/class/qx/test/EditDistance.js +16 -16
  425. package/source/class/qx/test/Interface.js +380 -383
  426. package/source/class/qx/test/MAppearance.js +10 -14
  427. package/source/class/qx/test/MDecoration.js +1 -3
  428. package/source/class/qx/test/Mixin.js +418 -173
  429. package/source/class/qx/test/Promise.js +422 -333
  430. package/source/class/qx/test/Theme.js +204 -179
  431. package/source/class/qx/test/Xml.js +155 -84
  432. package/source/class/qx/test/application/Routing.js +45 -44
  433. package/source/class/qx/test/bom/AnimationFrame.js +23 -21
  434. package/source/class/qx/test/bom/Attribute.js +66 -47
  435. package/source/class/qx/test/bom/Basic.js +52 -27
  436. package/source/class/qx/test/bom/Blocker.js +100 -70
  437. package/source/class/qx/test/bom/Class.js +19 -34
  438. package/source/class/qx/test/bom/Cookie.js +49 -28
  439. package/source/class/qx/test/bom/Dataset.js +12 -24
  440. package/source/class/qx/test/bom/Element.js +55 -47
  441. package/source/class/qx/test/bom/Event.js +68 -45
  442. package/source/class/qx/test/bom/FileReader.js +6 -12
  443. package/source/class/qx/test/bom/Font.js +256 -118
  444. package/source/class/qx/test/bom/GeoLocation.js +82 -64
  445. package/source/class/qx/test/bom/History.js +63 -84
  446. package/source/class/qx/test/bom/IdleCallback.js +51 -38
  447. package/source/class/qx/test/bom/Iframe.js +14 -18
  448. package/source/class/qx/test/bom/Label.js +74 -105
  449. package/source/class/qx/test/bom/Location.js +70 -99
  450. package/source/class/qx/test/bom/PageVisibility.js +13 -16
  451. package/source/class/qx/test/bom/Selector.js +16 -16
  452. package/source/class/qx/test/bom/String.js +19 -15
  453. package/source/class/qx/test/bom/Stylesheet.js +39 -48
  454. package/source/class/qx/test/bom/Template.js +49 -57
  455. package/source/class/qx/test/bom/Viewport.js +7 -11
  456. package/source/class/qx/test/bom/WebWorker.js +49 -37
  457. package/source/class/qx/test/bom/Window.js +6 -12
  458. package/source/class/qx/test/bom/client/Css.js +26 -19
  459. package/source/class/qx/test/bom/client/Device.js +29 -18
  460. package/source/class/qx/test/bom/client/OperatingSystem.js +17 -20
  461. package/source/class/qx/test/bom/client/Pdfjs.js +15 -13
  462. package/source/class/qx/test/bom/element/AnimationHandle.js +20 -17
  463. package/source/class/qx/test/bom/element/AnimationJs.js +48 -31
  464. package/source/class/qx/test/bom/element/Background.js +93 -46
  465. package/source/class/qx/test/bom/element/BoxSizing.js +66 -61
  466. package/source/class/qx/test/bom/element/Class.js +33 -58
  467. package/source/class/qx/test/bom/element/Dimension.js +58 -37
  468. package/source/class/qx/test/bom/element/Style.js +87 -83
  469. package/source/class/qx/test/bom/element/Transform.js +209 -86
  470. package/source/class/qx/test/bom/media/Audio.js +18 -14
  471. package/source/class/qx/test/bom/media/MediaTestCase.js +61 -66
  472. package/source/class/qx/test/bom/media/Video.js +39 -28
  473. package/source/class/qx/test/bom/request/Jsonp.js +60 -57
  474. package/source/class/qx/test/bom/request/Script.js +150 -138
  475. package/source/class/qx/test/bom/request/SimpleXhr.js +206 -134
  476. package/source/class/qx/test/bom/request/Xhr.js +179 -132
  477. package/source/class/qx/test/bom/request/XhrWithRemote.js +206 -160
  478. package/source/class/qx/test/bom/rest/Resource.js +345 -281
  479. package/source/class/qx/test/bom/rest/ResourceWithRemote.js +74 -57
  480. package/source/class/qx/test/bom/storage/Local.js +3 -4
  481. package/source/class/qx/test/bom/storage/Session.js +3 -4
  482. package/source/class/qx/test/bom/storage/WebStorageTestCase.js +28 -27
  483. package/source/class/qx/test/bom/webfonts/Abstract.js +8 -10
  484. package/source/class/qx/test/bom/webfonts/Manager.js +127 -80
  485. package/source/class/qx/test/bom/webfonts/Validator.js +36 -30
  486. package/source/class/qx/test/compiler/ClassFile.js +29 -11
  487. package/source/class/qx/test/compiler/jsdoc/Parser.js +122 -96
  488. package/source/class/qx/test/core/Assert.js +151 -86
  489. package/source/class/qx/test/core/Environment.js +162 -123
  490. package/source/class/qx/test/core/EventEmitterDummy.js +7 -8
  491. package/source/class/qx/test/core/InheritanceDummy.js +23 -33
  492. package/source/class/qx/test/core/MemoryManagement.js +13 -5
  493. package/source/class/qx/test/core/Object.js +106 -112
  494. package/source/class/qx/test/core/ObjectId.js +7 -6
  495. package/source/class/qx/test/core/Property.js +483 -387
  496. package/source/class/qx/test/core/PropertyHelper.js +49 -64
  497. package/source/class/qx/test/core/Target.js +9 -13
  498. package/source/class/qx/test/core/Validation.js +409 -136
  499. package/source/class/qx/test/data/DataArray.js +1059 -394
  500. package/source/class/qx/test/data/DataArrayWithChangeBubble.js +315 -172
  501. package/source/class/qx/test/data/__init__.js +4 -4
  502. package/source/class/qx/test/data/controller/Form.js +141 -99
  503. package/source/class/qx/test/data/controller/FormWithArrayAndModel.js +66 -51
  504. package/source/class/qx/test/data/controller/List.js +644 -336
  505. package/source/class/qx/test/data/controller/ListReverse.js +64 -63
  506. package/source/class/qx/test/data/controller/ListWithObjects.js +305 -149
  507. package/source/class/qx/test/data/controller/Object.js +252 -94
  508. package/source/class/qx/test/data/controller/Tree.js +1219 -383
  509. package/source/class/qx/test/data/controller/__init__.js +4 -4
  510. package/source/class/qx/test/data/marshal/Json.js +832 -447
  511. package/source/class/qx/test/data/marshal/__init__.js +4 -4
  512. package/source/class/qx/test/data/singlevalue/Array.js +383 -144
  513. package/source/class/qx/test/data/singlevalue/Deep.js +361 -175
  514. package/source/class/qx/test/data/singlevalue/Resolve.js +51 -29
  515. package/source/class/qx/test/data/singlevalue/Simple.js +530 -208
  516. package/source/class/qx/test/data/singlevalue/TextFieldDummy.js +32 -28
  517. package/source/class/qx/test/data/singlevalue/__init__.js +4 -4
  518. package/source/class/qx/test/data/store/Json.js +574 -313
  519. package/source/class/qx/test/data/store/Jsonp.js +103 -77
  520. package/source/class/qx/test/data/store/Offline.js +127 -110
  521. package/source/class/qx/test/data/store/Rest.js +58 -52
  522. package/source/class/qx/test/data/store/RestWithRemote.js +36 -30
  523. package/source/class/qx/test/data/store/__init__.js +4 -4
  524. package/source/class/qx/test/dev/Debug.js +9 -13
  525. package/source/class/qx/test/dev/StackTrace.js +51 -42
  526. package/source/class/qx/test/dev/unit/Requirements.js +36 -49
  527. package/source/class/qx/test/dev/unit/Sinon.js +85 -73
  528. package/source/class/qx/test/dev/unit/TestCase.js +12 -17
  529. package/source/class/qx/test/dom/Element.js +17 -12
  530. package/source/class/qx/test/dom/Hierarchy.js +53 -38
  531. package/source/class/qx/test/dom/Node.js +97 -43
  532. package/source/class/qx/test/event/Bubbling.js +258 -88
  533. package/source/class/qx/test/event/Emitter.js +38 -39
  534. package/source/class/qx/test/event/GlobalError.js +59 -87
  535. package/source/class/qx/test/event/GlobalEventMonitors.js +22 -25
  536. package/source/class/qx/test/event/Messaging.js +66 -49
  537. package/source/class/qx/test/event/MockBubblingHandler.js +10 -15
  538. package/source/class/qx/test/event/MockHandler.js +14 -33
  539. package/source/class/qx/test/event/Registration.js +38 -32
  540. package/source/class/qx/test/event/Timer.js +61 -39
  541. package/source/class/qx/test/event/Utils.js +164 -123
  542. package/source/class/qx/test/event/dispatch/MouseCapture.js +61 -51
  543. package/source/class/qx/test/event/dispatch/MouseEventOnDocument.js +22 -23
  544. package/source/class/qx/test/event/dispatch/TestingHandler.js +8 -10
  545. package/source/class/qx/test/event/dispatch/TestingWindow.js +9 -13
  546. package/source/class/qx/test/event/dispatch/__init__.js +4 -4
  547. package/source/class/qx/test/event/handler/Offline.js +7 -8
  548. package/source/class/qx/test/event/message/Bus.js +112 -72
  549. package/source/class/qx/test/event/message/__init__.js +4 -4
  550. package/source/class/qx/test/event/type/Dom.js +12 -11
  551. package/source/class/qx/test/event/type/Event.js +7 -16
  552. package/source/class/qx/test/event/type/Mouse.js +12 -11
  553. package/source/class/qx/test/event/type/Native.js +12 -11
  554. package/source/class/qx/test/event/type/__init__.js +4 -4
  555. package/source/class/qx/test/event/util/Keyboard.js +4 -3
  556. package/source/class/qx/test/html/Element.js +538 -239
  557. package/source/class/qx/test/html/Iframe.js +85 -73
  558. package/source/class/qx/test/html/jsx/TestJsx.js +15 -4
  559. package/source/class/qx/test/html/jsx/TestJsxBrowser.js +37 -19
  560. package/source/class/qx/test/html/jsx/TestWidget.js +26 -26
  561. package/source/class/qx/test/io/ImageLoader.js +256 -160
  562. package/source/class/qx/test/io/MAssert.js +46 -0
  563. package/source/class/qx/test/io/MRemoteTest.js +9 -11
  564. package/source/class/qx/test/io/__init__.js +4 -4
  565. package/source/class/qx/test/io/graphql/Client.js +190 -0
  566. package/source/class/qx/test/io/graphql/ClientFetch.js +34 -0
  567. package/source/class/qx/test/io/graphql/Request.js +41 -0
  568. package/source/class/qx/test/io/jsonrpc/Client.js +333 -0
  569. package/source/class/qx/test/io/jsonrpc/Protocol.js +108 -0
  570. package/source/class/qx/test/io/request/Jsonp.js +23 -20
  571. package/source/class/qx/test/io/request/JsonpWithRemote.js +25 -22
  572. package/source/class/qx/test/io/request/MRequest.js +137 -114
  573. package/source/class/qx/test/io/request/Xhr.js +367 -209
  574. package/source/class/qx/test/io/request/XhrWithRemote.js +133 -100
  575. package/source/class/qx/test/io/rest/Resource.js +325 -270
  576. package/source/class/qx/test/io/rest/ResourceWithRemote.js +75 -58
  577. package/source/class/qx/test/io/transport/PostMessage.js +56 -0
  578. package/source/class/qx/test/io/transport/Websocket.js +64 -0
  579. package/source/class/qx/test/lang/Array.js +79 -105
  580. package/source/class/qx/test/lang/Function.js +64 -53
  581. package/source/class/qx/test/lang/Json.js +51 -79
  582. package/source/class/qx/test/lang/Number.js +4 -6
  583. package/source/class/qx/test/lang/Object.js +143 -133
  584. package/source/class/qx/test/lang/String.js +151 -95
  585. package/source/class/qx/test/lang/Type.js +34 -44
  586. package/source/class/qx/test/lang/Webkit.js +8 -13
  587. package/source/class/qx/test/lang/normalize/Array.js +121 -68
  588. package/source/class/qx/test/lang/normalize/Date.js +232 -49
  589. package/source/class/qx/test/lang/normalize/Error.js +5 -8
  590. package/source/class/qx/test/lang/normalize/Function.js +7 -13
  591. package/source/class/qx/test/lang/normalize/Object.js +22 -29
  592. package/source/class/qx/test/lang/normalize/String.js +19 -28
  593. package/source/class/qx/test/locale/Date.js +91 -43
  594. package/source/class/qx/test/locale/Locale.js +52 -32
  595. package/source/class/qx/test/locale/LocalizedString.js +12 -12
  596. package/source/class/qx/test/log/DeprecationMethodOverriding.js +52 -31
  597. package/source/class/qx/test/log/Filters.js +6 -3
  598. package/source/class/qx/test/log/Formatter.js +13 -7
  599. package/source/class/qx/test/log/Logger.js +19 -29
  600. package/source/class/qx/test/log/RingBuffer.js +14 -25
  601. package/source/class/qx/test/log/__init__.js +4 -4
  602. package/source/class/qx/test/log/fixture/ClassA.js +22 -22
  603. package/source/class/qx/test/log/fixture/ClassB1.js +7 -9
  604. package/source/class/qx/test/log/fixture/ClassB2.js +5 -7
  605. package/source/class/qx/test/log/fixture/ClassC1.js +5 -7
  606. package/source/class/qx/test/log/fixture/ClassC2.js +7 -9
  607. package/source/class/qx/test/mobile/LocaleSwitch.js +29 -36
  608. package/source/class/qx/test/mobile/MobileTestCase.js +39 -49
  609. package/source/class/qx/test/mobile/basic/Atom.js +129 -53
  610. package/source/class/qx/test/mobile/basic/Image.js +41 -31
  611. package/source/class/qx/test/mobile/basic/Label.js +6 -10
  612. package/source/class/qx/test/mobile/container/Carousel.js +41 -45
  613. package/source/class/qx/test/mobile/container/Composite.js +48 -65
  614. package/source/class/qx/test/mobile/container/Drawer.js +42 -29
  615. package/source/class/qx/test/mobile/container/Navigation.js +14 -20
  616. package/source/class/qx/test/mobile/container/Scroll.js +23 -19
  617. package/source/class/qx/test/mobile/core/Widget.js +150 -86
  618. package/source/class/qx/test/mobile/dialog/Menu.js +47 -26
  619. package/source/class/qx/test/mobile/dialog/Popup.js +30 -19
  620. package/source/class/qx/test/mobile/embed/Html.js +5 -8
  621. package/source/class/qx/test/mobile/form/Button.js +15 -13
  622. package/source/class/qx/test/mobile/form/CheckBox.js +21 -17
  623. package/source/class/qx/test/mobile/form/Form.js +37 -24
  624. package/source/class/qx/test/mobile/form/Group.js +5 -9
  625. package/source/class/qx/test/mobile/form/Label.js +11 -13
  626. package/source/class/qx/test/mobile/form/NumberField.js +49 -45
  627. package/source/class/qx/test/mobile/form/RadioButton.js +30 -19
  628. package/source/class/qx/test/mobile/form/SelectBox.js +39 -25
  629. package/source/class/qx/test/mobile/form/SingleRenderer.js +31 -27
  630. package/source/class/qx/test/mobile/form/Slider.js +55 -35
  631. package/source/class/qx/test/mobile/form/TextArea.js +34 -24
  632. package/source/class/qx/test/mobile/form/TextField.js +34 -24
  633. package/source/class/qx/test/mobile/form/ToggleButton.js +10 -14
  634. package/source/class/qx/test/mobile/layout/Card.js +21 -17
  635. package/source/class/qx/test/mobile/layout/HBox.js +25 -20
  636. package/source/class/qx/test/mobile/layout/VBox.js +25 -21
  637. package/source/class/qx/test/mobile/list/List.js +114 -83
  638. package/source/class/qx/test/mobile/navigationbar/NavigationBar.js +5 -9
  639. package/source/class/qx/test/mobile/page/Manager.js +7 -13
  640. package/source/class/qx/test/mobile/page/NavigationPage.js +7 -17
  641. package/source/class/qx/test/mobile/page/Page.js +101 -68
  642. package/source/class/qx/test/mobile/tabbar/TabBar.js +11 -21
  643. package/source/class/qx/test/mobile/toolbar/Toolbar.js +16 -16
  644. package/source/class/qx/test/performance/BaseCall.js +31 -36
  645. package/source/class/qx/test/performance/Event.js +60 -53
  646. package/source/class/qx/test/performance/Object.js +16 -22
  647. package/source/class/qx/test/performance/Property.js +20 -22
  648. package/source/class/qx/test/performance/data/Marshaling.js +25 -30
  649. package/source/class/qx/test/performance/decorator/AbstractDecorator.js +22 -34
  650. package/source/class/qx/test/performance/decorator/Background.js +4 -6
  651. package/source/class/qx/test/performance/decorator/BackgroundScale.js +6 -8
  652. package/source/class/qx/test/performance/decorator/Single.js +4 -6
  653. package/source/class/qx/test/performance/element/Element.js +50 -67
  654. package/source/class/qx/test/performance/widget/AbstractWidget.js +31 -44
  655. package/source/class/qx/test/performance/widget/Button.js +5 -7
  656. package/source/class/qx/test/performance/widget/Label.js +5 -7
  657. package/source/class/qx/test/performance/widget/RichLabel.js +6 -8
  658. package/source/class/qx/test/performance/widget/Widget.js +5 -7
  659. package/source/class/qx/test/performance/widget/WidgetWithDecorator.js +7 -9
  660. package/source/class/qx/test/performance/widget/WidgetWithSingle.js +9 -11
  661. package/source/class/qx/test/renderer/Color.js +22 -49
  662. package/source/class/qx/test/testclasses/BaseClassBoth.js +11 -8
  663. package/source/class/qx/test/testclasses/BaseClassIncluded.js +5 -6
  664. package/source/class/qx/test/testclasses/BaseClassPatched.js +15 -8
  665. package/source/class/qx/test/testclasses/DerivedClassBoth.js +7 -7
  666. package/source/class/qx/test/testclasses/DerivedClassIncluded.js +7 -7
  667. package/source/class/qx/test/testclasses/DerivedClassPatched.js +7 -7
  668. package/source/class/qx/test/testclasses/MMixinOne.js +4 -4
  669. package/source/class/qx/test/testclasses/MMixinTwo.js +2 -2
  670. package/source/class/qx/test/testclasses/RootClass.js +8 -8
  671. package/source/class/qx/test/theme/__init__.js +4 -4
  672. package/source/class/qx/test/theme/manager/Color.js +52 -66
  673. package/source/class/qx/test/theme/manager/Decoration.js +177 -154
  674. package/source/class/qx/test/theme/manager/Font.js +68 -39
  675. package/source/class/qx/test/theme/manager/Icon.js +46 -43
  676. package/source/class/qx/test/theme/manager/Meta.js +121 -110
  677. package/source/class/qx/test/theme/manager/__init__.js +4 -4
  678. package/source/class/qx/test/theme/manager/mock/Appearance.js +17 -23
  679. package/source/class/qx/test/theme/manager/mock/Color.js +7 -9
  680. package/source/class/qx/test/theme/manager/mock/Decoration.js +7 -10
  681. package/source/class/qx/test/theme/manager/mock/Font.js +6 -10
  682. package/source/class/qx/test/theme/simple/Appearance.js +268 -210
  683. package/source/class/qx/test/tool/utils/Utils.js +10 -8
  684. package/source/class/qx/test/toolchain/PrivateOptimization.js +20 -13
  685. package/source/class/qx/test/toolchain/TestRunner.js +12 -12
  686. package/source/class/qx/test/toolchain/VariantOptimization.js +37 -26
  687. package/source/class/qx/test/toolchain/__init__.js +4 -4
  688. package/source/class/qx/test/type/Array.js +8 -12
  689. package/source/class/qx/test/type/BaseArray.js +58 -78
  690. package/source/class/qx/test/type/BaseString.js +27 -65
  691. package/source/class/qx/test/type/__init__.js +4 -4
  692. package/source/class/qx/test/ui/BackgroundColor.js +20 -21
  693. package/source/class/qx/test/ui/ChildrenHandling.js +136 -81
  694. package/source/class/qx/test/ui/Destroy.js +310 -248
  695. package/source/class/qx/test/ui/Focus.js +40 -87
  696. package/source/class/qx/test/ui/Insets.js +14 -18
  697. package/source/class/qx/test/ui/LayoutTestCase.js +99 -92
  698. package/source/class/qx/test/ui/LocaleSwitch.js +37 -41
  699. package/source/class/qx/test/ui/RadioItems.js +11 -22
  700. package/source/class/qx/test/ui/Widget.js +13 -17
  701. package/source/class/qx/test/ui/Window.js +26 -39
  702. package/source/class/qx/test/ui/basic/Atom.js +37 -25
  703. package/source/class/qx/test/ui/basic/Image.js +179 -138
  704. package/source/class/qx/test/ui/basic/Label.js +147 -65
  705. package/source/class/qx/test/ui/basic/__init__.js +4 -4
  706. package/source/class/qx/test/ui/command/Command.js +105 -69
  707. package/source/class/qx/test/ui/command/Group.js +24 -21
  708. package/source/class/qx/test/ui/command/GroupManager.js +7 -12
  709. package/source/class/qx/test/ui/container/Stack.js +26 -36
  710. package/source/class/qx/test/ui/core/AbstractScrollArea.js +84 -67
  711. package/source/class/qx/test/ui/core/Appearance.js +53 -54
  712. package/source/class/qx/test/ui/core/Blocker.js +80 -44
  713. package/source/class/qx/test/ui/core/DragDropScrolling.js +69 -55
  714. package/source/class/qx/test/ui/core/Placement.js +22 -34
  715. package/source/class/qx/test/ui/core/Queues.js +28 -39
  716. package/source/class/qx/test/ui/core/SizeHint.js +32 -76
  717. package/source/class/qx/test/ui/core/SizeHintX.js +8 -15
  718. package/source/class/qx/test/ui/core/SizeHintY.js +8 -15
  719. package/source/class/qx/test/ui/core/Spacer.js +11 -18
  720. package/source/class/qx/test/ui/core/Widget.js +117 -112
  721. package/source/class/qx/test/ui/core/__init__.js +4 -4
  722. package/source/class/qx/test/ui/decoration/LinearGradient.js +18 -14
  723. package/source/class/qx/test/ui/embed/Iframe.js +70 -66
  724. package/source/class/qx/test/ui/embed/__init__.js +4 -4
  725. package/source/class/qx/test/ui/form/AbstractSelectBox.js +11 -16
  726. package/source/class/qx/test/ui/form/AbstractVirtualBox.js +12 -19
  727. package/source/class/qx/test/ui/form/BooleanFormat.js +40 -25
  728. package/source/class/qx/test/ui/form/Color.js +29 -19
  729. package/source/class/qx/test/ui/form/ComboBox.js +39 -25
  730. package/source/class/qx/test/ui/form/Date.js +34 -21
  731. package/source/class/qx/test/ui/form/DateField.js +16 -19
  732. package/source/class/qx/test/ui/form/Executable.js +98 -68
  733. package/source/class/qx/test/ui/form/Field.js +65 -54
  734. package/source/class/qx/test/ui/form/Form.js +211 -123
  735. package/source/class/qx/test/ui/form/FormManager.js +72 -100
  736. package/source/class/qx/test/ui/form/FormValidator.js +549 -399
  737. package/source/class/qx/test/ui/form/Label.js +87 -65
  738. package/source/class/qx/test/ui/form/List.js +19 -19
  739. package/source/class/qx/test/ui/form/MenuButton.js +26 -20
  740. package/source/class/qx/test/ui/form/ModelProperty.js +40 -36
  741. package/source/class/qx/test/ui/form/ModelSelection.js +39 -84
  742. package/source/class/qx/test/ui/form/NumberFormat.js +30 -19
  743. package/source/class/qx/test/ui/form/Placeholder.js +147 -87
  744. package/source/class/qx/test/ui/form/RadioButtonGroup.js +31 -26
  745. package/source/class/qx/test/ui/form/RadioGroup.js +58 -54
  746. package/source/class/qx/test/ui/form/Range.js +63 -28
  747. package/source/class/qx/test/ui/form/Renderer.js +39 -33
  748. package/source/class/qx/test/ui/form/Resetter.js +21 -35
  749. package/source/class/qx/test/ui/form/Slider.js +37 -21
  750. package/source/class/qx/test/ui/form/Spinner.js +9 -5
  751. package/source/class/qx/test/ui/form/SplitButton.js +7 -11
  752. package/source/class/qx/test/ui/form/StringFormat.js +60 -30
  753. package/source/class/qx/test/ui/form/TextArea.js +59 -41
  754. package/source/class/qx/test/ui/form/TextField.js +14 -16
  755. package/source/class/qx/test/ui/form/ToggleButton.js +20 -24
  756. package/source/class/qx/test/ui/form/VirtualSelectBox.js +66 -40
  757. package/source/class/qx/test/ui/form/__init__.js +4 -4
  758. package/source/class/qx/test/ui/form/virtual/VirtualComboBox.js +58 -60
  759. package/source/class/qx/test/ui/form/virtual/VirtualDropDownList.js +120 -110
  760. package/source/class/qx/test/ui/form/virtual/VirtualSelectBox.js +43 -27
  761. package/source/class/qx/test/ui/groupbox/CheckGroupBox.js +13 -18
  762. package/source/class/qx/test/ui/indicator/ProgressBar.js +73 -48
  763. package/source/class/qx/test/ui/layout/Box.js +23 -22
  764. package/source/class/qx/test/ui/layout/Flow.js +233 -153
  765. package/source/class/qx/test/ui/layout/Grid.js +88 -101
  766. package/source/class/qx/test/ui/layout/LayoutItem.js +57 -83
  767. package/source/class/qx/test/ui/layout/LayoutRoot.js +7 -11
  768. package/source/class/qx/test/ui/layout/Util.js +30 -31
  769. package/source/class/qx/test/ui/layout/__init__.js +4 -4
  770. package/source/class/qx/test/ui/list/AbstractListTest.js +13 -21
  771. package/source/class/qx/test/ui/list/Group.js +191 -114
  772. package/source/class/qx/test/ui/list/List.js +189 -132
  773. package/source/class/qx/test/ui/list/MAssert.js +14 -9
  774. package/source/class/qx/test/ui/list/ObjectGroup.js +131 -109
  775. package/source/class/qx/test/ui/list/core/MultiSelection.js +58 -44
  776. package/source/class/qx/test/ui/list/core/SingleSelection.js +43 -43
  777. package/source/class/qx/test/ui/list/fixture/GroupMock.js +6 -9
  778. package/source/class/qx/test/ui/list/fixture/ItemMock.js +9 -13
  779. package/source/class/qx/test/ui/root/Inline.js +22 -20
  780. package/source/class/qx/test/ui/selection/AbstractMultiSelectonTest.js +188 -105
  781. package/source/class/qx/test/ui/selection/AbstractSingleSelectonTest.js +173 -125
  782. package/source/class/qx/test/ui/selection/ListMultiSelection.js +19 -21
  783. package/source/class/qx/test/ui/selection/ListSingleSelection.js +19 -21
  784. package/source/class/qx/test/ui/selection/RadioGroup.js +41 -29
  785. package/source/class/qx/test/ui/selection/SelectBox.js +11 -17
  786. package/source/class/qx/test/ui/selection/Stack.js +22 -27
  787. package/source/class/qx/test/ui/selection/TabView.js +35 -26
  788. package/source/class/qx/test/ui/selection/TreeMultiSelection.js +14 -19
  789. package/source/class/qx/test/ui/selection/TreeSingleSelection.js +20 -24
  790. package/source/class/qx/test/ui/selection/__init__.js +4 -4
  791. package/source/class/qx/test/ui/table/Dispose.js +46 -46
  792. package/source/class/qx/test/ui/table/Table.js +74 -69
  793. package/source/class/qx/test/ui/table/__init__.js +4 -4
  794. package/source/class/qx/test/ui/table/celleditor/AbstractField.js +14 -28
  795. package/source/class/qx/test/ui/table/celleditor/ComboBox.js +11 -18
  796. package/source/class/qx/test/ui/table/celleditor/PasswordField.js +6 -10
  797. package/source/class/qx/test/ui/table/celleditor/SelectBox.js +16 -32
  798. package/source/class/qx/test/ui/table/celleditor/TextField.js +6 -9
  799. package/source/class/qx/test/ui/table/celleditor/__init__.js +4 -4
  800. package/source/class/qx/test/ui/table/columnmodel/Basic.js +130 -129
  801. package/source/class/qx/test/ui/table/model/Filtered.js +51 -36
  802. package/source/class/qx/test/ui/table/model/Simple.js +43 -45
  803. package/source/class/qx/test/ui/table/selection/Model.js +70 -22
  804. package/source/class/qx/test/ui/toolbar/OverflowHandling.js +145 -123
  805. package/source/class/qx/test/ui/toolbar/ToolBar.js +20 -30
  806. package/source/class/qx/test/ui/tree/Tree.js +63 -42
  807. package/source/class/qx/test/ui/tree/TreeFolder.js +44 -46
  808. package/source/class/qx/test/ui/tree/virtual/AbstractTreeTest.js +61 -96
  809. package/source/class/qx/test/ui/tree/virtual/MultiSelection.js +68 -39
  810. package/source/class/qx/test/ui/tree/virtual/OneSelection.js +82 -42
  811. package/source/class/qx/test/ui/tree/virtual/OpenCloseController.js +80 -101
  812. package/source/class/qx/test/ui/tree/virtual/SingleSelection.js +40 -32
  813. package/source/class/qx/test/ui/tree/virtual/Sorting.js +46 -47
  814. package/source/class/qx/test/ui/tree/virtual/Tree.js +267 -191
  815. package/source/class/qx/test/ui/tree/virtual/TreeItem.js +60 -63
  816. package/source/class/qx/test/ui/tree/virtual/UtilTest.js +65 -50
  817. package/source/class/qx/test/ui/tree/virtual/WidgetProvider.js +127 -132
  818. package/source/class/qx/test/ui/virtual/Axis.js +210 -193
  819. package/source/class/qx/test/ui/virtual/Pane.js +287 -190
  820. package/source/class/qx/test/ui/virtual/PaneUpdate.js +71 -77
  821. package/source/class/qx/test/ui/virtual/PointerEventMock.js +10 -13
  822. package/source/class/qx/test/ui/virtual/Scroller.js +29 -39
  823. package/source/class/qx/test/ui/virtual/__init__.js +4 -4
  824. package/source/class/qx/test/ui/virtual/cell/WidgetCell.js +39 -40
  825. package/source/class/qx/test/ui/virtual/layer/CellSpanManager.js +157 -127
  826. package/source/class/qx/test/ui/virtual/layer/Column.js +6 -10
  827. package/source/class/qx/test/ui/virtual/layer/GridLines.js +6 -10
  828. package/source/class/qx/test/ui/virtual/layer/GridLinesHorizontal.js +6 -9
  829. package/source/class/qx/test/ui/virtual/layer/GridLinesVertical.js +6 -9
  830. package/source/class/qx/test/ui/virtual/layer/HtmlCell.js +12 -19
  831. package/source/class/qx/test/ui/virtual/layer/HtmlCellSpan.js +13 -21
  832. package/source/class/qx/test/ui/virtual/layer/LayerMock.js +31 -43
  833. package/source/class/qx/test/ui/virtual/layer/LayerSimple.js +26 -26
  834. package/source/class/qx/test/ui/virtual/layer/LayerTestCase.js +52 -50
  835. package/source/class/qx/test/ui/virtual/layer/Row.js +6 -10
  836. package/source/class/qx/test/ui/virtual/layer/WidgetCell.js +45 -52
  837. package/source/class/qx/test/ui/virtual/layer/WidgetCellSpan.js +71 -48
  838. package/source/class/qx/test/ui/virtual/layer/__init__.js +4 -4
  839. package/source/class/qx/test/ui/virtual/performance/AbstractLayerTest.js +84 -68
  840. package/source/class/qx/test/ui/virtual/performance/DomCell.js +6 -9
  841. package/source/class/qx/test/ui/virtual/performance/DomPoolCell.js +6 -9
  842. package/source/class/qx/test/ui/virtual/performance/HtmlDivCell.js +7 -11
  843. package/source/class/qx/test/ui/virtual/performance/HtmlDivRelative.js +6 -9
  844. package/source/class/qx/test/ui/virtual/performance/HtmlTableCell.js +8 -13
  845. package/source/class/qx/test/ui/virtual/performance/HtmlTableCellNaive.js +8 -13
  846. package/source/class/qx/test/ui/virtual/performance/HtmlTableCssCell.js +8 -19
  847. package/source/class/qx/test/ui/virtual/performance/WidgetCell.js +10 -15
  848. package/source/class/qx/test/ui/virtual/performance/__init__.js +4 -4
  849. package/source/class/qx/test/ui/virtual/performance/layer/DomCell.js +24 -18
  850. package/source/class/qx/test/ui/virtual/performance/layer/DomPoolCell.js +28 -26
  851. package/source/class/qx/test/ui/virtual/performance/layer/HtmlDivRelative.js +13 -17
  852. package/source/class/qx/test/ui/virtual/performance/layer/HtmlTableCell.js +29 -28
  853. package/source/class/qx/test/ui/virtual/performance/layer/HtmlTableCellNaive.js +22 -24
  854. package/source/class/qx/test/ui/virtual/performance/layer/HtmlTableCssCell.js +32 -47
  855. package/source/class/qx/test/ui/virtual/performance/layer/__init__.js +4 -4
  856. package/source/class/qx/test/ui/window/Desktop.js +21 -12
  857. package/source/class/qx/test/util/Base64.js +10 -13
  858. package/source/class/qx/test/util/ColorUtil.js +121 -54
  859. package/source/class/qx/test/util/DateFormat.js +569 -299
  860. package/source/class/qx/test/util/DateMock.js +16 -19
  861. package/source/class/qx/test/util/DeferredCall.js +12 -13
  862. package/source/class/qx/test/util/Delegate.js +28 -26
  863. package/source/class/qx/test/util/DisposeUtil.js +32 -14
  864. package/source/class/qx/test/util/DynamicScriptLoader.js +99 -64
  865. package/source/class/qx/test/util/Fsm.js +16 -18
  866. package/source/class/qx/test/util/Function.js +23 -19
  867. package/source/class/qx/test/util/LibraryManager.js +15 -22
  868. package/source/class/qx/test/util/NumberFormat.js +53 -64
  869. package/source/class/qx/test/util/PropertyUtil.js +35 -35
  870. package/source/class/qx/test/util/Request.js +26 -18
  871. package/source/class/qx/test/util/ResourceManager.js +50 -35
  872. package/source/class/qx/test/util/ResponseParser.js +45 -35
  873. package/source/class/qx/test/util/RingBuffer.js +15 -28
  874. package/source/class/qx/test/util/Serializer.js +210 -153
  875. package/source/class/qx/test/util/StringBuilder.js +7 -13
  876. package/source/class/qx/test/util/StringSplit.js +114 -69
  877. package/source/class/qx/test/util/Uri.js +74 -78
  878. package/source/class/qx/test/util/Validate.js +95 -64
  879. package/source/class/qx/test/util/placement/BestFitAxis.js +17 -26
  880. package/source/class/qx/test/util/placement/DirectAxis.js +8 -11
  881. package/source/class/qx/test/util/placement/KeepAlignAxis.js +17 -26
  882. package/source/class/qx/test/util/placement/Placement.js +607 -244
  883. package/source/class/qx/test/util/placement/__init__.js +4 -4
  884. package/source/class/qx/theme/Classic.js +9 -11
  885. package/source/class/qx/theme/Indigo.js +9 -11
  886. package/source/class/qx/theme/Modern.js +9 -11
  887. package/source/class/qx/theme/Simple.js +9 -11
  888. package/source/class/qx/theme/TangibleDark.js +1 -1
  889. package/source/class/qx/theme/TangibleLight.js +1 -1
  890. package/source/class/qx/theme/__init__.js +4 -4
  891. package/source/class/qx/theme/classic/Appearance.js +995 -1336
  892. package/source/class/qx/theme/classic/Color.js +83 -83
  893. package/source/class/qx/theme/classic/Decoration.js +318 -299
  894. package/source/class/qx/theme/classic/Font.js +38 -25
  895. package/source/class/qx/theme/icon/Oxygen.js +4 -5
  896. package/source/class/qx/theme/icon/Tango.js +4 -5
  897. package/source/class/qx/theme/indigo/Appearance.js +66 -85
  898. package/source/class/qx/theme/indigo/Color.js +65 -66
  899. package/source/class/qx/theme/indigo/Decoration.js +31 -45
  900. package/source/class/qx/theme/indigo/Font.js +20 -29
  901. package/source/class/qx/theme/manager/Appearance.js +58 -91
  902. package/source/class/qx/theme/manager/Color.js +20 -41
  903. package/source/class/qx/theme/manager/Decoration.js +72 -100
  904. package/source/class/qx/theme/manager/Font.js +51 -67
  905. package/source/class/qx/theme/manager/Icon.js +13 -27
  906. package/source/class/qx/theme/manager/Meta.js +27 -44
  907. package/source/class/qx/theme/modern/Appearance.js +1049 -1440
  908. package/source/class/qx/theme/modern/Color.js +155 -166
  909. package/source/class/qx/theme/modern/Decoration.js +471 -598
  910. package/source/class/qx/theme/modern/Font.js +59 -52
  911. package/source/class/qx/theme/simple/Appearance.js +936 -1207
  912. package/source/class/qx/theme/simple/Color.js +62 -62
  913. package/source/class/qx/theme/simple/Decoration.js +456 -678
  914. package/source/class/qx/theme/simple/Font.js +18 -25
  915. package/source/class/qx/theme/simple/Image.js +49 -52
  916. package/source/class/qx/theme/tangible/Appearance.js +1575 -1743
  917. package/source/class/qx/theme/tangible/ColorDark.js +5 -5
  918. package/source/class/qx/theme/tangible/ColorEngine.js +38 -35
  919. package/source/class/qx/theme/tangible/ColorLight.js +7 -7
  920. package/source/class/qx/theme/tangible/Decoration.js +1108 -1300
  921. package/source/class/qx/theme/tangible/Font.js +66 -70
  922. package/source/class/qx/theme/tangible/Image.js +44 -48
  923. package/source/class/qx/tool/cli/Application.js +5 -5
  924. package/source/class/qx/tool/cli/Cli.js +103 -52
  925. package/source/class/qx/tool/cli/ConfigDb.js +18 -15
  926. package/source/class/qx/tool/cli/LibraryApplication.js +1 -1
  927. package/source/class/qx/tool/cli/Watch.js +174 -102
  928. package/source/class/qx/tool/cli/api/AbstractApi.js +17 -18
  929. package/source/class/qx/tool/cli/api/CompilerApi.js +15 -8
  930. package/source/class/qx/tool/cli/api/LibraryApi.js +4 -6
  931. package/source/class/qx/tool/cli/api/Test.js +12 -9
  932. package/source/class/qx/tool/cli/commands/Add.js +12 -15
  933. package/source/class/qx/tool/cli/commands/Clean.js +10 -9
  934. package/source/class/qx/tool/cli/commands/Command.js +18 -13
  935. package/source/class/qx/tool/cli/commands/Compile.js +633 -267
  936. package/source/class/qx/tool/cli/commands/Config.js +75 -42
  937. package/source/class/qx/tool/cli/commands/Create.js +108 -59
  938. package/source/class/qx/tool/cli/commands/Deploy.js +138 -86
  939. package/source/class/qx/tool/cli/commands/Es6ify.js +118 -0
  940. package/source/class/qx/tool/cli/commands/Lint.js +75 -34
  941. package/source/class/qx/tool/cli/commands/Migrate.js +13 -7
  942. package/source/class/qx/tool/cli/commands/Package.js +67 -45
  943. package/source/class/qx/tool/cli/commands/Pkg.js +21 -18
  944. package/source/class/qx/tool/cli/commands/Run.js +57 -37
  945. package/source/class/qx/tool/cli/commands/Serve.js +62 -37
  946. package/source/class/qx/tool/cli/commands/Test.js +40 -18
  947. package/source/class/qx/tool/cli/commands/add/Class.js +66 -28
  948. package/source/class/qx/tool/cli/commands/add/Script.js +54 -27
  949. package/source/class/qx/tool/cli/commands/package/Install.js +265 -103
  950. package/source/class/qx/tool/cli/commands/package/List.js +199 -75
  951. package/source/class/qx/tool/cli/commands/package/Migrate.js +7 -3
  952. package/source/class/qx/tool/cli/commands/package/Publish.js +220 -114
  953. package/source/class/qx/tool/cli/commands/package/Remove.js +40 -17
  954. package/source/class/qx/tool/cli/commands/package/Update.js +115 -48
  955. package/source/class/qx/tool/cli/commands/package/Upgrade.js +41 -20
  956. package/source/class/qx/tool/compiler/Analyser.js +427 -222
  957. package/source/class/qx/tool/compiler/ClassFile.js +831 -401
  958. package/source/class/qx/tool/compiler/Console.js +136 -87
  959. package/source/class/qx/tool/compiler/Es6ify.js +404 -0
  960. package/source/class/qx/tool/compiler/Preprocess.js +28 -25
  961. package/source/class/qx/tool/compiler/app/Application.js +149 -72
  962. package/source/class/qx/tool/compiler/app/Cldr.js +506 -106
  963. package/source/class/qx/tool/compiler/app/Library.js +62 -27
  964. package/source/class/qx/tool/compiler/app/Part.js +10 -12
  965. package/source/class/qx/tool/compiler/app/Translation.js +189 -162
  966. package/source/class/qx/tool/compiler/app/WebFont.js +215 -161
  967. package/source/class/qx/tool/compiler/jsdoc/ChildControlParser.js +3 -3
  968. package/source/class/qx/tool/compiler/jsdoc/CommandParser.js +8 -9
  969. package/source/class/qx/tool/compiler/jsdoc/ParamParser.js +7 -6
  970. package/source/class/qx/tool/compiler/jsdoc/Parser.js +27 -18
  971. package/source/class/qx/tool/compiler/jsdoc/ReturnParser.js +3 -3
  972. package/source/class/qx/tool/compiler/jsdoc/ThrowsParser.js +4 -4
  973. package/source/class/qx/tool/compiler/makers/AbstractAppMaker.js +5 -6
  974. package/source/class/qx/tool/compiler/makers/AppMaker.js +40 -19
  975. package/source/class/qx/tool/compiler/makers/Maker.js +29 -21
  976. package/source/class/qx/tool/compiler/resources/AbstractMatcher.js +8 -8
  977. package/source/class/qx/tool/compiler/resources/Asset.js +123 -61
  978. package/source/class/qx/tool/compiler/resources/ImageLoader.js +18 -8
  979. package/source/class/qx/tool/compiler/resources/Manager.js +156 -93
  980. package/source/class/qx/tool/compiler/resources/MetaLoader.js +5 -3
  981. package/source/class/qx/tool/compiler/resources/ResourceConverter.js +8 -8
  982. package/source/class/qx/tool/compiler/resources/ResourceLoader.js +8 -9
  983. package/source/class/qx/tool/compiler/resources/ScssConverter.js +54 -18
  984. package/source/class/qx/tool/compiler/resources/ScssFile.js +157 -80
  985. package/source/class/qx/tool/compiler/resources/ScssIncludeConverter.js +3 -3
  986. package/source/class/qx/tool/compiler/targets/BuildTarget.js +23 -13
  987. package/source/class/qx/tool/compiler/targets/SourceCodeCopier.js +29 -9
  988. package/source/class/qx/tool/compiler/targets/SourceTarget.js +2 -2
  989. package/source/class/qx/tool/compiler/targets/Target.js +292 -187
  990. package/source/class/qx/tool/compiler/targets/TypeScriptWriter.js +163 -103
  991. package/source/class/qx/tool/compiler/targets/meta/AbstractJavascriptMeta.js +48 -23
  992. package/source/class/qx/tool/compiler/targets/meta/ApplicationMeta.js +75 -62
  993. package/source/class/qx/tool/compiler/targets/meta/BootJs.js +49 -29
  994. package/source/class/qx/tool/compiler/targets/meta/Javascript.js +6 -7
  995. package/source/class/qx/tool/compiler/targets/meta/Package.js +54 -51
  996. package/source/class/qx/tool/compiler/targets/meta/PackageJavascript.js +41 -21
  997. package/source/class/qx/tool/compiler/targets/meta/Part.js +9 -10
  998. package/source/class/qx/tool/compiler/targets/meta/PolyfillJs.js +18 -5
  999. package/source/class/qx/tool/compiler/targets/meta/Uglify.js +54 -21
  1000. package/source/class/qx/tool/config/Abstract.js +61 -25
  1001. package/source/class/qx/tool/config/Compile.js +3 -2
  1002. package/source/class/qx/tool/config/Lockfile.js +3 -2
  1003. package/source/class/qx/tool/config/Manifest.js +3 -2
  1004. package/source/class/qx/tool/config/Registry.js +4 -3
  1005. package/source/class/qx/tool/config/Utils.js +88 -37
  1006. package/source/class/qx/tool/migration/BaseMigration.js +67 -25
  1007. package/source/class/qx/tool/migration/M6_0_0.js +96 -46
  1008. package/source/class/qx/tool/migration/M7_0_0.js +12 -6
  1009. package/source/class/qx/tool/migration/Runner.js +28 -14
  1010. package/source/class/qx/tool/utils/IndexedArray.js +15 -18
  1011. package/source/class/qx/tool/utils/Json.js +35 -14
  1012. package/source/class/qx/tool/utils/LogManager.js +50 -26
  1013. package/source/class/qx/tool/utils/Logger.js +11 -12
  1014. package/source/class/qx/tool/utils/Promisify.js +45 -49
  1015. package/source/class/qx/tool/utils/Utils.js +63 -48
  1016. package/source/class/qx/tool/utils/Values.js +4 -7
  1017. package/source/class/qx/tool/utils/Website.js +82 -29
  1018. package/source/class/qx/tool/utils/files/FindFiles.js +37 -33
  1019. package/source/class/qx/tool/utils/files/Utils.js +74 -54
  1020. package/source/class/qx/tool/utils/json/Parser.js +163 -54
  1021. package/source/class/qx/tool/utils/json/Stringify.js +87 -72
  1022. package/source/class/qx/tool/utils/json/Tokenizer.js +64 -39
  1023. package/source/class/qx/tool/utils/json/Writer.js +20 -21
  1024. package/source/class/qx/type/Array.js +19 -41
  1025. package/source/class/qx/type/BaseArray.js +136 -151
  1026. package/source/class/qx/type/BaseError.js +17 -34
  1027. package/source/class/qx/type/BaseString.js +104 -121
  1028. package/source/class/qx/type/__init__.js +3 -3
  1029. package/source/class/qx/ui/basic/Atom.js +75 -109
  1030. package/source/class/qx/ui/basic/Image.js +283 -319
  1031. package/source/class/qx/ui/basic/Label.js +161 -208
  1032. package/source/class/qx/ui/command/Command.js +51 -86
  1033. package/source/class/qx/ui/command/Group.js +43 -50
  1034. package/source/class/qx/ui/command/GroupManager.js +50 -53
  1035. package/source/class/qx/ui/container/Composite.js +15 -29
  1036. package/source/class/qx/ui/container/Resizer.js +7 -11
  1037. package/source/class/qx/ui/container/Scroll.js +10 -21
  1038. package/source/class/qx/ui/container/SlideBar.js +76 -119
  1039. package/source/class/qx/ui/container/Stack.js +27 -54
  1040. package/source/class/qx/ui/control/ColorPopup.js +109 -130
  1041. package/source/class/qx/ui/control/ColorSelector.js +334 -301
  1042. package/source/class/qx/ui/control/DateChooser.js +143 -177
  1043. package/source/class/qx/ui/core/Blocker.js +91 -127
  1044. package/source/class/qx/ui/core/ColumnData.js +16 -34
  1045. package/source/class/qx/ui/core/DragDropCursor.js +17 -30
  1046. package/source/class/qx/ui/core/DragDropScrolling.js +8 -14
  1047. package/source/class/qx/ui/core/EventHandler.js +108 -132
  1048. package/source/class/qx/ui/core/FocusHandler.js +78 -127
  1049. package/source/class/qx/ui/core/IMultiSelection.js +5 -9
  1050. package/source/class/qx/ui/core/ISingleSelection.js +10 -16
  1051. package/source/class/qx/ui/core/ISingleSelectionProvider.js +4 -6
  1052. package/source/class/qx/ui/core/LayoutItem.js +190 -306
  1053. package/source/class/qx/ui/core/MBlocker.js +22 -38
  1054. package/source/class/qx/ui/core/MChildrenHandling.js +14 -29
  1055. package/source/class/qx/ui/core/MContentPadding.js +50 -69
  1056. package/source/class/qx/ui/core/MDragDropScrolling.js +82 -80
  1057. package/source/class/qx/ui/core/MExecutable.js +27 -52
  1058. package/source/class/qx/ui/core/MLayoutHandling.js +6 -14
  1059. package/source/class/qx/ui/core/MMovable.js +64 -80
  1060. package/source/class/qx/ui/core/MMultiSelectionHandling.js +68 -87
  1061. package/source/class/qx/ui/core/MNativeOverflow.js +16 -26
  1062. package/source/class/qx/ui/core/MPlacement.js +171 -170
  1063. package/source/class/qx/ui/core/MRemoteChildrenHandling.js +14 -27
  1064. package/source/class/qx/ui/core/MRemoteLayoutHandling.js +4 -7
  1065. package/source/class/qx/ui/core/MResizable.js +142 -175
  1066. package/source/class/qx/ui/core/MSingleSelectionHandling.js +40 -45
  1067. package/source/class/qx/ui/core/SingleSelectionManager.js +41 -60
  1068. package/source/class/qx/ui/core/Spacer.js +12 -22
  1069. package/source/class/qx/ui/core/Widget.js +628 -983
  1070. package/source/class/qx/ui/core/queue/Appearance.js +15 -24
  1071. package/source/class/qx/ui/core/queue/Dispose.js +7 -16
  1072. package/source/class/qx/ui/core/queue/Layout.js +44 -71
  1073. package/source/class/qx/ui/core/queue/Manager.js +140 -133
  1074. package/source/class/qx/ui/core/queue/Visibility.js +21 -39
  1075. package/source/class/qx/ui/core/queue/Widget.js +15 -26
  1076. package/source/class/qx/ui/core/scroll/AbstractScrollArea.js +124 -162
  1077. package/source/class/qx/ui/core/scroll/IScrollBar.js +13 -24
  1078. package/source/class/qx/ui/core/scroll/MRoll.js +14 -19
  1079. package/source/class/qx/ui/core/scroll/MScrollBarFactory.js +3 -6
  1080. package/source/class/qx/ui/core/scroll/MWheelHandling.js +10 -12
  1081. package/source/class/qx/ui/core/scroll/NativeScrollBar.js +101 -125
  1082. package/source/class/qx/ui/core/scroll/ScrollBar.js +86 -130
  1083. package/source/class/qx/ui/core/scroll/ScrollPane.js +95 -134
  1084. package/source/class/qx/ui/core/scroll/ScrollSlider.js +13 -19
  1085. package/source/class/qx/ui/core/scroll/__init__.js +4 -4
  1086. package/source/class/qx/ui/core/selection/Abstract.js +255 -456
  1087. package/source/class/qx/ui/core/selection/ScrollArea.js +35 -73
  1088. package/source/class/qx/ui/core/selection/Widget.js +57 -120
  1089. package/source/class/qx/ui/decoration/Abstract.js +11 -20
  1090. package/source/class/qx/ui/decoration/Decorator.js +56 -55
  1091. package/source/class/qx/ui/decoration/IDecorator.js +5 -11
  1092. package/source/class/qx/ui/decoration/MBackgroundColor.js +13 -20
  1093. package/source/class/qx/ui/decoration/MBackgroundImage.js +82 -77
  1094. package/source/class/qx/ui/decoration/MBorderImage.js +72 -94
  1095. package/source/class/qx/ui/decoration/MBorderRadius.js +35 -38
  1096. package/source/class/qx/ui/decoration/MBoxShadow.js +61 -55
  1097. package/source/class/qx/ui/decoration/MDoubleBorder.js +157 -155
  1098. package/source/class/qx/ui/decoration/MLinearBackgroundGradient.js +169 -89
  1099. package/source/class/qx/ui/decoration/MSingleBorder.js +138 -124
  1100. package/source/class/qx/ui/decoration/MTransition.js +46 -42
  1101. package/source/class/qx/ui/decoration/__init__.js +2 -2
  1102. package/source/class/qx/ui/embed/AbstractIframe.js +37 -55
  1103. package/source/class/qx/ui/embed/Canvas.js +34 -66
  1104. package/source/class/qx/ui/embed/Html.js +46 -70
  1105. package/source/class/qx/ui/embed/Iframe.js +178 -158
  1106. package/source/class/qx/ui/embed/ThemedIframe.js +91 -135
  1107. package/source/class/qx/ui/form/AbstractField.js +262 -303
  1108. package/source/class/qx/ui/form/AbstractSelectBox.js +65 -87
  1109. package/source/class/qx/ui/form/Button.js +35 -73
  1110. package/source/class/qx/ui/form/CheckBox.js +26 -48
  1111. package/source/class/qx/ui/form/CheckedList.js +41 -25
  1112. package/source/class/qx/ui/form/CheckedSelectBox.js +97 -62
  1113. package/source/class/qx/ui/form/ComboBox.js +98 -121
  1114. package/source/class/qx/ui/form/DateField.js +140 -181
  1115. package/source/class/qx/ui/form/Form.js +50 -69
  1116. package/source/class/qx/ui/form/HoverButton.js +37 -54
  1117. package/source/class/qx/ui/form/IArrayForm.js +8 -16
  1118. package/source/class/qx/ui/form/IBooleanForm.js +8 -16
  1119. package/source/class/qx/ui/form/IColorForm.js +8 -16
  1120. package/source/class/qx/ui/form/IDateForm.js +8 -16
  1121. package/source/class/qx/ui/form/IExecutable.js +7 -14
  1122. package/source/class/qx/ui/form/IField.js +7 -14
  1123. package/source/class/qx/ui/form/IForm.js +17 -32
  1124. package/source/class/qx/ui/form/IListItem.js +1 -4
  1125. package/source/class/qx/ui/form/IModel.js +7 -15
  1126. package/source/class/qx/ui/form/IModelForm.js +8 -16
  1127. package/source/class/qx/ui/form/IModelSelection.js +4 -8
  1128. package/source/class/qx/ui/form/INumberForm.js +8 -15
  1129. package/source/class/qx/ui/form/IRadioItem.js +8 -17
  1130. package/source/class/qx/ui/form/IRange.js +10 -20
  1131. package/source/class/qx/ui/form/IStringForm.js +8 -16
  1132. package/source/class/qx/ui/form/List.js +82 -122
  1133. package/source/class/qx/ui/form/ListItem.js +21 -38
  1134. package/source/class/qx/ui/form/MForm.js +35 -41
  1135. package/source/class/qx/ui/form/MModelProperty.js +9 -14
  1136. package/source/class/qx/ui/form/MModelSelection.js +30 -32
  1137. package/source/class/qx/ui/form/MenuButton.js +50 -77
  1138. package/source/class/qx/ui/form/PasswordField.js +4 -6
  1139. package/source/class/qx/ui/form/RadioButton.js +36 -72
  1140. package/source/class/qx/ui/form/RadioButtonGroup.js +67 -82
  1141. package/source/class/qx/ui/form/RadioGroup.js +92 -127
  1142. package/source/class/qx/ui/form/RepeatButton.js +57 -106
  1143. package/source/class/qx/ui/form/Resetter.js +19 -29
  1144. package/source/class/qx/ui/form/SelectBox.js +62 -105
  1145. package/source/class/qx/ui/form/Slider.js +202 -269
  1146. package/source/class/qx/ui/form/Spinner.js +173 -217
  1147. package/source/class/qx/ui/form/SplitButton.js +73 -115
  1148. package/source/class/qx/ui/form/Tag.js +7 -8
  1149. package/source/class/qx/ui/form/TextArea.js +147 -153
  1150. package/source/class/qx/ui/form/TextField.js +37 -46
  1151. package/source/class/qx/ui/form/ToggleButton.js +54 -90
  1152. package/source/class/qx/ui/form/VirtualComboBox.js +73 -113
  1153. package/source/class/qx/ui/form/VirtualSelectBox.js +264 -274
  1154. package/source/class/qx/ui/form/core/AbstractVirtualBox.js +117 -157
  1155. package/source/class/qx/ui/form/core/VirtualDropDownList.js +101 -144
  1156. package/source/class/qx/ui/form/renderer/AbstractRenderer.js +48 -55
  1157. package/source/class/qx/ui/form/renderer/Double.js +25 -34
  1158. package/source/class/qx/ui/form/renderer/IFormRenderer.js +4 -8
  1159. package/source/class/qx/ui/form/renderer/Single.js +25 -35
  1160. package/source/class/qx/ui/form/renderer/SinglePlaceholder.js +12 -11
  1161. package/source/class/qx/ui/form/renderer/__init__.js +5 -5
  1162. package/source/class/qx/ui/form/validation/AsyncValidator.js +13 -19
  1163. package/source/class/qx/ui/form/validation/Manager.js +74 -108
  1164. package/source/class/qx/ui/form/validation/__init__.js +6 -6
  1165. package/source/class/qx/ui/groupbox/CheckGroupBox.js +30 -47
  1166. package/source/class/qx/ui/groupbox/GroupBox.js +36 -75
  1167. package/source/class/qx/ui/groupbox/RadioGroupBox.js +29 -59
  1168. package/source/class/qx/ui/groupbox/__init__.js +3 -3
  1169. package/source/class/qx/ui/indicator/ProgressBar.js +29 -46
  1170. package/source/class/qx/ui/layout/Abstract.js +28 -53
  1171. package/source/class/qx/ui/layout/Atom.js +95 -111
  1172. package/source/class/qx/ui/layout/Basic.js +29 -30
  1173. package/source/class/qx/ui/layout/Canvas.js +62 -99
  1174. package/source/class/qx/ui/layout/Dock.js +266 -250
  1175. package/source/class/qx/ui/layout/Flow.js +50 -76
  1176. package/source/class/qx/ui/layout/Grid.js +268 -343
  1177. package/source/class/qx/ui/layout/Grow.js +26 -32
  1178. package/source/class/qx/ui/layout/HBox.js +137 -153
  1179. package/source/class/qx/ui/layout/LineSizeIterator.js +19 -28
  1180. package/source/class/qx/ui/layout/Util.js +91 -120
  1181. package/source/class/qx/ui/layout/VBox.js +125 -147
  1182. package/source/class/qx/ui/list/List.js +148 -262
  1183. package/source/class/qx/ui/list/core/IListDelegate.js +13 -26
  1184. package/source/class/qx/ui/list/core/MWidgetController.js +51 -78
  1185. package/source/class/qx/ui/list/provider/IListProvider.js +15 -28
  1186. package/source/class/qx/ui/list/provider/WidgetProvider.js +52 -84
  1187. package/source/class/qx/ui/menu/AbstractButton.js +126 -131
  1188. package/source/class/qx/ui/menu/Button.js +11 -25
  1189. package/source/class/qx/ui/menu/ButtonLayout.js +49 -37
  1190. package/source/class/qx/ui/menu/CheckBox.js +21 -46
  1191. package/source/class/qx/ui/menu/Layout.js +45 -51
  1192. package/source/class/qx/ui/menu/Manager.js +131 -209
  1193. package/source/class/qx/ui/menu/Menu.js +180 -265
  1194. package/source/class/qx/ui/menu/MenuSlideBar.js +13 -20
  1195. package/source/class/qx/ui/menu/RadioButton.js +29 -51
  1196. package/source/class/qx/ui/menu/Separator.js +9 -16
  1197. package/source/class/qx/ui/menubar/Button.js +23 -41
  1198. package/source/class/qx/ui/menubar/MenuBar.js +9 -13
  1199. package/source/class/qx/ui/mobile/__init__.js +5 -5
  1200. package/source/class/qx/ui/mobile/basic/Atom.js +79 -101
  1201. package/source/class/qx/ui/mobile/basic/Image.js +80 -86
  1202. package/source/class/qx/ui/mobile/basic/Label.js +38 -54
  1203. package/source/class/qx/ui/mobile/container/Carousel.js +281 -188
  1204. package/source/class/qx/ui/mobile/container/Collapsible.js +57 -77
  1205. package/source/class/qx/ui/mobile/container/Composite.js +9 -13
  1206. package/source/class/qx/ui/mobile/container/Drawer.js +167 -164
  1207. package/source/class/qx/ui/mobile/container/INavigation.js +6 -10
  1208. package/source/class/qx/ui/mobile/container/IScrollDelegate.js +4 -6
  1209. package/source/class/qx/ui/mobile/container/MIScroll.js +108 -100
  1210. package/source/class/qx/ui/mobile/container/MNativeScroll.js +118 -102
  1211. package/source/class/qx/ui/mobile/container/MScrollHandling.js +8 -7
  1212. package/source/class/qx/ui/mobile/container/Navigation.js +46 -65
  1213. package/source/class/qx/ui/mobile/container/Scroll.js +140 -151
  1214. package/source/class/qx/ui/mobile/control/Picker.js +125 -112
  1215. package/source/class/qx/ui/mobile/core/Blocker.js +62 -71
  1216. package/source/class/qx/ui/mobile/core/DomUpdatedHandler.js +24 -60
  1217. package/source/class/qx/ui/mobile/core/EventHandler.js +158 -138
  1218. package/source/class/qx/ui/mobile/core/MChildrenHandling.js +14 -30
  1219. package/source/class/qx/ui/mobile/core/MLayoutHandling.js +6 -14
  1220. package/source/class/qx/ui/mobile/core/MResize.js +16 -30
  1221. package/source/class/qx/ui/mobile/core/Root.js +90 -80
  1222. package/source/class/qx/ui/mobile/core/Widget.js +351 -479
  1223. package/source/class/qx/ui/mobile/dialog/BusyIndicator.js +31 -46
  1224. package/source/class/qx/ui/mobile/dialog/Manager.js +127 -89
  1225. package/source/class/qx/ui/mobile/dialog/Menu.js +111 -122
  1226. package/source/class/qx/ui/mobile/dialog/Popup.js +202 -194
  1227. package/source/class/qx/ui/mobile/embed/Canvas.js +12 -25
  1228. package/source/class/qx/ui/mobile/embed/Html.js +13 -27
  1229. package/source/class/qx/ui/mobile/form/Button.js +12 -18
  1230. package/source/class/qx/ui/mobile/form/CheckBox.js +20 -35
  1231. package/source/class/qx/ui/mobile/form/Form.js +31 -51
  1232. package/source/class/qx/ui/mobile/form/Group.js +18 -30
  1233. package/source/class/qx/ui/mobile/form/Input.js +30 -35
  1234. package/source/class/qx/ui/mobile/form/Label.js +76 -79
  1235. package/source/class/qx/ui/mobile/form/MState.js +20 -27
  1236. package/source/class/qx/ui/mobile/form/MText.js +27 -47
  1237. package/source/class/qx/ui/mobile/form/MValue.js +66 -94
  1238. package/source/class/qx/ui/mobile/form/NumberField.js +30 -47
  1239. package/source/class/qx/ui/mobile/form/PasswordField.js +8 -14
  1240. package/source/class/qx/ui/mobile/form/RadioButton.js +25 -46
  1241. package/source/class/qx/ui/mobile/form/RadioGroup.js +2 -4
  1242. package/source/class/qx/ui/mobile/form/Row.js +14 -29
  1243. package/source/class/qx/ui/mobile/form/SelectBox.js +77 -104
  1244. package/source/class/qx/ui/mobile/form/Slider.js +116 -144
  1245. package/source/class/qx/ui/mobile/form/TextArea.js +26 -39
  1246. package/source/class/qx/ui/mobile/form/TextField.js +18 -28
  1247. package/source/class/qx/ui/mobile/form/Title.js +11 -19
  1248. package/source/class/qx/ui/mobile/form/ToggleButton.js +35 -58
  1249. package/source/class/qx/ui/mobile/form/__init__.js +1 -1
  1250. package/source/class/qx/ui/mobile/form/renderer/AbstractRenderer.js +24 -31
  1251. package/source/class/qx/ui/mobile/form/renderer/Single.js +59 -85
  1252. package/source/class/qx/ui/mobile/form/renderer/SinglePlaceholder.js +8 -16
  1253. package/source/class/qx/ui/mobile/layout/Abstract.js +48 -85
  1254. package/source/class/qx/ui/mobile/layout/AbstractBox.js +93 -125
  1255. package/source/class/qx/ui/mobile/layout/Card.js +133 -116
  1256. package/source/class/qx/ui/mobile/layout/CardAnimation.js +95 -72
  1257. package/source/class/qx/ui/mobile/layout/HBox.js +9 -12
  1258. package/source/class/qx/ui/mobile/layout/VBox.js +9 -12
  1259. package/source/class/qx/ui/mobile/list/IListDelegate.js +5 -9
  1260. package/source/class/qx/ui/mobile/list/List.js +172 -183
  1261. package/source/class/qx/ui/mobile/list/provider/Provider.js +58 -65
  1262. package/source/class/qx/ui/mobile/list/renderer/Abstract.js +54 -82
  1263. package/source/class/qx/ui/mobile/list/renderer/Default.js +39 -55
  1264. package/source/class/qx/ui/mobile/list/renderer/group/Abstract.js +20 -33
  1265. package/source/class/qx/ui/mobile/list/renderer/group/Default.js +29 -45
  1266. package/source/class/qx/ui/mobile/navigationbar/BackButton.js +11 -15
  1267. package/source/class/qx/ui/mobile/navigationbar/Button.js +11 -15
  1268. package/source/class/qx/ui/mobile/navigationbar/NavigationBar.js +23 -29
  1269. package/source/class/qx/ui/mobile/navigationbar/Title.js +12 -20
  1270. package/source/class/qx/ui/mobile/page/Manager.js +195 -169
  1271. package/source/class/qx/ui/mobile/page/NavigationPage.js +132 -196
  1272. package/source/class/qx/ui/mobile/page/Page.js +109 -148
  1273. package/source/class/qx/ui/mobile/tabbar/TabBar.js +41 -62
  1274. package/source/class/qx/ui/mobile/tabbar/TabButton.js +19 -28
  1275. package/source/class/qx/ui/mobile/toolbar/Button.js +7 -11
  1276. package/source/class/qx/ui/mobile/toolbar/Separator.js +11 -15
  1277. package/source/class/qx/ui/mobile/toolbar/ToolBar.js +30 -39
  1278. package/source/class/qx/ui/popup/Manager.js +41 -53
  1279. package/source/class/qx/ui/popup/Popup.js +22 -47
  1280. package/source/class/qx/ui/popup/__init__.js +32 -32
  1281. package/source/class/qx/ui/progressive/Progressive.js +96 -137
  1282. package/source/class/qx/ui/progressive/State.js +12 -19
  1283. package/source/class/qx/ui/progressive/headfoot/Abstract.js +10 -15
  1284. package/source/class/qx/ui/progressive/headfoot/Null.js +4 -7
  1285. package/source/class/qx/ui/progressive/headfoot/Progress.js +67 -69
  1286. package/source/class/qx/ui/progressive/headfoot/TableHeading.js +42 -54
  1287. package/source/class/qx/ui/progressive/model/Abstract.js +8 -15
  1288. package/source/class/qx/ui/progressive/model/Default.js +17 -29
  1289. package/source/class/qx/ui/progressive/renderer/Abstract.js +6 -11
  1290. package/source/class/qx/ui/progressive/renderer/FunctionCaller.js +4 -7
  1291. package/source/class/qx/ui/progressive/renderer/table/Row.js +215 -242
  1292. package/source/class/qx/ui/progressive/renderer/table/Widths.js +32 -47
  1293. package/source/class/qx/ui/progressive/renderer/table/cell/Abstract.js +17 -24
  1294. package/source/class/qx/ui/progressive/renderer/table/cell/Boolean.js +68 -79
  1295. package/source/class/qx/ui/progressive/renderer/table/cell/Conditional.js +146 -199
  1296. package/source/class/qx/ui/progressive/renderer/table/cell/Default.js +14 -32
  1297. package/source/class/qx/ui/progressive/renderer/table/cell/Html.js +2 -3
  1298. package/source/class/qx/ui/progressive/renderer/table/cell/Icon.js +38 -53
  1299. package/source/class/qx/ui/progressive/renderer/table/cell/Image.js +20 -42
  1300. package/source/class/qx/ui/progressive/renderer/table/cell/String.js +6 -12
  1301. package/source/class/qx/ui/progressive/structure/Abstract.js +14 -26
  1302. package/source/class/qx/ui/progressive/structure/Default.js +20 -40
  1303. package/source/class/qx/ui/root/Abstract.js +73 -90
  1304. package/source/class/qx/ui/root/Application.js +57 -61
  1305. package/source/class/qx/ui/root/Inline.js +78 -64
  1306. package/source/class/qx/ui/root/Page.js +25 -46
  1307. package/source/class/qx/ui/splitpane/Blocker.js +20 -30
  1308. package/source/class/qx/ui/splitpane/HLayout.js +53 -49
  1309. package/source/class/qx/ui/splitpane/Pane.js +112 -150
  1310. package/source/class/qx/ui/splitpane/Slider.js +9 -15
  1311. package/source/class/qx/ui/splitpane/Splitter.js +27 -46
  1312. package/source/class/qx/ui/splitpane/VLayout.js +53 -49
  1313. package/source/class/qx/ui/style/Stylesheet.js +12 -19
  1314. package/source/class/qx/ui/table/ICellEditorFactory.js +4 -8
  1315. package/source/class/qx/ui/table/ICellRenderer.js +3 -7
  1316. package/source/class/qx/ui/table/IColumnMenuButton.js +6 -11
  1317. package/source/class/qx/ui/table/IColumnMenuItem.js +5 -8
  1318. package/source/class/qx/ui/table/IHeaderRenderer.js +4 -8
  1319. package/source/class/qx/ui/table/IRowRenderer.js +6 -12
  1320. package/source/class/qx/ui/table/ITableModel.js +23 -41
  1321. package/source/class/qx/ui/table/MTableContextMenu.js +25 -28
  1322. package/source/class/qx/ui/table/Table.js +556 -748
  1323. package/source/class/qx/ui/table/celleditor/AbstractField.js +16 -26
  1324. package/source/class/qx/ui/table/celleditor/CheckBox.js +15 -16
  1325. package/source/class/qx/ui/table/celleditor/ComboBox.js +24 -34
  1326. package/source/class/qx/ui/table/celleditor/Dynamic.js +25 -32
  1327. package/source/class/qx/ui/table/celleditor/PasswordField.js +4 -8
  1328. package/source/class/qx/ui/table/celleditor/SelectBox.js +29 -38
  1329. package/source/class/qx/ui/table/celleditor/TextField.js +9 -14
  1330. package/source/class/qx/ui/table/cellrenderer/Abstract.js +78 -73
  1331. package/source/class/qx/ui/table/cellrenderer/AbstractImage.js +65 -84
  1332. package/source/class/qx/ui/table/cellrenderer/Boolean.js +36 -50
  1333. package/source/class/qx/ui/table/cellrenderer/Conditional.js +74 -63
  1334. package/source/class/qx/ui/table/cellrenderer/Date.js +12 -22
  1335. package/source/class/qx/ui/table/cellrenderer/Debug.js +9 -9
  1336. package/source/class/qx/ui/table/cellrenderer/Default.js +30 -52
  1337. package/source/class/qx/ui/table/cellrenderer/Dynamic.js +13 -24
  1338. package/source/class/qx/ui/table/cellrenderer/Html.js +6 -8
  1339. package/source/class/qx/ui/table/cellrenderer/Image.js +13 -26
  1340. package/source/class/qx/ui/table/cellrenderer/Number.js +13 -24
  1341. package/source/class/qx/ui/table/cellrenderer/Password.js +8 -11
  1342. package/source/class/qx/ui/table/cellrenderer/Replace.js +27 -42
  1343. package/source/class/qx/ui/table/cellrenderer/String.js +5 -7
  1344. package/source/class/qx/ui/table/columnmenu/Button.js +19 -29
  1345. package/source/class/qx/ui/table/columnmenu/MenuItem.js +11 -19
  1346. package/source/class/qx/ui/table/columnmenu/__init__.js +4 -4
  1347. package/source/class/qx/ui/table/columnmenu/grid/__init__.js +4 -4
  1348. package/source/class/qx/ui/table/columnmenu/simple/__init__.js +4 -4
  1349. package/source/class/qx/ui/table/columnmodel/Basic.js +193 -215
  1350. package/source/class/qx/ui/table/columnmodel/Resize.js +65 -111
  1351. package/source/class/qx/ui/table/columnmodel/resizebehavior/Abstract.js +17 -24
  1352. package/source/class/qx/ui/table/columnmodel/resizebehavior/Default.js +66 -117
  1353. package/source/class/qx/ui/table/headerrenderer/Default.js +25 -46
  1354. package/source/class/qx/ui/table/headerrenderer/HeaderCell.js +36 -51
  1355. package/source/class/qx/ui/table/headerrenderer/Icon.js +11 -27
  1356. package/source/class/qx/ui/table/model/Abstract.js +52 -62
  1357. package/source/class/qx/ui/table/model/Filtered.js +121 -153
  1358. package/source/class/qx/ui/table/model/Remote.js +166 -271
  1359. package/source/class/qx/ui/table/model/Simple.js +215 -250
  1360. package/source/class/qx/ui/table/pane/CellEvent.js +25 -32
  1361. package/source/class/qx/ui/table/pane/Clipper.js +8 -12
  1362. package/source/class/qx/ui/table/pane/FocusIndicator.js +42 -48
  1363. package/source/class/qx/ui/table/pane/Header.js +45 -86
  1364. package/source/class/qx/ui/table/pane/Model.js +80 -97
  1365. package/source/class/qx/ui/table/pane/Pane.js +129 -189
  1366. package/source/class/qx/ui/table/pane/Scroller.js +542 -659
  1367. package/source/class/qx/ui/table/rowrenderer/Default.js +75 -86
  1368. package/source/class/qx/ui/table/selection/Manager.js +23 -57
  1369. package/source/class/qx/ui/table/selection/Model.js +89 -179
  1370. package/source/class/qx/ui/tabview/Page.js +48 -79
  1371. package/source/class/qx/ui/tabview/TabButton.js +45 -72
  1372. package/source/class/qx/ui/tabview/TabView.js +94 -141
  1373. package/source/class/qx/ui/toolbar/Button.js +13 -18
  1374. package/source/class/qx/ui/toolbar/CheckBox.js +13 -17
  1375. package/source/class/qx/ui/toolbar/MenuButton.js +18 -34
  1376. package/source/class/qx/ui/toolbar/Part.js +42 -64
  1377. package/source/class/qx/ui/toolbar/PartContainer.js +19 -28
  1378. package/source/class/qx/ui/toolbar/RadioButton.js +12 -19
  1379. package/source/class/qx/ui/toolbar/Separator.js +15 -25
  1380. package/source/class/qx/ui/toolbar/SplitButton.js +19 -28
  1381. package/source/class/qx/ui/toolbar/ToolBar.js +182 -232
  1382. package/source/class/qx/ui/tooltip/Manager.js +125 -123
  1383. package/source/class/qx/ui/tooltip/ToolTip.js +49 -79
  1384. package/source/class/qx/ui/tooltip/__init__.js +23 -23
  1385. package/source/class/qx/ui/tree/Tree.js +95 -148
  1386. package/source/class/qx/ui/tree/TreeFile.js +8 -15
  1387. package/source/class/qx/ui/tree/TreeFolder.js +8 -15
  1388. package/source/class/qx/ui/tree/VirtualTree.js +207 -333
  1389. package/source/class/qx/ui/tree/VirtualTreeItem.js +30 -45
  1390. package/source/class/qx/ui/tree/__init__.js +50 -50
  1391. package/source/class/qx/ui/tree/core/AbstractItem.js +98 -152
  1392. package/source/class/qx/ui/tree/core/AbstractTreeItem.js +83 -137
  1393. package/source/class/qx/ui/tree/core/FolderOpenButton.js +15 -34
  1394. package/source/class/qx/ui/tree/core/IVirtualTree.js +13 -33
  1395. package/source/class/qx/ui/tree/core/IVirtualTreeDelegate.js +9 -16
  1396. package/source/class/qx/ui/tree/core/MWidgetController.js +58 -69
  1397. package/source/class/qx/ui/tree/core/OpenCloseController.js +29 -35
  1398. package/source/class/qx/ui/tree/core/Util.js +12 -16
  1399. package/source/class/qx/ui/tree/provider/IVirtualTreeProvider.js +10 -23
  1400. package/source/class/qx/ui/tree/provider/WidgetProvider.js +39 -67
  1401. package/source/class/qx/ui/tree/selection/SelectionManager.js +27 -41
  1402. package/source/class/qx/ui/treevirtual/DefaultDataCellRenderer.js +2 -3
  1403. package/source/class/qx/ui/treevirtual/MFamily.js +26 -63
  1404. package/source/class/qx/ui/treevirtual/MNode.js +43 -103
  1405. package/source/class/qx/ui/treevirtual/MTreePrimitive.js +41 -52
  1406. package/source/class/qx/ui/treevirtual/SelectionManager.js +44 -58
  1407. package/source/class/qx/ui/treevirtual/SimpleTreeDataCellRenderer.js +172 -229
  1408. package/source/class/qx/ui/treevirtual/SimpleTreeDataModel.js +256 -367
  1409. package/source/class/qx/ui/treevirtual/SimpleTreeDataRowRenderer.js +8 -18
  1410. package/source/class/qx/ui/treevirtual/TreeVirtual.js +155 -250
  1411. package/source/class/qx/ui/treevirtual/celleditor/NodeEditor.js +10 -16
  1412. package/source/class/qx/ui/treevirtual/pane/Scroller.js +14 -11
  1413. package/source/class/qx/ui/virtual/__init__.js +4 -4
  1414. package/source/class/qx/ui/virtual/behavior/Prefetch.js +71 -86
  1415. package/source/class/qx/ui/virtual/cell/Abstract.js +18 -27
  1416. package/source/class/qx/ui/virtual/cell/AbstractImage.js +42 -51
  1417. package/source/class/qx/ui/virtual/cell/AbstractWidget.js +25 -49
  1418. package/source/class/qx/ui/virtual/cell/Boolean.js +31 -44
  1419. package/source/class/qx/ui/virtual/cell/Cell.js +143 -183
  1420. package/source/class/qx/ui/virtual/cell/CellStylesheet.js +31 -38
  1421. package/source/class/qx/ui/virtual/cell/Date.js +15 -24
  1422. package/source/class/qx/ui/virtual/cell/Html.js +9 -20
  1423. package/source/class/qx/ui/virtual/cell/ICell.js +4 -6
  1424. package/source/class/qx/ui/virtual/cell/IWidgetCell.js +7 -12
  1425. package/source/class/qx/ui/virtual/cell/IWidgetCellDelegate.js +4 -6
  1426. package/source/class/qx/ui/virtual/cell/Image.js +8 -14
  1427. package/source/class/qx/ui/virtual/cell/Number.js +14 -23
  1428. package/source/class/qx/ui/virtual/cell/String.js +11 -20
  1429. package/source/class/qx/ui/virtual/cell/WidgetCell.js +13 -16
  1430. package/source/class/qx/ui/virtual/cell/__init__.js +4 -4
  1431. package/source/class/qx/ui/virtual/core/Axis.js +75 -103
  1432. package/source/class/qx/ui/virtual/core/CellEvent.js +23 -31
  1433. package/source/class/qx/ui/virtual/core/IHtmlCellProvider.js +4 -6
  1434. package/source/class/qx/ui/virtual/core/ILayer.js +5 -15
  1435. package/source/class/qx/ui/virtual/core/IWidgetCellProvider.js +5 -7
  1436. package/source/class/qx/ui/virtual/core/Pane.js +199 -242
  1437. package/source/class/qx/ui/virtual/core/Scroller.js +25 -43
  1438. package/source/class/qx/ui/virtual/layer/Abstract.js +44 -83
  1439. package/source/class/qx/ui/virtual/layer/AbstractBackground.js +47 -68
  1440. package/source/class/qx/ui/virtual/layer/CellSpanManager.js +74 -96
  1441. package/source/class/qx/ui/virtual/layer/Column.js +26 -36
  1442. package/source/class/qx/ui/virtual/layer/GridLines.js +43 -70
  1443. package/source/class/qx/ui/virtual/layer/HtmlCell.js +34 -32
  1444. package/source/class/qx/ui/virtual/layer/HtmlCellSpan.js +54 -56
  1445. package/source/class/qx/ui/virtual/layer/Row.js +28 -36
  1446. package/source/class/qx/ui/virtual/layer/WidgetCell.js +87 -123
  1447. package/source/class/qx/ui/virtual/layer/WidgetCellSpan.js +123 -124
  1448. package/source/class/qx/ui/virtual/selection/Abstract.js +26 -54
  1449. package/source/class/qx/ui/virtual/selection/CellLines.js +11 -21
  1450. package/source/class/qx/ui/virtual/selection/CellRectangle.js +45 -73
  1451. package/source/class/qx/ui/virtual/selection/Column.js +16 -35
  1452. package/source/class/qx/ui/virtual/selection/ISelectionDelegate.js +5 -9
  1453. package/source/class/qx/ui/virtual/selection/MModel.js +84 -122
  1454. package/source/class/qx/ui/virtual/selection/Row.js +29 -61
  1455. package/source/class/qx/ui/website/Accordion.js +39 -42
  1456. package/source/class/qx/ui/website/Button.js +17 -25
  1457. package/source/class/qx/ui/website/Calendar.js +243 -172
  1458. package/source/class/qx/ui/website/Carousel.js +169 -155
  1459. package/source/class/qx/ui/website/DatePicker.js +99 -85
  1460. package/source/class/qx/ui/website/Rating.js +35 -53
  1461. package/source/class/qx/ui/website/Slider.js +174 -153
  1462. package/source/class/qx/ui/website/Table.js +482 -456
  1463. package/source/class/qx/ui/website/Tabs.js +225 -180
  1464. package/source/class/qx/ui/website/Widget.js +39 -52
  1465. package/source/class/qx/ui/window/Desktop.js +14 -12
  1466. package/source/class/qx/ui/window/IDesktop.js +8 -10
  1467. package/source/class/qx/ui/window/IWindowManager.js +7 -9
  1468. package/source/class/qx/ui/window/MDesktop.js +34 -62
  1469. package/source/class/qx/ui/window/Manager.js +31 -57
  1470. package/source/class/qx/ui/window/Window.js +250 -351
  1471. package/source/class/qx/util/AliasManager.js +23 -42
  1472. package/source/class/qx/util/Animation.js +248 -191
  1473. package/source/class/qx/util/Base64.js +144 -89
  1474. package/source/class/qx/util/ColorUtil.js +253 -287
  1475. package/source/class/qx/util/DeferredCall.js +21 -30
  1476. package/source/class/qx/util/DeferredCallManager.js +23 -44
  1477. package/source/class/qx/util/Delegate.js +4 -10
  1478. package/source/class/qx/util/DisposeUtil.js +76 -70
  1479. package/source/class/qx/util/DynamicScriptLoader.js +83 -66
  1480. package/source/class/qx/util/EditDistance.js +64 -58
  1481. package/source/class/qx/util/ExtendedColor.js +157 -163
  1482. package/source/class/qx/util/Function.js +8 -8
  1483. package/source/class/qx/util/LibraryManager.js +11 -18
  1484. package/source/class/qx/util/OOUtil.js +17 -36
  1485. package/source/class/qx/util/ObjectPool.js +19 -45
  1486. package/source/class/qx/util/Permutation.js +9 -16
  1487. package/source/class/qx/util/PropertyUtil.js +58 -70
  1488. package/source/class/qx/util/Request.js +27 -16
  1489. package/source/class/qx/util/ResourceManager.js +103 -104
  1490. package/source/class/qx/util/ResponseParser.js +14 -21
  1491. package/source/class/qx/util/RingBuffer.js +46 -48
  1492. package/source/class/qx/util/Serializer.js +103 -68
  1493. package/source/class/qx/util/StringBuilder.js +11 -22
  1494. package/source/class/qx/util/StringEscape.js +15 -29
  1495. package/source/class/qx/util/StringSplit.js +18 -21
  1496. package/source/class/qx/util/TimerManager.js +61 -70
  1497. package/source/class/qx/util/Uri.js +42 -30
  1498. package/source/class/qx/util/Uuid.js +50 -35
  1499. package/source/class/qx/util/Validate.js +88 -73
  1500. package/source/class/qx/util/ValueManager.js +17 -29
  1501. package/source/class/qx/util/Wheel.js +22 -16
  1502. package/source/class/qx/util/format/DateFormat.js +853 -763
  1503. package/source/class/qx/util/format/IFormat.js +4 -8
  1504. package/source/class/qx/util/format/NumberFormat.js +84 -91
  1505. package/source/class/qx/util/fsm/FiniteStateMachine.js +323 -382
  1506. package/source/class/qx/util/fsm/State.js +210 -249
  1507. package/source/class/qx/util/fsm/Transition.js +138 -160
  1508. package/source/class/qx/util/placement/AbstractAxis.js +12 -14
  1509. package/source/class/qx/util/placement/BestFitAxis.js +5 -8
  1510. package/source/class/qx/util/placement/DirectAxis.js +5 -7
  1511. package/source/class/qx/util/placement/KeepAlignAxis.js +8 -14
  1512. package/source/class/qx/util/placement/Placement.js +39 -56
  1513. package/source/class/qx/util/placement/__init__.js +4 -4
  1514. package/source/class/qx/xml/Document.js +21 -34
  1515. package/source/class/qx/xml/Element.js +90 -73
  1516. package/source/class/qx/xml/String.js +15 -21
  1517. package/source/class/qxWeb.js +102 -69
  1518. package/source/resource/qx/mobile/js/iscroll.js +1328 -982
  1519. package/source/resource/qx/mobile/js/iscroll.min.js +1081 -1
  1520. package/source/resource/qx/test/dynamicscriptloader/first.js +1 -1
  1521. package/source/resource/qx/test/dynamicscriptloader/second.js +1 -1
  1522. package/source/resource/qx/test/dynamicscriptloader/third.js +1 -1
  1523. package/source/resource/qx/test/script.js +1 -1
  1524. package/source/resource/qx/test/webworker.js +2 -2
  1525. package/source/resource/qx/tool/loadsass.js +16 -13
  1526. package/source/resource/qx/tool/schema/compile-1-0-0.json +13 -13
  1527. package/source/resource/qx/tool/website/build/assets/bluebird.min.js +4593 -9
  1528. package/source/resource/qx/tool/website/build/assets/buttons.js +391 -1
  1529. package/source/resource/qx/tool/website/build/assets/fontawesome-all.js +8963 -1
  1530. package/source/resource/qx/tool/website/build/assets/jquery.js +5452 -3
  1531. package/source/resource/qx/tool/website/build/diagnostics/dependson.js +31 -31
  1532. package/source/resource/qx/tool/website/build/diagnostics/requiredby.js +32 -36
  1533. package/source/resource/qx/tool/website/build/scripts/serve.js +87 -66
  1534. package/source/resource/qx/tool/website/src/assets/bluebird.min.js +4593 -9
  1535. package/source/resource/qx/tool/website/src/assets/buttons.js +391 -1
  1536. package/source/resource/qx/tool/website/src/assets/fontawesome-all.js +8963 -1
  1537. package/source/resource/qx/tool/website/src/assets/jquery.js +5452 -3
  1538. package/source/resource/qx/tool/website/src/diagnostics/dependson.js +31 -31
  1539. package/source/resource/qx/tool/website/src/diagnostics/requiredby.js +32 -36
  1540. package/source/resource/qx/tool/website/src/scripts/serve.js +87 -66
  1541. package/source/translation/hr.po +297 -0
  1542. package/lib/resource/qx/static/blank.gif +0 -0
  1543. package/source/class/qx/io/remote/Exchange.js +0 -1063
  1544. package/source/class/qx/io/remote/Request.js +0 -1021
  1545. package/source/class/qx/io/remote/RequestQueue.js +0 -521
  1546. package/source/class/qx/io/remote/Response.js +0 -137
  1547. package/source/class/qx/io/remote/Rpc.js +0 -1075
  1548. package/source/class/qx/io/remote/RpcError.js +0 -198
  1549. package/source/class/qx/io/remote/__init__.js +0 -88
  1550. package/source/class/qx/io/remote/transport/Abstract.js +0 -513
  1551. package/source/class/qx/io/remote/transport/Iframe.js +0 -652
  1552. package/source/class/qx/io/remote/transport/Script.js +0 -475
  1553. package/source/class/qx/io/remote/transport/XmlHttp.js +0 -1019
  1554. package/source/class/qx/io/remote/transport/__init__.js +0 -3
  1555. package/source/class/qx/test/io/remote/AbstractRequest.js +0 -150
  1556. package/source/class/qx/test/io/remote/RequestIframe.js +0 -105
  1557. package/source/class/qx/test/io/remote/RequestXhr.js +0 -151
  1558. package/source/class/qx/test/io/remote/Rpc.js +0 -205
  1559. package/source/class/qx/test/io/remote/__init__.js +0 -4
  1560. package/source/class/qx/test/io/remote/transport/Iframe.js +0 -67
  1561. package/source/class/qx/test/io/remote/transport/XmlHttp.js +0 -133
  1562. package/source/class/qx/test/io/remote/transport/__init__.js +0 -4
@@ -59,10 +59,8 @@
59
59
  * Exposes (potentially polyfilled or patched) window.JSON to qooxdoo
60
60
  * (enabled by <a href="https://github.com/bestiejs/json3">JSON 3</a>).
61
61
  */
62
- qx.Bootstrap.define("qx.lang.Json",
63
- {
64
- statics :
65
- {
62
+ qx.Bootstrap.define("qx.lang.Json", {
63
+ statics: {
66
64
  /**
67
65
  * This method produces a JSON text from a JavaScript value.
68
66
  *
@@ -151,8 +149,7 @@ qx.Bootstrap.define("qx.lang.Json",
151
149
  *
152
150
  * @return {String} The JSON string of the value
153
151
  */
154
- stringify : null, // will be set after the polyfill
155
-
152
+ stringify: null, // will be set after the polyfill
156
153
 
157
154
  /**
158
155
  * This method parses a JSON text to produce an object or array.
@@ -205,7 +202,7 @@ qx.Bootstrap.define("qx.lang.Json",
205
202
  *
206
203
  * @return {Object} The parsed JSON object
207
204
  */
208
- parse : null // will be set after the polyfill
205
+ parse: null // will be set after the polyfill
209
206
  }
210
207
  });
211
208
 
@@ -227,864 +224,1134 @@ qx.Bootstrap.define("qx.lang.Json",
227
224
  // by shadowing global define function
228
225
  var define;
229
226
 
227
+ /*! JSON v3.2.5 | http://bestiejs.github.io/json3 | Copyright 2012-2013, Kit Cambridge | http://kit.mit-license.org */
228
+ (function (window) {
229
+ // This polyfill does not work under Rhino because it cannot convert POJO to object (it tries
230
+ // to serialize the class)
231
+ if (
232
+ qx.core.Environment.get("runtime.name") === "rhino" ||
233
+ qx.core.Environment.get("runtime.name") === undefined
234
+ )
235
+ return;
230
236
 
231
- /*! JSON v3.2.5 | http://bestiejs.github.io/json3 | Copyright 2012-2013, Kit Cambridge | http://kit.mit-license.org */
232
- (function (window) {
233
- // This polyfill does not work under Rhino because it cannot convert POJO to object (it tries
234
- // to serialize the class)
235
- if (qx.core.Environment.get("runtime.name") === "rhino" || qx.core.Environment.get("runtime.name") === undefined)
236
- return;
237
-
238
- // Convenience aliases.
239
- var getClass = {}.toString, isProperty, forEach, undef;
237
+ // Convenience aliases.
238
+ var getClass = {}.toString,
239
+ isProperty,
240
+ forEach,
241
+ undef;
240
242
 
241
- // Detect the `define` function exposed by asynchronous module loaders. The
242
- // strict `define` check is necessary for compatibility with `r.js`.
243
- var isLoader = typeof define === "function" && define.amd, JSON3 = typeof exports === "object" && exports;
243
+ // Detect the `define` function exposed by asynchronous module loaders. The
244
+ // strict `define` check is necessary for compatibility with `r.js`.
245
+ var isLoader = typeof define === "function" && define.amd,
246
+ JSON3 = typeof exports === "object" && exports;
244
247
 
245
- if (JSON3 || isLoader) {
246
- if (typeof JSON === "object" && JSON) {
247
- // Delegate to the native `stringify` and `parse` implementations in
248
- // asynchronous module loaders and CommonJS environments.
249
- if (JSON3) {
250
- JSON3.stringify = JSON.stringify;
251
- JSON3.parse = JSON.parse;
252
- } else {
253
- JSON3 = JSON;
248
+ if (JSON3 || isLoader) {
249
+ if (typeof JSON === "object" && JSON) {
250
+ // Delegate to the native `stringify` and `parse` implementations in
251
+ // asynchronous module loaders and CommonJS environments.
252
+ if (JSON3) {
253
+ JSON3.stringify = JSON.stringify;
254
+ JSON3.parse = JSON.parse;
255
+ } else {
256
+ JSON3 = JSON;
257
+ }
258
+ } else if (isLoader) {
259
+ JSON3 = window.JSON = {};
254
260
  }
255
- } else if (isLoader) {
256
- JSON3 = window.JSON = {};
261
+ } else {
262
+ // Export for web browsers and JavaScript engines.
263
+ JSON3 = window.JSON || (window.JSON = {});
257
264
  }
258
- } else {
259
- // Export for web browsers and JavaScript engines.
260
- JSON3 = window.JSON || (window.JSON = {});
261
- }
262
265
 
263
- // Test the `Date#getUTC*` methods. Based on work by @Yaffle.
264
- var isExtended = new Date(-3509827334573292);
265
- try {
266
- // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical
267
- // results for certain dates in Opera >= 10.53.
268
- isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&
269
- // Safari < 2.0.2 stores the internal millisecond time value correctly,
270
- // but clips the values returned by the date methods to the range of
271
- // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
272
- isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;
273
- } catch (exception) {}
266
+ // Test the `Date#getUTC*` methods. Based on work by @Yaffle.
267
+ var isExtended = new Date(-3509827334573292);
268
+ try {
269
+ // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical
270
+ // results for certain dates in Opera >= 10.53.
271
+ isExtended =
272
+ isExtended.getUTCFullYear() == -109252 &&
273
+ isExtended.getUTCMonth() === 0 &&
274
+ isExtended.getUTCDate() === 1 &&
275
+ // Safari < 2.0.2 stores the internal millisecond time value correctly,
276
+ // but clips the values returned by the date methods to the range of
277
+ // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
278
+ isExtended.getUTCHours() == 10 &&
279
+ isExtended.getUTCMinutes() == 37 &&
280
+ isExtended.getUTCSeconds() == 6 &&
281
+ isExtended.getUTCMilliseconds() == 708;
282
+ } catch (exception) {}
274
283
 
275
- // Internal: Determines whether the native `JSON.stringify` and `parse`
276
- // implementations are spec-compliant. Based on work by Ken Snyder.
277
- function has(name) {
278
- if (name === "bug-string-char-index") {
279
- // IE <= 7 doesn't support accessing string characters using square
280
- // bracket notation. IE 8 only supports this for primitives.
281
- return "a"[0] != "a";
282
- }
283
- var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}', isAll = name === "json";
284
- if (isAll || name === "json-stringify" || name === "json-parse") {
285
- // Test `JSON.stringify`.
286
- if (name == "json-stringify" || isAll) {
287
- var stringify = JSON3.stringify, stringifySupported = typeof stringify === "function" && isExtended;
288
- if (stringifySupported) {
289
- // A test function object with a custom `toJSON` method.
290
- (value = function () {
291
- return 1;
292
- }).toJSON = value;
293
- try {
294
- stringifySupported =
295
- // Firefox 3.1b1 and b2 serialize string, number, and boolean
296
- // primitives as object literals.
297
- stringify(0) === "0" &&
298
- // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
299
- // literals.
300
- stringify(new Number()) === "0" &&
301
- stringify(new String()) === '""' &&
302
- // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
303
- // does not define a canonical JSON representation (this applies to
304
- // objects with `toJSON` properties as well, *unless* they are nested
305
- // within an object or array).
306
- stringify(getClass) === undef &&
307
- // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
308
- // FF 3.1b3 pass this test.
309
- stringify(undef) === undef &&
310
- // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
311
- // respectively, if the value is omitted entirely.
312
- stringify() === undef &&
313
- // FF 3.1b1, 2 throw an error if the given value is not a number,
314
- // string, array, object, Boolean, or `null` literal. This applies to
315
- // objects with custom `toJSON` methods as well, unless they are nested
316
- // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
317
- // methods entirely.
318
- stringify(value) === "1" &&
319
- stringify([value]) === "[1]" &&
320
- // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
321
- // `"[null]"`.
322
- stringify([undef]) === "[null]" &&
323
- // YUI 3.0.0b1 fails to serialize `null` literals.
324
- stringify(null) === "null" &&
325
- // FF 3.1b1, 2 halts serialization if an array contains a function:
326
- // `[1, true, getClass, 1]` serializes as "[1,true,],". These versions
327
- // of Firefox also allow trailing commas in JSON objects and arrays.
328
- // FF 3.1b3 elides non-JSON values from objects and arrays, unless they
329
- // define custom `toJSON` methods.
330
- stringify([undef, getClass, null]) === "[null,null,null]" &&
331
- // Simple serialization test. FF 3.1b1 uses Unicode escape sequences
332
- // where character escape codes are expected (e.g., `\b` => `\u0008`).
333
- stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized &&
334
- // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
335
- stringify(null, value) === "1" &&
336
- stringify([1, 2], null, 1) === "[\n 1,\n 2\n]" &&
337
- // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
338
- // serialize extended years.
339
- stringify(new Date(-8.64e15)) === '"-271821-04-20T00:00:00.000Z"' &&
340
- // The milliseconds are optional in ES 5, but required in 5.1.
341
- stringify(new Date(8.64e15)) === '"+275760-09-13T00:00:00.000Z"' &&
342
- // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
343
- // four-digit years instead of six-digit years. Credits: @Yaffle.
344
- stringify(new Date(-621987552e5)) === '"-000001-01-01T00:00:00.000Z"' &&
345
- // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
346
- // values less than 1000. Credits: @Yaffle.
347
- stringify(new Date(-1)) === '"1969-12-31T23:59:59.999Z"';
348
- } catch (exception) {
349
- stringifySupported = false;
284
+ // Internal: Determines whether the native `JSON.stringify` and `parse`
285
+ // implementations are spec-compliant. Based on work by Ken Snyder.
286
+ function has(name) {
287
+ if (name === "bug-string-char-index") {
288
+ // IE <= 7 doesn't support accessing string characters using square
289
+ // bracket notation. IE 8 only supports this for primitives.
290
+ return "a"[0] != "a";
291
+ }
292
+ var value,
293
+ serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}',
294
+ isAll = name === "json";
295
+ if (isAll || name === "json-stringify" || name === "json-parse") {
296
+ // Test `JSON.stringify`.
297
+ if (name == "json-stringify" || isAll) {
298
+ var stringify = JSON3.stringify,
299
+ stringifySupported = typeof stringify === "function" && isExtended;
300
+ if (stringifySupported) {
301
+ // A test function object with a custom `toJSON` method.
302
+ (value = function () {
303
+ return 1;
304
+ }).toJSON = value;
305
+ try {
306
+ stringifySupported =
307
+ // Firefox 3.1b1 and b2 serialize string, number, and boolean
308
+ // primitives as object literals.
309
+ stringify(0) === "0" &&
310
+ // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
311
+ // literals.
312
+ stringify(new Number()) === "0" &&
313
+ stringify(new String()) === '""' &&
314
+ // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
315
+ // does not define a canonical JSON representation (this applies to
316
+ // objects with `toJSON` properties as well, *unless* they are nested
317
+ // within an object or array).
318
+ stringify(getClass) === undef &&
319
+ // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
320
+ // FF 3.1b3 pass this test.
321
+ stringify(undef) === undef &&
322
+ // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
323
+ // respectively, if the value is omitted entirely.
324
+ stringify() === undef &&
325
+ // FF 3.1b1, 2 throw an error if the given value is not a number,
326
+ // string, array, object, Boolean, or `null` literal. This applies to
327
+ // objects with custom `toJSON` methods as well, unless they are nested
328
+ // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
329
+ // methods entirely.
330
+ stringify(value) === "1" &&
331
+ stringify([value]) === "[1]" &&
332
+ // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
333
+ // `"[null]"`.
334
+ stringify([undef]) === "[null]" &&
335
+ // YUI 3.0.0b1 fails to serialize `null` literals.
336
+ stringify(null) === "null" &&
337
+ // FF 3.1b1, 2 halts serialization if an array contains a function:
338
+ // `[1, true, getClass, 1]` serializes as "[1,true,],". These versions
339
+ // of Firefox also allow trailing commas in JSON objects and arrays.
340
+ // FF 3.1b3 elides non-JSON values from objects and arrays, unless they
341
+ // define custom `toJSON` methods.
342
+ stringify([undef, getClass, null]) === "[null,null,null]" &&
343
+ // Simple serialization test. FF 3.1b1 uses Unicode escape sequences
344
+ // where character escape codes are expected (e.g., `\b` => `\u0008`).
345
+ stringify({
346
+ a: [value, true, false, null, "\x00\b\n\f\r\t"]
347
+ }) == serialized &&
348
+ // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
349
+ stringify(null, value) === "1" &&
350
+ stringify([1, 2], null, 1) === "[\n 1,\n 2\n]" &&
351
+ // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
352
+ // serialize extended years.
353
+ stringify(new Date(-8.64e15)) ===
354
+ '"-271821-04-20T00:00:00.000Z"' &&
355
+ // The milliseconds are optional in ES 5, but required in 5.1.
356
+ stringify(new Date(8.64e15)) ===
357
+ '"+275760-09-13T00:00:00.000Z"' &&
358
+ // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
359
+ // four-digit years instead of six-digit years. Credits: @Yaffle.
360
+ stringify(new Date(-621987552e5)) ===
361
+ '"-000001-01-01T00:00:00.000Z"' &&
362
+ // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
363
+ // values less than 1000. Credits: @Yaffle.
364
+ stringify(new Date(-1)) === '"1969-12-31T23:59:59.999Z"';
365
+ } catch (exception) {
366
+ stringifySupported = false;
367
+ }
368
+ }
369
+ if (!isAll) {
370
+ return stringifySupported;
350
371
  }
351
372
  }
352
- if (!isAll) {
353
- return stringifySupported;
354
- }
355
- }
356
- // Test `JSON.parse`.
357
- if (name === "json-parse" || isAll) {
358
- var parse = JSON3.parse;
359
- if (typeof parse === "function") {
360
- try {
361
- // FF 3.1b1, b2 will throw an exception if a bare literal is provided.
362
- // Conforming implementations should also coerce the initial argument to
363
- // a string prior to parsing.
364
- if (parse("0") === 0 && !parse(false)) {
365
- // Simple parsing test.
366
- value = parse(serialized);
367
- var parseSupported = value["a"].length == 5 && value["a"][0] === 1;
368
- if (parseSupported) {
369
- try {
370
- // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.
371
- parseSupported = !parse('"\t"');
372
- } catch (exception) {}
373
+ // Test `JSON.parse`.
374
+ if (name === "json-parse" || isAll) {
375
+ var parse = JSON3.parse;
376
+ if (typeof parse === "function") {
377
+ try {
378
+ // FF 3.1b1, b2 will throw an exception if a bare literal is provided.
379
+ // Conforming implementations should also coerce the initial argument to
380
+ // a string prior to parsing.
381
+ if (parse("0") === 0 && !parse(false)) {
382
+ // Simple parsing test.
383
+ value = parse(serialized);
384
+ var parseSupported =
385
+ value["a"].length == 5 && value["a"][0] === 1;
373
386
  if (parseSupported) {
374
387
  try {
375
- // FF 4.0 and 4.0.1 allow leading `+` signs, and leading and
376
- // trailing decimal points. FF 4.0, 4.0.1, and IE 9-10 also
377
- // allow certain octal literals.
378
- parseSupported = parse("01") !== 1;
388
+ // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.
389
+ parseSupported = !parse('"\t"');
379
390
  } catch (exception) {}
391
+ if (parseSupported) {
392
+ try {
393
+ // FF 4.0 and 4.0.1 allow leading `+` signs, and leading and
394
+ // trailing decimal points. FF 4.0, 4.0.1, and IE 9-10 also
395
+ // allow certain octal literals.
396
+ parseSupported = parse("01") !== 1;
397
+ } catch (exception) {}
398
+ }
380
399
  }
381
400
  }
401
+ } catch (exception) {
402
+ parseSupported = false;
382
403
  }
383
- } catch (exception) {
384
- parseSupported = false;
404
+ }
405
+ if (!isAll) {
406
+ return parseSupported;
385
407
  }
386
408
  }
387
- if (!isAll) {
388
- return parseSupported;
389
- }
409
+ return stringifySupported && parseSupported;
390
410
  }
391
- return stringifySupported && parseSupported;
392
411
  }
393
- }
394
412
 
395
- if (!has("json")) {
396
- // Common `[[Class]]` name aliases.
397
- var functionClass = "[object Function]";
398
- var dateClass = "[object Date]";
399
- var numberClass = "[object Number]";
400
- var stringClass = "[object String]";
401
- var arrayClass = "[object Array]";
402
- var booleanClass = "[object Boolean]";
413
+ if (!has("json")) {
414
+ // Common `[[Class]]` name aliases.
415
+ var functionClass = "[object Function]";
416
+ var dateClass = "[object Date]";
417
+ var numberClass = "[object Number]";
418
+ var stringClass = "[object String]";
419
+ var arrayClass = "[object Array]";
420
+ var booleanClass = "[object Boolean]";
403
421
 
404
- // Detect incomplete support for accessing string characters by index.
405
- var charIndexBuggy = has("bug-string-char-index");
422
+ // Detect incomplete support for accessing string characters by index.
423
+ var charIndexBuggy = has("bug-string-char-index");
406
424
 
407
- // Define additional utility methods if the `Date` methods are buggy.
408
- if (!isExtended) {
409
- var floor = Math.floor;
410
- // A mapping between the months of the year and the number of days between
411
- // January 1st and the first of the respective month.
412
- var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
413
- // Internal: Calculates the number of days between the Unix epoch and the
414
- // first day of the given month.
415
- var getDay = function (year, month) {
416
- return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);
417
- };
418
- }
425
+ // Define additional utility methods if the `Date` methods are buggy.
426
+ if (!isExtended) {
427
+ var floor = Math.floor;
428
+ // A mapping between the months of the year and the number of days between
429
+ // January 1st and the first of the respective month.
430
+ var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
431
+ // Internal: Calculates the number of days between the Unix epoch and the
432
+ // first day of the given month.
433
+ var getDay = function (year, month) {
434
+ return (
435
+ Months[month] +
436
+ 365 * (year - 1970) +
437
+ floor((year - 1969 + (month = +(month > 1))) / 4) -
438
+ floor((year - 1901 + month) / 100) +
439
+ floor((year - 1601 + month) / 400)
440
+ );
441
+ };
442
+ }
419
443
 
420
- // Internal: Determines if a property is a direct property of the given
421
- // object. Delegates to the native `Object#hasOwnProperty` method.
422
- if (!(isProperty = {}.hasOwnProperty)) {
423
- isProperty = function (property) {
424
- var members = {}, constructor;
425
- if ((members.__proto__ = null, members.__proto__ = {
426
- // The *proto* property cannot be set multiple times in recent
427
- // versions of Firefox and SeaMonkey.
428
- "toString": 1
429
- }, members).toString != getClass) {
430
- // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but
431
- // supports the mutable *proto* property.
432
- isProperty = function (property) {
433
- // Capture and break the object's prototype chain (see section 8.6.2
434
- // of the ES 5.1 spec). The parenthesized expression prevents an
435
- // unsafe transformation by the Closure Compiler.
436
- var original = this.__proto__, result = property in (this.__proto__ = null, this);
437
- // Restore the original prototype chain.
438
- this.__proto__ = original;
439
- return result;
440
- };
441
- } else {
442
- // Capture a reference to the top-level `Object` constructor.
443
- constructor = members.constructor;
444
- // Use the `constructor` property to simulate `Object#hasOwnProperty` in
445
- // other environments.
446
- isProperty = function (property) {
447
- var parent = (this.constructor || constructor).prototype;
448
- return property in this && !(property in parent && this[property] === parent[property]);
449
- };
450
- }
451
- members = null;
452
- return isProperty.call(this, property);
453
- };
454
- }
444
+ // Internal: Determines if a property is a direct property of the given
445
+ // object. Delegates to the native `Object#hasOwnProperty` method.
446
+ if (!(isProperty = {}.hasOwnProperty)) {
447
+ isProperty = function (property) {
448
+ var members = {},
449
+ constructor;
450
+ if (
451
+ ((members.__proto__ = null),
452
+ (members.__proto__ = {
453
+ // The *proto* property cannot be set multiple times in recent
454
+ // versions of Firefox and SeaMonkey.
455
+ toString: 1
456
+ }),
457
+ members).toString != getClass
458
+ ) {
459
+ // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but
460
+ // supports the mutable *proto* property.
461
+ isProperty = function (property) {
462
+ // Capture and break the object's prototype chain (see section 8.6.2
463
+ // of the ES 5.1 spec). The parenthesized expression prevents an
464
+ // unsafe transformation by the Closure Compiler.
465
+ var original = this.__proto__,
466
+ result = property in ((this.__proto__ = null), this);
467
+ // Restore the original prototype chain.
468
+ this.__proto__ = original;
469
+ return result;
470
+ };
471
+ } else {
472
+ // Capture a reference to the top-level `Object` constructor.
473
+ constructor = members.constructor;
474
+ // Use the `constructor` property to simulate `Object#hasOwnProperty` in
475
+ // other environments.
476
+ isProperty = function (property) {
477
+ var parent = (this.constructor || constructor).prototype;
478
+ return (
479
+ property in this &&
480
+ !(property in parent && this[property] === parent[property])
481
+ );
482
+ };
483
+ }
484
+ members = null;
485
+ return isProperty.call(this, property);
486
+ };
487
+ }
455
488
 
456
- // Internal: A set of primitive types used by `isHostType`.
457
- var PrimitiveTypes = {
458
- 'boolean': 1,
459
- 'number': 1,
460
- 'string': 1,
461
- 'undefined': 1
462
- };
489
+ // Internal: A set of primitive types used by `isHostType`.
490
+ var PrimitiveTypes = {
491
+ boolean: 1,
492
+ number: 1,
493
+ string: 1,
494
+ undefined: 1
495
+ };
463
496
 
464
- // Internal: Determines if the given object `property` value is a
465
- // non-primitive.
466
- var isHostType = function (object, property) {
467
- var type = typeof object[property];
468
- return type == 'object' ? !!object[property] : !PrimitiveTypes[type];
469
- };
497
+ // Internal: Determines if the given object `property` value is a
498
+ // non-primitive.
499
+ var isHostType = function (object, property) {
500
+ var type = typeof object[property];
501
+ return type == "object" ? !!object[property] : !PrimitiveTypes[type];
502
+ };
470
503
 
471
- // Internal: Normalizes the `for...in` iteration algorithm across
472
- // environments. Each enumerated key is yielded to a `callback` function.
473
- forEach = function (object, callback) {
474
- var size = 0, Properties, members, property, forEach;
504
+ // Internal: Normalizes the `for...in` iteration algorithm across
505
+ // environments. Each enumerated key is yielded to a `callback` function.
506
+ forEach = function (object, callback) {
507
+ var size = 0,
508
+ Properties,
509
+ members,
510
+ property,
511
+ forEach;
475
512
 
476
- // Tests for bugs in the current environment's `for...in` algorithm. The
477
- // `valueOf` property inherits the non-enumerable flag from
478
- // `Object.prototype` in older versions of IE, Netscape, and Mozilla.
479
- (Properties = function () {
480
- this.valueOf = 0;
481
- }).prototype.valueOf = 0;
513
+ // Tests for bugs in the current environment's `for...in` algorithm. The
514
+ // `valueOf` property inherits the non-enumerable flag from
515
+ // `Object.prototype` in older versions of IE, Netscape, and Mozilla.
516
+ (Properties = function () {
517
+ this.valueOf = 0;
518
+ }).prototype.valueOf = 0;
482
519
 
483
- // Iterate over a new instance of the `Properties` class.
484
- members = new Properties();
485
- for (property in members) {
486
- // Ignore all properties inherited from `Object.prototype`.
487
- if (isProperty.call(members, property)) {
488
- size++;
520
+ // Iterate over a new instance of the `Properties` class.
521
+ members = new Properties();
522
+ for (property in members) {
523
+ // Ignore all properties inherited from `Object.prototype`.
524
+ if (isProperty.call(members, property)) {
525
+ size++;
526
+ }
489
527
  }
490
- }
491
- Properties = members = null;
528
+ Properties = members = null;
492
529
 
493
- // Normalize the iteration algorithm.
494
- if (!size) {
495
- // A list of non-enumerable properties inherited from `Object.prototype`.
496
- members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"];
497
- // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable
498
- // properties.
499
- forEach = function (object, callback) {
500
- var isFunction = getClass.call(object) == functionClass, property, length;
501
- var hasProperty = !isFunction && typeof object.constructor != 'function' && isHostType(object, 'hasOwnProperty') ? object.hasOwnProperty : isProperty;
502
- for (property in object) {
503
- // Gecko <= 1.0 enumerates the `prototype` property of functions under
504
- // certain conditions; IE does not.
505
- if (!(isFunction && property === "prototype") && hasProperty.call(object, property)) {
506
- callback(property);
530
+ // Normalize the iteration algorithm.
531
+ if (!size) {
532
+ // A list of non-enumerable properties inherited from `Object.prototype`.
533
+ members = [
534
+ "valueOf",
535
+ "toString",
536
+ "toLocaleString",
537
+ "propertyIsEnumerable",
538
+ "isPrototypeOf",
539
+ "hasOwnProperty",
540
+ "constructor"
541
+ ];
542
+
543
+ // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable
544
+ // properties.
545
+ forEach = function (object, callback) {
546
+ var isFunction = getClass.call(object) == functionClass,
547
+ property,
548
+ length;
549
+ var hasProperty =
550
+ !isFunction &&
551
+ typeof object.constructor != "function" &&
552
+ isHostType(object, "hasOwnProperty")
553
+ ? object.hasOwnProperty
554
+ : isProperty;
555
+ for (property in object) {
556
+ // Gecko <= 1.0 enumerates the `prototype` property of functions under
557
+ // certain conditions; IE does not.
558
+ if (
559
+ !(isFunction && property === "prototype") &&
560
+ hasProperty.call(object, property)
561
+ ) {
562
+ callback(property);
563
+ }
507
564
  }
508
- }
509
- // Manually invoke the callback for each non-enumerable property.
510
- for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));
511
- };
512
- } else if (size == 2) {
513
- // Safari <= 2.0.4 enumerates shadowed properties twice.
514
- forEach = function (object, callback) {
515
- // Create a set of iterated properties.
516
- var members = {}, isFunction = getClass.call(object) == functionClass, property;
517
- for (property in object) {
518
- // Store each property name to prevent double enumeration. The
519
- // `prototype` property of functions is not enumerated due to cross-
520
- // environment inconsistencies.
521
- if (!(isFunction && property === "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {
522
- callback(property);
565
+ // Manually invoke the callback for each non-enumerable property.
566
+ for (
567
+ length = members.length;
568
+ (property = members[--length]);
569
+ hasProperty.call(object, property) && callback(property)
570
+ );
571
+ };
572
+ } else if (size == 2) {
573
+ // Safari <= 2.0.4 enumerates shadowed properties twice.
574
+ forEach = function (object, callback) {
575
+ // Create a set of iterated properties.
576
+ var members = {},
577
+ isFunction = getClass.call(object) == functionClass,
578
+ property;
579
+ for (property in object) {
580
+ // Store each property name to prevent double enumeration. The
581
+ // `prototype` property of functions is not enumerated due to cross-
582
+ // environment inconsistencies.
583
+ if (
584
+ !(isFunction && property === "prototype") &&
585
+ !isProperty.call(members, property) &&
586
+ (members[property] = 1) &&
587
+ isProperty.call(object, property)
588
+ ) {
589
+ callback(property);
590
+ }
523
591
  }
524
- }
525
- };
526
- } else {
527
- // No bugs detected; use the standard `for...in` algorithm.
528
- forEach = function (object, callback) {
529
- var isFunction = getClass.call(object) == functionClass, property, isConstructor;
530
- for (property in object) {
531
- if (!(isFunction && property === "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) {
592
+ };
593
+ } else {
594
+ // No bugs detected; use the standard `for...in` algorithm.
595
+ forEach = function (object, callback) {
596
+ var isFunction = getClass.call(object) == functionClass,
597
+ property,
598
+ isConstructor;
599
+ for (property in object) {
600
+ if (
601
+ !(isFunction && property === "prototype") &&
602
+ isProperty.call(object, property) &&
603
+ !(isConstructor = property === "constructor")
604
+ ) {
605
+ callback(property);
606
+ }
607
+ }
608
+ // Manually invoke the callback for the `constructor` property due to
609
+ // cross-environment inconsistencies.
610
+ if (
611
+ isConstructor ||
612
+ isProperty.call(object, (property = "constructor"))
613
+ ) {
532
614
  callback(property);
533
615
  }
534
- }
535
- // Manually invoke the callback for the `constructor` property due to
536
- // cross-environment inconsistencies.
537
- if (isConstructor || isProperty.call(object, (property = "constructor"))) {
538
- callback(property);
539
- }
540
- };
541
- }
542
- return forEach(object, callback);
543
- };
544
-
545
- // Public: Serializes a JavaScript `value` as a JSON string. The optional
546
- // `filter` argument may specify either a function that alters how object and
547
- // array members are serialized, or an array of strings and numbers that
548
- // indicates which properties should be serialized. The optional `width`
549
- // argument may be either a string or number that specifies the indentation
550
- // level of the output.
551
- if (!has("json-stringify")) {
552
- // Internal: A map of control characters and their escaped equivalents.
553
- var Escapes = {
554
- 92: "\\\\",
555
- 34: '\\"',
556
- 8: "\\b",
557
- 12: "\\f",
558
- 10: "\\n",
559
- 13: "\\r",
560
- 9: "\\t"
616
+ };
617
+ }
618
+ return forEach(object, callback);
561
619
  };
562
620
 
563
- // Internal: Converts `value` into a zero-padded string such that its
564
- // length is at least equal to `width`. The `width` must be <= 6.
565
- var leadingZeroes = "000000";
566
- var toPaddedString = function (width, value) {
567
- // The `|| 0` expression is necessary to work around a bug in
568
- // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`.
569
- return (leadingZeroes + (value || 0)).slice(-width);
570
- };
621
+ // Public: Serializes a JavaScript `value` as a JSON string. The optional
622
+ // `filter` argument may specify either a function that alters how object and
623
+ // array members are serialized, or an array of strings and numbers that
624
+ // indicates which properties should be serialized. The optional `width`
625
+ // argument may be either a string or number that specifies the indentation
626
+ // level of the output.
627
+ if (!has("json-stringify")) {
628
+ // Internal: A map of control characters and their escaped equivalents.
629
+ var Escapes = {
630
+ 92: "\\\\",
631
+ 34: '\\"',
632
+ 8: "\\b",
633
+ 12: "\\f",
634
+ 10: "\\n",
635
+ 13: "\\r",
636
+ 9: "\\t"
637
+ };
571
638
 
572
- // Internal: Double-quotes a string `value`, replacing all ASCII control
573
- // characters (characters with code unit values between 0 and 31) with
574
- // their escaped equivalents. This is an implementation of the
575
- // `Quote(value)` operation defined in ES 5.1 section 15.12.3.
576
- var unicodePrefix = "\\u00";
577
- var quote = function (value) {
578
- var result = '"', index = 0, length = value.length, isLarge = length > 10 && charIndexBuggy, symbols;
579
- if (isLarge) {
580
- symbols = value.split("");
581
- }
582
- for (; index < length; index++) {
583
- var charCode = value.charCodeAt(index);
584
- // If the character is a control character, append its Unicode or
585
- // shorthand escape sequence; otherwise, append the character as-is.
586
- switch (charCode) {
587
- case 8: case 9: case 10: case 12: case 13: case 34: case 92:
588
- result += Escapes[charCode];
589
- break;
590
- default:
591
- if (charCode < 32) {
592
- result += unicodePrefix + toPaddedString(2, charCode.toString(16));
639
+ // Internal: Converts `value` into a zero-padded string such that its
640
+ // length is at least equal to `width`. The `width` must be <= 6.
641
+ var leadingZeroes = "000000";
642
+ var toPaddedString = function (width, value) {
643
+ // The `|| 0` expression is necessary to work around a bug in
644
+ // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`.
645
+ return (leadingZeroes + (value || 0)).slice(-width);
646
+ };
647
+
648
+ // Internal: Double-quotes a string `value`, replacing all ASCII control
649
+ // characters (characters with code unit values between 0 and 31) with
650
+ // their escaped equivalents. This is an implementation of the
651
+ // `Quote(value)` operation defined in ES 5.1 section 15.12.3.
652
+ var unicodePrefix = "\\u00";
653
+ var quote = function (value) {
654
+ var result = '"',
655
+ index = 0,
656
+ length = value.length,
657
+ isLarge = length > 10 && charIndexBuggy,
658
+ symbols;
659
+ if (isLarge) {
660
+ symbols = value.split("");
661
+ }
662
+ for (; index < length; index++) {
663
+ var charCode = value.charCodeAt(index);
664
+ // If the character is a control character, append its Unicode or
665
+ // shorthand escape sequence; otherwise, append the character as-is.
666
+ switch (charCode) {
667
+ case 8:
668
+ case 9:
669
+ case 10:
670
+ case 12:
671
+ case 13:
672
+ case 34:
673
+ case 92:
674
+ result += Escapes[charCode];
593
675
  break;
594
- }
595
- result += isLarge ? symbols[index] : charIndexBuggy ? value.charAt(index) : value[index];
676
+ default:
677
+ if (charCode < 32) {
678
+ result +=
679
+ unicodePrefix + toPaddedString(2, charCode.toString(16));
680
+ break;
681
+ }
682
+ result += isLarge
683
+ ? symbols[index]
684
+ : charIndexBuggy
685
+ ? value.charAt(index)
686
+ : value[index];
687
+ }
596
688
  }
597
- }
598
- return result + '"';
599
- };
689
+ return result + '"';
690
+ };
600
691
 
601
- // Internal: Recursively serializes an object. Implements the
602
- // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.
603
- var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {
604
- var value = object[property], className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, hasMembers, result;
605
- try {
606
- // Necessary for host object support.
607
- value = object[property];
608
- } catch (exception) {}
609
- if (typeof value === "object" && value) {
610
- className = getClass.call(value);
611
- if (className == dateClass && !isProperty.call(value, "toJSON")) {
612
- if (value > -1 / 0 && value < 1 / 0) {
613
- // Dates are serialized according to the `Date#toJSON` method
614
- // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15
615
- // for the ISO 8601 date time string format.
616
- if (getDay) {
617
- // Manually compute the year, month, date, hours, minutes,
618
- // seconds, and milliseconds if the `getUTC*` methods are
619
- // buggy. Adapted from @Yaffle's `date-shim` project.
620
- date = floor(value / 864e5);
621
- for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);
622
- for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);
623
- date = 1 + date - getDay(year, month);
624
- // The `time` value specifies the time within the day (see ES
625
- // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used
626
- // to compute `A modulo B`, as the `%` operator does not
627
- // correspond to the `modulo` operation for negative numbers.
628
- time = (value % 864e5 + 864e5) % 864e5;
629
- // The hours, minutes, seconds, and milliseconds are obtained by
630
- // decomposing the time within the day. See section 15.9.1.10.
631
- hours = floor(time / 36e5) % 24;
632
- minutes = floor(time / 6e4) % 60;
633
- seconds = floor(time / 1e3) % 60;
634
- milliseconds = time % 1e3;
692
+ // Internal: Recursively serializes an object. Implements the
693
+ // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.
694
+ var serialize = function (
695
+ property,
696
+ object,
697
+ callback,
698
+ properties,
699
+ whitespace,
700
+ indentation,
701
+ stack
702
+ ) {
703
+ var value = object[property],
704
+ className,
705
+ year,
706
+ month,
707
+ date,
708
+ time,
709
+ hours,
710
+ minutes,
711
+ seconds,
712
+ milliseconds,
713
+ results,
714
+ element,
715
+ index,
716
+ length,
717
+ prefix,
718
+ hasMembers,
719
+ result;
720
+ try {
721
+ // Necessary for host object support.
722
+ value = object[property];
723
+ } catch (exception) {}
724
+ if (typeof value === "object" && value) {
725
+ className = getClass.call(value);
726
+ if (className == dateClass && !isProperty.call(value, "toJSON")) {
727
+ if (value > -1 / 0 && value < 1 / 0) {
728
+ // Dates are serialized according to the `Date#toJSON` method
729
+ // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15
730
+ // for the ISO 8601 date time string format.
731
+ if (getDay) {
732
+ // Manually compute the year, month, date, hours, minutes,
733
+ // seconds, and milliseconds if the `getUTC*` methods are
734
+ // buggy. Adapted from @Yaffle's `date-shim` project.
735
+ date = floor(value / 864e5);
736
+ for (
737
+ year = floor(date / 365.2425) + 1970 - 1;
738
+ getDay(year + 1, 0) <= date;
739
+ year++
740
+ );
741
+ for (
742
+ month = floor((date - getDay(year, 0)) / 30.42);
743
+ getDay(year, month + 1) <= date;
744
+ month++
745
+ );
746
+ date = 1 + date - getDay(year, month);
747
+ // The `time` value specifies the time within the day (see ES
748
+ // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used
749
+ // to compute `A modulo B`, as the `%` operator does not
750
+ // correspond to the `modulo` operation for negative numbers.
751
+ time = ((value % 864e5) + 864e5) % 864e5;
752
+ // The hours, minutes, seconds, and milliseconds are obtained by
753
+ // decomposing the time within the day. See section 15.9.1.10.
754
+ hours = floor(time / 36e5) % 24;
755
+ minutes = floor(time / 6e4) % 60;
756
+ seconds = floor(time / 1e3) % 60;
757
+ milliseconds = time % 1e3;
758
+ } else {
759
+ year = value.getUTCFullYear();
760
+ month = value.getUTCMonth();
761
+ date = value.getUTCDate();
762
+ hours = value.getUTCHours();
763
+ minutes = value.getUTCMinutes();
764
+ seconds = value.getUTCSeconds();
765
+ milliseconds = value.getUTCMilliseconds();
766
+ }
767
+ // Serialize extended years correctly.
768
+ value =
769
+ (year <= 0 || year >= 1e4
770
+ ? (year < 0 ? "-" : "+") +
771
+ toPaddedString(6, year < 0 ? -year : year)
772
+ : toPaddedString(4, year)) +
773
+ "-" +
774
+ toPaddedString(2, month + 1) +
775
+ "-" +
776
+ toPaddedString(2, date) +
777
+ // Months, dates, hours, minutes, and seconds should have two
778
+ // digits; milliseconds should have three.
779
+ "T" +
780
+ toPaddedString(2, hours) +
781
+ ":" +
782
+ toPaddedString(2, minutes) +
783
+ ":" +
784
+ toPaddedString(2, seconds) +
785
+ // Milliseconds are optional in ES 5.0, but required in 5.1.
786
+ "." +
787
+ toPaddedString(3, milliseconds) +
788
+ "Z";
635
789
  } else {
636
- year = value.getUTCFullYear();
637
- month = value.getUTCMonth();
638
- date = value.getUTCDate();
639
- hours = value.getUTCHours();
640
- minutes = value.getUTCMinutes();
641
- seconds = value.getUTCSeconds();
642
- milliseconds = value.getUTCMilliseconds();
790
+ value = null;
643
791
  }
644
- // Serialize extended years correctly.
645
- value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +
646
- "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) +
647
- // Months, dates, hours, minutes, and seconds should have two
648
- // digits; milliseconds should have three.
649
- "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) +
650
- // Milliseconds are optional in ES 5.0, but required in 5.1.
651
- "." + toPaddedString(3, milliseconds) + "Z";
652
- } else {
653
- value = null;
792
+ } else if (
793
+ typeof value.toJSON === "function" &&
794
+ ((className != numberClass &&
795
+ className != stringClass &&
796
+ className != arrayClass) ||
797
+ isProperty.call(value, "toJSON"))
798
+ ) {
799
+ // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the
800
+ // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3
801
+ // ignores all `toJSON` methods on these objects unless they are
802
+ // defined directly on an instance.
803
+ value = value.toJSON(property);
654
804
  }
655
- } else if (typeof value.toJSON === "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) {
656
- // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the
657
- // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3
658
- // ignores all `toJSON` methods on these objects unless they are
659
- // defined directly on an instance.
660
- value = value.toJSON(property);
661
805
  }
662
- }
663
- if (callback) {
664
- // If a replacement function was provided, call it to obtain the value
665
- // for serialization.
666
- value = callback.call(object, property, value);
667
- }
668
- if (value === null) {
669
- return "null";
670
- }
671
- className = getClass.call(value);
672
- if (className == booleanClass) {
673
- // Booleans are represented literally.
674
- return "" + value;
675
- } else if (className == numberClass) {
676
- // JSON numbers must be finite. `Infinity` and `NaN` are serialized as
677
- // `"null"`.
678
- return value > -1 / 0 && value < 1 / 0 ? "" + value : "null";
679
- } else if (className == stringClass) {
680
- // Strings are double-quoted and escaped.
681
- return quote("" + value);
682
- }
683
- // Recursively serialize objects and arrays.
684
- if (typeof value === "object") {
685
- // Check for cyclic structures. This is a linear search; performance
686
- // is inversely proportional to the number of unique nested objects.
687
- for (length = stack.length; length--;) {
688
- if (stack[length] === value) {
689
- // Cyclic structures cannot be serialized by `JSON.stringify`.
690
- throw TypeError();
691
- }
806
+ if (callback) {
807
+ // If a replacement function was provided, call it to obtain the value
808
+ // for serialization.
809
+ value = callback.call(object, property, value);
810
+ }
811
+ if (value === null) {
812
+ return "null";
692
813
  }
693
- // Add the object to the stack of traversed objects.
694
- stack.push(value);
695
- results = [];
696
- // Save the current indentation level and indent one additional level.
697
- prefix = indentation;
698
- indentation += whitespace;
699
- if (className == arrayClass) {
700
- // Recursively serialize array elements.
701
- for (index = 0, length = value.length; index < length; hasMembers || (hasMembers = true), index++) {
702
- element = serialize(index, value, callback, properties, whitespace, indentation, stack);
703
- results.push(element === undef ? "null" : element);
814
+ className = getClass.call(value);
815
+ if (className == booleanClass) {
816
+ // Booleans are represented literally.
817
+ return "" + value;
818
+ } else if (className == numberClass) {
819
+ // JSON numbers must be finite. `Infinity` and `NaN` are serialized as
820
+ // `"null"`.
821
+ return value > -1 / 0 && value < 1 / 0 ? "" + value : "null";
822
+ } else if (className == stringClass) {
823
+ // Strings are double-quoted and escaped.
824
+ return quote("" + value);
825
+ }
826
+ // Recursively serialize objects and arrays.
827
+ if (typeof value === "object") {
828
+ // Check for cyclic structures. This is a linear search; performance
829
+ // is inversely proportional to the number of unique nested objects.
830
+ for (length = stack.length; length--; ) {
831
+ if (stack[length] === value) {
832
+ // Cyclic structures cannot be serialized by `JSON.stringify`.
833
+ throw TypeError();
834
+ }
704
835
  }
705
- result = hasMembers ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]";
706
- } else {
707
- // Recursively serialize object members. Members are selected from
708
- // either a user-specified list of property names, or the object
709
- // itself.
710
- forEach(properties || value, function (property) {
711
- var element = serialize(property, value, callback, properties, whitespace, indentation, stack);
712
- if (element !== undef) {
713
- // According to ES 5.1 section 15.12.3: "If `gap` {whitespace}
714
- // is not the empty string, let `member` {quote(property) + ":"}
715
- // be the concatenation of `member` and the `space` character."
716
- // The "`space` character" refers to the literal space
717
- // character, not the `space` {width} argument provided to
718
- // `JSON.stringify`.
719
- results.push(quote(property) + ":" + (whitespace ? " " : "") + element);
836
+ // Add the object to the stack of traversed objects.
837
+ stack.push(value);
838
+ results = [];
839
+ // Save the current indentation level and indent one additional level.
840
+ prefix = indentation;
841
+ indentation += whitespace;
842
+ if (className == arrayClass) {
843
+ // Recursively serialize array elements.
844
+ for (
845
+ index = 0, length = value.length;
846
+ index < length;
847
+ hasMembers || (hasMembers = true), index++
848
+ ) {
849
+ element = serialize(
850
+ index,
851
+ value,
852
+ callback,
853
+ properties,
854
+ whitespace,
855
+ indentation,
856
+ stack
857
+ );
858
+
859
+ results.push(element === undef ? "null" : element);
720
860
  }
721
- hasMembers || (hasMembers = true);
722
- });
723
- result = hasMembers ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}";
861
+ result = hasMembers
862
+ ? whitespace
863
+ ? "[\n" +
864
+ indentation +
865
+ results.join(",\n" + indentation) +
866
+ "\n" +
867
+ prefix +
868
+ "]"
869
+ : "[" + results.join(",") + "]"
870
+ : "[]";
871
+ } else {
872
+ // Recursively serialize object members. Members are selected from
873
+ // either a user-specified list of property names, or the object
874
+ // itself.
875
+ forEach(properties || value, function (property) {
876
+ var element = serialize(
877
+ property,
878
+ value,
879
+ callback,
880
+ properties,
881
+ whitespace,
882
+ indentation,
883
+ stack
884
+ );
885
+
886
+ if (element !== undef) {
887
+ // According to ES 5.1 section 15.12.3: "If `gap` {whitespace}
888
+ // is not the empty string, let `member` {quote(property) + ":"}
889
+ // be the concatenation of `member` and the `space` character."
890
+ // The "`space` character" refers to the literal space
891
+ // character, not the `space` {width} argument provided to
892
+ // `JSON.stringify`.
893
+ results.push(
894
+ quote(property) + ":" + (whitespace ? " " : "") + element
895
+ );
896
+ }
897
+ hasMembers || (hasMembers = true);
898
+ });
899
+ result = hasMembers
900
+ ? whitespace
901
+ ? "{\n" +
902
+ indentation +
903
+ results.join(",\n" + indentation) +
904
+ "\n" +
905
+ prefix +
906
+ "}"
907
+ : "{" + results.join(",") + "}"
908
+ : "{}";
909
+ }
910
+ // Remove the object from the traversed object stack.
911
+ stack.pop();
912
+ return result;
724
913
  }
725
- // Remove the object from the traversed object stack.
726
- stack.pop();
727
- return result;
728
- }
729
- };
914
+ };
730
915
 
731
- // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.
732
- JSON3.stringify = function (source, filter, width) {
733
- var whitespace, callback, properties;
734
- if (typeof filter === "function" || typeof filter === "object" && filter) {
735
- if (getClass.call(filter) == functionClass) {
736
- callback = filter;
737
- } else if (getClass.call(filter) == arrayClass) {
738
- // Convert the property names array into a makeshift set.
739
- properties = {};
740
- for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((getClass.call(value) == stringClass || getClass.call(value) == numberClass) && (properties[value] = 1)));
916
+ // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.
917
+ JSON3.stringify = function (source, filter, width) {
918
+ var whitespace, callback, properties;
919
+ if (
920
+ typeof filter === "function" ||
921
+ (typeof filter === "object" && filter)
922
+ ) {
923
+ if (getClass.call(filter) == functionClass) {
924
+ callback = filter;
925
+ } else if (getClass.call(filter) == arrayClass) {
926
+ // Convert the property names array into a makeshift set.
927
+ properties = {};
928
+ for (
929
+ var index = 0, length = filter.length, value;
930
+ index < length;
931
+ value = filter[index++],
932
+ (getClass.call(value) == stringClass ||
933
+ getClass.call(value) == numberClass) &&
934
+ (properties[value] = 1)
935
+ );
936
+ }
741
937
  }
742
- }
743
- if (width) {
744
- if (getClass.call(width) == numberClass) {
745
- // Convert the `width` to an integer and create a string containing
746
- // `width` number of space characters.
747
- if ((width -= width % 1) > 0) {
748
- for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " ");
938
+ if (width) {
939
+ if (getClass.call(width) == numberClass) {
940
+ // Convert the `width` to an integer and create a string containing
941
+ // `width` number of space characters.
942
+ if ((width -= width % 1) > 0) {
943
+ for (
944
+ whitespace = "", width > 10 && (width = 10);
945
+ whitespace.length < width;
946
+ whitespace += " "
947
+ );
948
+ }
949
+ } else if (getClass.call(width) == stringClass) {
950
+ whitespace = width.length <= 10 ? width : width.slice(0, 10);
749
951
  }
750
- } else if (getClass.call(width) == stringClass) {
751
- whitespace = width.length <= 10 ? width : width.slice(0, 10);
752
952
  }
753
- }
754
- // Opera <= 7.54u2 discards the values associated with empty string keys
755
- // (`""`) only if they are used directly within an object member list
756
- // (e.g., `!("" in { "": 1})`).
757
- return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []);
758
- };
759
- }
953
+ // Opera <= 7.54u2 discards the values associated with empty string keys
954
+ // (`""`) only if they are used directly within an object member list
955
+ // (e.g., `!("" in { "": 1})`).
956
+ return serialize(
957
+ "",
958
+ ((value = {}), (value[""] = source), value),
959
+ callback,
960
+ properties,
961
+ whitespace,
962
+ "",
963
+ []
964
+ );
965
+ };
966
+ }
760
967
 
761
- // Public: Parses a JSON source string.
762
- if (!has("json-parse")) {
763
- var fromCharCode = String.fromCharCode;
968
+ // Public: Parses a JSON source string.
969
+ if (!has("json-parse")) {
970
+ var fromCharCode = String.fromCharCode;
764
971
 
765
- // Internal: A map of escaped control characters and their unescaped
766
- // equivalents.
767
- var Unescapes = {
768
- 92: "\\",
769
- 34: '"',
770
- 47: "/",
771
- 98: "\b",
772
- 116: "\t",
773
- 110: "\n",
774
- 102: "\f",
775
- 114: "\r"
776
- };
972
+ // Internal: A map of escaped control characters and their unescaped
973
+ // equivalents.
974
+ var Unescapes = {
975
+ 92: "\\",
976
+ 34: '"',
977
+ 47: "/",
978
+ 98: "\b",
979
+ 116: "\t",
980
+ 110: "\n",
981
+ 102: "\f",
982
+ 114: "\r"
983
+ };
777
984
 
778
- // Internal: Stores the parser state.
779
- var Index, Source;
985
+ // Internal: Stores the parser state.
986
+ var Index, Source;
780
987
 
781
- // Internal: Resets the parser state and throws a `SyntaxError`.
782
- var abort = function() {
783
- Index = Source = null;
784
- throw SyntaxError();
785
- };
988
+ // Internal: Resets the parser state and throws a `SyntaxError`.
989
+ var abort = function () {
990
+ Index = Source = null;
991
+ throw SyntaxError();
992
+ };
786
993
 
787
- // Internal: Returns the next token, or `"$"` if the parser has reached
788
- // the end of the source string. A token may be a string, number, `null`
789
- // literal, or Boolean literal.
790
- var lex = function () {
791
- var source = Source, length = source.length, value, begin, position, isSigned, charCode;
792
- while (Index < length) {
793
- charCode = source.charCodeAt(Index);
794
- switch (charCode) {
795
- case 9: case 10: case 13: case 32:
796
- // Skip whitespace tokens, including tabs, carriage returns, line
797
- // feeds, and space characters.
798
- Index++;
799
- break;
800
- case 123: case 125: case 91: case 93: case 58: case 44:
801
- // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at
802
- // the current position.
803
- value = charIndexBuggy ? source.charAt(Index) : source[Index];
804
- Index++;
805
- return value;
806
- case 34:
807
- // `"` delimits a JSON string; advance to the next character and
808
- // begin parsing the string. String tokens are prefixed with the
809
- // sentinel `@` character to distinguish them from punctuators and
810
- // end-of-string tokens.
811
- for (value = "@", Index++; Index < length;) {
812
- charCode = source.charCodeAt(Index);
813
- if (charCode < 32) {
814
- // Unescaped ASCII control characters (those with a code unit
815
- // less than the space character) are not permitted.
816
- abort();
817
- } else if (charCode == 92) {
818
- // A reverse solidus (`\`) marks the beginning of an escaped
819
- // control character (including `"`, `\`, and `/`) or Unicode
820
- // escape sequence.
821
- charCode = source.charCodeAt(++Index);
822
- switch (charCode) {
823
- case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:
824
- // Revive escaped control characters.
825
- value += Unescapes[charCode];
826
- Index++;
827
- break;
828
- case 117:
829
- // `\u` marks the beginning of a Unicode escape sequence.
830
- // Advance to the first character and validate the
831
- // four-digit code point.
832
- begin = ++Index;
833
- for (position = Index + 4; Index < position; Index++) {
834
- charCode = source.charCodeAt(Index);
835
- // A valid sequence comprises four hexdigits (case-
836
- // insensitive) that form a single hexadecimal value.
837
- if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {
838
- // Invalid Unicode escape sequence.
839
- abort();
994
+ // Internal: Returns the next token, or `"$"` if the parser has reached
995
+ // the end of the source string. A token may be a string, number, `null`
996
+ // literal, or Boolean literal.
997
+ var lex = function () {
998
+ var source = Source,
999
+ length = source.length,
1000
+ value,
1001
+ begin,
1002
+ position,
1003
+ isSigned,
1004
+ charCode;
1005
+ while (Index < length) {
1006
+ charCode = source.charCodeAt(Index);
1007
+ switch (charCode) {
1008
+ case 9:
1009
+ case 10:
1010
+ case 13:
1011
+ case 32:
1012
+ // Skip whitespace tokens, including tabs, carriage returns, line
1013
+ // feeds, and space characters.
1014
+ Index++;
1015
+ break;
1016
+ case 123:
1017
+ case 125:
1018
+ case 91:
1019
+ case 93:
1020
+ case 58:
1021
+ case 44:
1022
+ // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at
1023
+ // the current position.
1024
+ value = charIndexBuggy ? source.charAt(Index) : source[Index];
1025
+ Index++;
1026
+ return value;
1027
+ case 34:
1028
+ // `"` delimits a JSON string; advance to the next character and
1029
+ // begin parsing the string. String tokens are prefixed with the
1030
+ // sentinel `@` character to distinguish them from punctuators and
1031
+ // end-of-string tokens.
1032
+ for (value = "@", Index++; Index < length; ) {
1033
+ charCode = source.charCodeAt(Index);
1034
+ if (charCode < 32) {
1035
+ // Unescaped ASCII control characters (those with a code unit
1036
+ // less than the space character) are not permitted.
1037
+ abort();
1038
+ } else if (charCode == 92) {
1039
+ // A reverse solidus (`\`) marks the beginning of an escaped
1040
+ // control character (including `"`, `\`, and `/`) or Unicode
1041
+ // escape sequence.
1042
+ charCode = source.charCodeAt(++Index);
1043
+ switch (charCode) {
1044
+ case 92:
1045
+ case 34:
1046
+ case 47:
1047
+ case 98:
1048
+ case 116:
1049
+ case 110:
1050
+ case 102:
1051
+ case 114:
1052
+ // Revive escaped control characters.
1053
+ value += Unescapes[charCode];
1054
+ Index++;
1055
+ break;
1056
+ case 117:
1057
+ // `\u` marks the beginning of a Unicode escape sequence.
1058
+ // Advance to the first character and validate the
1059
+ // four-digit code point.
1060
+ begin = ++Index;
1061
+ for (position = Index + 4; Index < position; Index++) {
1062
+ charCode = source.charCodeAt(Index);
1063
+ // A valid sequence comprises four hexdigits (case-
1064
+ // insensitive) that form a single hexadecimal value.
1065
+ if (
1066
+ !(
1067
+ (charCode >= 48 && charCode <= 57) ||
1068
+ (charCode >= 97 && charCode <= 102) ||
1069
+ (charCode >= 65 && charCode <= 70)
1070
+ )
1071
+ ) {
1072
+ // Invalid Unicode escape sequence.
1073
+ abort();
1074
+ }
840
1075
  }
841
- }
842
- // Revive the escaped character.
843
- value += fromCharCode("0x" + source.slice(begin, Index));
1076
+ // Revive the escaped character.
1077
+ value += fromCharCode(
1078
+ "0x" + source.slice(begin, Index)
1079
+ );
1080
+
1081
+ break;
1082
+ default:
1083
+ // Invalid escape sequence.
1084
+ abort();
1085
+ }
1086
+ } else {
1087
+ if (charCode == 34) {
1088
+ // An unescaped double-quote character marks the end of the
1089
+ // string.
844
1090
  break;
845
- default:
846
- // Invalid escape sequence.
847
- abort();
1091
+ }
1092
+ charCode = source.charCodeAt(Index);
1093
+ begin = Index;
1094
+ // Optimize for the common case where a string is valid.
1095
+ while (charCode >= 32 && charCode != 92 && charCode != 34) {
1096
+ charCode = source.charCodeAt(++Index);
1097
+ }
1098
+ // Append the string as-is.
1099
+ value += source.slice(begin, Index);
848
1100
  }
849
- } else {
850
- if (charCode == 34) {
851
- // An unescaped double-quote character marks the end of the
852
- // string.
853
- break;
1101
+ }
1102
+ if (source.charCodeAt(Index) == 34) {
1103
+ // Advance to the next character and return the revived string.
1104
+ Index++;
1105
+ return value;
1106
+ }
1107
+ // Unterminated string.
1108
+ abort();
1109
+ default:
1110
+ // Parse numbers and literals.
1111
+ begin = Index;
1112
+ // Advance past the negative sign, if one is specified.
1113
+ if (charCode == 45) {
1114
+ isSigned = true;
1115
+ charCode = source.charCodeAt(++Index);
1116
+ }
1117
+ // Parse an integer or floating-point value.
1118
+ if (charCode >= 48 && charCode <= 57) {
1119
+ // Leading zeroes are interpreted as octal literals.
1120
+ if (
1121
+ charCode == 48 &&
1122
+ ((charCode = source.charCodeAt(Index + 1)),
1123
+ charCode >= 48 && charCode <= 57)
1124
+ ) {
1125
+ // Illegal octal literal.
1126
+ abort();
1127
+ }
1128
+ isSigned = false;
1129
+ // Parse the integer component.
1130
+ for (
1131
+ ;
1132
+ Index < length &&
1133
+ ((charCode = source.charCodeAt(Index)),
1134
+ charCode >= 48 && charCode <= 57);
1135
+ Index++
1136
+ );
1137
+ // Floats cannot contain a leading decimal point; however, this
1138
+ // case is already accounted for by the parser.
1139
+ if (source.charCodeAt(Index) == 46) {
1140
+ position = ++Index;
1141
+ // Parse the decimal component.
1142
+ for (
1143
+ ;
1144
+ position < length &&
1145
+ ((charCode = source.charCodeAt(position)),
1146
+ charCode >= 48 && charCode <= 57);
1147
+ position++
1148
+ );
1149
+ if (position == Index) {
1150
+ // Illegal trailing decimal.
1151
+ abort();
1152
+ }
1153
+ Index = position;
854
1154
  }
1155
+ // Parse exponents. The `e` denoting the exponent is
1156
+ // case-insensitive.
855
1157
  charCode = source.charCodeAt(Index);
856
- begin = Index;
857
- // Optimize for the common case where a string is valid.
858
- while (charCode >= 32 && charCode != 92 && charCode != 34) {
1158
+ if (charCode == 101 || charCode == 69) {
859
1159
  charCode = source.charCodeAt(++Index);
1160
+ // Skip past the sign following the exponent, if one is
1161
+ // specified.
1162
+ if (charCode == 43 || charCode == 45) {
1163
+ Index++;
1164
+ }
1165
+ // Parse the exponential component.
1166
+ for (
1167
+ position = Index;
1168
+ position < length &&
1169
+ ((charCode = source.charCodeAt(position)),
1170
+ charCode >= 48 && charCode <= 57);
1171
+ position++
1172
+ );
1173
+ if (position == Index) {
1174
+ // Illegal empty exponent.
1175
+ abort();
1176
+ }
1177
+ Index = position;
860
1178
  }
861
- // Append the string as-is.
862
- value += source.slice(begin, Index);
1179
+ // Coerce the parsed value to a JavaScript number.
1180
+ return +source.slice(begin, Index);
863
1181
  }
864
- }
865
- if (source.charCodeAt(Index) == 34) {
866
- // Advance to the next character and return the revived string.
867
- Index++;
868
- return value;
869
- }
870
- // Unterminated string.
871
- abort();
872
- default:
873
- // Parse numbers and literals.
874
- begin = Index;
875
- // Advance past the negative sign, if one is specified.
876
- if (charCode == 45) {
877
- isSigned = true;
878
- charCode = source.charCodeAt(++Index);
879
- }
880
- // Parse an integer or floating-point value.
881
- if (charCode >= 48 && charCode <= 57) {
882
- // Leading zeroes are interpreted as octal literals.
883
- if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {
884
- // Illegal octal literal.
1182
+ // A negative sign may only precede numbers.
1183
+ if (isSigned) {
885
1184
  abort();
886
1185
  }
887
- isSigned = false;
888
- // Parse the integer component.
889
- for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);
890
- // Floats cannot contain a leading decimal point; however, this
891
- // case is already accounted for by the parser.
892
- if (source.charCodeAt(Index) == 46) {
893
- position = ++Index;
894
- // Parse the decimal component.
895
- for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
896
- if (position == Index) {
897
- // Illegal trailing decimal.
898
- abort();
899
- }
900
- Index = position;
901
- }
902
- // Parse exponents. The `e` denoting the exponent is
903
- // case-insensitive.
904
- charCode = source.charCodeAt(Index);
905
- if (charCode == 101 || charCode == 69) {
906
- charCode = source.charCodeAt(++Index);
907
- // Skip past the sign following the exponent, if one is
908
- // specified.
909
- if (charCode == 43 || charCode == 45) {
910
- Index++;
911
- }
912
- // Parse the exponential component.
913
- for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
914
- if (position == Index) {
915
- // Illegal empty exponent.
916
- abort();
917
- }
918
- Index = position;
1186
+ // `true`, `false`, and `null` literals.
1187
+ if (source.slice(Index, Index + 4) === "true") {
1188
+ Index += 4;
1189
+ return true;
1190
+ } else if (source.slice(Index, Index + 5) === "false") {
1191
+ Index += 5;
1192
+ return false;
1193
+ } else if (source.slice(Index, Index + 4) === "null") {
1194
+ Index += 4;
1195
+ return null;
919
1196
  }
920
- // Coerce the parsed value to a JavaScript number.
921
- return +source.slice(begin, Index);
922
- }
923
- // A negative sign may only precede numbers.
924
- if (isSigned) {
1197
+ // Unrecognized token.
925
1198
  abort();
926
- }
927
- // `true`, `false`, and `null` literals.
928
- if (source.slice(Index, Index + 4) === "true") {
929
- Index += 4;
930
- return true;
931
- } else if (source.slice(Index, Index + 5) === "false") {
932
- Index += 5;
933
- return false;
934
- } else if (source.slice(Index, Index + 4) === "null") {
935
- Index += 4;
936
- return null;
937
- }
938
- // Unrecognized token.
939
- abort();
1199
+ }
940
1200
  }
941
- }
942
- // Return the sentinel `$` character if the parser has reached the end
943
- // of the source string.
944
- return "$";
945
- };
1201
+ // Return the sentinel `$` character if the parser has reached the end
1202
+ // of the source string.
1203
+ return "$";
1204
+ };
946
1205
 
947
- // Internal: Parses a JSON `value` token.
948
- var get = function (value) {
949
- var results, hasMembers;
950
- if (value === "$") {
951
- // Unexpected end of input.
952
- abort();
953
- }
954
- if (typeof value === "string") {
955
- if ((charIndexBuggy ? value.charAt(0) : value[0]) === "@") {
956
- // Remove the sentinel `@` character.
957
- return value.slice(1);
1206
+ // Internal: Parses a JSON `value` token.
1207
+ var get = function (value) {
1208
+ var results, hasMembers;
1209
+ if (value === "$") {
1210
+ // Unexpected end of input.
1211
+ abort();
958
1212
  }
959
- // Parse object and array literals.
960
- if (value === "[") {
961
- // Parses a JSON array, returning a new JavaScript array.
962
- results = [];
963
- for (;; hasMembers || (hasMembers = true)) {
964
- value = lex();
965
- // A closing square bracket marks the end of the array literal.
966
- if (value === "]") {
967
- break;
968
- }
969
- // If the array literal contains elements, the current token
970
- // should be a comma separating the previous element from the
971
- // next.
972
- if (hasMembers) {
973
- if (value === ",") {
974
- value = lex();
975
- if (value === "]") {
976
- // Unexpected trailing `,` in array literal.
1213
+ if (typeof value === "string") {
1214
+ if ((charIndexBuggy ? value.charAt(0) : value[0]) === "@") {
1215
+ // Remove the sentinel `@` character.
1216
+ return value.slice(1);
1217
+ }
1218
+ // Parse object and array literals.
1219
+ if (value === "[") {
1220
+ // Parses a JSON array, returning a new JavaScript array.
1221
+ results = [];
1222
+ for (; ; hasMembers || (hasMembers = true)) {
1223
+ value = lex();
1224
+ // A closing square bracket marks the end of the array literal.
1225
+ if (value === "]") {
1226
+ break;
1227
+ }
1228
+ // If the array literal contains elements, the current token
1229
+ // should be a comma separating the previous element from the
1230
+ // next.
1231
+ if (hasMembers) {
1232
+ if (value === ",") {
1233
+ value = lex();
1234
+ if (value === "]") {
1235
+ // Unexpected trailing `,` in array literal.
1236
+ abort();
1237
+ }
1238
+ } else {
1239
+ // A `,` must separate each array element.
977
1240
  abort();
978
1241
  }
979
- } else {
980
- // A `,` must separate each array element.
1242
+ }
1243
+ // Elisions and leading commas are not permitted.
1244
+ if (value === ",") {
981
1245
  abort();
982
1246
  }
1247
+ results.push(get(value));
983
1248
  }
984
- // Elisions and leading commas are not permitted.
985
- if (value === ",") {
986
- abort();
987
- }
988
- results.push(get(value));
989
- }
990
- return results;
991
- } else if (value === "{") {
992
- // Parses a JSON object, returning a new JavaScript object.
993
- results = {};
994
- for (;; hasMembers || (hasMembers = true)) {
995
- value = lex();
996
- // A closing curly brace marks the end of the object literal.
997
- if (value == "}") {
998
- break;
999
- }
1000
- // If the object literal contains members, the current token
1001
- // should be a comma separator.
1002
- if (hasMembers) {
1003
- if (value === ",") {
1004
- value = lex();
1005
- if (value === "}") {
1006
- // Unexpected trailing `,` in object literal.
1249
+ return results;
1250
+ } else if (value === "{") {
1251
+ // Parses a JSON object, returning a new JavaScript object.
1252
+ results = {};
1253
+ for (; ; hasMembers || (hasMembers = true)) {
1254
+ value = lex();
1255
+ // A closing curly brace marks the end of the object literal.
1256
+ if (value == "}") {
1257
+ break;
1258
+ }
1259
+ // If the object literal contains members, the current token
1260
+ // should be a comma separator.
1261
+ if (hasMembers) {
1262
+ if (value === ",") {
1263
+ value = lex();
1264
+ if (value === "}") {
1265
+ // Unexpected trailing `,` in object literal.
1266
+ abort();
1267
+ }
1268
+ } else {
1269
+ // A `,` must separate each object member.
1007
1270
  abort();
1008
1271
  }
1009
- } else {
1010
- // A `,` must separate each object member.
1272
+ }
1273
+ // Leading commas are not permitted, object property names must be
1274
+ // double-quoted strings, and a `:` must separate each property
1275
+ // name and value.
1276
+ if (
1277
+ value === "," ||
1278
+ typeof value !== "string" ||
1279
+ (charIndexBuggy ? value.charAt(0) : value[0]) !== "@" ||
1280
+ lex() !== ":"
1281
+ ) {
1011
1282
  abort();
1012
1283
  }
1284
+ results[value.slice(1)] = get(lex());
1013
1285
  }
1014
- // Leading commas are not permitted, object property names must be
1015
- // double-quoted strings, and a `:` must separate each property
1016
- // name and value.
1017
- if (value === "," || typeof value !== "string" || (charIndexBuggy ? value.charAt(0) : value[0]) !== "@" || lex() !== ":") {
1018
- abort();
1019
- }
1020
- results[value.slice(1)] = get(lex());
1286
+ return results;
1021
1287
  }
1022
- return results;
1288
+ // Unexpected token encountered.
1289
+ abort();
1023
1290
  }
1024
- // Unexpected token encountered.
1025
- abort();
1026
- }
1027
- return value;
1028
- };
1291
+ return value;
1292
+ };
1029
1293
 
1030
- // Internal: Updates a traversed object member.
1031
- var update = function(source, property, callback) {
1032
- var element = walk(source, property, callback);
1033
- if (element === undef) {
1034
- delete source[property];
1035
- } else {
1036
- source[property] = element;
1037
- }
1038
- };
1294
+ // Internal: Updates a traversed object member.
1295
+ var update = function (source, property, callback) {
1296
+ var element = walk(source, property, callback);
1297
+ if (element === undef) {
1298
+ delete source[property];
1299
+ } else {
1300
+ source[property] = element;
1301
+ }
1302
+ };
1039
1303
 
1040
- // Internal: Recursively traverses a parsed JSON object, invoking the
1041
- // `callback` function for each value. This is an implementation of the
1042
- // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.
1043
- var walk = function (source, property, callback) {
1044
- var value = source[property], length;
1045
- if (typeof value === "object" && value) {
1046
- // `forEach` can't be used to traverse an array in Opera <= 8.54
1047
- // because its `Object#hasOwnProperty` implementation returns `false`
1048
- // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`).
1049
- if (getClass.call(value) == arrayClass) {
1050
- for (length = value.length; length--;) {
1051
- update(value, length, callback);
1304
+ // Internal: Recursively traverses a parsed JSON object, invoking the
1305
+ // `callback` function for each value. This is an implementation of the
1306
+ // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.
1307
+ var walk = function (source, property, callback) {
1308
+ var value = source[property],
1309
+ length;
1310
+ if (typeof value === "object" && value) {
1311
+ // `forEach` can't be used to traverse an array in Opera <= 8.54
1312
+ // because its `Object#hasOwnProperty` implementation returns `false`
1313
+ // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`).
1314
+ if (getClass.call(value) == arrayClass) {
1315
+ for (length = value.length; length--; ) {
1316
+ update(value, length, callback);
1317
+ }
1318
+ } else {
1319
+ forEach(value, function (property) {
1320
+ update(value, property, callback);
1321
+ });
1052
1322
  }
1053
- } else {
1054
- forEach(value, function (property) {
1055
- update(value, property, callback);
1056
- });
1057
1323
  }
1058
- }
1059
- return callback.call(source, property, value);
1060
- };
1324
+ return callback.call(source, property, value);
1325
+ };
1061
1326
 
1062
- // Public: `JSON.parse`. See ES 5.1 section 15.12.2.
1063
- JSON3.parse = function (source, callback) {
1064
- var result, value;
1065
- Index = 0;
1066
- Source = "" + source;
1067
- result = get(lex());
1068
- // If a JSON string contains multiple tokens, it is invalid.
1069
- if (lex() != "$") {
1070
- abort();
1071
- }
1072
- // Reset the parser state.
1073
- Index = Source = null;
1074
- return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result;
1075
- };
1327
+ // Public: `JSON.parse`. See ES 5.1 section 15.12.2.
1328
+ JSON3.parse = function (source, callback) {
1329
+ var result, value;
1330
+ Index = 0;
1331
+ Source = "" + source;
1332
+ result = get(lex());
1333
+ // If a JSON string contains multiple tokens, it is invalid.
1334
+ if (lex() != "$") {
1335
+ abort();
1336
+ }
1337
+ // Reset the parser state.
1338
+ Index = Source = null;
1339
+ return callback && getClass.call(callback) == functionClass
1340
+ ? walk(((value = {}), (value[""] = result), value), "", callback)
1341
+ : result;
1342
+ };
1343
+ }
1076
1344
  }
1077
- }
1078
1345
 
1079
- // Export for asynchronous module loaders.
1080
- if (isLoader) {
1081
- define(function () {
1082
- return JSON3;
1083
- });
1084
- }
1085
- }(this||window));
1086
- // End of original code.
1087
- }());
1346
+ // Export for asynchronous module loaders.
1347
+ if (isLoader) {
1348
+ define(function () {
1349
+ return JSON3;
1350
+ });
1351
+ }
1352
+ })(this || window);
1353
+ // End of original code.
1354
+ })();
1088
1355
 
1089
1356
  // Finally expose (polyfilled) window.JSON as qx.lang.Json.JSON
1090
1357
  qx.lang.Json.stringify = window.JSON.stringify;