@qooxdoo/framework 7.0.0-beta → 7.0.0-beta.4

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 (224) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/Manifest.json +11 -8
  3. package/bin/deploy/qx +0 -0
  4. package/lib/compiler/compile-info.json +86 -96
  5. package/lib/compiler/index.js +35547 -47284
  6. package/{source/class/qx/tool/compiler/targets → lib/resource/qx/tool/cli/templates}/TypeScriptWriter-base_declaration.txt +0 -0
  7. package/lib/resource/qx/tool/cli/templates/loader/loader-browser.tmpl.js +8 -2
  8. package/lib/resource/qx/tool/cli/templates/loader/loader-node.tmpl.js +24 -11
  9. package/lib/resource/qx/tool/cli/templates/loader/loader-rhino.tmpl.js +9 -2
  10. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css +1 -1
  11. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +1 -44
  12. package/lib/resource/qx/tool/cli/templates/template_vars.js +1 -1
  13. package/lib/resource/qx/tool/loadsass.js +13 -0
  14. package/lib/resource/qx/tool/schema/Manifest-1-0-0.json +1 -2
  15. package/lib/resource/qx/tool/schema/Manifest-2-0-0.json +1 -2
  16. package/lib/resource/qx/tool/schema/compile-1-0-0.json +19 -9
  17. package/lib/resource/qx/tool/website/sass/qooxdoo.css +1 -1
  18. package/lib/resource/qx/tool/website/sass/qooxdoo.css.map +1 -9
  19. package/package.json +14 -14
  20. package/source/class/qx/Annotation.js +2 -2
  21. package/source/class/qx/Class.js +20 -4
  22. package/source/class/qx/Interface.js +6 -0
  23. package/source/class/qx/Promise.js +32 -2
  24. package/source/class/qx/bom/Element.js +1 -0
  25. package/source/class/qx/bom/Font.js +17 -2
  26. package/source/class/qx/bom/Iframe.js +10 -5
  27. package/source/class/qx/bom/Label.js +2 -1
  28. package/source/class/qx/bom/Template.js +2 -0
  29. package/source/class/qx/bom/client/Browser.js +11 -2
  30. package/source/class/qx/bom/client/OperatingSystem.js +16 -0
  31. package/source/class/qx/bom/element/Decoration.js +8 -5
  32. package/source/class/qx/bom/element/Dimension.js +46 -0
  33. package/source/class/qx/bom/webfonts/WebFont.js +10 -0
  34. package/source/class/qx/core/BaseInit.js +9 -3
  35. package/source/class/qx/core/Environment.js +1 -0
  36. package/source/class/qx/core/Property.js +2 -2
  37. package/source/class/qx/data/SingleValueBinding.js +6 -3
  38. package/source/class/qx/data/controller/CheckedList.js +18 -9
  39. package/source/class/qx/data/controller/List.js +8 -0
  40. package/source/class/qx/dev/unit/Sinon.js +1 -1
  41. package/source/class/qx/event/Utils.js +1 -1
  42. package/source/class/qx/event/handler/DragDrop.js +1 -1
  43. package/source/class/qx/event/handler/Gesture.js +3 -1
  44. package/source/class/qx/event/handler/Mouse.js +61 -22
  45. package/source/class/qx/event/handler/Video.js +111 -0
  46. package/source/class/qx/html/Element.js +47 -32
  47. package/source/class/qx/html/Image.js +2 -2
  48. package/source/class/qx/html/Node.js +34 -4
  49. package/source/class/qx/lang/Json.js +1 -0
  50. package/source/class/qx/lang/String.js +53 -1
  51. package/source/class/qx/test/Annotation.js +2 -1
  52. package/source/class/qx/test/Promise.js +5 -3
  53. package/source/class/qx/test/bom/Font.js +10 -1
  54. package/source/class/qx/test/core/Property.js +5 -3
  55. package/source/class/qx/test/html/Element.js +3 -3
  56. package/source/class/qx/test/lang/String.js +28 -0
  57. package/source/class/qx/test/type/BaseString.js +7 -0
  58. package/source/class/qx/test/ui/embed/Iframe.js +1 -0
  59. package/source/class/qx/test/ui/form/ComboBox.js +0 -42
  60. package/source/class/qx/test/ui/virtual/performance/AbstractLayerTest.js +6 -2
  61. package/source/class/qx/theme/manager/Decoration.js +0 -0
  62. package/source/class/qx/theme/manager/Font.js +11 -0
  63. package/source/class/qx/theme/tangible/Appearance.js +10 -0
  64. package/source/class/qx/theme/tangible/ColorDark.js +0 -0
  65. package/source/class/qx/theme/tangible/Decoration.js +6 -0
  66. package/source/class/qx/tool/cli/Cli.js +5 -3
  67. package/source/class/qx/tool/cli/Watch.js +52 -0
  68. package/source/class/qx/tool/cli/api/AbstractApi.js +1 -1
  69. package/source/class/qx/tool/cli/api/CompilerApi.js +16 -6
  70. package/source/class/qx/tool/cli/api/LibraryApi.js +1 -1
  71. package/source/class/qx/tool/cli/commands/Command.js +7 -0
  72. package/source/class/qx/tool/cli/commands/Compile.js +28 -9
  73. package/source/class/qx/tool/cli/commands/Lint.js +30 -11
  74. package/source/class/qx/tool/cli/commands/Package.js +1 -2
  75. package/source/class/qx/tool/cli/commands/Run.js +2 -25
  76. package/source/class/qx/tool/cli/commands/Serve.js +9 -0
  77. package/source/class/qx/tool/cli/commands/package/Publish.js +19 -10
  78. package/source/class/qx/tool/compiler/Analyser.js +22 -23
  79. package/source/class/qx/tool/compiler/ClassFile.js +3 -2
  80. package/source/class/qx/tool/compiler/Console.js +17 -1
  81. package/source/class/qx/tool/compiler/Preprocess.js +1 -1
  82. package/source/class/qx/tool/compiler/app/Application.js +4 -2
  83. package/source/class/qx/tool/compiler/app/Cldr.js +1 -1
  84. package/source/class/qx/tool/compiler/app/Library.js +82 -88
  85. package/source/class/qx/tool/compiler/app/Part.js +1 -1
  86. package/source/class/qx/tool/compiler/app/Translation.js +1 -1
  87. package/source/class/qx/tool/compiler/app/WebFont.js +5 -4
  88. package/source/class/qx/tool/compiler/jsdoc/ChildControlParser.js +1 -1
  89. package/source/class/qx/tool/compiler/jsdoc/CommandParser.js +1 -1
  90. package/source/class/qx/tool/compiler/jsdoc/ParamParser.js +1 -1
  91. package/source/class/qx/tool/compiler/jsdoc/Parser.js +1 -1
  92. package/source/class/qx/tool/compiler/jsdoc/ReturnParser.js +1 -1
  93. package/source/class/qx/tool/compiler/jsdoc/ThrowsParser.js +1 -1
  94. package/source/class/qx/tool/compiler/makers/AbstractAppMaker.js +1 -1
  95. package/source/class/qx/tool/compiler/makers/AppMaker.js +14 -14
  96. package/source/class/qx/tool/compiler/makers/Maker.js +1 -1
  97. package/source/class/qx/tool/compiler/resources/AbstractMatcher.js +1 -1
  98. package/source/class/qx/tool/compiler/resources/Asset.js +2 -2
  99. package/source/class/qx/tool/compiler/resources/ImageLoader.js +3 -2
  100. package/source/class/qx/tool/compiler/resources/Manager.js +5 -5
  101. package/source/class/qx/tool/compiler/resources/MetaLoader.js +1 -1
  102. package/source/class/qx/tool/compiler/resources/ResourceConverter.js +1 -1
  103. package/source/class/qx/tool/compiler/resources/ResourceLoader.js +1 -1
  104. package/source/class/qx/tool/compiler/resources/ScssConverter.js +9 -3
  105. package/source/class/qx/tool/compiler/resources/ScssFile.js +13 -12
  106. package/source/class/qx/tool/compiler/resources/ScssIncludeConverter.js +1 -1
  107. package/source/class/qx/tool/compiler/targets/BuildTarget.js +1 -1
  108. package/source/class/qx/tool/compiler/targets/SourceCodeCopier.js +1 -1
  109. package/source/class/qx/tool/compiler/targets/SourceTarget.js +1 -1
  110. package/source/class/qx/tool/compiler/targets/Target.js +70 -32
  111. package/source/class/qx/tool/compiler/targets/TypeScriptWriter.js +3 -4
  112. package/source/class/qx/tool/compiler/targets/meta/AbstractJavascriptMeta.js +22 -0
  113. package/source/class/qx/tool/compiler/targets/meta/ApplicationMeta.js +30 -0
  114. package/source/class/qx/tool/compiler/targets/meta/BootJs.js +22 -0
  115. package/source/class/qx/tool/compiler/targets/meta/Javascript.js +22 -0
  116. package/source/class/qx/tool/compiler/targets/meta/Package.js +37 -2
  117. package/source/class/qx/tool/compiler/targets/meta/PackageJavascript.js +22 -0
  118. package/source/class/qx/tool/compiler/targets/meta/Part.js +22 -0
  119. package/source/class/qx/tool/compiler/targets/meta/PolyfillJs.js +29 -7
  120. package/source/class/qx/tool/compiler/targets/meta/Uglify.js +23 -1
  121. package/source/class/qx/tool/config/Abstract.js +3 -3
  122. package/source/class/qx/tool/config/Utils.js +10 -1
  123. package/source/class/qx/tool/utils/IndexedArray.js +1 -1
  124. package/source/class/qx/tool/utils/Json.js +2 -2
  125. package/source/class/qx/tool/utils/LogManager.js +1 -1
  126. package/source/class/qx/tool/utils/Logger.js +1 -1
  127. package/source/class/qx/tool/utils/Promisify.js +1 -1
  128. package/source/class/qx/tool/utils/Utils.js +118 -1
  129. package/source/class/qx/tool/utils/Values.js +1 -1
  130. package/source/class/qx/tool/utils/Website.js +23 -18
  131. package/source/class/qx/tool/utils/files/FindFiles.js +1 -1
  132. package/source/class/qx/tool/utils/files/Utils.js +1 -1
  133. package/source/class/qx/tool/utils/json/Parser.js +1 -1
  134. package/source/class/qx/tool/utils/json/Stringify.js +1 -1
  135. package/source/class/qx/tool/utils/json/Tokenizer.js +1 -1
  136. package/source/class/qx/tool/utils/json/Writer.js +1 -1
  137. package/source/class/qx/type/BaseString.js +2 -1
  138. package/source/class/qx/ui/basic/Image.js +15 -7
  139. package/source/class/qx/ui/basic/Label.js +3 -1
  140. package/source/class/qx/ui/container/SlideBar.js +3 -0
  141. package/source/class/qx/ui/control/DateChooser.js +20 -1
  142. package/source/class/qx/ui/core/scroll/NativeScrollBar.js +3 -0
  143. package/source/class/qx/ui/core/scroll/ScrollBar.js +3 -0
  144. package/source/class/qx/ui/form/AbstractSelectBox.js +38 -6
  145. package/source/class/qx/ui/form/Button.js +3 -0
  146. package/source/class/qx/ui/form/CheckBox.js +25 -1
  147. package/source/class/qx/ui/form/CheckedList.js +2 -1
  148. package/source/class/qx/ui/form/ComboBox.js +36 -27
  149. package/source/class/qx/ui/form/List.js +3 -0
  150. package/source/class/qx/ui/form/MenuButton.js +24 -2
  151. package/source/class/qx/ui/form/RadioButton.js +7 -0
  152. package/source/class/qx/ui/form/RadioButtonGroup.js +3 -0
  153. package/source/class/qx/ui/form/RadioGroup.js +19 -0
  154. package/source/class/qx/ui/form/SelectBox.js +23 -1
  155. package/source/class/qx/ui/form/Slider.js +15 -0
  156. package/source/class/qx/ui/form/SplitButton.js +3 -0
  157. package/source/class/qx/ui/form/ToggleButton.js +8 -0
  158. package/source/class/qx/ui/menu/AbstractButton.js +24 -0
  159. package/source/class/qx/ui/menu/Button.js +3 -0
  160. package/source/class/qx/ui/menu/CheckBox.js +8 -0
  161. package/source/class/qx/ui/menu/Manager.js +2 -0
  162. package/source/class/qx/ui/menu/Menu.js +63 -1
  163. package/source/class/qx/ui/menu/RadioButton.js +10 -1
  164. package/source/class/qx/ui/menubar/Button.js +0 -27
  165. package/source/class/qx/ui/menubar/MenuBar.js +12 -0
  166. package/source/class/qx/ui/splitpane/Blocker.js +3 -0
  167. package/source/class/qx/ui/splitpane/HLayout.js +2 -2
  168. package/source/class/qx/ui/splitpane/Pane.js +4 -1
  169. package/source/class/qx/ui/splitpane/VLayout.js +2 -2
  170. package/source/class/qx/ui/table/Table.js +24 -2
  171. package/source/class/qx/ui/table/cellrenderer/Abstract.js +3 -1
  172. package/source/class/qx/ui/table/cellrenderer/AbstractImage.js +7 -3
  173. package/source/class/qx/ui/table/headerrenderer/HeaderCell.js +3 -0
  174. package/source/class/qx/ui/table/pane/Header.js +3 -0
  175. package/source/class/qx/ui/table/pane/Scroller.js +3 -7
  176. package/source/class/qx/ui/table/rowrenderer/Default.js +1 -1
  177. package/source/class/qx/ui/tabview/Page.js +26 -0
  178. package/source/class/qx/ui/tabview/TabView.js +3 -0
  179. package/source/class/qx/ui/toolbar/Button.js +2 -27
  180. package/source/class/qx/ui/toolbar/CheckBox.js +0 -27
  181. package/source/class/qx/ui/toolbar/RadioButton.js +21 -0
  182. package/source/class/qx/ui/toolbar/SplitButton.js +0 -28
  183. package/source/class/qx/ui/toolbar/ToolBar.js +3 -0
  184. package/source/class/qx/util/ColorUtil.js +2 -1
  185. package/source/class/qx/util/ResourceManager.js +16 -7
  186. package/source/class/qx/util/format/DateFormat.js +9 -0
  187. package/source/class/qxWeb.js +8 -4
  188. package/source/resource/qx/decoration/Indigo/font/JosefinSlab-SemiBold.ttf +0 -0
  189. package/source/resource/qx/decoration/Indigo/font/SIL Open Font License 1.1.txt +0 -0
  190. package/source/resource/qx/iconfont/MaterialIcons/fetch-fonts.sh +0 -0
  191. package/source/resource/qx/mobile/scss/common/_gradients.scss +3 -1
  192. package/source/resource/qx/mobile/scss/theme/indigo/_styles.scss +1 -1
  193. package/source/resource/qx/mobile/scss/ui/_carousel.scss +2 -2
  194. package/source/resource/qx/mobile/scss/ui/_checkbox.scss +3 -3
  195. package/source/resource/qx/mobile/scss/ui/_collapsible.scss +2 -2
  196. package/source/resource/qx/mobile/scss/ui/_picker.scss +4 -4
  197. package/source/resource/qx/mobile/scss/ui/_radiobutton.scss +4 -4
  198. package/source/resource/qx/mobile/scss/ui/_slider.scss +7 -7
  199. package/source/resource/qx/scss/_gradients.scss +3 -1
  200. package/source/resource/qx/scss/_mixins.scss +4 -2
  201. package/source/resource/qx/tool/bin/build-devtools +0 -0
  202. package/source/resource/qx/tool/bin/build-website +0 -0
  203. package/source/resource/qx/tool/bin/download-assets +0 -0
  204. package/source/resource/qx/tool/cli/templates/TypeScriptWriter-base_declaration.txt +13 -0
  205. package/source/resource/qx/tool/cli/templates/loader/loader-browser.tmpl.js +8 -2
  206. package/source/resource/qx/tool/cli/templates/loader/loader-node.tmpl.js +24 -11
  207. package/source/resource/qx/tool/cli/templates/loader/loader-rhino.tmpl.js +9 -2
  208. package/source/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/scss/_styles.scss +1 -1
  209. package/source/resource/qx/tool/cli/templates/template_vars.js +1 -1
  210. package/source/resource/qx/tool/loadsass.js +13 -0
  211. package/source/resource/qx/tool/schema/Manifest-1-0-0.json +1 -2
  212. package/source/resource/qx/tool/schema/Manifest-2-0-0.json +1 -2
  213. package/source/resource/qx/tool/schema/compile-1-0-0.json +19 -9
  214. package/source/resource/qx/website/scss/ui/_carousel.scss +2 -2
  215. package/lib/resource/qx/tool/website/.gitignore +0 -2
  216. package/source/class/qx/io/request/auth/.gitignore +0 -0
  217. package/source/class/qx/test/bom/client/.gitignore +0 -0
  218. package/source/class/qx/test/ui/control/.gitignore +0 -0
  219. package/source/class/qx/tool/compiler/Version.js +0 -20
  220. package/source/resource/qx/decoration/Modern/treevirtual/.gitignore +0 -0
  221. package/source/resource/qx/mobile/css/.gitignore +0 -3
  222. package/source/resource/qx/tool/website/.gitignore +0 -2
  223. package/source/resource/qx/website/.gitignore +0 -1
  224. package/source/resource/qx/website/scss/.gitignore +0 -1
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -70,7 +70,7 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
70
70
  async make() {
71
71
  var analyser = this.getAnalyser();
72
72
  let target = this.getTarget();
73
-
73
+
74
74
  await this.fireEventAsync("making");
75
75
  this.setSuccess(null);
76
76
  this.setHasWarnings(null);
@@ -82,12 +82,12 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
82
82
  qx.tool.compiler.ClassFile.ENVIRONMENT_CONSTANTS,
83
83
  {
84
84
  "qx.compiler": true,
85
- "qx.compiler.version": qx.tool.compiler.Version.VERSION
85
+ "qx.compiler.version": qx.tool.config.Utils.getCompilerVersion()
86
86
  },
87
87
  this.getEnvironment(),
88
88
  target.getDefaultEnvironment(),
89
89
  target.getEnvironment());
