@qooxdoo/framework 7.0.0-beta.6 → 7.0.0

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 (1555) hide show
  1. package/CHANGELOG.md +0 -6
  2. package/Manifest.json +2 -2
  3. package/README.md +3 -1
  4. package/lib/compiler/compile-info.json +57 -55
  5. package/lib/compiler/index.js +6272 -4273
  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 -15
  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 +6 -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 +162 -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/exception/Cancel.js +4 -5
  302. package/source/class/qx/io/exception/Exception.js +4 -5
  303. package/source/class/qx/io/exception/Protocol.js +2 -3
  304. package/source/class/qx/io/exception/Transport.js +13 -14
  305. package/source/class/qx/io/graphql/Client.js +22 -12
  306. package/source/class/qx/io/graphql/protocol/Message.js +3 -3
  307. package/source/class/qx/io/graphql/protocol/Request.js +8 -10
  308. package/source/class/qx/io/graphql/protocol/Response.js +7 -5
  309. package/source/class/qx/io/jsonrpc/Client.js +70 -38
  310. package/source/class/qx/io/jsonrpc/__init__.js +1 -1
  311. package/source/class/qx/io/jsonrpc/protocol/Batch.js +14 -8
  312. package/source/class/qx/io/jsonrpc/protocol/Error.js +11 -9
  313. package/source/class/qx/io/jsonrpc/protocol/Message.js +3 -3
  314. package/source/class/qx/io/jsonrpc/protocol/Notification.js +8 -6
  315. package/source/class/qx/io/jsonrpc/protocol/Parser.js +33 -9
  316. package/source/class/qx/io/jsonrpc/protocol/Request.js +8 -7
  317. package/source/class/qx/io/jsonrpc/protocol/Result.js +7 -6
  318. package/source/class/qx/io/part/ClosurePart.js +16 -35
  319. package/source/class/qx/io/part/Package.js +35 -63
  320. package/source/class/qx/io/part/Part.js +29 -53
  321. package/source/class/qx/io/part/__init__.js +4 -4
  322. package/source/class/qx/io/request/AbstractRequest.js +268 -201
  323. package/source/class/qx/io/request/Jsonp.js +16 -19
  324. package/source/class/qx/io/request/Xhr.js +38 -37
  325. package/source/class/qx/io/request/__init__.js +1 -1
  326. package/source/class/qx/io/request/authentication/Basic.js +7 -13
  327. package/source/class/qx/io/request/authentication/Bearer.js +7 -13
  328. package/source/class/qx/io/request/authentication/IAuthentication.js +3 -6
  329. package/source/class/qx/io/request/authentication/__init__.js +1 -1
  330. package/source/class/qx/io/rest/Resource.js +122 -90
  331. package/source/class/qx/io/transport/AbstractClient.js +31 -10
  332. package/source/class/qx/io/transport/AbstractTransport.js +7 -8
  333. package/source/class/qx/io/transport/Fetch.js +8 -5
  334. package/source/class/qx/io/transport/ITransport.js +4 -2
  335. package/source/class/qx/io/transport/PostMessage.js +1 -2
  336. package/source/class/qx/io/transport/Websocket.js +5 -5
  337. package/source/class/qx/io/transport/Xhr.js +17 -18
  338. package/source/class/qx/lang/Array.js +133 -170
  339. package/source/class/qx/lang/Function.js +101 -104
  340. package/source/class/qx/lang/Json.js +1041 -774
  341. package/source/class/qx/lang/Number.js +11 -16
  342. package/source/class/qx/lang/Object.js +129 -100
  343. package/source/class/qx/lang/String.js +86 -94
  344. package/source/class/qx/lang/Type.js +44 -65
  345. package/source/class/qx/lang/normalize/Array.js +39 -49
  346. package/source/class/qx/lang/normalize/Date.js +50 -32
  347. package/source/class/qx/lang/normalize/Error.js +4 -7
  348. package/source/class/qx/lang/normalize/Function.js +11 -19
  349. package/source/class/qx/lang/normalize/Number.js +3 -5
  350. package/source/class/qx/lang/normalize/Object.js +17 -18
  351. package/source/class/qx/lang/normalize/String.js +39 -40
  352. package/source/class/qx/locale/Date.js +175 -178
  353. package/source/class/qx/locale/Key.js +13 -11
  354. package/source/class/qx/locale/LocalizedString.js +18 -15
  355. package/source/class/qx/locale/MTranslation.js +22 -23
  356. package/source/class/qx/locale/Manager.js +62 -100
  357. package/source/class/qx/locale/Number.js +20 -12
  358. package/source/class/qx/locale/String.js +26 -15
  359. package/source/class/qx/log/Logger.js +128 -180
  360. package/source/class/qx/log/__init__.js +3 -3
  361. package/source/class/qx/log/appender/Console.js +100 -111
  362. package/source/class/qx/log/appender/Element.js +25 -39
  363. package/source/class/qx/log/appender/Formatter.js +117 -66
  364. package/source/class/qx/log/appender/Native.js +4 -10
  365. package/source/class/qx/log/appender/NodeConsole.js +20 -28
  366. package/source/class/qx/log/appender/PhoneGap.js +5 -13
  367. package/source/class/qx/log/appender/RhinoConsole.js +12 -23
  368. package/source/class/qx/log/appender/RhinoFile.js +19 -26
  369. package/source/class/qx/log/appender/RingBuffer.js +10 -19
  370. package/source/class/qx/log/appender/Util.js +11 -9
  371. package/source/class/qx/module/Animation.js +73 -63
  372. package/source/class/qx/module/Attribute.js +27 -46
  373. package/source/class/qx/module/Blocker.js +33 -41
  374. package/source/class/qx/module/Cookie.js +6 -10
  375. package/source/class/qx/module/Css.js +82 -97
  376. package/source/class/qx/module/Dataset.js +12 -24
  377. package/source/class/qx/module/Environment.js +4 -6
  378. package/source/class/qx/module/Event.js +124 -127
  379. package/source/class/qx/module/Io.js +5 -9
  380. package/source/class/qx/module/Manipulating.js +98 -117
  381. package/source/class/qx/module/MatchMedia.js +50 -24
  382. package/source/class/qx/module/Messaging.js +6 -10
  383. package/source/class/qx/module/Placeholder.js +54 -44
  384. package/source/class/qx/module/Placement.js +33 -33
  385. package/source/class/qx/module/Rest.js +3 -4
  386. package/source/class/qx/module/Storage.js +34 -48
  387. package/source/class/qx/module/Template.js +6 -9
  388. package/source/class/qx/module/TextSelection.js +13 -21
  389. package/source/class/qx/module/Transform.js +28 -45
  390. package/source/class/qx/module/Traversing.js +160 -154
  391. package/source/class/qx/module/__init__.js +1 -1
  392. package/source/class/qx/module/dev/FakeServer.js +19 -25
  393. package/source/class/qx/module/event/GestureHandler.js +25 -13
  394. package/source/class/qx/module/event/Keyboard.js +42 -31
  395. package/source/class/qx/module/event/Mouse.js +48 -46
  396. package/source/class/qx/module/event/Native.js +18 -30
  397. package/source/class/qx/module/event/Orientation.js +11 -18
  398. package/source/class/qx/module/event/OrientationHandler.js +19 -17
  399. package/source/class/qx/module/event/Pinch.js +13 -14
  400. package/source/class/qx/module/event/Pointer.js +22 -22
  401. package/source/class/qx/module/event/PointerHandler.js +14 -11
  402. package/source/class/qx/module/event/Rotate.js +13 -14
  403. package/source/class/qx/module/event/Swipe.js +18 -24
  404. package/source/class/qx/module/event/Tap.js +25 -25
  405. package/source/class/qx/module/event/Touch.js +4 -7
  406. package/source/class/qx/module/event/TouchHandler.js +16 -16
  407. package/source/class/qx/module/event/Track.js +13 -14
  408. package/source/class/qx/module/util/Array.js +30 -41
  409. package/source/class/qx/module/util/Function.js +1 -2
  410. package/source/class/qx/module/util/Object.js +8 -11
  411. package/source/class/qx/module/util/String.js +10 -18
  412. package/source/class/qx/module/util/Type.js +3 -4
  413. package/source/class/qx/test/Annotation.js +195 -89
  414. package/source/class/qx/test/Bootstrap.js +98 -124
  415. package/source/class/qx/test/Browser.js +8 -11
  416. package/source/class/qx/test/Class.js +164 -198
  417. package/source/class/qx/test/Dom.js +10 -28
  418. package/source/class/qx/test/EditDistance.js +16 -16
  419. package/source/class/qx/test/Interface.js +380 -383
  420. package/source/class/qx/test/MAppearance.js +10 -14
  421. package/source/class/qx/test/MDecoration.js +1 -3
  422. package/source/class/qx/test/Mixin.js +449 -173
  423. package/source/class/qx/test/Promise.js +422 -333
  424. package/source/class/qx/test/Theme.js +204 -179
  425. package/source/class/qx/test/Xml.js +155 -84
  426. package/source/class/qx/test/application/Routing.js +45 -44
  427. package/source/class/qx/test/bom/AnimationFrame.js +23 -21
  428. package/source/class/qx/test/bom/Attribute.js +66 -47
  429. package/source/class/qx/test/bom/Basic.js +52 -27
  430. package/source/class/qx/test/bom/Blocker.js +100 -70
  431. package/source/class/qx/test/bom/Class.js +19 -34
  432. package/source/class/qx/test/bom/Cookie.js +49 -28
  433. package/source/class/qx/test/bom/Dataset.js +12 -24
  434. package/source/class/qx/test/bom/Element.js +55 -47
  435. package/source/class/qx/test/bom/Event.js +68 -45
  436. package/source/class/qx/test/bom/FileReader.js +6 -12
  437. package/source/class/qx/test/bom/Font.js +256 -118
  438. package/source/class/qx/test/bom/GeoLocation.js +82 -64
  439. package/source/class/qx/test/bom/History.js +63 -84
  440. package/source/class/qx/test/bom/IdleCallback.js +51 -38
  441. package/source/class/qx/test/bom/Iframe.js +14 -18
  442. package/source/class/qx/test/bom/Label.js +74 -105
  443. package/source/class/qx/test/bom/Location.js +70 -99
  444. package/source/class/qx/test/bom/PageVisibility.js +13 -16
  445. package/source/class/qx/test/bom/Selector.js +16 -16
  446. package/source/class/qx/test/bom/String.js +19 -15
  447. package/source/class/qx/test/bom/Stylesheet.js +39 -48
  448. package/source/class/qx/test/bom/Template.js +49 -57
  449. package/source/class/qx/test/bom/Viewport.js +7 -11
  450. package/source/class/qx/test/bom/WebWorker.js +49 -37
  451. package/source/class/qx/test/bom/Window.js +6 -12
  452. package/source/class/qx/test/bom/client/Css.js +26 -19
  453. package/source/class/qx/test/bom/client/Device.js +29 -18
  454. package/source/class/qx/test/bom/client/OperatingSystem.js +17 -20
  455. package/source/class/qx/test/bom/client/Pdfjs.js +15 -13
  456. package/source/class/qx/test/bom/element/AnimationHandle.js +20 -17
  457. package/source/class/qx/test/bom/element/AnimationJs.js +48 -31
  458. package/source/class/qx/test/bom/element/Background.js +93 -46
  459. package/source/class/qx/test/bom/element/BoxSizing.js +66 -61
  460. package/source/class/qx/test/bom/element/Class.js +33 -58
  461. package/source/class/qx/test/bom/element/Dimension.js +58 -37
  462. package/source/class/qx/test/bom/element/Style.js +87 -83
  463. package/source/class/qx/test/bom/element/Transform.js +209 -86
  464. package/source/class/qx/test/bom/media/Audio.js +18 -14
  465. package/source/class/qx/test/bom/media/MediaTestCase.js +61 -66
  466. package/source/class/qx/test/bom/media/Video.js +39 -28
  467. package/source/class/qx/test/bom/request/Jsonp.js +60 -57
  468. package/source/class/qx/test/bom/request/Script.js +150 -138
  469. package/source/class/qx/test/bom/request/SimpleXhr.js +206 -134
  470. package/source/class/qx/test/bom/request/Xhr.js +179 -132
  471. package/source/class/qx/test/bom/request/XhrWithRemote.js +206 -160
  472. package/source/class/qx/test/bom/rest/Resource.js +345 -281
  473. package/source/class/qx/test/bom/rest/ResourceWithRemote.js +74 -57
  474. package/source/class/qx/test/bom/storage/Local.js +3 -4
  475. package/source/class/qx/test/bom/storage/Session.js +3 -4
  476. package/source/class/qx/test/bom/storage/WebStorageTestCase.js +28 -27
  477. package/source/class/qx/test/bom/webfonts/Abstract.js +8 -10
  478. package/source/class/qx/test/bom/webfonts/Manager.js +127 -80
  479. package/source/class/qx/test/bom/webfonts/Validator.js +36 -30
  480. package/source/class/qx/test/compiler/ClassFile.js +29 -11
  481. package/source/class/qx/test/compiler/jsdoc/Parser.js +122 -96
  482. package/source/class/qx/test/core/Assert.js +151 -86
  483. package/source/class/qx/test/core/Environment.js +162 -123
  484. package/source/class/qx/test/core/EventEmitterDummy.js +7 -8
  485. package/source/class/qx/test/core/InheritanceDummy.js +23 -33
  486. package/source/class/qx/test/core/MemoryManagement.js +13 -5
  487. package/source/class/qx/test/core/Object.js +106 -112
  488. package/source/class/qx/test/core/ObjectId.js +7 -6
  489. package/source/class/qx/test/core/Property.js +483 -387
  490. package/source/class/qx/test/core/PropertyHelper.js +49 -64
  491. package/source/class/qx/test/core/Target.js +9 -13
  492. package/source/class/qx/test/core/Validation.js +409 -136
  493. package/source/class/qx/test/data/DataArray.js +1059 -394
  494. package/source/class/qx/test/data/DataArrayWithChangeBubble.js +315 -172
  495. package/source/class/qx/test/data/__init__.js +4 -4
  496. package/source/class/qx/test/data/controller/Form.js +141 -99
  497. package/source/class/qx/test/data/controller/FormWithArrayAndModel.js +66 -51
  498. package/source/class/qx/test/data/controller/List.js +644 -336
  499. package/source/class/qx/test/data/controller/ListReverse.js +64 -63
  500. package/source/class/qx/test/data/controller/ListWithObjects.js +305 -149
  501. package/source/class/qx/test/data/controller/Object.js +252 -94
  502. package/source/class/qx/test/data/controller/Tree.js +1219 -383
  503. package/source/class/qx/test/data/controller/__init__.js +4 -4
  504. package/source/class/qx/test/data/marshal/Json.js +832 -447
  505. package/source/class/qx/test/data/marshal/__init__.js +4 -4
  506. package/source/class/qx/test/data/singlevalue/Array.js +383 -144
  507. package/source/class/qx/test/data/singlevalue/Deep.js +361 -175
  508. package/source/class/qx/test/data/singlevalue/Resolve.js +51 -29
  509. package/source/class/qx/test/data/singlevalue/Simple.js +530 -208
  510. package/source/class/qx/test/data/singlevalue/TextFieldDummy.js +32 -28
  511. package/source/class/qx/test/data/singlevalue/__init__.js +4 -4
  512. package/source/class/qx/test/data/store/Json.js +574 -313
  513. package/source/class/qx/test/data/store/Jsonp.js +103 -77
  514. package/source/class/qx/test/data/store/Offline.js +127 -110
  515. package/source/class/qx/test/data/store/Rest.js +58 -52
  516. package/source/class/qx/test/data/store/RestWithRemote.js +36 -30
  517. package/source/class/qx/test/data/store/__init__.js +4 -4
  518. package/source/class/qx/test/dev/Debug.js +9 -13
  519. package/source/class/qx/test/dev/StackTrace.js +51 -42
  520. package/source/class/qx/test/dev/unit/Requirements.js +36 -49
  521. package/source/class/qx/test/dev/unit/Sinon.js +85 -73
  522. package/source/class/qx/test/dev/unit/TestCase.js +12 -17
  523. package/source/class/qx/test/dom/Element.js +17 -12
  524. package/source/class/qx/test/dom/Hierarchy.js +53 -38
  525. package/source/class/qx/test/dom/Node.js +97 -43
  526. package/source/class/qx/test/event/Bubbling.js +258 -88
  527. package/source/class/qx/test/event/Emitter.js +38 -39
  528. package/source/class/qx/test/event/GlobalError.js +59 -87
  529. package/source/class/qx/test/event/GlobalEventMonitors.js +22 -25
  530. package/source/class/qx/test/event/Messaging.js +66 -49
  531. package/source/class/qx/test/event/MockBubblingHandler.js +10 -15
  532. package/source/class/qx/test/event/MockHandler.js +14 -33
  533. package/source/class/qx/test/event/Registration.js +38 -32
  534. package/source/class/qx/test/event/Timer.js +61 -39
  535. package/source/class/qx/test/event/Utils.js +164 -123
  536. package/source/class/qx/test/event/dispatch/MouseCapture.js +61 -51
  537. package/source/class/qx/test/event/dispatch/MouseEventOnDocument.js +22 -23
  538. package/source/class/qx/test/event/dispatch/TestingHandler.js +8 -10
  539. package/source/class/qx/test/event/dispatch/TestingWindow.js +9 -13
  540. package/source/class/qx/test/event/dispatch/__init__.js +4 -4
  541. package/source/class/qx/test/event/handler/Offline.js +7 -8
  542. package/source/class/qx/test/event/message/Bus.js +112 -72
  543. package/source/class/qx/test/event/message/__init__.js +4 -4
  544. package/source/class/qx/test/event/type/Dom.js +12 -11
  545. package/source/class/qx/test/event/type/Event.js +7 -16
  546. package/source/class/qx/test/event/type/Mouse.js +12 -11
  547. package/source/class/qx/test/event/type/Native.js +12 -11
  548. package/source/class/qx/test/event/type/__init__.js +4 -4
  549. package/source/class/qx/test/event/util/Keyboard.js +4 -3
  550. package/source/class/qx/test/html/Element.js +538 -239
  551. package/source/class/qx/test/html/Iframe.js +85 -73
  552. package/source/class/qx/test/html/jsx/TestJsx.js +15 -4
  553. package/source/class/qx/test/html/jsx/TestJsxBrowser.js +37 -19
  554. package/source/class/qx/test/html/jsx/TestWidget.js +26 -26
  555. package/source/class/qx/test/io/ImageLoader.js +256 -160
  556. package/source/class/qx/test/io/MAssert.js +7 -7
  557. package/source/class/qx/test/io/MRemoteTest.js +9 -11
  558. package/source/class/qx/test/io/__init__.js +4 -4
  559. package/source/class/qx/test/io/graphql/Client.js +135 -114
  560. package/source/class/qx/test/io/graphql/ClientFetch.js +4 -4
  561. package/source/class/qx/test/io/graphql/Request.js +12 -13
  562. package/source/class/qx/test/io/jsonrpc/Client.js +135 -69
  563. package/source/class/qx/test/io/jsonrpc/Protocol.js +42 -14
  564. package/source/class/qx/test/io/request/Jsonp.js +23 -20
  565. package/source/class/qx/test/io/request/JsonpWithRemote.js +25 -22
  566. package/source/class/qx/test/io/request/MRequest.js +137 -114
  567. package/source/class/qx/test/io/request/Xhr.js +367 -209
  568. package/source/class/qx/test/io/request/XhrWithRemote.js +133 -100
  569. package/source/class/qx/test/io/rest/Resource.js +325 -270
  570. package/source/class/qx/test/io/rest/ResourceWithRemote.js +75 -58
  571. package/source/class/qx/test/io/transport/PostMessage.js +5 -5
  572. package/source/class/qx/test/io/transport/Websocket.js +9 -8
  573. package/source/class/qx/test/lang/Array.js +79 -105
  574. package/source/class/qx/test/lang/Function.js +64 -53
  575. package/source/class/qx/test/lang/Json.js +51 -79
  576. package/source/class/qx/test/lang/Number.js +4 -6
  577. package/source/class/qx/test/lang/Object.js +143 -133
  578. package/source/class/qx/test/lang/String.js +151 -95
  579. package/source/class/qx/test/lang/Type.js +34 -44
  580. package/source/class/qx/test/lang/Webkit.js +8 -13
  581. package/source/class/qx/test/lang/normalize/Array.js +121 -68
  582. package/source/class/qx/test/lang/normalize/Date.js +232 -49
  583. package/source/class/qx/test/lang/normalize/Error.js +5 -8
  584. package/source/class/qx/test/lang/normalize/Function.js +7 -13
  585. package/source/class/qx/test/lang/normalize/Object.js +22 -29
  586. package/source/class/qx/test/lang/normalize/String.js +19 -28
  587. package/source/class/qx/test/locale/Date.js +91 -43
  588. package/source/class/qx/test/locale/Locale.js +52 -32
  589. package/source/class/qx/test/locale/LocalizedString.js +12 -12
  590. package/source/class/qx/test/log/DeprecationMethodOverriding.js +52 -31
  591. package/source/class/qx/test/log/Filters.js +6 -3
  592. package/source/class/qx/test/log/Formatter.js +13 -7
  593. package/source/class/qx/test/log/Logger.js +19 -29
  594. package/source/class/qx/test/log/RingBuffer.js +14 -25
  595. package/source/class/qx/test/log/__init__.js +4 -4
  596. package/source/class/qx/test/log/fixture/ClassA.js +22 -22
  597. package/source/class/qx/test/log/fixture/ClassB1.js +7 -9
  598. package/source/class/qx/test/log/fixture/ClassB2.js +5 -7
  599. package/source/class/qx/test/log/fixture/ClassC1.js +5 -7
  600. package/source/class/qx/test/log/fixture/ClassC2.js +7 -9
  601. package/source/class/qx/test/mobile/LocaleSwitch.js +29 -36
  602. package/source/class/qx/test/mobile/MobileTestCase.js +39 -49
  603. package/source/class/qx/test/mobile/basic/Atom.js +129 -53
  604. package/source/class/qx/test/mobile/basic/Image.js +41 -31
  605. package/source/class/qx/test/mobile/basic/Label.js +6 -10
  606. package/source/class/qx/test/mobile/container/Carousel.js +41 -45
  607. package/source/class/qx/test/mobile/container/Composite.js +48 -65
  608. package/source/class/qx/test/mobile/container/Drawer.js +42 -29
  609. package/source/class/qx/test/mobile/container/Navigation.js +14 -20
  610. package/source/class/qx/test/mobile/container/Scroll.js +23 -19
  611. package/source/class/qx/test/mobile/core/Widget.js +150 -86
  612. package/source/class/qx/test/mobile/dialog/Menu.js +47 -26
  613. package/source/class/qx/test/mobile/dialog/Popup.js +30 -19
  614. package/source/class/qx/test/mobile/embed/Html.js +5 -8
  615. package/source/class/qx/test/mobile/form/Button.js +15 -13
  616. package/source/class/qx/test/mobile/form/CheckBox.js +21 -17
  617. package/source/class/qx/test/mobile/form/Form.js +37 -24
  618. package/source/class/qx/test/mobile/form/Group.js +5 -9
  619. package/source/class/qx/test/mobile/form/Label.js +11 -13
  620. package/source/class/qx/test/mobile/form/NumberField.js +49 -45
  621. package/source/class/qx/test/mobile/form/RadioButton.js +30 -19
  622. package/source/class/qx/test/mobile/form/SelectBox.js +39 -25
  623. package/source/class/qx/test/mobile/form/SingleRenderer.js +31 -27
  624. package/source/class/qx/test/mobile/form/Slider.js +55 -35
  625. package/source/class/qx/test/mobile/form/TextArea.js +34 -24
  626. package/source/class/qx/test/mobile/form/TextField.js +34 -24
  627. package/source/class/qx/test/mobile/form/ToggleButton.js +10 -14
  628. package/source/class/qx/test/mobile/layout/Card.js +21 -17
  629. package/source/class/qx/test/mobile/layout/HBox.js +25 -20
  630. package/source/class/qx/test/mobile/layout/VBox.js +25 -21
  631. package/source/class/qx/test/mobile/list/List.js +114 -83
  632. package/source/class/qx/test/mobile/navigationbar/NavigationBar.js +5 -9
  633. package/source/class/qx/test/mobile/page/Manager.js +7 -13
  634. package/source/class/qx/test/mobile/page/NavigationPage.js +7 -17
  635. package/source/class/qx/test/mobile/page/Page.js +101 -68
  636. package/source/class/qx/test/mobile/tabbar/TabBar.js +11 -21
  637. package/source/class/qx/test/mobile/toolbar/Toolbar.js +16 -16
  638. package/source/class/qx/test/performance/BaseCall.js +31 -36
  639. package/source/class/qx/test/performance/Event.js +60 -53
  640. package/source/class/qx/test/performance/Object.js +16 -22
  641. package/source/class/qx/test/performance/Property.js +20 -22
  642. package/source/class/qx/test/performance/data/Marshaling.js +25 -30
  643. package/source/class/qx/test/performance/decorator/AbstractDecorator.js +22 -34
  644. package/source/class/qx/test/performance/decorator/Background.js +4 -6
  645. package/source/class/qx/test/performance/decorator/BackgroundScale.js +6 -8
  646. package/source/class/qx/test/performance/decorator/Single.js +4 -6
  647. package/source/class/qx/test/performance/element/Element.js +50 -67
  648. package/source/class/qx/test/performance/widget/AbstractWidget.js +31 -44
  649. package/source/class/qx/test/performance/widget/Button.js +5 -7
  650. package/source/class/qx/test/performance/widget/Label.js +5 -7
  651. package/source/class/qx/test/performance/widget/RichLabel.js +6 -8
  652. package/source/class/qx/test/performance/widget/Widget.js +5 -7
  653. package/source/class/qx/test/performance/widget/WidgetWithDecorator.js +7 -9
  654. package/source/class/qx/test/performance/widget/WidgetWithSingle.js +9 -11
  655. package/source/class/qx/test/renderer/Color.js +22 -49
  656. package/source/class/qx/test/testclasses/BaseClassBoth.js +11 -8
  657. package/source/class/qx/test/testclasses/BaseClassIncluded.js +5 -6
  658. package/source/class/qx/test/testclasses/BaseClassPatched.js +15 -8
  659. package/source/class/qx/test/testclasses/DerivedClassBoth.js +7 -7
  660. package/source/class/qx/test/testclasses/DerivedClassIncluded.js +7 -7
  661. package/source/class/qx/test/testclasses/DerivedClassPatched.js +7 -7
  662. package/source/class/qx/test/testclasses/MMixinOne.js +4 -4
  663. package/source/class/qx/test/testclasses/MMixinTwo.js +2 -2
  664. package/source/class/qx/test/testclasses/RootClass.js +8 -8
  665. package/source/class/qx/test/theme/__init__.js +4 -4
  666. package/source/class/qx/test/theme/manager/Color.js +52 -66
  667. package/source/class/qx/test/theme/manager/Decoration.js +177 -154
  668. package/source/class/qx/test/theme/manager/Font.js +68 -39
  669. package/source/class/qx/test/theme/manager/Icon.js +46 -43
  670. package/source/class/qx/test/theme/manager/Meta.js +121 -110
  671. package/source/class/qx/test/theme/manager/__init__.js +4 -4
  672. package/source/class/qx/test/theme/manager/mock/Appearance.js +17 -23
  673. package/source/class/qx/test/theme/manager/mock/Color.js +7 -9
  674. package/source/class/qx/test/theme/manager/mock/Decoration.js +7 -10
  675. package/source/class/qx/test/theme/manager/mock/Font.js +6 -10
  676. package/source/class/qx/test/theme/simple/Appearance.js +268 -210
  677. package/source/class/qx/test/tool/utils/Utils.js +10 -8
  678. package/source/class/qx/test/toolchain/PrivateOptimization.js +20 -13
  679. package/source/class/qx/test/toolchain/TestRunner.js +12 -12
  680. package/source/class/qx/test/toolchain/VariantOptimization.js +37 -26
  681. package/source/class/qx/test/toolchain/__init__.js +4 -4
  682. package/source/class/qx/test/type/Array.js +8 -12
  683. package/source/class/qx/test/type/BaseArray.js +58 -78
  684. package/source/class/qx/test/type/BaseString.js +27 -65
  685. package/source/class/qx/test/type/__init__.js +4 -4
  686. package/source/class/qx/test/ui/BackgroundColor.js +20 -21
  687. package/source/class/qx/test/ui/ChildrenHandling.js +136 -81
  688. package/source/class/qx/test/ui/Destroy.js +310 -248
  689. package/source/class/qx/test/ui/Focus.js +40 -87
  690. package/source/class/qx/test/ui/Insets.js +14 -18
  691. package/source/class/qx/test/ui/LayoutTestCase.js +99 -92
  692. package/source/class/qx/test/ui/LocaleSwitch.js +37 -41
  693. package/source/class/qx/test/ui/RadioItems.js +11 -22
  694. package/source/class/qx/test/ui/Widget.js +13 -17
  695. package/source/class/qx/test/ui/Window.js +26 -39
  696. package/source/class/qx/test/ui/basic/Atom.js +37 -25
  697. package/source/class/qx/test/ui/basic/Image.js +179 -138
  698. package/source/class/qx/test/ui/basic/Label.js +147 -65
  699. package/source/class/qx/test/ui/basic/__init__.js +4 -4
  700. package/source/class/qx/test/ui/command/Command.js +105 -69
  701. package/source/class/qx/test/ui/command/Group.js +24 -21
  702. package/source/class/qx/test/ui/command/GroupManager.js +7 -12
  703. package/source/class/qx/test/ui/container/Stack.js +26 -36
  704. package/source/class/qx/test/ui/core/AbstractScrollArea.js +84 -67
  705. package/source/class/qx/test/ui/core/Appearance.js +53 -54
  706. package/source/class/qx/test/ui/core/Blocker.js +80 -44
  707. package/source/class/qx/test/ui/core/DragDropScrolling.js +69 -55
  708. package/source/class/qx/test/ui/core/Placement.js +22 -34
  709. package/source/class/qx/test/ui/core/Queues.js +28 -39
  710. package/source/class/qx/test/ui/core/SizeHint.js +32 -76
  711. package/source/class/qx/test/ui/core/SizeHintX.js +8 -15
  712. package/source/class/qx/test/ui/core/SizeHintY.js +8 -15
  713. package/source/class/qx/test/ui/core/Spacer.js +11 -18
  714. package/source/class/qx/test/ui/core/Widget.js +117 -112
  715. package/source/class/qx/test/ui/core/__init__.js +4 -4
  716. package/source/class/qx/test/ui/decoration/LinearGradient.js +18 -14
  717. package/source/class/qx/test/ui/embed/Iframe.js +69 -65
  718. package/source/class/qx/test/ui/embed/__init__.js +4 -4
  719. package/source/class/qx/test/ui/form/AbstractSelectBox.js +11 -16
  720. package/source/class/qx/test/ui/form/AbstractVirtualBox.js +12 -19
  721. package/source/class/qx/test/ui/form/BooleanFormat.js +40 -25
  722. package/source/class/qx/test/ui/form/Color.js +29 -19
  723. package/source/class/qx/test/ui/form/ComboBox.js +39 -25
  724. package/source/class/qx/test/ui/form/Date.js +34 -21
  725. package/source/class/qx/test/ui/form/DateField.js +16 -19
  726. package/source/class/qx/test/ui/form/Executable.js +98 -68
  727. package/source/class/qx/test/ui/form/Field.js +65 -54
  728. package/source/class/qx/test/ui/form/Form.js +211 -123
  729. package/source/class/qx/test/ui/form/FormManager.js +72 -100
  730. package/source/class/qx/test/ui/form/FormValidator.js +549 -399
  731. package/source/class/qx/test/ui/form/Label.js +87 -65
  732. package/source/class/qx/test/ui/form/List.js +19 -19
  733. package/source/class/qx/test/ui/form/MenuButton.js +26 -20
  734. package/source/class/qx/test/ui/form/ModelProperty.js +40 -36
  735. package/source/class/qx/test/ui/form/ModelSelection.js +39 -84
  736. package/source/class/qx/test/ui/form/NumberFormat.js +30 -19
  737. package/source/class/qx/test/ui/form/Placeholder.js +147 -87
  738. package/source/class/qx/test/ui/form/RadioButtonGroup.js +31 -26
  739. package/source/class/qx/test/ui/form/RadioGroup.js +58 -54
  740. package/source/class/qx/test/ui/form/Range.js +63 -28
  741. package/source/class/qx/test/ui/form/Renderer.js +39 -33
  742. package/source/class/qx/test/ui/form/Resetter.js +21 -35
  743. package/source/class/qx/test/ui/form/Slider.js +37 -21
  744. package/source/class/qx/test/ui/form/Spinner.js +9 -5
  745. package/source/class/qx/test/ui/form/SplitButton.js +7 -11
  746. package/source/class/qx/test/ui/form/StringFormat.js +60 -30
  747. package/source/class/qx/test/ui/form/TextArea.js +59 -41
  748. package/source/class/qx/test/ui/form/TextField.js +14 -16
  749. package/source/class/qx/test/ui/form/ToggleButton.js +20 -24
  750. package/source/class/qx/test/ui/form/VirtualSelectBox.js +66 -40
  751. package/source/class/qx/test/ui/form/__init__.js +4 -4
  752. package/source/class/qx/test/ui/form/virtual/VirtualComboBox.js +58 -60
  753. package/source/class/qx/test/ui/form/virtual/VirtualDropDownList.js +120 -110
  754. package/source/class/qx/test/ui/form/virtual/VirtualSelectBox.js +43 -27
  755. package/source/class/qx/test/ui/groupbox/CheckGroupBox.js +13 -18
  756. package/source/class/qx/test/ui/indicator/ProgressBar.js +73 -48
  757. package/source/class/qx/test/ui/layout/Box.js +23 -22
  758. package/source/class/qx/test/ui/layout/Flow.js +233 -153
  759. package/source/class/qx/test/ui/layout/Grid.js +88 -101
  760. package/source/class/qx/test/ui/layout/LayoutItem.js +57 -83
  761. package/source/class/qx/test/ui/layout/LayoutRoot.js +7 -11
  762. package/source/class/qx/test/ui/layout/Util.js +30 -31
  763. package/source/class/qx/test/ui/layout/__init__.js +4 -4
  764. package/source/class/qx/test/ui/list/AbstractListTest.js +13 -21
  765. package/source/class/qx/test/ui/list/Group.js +191 -114
  766. package/source/class/qx/test/ui/list/List.js +189 -132
  767. package/source/class/qx/test/ui/list/MAssert.js +14 -9
  768. package/source/class/qx/test/ui/list/ObjectGroup.js +131 -109
  769. package/source/class/qx/test/ui/list/core/MultiSelection.js +58 -44
  770. package/source/class/qx/test/ui/list/core/SingleSelection.js +43 -43
  771. package/source/class/qx/test/ui/list/fixture/GroupMock.js +6 -9
  772. package/source/class/qx/test/ui/list/fixture/ItemMock.js +9 -13
  773. package/source/class/qx/test/ui/root/Inline.js +22 -20
  774. package/source/class/qx/test/ui/selection/AbstractMultiSelectonTest.js +188 -105
  775. package/source/class/qx/test/ui/selection/AbstractSingleSelectonTest.js +173 -125
  776. package/source/class/qx/test/ui/selection/ListMultiSelection.js +19 -21
  777. package/source/class/qx/test/ui/selection/ListSingleSelection.js +19 -21
  778. package/source/class/qx/test/ui/selection/RadioGroup.js +41 -29
  779. package/source/class/qx/test/ui/selection/SelectBox.js +11 -17
  780. package/source/class/qx/test/ui/selection/Stack.js +22 -27
  781. package/source/class/qx/test/ui/selection/TabView.js +35 -26
  782. package/source/class/qx/test/ui/selection/TreeMultiSelection.js +14 -19
  783. package/source/class/qx/test/ui/selection/TreeSingleSelection.js +20 -24
  784. package/source/class/qx/test/ui/selection/__init__.js +4 -4
  785. package/source/class/qx/test/ui/table/Dispose.js +46 -46
  786. package/source/class/qx/test/ui/table/Table.js +74 -69
  787. package/source/class/qx/test/ui/table/__init__.js +4 -4
  788. package/source/class/qx/test/ui/table/celleditor/AbstractField.js +14 -28
  789. package/source/class/qx/test/ui/table/celleditor/ComboBox.js +11 -18
  790. package/source/class/qx/test/ui/table/celleditor/PasswordField.js +6 -10
  791. package/source/class/qx/test/ui/table/celleditor/SelectBox.js +16 -32
  792. package/source/class/qx/test/ui/table/celleditor/TextField.js +6 -9
  793. package/source/class/qx/test/ui/table/celleditor/__init__.js +4 -4
  794. package/source/class/qx/test/ui/table/columnmodel/Basic.js +130 -129
  795. package/source/class/qx/test/ui/table/model/Filtered.js +51 -36
  796. package/source/class/qx/test/ui/table/model/Simple.js +43 -45
  797. package/source/class/qx/test/ui/table/selection/Model.js +70 -22
  798. package/source/class/qx/test/ui/toolbar/OverflowHandling.js +145 -123
  799. package/source/class/qx/test/ui/toolbar/ToolBar.js +20 -30
  800. package/source/class/qx/test/ui/tree/Tree.js +63 -42
  801. package/source/class/qx/test/ui/tree/TreeFolder.js +44 -46
  802. package/source/class/qx/test/ui/tree/virtual/AbstractTreeTest.js +61 -96
  803. package/source/class/qx/test/ui/tree/virtual/MultiSelection.js +68 -39
  804. package/source/class/qx/test/ui/tree/virtual/OneSelection.js +82 -42
  805. package/source/class/qx/test/ui/tree/virtual/OpenCloseController.js +80 -101
  806. package/source/class/qx/test/ui/tree/virtual/SingleSelection.js +40 -32
  807. package/source/class/qx/test/ui/tree/virtual/Sorting.js +46 -47
  808. package/source/class/qx/test/ui/tree/virtual/Tree.js +267 -191
  809. package/source/class/qx/test/ui/tree/virtual/TreeItem.js +60 -63
  810. package/source/class/qx/test/ui/tree/virtual/UtilTest.js +65 -50
  811. package/source/class/qx/test/ui/tree/virtual/WidgetProvider.js +127 -132
  812. package/source/class/qx/test/ui/virtual/Axis.js +210 -193
  813. package/source/class/qx/test/ui/virtual/Pane.js +287 -190
  814. package/source/class/qx/test/ui/virtual/PaneUpdate.js +71 -77
  815. package/source/class/qx/test/ui/virtual/PointerEventMock.js +10 -13
  816. package/source/class/qx/test/ui/virtual/Scroller.js +29 -39
  817. package/source/class/qx/test/ui/virtual/__init__.js +4 -4
  818. package/source/class/qx/test/ui/virtual/cell/WidgetCell.js +39 -40
  819. package/source/class/qx/test/ui/virtual/layer/CellSpanManager.js +157 -127
  820. package/source/class/qx/test/ui/virtual/layer/Column.js +6 -10
  821. package/source/class/qx/test/ui/virtual/layer/GridLines.js +6 -10
  822. package/source/class/qx/test/ui/virtual/layer/GridLinesHorizontal.js +6 -9
  823. package/source/class/qx/test/ui/virtual/layer/GridLinesVertical.js +6 -9
  824. package/source/class/qx/test/ui/virtual/layer/HtmlCell.js +12 -19
  825. package/source/class/qx/test/ui/virtual/layer/HtmlCellSpan.js +13 -21
  826. package/source/class/qx/test/ui/virtual/layer/LayerMock.js +31 -43
  827. package/source/class/qx/test/ui/virtual/layer/LayerSimple.js +26 -26
  828. package/source/class/qx/test/ui/virtual/layer/LayerTestCase.js +52 -50
  829. package/source/class/qx/test/ui/virtual/layer/Row.js +6 -10
  830. package/source/class/qx/test/ui/virtual/layer/WidgetCell.js +45 -52
  831. package/source/class/qx/test/ui/virtual/layer/WidgetCellSpan.js +71 -48
  832. package/source/class/qx/test/ui/virtual/layer/__init__.js +4 -4
  833. package/source/class/qx/test/ui/virtual/performance/AbstractLayerTest.js +84 -68
  834. package/source/class/qx/test/ui/virtual/performance/DomCell.js +6 -9
  835. package/source/class/qx/test/ui/virtual/performance/DomPoolCell.js +6 -9
  836. package/source/class/qx/test/ui/virtual/performance/HtmlDivCell.js +7 -11
  837. package/source/class/qx/test/ui/virtual/performance/HtmlDivRelative.js +6 -9
  838. package/source/class/qx/test/ui/virtual/performance/HtmlTableCell.js +8 -13
  839. package/source/class/qx/test/ui/virtual/performance/HtmlTableCellNaive.js +8 -13
  840. package/source/class/qx/test/ui/virtual/performance/HtmlTableCssCell.js +8 -19
  841. package/source/class/qx/test/ui/virtual/performance/WidgetCell.js +10 -15
  842. package/source/class/qx/test/ui/virtual/performance/__init__.js +4 -4
  843. package/source/class/qx/test/ui/virtual/performance/layer/DomCell.js +24 -18
  844. package/source/class/qx/test/ui/virtual/performance/layer/DomPoolCell.js +28 -26
  845. package/source/class/qx/test/ui/virtual/performance/layer/HtmlDivRelative.js +13 -17
  846. package/source/class/qx/test/ui/virtual/performance/layer/HtmlTableCell.js +29 -28
  847. package/source/class/qx/test/ui/virtual/performance/layer/HtmlTableCellNaive.js +22 -24
  848. package/source/class/qx/test/ui/virtual/performance/layer/HtmlTableCssCell.js +32 -47
  849. package/source/class/qx/test/ui/virtual/performance/layer/__init__.js +4 -4
  850. package/source/class/qx/test/ui/window/Desktop.js +21 -12
  851. package/source/class/qx/test/util/Base64.js +10 -13
  852. package/source/class/qx/test/util/ColorUtil.js +121 -54
  853. package/source/class/qx/test/util/DateFormat.js +582 -351
  854. package/source/class/qx/test/util/DateMock.js +16 -19
  855. package/source/class/qx/test/util/DeferredCall.js +12 -13
  856. package/source/class/qx/test/util/Delegate.js +28 -26
  857. package/source/class/qx/test/util/DisposeUtil.js +32 -14
  858. package/source/class/qx/test/util/DynamicScriptLoader.js +99 -64
  859. package/source/class/qx/test/util/Fsm.js +16 -18
  860. package/source/class/qx/test/util/Function.js +23 -19
  861. package/source/class/qx/test/util/LibraryManager.js +15 -22
  862. package/source/class/qx/test/util/NumberFormat.js +53 -64
  863. package/source/class/qx/test/util/PropertyUtil.js +35 -35
  864. package/source/class/qx/test/util/Request.js +26 -18
  865. package/source/class/qx/test/util/ResourceManager.js +50 -35
  866. package/source/class/qx/test/util/ResponseParser.js +45 -35
  867. package/source/class/qx/test/util/RingBuffer.js +15 -28
  868. package/source/class/qx/test/util/Serializer.js +210 -153
  869. package/source/class/qx/test/util/StringBuilder.js +7 -13
  870. package/source/class/qx/test/util/StringSplit.js +114 -69
  871. package/source/class/qx/test/util/Uri.js +74 -78
  872. package/source/class/qx/test/util/Validate.js +95 -64
  873. package/source/class/qx/test/util/placement/BestFitAxis.js +17 -26
  874. package/source/class/qx/test/util/placement/DirectAxis.js +8 -11
  875. package/source/class/qx/test/util/placement/KeepAlignAxis.js +17 -26
  876. package/source/class/qx/test/util/placement/Placement.js +607 -244
  877. package/source/class/qx/test/util/placement/__init__.js +4 -4
  878. package/source/class/qx/theme/Classic.js +9 -11
  879. package/source/class/qx/theme/Indigo.js +9 -11
  880. package/source/class/qx/theme/Modern.js +9 -11
  881. package/source/class/qx/theme/Simple.js +9 -11
  882. package/source/class/qx/theme/TangibleDark.js +1 -1
  883. package/source/class/qx/theme/TangibleLight.js +1 -1
  884. package/source/class/qx/theme/__init__.js +4 -4
  885. package/source/class/qx/theme/classic/Appearance.js +995 -1336
  886. package/source/class/qx/theme/classic/Color.js +83 -83
  887. package/source/class/qx/theme/classic/Decoration.js +318 -299
  888. package/source/class/qx/theme/classic/Font.js +38 -25
  889. package/source/class/qx/theme/icon/Oxygen.js +4 -5
  890. package/source/class/qx/theme/icon/Tango.js +4 -5
  891. package/source/class/qx/theme/indigo/Appearance.js +66 -85
  892. package/source/class/qx/theme/indigo/Color.js +65 -66
  893. package/source/class/qx/theme/indigo/Decoration.js +31 -45
  894. package/source/class/qx/theme/indigo/Font.js +20 -29
  895. package/source/class/qx/theme/manager/Appearance.js +58 -91
  896. package/source/class/qx/theme/manager/Color.js +20 -41
  897. package/source/class/qx/theme/manager/Decoration.js +72 -100
  898. package/source/class/qx/theme/manager/Font.js +51 -67
  899. package/source/class/qx/theme/manager/Icon.js +13 -27
  900. package/source/class/qx/theme/manager/Meta.js +27 -44
  901. package/source/class/qx/theme/modern/Appearance.js +1049 -1440
  902. package/source/class/qx/theme/modern/Color.js +155 -166
  903. package/source/class/qx/theme/modern/Decoration.js +471 -598
  904. package/source/class/qx/theme/modern/Font.js +59 -52
  905. package/source/class/qx/theme/simple/Appearance.js +936 -1207
  906. package/source/class/qx/theme/simple/Color.js +62 -62
  907. package/source/class/qx/theme/simple/Decoration.js +456 -678
  908. package/source/class/qx/theme/simple/Font.js +18 -25
  909. package/source/class/qx/theme/simple/Image.js +49 -52
  910. package/source/class/qx/theme/tangible/Appearance.js +1575 -1743
  911. package/source/class/qx/theme/tangible/ColorDark.js +5 -5
  912. package/source/class/qx/theme/tangible/ColorEngine.js +38 -35
  913. package/source/class/qx/theme/tangible/ColorLight.js +7 -7
  914. package/source/class/qx/theme/tangible/Decoration.js +1108 -1300
  915. package/source/class/qx/theme/tangible/Font.js +66 -70
  916. package/source/class/qx/theme/tangible/Image.js +44 -48
  917. package/source/class/qx/tool/cli/Application.js +5 -5
  918. package/source/class/qx/tool/cli/Cli.js +103 -52
  919. package/source/class/qx/tool/cli/ConfigDb.js +18 -15
  920. package/source/class/qx/tool/cli/LibraryApplication.js +1 -1
  921. package/source/class/qx/tool/cli/Watch.js +174 -102
  922. package/source/class/qx/tool/cli/api/AbstractApi.js +17 -18
  923. package/source/class/qx/tool/cli/api/CompilerApi.js +15 -8
  924. package/source/class/qx/tool/cli/api/LibraryApi.js +4 -6
  925. package/source/class/qx/tool/cli/api/Test.js +12 -9
  926. package/source/class/qx/tool/cli/commands/Add.js +12 -15
  927. package/source/class/qx/tool/cli/commands/Clean.js +10 -9
  928. package/source/class/qx/tool/cli/commands/Command.js +18 -13
  929. package/source/class/qx/tool/cli/commands/Compile.js +630 -264
  930. package/source/class/qx/tool/cli/commands/Config.js +75 -42
  931. package/source/class/qx/tool/cli/commands/Create.js +108 -59
  932. package/source/class/qx/tool/cli/commands/Deploy.js +138 -86
  933. package/source/class/qx/tool/cli/commands/Es6ify.js +118 -0
  934. package/source/class/qx/tool/cli/commands/Lint.js +75 -34
  935. package/source/class/qx/tool/cli/commands/Migrate.js +13 -7
  936. package/source/class/qx/tool/cli/commands/Package.js +67 -45
  937. package/source/class/qx/tool/cli/commands/Pkg.js +21 -18
  938. package/source/class/qx/tool/cli/commands/Run.js +57 -37
  939. package/source/class/qx/tool/cli/commands/Serve.js +62 -37
  940. package/source/class/qx/tool/cli/commands/Test.js +40 -18
  941. package/source/class/qx/tool/cli/commands/add/Class.js +66 -28
  942. package/source/class/qx/tool/cli/commands/add/Script.js +54 -27
  943. package/source/class/qx/tool/cli/commands/package/Install.js +265 -103
  944. package/source/class/qx/tool/cli/commands/package/List.js +199 -75
  945. package/source/class/qx/tool/cli/commands/package/Migrate.js +7 -3
  946. package/source/class/qx/tool/cli/commands/package/Publish.js +209 -117
  947. package/source/class/qx/tool/cli/commands/package/Remove.js +40 -17
  948. package/source/class/qx/tool/cli/commands/package/Update.js +115 -48
  949. package/source/class/qx/tool/cli/commands/package/Upgrade.js +41 -20
  950. package/source/class/qx/tool/compiler/Analyser.js +427 -222
  951. package/source/class/qx/tool/compiler/ClassFile.js +831 -401
  952. package/source/class/qx/tool/compiler/Console.js +136 -87
  953. package/source/class/qx/tool/compiler/Es6ify.js +404 -0
  954. package/source/class/qx/tool/compiler/Preprocess.js +28 -25
  955. package/source/class/qx/tool/compiler/app/Application.js +149 -72
  956. package/source/class/qx/tool/compiler/app/Cldr.js +506 -106
  957. package/source/class/qx/tool/compiler/app/Library.js +62 -27
  958. package/source/class/qx/tool/compiler/app/Part.js +10 -12
  959. package/source/class/qx/tool/compiler/app/Translation.js +189 -162
  960. package/source/class/qx/tool/compiler/app/WebFont.js +215 -161
  961. package/source/class/qx/tool/compiler/jsdoc/ChildControlParser.js +3 -3
  962. package/source/class/qx/tool/compiler/jsdoc/CommandParser.js +8 -9
  963. package/source/class/qx/tool/compiler/jsdoc/ParamParser.js +7 -6
  964. package/source/class/qx/tool/compiler/jsdoc/Parser.js +27 -18
  965. package/source/class/qx/tool/compiler/jsdoc/ReturnParser.js +3 -3
  966. package/source/class/qx/tool/compiler/jsdoc/ThrowsParser.js +4 -4
  967. package/source/class/qx/tool/compiler/makers/AbstractAppMaker.js +5 -6
  968. package/source/class/qx/tool/compiler/makers/AppMaker.js +38 -18
  969. package/source/class/qx/tool/compiler/makers/Maker.js +29 -21
  970. package/source/class/qx/tool/compiler/resources/AbstractMatcher.js +8 -8
  971. package/source/class/qx/tool/compiler/resources/Asset.js +123 -61
  972. package/source/class/qx/tool/compiler/resources/ImageLoader.js +18 -8
  973. package/source/class/qx/tool/compiler/resources/Manager.js +156 -93
  974. package/source/class/qx/tool/compiler/resources/MetaLoader.js +5 -3
  975. package/source/class/qx/tool/compiler/resources/ResourceConverter.js +8 -8
  976. package/source/class/qx/tool/compiler/resources/ResourceLoader.js +8 -9
  977. package/source/class/qx/tool/compiler/resources/ScssConverter.js +54 -18
  978. package/source/class/qx/tool/compiler/resources/ScssFile.js +157 -80
  979. package/source/class/qx/tool/compiler/resources/ScssIncludeConverter.js +3 -3
  980. package/source/class/qx/tool/compiler/targets/BuildTarget.js +23 -13
  981. package/source/class/qx/tool/compiler/targets/SourceCodeCopier.js +29 -9
  982. package/source/class/qx/tool/compiler/targets/SourceTarget.js +2 -2
  983. package/source/class/qx/tool/compiler/targets/Target.js +292 -188
  984. package/source/class/qx/tool/compiler/targets/TypeScriptWriter.js +163 -103
  985. package/source/class/qx/tool/compiler/targets/meta/AbstractJavascriptMeta.js +48 -23
  986. package/source/class/qx/tool/compiler/targets/meta/ApplicationMeta.js +75 -62
  987. package/source/class/qx/tool/compiler/targets/meta/BootJs.js +49 -29
  988. package/source/class/qx/tool/compiler/targets/meta/Javascript.js +6 -7
  989. package/source/class/qx/tool/compiler/targets/meta/Package.js +54 -51
  990. package/source/class/qx/tool/compiler/targets/meta/PackageJavascript.js +41 -21
  991. package/source/class/qx/tool/compiler/targets/meta/Part.js +9 -10
  992. package/source/class/qx/tool/compiler/targets/meta/PolyfillJs.js +10 -5
  993. package/source/class/qx/tool/compiler/targets/meta/Uglify.js +35 -23
  994. package/source/class/qx/tool/config/Abstract.js +61 -25
  995. package/source/class/qx/tool/config/Compile.js +3 -2
  996. package/source/class/qx/tool/config/Lockfile.js +3 -2
  997. package/source/class/qx/tool/config/Manifest.js +3 -2
  998. package/source/class/qx/tool/config/Registry.js +4 -3
  999. package/source/class/qx/tool/config/Utils.js +88 -37
  1000. package/source/class/qx/tool/migration/BaseMigration.js +67 -25
  1001. package/source/class/qx/tool/migration/M6_0_0.js +96 -46
  1002. package/source/class/qx/tool/migration/M7_0_0.js +12 -6
  1003. package/source/class/qx/tool/migration/Runner.js +28 -14
  1004. package/source/class/qx/tool/utils/IndexedArray.js +15 -18
  1005. package/source/class/qx/tool/utils/Json.js +35 -14
  1006. package/source/class/qx/tool/utils/LogManager.js +50 -26
  1007. package/source/class/qx/tool/utils/Logger.js +11 -12
  1008. package/source/class/qx/tool/utils/Promisify.js +45 -49
  1009. package/source/class/qx/tool/utils/Utils.js +63 -48
  1010. package/source/class/qx/tool/utils/Values.js +4 -7
  1011. package/source/class/qx/tool/utils/Website.js +82 -29
  1012. package/source/class/qx/tool/utils/files/FindFiles.js +37 -33
  1013. package/source/class/qx/tool/utils/files/Utils.js +74 -54
  1014. package/source/class/qx/tool/utils/json/Parser.js +163 -54
  1015. package/source/class/qx/tool/utils/json/Stringify.js +87 -72
  1016. package/source/class/qx/tool/utils/json/Tokenizer.js +64 -39
  1017. package/source/class/qx/tool/utils/json/Writer.js +20 -21
  1018. package/source/class/qx/type/Array.js +19 -41
  1019. package/source/class/qx/type/BaseArray.js +136 -151
  1020. package/source/class/qx/type/BaseError.js +17 -34
  1021. package/source/class/qx/type/BaseString.js +104 -121
  1022. package/source/class/qx/type/__init__.js +3 -3
  1023. package/source/class/qx/ui/basic/Atom.js +75 -109
  1024. package/source/class/qx/ui/basic/Image.js +283 -319
  1025. package/source/class/qx/ui/basic/Label.js +161 -208
  1026. package/source/class/qx/ui/command/Command.js +51 -86
  1027. package/source/class/qx/ui/command/Group.js +43 -50
  1028. package/source/class/qx/ui/command/GroupManager.js +50 -53
  1029. package/source/class/qx/ui/container/Composite.js +15 -29
  1030. package/source/class/qx/ui/container/Resizer.js +7 -11
  1031. package/source/class/qx/ui/container/Scroll.js +10 -21
  1032. package/source/class/qx/ui/container/SlideBar.js +76 -119
  1033. package/source/class/qx/ui/container/Stack.js +27 -54
  1034. package/source/class/qx/ui/control/ColorPopup.js +109 -130
  1035. package/source/class/qx/ui/control/ColorSelector.js +334 -301
  1036. package/source/class/qx/ui/control/DateChooser.js +143 -177
  1037. package/source/class/qx/ui/core/Blocker.js +91 -127
  1038. package/source/class/qx/ui/core/ColumnData.js +16 -34
  1039. package/source/class/qx/ui/core/DragDropCursor.js +17 -30
  1040. package/source/class/qx/ui/core/DragDropScrolling.js +8 -14
  1041. package/source/class/qx/ui/core/EventHandler.js +108 -132
  1042. package/source/class/qx/ui/core/FocusHandler.js +78 -127
  1043. package/source/class/qx/ui/core/IMultiSelection.js +5 -9
  1044. package/source/class/qx/ui/core/ISingleSelection.js +10 -16
  1045. package/source/class/qx/ui/core/ISingleSelectionProvider.js +4 -6
  1046. package/source/class/qx/ui/core/LayoutItem.js +190 -306
  1047. package/source/class/qx/ui/core/MBlocker.js +22 -38
  1048. package/source/class/qx/ui/core/MChildrenHandling.js +14 -29
  1049. package/source/class/qx/ui/core/MContentPadding.js +50 -69
  1050. package/source/class/qx/ui/core/MDragDropScrolling.js +82 -80
  1051. package/source/class/qx/ui/core/MExecutable.js +27 -52
  1052. package/source/class/qx/ui/core/MLayoutHandling.js +6 -14
  1053. package/source/class/qx/ui/core/MMovable.js +64 -80
  1054. package/source/class/qx/ui/core/MMultiSelectionHandling.js +68 -87
  1055. package/source/class/qx/ui/core/MNativeOverflow.js +16 -26
  1056. package/source/class/qx/ui/core/MPlacement.js +171 -170
  1057. package/source/class/qx/ui/core/MRemoteChildrenHandling.js +14 -27
  1058. package/source/class/qx/ui/core/MRemoteLayoutHandling.js +4 -7
  1059. package/source/class/qx/ui/core/MResizable.js +142 -175
  1060. package/source/class/qx/ui/core/MSingleSelectionHandling.js +40 -45
  1061. package/source/class/qx/ui/core/SingleSelectionManager.js +41 -60
  1062. package/source/class/qx/ui/core/Spacer.js +12 -22
  1063. package/source/class/qx/ui/core/Widget.js +628 -983
  1064. package/source/class/qx/ui/core/queue/Appearance.js +15 -24
  1065. package/source/class/qx/ui/core/queue/Dispose.js +7 -16
  1066. package/source/class/qx/ui/core/queue/Layout.js +44 -71
  1067. package/source/class/qx/ui/core/queue/Manager.js +140 -133
  1068. package/source/class/qx/ui/core/queue/Visibility.js +21 -39
  1069. package/source/class/qx/ui/core/queue/Widget.js +15 -26
  1070. package/source/class/qx/ui/core/scroll/AbstractScrollArea.js +124 -162
  1071. package/source/class/qx/ui/core/scroll/IScrollBar.js +13 -24
  1072. package/source/class/qx/ui/core/scroll/MRoll.js +14 -19
  1073. package/source/class/qx/ui/core/scroll/MScrollBarFactory.js +3 -6
  1074. package/source/class/qx/ui/core/scroll/MWheelHandling.js +10 -12
  1075. package/source/class/qx/ui/core/scroll/NativeScrollBar.js +101 -125
  1076. package/source/class/qx/ui/core/scroll/ScrollBar.js +86 -130
  1077. package/source/class/qx/ui/core/scroll/ScrollPane.js +95 -134
  1078. package/source/class/qx/ui/core/scroll/ScrollSlider.js +13 -19
  1079. package/source/class/qx/ui/core/scroll/__init__.js +4 -4
  1080. package/source/class/qx/ui/core/selection/Abstract.js +255 -456
  1081. package/source/class/qx/ui/core/selection/ScrollArea.js +35 -73
  1082. package/source/class/qx/ui/core/selection/Widget.js +57 -120
  1083. package/source/class/qx/ui/decoration/Abstract.js +11 -20
  1084. package/source/class/qx/ui/decoration/Decorator.js +56 -55
  1085. package/source/class/qx/ui/decoration/IDecorator.js +5 -11
  1086. package/source/class/qx/ui/decoration/MBackgroundColor.js +13 -20
  1087. package/source/class/qx/ui/decoration/MBackgroundImage.js +82 -77
  1088. package/source/class/qx/ui/decoration/MBorderImage.js +72 -94
  1089. package/source/class/qx/ui/decoration/MBorderRadius.js +35 -38
  1090. package/source/class/qx/ui/decoration/MBoxShadow.js +61 -55
  1091. package/source/class/qx/ui/decoration/MDoubleBorder.js +157 -155
  1092. package/source/class/qx/ui/decoration/MLinearBackgroundGradient.js +169 -89
  1093. package/source/class/qx/ui/decoration/MSingleBorder.js +138 -124
  1094. package/source/class/qx/ui/decoration/MTransition.js +46 -42
  1095. package/source/class/qx/ui/decoration/__init__.js +2 -2
  1096. package/source/class/qx/ui/embed/AbstractIframe.js +37 -55
  1097. package/source/class/qx/ui/embed/Canvas.js +34 -66
  1098. package/source/class/qx/ui/embed/Html.js +46 -70
  1099. package/source/class/qx/ui/embed/Iframe.js +178 -158
  1100. package/source/class/qx/ui/embed/ThemedIframe.js +91 -135
  1101. package/source/class/qx/ui/form/AbstractField.js +262 -303
  1102. package/source/class/qx/ui/form/AbstractSelectBox.js +65 -87
  1103. package/source/class/qx/ui/form/Button.js +35 -73
  1104. package/source/class/qx/ui/form/CheckBox.js +26 -48
  1105. package/source/class/qx/ui/form/CheckedList.js +41 -25
  1106. package/source/class/qx/ui/form/CheckedSelectBox.js +97 -62
  1107. package/source/class/qx/ui/form/ComboBox.js +93 -121
  1108. package/source/class/qx/ui/form/DateField.js +140 -181
  1109. package/source/class/qx/ui/form/Form.js +50 -69
  1110. package/source/class/qx/ui/form/HoverButton.js +37 -54
  1111. package/source/class/qx/ui/form/IArrayForm.js +8 -16
  1112. package/source/class/qx/ui/form/IBooleanForm.js +8 -16
  1113. package/source/class/qx/ui/form/IColorForm.js +8 -16
  1114. package/source/class/qx/ui/form/IDateForm.js +8 -16
  1115. package/source/class/qx/ui/form/IExecutable.js +7 -14
  1116. package/source/class/qx/ui/form/IField.js +7 -14
  1117. package/source/class/qx/ui/form/IForm.js +17 -32
  1118. package/source/class/qx/ui/form/IListItem.js +1 -4
  1119. package/source/class/qx/ui/form/IModel.js +7 -15
  1120. package/source/class/qx/ui/form/IModelForm.js +8 -16
  1121. package/source/class/qx/ui/form/IModelSelection.js +4 -8
  1122. package/source/class/qx/ui/form/INumberForm.js +8 -15
  1123. package/source/class/qx/ui/form/IRadioItem.js +8 -17
  1124. package/source/class/qx/ui/form/IRange.js +10 -20
  1125. package/source/class/qx/ui/form/IStringForm.js +8 -16
  1126. package/source/class/qx/ui/form/List.js +82 -122
  1127. package/source/class/qx/ui/form/ListItem.js +21 -38
  1128. package/source/class/qx/ui/form/MForm.js +35 -41
  1129. package/source/class/qx/ui/form/MModelProperty.js +9 -14
  1130. package/source/class/qx/ui/form/MModelSelection.js +30 -32
  1131. package/source/class/qx/ui/form/MenuButton.js +44 -75
  1132. package/source/class/qx/ui/form/PasswordField.js +4 -6
  1133. package/source/class/qx/ui/form/RadioButton.js +36 -72
  1134. package/source/class/qx/ui/form/RadioButtonGroup.js +67 -82
  1135. package/source/class/qx/ui/form/RadioGroup.js +92 -127
  1136. package/source/class/qx/ui/form/RepeatButton.js +57 -106
  1137. package/source/class/qx/ui/form/Resetter.js +19 -29
  1138. package/source/class/qx/ui/form/SelectBox.js +56 -104
  1139. package/source/class/qx/ui/form/Slider.js +202 -269
  1140. package/source/class/qx/ui/form/Spinner.js +173 -217
  1141. package/source/class/qx/ui/form/SplitButton.js +73 -115
  1142. package/source/class/qx/ui/form/Tag.js +7 -8
  1143. package/source/class/qx/ui/form/TextArea.js +147 -153
  1144. package/source/class/qx/ui/form/TextField.js +37 -46
  1145. package/source/class/qx/ui/form/ToggleButton.js +54 -90
  1146. package/source/class/qx/ui/form/VirtualComboBox.js +73 -113
  1147. package/source/class/qx/ui/form/VirtualSelectBox.js +264 -274
  1148. package/source/class/qx/ui/form/core/AbstractVirtualBox.js +117 -157
  1149. package/source/class/qx/ui/form/core/VirtualDropDownList.js +101 -144
  1150. package/source/class/qx/ui/form/renderer/AbstractRenderer.js +48 -55
  1151. package/source/class/qx/ui/form/renderer/Double.js +25 -34
  1152. package/source/class/qx/ui/form/renderer/IFormRenderer.js +4 -8
  1153. package/source/class/qx/ui/form/renderer/Single.js +25 -35
  1154. package/source/class/qx/ui/form/renderer/SinglePlaceholder.js +12 -11
  1155. package/source/class/qx/ui/form/renderer/__init__.js +5 -5
  1156. package/source/class/qx/ui/form/validation/AsyncValidator.js +13 -19
  1157. package/source/class/qx/ui/form/validation/Manager.js +74 -108
  1158. package/source/class/qx/ui/form/validation/__init__.js +6 -6
  1159. package/source/class/qx/ui/groupbox/CheckGroupBox.js +30 -47
  1160. package/source/class/qx/ui/groupbox/GroupBox.js +36 -75
  1161. package/source/class/qx/ui/groupbox/RadioGroupBox.js +29 -59
  1162. package/source/class/qx/ui/groupbox/__init__.js +3 -3
  1163. package/source/class/qx/ui/indicator/ProgressBar.js +29 -46
  1164. package/source/class/qx/ui/layout/Abstract.js +28 -53
  1165. package/source/class/qx/ui/layout/Atom.js +95 -111
  1166. package/source/class/qx/ui/layout/Basic.js +29 -30
  1167. package/source/class/qx/ui/layout/Canvas.js +62 -99
  1168. package/source/class/qx/ui/layout/Dock.js +266 -250
  1169. package/source/class/qx/ui/layout/Flow.js +50 -76
  1170. package/source/class/qx/ui/layout/Grid.js +268 -343
  1171. package/source/class/qx/ui/layout/Grow.js +26 -32
  1172. package/source/class/qx/ui/layout/HBox.js +137 -153
  1173. package/source/class/qx/ui/layout/LineSizeIterator.js +19 -28
  1174. package/source/class/qx/ui/layout/Util.js +91 -120
  1175. package/source/class/qx/ui/layout/VBox.js +125 -147
  1176. package/source/class/qx/ui/list/List.js +148 -262
  1177. package/source/class/qx/ui/list/core/IListDelegate.js +13 -26
  1178. package/source/class/qx/ui/list/core/MWidgetController.js +51 -78
  1179. package/source/class/qx/ui/list/provider/IListProvider.js +15 -28
  1180. package/source/class/qx/ui/list/provider/WidgetProvider.js +52 -84
  1181. package/source/class/qx/ui/menu/AbstractButton.js +118 -127
  1182. package/source/class/qx/ui/menu/Button.js +11 -25
  1183. package/source/class/qx/ui/menu/ButtonLayout.js +49 -37
  1184. package/source/class/qx/ui/menu/CheckBox.js +21 -46
  1185. package/source/class/qx/ui/menu/Layout.js +45 -51
  1186. package/source/class/qx/ui/menu/Manager.js +131 -209
  1187. package/source/class/qx/ui/menu/Menu.js +164 -259
  1188. package/source/class/qx/ui/menu/MenuSlideBar.js +13 -20
  1189. package/source/class/qx/ui/menu/RadioButton.js +29 -51
  1190. package/source/class/qx/ui/menu/Separator.js +9 -16
  1191. package/source/class/qx/ui/menubar/Button.js +23 -41
  1192. package/source/class/qx/ui/menubar/MenuBar.js +9 -13
  1193. package/source/class/qx/ui/mobile/__init__.js +5 -5
  1194. package/source/class/qx/ui/mobile/basic/Atom.js +79 -101
  1195. package/source/class/qx/ui/mobile/basic/Image.js +80 -86
  1196. package/source/class/qx/ui/mobile/basic/Label.js +38 -54
  1197. package/source/class/qx/ui/mobile/container/Carousel.js +281 -188
  1198. package/source/class/qx/ui/mobile/container/Collapsible.js +57 -77
  1199. package/source/class/qx/ui/mobile/container/Composite.js +9 -13
  1200. package/source/class/qx/ui/mobile/container/Drawer.js +167 -164
  1201. package/source/class/qx/ui/mobile/container/INavigation.js +6 -10
  1202. package/source/class/qx/ui/mobile/container/IScrollDelegate.js +4 -6
  1203. package/source/class/qx/ui/mobile/container/MIScroll.js +108 -100
  1204. package/source/class/qx/ui/mobile/container/MNativeScroll.js +118 -102
  1205. package/source/class/qx/ui/mobile/container/MScrollHandling.js +8 -7
  1206. package/source/class/qx/ui/mobile/container/Navigation.js +46 -65
  1207. package/source/class/qx/ui/mobile/container/Scroll.js +140 -151
  1208. package/source/class/qx/ui/mobile/control/Picker.js +125 -112
  1209. package/source/class/qx/ui/mobile/core/Blocker.js +62 -71
  1210. package/source/class/qx/ui/mobile/core/DomUpdatedHandler.js +24 -60
  1211. package/source/class/qx/ui/mobile/core/EventHandler.js +158 -138
  1212. package/source/class/qx/ui/mobile/core/MChildrenHandling.js +14 -30
  1213. package/source/class/qx/ui/mobile/core/MLayoutHandling.js +6 -14
  1214. package/source/class/qx/ui/mobile/core/MResize.js +16 -30
  1215. package/source/class/qx/ui/mobile/core/Root.js +90 -80
  1216. package/source/class/qx/ui/mobile/core/Widget.js +351 -479
  1217. package/source/class/qx/ui/mobile/dialog/BusyIndicator.js +31 -46
  1218. package/source/class/qx/ui/mobile/dialog/Manager.js +127 -89
  1219. package/source/class/qx/ui/mobile/dialog/Menu.js +111 -122
  1220. package/source/class/qx/ui/mobile/dialog/Popup.js +202 -194
  1221. package/source/class/qx/ui/mobile/embed/Canvas.js +12 -25
  1222. package/source/class/qx/ui/mobile/embed/Html.js +13 -27
  1223. package/source/class/qx/ui/mobile/form/Button.js +12 -18
  1224. package/source/class/qx/ui/mobile/form/CheckBox.js +20 -35
  1225. package/source/class/qx/ui/mobile/form/Form.js +31 -51
  1226. package/source/class/qx/ui/mobile/form/Group.js +18 -30
  1227. package/source/class/qx/ui/mobile/form/Input.js +30 -35
  1228. package/source/class/qx/ui/mobile/form/Label.js +76 -79
  1229. package/source/class/qx/ui/mobile/form/MState.js +20 -27
  1230. package/source/class/qx/ui/mobile/form/MText.js +27 -47
  1231. package/source/class/qx/ui/mobile/form/MValue.js +66 -94
  1232. package/source/class/qx/ui/mobile/form/NumberField.js +30 -47
  1233. package/source/class/qx/ui/mobile/form/PasswordField.js +8 -14
  1234. package/source/class/qx/ui/mobile/form/RadioButton.js +25 -46
  1235. package/source/class/qx/ui/mobile/form/RadioGroup.js +2 -4
  1236. package/source/class/qx/ui/mobile/form/Row.js +14 -29
  1237. package/source/class/qx/ui/mobile/form/SelectBox.js +77 -104
  1238. package/source/class/qx/ui/mobile/form/Slider.js +116 -144
  1239. package/source/class/qx/ui/mobile/form/TextArea.js +26 -39
  1240. package/source/class/qx/ui/mobile/form/TextField.js +18 -28
  1241. package/source/class/qx/ui/mobile/form/Title.js +11 -19
  1242. package/source/class/qx/ui/mobile/form/ToggleButton.js +35 -58
  1243. package/source/class/qx/ui/mobile/form/__init__.js +1 -1
  1244. package/source/class/qx/ui/mobile/form/renderer/AbstractRenderer.js +24 -31
  1245. package/source/class/qx/ui/mobile/form/renderer/Single.js +59 -85
  1246. package/source/class/qx/ui/mobile/form/renderer/SinglePlaceholder.js +8 -16
  1247. package/source/class/qx/ui/mobile/layout/Abstract.js +48 -85
  1248. package/source/class/qx/ui/mobile/layout/AbstractBox.js +93 -125
  1249. package/source/class/qx/ui/mobile/layout/Card.js +133 -116
  1250. package/source/class/qx/ui/mobile/layout/CardAnimation.js +95 -72
  1251. package/source/class/qx/ui/mobile/layout/HBox.js +9 -12
  1252. package/source/class/qx/ui/mobile/layout/VBox.js +9 -12
  1253. package/source/class/qx/ui/mobile/list/IListDelegate.js +5 -9
  1254. package/source/class/qx/ui/mobile/list/List.js +172 -183
  1255. package/source/class/qx/ui/mobile/list/provider/Provider.js +58 -65
  1256. package/source/class/qx/ui/mobile/list/renderer/Abstract.js +54 -82
  1257. package/source/class/qx/ui/mobile/list/renderer/Default.js +39 -55
  1258. package/source/class/qx/ui/mobile/list/renderer/group/Abstract.js +20 -33
  1259. package/source/class/qx/ui/mobile/list/renderer/group/Default.js +29 -45
  1260. package/source/class/qx/ui/mobile/navigationbar/BackButton.js +11 -15
  1261. package/source/class/qx/ui/mobile/navigationbar/Button.js +11 -15
  1262. package/source/class/qx/ui/mobile/navigationbar/NavigationBar.js +23 -29
  1263. package/source/class/qx/ui/mobile/navigationbar/Title.js +12 -20
  1264. package/source/class/qx/ui/mobile/page/Manager.js +195 -169
  1265. package/source/class/qx/ui/mobile/page/NavigationPage.js +132 -196
  1266. package/source/class/qx/ui/mobile/page/Page.js +109 -148
  1267. package/source/class/qx/ui/mobile/tabbar/TabBar.js +41 -62
  1268. package/source/class/qx/ui/mobile/tabbar/TabButton.js +19 -28
  1269. package/source/class/qx/ui/mobile/toolbar/Button.js +7 -11
  1270. package/source/class/qx/ui/mobile/toolbar/Separator.js +11 -15
  1271. package/source/class/qx/ui/mobile/toolbar/ToolBar.js +30 -39
  1272. package/source/class/qx/ui/popup/Manager.js +41 -53
  1273. package/source/class/qx/ui/popup/Popup.js +22 -47
  1274. package/source/class/qx/ui/popup/__init__.js +32 -32
  1275. package/source/class/qx/ui/progressive/Progressive.js +96 -137
  1276. package/source/class/qx/ui/progressive/State.js +12 -19
  1277. package/source/class/qx/ui/progressive/headfoot/Abstract.js +10 -15
  1278. package/source/class/qx/ui/progressive/headfoot/Null.js +4 -7
  1279. package/source/class/qx/ui/progressive/headfoot/Progress.js +67 -69
  1280. package/source/class/qx/ui/progressive/headfoot/TableHeading.js +42 -54
  1281. package/source/class/qx/ui/progressive/model/Abstract.js +8 -15
  1282. package/source/class/qx/ui/progressive/model/Default.js +17 -29
  1283. package/source/class/qx/ui/progressive/renderer/Abstract.js +6 -11
  1284. package/source/class/qx/ui/progressive/renderer/FunctionCaller.js +4 -7
  1285. package/source/class/qx/ui/progressive/renderer/table/Row.js +215 -242
  1286. package/source/class/qx/ui/progressive/renderer/table/Widths.js +32 -47
  1287. package/source/class/qx/ui/progressive/renderer/table/cell/Abstract.js +17 -24
  1288. package/source/class/qx/ui/progressive/renderer/table/cell/Boolean.js +68 -79
  1289. package/source/class/qx/ui/progressive/renderer/table/cell/Conditional.js +146 -199
  1290. package/source/class/qx/ui/progressive/renderer/table/cell/Default.js +14 -32
  1291. package/source/class/qx/ui/progressive/renderer/table/cell/Html.js +2 -3
  1292. package/source/class/qx/ui/progressive/renderer/table/cell/Icon.js +38 -53
  1293. package/source/class/qx/ui/progressive/renderer/table/cell/Image.js +20 -42
  1294. package/source/class/qx/ui/progressive/renderer/table/cell/String.js +6 -12
  1295. package/source/class/qx/ui/progressive/structure/Abstract.js +14 -26
  1296. package/source/class/qx/ui/progressive/structure/Default.js +20 -40
  1297. package/source/class/qx/ui/root/Abstract.js +73 -90
  1298. package/source/class/qx/ui/root/Application.js +57 -61
  1299. package/source/class/qx/ui/root/Inline.js +78 -64
  1300. package/source/class/qx/ui/root/Page.js +25 -46
  1301. package/source/class/qx/ui/splitpane/Blocker.js +20 -30
  1302. package/source/class/qx/ui/splitpane/HLayout.js +53 -49
  1303. package/source/class/qx/ui/splitpane/Pane.js +112 -150
  1304. package/source/class/qx/ui/splitpane/Slider.js +9 -15
  1305. package/source/class/qx/ui/splitpane/Splitter.js +27 -46
  1306. package/source/class/qx/ui/splitpane/VLayout.js +53 -49
  1307. package/source/class/qx/ui/style/Stylesheet.js +12 -19
  1308. package/source/class/qx/ui/table/ICellEditorFactory.js +4 -8
  1309. package/source/class/qx/ui/table/ICellRenderer.js +3 -7
  1310. package/source/class/qx/ui/table/IColumnMenuButton.js +6 -11
  1311. package/source/class/qx/ui/table/IColumnMenuItem.js +5 -8
  1312. package/source/class/qx/ui/table/IHeaderRenderer.js +4 -8
  1313. package/source/class/qx/ui/table/IRowRenderer.js +6 -12
  1314. package/source/class/qx/ui/table/ITableModel.js +23 -41
  1315. package/source/class/qx/ui/table/MTableContextMenu.js +25 -28
  1316. package/source/class/qx/ui/table/Table.js +556 -748
  1317. package/source/class/qx/ui/table/celleditor/AbstractField.js +16 -26
  1318. package/source/class/qx/ui/table/celleditor/CheckBox.js +15 -16
  1319. package/source/class/qx/ui/table/celleditor/ComboBox.js +24 -34
  1320. package/source/class/qx/ui/table/celleditor/Dynamic.js +25 -32
  1321. package/source/class/qx/ui/table/celleditor/PasswordField.js +4 -8
  1322. package/source/class/qx/ui/table/celleditor/SelectBox.js +29 -38
  1323. package/source/class/qx/ui/table/celleditor/TextField.js +9 -14
  1324. package/source/class/qx/ui/table/cellrenderer/Abstract.js +78 -73
  1325. package/source/class/qx/ui/table/cellrenderer/AbstractImage.js +65 -84
  1326. package/source/class/qx/ui/table/cellrenderer/Boolean.js +36 -50
  1327. package/source/class/qx/ui/table/cellrenderer/Conditional.js +74 -63
  1328. package/source/class/qx/ui/table/cellrenderer/Date.js +12 -22
  1329. package/source/class/qx/ui/table/cellrenderer/Debug.js +9 -9
  1330. package/source/class/qx/ui/table/cellrenderer/Default.js +30 -52
  1331. package/source/class/qx/ui/table/cellrenderer/Dynamic.js +13 -24
  1332. package/source/class/qx/ui/table/cellrenderer/Html.js +6 -8
  1333. package/source/class/qx/ui/table/cellrenderer/Image.js +13 -26
  1334. package/source/class/qx/ui/table/cellrenderer/Number.js +13 -24
  1335. package/source/class/qx/ui/table/cellrenderer/Password.js +8 -11
  1336. package/source/class/qx/ui/table/cellrenderer/Replace.js +27 -42
  1337. package/source/class/qx/ui/table/cellrenderer/String.js +5 -7
  1338. package/source/class/qx/ui/table/columnmenu/Button.js +19 -29
  1339. package/source/class/qx/ui/table/columnmenu/MenuItem.js +11 -19
  1340. package/source/class/qx/ui/table/columnmenu/__init__.js +4 -4
  1341. package/source/class/qx/ui/table/columnmenu/grid/__init__.js +4 -4
  1342. package/source/class/qx/ui/table/columnmenu/simple/__init__.js +4 -4
  1343. package/source/class/qx/ui/table/columnmodel/Basic.js +193 -215
  1344. package/source/class/qx/ui/table/columnmodel/Resize.js +65 -111
  1345. package/source/class/qx/ui/table/columnmodel/resizebehavior/Abstract.js +17 -24
  1346. package/source/class/qx/ui/table/columnmodel/resizebehavior/Default.js +66 -117
  1347. package/source/class/qx/ui/table/headerrenderer/Default.js +25 -46
  1348. package/source/class/qx/ui/table/headerrenderer/HeaderCell.js +36 -51
  1349. package/source/class/qx/ui/table/headerrenderer/Icon.js +11 -27
  1350. package/source/class/qx/ui/table/model/Abstract.js +52 -62
  1351. package/source/class/qx/ui/table/model/Filtered.js +121 -153
  1352. package/source/class/qx/ui/table/model/Remote.js +166 -271
  1353. package/source/class/qx/ui/table/model/Simple.js +225 -252
  1354. package/source/class/qx/ui/table/pane/CellEvent.js +25 -32
  1355. package/source/class/qx/ui/table/pane/Clipper.js +8 -12
  1356. package/source/class/qx/ui/table/pane/FocusIndicator.js +42 -48
  1357. package/source/class/qx/ui/table/pane/Header.js +45 -86
  1358. package/source/class/qx/ui/table/pane/Model.js +73 -96
  1359. package/source/class/qx/ui/table/pane/Pane.js +132 -190
  1360. package/source/class/qx/ui/table/pane/Scroller.js +542 -659
  1361. package/source/class/qx/ui/table/rowrenderer/Default.js +75 -86
  1362. package/source/class/qx/ui/table/selection/Manager.js +23 -57
  1363. package/source/class/qx/ui/table/selection/Model.js +89 -179
  1364. package/source/class/qx/ui/tabview/Page.js +48 -79
  1365. package/source/class/qx/ui/tabview/TabButton.js +45 -72
  1366. package/source/class/qx/ui/tabview/TabView.js +94 -141
  1367. package/source/class/qx/ui/toolbar/Button.js +13 -18
  1368. package/source/class/qx/ui/toolbar/CheckBox.js +13 -17
  1369. package/source/class/qx/ui/toolbar/MenuButton.js +18 -34
  1370. package/source/class/qx/ui/toolbar/Part.js +42 -64
  1371. package/source/class/qx/ui/toolbar/PartContainer.js +19 -28
  1372. package/source/class/qx/ui/toolbar/RadioButton.js +12 -19
  1373. package/source/class/qx/ui/toolbar/Separator.js +15 -25
  1374. package/source/class/qx/ui/toolbar/SplitButton.js +19 -28
  1375. package/source/class/qx/ui/toolbar/ToolBar.js +182 -232
  1376. package/source/class/qx/ui/tooltip/Manager.js +125 -123
  1377. package/source/class/qx/ui/tooltip/ToolTip.js +49 -79
  1378. package/source/class/qx/ui/tooltip/__init__.js +23 -23
  1379. package/source/class/qx/ui/tree/Tree.js +95 -148
  1380. package/source/class/qx/ui/tree/TreeFile.js +8 -15
  1381. package/source/class/qx/ui/tree/TreeFolder.js +8 -15
  1382. package/source/class/qx/ui/tree/VirtualTree.js +207 -333
  1383. package/source/class/qx/ui/tree/VirtualTreeItem.js +30 -45
  1384. package/source/class/qx/ui/tree/__init__.js +50 -50
  1385. package/source/class/qx/ui/tree/core/AbstractItem.js +98 -152
  1386. package/source/class/qx/ui/tree/core/AbstractTreeItem.js +83 -137
  1387. package/source/class/qx/ui/tree/core/FolderOpenButton.js +15 -34
  1388. package/source/class/qx/ui/tree/core/IVirtualTree.js +13 -33
  1389. package/source/class/qx/ui/tree/core/IVirtualTreeDelegate.js +9 -16
  1390. package/source/class/qx/ui/tree/core/MWidgetController.js +58 -69
  1391. package/source/class/qx/ui/tree/core/OpenCloseController.js +29 -35
  1392. package/source/class/qx/ui/tree/core/Util.js +12 -16
  1393. package/source/class/qx/ui/tree/provider/IVirtualTreeProvider.js +10 -23
  1394. package/source/class/qx/ui/tree/provider/WidgetProvider.js +39 -67
  1395. package/source/class/qx/ui/tree/selection/SelectionManager.js +27 -41
  1396. package/source/class/qx/ui/treevirtual/DefaultDataCellRenderer.js +2 -3
  1397. package/source/class/qx/ui/treevirtual/MFamily.js +26 -63
  1398. package/source/class/qx/ui/treevirtual/MNode.js +43 -103
  1399. package/source/class/qx/ui/treevirtual/MTreePrimitive.js +41 -52
  1400. package/source/class/qx/ui/treevirtual/SelectionManager.js +44 -58
  1401. package/source/class/qx/ui/treevirtual/SimpleTreeDataCellRenderer.js +172 -229
  1402. package/source/class/qx/ui/treevirtual/SimpleTreeDataModel.js +256 -367
  1403. package/source/class/qx/ui/treevirtual/SimpleTreeDataRowRenderer.js +8 -18
  1404. package/source/class/qx/ui/treevirtual/TreeVirtual.js +155 -250
  1405. package/source/class/qx/ui/treevirtual/celleditor/NodeEditor.js +10 -16
  1406. package/source/class/qx/ui/treevirtual/pane/Scroller.js +14 -11
  1407. package/source/class/qx/ui/virtual/__init__.js +4 -4
  1408. package/source/class/qx/ui/virtual/behavior/Prefetch.js +71 -86
  1409. package/source/class/qx/ui/virtual/cell/Abstract.js +18 -27
  1410. package/source/class/qx/ui/virtual/cell/AbstractImage.js +42 -51
  1411. package/source/class/qx/ui/virtual/cell/AbstractWidget.js +25 -49
  1412. package/source/class/qx/ui/virtual/cell/Boolean.js +31 -44
  1413. package/source/class/qx/ui/virtual/cell/Cell.js +143 -183
  1414. package/source/class/qx/ui/virtual/cell/CellStylesheet.js +31 -38
  1415. package/source/class/qx/ui/virtual/cell/Date.js +15 -24
  1416. package/source/class/qx/ui/virtual/cell/Html.js +9 -20
  1417. package/source/class/qx/ui/virtual/cell/ICell.js +4 -6
  1418. package/source/class/qx/ui/virtual/cell/IWidgetCell.js +7 -12
  1419. package/source/class/qx/ui/virtual/cell/IWidgetCellDelegate.js +4 -6
  1420. package/source/class/qx/ui/virtual/cell/Image.js +8 -14
  1421. package/source/class/qx/ui/virtual/cell/Number.js +14 -23
  1422. package/source/class/qx/ui/virtual/cell/String.js +11 -20
  1423. package/source/class/qx/ui/virtual/cell/WidgetCell.js +13 -16
  1424. package/source/class/qx/ui/virtual/cell/__init__.js +4 -4
  1425. package/source/class/qx/ui/virtual/core/Axis.js +75 -103
  1426. package/source/class/qx/ui/virtual/core/CellEvent.js +23 -31
  1427. package/source/class/qx/ui/virtual/core/IHtmlCellProvider.js +4 -6
  1428. package/source/class/qx/ui/virtual/core/ILayer.js +5 -15
  1429. package/source/class/qx/ui/virtual/core/IWidgetCellProvider.js +5 -7
  1430. package/source/class/qx/ui/virtual/core/Pane.js +199 -242
  1431. package/source/class/qx/ui/virtual/core/Scroller.js +25 -43
  1432. package/source/class/qx/ui/virtual/layer/Abstract.js +44 -83
  1433. package/source/class/qx/ui/virtual/layer/AbstractBackground.js +47 -68
  1434. package/source/class/qx/ui/virtual/layer/CellSpanManager.js +74 -96
  1435. package/source/class/qx/ui/virtual/layer/Column.js +26 -36
  1436. package/source/class/qx/ui/virtual/layer/GridLines.js +43 -70
  1437. package/source/class/qx/ui/virtual/layer/HtmlCell.js +34 -32
  1438. package/source/class/qx/ui/virtual/layer/HtmlCellSpan.js +54 -56
  1439. package/source/class/qx/ui/virtual/layer/Row.js +28 -36
  1440. package/source/class/qx/ui/virtual/layer/WidgetCell.js +87 -123
  1441. package/source/class/qx/ui/virtual/layer/WidgetCellSpan.js +123 -124
  1442. package/source/class/qx/ui/virtual/selection/Abstract.js +26 -54
  1443. package/source/class/qx/ui/virtual/selection/CellLines.js +11 -21
  1444. package/source/class/qx/ui/virtual/selection/CellRectangle.js +45 -73
  1445. package/source/class/qx/ui/virtual/selection/Column.js +16 -35
  1446. package/source/class/qx/ui/virtual/selection/ISelectionDelegate.js +5 -9
  1447. package/source/class/qx/ui/virtual/selection/MModel.js +84 -122
  1448. package/source/class/qx/ui/virtual/selection/Row.js +29 -61
  1449. package/source/class/qx/ui/website/Accordion.js +39 -42
  1450. package/source/class/qx/ui/website/Button.js +17 -25
  1451. package/source/class/qx/ui/website/Calendar.js +243 -172
  1452. package/source/class/qx/ui/website/Carousel.js +169 -155
  1453. package/source/class/qx/ui/website/DatePicker.js +99 -85
  1454. package/source/class/qx/ui/website/Rating.js +35 -53
  1455. package/source/class/qx/ui/website/Slider.js +174 -153
  1456. package/source/class/qx/ui/website/Table.js +482 -456
  1457. package/source/class/qx/ui/website/Tabs.js +225 -180
  1458. package/source/class/qx/ui/website/Widget.js +39 -52
  1459. package/source/class/qx/ui/window/Desktop.js +14 -12
  1460. package/source/class/qx/ui/window/IDesktop.js +8 -10
  1461. package/source/class/qx/ui/window/IWindowManager.js +7 -9
  1462. package/source/class/qx/ui/window/MDesktop.js +34 -62
  1463. package/source/class/qx/ui/window/Manager.js +31 -57
  1464. package/source/class/qx/ui/window/Window.js +250 -351
  1465. package/source/class/qx/util/AliasManager.js +23 -42
  1466. package/source/class/qx/util/Animation.js +248 -191
  1467. package/source/class/qx/util/Base64.js +144 -89
  1468. package/source/class/qx/util/ColorUtil.js +253 -287
  1469. package/source/class/qx/util/DeferredCall.js +21 -30
  1470. package/source/class/qx/util/DeferredCallManager.js +23 -44
  1471. package/source/class/qx/util/Delegate.js +4 -10
  1472. package/source/class/qx/util/DisposeUtil.js +76 -70
  1473. package/source/class/qx/util/DynamicScriptLoader.js +83 -66
  1474. package/source/class/qx/util/EditDistance.js +64 -58
  1475. package/source/class/qx/util/ExtendedColor.js +157 -163
  1476. package/source/class/qx/util/Function.js +8 -8
  1477. package/source/class/qx/util/LibraryManager.js +11 -18
  1478. package/source/class/qx/util/OOUtil.js +17 -36
  1479. package/source/class/qx/util/ObjectPool.js +19 -45
  1480. package/source/class/qx/util/Permutation.js +9 -16
  1481. package/source/class/qx/util/PropertyUtil.js +58 -70
  1482. package/source/class/qx/util/Request.js +27 -16
  1483. package/source/class/qx/util/ResourceManager.js +103 -104
  1484. package/source/class/qx/util/ResponseParser.js +14 -21
  1485. package/source/class/qx/util/RingBuffer.js +46 -48
  1486. package/source/class/qx/util/Serializer.js +103 -68
  1487. package/source/class/qx/util/StringBuilder.js +11 -22
  1488. package/source/class/qx/util/StringEscape.js +15 -29
  1489. package/source/class/qx/util/StringSplit.js +18 -21
  1490. package/source/class/qx/util/TimerManager.js +61 -70
  1491. package/source/class/qx/util/Uri.js +42 -30
  1492. package/source/class/qx/util/Uuid.js +50 -35
  1493. package/source/class/qx/util/Validate.js +88 -73
  1494. package/source/class/qx/util/ValueManager.js +17 -29
  1495. package/source/class/qx/util/Wheel.js +22 -16
  1496. package/source/class/qx/util/format/DateFormat.js +822 -759
  1497. package/source/class/qx/util/format/IFormat.js +4 -8
  1498. package/source/class/qx/util/format/NumberFormat.js +84 -91
  1499. package/source/class/qx/util/fsm/FiniteStateMachine.js +323 -382
  1500. package/source/class/qx/util/fsm/State.js +210 -249
  1501. package/source/class/qx/util/fsm/Transition.js +138 -160
  1502. package/source/class/qx/util/placement/AbstractAxis.js +12 -14
  1503. package/source/class/qx/util/placement/BestFitAxis.js +5 -8
  1504. package/source/class/qx/util/placement/DirectAxis.js +5 -7
  1505. package/source/class/qx/util/placement/KeepAlignAxis.js +8 -14
  1506. package/source/class/qx/util/placement/Placement.js +39 -56
  1507. package/source/class/qx/util/placement/__init__.js +4 -4
  1508. package/source/class/qx/xml/Document.js +21 -34
  1509. package/source/class/qx/xml/Element.js +90 -73
  1510. package/source/class/qx/xml/String.js +15 -21
  1511. package/source/class/qxWeb.js +102 -69
  1512. package/source/resource/qx/mobile/js/iscroll.js +1328 -982
  1513. package/source/resource/qx/mobile/js/iscroll.min.js +1081 -1
  1514. package/source/resource/qx/test/dynamicscriptloader/first.js +1 -1
  1515. package/source/resource/qx/test/dynamicscriptloader/second.js +1 -1
  1516. package/source/resource/qx/test/dynamicscriptloader/third.js +1 -1
  1517. package/source/resource/qx/test/script.js +1 -1
  1518. package/source/resource/qx/test/webworker.js +2 -2
  1519. package/source/resource/qx/tool/loadsass.js +16 -15
  1520. package/source/resource/qx/tool/schema/compile-1-0-0.json +13 -13
  1521. package/source/resource/qx/tool/website/build/assets/bluebird.min.js +4593 -9
  1522. package/source/resource/qx/tool/website/build/assets/buttons.js +391 -1
  1523. package/source/resource/qx/tool/website/build/assets/fontawesome-all.js +8963 -1
  1524. package/source/resource/qx/tool/website/build/assets/jquery.js +5452 -3
  1525. package/source/resource/qx/tool/website/build/diagnostics/dependson.js +31 -31
  1526. package/source/resource/qx/tool/website/build/diagnostics/requiredby.js +32 -36
  1527. package/source/resource/qx/tool/website/build/scripts/serve.js +87 -66
  1528. package/source/resource/qx/tool/website/src/assets/bluebird.min.js +4593 -9
  1529. package/source/resource/qx/tool/website/src/assets/buttons.js +391 -1
  1530. package/source/resource/qx/tool/website/src/assets/fontawesome-all.js +8963 -1
  1531. package/source/resource/qx/tool/website/src/assets/jquery.js +5452 -3
  1532. package/source/resource/qx/tool/website/src/diagnostics/dependson.js +31 -31
  1533. package/source/resource/qx/tool/website/src/diagnostics/requiredby.js +32 -36
  1534. package/source/resource/qx/tool/website/src/scripts/serve.js +87 -66
  1535. package/lib/resource/qx/static/blank.gif +0 -0
  1536. package/source/class/qx/io/remote/Exchange.js +0 -1063
  1537. package/source/class/qx/io/remote/Request.js +0 -1021
  1538. package/source/class/qx/io/remote/RequestQueue.js +0 -521
  1539. package/source/class/qx/io/remote/Response.js +0 -137
  1540. package/source/class/qx/io/remote/Rpc.js +0 -1075
  1541. package/source/class/qx/io/remote/RpcError.js +0 -198
  1542. package/source/class/qx/io/remote/__init__.js +0 -88
  1543. package/source/class/qx/io/remote/transport/Abstract.js +0 -513
  1544. package/source/class/qx/io/remote/transport/Iframe.js +0 -652
  1545. package/source/class/qx/io/remote/transport/Script.js +0 -475
  1546. package/source/class/qx/io/remote/transport/XmlHttp.js +0 -1019
  1547. package/source/class/qx/io/remote/transport/__init__.js +0 -3
  1548. package/source/class/qx/test/io/remote/AbstractRequest.js +0 -150
  1549. package/source/class/qx/test/io/remote/RequestIframe.js +0 -105
  1550. package/source/class/qx/test/io/remote/RequestXhr.js +0 -151
  1551. package/source/class/qx/test/io/remote/Rpc.js +0 -205
  1552. package/source/class/qx/test/io/remote/__init__.js +0 -4
  1553. package/source/class/qx/test/io/remote/transport/Iframe.js +0 -67
  1554. package/source/class/qx/test/io/remote/transport/XmlHttp.js +0 -133
  1555. 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;