@breakside/jskit 2022.26.1 → 2022.28.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 (43) 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/JSFileManager+HTML.js +29 -19
  7. package/Frameworks/Foundation.jsframework/JS/JSUserDefaults.js +2 -2
  8. package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
  9. package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
  10. package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
  11. package/Info.json +2 -2
  12. package/Node/io.breakside.jskit-bundle.js +2 -2
  13. package/Root/Frameworks/APIKit/Info.yaml +1 -1
  14. package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
  15. package/Root/Frameworks/AuthKit/Info.yaml +1 -1
  16. package/Root/Frameworks/CSSOM/Info.yaml +1 -1
  17. package/Root/Frameworks/ChartKit/Info.yaml +1 -1
  18. package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
  19. package/Root/Frameworks/DBKit/Info.yaml +1 -1
  20. package/Root/Frameworks/DOM/Info.yaml +1 -1
  21. package/Root/Frameworks/Dispatch/Info.yaml +1 -1
  22. package/Root/Frameworks/FontKit/Info.yaml +1 -1
  23. package/Root/Frameworks/Foundation/Info.yaml +1 -1
  24. package/Root/Frameworks/Foundation/JSFileManager+HTML.js +29 -19
  25. package/Root/Frameworks/Foundation/JSUserDefaults.js +2 -2
  26. package/Root/Frameworks/ImageKit/Info.yaml +1 -1
  27. package/Root/Frameworks/MediaKit/Info.yaml +1 -1
  28. package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
  29. package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
  30. package/Root/Frameworks/PDFKit/Info.yaml +1 -1
  31. package/Root/Frameworks/QRKit/Info.yaml +1 -1
  32. package/Root/Frameworks/SearchKit/Info.yaml +1 -1
  33. package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
  34. package/Root/Frameworks/ServerKit/Info.yaml +1 -1
  35. package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
  36. package/Root/Frameworks/TestKit/Info.yaml +1 -1
  37. package/Root/Frameworks/UIKit/Info.yaml +1 -1
  38. package/Root/Frameworks/UIKit/UIDisplayServer.js +51 -10
  39. package/Root/Frameworks/UIKit/UILayer.js +3 -0
  40. package/Root/Frameworks/UIKit/UINavigationBar.js +45 -22
  41. package/Root/Frameworks/UIKit/UIView.js +11 -0
  42. package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
  43. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
4
- "JSBundleVersion": "2022.26.1",
4
+ "JSBundleVersion": "2022.28.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "DOM+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
12
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
13
13
  }
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
6
- "JSBundleVersion": "2022.26.1",
6
+ "JSBundleVersion": "2022.28.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
11
11
  "node": "DOM+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
14
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
15
15
  },
16
16
  "Resources": [],
17
17
  "ResourceLookup": {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.FontKit",
4
- "JSBundleVersion": "2022.26.1",
4
+ "JSBundleVersion": "2022.28.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
8
8
  "html": "FontKit+HTML.js"
9
9
  },
10
10
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
11
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
11
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
12
12
  }
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.JSKit.FontKit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.FontKit",
6
- "JSBundleVersion": "2022.26.1",
6
+ "JSBundleVersion": "2022.28.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
10
10
  "html": "FontKit+HTML.js"
11
11
  },
12
12
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
13
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
13
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
14
14
  },
15
15
  "Resources": [],
16
16
  "ResourceLookup": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.Foundation",
4
- "JSBundleVersion": "2022.26.1",
4
+ "JSBundleVersion": "2022.28.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "Foundation+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
12
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
13
13
  }