90
-
90
+
91
91
  let preserve = target.getPreserveEnvironment();
92
92
  if (preserve) {
93
93
  let tmp = {};
@@ -101,7 +101,7 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
101
101
  this.getApplications().forEach(app => {
102
102
  appEnvironments[app.toHashCode()] = qx.tool.utils.Values.merge({}, compileEnv, app.getCalculatedEnvironment());
103
103
  });
104
-
104
+
105
105
  // Analyze the list of environment variables, detect which are shared between all apps
106
106
  let allAppEnv = {};
107
107
  this.getApplications().forEach(app => {
@@ -117,7 +117,7 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
117
117
  }
118
118
  });
119
119
  });
120
-
120
+
121
121
  // If an env setting is the same for all apps, move it to the target for code elimination; similarly,
122
122
  // if it varies between apps, then remove it from the target and make each app specify it individually
123
123
  this.getApplications().forEach(app => {
@@ -132,8 +132,8 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
132
132
  }
133
133
  });
134
134
  });
135
-
136
- // Cleanup to remove env that have been moved to the app
135
+
136
+ // Cleanup to remove env that have been moved to the app
137
137
  Object.keys(allAppEnv).forEach(key => {
138
138
  if (!preserve[key] && allAppEnv[key].same) {
139
139
  compileEnv[key] = allAppEnv[key].value;
@@ -150,14 +150,14 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
150
150
  await qx.tool.utils.Utils.makeParentDir(this.getOutputDir());
151
151
  await analyser.resetDatabase();
152
152
  }
153
-
153
+
154
154
  await qx.tool.utils.Utils.promisifyThis(analyser.initialScan, analyser);
155
155
  await analyser.updateEnvironmentData();
156
156
 
157
157
  target.setAnalyser(analyser);
158
158
  this.__applications.forEach(app => app.setAnalyser(analyser));
159
159
  await target.open();
160
-
160
+
161
161
  if (this.isOutputTypescript()) {
162
162
  analyser.getLibraries().forEach(library => {
163
163
  var symbols = library.getKnownSymbols();
@@ -179,7 +179,7 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
179
179
  }
180
180
  });
181
181
  await analyser.analyseClasses();
182
-
182
+
183
183
  await analyser.saveDatabase();
184
184
  await this.fireEventAsync("writingApplications");
185
185
 
@@ -191,11 +191,11 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
191
191
  var appsThisTime = this.__applications.filter(app => {
192
192
  let loadDeps = app.getDependencies();
193
193
  if (!loadDeps || !loadDeps.length) {
194
- return true;
194
+ return true;
195
195
  }
196
196
  return loadDeps.some(name => Boolean(compiledClasses[name]));
197
197
  });
198
-
198
+
199
199
  let allAppInfos = [];
200
200
 
201
201
  let db = analyser.getDatabase();
@@ -244,7 +244,7 @@ qx.Class.define("qx.tool.compiler.makers.AppMaker", {
244
244
  .run()
245
245
  );
246
246
  }
247
-
247
+
248
248
  await analyser.saveDatabase();
249
249
  await this.fireEventAsync("made");
250
250
  this.setSuccess(success);
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2019 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2019 Zenesis Limited, http://www.zenesis.com
@@ -205,7 +205,7 @@ qx.Class.define("qx.tool.compiler.resources.Asset", {
205
205
  });
206
206
  }
207
207
  let rm = target.getAnalyser().getResourceManager();
208
- dependsOn = dependsOn.map(filename => rm.getAsset(path.resolve(filename), true)).filter(tmp => tmp !== this);
208
+ dependsOn = dependsOn.map(filename => rm.getAsset(path.resolve(filename), true, this.isThemeFile())).filter(tmp => tmp !== this);
209
209
  this.setDependsOn(dependsOn);
210
210
  } else {
211
211
  await qx.tool.utils.files.Utils.copyFile(srcFilename, destFilename);
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -48,8 +48,9 @@ qx.Class.define("qx.tool.compiler.resources.ImageLoader", {
48
48
  matches: function(filename, library) {
49
49
  if (filename.endsWith("svg")) {
50
50
  let isWebFont = library.getWebFonts() && library.getWebFonts().find(webFont => webFont.getResources().find(resource => resource == filename));
51
- if (isWebFont)
51
+ if (isWebFont) {
52
52
  return false;
53
+ }
53
54
  }
54
55
 
55
56
  return this.base(arguments, filename, library);
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -149,7 +149,7 @@ qx.Class.define("qx.tool.compiler.resources.Manager", {
149
149
 
150
150
  // Non-wildcards are a direct lookup
151
151
  // check for $ and *. less pos wins
152
- // fix for https://github.com/qooxdoo/qooxdoo-compiler/issues/260
152
+ // fix for https://github.com/qooxdoo/qooxdoo/issues/260
153
153
  var pos1 = uri.indexOf("$"); // Variable references are effectively a wildcard lookup
154
154
  var pos2 = uri.indexOf("*");
155
155
  if (pos1 === -1) {
@@ -347,17 +347,17 @@ qx.Class.define("qx.tool.compiler.resources.Manager", {
347
347
  *
348
348
  * @param srcPath {String} the resource name, with or without a namespace prefix
349
349
  * @param create {Boolean?} if true the asset will be created if it does not exist
350
+ * @param isThemeFile {Boolean?} if true the asset will be expected to be in the theme folder
350
351
  * @return {Asset?} the asset, if found
351
352
  */
352
- getAsset(srcPath, create) {
353
+ getAsset(srcPath, create, isThemeFile) {
353
354
  let library = this.findLibraryForResource(srcPath);
354
355
  if (!library) {
355
356
  qx.tool.compiler.Console.warn("Cannot find library for " + srcPath);
356
357
  return null;
357
358
  }
358
359
 
359
-
360
- let resourceDir = path.join(library.getRootDir(), library.getResourcePath());
360
+ let resourceDir = path.join(library.getRootDir(), isThemeFile ? library.getThemePath() : library.getResourcePath());
361
361
  srcPath = path.relative(resourceDir, path.isAbsolute(srcPath)?srcPath:path.join(resourceDir, srcPath));
362
362
  let asset = this.__assets[library.getNamespace() + ":" + srcPath];
363
363
  if (!asset && create) {
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -18,10 +18,16 @@
18
18
  * Authors:
19
19
  * * Henner Kollmann (henner.kollmann@gmx.de)
20
20
  *
21
+ *
21
22
  * *********************************************************************** */
22
23
 
23
- var path = require("upath");
24
- var sass = require("node-sass");
24
+ const path = require("upath");
25
+ /**
26
+ * @external(qx/tool/loadsass.js)
27
+ * @ignore(loadSass)
28
+ */
29
+ /* global loadSass */
30
+ const sass = loadSass();
25
31
  const fs = qx.tool.utils.Promisify.fs;
26
32
 
27
33
  qx.Class.define("qx.tool.compiler.resources.ScssConverter", {
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2019 Zenesis Limited, http://www.zenesis.com
@@ -19,16 +19,16 @@
19
19
  * * John Spackman (john.spackman@zenesis.com, @johnspackman)
20
20
  *
21
21
  * *********************************************************************** */
22
-
23
- /**
24
- * @ignore(require)
25
- */
26
-
27
22
  /* eslint-disable @qooxdoo/qx/no-illegal-private-usage */
28
23
 
29
24
  const fs = qx.tool.utils.Promisify.fs;
30
25
  const path = require("upath");
31
- const nodeSass = require("node-sass");
26
+ /**
27
+ * @external(qx/tool/loadsass.js)
28
+ * @ignore(loadSass)
29
+ */
30
+ /* global loadSass */
31
+ const sass = loadSass();
32
32
 
33
33
  /**
34
34
  * @ignore(process)
@@ -79,7 +79,7 @@ qx.Class.define("qx.tool.compiler.resources.ScssFile", {
79
79
  let inputFileData = await this.loadSource(this.__filename, this.__library);
80
80
 
81
81
  await new qx.Promise((resolve, reject) => {
82
- nodeSass.render({
82
+ sass.render({
83
83
  // Always have file so that the source map knows the name of the original
84
84
  file: this.__filename,
85
85
 
@@ -215,7 +215,8 @@ qx.Class.define("qx.tool.compiler.resources.ScssFile", {
215
215
  return null;
216
216
  }
217
217
  promises.push(this.loadSource(pathInfo.filename, newLibrary));
218
- return "@import \"" + path.relative(process.cwd(), newLibrary.getResourceFilename(pathInfo.filename)) + "\"";
218
+ let filename = this.isThemeFile() ? newLibrary.getThemeFilename(pathInfo.filename) : newLibrary.getResourceFilename(pathInfo.filename);
219
+ return "@import \"" + path.relative(process.cwd(), filename) + "\"";
219
220
  });
220
221
 
221
222
  contents = contents.replace(/\burl\s*\(\s*([^\)]+)*\)/ig, (match, url) => {
@@ -264,17 +265,17 @@ qx.Class.define("qx.tool.compiler.resources.ScssFile", {
264
265
 
265
266
  if (pathInfo) {
266
267
  if (pathInfo.externalUrl) {
267
- return nodeSass.types.String("url(" + pathInfo.externalUrl + ")");
268
+ return sass.types.String("url(" + pathInfo.externalUrl + ")");
268
269
  }
269
270
 
270
271
  if (pathInfo.namespace) {
271
272
  let targetFile = path.relative(process.cwd(), path.join(this.__target.getOutputDir(), "resource", pathInfo.filename));
272
273
  let relative = path.relative(this.__outputDir, targetFile);
273
- return nodeSass.types.String("url(" + relative + ")");
274
+ return sass.types.String("url(" + relative + ")");
274
275
  }
275
276
  }
276
277
 
277
- return nodeSass.types.String("url(" + url + ")");
278
+ return sass.types.String("url(" + url + ")");
278
279
  }
279
280
  }
280
281
  });
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2019 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -107,6 +107,14 @@ qx.Class.define("qx.tool.compiler.targets.Target", {
107
107
  check: "Boolean"
108
108
  },
109
109
 
110
+ /**
111
+ * Whether to add timestamps to all URLs (cache busting)
112
+ */
113
+ addTimestampsToUrls: {
114
+ init: true,
115
+ check: "Boolean"
116
+ },
117
+
110
118
  /** Locales being generated */
111
119
  locales: {
112
120
  nullable: false,
@@ -322,6 +330,7 @@ qx.Class.define("qx.tool.compiler.targets.Target", {
322
330
  var rm = analyser.getResourceManager();
323
331
 
324
332
  let appMeta = this.__appMeta = new qx.tool.compiler.targets.meta.ApplicationMeta(this, application);
333
+ appMeta.setAddTimestampsToUrls(this.getAddTimestampsToUrls());
325
334
  /*
326
335
  if (!appMeta.getAppLibrary()) {
327
336
  qx.tool.compiler.Console.print("qx.tool.compiler.target.missingAppLibrary", application.getClassName());
@@ -344,7 +353,9 @@ qx.Class.define("qx.tool.compiler.targets.Target", {
344
353
  "qx.application": application.getClassName(),
345
354
  "qx.revision": "",
346
355
  "qx.theme": application.getTheme(),
347
- "qx.version": analyser.getQooxdooVersion()
356
+ "qx.version": analyser.getQooxdooVersion(),
357
+ "qx.compiler.targetType": this.getType(),
358
+ "qx.compiler.outputDir": this.getOutputDir()
348
359
  });
349
360
 
350
361
  let externals = {};
@@ -461,38 +472,59 @@ qx.Class.define("qx.tool.compiler.targets.Target", {
461
472
  });
462
473
 
463
474
  if (analyser.getApplicationTypes().indexOf("browser") > -1) {
464
- requiredLibs.forEach(libnamespace => {
465
- var library = analyser.findLibrary(libnamespace);
475
+ // Get a list of all fonts to load; use the font name as a unique identifier, and
476
+ // prioritise the application's library's definitions - this allows the application
477
+ // the opportunity to override the font definitions. This is important when the
478
+ // library uses the open source/free versions of a font but the application
479
+ // developer has purchased the commercial/full version of the font (eg FontAwesome)
480
+ let appLibrary = appMeta.getAppLibrary();
481
+ let fontsToLoad = { };
482
+ const addLibraryFonts = library => {
466
483
  var fonts = library.getWebFonts();
467
484
  if (!fonts) {
468
485
  return;
469
486
  }
470
-
471
- const loadFont = async (library, font) => {
472
- try {
473
- // check if font is asset somewhere
474
- let res = font.getResources().filter(res => assets[res]);
475
- if (res.length === 0) {
476
- qx.tool.compiler.Console.print("qx.tool.compiler.webfonts.noResources", font.toString(), application.getName(), font.getResources().join(","));
477
- return;
478
- }
479
- font.setResources(res);
480
-
481
- var p = await font.generateForTarget(t);
482
- let resources = await font.generateForApplication(t, application);
483
- for (var key in resources) {
484
- appMeta.addResource(key, resources[key]);
485
- }
486
- var code = font.getBootstrapCode(t, application, fontCntr++ == 0);
487
- if (code) {
488
- appMeta.addPreBootCode(code);
489
- }
490
- } catch (ex) {
491
- qx.tool.compiler.Console.print("qx.tool.compiler.webfonts.error", font.toString(), ex.toString());
487
+ fonts.forEach(font => {
488
+ fontsToLoad[font.getName()] = {
489
+ font, library
490
+ };
491
+ });
492
+ };
493
+ requiredLibs.forEach(libnamespace => {
494
+ var library = analyser.findLibrary(libnamespace);
495
+ if (library != appLibrary) {
496
+ addLibraryFonts(library);
497
+ }
498
+ });
499
+ addLibraryFonts(appLibrary);
500
+
501
+ const loadFont = async (library, font) => {
502
+ try {
503
+ // check if font is asset somewhere
504
+ let res = font.getResources().filter(res => assets[res]);
505
+ if (res.length === 0) {
506
+ qx.tool.compiler.Console.print("qx.tool.compiler.webfonts.noResources", font.toString(), application.getName(), font.getResources().join(","));
507
+ return;
492
508
  }
493
- promises.push(p);
494
- };
495
- fonts.forEach(font => promises.push(loadFont(library, font)));
509
+ font.setResources(res);
510
+
511
+ await font.generateForTarget(t);
512
+ let resources = await font.generateForApplication(t, application);
513
+ for (var key in resources) {
514
+ appMeta.addResource(key, resources[key]);
515
+ }
516
+ var code = font.getBootstrapCode(t, application, fontCntr++ == 0);
517
+ if (code) {
518
+ appMeta.addPreBootCode(code);
519
+ }
520
+ } catch (ex) {
521
+ qx.tool.compiler.Console.print("qx.tool.compiler.webfonts.error", font.toString(), ex.toString());
522
+ }
523
+ };
524
+
525
+ Object.keys(fontsToLoad).forEach(fontName => {
526
+ let { font, library } = fontsToLoad[fontName];
527
+ promises.push(loadFont(library, font));
496
528
  });
497
529
  }
498
530
  await qx.Promise.all(promises);
@@ -779,13 +811,19 @@ qx.Class.define("qx.tool.compiler.targets.Target", {
779
811
 
780
812
  let timeStamp = (new Date()).getTime();
781
813
  let pathToTarget = path.relative(path.join(t.getOutputDir(), t.getProjectDir(application)), t.getOutputDir()) + "/";
814
+ let indexJsTimestamp = "";
815
+ if (this.isAddTimestampsToUrls()) {
816
+ let indexJsFilename = path.join(appMeta.getApplicationRoot(), "index.js");
817
+ indexJsTimestamp = "?" + fs.statSync(indexJsFilename).mtimeMs;
818
+ }
782
819
  let TEMPLATE_VARS = {
783
820
  "resourcePath": pathToTarget + "resource/",
784
821
  "targetPath": pathToTarget,
785
822
  "appPath": "",
786
823
  "preBootJs": "",
787
824
  "appTitle": (application.getTitle()||"Qooxdoo Application"),
788
- "timeStamp": timeStamp
825
+ "timeStamp": timeStamp,
826
+ "indexJsTimestamp": indexJsTimestamp
789
827
  };
790
828
 
791
829
  function replaceVars(code) {
@@ -807,7 +845,7 @@ qx.Class.define("qx.tool.compiler.targets.Target", {
807
845
  " the one below because they will be added automatically)\n" +
808
846
  " -->\n" +
809
847
  "${preBootJs}\n" +
810
- " <script type=\"text/javascript\" src=\"${appPath}index.js\"></script>\n" +
848
+ " <script type=\"text/javascript\" src=\"${appPath}index.js${indexJsTimestamp}\"></script>\n" +
811
849
  "</body>\n" +
812
850
  "</html>\n";
813
851
  /* eslint-enable no-template-curly-in-string */
@@ -831,7 +869,7 @@ qx.Class.define("qx.tool.compiler.targets.Target", {
831
869
  }
832
870
  if (!data.match(/\s*index.js\s*/)) {
833
871
  /* eslint-disable no-template-curly-in-string */
834
- data = data.replace("</body>", "\n <script type=\"text/javascript\" src=\"${appPath}index.js\"></script>\n</body>");
872
+ data = data.replace("</body>", "\n <script type=\"text/javascript\" src=\"${appPath}index.js${indexJsTimestamp}\"></script>\n</body>");
835
873
  /* eslint-enable no-template-curly-in-string */
836
874
  qx.tool.compiler.Console.print("qx.tool.compiler.target.missingBootJs", from);
837
875
  }
@@ -3,7 +3,7 @@
3
3
  * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
4
  * toolchain
5
5
  *
6
- * https://github.com/qooxdoo/qooxdoo-compiler
6
+ * https://github.com/qooxdoo/qooxdoo
7
7
  *
8
8
  * Copyright:
9
9
  * 2011-2017 Zenesis Limited, http://www.zenesis.com
@@ -24,7 +24,6 @@
24
24
  var path = require("path");
25
25
 
26
26
  var fs = require("fs");
27
- var jsonlint = require("jsonlint");
28
27
  const {promisify} = require("util");
29
28
  const readFile = promisify(fs.readFile);
30
29
  /**
@@ -150,7 +149,7 @@ qx.Class.define("qx.tool.compiler.targets.TypeScriptWriter", {
150
149
  }
151
150
  var fileName = path.join(this.__target.getOutputDir(), "transpiled", classname.replace(/\./g, "/") + ".json");
152
151
  return readFile(fileName, "UTF-8")
153
- .then(content => this.__apiCache[classname] = jsonlint.parse(content))
152
+ .then(content => this.__apiCache[classname] = JSON.parse(content))
154
153
  .catch(err => qx.tool.compiler.Console.error("Error parsing " + classname + ": " + err.stack));
155
154
  },
156
155
 
@@ -159,7 +158,7 @@ qx.Class.define("qx.tool.compiler.targets.TypeScriptWriter", {
159
158
  * @async
160
159
  */
161
160
  writeBase: function() {
162
- return readFile(path.join(__dirname, "TypeScriptWriter-base_declaration.txt"), "UTF-8")
161
+ return readFile(path.join(qx.tool.utils.Utils.getTemplateDir(), "TypeScriptWriter-base_declaration.txt"), "UTF-8")
163
162
  .then(content => this.write(content));
164
163
  },
165
164
 
@@ -1,3 +1,25 @@
1
+ /* ************************************************************************
2
+ *
3
+ * qooxdoo-compiler - node.js based replacement for the Qooxdoo python
4
+ * toolchain
5
+ *
6
+ * https://github.com/qooxdoo/qooxdoo-compiler
7
+ *
8
+ * Copyright:
9
+ * 2011-2021 Zenesis Limited, http://www.zenesis.com
10
+ *
11
+ * License:
12
+ * MIT: https://opensource.org/licenses/MIT
13
+ *
14
+ * This software is provided under the same licensing terms as Qooxdoo,
15
+ * please see the LICENSE file in the Qooxdoo project's top-level directory
16
+ * for details.
17
+ *
18
+ * Authors:
19
+ * * John Spackman (john.spackman@zenesis.com, @johnspackman)
20
+ *
21
+ * ************************************************************************/
22
+
1
23
  const fs = qx.tool.utils.Promisify.fs;
2
24
  const sourceMap = require("source-map");
3
25