@breakside/jskit 2021.52.0 → 2022.6.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 (79) hide show
  1. package/Frameworks/DOM.jsframework/Info.json +2 -2
  2. package/Frameworks/DOM.jsframework/io.breakside.JSKit.DOM-bundle.js +2 -2
  3. package/Frameworks/FontKit.jsframework/Info.json +2 -2
  4. package/Frameworks/FontKit.jsframework/io.breakside.JSKit.FontKit-bundle.js +2 -2
  5. package/Frameworks/Foundation.jsframework/Info.json +2 -2
  6. package/Frameworks/Foundation.jsframework/JS/JSColor.js +9 -0
  7. package/Frameworks/Foundation.jsframework/JS/JSColorSpace.js +106 -20
  8. package/Frameworks/Foundation.jsframework/JS/JSMediaType.js +1 -1
  9. package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
  10. package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
  11. package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
  12. package/Info.json +2 -2
  13. package/Node/io.breakside.jskit-bundle.js +2 -2
  14. package/Root/Frameworks/APIKit/APIRequest.js +99 -0
  15. package/Root/Frameworks/APIKit/Info.yaml +1 -1
  16. package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
  17. package/Root/Frameworks/AuthKit/Info.yaml +1 -1
  18. package/Root/Frameworks/CSSOM/Info.yaml +1 -1
  19. package/Root/Frameworks/ChartKit/Info.yaml +1 -1
  20. package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
  21. package/Root/Frameworks/DBKit/DBMongoStore.js +1 -0
  22. package/Root/Frameworks/DBKit/DBRedisStore.js +136 -117
  23. package/Root/Frameworks/DBKit/Info.yaml +1 -1
  24. package/Root/Frameworks/DOM/Info.yaml +1 -1
  25. package/Root/Frameworks/Dispatch/Info.yaml +1 -1
  26. package/Root/Frameworks/FontKit/Info.yaml +1 -1
  27. package/Root/Frameworks/Foundation/Info.yaml +1 -1
  28. package/Root/Frameworks/Foundation/JSColor.js +9 -0
  29. package/Root/Frameworks/Foundation/JSColorSpace.js +106 -20
  30. package/Root/Frameworks/Foundation/JSMediaType.js +1 -1
  31. package/Root/Frameworks/ImageKit/IKColorProfile.js +1091 -0
  32. package/Root/Frameworks/ImageKit/IKColorSpace.js +49 -198
  33. package/Root/Frameworks/ImageKit/IKMatrix.js +124 -0
  34. package/Root/Frameworks/ImageKit/ImageKit.js +2 -0
  35. package/Root/Frameworks/ImageKit/Info.yaml +1 -1
  36. package/Root/Frameworks/MediaKit/Info.yaml +1 -1
  37. package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
  38. package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
  39. package/Root/Frameworks/PDFKit/Info.yaml +1 -1
  40. package/Root/Frameworks/QRKit/Info.yaml +1 -1
  41. package/Root/Frameworks/SearchKit/Info.yaml +1 -1
  42. package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
  43. package/Root/Frameworks/ServerKit/Info.yaml +1 -1
  44. package/Root/Frameworks/ServerKit/SKHTTPRequest.js +44 -0
  45. package/Root/Frameworks/ServerKit/SKJobQueue.js +1 -1
  46. package/Root/Frameworks/ServerKit/SKRedisJobQueue.js +7 -3
  47. package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
  48. package/Root/Frameworks/TestKit/Info.yaml +1 -1
  49. package/Root/Frameworks/TestKit/TKMock.js +1 -1
  50. package/Root/Frameworks/UIKit/Info.yaml +1 -1
  51. package/Root/Frameworks/UIKit/UIBrowserViewController.js +2 -6
  52. package/Root/Frameworks/UIKit/UICollectionReusableView.js +91 -0
  53. package/Root/Frameworks/UIKit/UICollectionView.js +1254 -0
  54. package/Root/Frameworks/UIKit/UICollectionViewCell.js +121 -0
  55. package/Root/Frameworks/UIKit/UICollectionViewGridLayout.js +425 -0
  56. package/Root/Frameworks/UIKit/UICollectionViewLayout.js +82 -0
  57. package/Root/Frameworks/UIKit/UIColorWell.js +12 -1
  58. package/Root/Frameworks/UIKit/UIDisplayServer.js +5 -1
  59. package/Root/Frameworks/UIKit/UIKit.js +7 -0
  60. package/Root/Frameworks/UIKit/UILayer.js +3 -0
  61. package/Root/Frameworks/UIKit/UIListView.js +8 -9
  62. package/Root/Frameworks/UIKit/UIMenu.js +1 -1
  63. package/Root/Frameworks/UIKit/UIMenuView.js +5 -1
  64. package/Root/Frameworks/UIKit/UINavigationBar.js +9 -3
  65. package/Root/Frameworks/UIKit/UINavigationController.js +228 -112
  66. package/Root/Frameworks/UIKit/UINavigationItem.js +4 -0
  67. package/Root/Frameworks/UIKit/UIPopupButton.js +39 -3
  68. package/Root/Frameworks/UIKit/UIScrollView.js +2 -0
  69. package/Root/Frameworks/UIKit/UISplitViewController.js +215 -73
  70. package/Root/Frameworks/UIKit/UITabViewController.js +4 -10
  71. package/Root/Frameworks/UIKit/UITextField.js +3 -0
  72. package/Root/Frameworks/UIKit/UIView.js +3 -0
  73. package/Root/Frameworks/UIKit/UIViewController.js +141 -50
  74. package/Root/Frameworks/UIKit/UIWindow.js +4 -15
  75. package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
  76. package/Root/Frameworks/UIKitTesting/UIMockApplication.js +6 -0
  77. package/Root/Templates/http/${PROJECT_NAME}/Dockerfile +1 -1
  78. package/Root/Templates/node/${PROJECT_NAME}/Dockerfile +4 -2
  79. package/package.json +1 -1