@@ -551,16 +551,22 @@ JSClass("JSHTMLFileManager", JSFileManager, {
551
551
 
552
552
  _copyDirectoryInTransactionAtURL: function(transaction, url, toURL, toParent, metadata){
553
553
  this._copyMetadataInTransactionAtURL(transaction, url, toURL, toParent, metadata);
554
- var index = transaction.metadata.index(JSFileManager.Indexes.metadataPath);
555
- var childRequest = index.openCursor({parent: url.path});
556
- var children = [];
557
- childRequest.onsuccess = function JSFileManager_copyDirectory_onsucess(e){
558
- var cursor = e.target.result;
559
- if (cursor){
560
- var child = cursor.value;
561
- var childURL = url.appendingPathComponent(child.name);
562
- var childToURL = toURL.appendingPathComponent(child.name);
563
- this._copyItemInTransactionAtURL(transaction, childURL, childToURL, toURL, child);
554
+ var index = transaction.metadata.index(JSFileManager.Indexes.metadataParent);
555
+ var lookup = url.path;
556
+ var request = index.getAll(lookup);
557
+ var manager = this;
558
+ request.onsuccess = function JSFileManager_removeDirectory_onsuccess(e){
559
+ var results = e.target.result;
560
+ if (results){
561
+ var child;
562
+ var childURL;
563
+ var childToURL;
564
+ for (var i = 0, l = results.length; i < l; ++i){
565
+ child = results[i];
566
+ childURL = url.appendingPathComponent(child.name, child.itemType == JSFileManager.ItemType.directory);
567
+ childToURL = toURL.appendingPathComponent(child.name, child.itemType == JSFileManager.ItemType.directory);
568
+ manager._copyItemInTransactionAtURL(transaction, childURL, childToURL, toURL, child);
569
+ }
564
570
  }
565
571
  };
566
572
  },
@@ -639,16 +645,20 @@ JSClass("JSHTMLFileManager", JSFileManager, {
639
645
 
640
646
  _removeDirectoryInTransactionAtURL: function(transaction, url, parent, metadata){
641
647
  this._removeMetadataInTransactionAtURL(transaction, url, parent, metadata);
642
- var index = transaction.metadata.index(JSFileManager.Indexes.metadataPath);
643
- var childRequest = index.openCursor([url.path]);
644
- var children = [];
648
+ var index = transaction.metadata.index(JSFileManager.Indexes.metadataParent);
649
+ var lookup = url.path;
650
+ var request = index.getAll(lookup);
645
651
  var manager = this;
646
- childRequest.onsuccess = function JSFileManager_removeDirectory_onsucess(e){
647
- var cursor = e.target.result;
648
- if (cursor){
649
- var child = cursor.value;
650
- var childURL = url.appendingPathComponent(child.name);
651
- manager._removeItemInTransactionAtURL(transaction, childURL, url, child);
652
+ request.onsuccess = function JSFileManager_removeDirectory_onsuccess(e){
653
+ var results = e.target.result;
654
+ if (results){
655
+ var child;
656
+ var childURL;
657
+ for (var i = 0, l = results.length; i < l; ++i){
658
+ child = results[i];
659
+ childURL = url.appendingPathComponent(child.name, child.itemType == JSFileManager.ItemType.directory);
660
+ manager._removeItemInTransactionAtURL(transaction, childURL, url, child);
661
+ }
652
662
  }
653
663
  };
654
664
  },
@@ -120,7 +120,9 @@ JSClass("JSUserDefaults", JSObject, {
120
120
  if (this._values === null){
121
121
  throw new Error("JSUserDefaults is closed, cannot set value. Be sure to call open() first.");
122
122
  }
123
+ this.willChangeValueForKey(key);
123
124
  this._values[key] = value;
125
+ this.didChangeValueForKey(key);
124
126
  this._persistAfterDelay();
125
127
  this._definePropertyForKey(key);
126
128
  },
@@ -149,9 +151,7 @@ JSClass("JSUserDefaults", JSObject, {
149
151
  return this.valueForKey(key);
150
152
  },
151
153
  set: function JSUserDefaults_setValue(value){
152
- this.willChangeValueForKey(key);
153
154
  this.setValueForKey(value, key);
154
- this.didChangeValueForKey(key);
155
155
  }
156
156
  });
157
157
  }
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.Foundation",
6
- "JSBundleVersion": "2022.26.1",
6
+ "JSBundleVersion": "2022.28.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
11
11
  "node": "Foundation+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
14
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
15
15
  },
16
16
  "Resources": [
17
17
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
4
- "JSBundleVersion": "2022.26.1",
4
+ "JSBundleVersion": "2022.28.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "SecurityKit+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
12
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
13
13
  }
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
6
- "JSBundleVersion": "2022.26.1",
6
+ "JSBundleVersion": "2022.28.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
11
11
  "node": "SecurityKit+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
14
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
15
15
  },
16
16
  "Resources": [],
17
17
  "ResourceLookup": {
package/Info.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "JSBundleType": "node",
3
3
  "JSBundleIdentifier": "io.breakside.jskit",
4
- "JSBundleVersion": "2022.26.1",
4
+ "JSBundleVersion": "2022.28.0",
5
5
  "JSExecutableName": "jskit",
6
6
  "NPMOrganization": "breakside",
7
7
  "JSResources": [
8
8
  "Tests/HTMLTestRunner.js",
9
9
  "Tests/NodeTestRunner.js"
10
10
  ],
11
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
11
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
12
12
  }
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.jskit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "node",
5
5
  "JSBundleIdentifier": "io.breakside.jskit",
6
- "JSBundleVersion": "2022.26.1",
6
+ "JSBundleVersion": "2022.28.0",
7
7
  "JSExecutableName": "jskit",
8
8
  "NPMOrganization": "breakside",
9
9
  "JSResources": [
10
10
  "Tests/HTMLTestRunner.js",
11
11
  "Tests/NodeTestRunner.js"
12
12
  ],
13
- "GitRevision": "9d04712d10f1be8390f8c389202f712f7376865f"
13
+ "GitRevision": "c07c0e14f0ec075ac6d44fe7fa1e9e8dbf26e0cd"
14
14
  },
15
15
  "Resources": [
16
16
  {
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSIncludeDirectories:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKitTesting
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.AuthKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.CSSOM
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ChartKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2021 Breakside Inc.
6
6
  # JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ConferenceKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.DBKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.DOM
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.Dispatch
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSCopyright: Copyright © 2020 Breakside Inc.
5
5
  JSBundleEnvironments:
6
6
  html: Dispatch+HTML.js
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.FontKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.Foundation
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -551,16 +551,22 @@ JSClass("JSHTMLFileManager", JSFileManager, {
551
551
 
552
552
  _copyDirectoryInTransactionAtURL: function(transaction, url, toURL, toParent, metadata){
553
553
  this._copyMetadataInTransactionAtURL(transaction, url, toURL, toParent, metadata);
554
- var index = transaction.metadata.index(JSFileManager.Indexes.metadataPath);
555
- var childRequest = index.openCursor({parent: url.path});
556
- var children = [];
557
- childRequest.onsuccess = function JSFileManager_copyDirectory_onsucess(e){
558
- var cursor = e.target.result;
559
- if (cursor){
560
- var child = cursor.value;
561
- var childURL = url.appendingPathComponent(child.name);
562
- var childToURL = toURL.appendingPathComponent(child.name);
563
- this._copyItemInTransactionAtURL(transaction, childURL, childToURL, toURL, child);
554
+ var index = transaction.metadata.index(JSFileManager.Indexes.metadataParent);
555
+ var lookup = url.path;
556
+ var request = index.getAll(lookup);
557
+ var manager = this;
558
+ request.onsuccess = function JSFileManager_removeDirectory_onsuccess(e){
559
+ var results = e.target.result;
560
+ if (results){
561
+ var child;
562
+ var childURL;
563
+ var childToURL;
564
+ for (var i = 0, l = results.length; i < l; ++i){
565
+ child = results[i];
566
+ childURL = url.appendingPathComponent(child.name, child.itemType == JSFileManager.ItemType.directory);
567
+ childToURL = toURL.appendingPathComponent(child.name, child.itemType == JSFileManager.ItemType.directory);
568
+ manager._copyItemInTransactionAtURL(transaction, childURL, childToURL, toURL, child);
569
+ }
564
570
  }
565
571
  };
566
572
  },
@@ -639,16 +645,20 @@ JSClass("JSHTMLFileManager", JSFileManager, {
639
645
 
640
646
  _removeDirectoryInTransactionAtURL: function(transaction, url, parent, metadata){
641
647
  this._removeMetadataInTransactionAtURL(transaction, url, parent, metadata);
642
- var index = transaction.metadata.index(JSFileManager.Indexes.metadataPath);
643
- var childRequest = index.openCursor([url.path]);
644
- var children = [];
648
+ var index = transaction.metadata.index(JSFileManager.Indexes.metadataParent);
649
+ var lookup = url.path;
650
+ var request = index.getAll(lookup);
645
651
  var manager = this;
646
- childRequest.onsuccess = function JSFileManager_removeDirectory_onsucess(e){
647
- var cursor = e.target.result;
648
- if (cursor){
649
- var child = cursor.value;
650
- var childURL = url.appendingPathComponent(child.name);
651
- manager._removeItemInTransactionAtURL(transaction, childURL, url, child);
652
+ request.onsuccess = function JSFileManager_removeDirectory_onsuccess(e){
653
+ var results = e.target.result;
654
+ if (results){
655
+ var child;
656
+ var childURL;
657
+ for (var i = 0, l = results.length; i < l; ++i){
658
+ child = results[i];
659
+ childURL = url.appendingPathComponent(child.name, child.itemType == JSFileManager.ItemType.directory);
660
+ manager._removeItemInTransactionAtURL(transaction, childURL, url, child);
661
+ }
652
662
  }
653
663
  };
654
664
  },
@@ -120,7 +120,9 @@ JSClass("JSUserDefaults", JSObject, {
120
120
  if (this._values === null){
121
121
  throw new Error("JSUserDefaults is closed, cannot set value. Be sure to call open() first.");
122
122
  }
123
+ this.willChangeValueForKey(key);
123
124
  this._values[key] = value;
125
+ this.didChangeValueForKey(key);
124
126
  this._persistAfterDelay();
125
127
  this._definePropertyForKey(key);
126
128
  },
@@ -149,9 +151,7 @@ JSClass("JSUserDefaults", JSObject, {
149
151
  return this.valueForKey(key);
150
152
  },
151
153
  set: function JSUserDefaults_setValue(value){
152
- this.willChangeValueForKey(key);
153
154
  this.setValueForKey(value, key);
154
- this.didChangeValueForKey(key);
155
155
  }
156
156
  });
157
157
  }
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ImageKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.MediaKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.MediaKitUI
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.NotificationKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2021 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.PDFKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.QRKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.SearchKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.SecurityKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ServerKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ServerKitTesting
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.TestKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.UIKit
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -39,6 +39,7 @@ JSClass("UIDisplayServer", JSObject, {
39
39
  this.layerAnimationQueue = {};
40
40
  this._scheduleQueue = [];
41
41
  this._scheduled = [];
42
+ this._completedAnimations = [];
42
43
  },
43
44
 
44
45
  // -------------------------------------------------------------------------
@@ -100,7 +101,7 @@ JSClass("UIDisplayServer", JSObject, {
100
101
  this._scheduled = this._scheduleQueue;
101
102
  this._scheduleQueue = [];
102
103
  this._isUpdating = true;
103
- var completedAnimations = this._updateAnimations(t);
104
+ this._updateAnimations(t);
104
105
  this._flushLayerLayoutQueue();
105
106
  this._flushLayerDisplayQueue();
106
107
  this._flushLayerRepositionQueue();
@@ -110,9 +111,7 @@ JSClass("UIDisplayServer", JSObject, {
110
111
  this._isUpdating = false;
111
112
 
112
113
  // Call any animation callbacks
113
- for (var i = 0, l = completedAnimations.length; i < l; ++i){
114
- completedAnimations[i].completionFunction(completedAnimations[i]);
115
- }
114
+ this._flushCompletedAnimations();
116
115
 
117
116
  // Call any window insert/remove callbacks
118
117
  var window;
@@ -228,8 +227,22 @@ JSClass("UIDisplayServer", JSObject, {
228
227
  if (this.layerDisplayQueue.remove(layer)){
229
228
  layer._needsDisplay = true;
230
229
  }
230
+ var key;
231
+ var animation;
232
+ var completedAnimationKeys;
233
+ var i, l;
231
234
  this.layerRepositionQueue.remove(layer);
232
235
  if (layer.objectID in this.layerAnimationQueue){
236
+ completedAnimationKeys = [];
237
+ for (key in layer.animationsByKey){
238
+ animation = layer.animationsByKey[key];
239
+ this.completeAnimation(animation);
240
+ completedAnimationKeys.push(key);
241
+ }
242
+ for (i = 0, l = completedAnimationKeys.length; i < l; ++i){
243
+ key = completedAnimationKeys[i];
244
+ layer.removeAnimationForKey(key);
245
+ }
233
246
  delete this.layerAnimationQueue[layer.objectID];
234
247
  --this._animationCount;
235
248
  }
@@ -246,24 +259,53 @@ JSClass("UIDisplayServer", JSObject, {
246
259
  this.setUpdateNeeded();
247
260
  },
248
261
 
262
+ _completedAnimations: null,
263
+
264
+ completeAnimation: function(animation){
265
+ this._completedAnimations.push(animation);
266
+ },
267
+
268
+ _flushCompletedAnimations: function(){
269
+ var i, l;
270
+ var animation;
271
+ for (i = 0, l = this._completedAnimations.length; i < l; ++i){
272
+ animation = this._completedAnimations[i];
273
+ if (animation.completionFunction){
274
+ animation.completionFunction(animation);
275
+ }
276
+ }
277
+ this._completedAnimations = [];
278
+ },
279
+
249
280
  _updateAnimations: function(t){
250
281
  t /= this._animationScale;
251
282
  var animation;
252
- var completedAnimations = [];
253
283
  var id, key;
254
284
  var layer;
285
+ var completedAnimationKeys;
286
+ var i, l;
287
+ var parts;
255
288
  for (id in this.layerAnimationQueue){
256
289
  layer = this.layerAnimationQueue[id];
290
+ completedAnimationKeys = [];
257
291
  for (key in layer.animationsByKey){
258
292
  animation = layer.animationsByKey[key];
259
293
  animation.updateForTime(t);
260
294
  if (this.reducedMotionEnabled || animation.isComplete){
261
- layer.removeAnimationForKey(key);
262
- if (animation.completionFunction){
263
- completedAnimations.push(animation);
295
+ completedAnimationKeys.push(key);
296
+ }else{
297
+ parts = key.split('.');
298
+ if (parts[0] in layer.presentation){
299
+ this.layerDidChangeProperty(layer, key);
264
300
  }
265
301
  }
266
- var parts = key.split('.');
302
+ }
303
+ for (i = 0, l = completedAnimationKeys.length; i < l; ++i){
304
+ key = completedAnimationKeys[i];
305
+ animation = layer.animationsByKey[key];
306
+ layer.removeAnimationForKey(key);
307
+ this.completeAnimation(animation);
308
+ parts = key.split('.');
267
309
  if (parts[0] in layer.presentation){
268
310
  this.layerDidChangeProperty(layer, key);
269
311
  }
@@ -273,7 +315,6 @@ JSClass("UIDisplayServer", JSObject, {
273
315
  --this._animationCount;
274
316
  }
275
317
  }
276
- return completedAnimations;
277
318
  },
278
319
 
279
320
  // -------------------------------------------------------------------------
@@ -608,6 +608,9 @@ JSClass("UILayer", JSObject, {
608
608
  },
609
609
 
610
610
  removeAnimationForKey: function(key){
611
+ if (!(key in this.animationsByKey)){
612
+ return;
613
+ }
611
614
  --this.animationCount;
612
615
  if (this.animationCount === 0){
613
616
  // If we're all done with animations, reset our presentation to be identical to our model
@@ -428,6 +428,8 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
428
428
  navigationBar.maskedBorders = UIView.Sides.maxY;
429
429
 
430
430
  var props = navigationBar.stylerProperties;
431
+ props.isAnimating = false;
432
+ props.needsUpdate = false;
431
433
  props.titleLabel = this.createTitleLabel();
432
434
  props.customView = null;
433
435
  navigationBar.addSubview(props.titleLabel);
@@ -468,6 +470,8 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
468
470
  var removingRightBarItemViews = props.rightBarItemViews;
469
471
  var removingTitleLabel = props.titleLabel;
470
472
  var removingCustomView = props.customView;
473
+ var removingCustomViewTransform = removingCustomView ? removingCustomView.transform : JSAffineTransform.Identity;
474
+ var customViewTransform = JSAffineTransform.Identity;
471
475
  var backToTitleScale = this.titleFont.displayLineHeight / this.itemFont.displayLineHeight;
472
476
  props.titleLabel = this.createTitleLabel();
473
477
  navigationBar.addSubview(props.titleLabel);
@@ -488,15 +492,16 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
488
492
  props.titleLabel.alpha = 0;
489
493
  props.titleLabel.transform = JSAffineTransform.Translated(navigationBar.bounds.size.width, 0);
490
494
  if (props.customView){
495
+ customViewTransform = props.customView.transform;
491
496
  props.customView.alpha = 0;
492
- props.customView.transform = JSAffineTransform.Translated(navigationBar.bounds.size.width, 0);
497
+ props.customView.transform = JSAffineTransform.Translated(navigationBar.bounds.size.width + customViewTransform.tx, customViewTransform.ty);
493
498
  }
494
499
  props.backBarItemView.alpha = 0;
495
500
  var backTitleFrame = props.backBarItemView.titleLabel.convertRectToView(props.backBarItemView.titleLabel.bounds, props.backBarItemView.superview);
496
501
  if (removingCustomView){
497
- props.backBarItemView.titleLabel.transform = JSAffineTransform.Translated(Math.max(0, removingCustomView.frame.origin.x - backTitleFrame.origin.x), 0).scaledBy(backToTitleScale);
502
+ props.backBarItemView.titleLabel.transform = JSAffineTransform.Translated(Math.max(0, removingCustomView.untransformedFrame.origin.x - backTitleFrame.origin.x), 0).scaledBy(backToTitleScale);
498
503
  }else{
499
- props.backBarItemView.titleLabel.transform = JSAffineTransform.Translated(Math.max(0, removingTitleLabel.frame.origin.x - backTitleFrame.origin.x), 0).scaledBy(backToTitleScale);
504
+ props.backBarItemView.titleLabel.transform = JSAffineTransform.Translated(Math.max(0, removingTitleLabel.untransformedFrame.origin.x - backTitleFrame.origin.x), 0).scaledBy(backToTitleScale);
500
505
  }
501
506
  animator.addAnimations(function(){
502
507
  var i, l;
@@ -514,20 +519,20 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
514
519
  }
515
520
  removingBackBarItemView.alpha = 0;
516
521
  removingTitleLabel.alpha = 0;
517
- removingTitleLabel.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - removingTitleLabel.frame.origin.x), 0).scaledBy(1 / backToTitleScale);
522
+ removingTitleLabel.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - removingTitleLabel.untransformedFrame.origin.x), 0).scaledBy(1 / backToTitleScale);
518
523
  if (removingCustomView){
519
524
  removingCustomView.alpha = 0;
520
- removingCustomView.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - removingCustomView.frame.origin.x), 0).scaledBy(1 / backToTitleScale);
525
+ removingCustomView.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - removingCustomView.untransformedFrame.origin.x) + removingCustomViewTransform.tx, removingCustomViewTransform.ty).scaledBy(1 / backToTitleScale);
521
526
  }
522
527
  props.titleLabel.alpha = 1;
523
528
  props.titleLabel.transform = JSAffineTransform.Identity;
524
529
  if (props.customView){
525
530
  props.customView.alpha = 1;
526
- props.customView.transform = JSAffineTransform.Identity;
531
+ props.customView.transform = customViewTransform;
527
532
  }
528
533
  props.backBarItemView.alpha = 1;
529
534
  props.backBarItemView.titleLabel.transform = JSAffineTransform.Identity;
530
- });
535
+ }, this);
531
536
  animator.addCompletion(function(){
532
537
  var i, l;
533
538
  for (i = 0, l = removingLeftBarItemViews.length; i < l; ++i){
@@ -540,9 +545,14 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
540
545
  removingBackBarItemView.removeFromSuperview();
541
546
  if (removingCustomView !== null){
542
547
  removingCustomView.removeFromSuperview();
543
- removingCustomView.transform = JSAffineTransform.Identity;
548
+ removingCustomView.transform = removingCustomViewTransform;
544
549
  }
545
- });
550
+ props.isAnimating = false;
551
+ if (props.needsUpdate){
552
+ this.updateBar(navigationBar);
553
+ }
554
+ }, this);
555
+ props.isAnimating = true;
546
556
  },
547
557
 
548
558
  popToItem: function(navigationBar, item, animator){
@@ -553,6 +563,8 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
553
563
  var removingRightBarItemViews = props.rightBarItemViews;
554
564
  var removingTitleLabel = props.titleLabel;
555
565
  var removingCustomView = props.customView;
566
+ var removingCustomViewTransform = removingCustomView ? removingCustomView.transform : JSAffineTransform.Identity;
567
+ var customViewTransform = JSAffineTransform.Identity;
556
568
  var backToTitleScale = this.titleFont.displayLineHeight / this.itemFont.displayLineHeight;
557
569
  props.titleLabel = this.createTitleLabel();
558
570
  navigationBar.addSubview(props.titleLabel);
@@ -574,10 +586,11 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
574
586
  props.backBarItemView.alpha = 0;
575
587
  var backTitleFrame = removingBackBarItemView.titleLabel.convertRectToView(removingBackBarItemView.titleLabel.bounds, props.backBarItemView.superview);
576
588
  if (props.customView){
577
- props.customView.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - props.customView.frame.origin.x), 0).scaledBy(1 / backToTitleScale);
589
+ customViewTransform = props.customView.transform;
590
+ props.customView.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - props.customView.untransformedFrame.origin.x) + customViewTransform.tx, customViewTransform.ty).scaledBy(1 / backToTitleScale);
578
591
  props.customView.alpha = 0;
579
592
  }else{
580
- props.titleLabel.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - props.titleLabel.frame.origin.x), 0).scaledBy(1 / backToTitleScale);
593
+ props.titleLabel.transform = JSAffineTransform.Translated(Math.min(0, backTitleFrame.origin.x - props.titleLabel.untransformedFrame.origin.x), 0).scaledBy(1 / backToTitleScale);
581
594
  }
582
595
  animator.addAnimations(function(){
583
596
  var i, l;
@@ -598,7 +611,7 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
598
611
  removingTitleLabel.transform = JSAffineTransform.Translated(navigationBar.bounds.size.width, 0);
599
612
  if (removingCustomView){
600
613
  removingCustomView.alpha = 0;
601
- removingCustomView.transform = JSAffineTransform.Translated(navigationBar.bounds.size.width, 0);
614
+ removingCustomView.transform = JSAffineTransform.Translated(navigationBar.bounds.size.width + removingCustomViewTransform.tx, removingCustomViewTransform.ty);
602
615
  }
603
616
  props.titleLabel.alpha = 1;
604
617
  props.titleLabel.transform = JSAffineTransform.Identity;
@@ -606,9 +619,9 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
606
619
  props.backBarItemView.titleLabel.transform = JSAffineTransform.Identity;
607
620
  if (props.customView){
608
621
  props.customView.alpha = 1;
609
- props.customView.transform = JSAffineTransform.Identity;
622
+ props.customView.transform = customViewTransform;
610
623
  }
611
- });
624
+ }, this);
612
625
  animator.addCompletion(function(){
613
626
  var i, l;
614
627
  for (i = 0, l = removingLeftBarItemViews.length; i < l; ++i){
@@ -621,14 +634,24 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
621
634
  removingBackBarItemView.removeFromSuperview();
622
635
  if (removingCustomView !== null){
623
636
  removingCustomView.removeFromSuperview();
624
- removingCustomView.transform = JSAffineTransform.Identity;
637
+ removingCustomView.transform = removingCustomViewTransform;
638
+ }
639
+ props.isAnimating = false;
640
+ if (props.needsUpdate){
641
+ this.updateBar(navigationBar);
625
642
  }
626
- });
643
+ }, this);
644
+ props.isAnimating = true;
627
645
  },
628
646
 
629
647
  updateBar: function(navigationBar){
630
648
  var item = navigationBar.topItem;
631
649
  var props = navigationBar.stylerProperties;
650
+ if (props.isAnimating){
651
+ props.needsUpdate = true;
652
+ return;
653
+ }
654
+ props.needsUpdate = false;
632
655
 
633
656
  var i, l;
634
657
  for (i = 0, l = props.leftBarItemViews.length; i < l; ++i){
@@ -708,7 +731,7 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
708
731
  var barItemView = props.backBarItemView;
709
732
  var titleTextAlignment = item ? item.titleTextAlignment || this.titleTextAlignment : this.titleTextAlignment;
710
733
  barItemView.sizeToFitSize(JSSize(xRight - xLeft, itemHeight));
711
- barItemView.frame = JSRect(JSPoint(xLeft, y + (itemHeight - barItemView.bounds.size.height) / 2), barItemView.bounds.size);
734
+ barItemView.untransformedFrame = JSRect(JSPoint(xLeft, y + (itemHeight - barItemView.bounds.size.height) / 2), barItemView.bounds.size);
712
735
  if (!barItemView.hidden){
713
736
  xLeft += barItemView.bounds.size.width;
714
737
  }else if (props.leftBarItemViews.length === 0 && titleTextAlignment === JSTextAlignment.left && this.titleInsets !== null){
@@ -717,14 +740,14 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
717
740
  for (i = 0, l = props.leftBarItemViews.length; i < l; ++i){
718
741
  barItemView = props.leftBarItemViews[i];
719
742
  barItemView.sizeToFitSize(JSSize(xRight - xLeft, itemHeight));
720
- barItemView.frame = JSRect(JSPoint(xLeft, y + (itemHeight - barItemView.bounds.size.height) / 2), barItemView.bounds.size);
743
+ barItemView.untransformedFrame = JSRect(JSPoint(xLeft, y + (itemHeight - barItemView.bounds.size.height) / 2), barItemView.bounds.size);
721
744
  xLeft += barItemView.bounds.size.width;
722
745
  }
723
746
  for (i = props.rightBarItemViews.length - 1; i >= 0; --i){
724
747
  barItemView = props.rightBarItemViews[i];
725
748
  barItemView.sizeToFitSize(JSSize(xRight - xLeft, itemHeight));
726
749
  xRight -= barItemView.bounds.size.width;
727
- barItemView.frame = JSRect(JSPoint(xRight, y + (itemHeight - barItemView.bounds.size.height) / 2), barItemView.bounds.size);
750
+ barItemView.untransformedFrame = JSRect(JSPoint(xRight, y + (itemHeight - barItemView.bounds.size.height) / 2), barItemView.bounds.size);
728
751
  barItemView.hidden = xRight < xLeft;
729
752
  }
730
753
 
@@ -746,11 +769,11 @@ JSClass("UINavigationBarDefaultStyler", UINavigationBarStyler, {
746
769
  var centeredX = (size.width - viewSize.width) / 2;
747
770
  var centeredY = (size.height - viewSize.height) / 2;
748
771
  if (titleTextAlignment === JSTextAlignment.center){
749
- titleView.frame = JSRect(JSPoint(Math.min(Math.max(minX, centeredX), maxX), centeredY), viewSize);
772
+ titleView.untransformedFrame = JSRect(JSPoint(Math.min(Math.max(minX, centeredX), maxX), centeredY), viewSize);
750
773
  }else if (titleTextAlignment === JSTextAlignment.right){
751
- titleView.frame = JSRect(JSPoint(maxX - viewSize.width, centeredY), viewSize);
774
+ titleView.untransformedFrame = JSRect(JSPoint(maxX - viewSize.width, centeredY), viewSize);
752
775
  }else{
753
- titleView.frame = JSRect(JSPoint(minX, centeredY), viewSize);
776
+ titleView.untransformedFrame = JSRect(JSPoint(minX, centeredY), viewSize);
754
777
  }
755
778
  }else{
756
779
  props.titleLabel.hidden = true;
@@ -323,6 +323,17 @@ JSClass('UIView', UIResponder, {
323
323
  return null;
324
324
  },
325
325
 
326
+ isDescendantOfView: function(view){
327
+ if (view === null || view === undefined){
328
+ return false;
329
+ }
330
+ var superview = this.superview;
331
+ while (superview !== null && superview !== view){
332
+ superview = superview.superview;
333
+ }
334
+ return superview !== null && superview === view;
335
+ },
336
+
326
337
  // -------------------------------------------------------------------------
327
338
  // MARK: - Window
328
339
 
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.UIKitTesting
3
- JSBundleVersion: 2022.26.1
3
+ JSBundleVersion: 2022.28.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "node": ">=10.10.0"
10
10
  },
11
11
  "name": "@breakside/jskit",
12
- "version": "2022.26.1",
12
+ "version": "2022.28.0",
13
13
  "license": "SEE LICENSE IN LICENSE.txt",
14
14
  "files": [
15
15
  "*"