@@ -16,7 +16,7 @@
16
16
  // #import Foundation
17
17
  // #import "UIResponder.js"
18
18
  // #import "UITabView.js"
19
- /* global UINavigationItem, UINavigationController */
19
+ /* global UINavigationItem, UINavigationController, UIApplication */
20
20
  'use strict';
21
21
 
22
22
  JSClass("UIViewController", UIResponder, {
@@ -98,33 +98,9 @@ JSClass("UIViewController", UIResponder, {
98
98
  // -------------------------------------------------------------------------
99
99
  // MARK: - View Lifecycle
100
100
 
101
- _needsDidAppear: false,
102
- _needsDidDisappear: false,
103
101
  isViewVisible: JSReadOnlyProperty("_isViewVisible", false),
104
102
 
105
- enqueueDidAppear: function(){
106
- if (!this._needsDidAppear){
107
- this._needsDidAppear = true;
108
- this.view.layer._displayServer.schedule(function(){
109
- if (this._needsDidAppear){
110
- this._needsDidAppear = false;
111
- this.viewDidAppear(false);
112
- }
113
- }, this);
114
- }
115
- },
116
-
117
- enqueueDidDisappear: function(){
118
- if (!this._needsDidDisappear){
119
- this._needsDidDisappear = true;
120
- this.view.layer._displayServer.schedule(function(){
121
- if (this._needsDidDisappear){
122
- this._needsDidDisappear = false;
123
- this.viewDidDisappear(false);
124
- }
125
- }, this);
126
- }
127
- },
103
+ lifecycleState: JSReadOnlyProperty("_lifecycleState", 0),
128
104
 
129
105
  viewDidLoad: function(){
130
106
  },
@@ -132,15 +108,18 @@ JSClass("UIViewController", UIResponder, {
132
108
  viewDidUnload: function(){
133
109
  },
134
110
 
135
- viewWillAppear: function(){
111
+ viewWillAppear: function(animated){
112
+ this._lifecycleState = UIViewController.LifecycleState.appearing;
136
113
  this._loadViewIfNeeded();
137
114
  },
138
115
 
139
- viewDidAppear: function(){
116
+ viewDidAppear: function(animated){
117
+ this._lifecycleState = UIViewController.LifecycleState.appeared;
140
118
  this._isViewVisible = true;
141
119
  },
142
120
 
143
- viewWillDisappear: function(){
121
+ viewWillDisappear: function(animated){
122
+ this._lifecycleState = UIViewController.LifecycleState.disappearing;
144
123
  if (this.isViewLoaded){
145
124
  var window = this.view.window;
146
125
  if (window !== null){
@@ -158,10 +137,106 @@ JSClass("UIViewController", UIResponder, {
158
137
  }
159
138
  },
160
139
 
161
- viewDidDisappear: function(){
140
+ viewDidDisappear: function(animated){
141
+ this._lifecycleState = UIViewController.LifecycleState.disappeared;
162
142
  this._isViewVisible = false;
163
143
  },
164
144
 
145
+ // -------------------------------------------------------------------------
146
+ // MARK: - Lifecycle Control Methods
147
+
148
+ beginAppearance: function(animated){
149
+ this.beginAppearanceTransition(true, animated);
150
+ },
151
+
152
+ endAppearance: function(){
153
+ this.endAppearanceTransition();
154
+ },
155
+
156
+ beginAppearanceWithAnimator: function(animator){
157
+ this.beginAppearance(true);
158
+ animator.addCompletion(function(){
159
+ this.endAppearance();
160
+ }, this);
161
+ },
162
+
163
+ scheduleAppearance: function(){
164
+ this.beginAppearance(false);
165
+ this._scheduleAppearanceTransition();
166
+ },
167
+
168
+ beginDisappearance: function(animated){
169
+ this.beginAppearanceTransition(false, animated);
170
+ },
171
+
172
+ endDisappearance: function(){
173
+ this.endAppearanceTransition();
174
+ },
175
+
176
+ beginDisappearanceWithAnimator: function(animator){
177
+ this.beginDisappearance(true);
178
+ animator.addCompletion(function(){
179
+ this.endDisappearance();
180
+ }, this);
181
+ },
182
+
183
+ scheduleDisappearance: function(){
184
+ this.beginDisappearance(false);
185
+ this._scheduleAppearanceTransition();
186
+ },
187
+
188
+ beginAppearanceTransition: function(isAppearing, animated){
189
+ this._appearanceTransitionAnimated = animated;
190
+ if (isAppearing){
191
+ if (this._lifecycleState === UIViewController.LifecycleState.disappeared || this._lifecycleState === UIViewController.LifecycleState.disappearing){
192
+ this.viewWillAppear(animated);
193
+ }
194
+ }else{
195
+ if (this._lifecycleState === UIViewController.LifecycleState.appeared || this._lifecycleState === UIViewController.LifecycleState.appearing){
196
+ this.viewWillDisappear(animated);
197
+ }
198
+ }
199
+ },
200
+
201
+ endAppearanceTransition: function(){
202
+ if (this._appearanceTransitionAnimated){
203
+ this._endAppearanceTransition(true);
204
+ }else{
205
+ this._scheduleAppearanceTransition();
206
+ }
207
+ },
208
+
209
+ _endAppearanceTransition: function(){
210
+ this._appearanceTransitionScheduled = false;
211
+ if (this._lifecycleState === UIViewController.LifecycleState.appearing){
212
+ this.viewDidAppear(this._appearanceTransitionAnimated);
213
+ }else if (this._lifecycleState === UIViewController.LifecycleState.disappearing){
214
+ this.viewDidDisappear(this._appearanceTransitionAnimated);
215
+ }
216
+ },
217
+
218
+ _appearanceTransitionAnimated: false,
219
+ _appearanceTransitionScheduled: false,
220
+
221
+ _scheduleAppearanceTransition: function(){
222
+ if (this._appearanceTransitionScheduled){
223
+ return;
224
+ }
225
+ this._appearanceTransitionScheduled = true;
226
+ this.schedule(this._endAppearanceTransition);
227
+ },
228
+
229
+ // -------------------------------------------------------------------------
230
+ // MARK: - Display Loop Syncrhonization
231
+
232
+ schedule: function(callback){
233
+ var displayServer = UIApplication.shared.windowServer.displayServer;
234
+ displayServer.schedule(callback, this);
235
+ },
236
+
237
+ // -------------------------------------------------------------------------
238
+ // MARK: - Layout
239
+
165
240
  viewDidLayoutSubviews: function(){
166
241
  },
167
242
 
@@ -169,18 +244,32 @@ JSClass("UIViewController", UIResponder, {
169
244
  this.view.sizeToFitSize(size);
170
245
  },
171
246
 
247
+ contentSizeThatFitsSize: function(maxSize){
248
+ this.view.sizeToFitSize(maxSize);
249
+ return JSSize(this.view.bounds.size);
250
+ },
251
+
172
252
  // -------------------------------------------------------------------------
173
253
  // MARK: - Child View Controllers
174
254
 
175
255
  parentViewController: null,
176
256
 
177
257
  addChildViewController: function(viewController){
258
+ if (viewController.parentViewController === this){
259
+ return;
260
+ }
261
+ if (viewController.parentViewController !== null){
262
+ viewController.removeFromParentViewController();
263
+ }
178
264
  viewController.willMoveToParentViewController(this);
179
265
  viewController.parentViewController = this;
180
266
  viewController.didMoveToParentViewController(this);
181
267
  },
182
268
 
183
269
  removeFromParentViewController: function(){
270
+ if (this.parentViewController === null){
271
+ return;
272
+ }
184
273
  this.willMoveToParentViewController(null);
185
274
  this.parentViewController = null;
186
275
  this.didMoveToParentViewController(null);
@@ -197,29 +286,24 @@ JSClass("UIViewController", UIResponder, {
197
286
  return;
198
287
  }
199
288
  if (this.isViewLoaded && this.isViewVisible){
200
- var animated = animator !== undefined && animator !== null;
201
- if (previousChildViewController !== null){
202
- previousChildViewController.viewWillDisappear(animated);
203
- previousChildViewController.removeFromParentViewController();
204
- }
205
- if (childViewController !== null){
206
- // trigger childViewController.viewDidLoad by accessing .view
207
- var view = childViewController.view;
208
- this.addChildViewController(childViewController);
209
- childViewController.viewWillAppear(animated);
210
- }
211
- var completion = function(){
289
+ if (animator !== undefined && animator !== null){
290
+ if (previousChildViewController !== null){
291
+ previousChildViewController.beginDisappearanceWithAnimator(animator);
292
+ previousChildViewController.removeFromParentViewController();
293
+ }
294
+ if (childViewController !== null){
295
+ this.addChildViewController(childViewController);
296
+ childViewController.beginAppearanceWithAnimator(animator);
297
+ }
298
+ }else{
212
299
  if (previousChildViewController !== null){
213
- previousChildViewController.viewDidDisappear(animated);
300
+ previousChildViewController.scheduleDisappearance();
301
+ previousChildViewController.removeFromParentViewController();
214
302
  }
215
303
  if (childViewController !== null){
216
- childViewController.viewDidAppear(animated);
304
+ this.addChildViewController(childViewController);
305
+ childViewController.scheduleAppearance();
217
306
  }
218
- };
219
- if (animated){
220
- animator.addCompletion(completion, this);
221
- }else{
222
- this.view.layer._displayServer.schedule(completion, this);
223
307
  }
224
308
  }else{
225
309
  if (previousChildViewController !== null){
@@ -327,4 +411,11 @@ JSClass("UIViewController", UIResponder, {
327
411
  }
328
412
 
329
413
 
330
- });
414
+ });
415
+
416
+ UIViewController.LifecycleState = {
417
+ disappeared: 0,
418
+ appearing: 1,
419
+ appeared: 2,
420
+ disappearing: 3
421
+ };
@@ -214,27 +214,16 @@ JSClass('UIWindow', UIView, {
214
214
 
215
215
  setContentViewController: function(contentViewController){
216
216
  var previousViewController = this._contentViewController;
217
- var contentView = null;
218
- // load the view before calling viewWillAppear
219
- if (contentViewController){
220
- contentView = contentViewController.view;
221
- }
222
217
  if (this._isVisible){
223
218
  if (previousViewController !== null){
224
- previousViewController.viewWillDisappear(false);
219
+ previousViewController.scheduleDisappearance();
225
220
  }
226
221
  if (contentViewController !== null){
227
- contentViewController.viewWillAppear(false);
222
+ contentViewController.scheduleAppearance();
228
223
  }
229
224
  }
230
- this.contentView = contentView;
231
- if (this._isVisible){
232
- if (previousViewController !== null){
233
- previousViewController.viewDidDisappear(false);
234
- }
235
- if (contentViewController !== null){
236
- contentViewController.viewDidAppear(false);
237
- }
225
+ if (contentViewController !== null){
226
+ this.contentView = contentViewController.view;
238
227
  }
239
228
  this._contentViewController = contentViewController;
240
229
  },
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.UIKitTesting
3
- JSBundleVersion: 2021.52.0
3
+ JSBundleVersion: 2022.6.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -59,6 +59,12 @@ JSClass("UIMockApplication", UIApplication, {
59
59
  UIMockApplication.$super.deinit.call(this);
60
60
  },
61
61
 
62
+ setScreenSize: function(size){
63
+ var oldFrame = this.windowServer.screen.frame;
64
+ this.windowServer.screen.frame = JSRect(JSPoint.Zero, size);
65
+ this.windowServer.screenDidChangeFrame(oldFrame);
66
+ },
67
+
62
68
  displayTime: 0,
63
69
 
64
70
  updateDisplay: function(dt){
@@ -2,7 +2,7 @@ FROM node:lts-alpine
2
2
 
3
3
  COPY ${PROJECT_NAME_FILE_SAFE} /${PROJECT_NAME_FILE_SAFE}
4
4
 
5
- RUN npm install /${PROJECT_NAME_FILE_SAFE}
5
+ RUN cd /${PROJECT_NAME_FILE_SAFE} && npm install
6
6
 
7
7
  EXPOSE 80
8
8
 
@@ -1,5 +1,7 @@
1
1
  FROM node:lts-alpine
2
2
 
3
- COPY ${PROJECT_NAME_FILE_SAFE} /jskitapp
3
+ COPY ${PROJECT_NAME_FILE_SAFE} /${PROJECT_NAME_FILE_SAFE}
4
4
 
5
- CMD /jskitapp/Node/${PROJECT_NAME_FILE_SAFE}
5
+ RUN cd /${PROJECT_NAME_FILE_SAFE} && npm install
6
+
7
+ ENTRYPOINT ["/${PROJECT_NAME_FILE_SAFE}/Node/${PROJECT_NAME_FILE_SAFE}"]
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "node": ">=10.10.0"
10
10
  },
11
11
  "name": "@breakside/jskit",
12
- "version": "2021.52.0",
12
+ "version": "2022.6.0",
13
13
  "license": "SEE LICENSE IN LICENSE.txt",
14
14
  "files": [
15
15
  "*"