@breakside/jskit 2023.3.1 → 2023.9.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 (76) 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/Foundation.js +1 -0
  7. package/Frameworks/Foundation.jsframework/JS/JSAttributedString.js +3 -0
  8. package/Frameworks/Foundation.jsframework/JS/JSBundle+HTML.js +2 -1
  9. package/Frameworks/Foundation.jsframework/JS/JSDiff.js +99 -0
  10. package/Frameworks/Foundation.jsframework/JS/JSNumberFormatter.js +105 -8
  11. package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
  12. package/Frameworks/Foundation.jsframework/sources.json +2 -0
  13. package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
  14. package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
  15. package/Info.json +2 -2
  16. package/Node/io.breakside.jskit-bundle.js +2 -2
  17. package/Node/jskit +1 -0
  18. package/Root/Frameworks/APIKit/Info.yaml +1 -1
  19. package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
  20. package/Root/Frameworks/AuthKit/Info.yaml +1 -1
  21. package/Root/Frameworks/CSSOM/Info.yaml +1 -1
  22. package/Root/Frameworks/ChartKit/CHAreaChart.js +2 -0
  23. package/Root/Frameworks/ChartKit/CHLineChart.js +2 -0
  24. package/Root/Frameworks/ChartKit/CHSeriesStyle.js +1 -0
  25. package/Root/Frameworks/ChartKit/CHStackedAreaChart.js +1 -0
  26. package/Root/Frameworks/ChartKit/Info.yaml +1 -1
  27. package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
  28. package/Root/Frameworks/DBKit/Info.yaml +1 -1
  29. package/Root/Frameworks/DOM/Info.yaml +1 -1
  30. package/Root/Frameworks/Dispatch/Info.yaml +1 -1
  31. package/Root/Frameworks/FontKit/Info.yaml +1 -1
  32. package/Root/Frameworks/Foundation/Foundation.js +1 -0
  33. package/Root/Frameworks/Foundation/Info.yaml +1 -1
  34. package/Root/Frameworks/Foundation/JSAttributedString.js +3 -0
  35. package/Root/Frameworks/Foundation/JSBundle+HTML.js +2 -1
  36. package/Root/Frameworks/Foundation/JSDiff.js +99 -0
  37. package/Root/Frameworks/Foundation/JSNumberFormatter.js +105 -8
  38. package/Root/Frameworks/ImageKit/Info.yaml +1 -1
  39. package/Root/Frameworks/MediaKit/Info.yaml +1 -1
  40. package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
  41. package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
  42. package/Root/Frameworks/PDFKit/Info.yaml +1 -1
  43. package/Root/Frameworks/QRKit/Info.yaml +1 -1
  44. package/Root/Frameworks/SearchKit/Info.yaml +1 -1
  45. package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
  46. package/Root/Frameworks/ServerKit/Info.yaml +1 -1
  47. package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
  48. package/Root/Frameworks/TestKit/Info.yaml +1 -1
  49. package/Root/Frameworks/UIKit/Info.yaml +1 -1
  50. package/Root/Frameworks/UIKit/UIAccessibility.js +1 -0
  51. package/Root/Frameworks/UIKit/UIActivityIndicatorView.js +1 -1
  52. package/Root/Frameworks/UIKit/UIBrowserView.js +1 -1
  53. package/Root/Frameworks/UIKit/UIButton.js +2 -2
  54. package/Root/Frameworks/UIKit/UICollectionView.js +3 -3
  55. package/Root/Frameworks/UIKit/UIColorPanel.js +4 -0
  56. package/Root/Frameworks/UIKit/UIColorWell.js +6 -6
  57. package/Root/Frameworks/UIKit/UIDisplayServer.js +5 -1
  58. package/Root/Frameworks/UIKit/UIHTMLTextField.js +1 -1
  59. package/Root/Frameworks/UIKit/UIHTMLWindowServer.js +9 -0
  60. package/Root/Frameworks/UIKit/UILabel.js +1 -1
  61. package/Root/Frameworks/UIKit/UIListView.js +4 -4
  62. package/Root/Frameworks/UIKit/UIMenu.js +7 -7
  63. package/Root/Frameworks/UIKit/UINavigationBar.js +2 -2
  64. package/Root/Frameworks/UIKit/UIPopupButton.js +5 -5
  65. package/Root/Frameworks/UIKit/UIProgressIndicatorView.js +1 -1
  66. package/Root/Frameworks/UIKit/UISlider.js +6 -6
  67. package/Root/Frameworks/UIKit/UISplitView.js +9 -9
  68. package/Root/Frameworks/UIKit/UISplitViewController.js +3 -0
  69. package/Root/Frameworks/UIKit/UIStackView.js +1 -1
  70. package/Root/Frameworks/UIKit/UITabView.js +5 -5
  71. package/Root/Frameworks/UIKit/UITextField.js +3 -3
  72. package/Root/Frameworks/UIKit/UIToolbar.js +1 -1
  73. package/Root/Frameworks/UIKit/UIView.js +4 -4
  74. package/Root/Frameworks/UIKit/UIWindow.js +3 -3
  75. package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
  76. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
4
- "JSBundleVersion": "2023.3.1",
4
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
12
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
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": "2023.3.1",
6
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
14
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
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": "2023.3.1",
4
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
11
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
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": "2023.3.1",
6
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
13
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
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": "2023.3.1",
4
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
12
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
13
13
  }
@@ -96,6 +96,7 @@
96
96
  // #import "JSNotification.js"
97
97
 
98
98
  // #import "JSSynchronizer.js"
99
+ // #import "JSDiff.js"
99
100
 
100
101
  // #import "JSLog.js"
101
102
  // #import "Zlib.js"
@@ -43,6 +43,9 @@ JSClass("JSAttributedString", JSObject, {
43
43
  },
44
44
 
45
45
  initFromDictionary: function(dictionary){
46
+ if (dictionary === null || dictionary === undefined){
47
+ return null;
48
+ }
46
49
  this._string = typeof(dictionary.string) === "string" ? dictionary.string : "";
47
50
  this._runs = [];
48
51
  var i, l;
@@ -29,8 +29,9 @@ JSBundle.definePropertiesFromExtensions({
29
29
  var task = session.dataTaskWithURL(url, function(error){
30
30
  if (error !== null || task.response.statusClass != JSURLResponse.StatusClass.success){
31
31
  completion.call(target, null);
32
+ }else{
33
+ completion.call(target, task.response.data);
32
34
  }
33
- completion.call(target, task.response.data);
34
35
  });
35
36
  task.resume();
36
37
  return completion.promise;
@@ -0,0 +1,99 @@
1
+ // #import "JSObject.js"
2
+ "use strict";
3
+
4
+ JSClass("JSDiff", JSObject, {
5
+
6
+ a: null,
7
+ b: null,
8
+
9
+ mapFunction: null,
10
+
11
+ initWithArrays: function(a, b, mapFunction){
12
+ this.a = a;
13
+ this.b = b;
14
+ if (mapFunction !== undefined){
15
+ this.mapFunction = mapFunction;
16
+ }
17
+ },
18
+
19
+ initWithStrings: function(a, b){
20
+ this.initWithArrays(a, b);
21
+ },
22
+
23
+ commonIndexes: JSLazyInitProperty(function(){
24
+ var a = this.a;
25
+ var b = this.b;
26
+ if (this.mapFunction !== null){
27
+ a = a.map(this.mapFunction);
28
+ b = b.map(this.mapFunction);
29
+ }
30
+ return this.indexesOfLongestCommonSubsequence(a, 0, a.length - 1, b, 0, b.length - 1);
31
+ }),
32
+
33
+ recursionCount: 0,
34
+ comparisonCount: 0,
35
+
36
+ indexesOfLongestCommonSubsequence: function(a, i0, i1, b, j0, j1){
37
+ ++this.recursionCount;
38
+ if (i1 >= i0 && j1 >= j0){
39
+ ++this.comparisonCount;
40
+ if (a[i0] === b[j0]){
41
+ var head = [];
42
+ ++this.comparisonCount;
43
+ while (i1 >= i0 && j1 >= j0 && a[i0] === b[i0]){
44
+ head.push([i0, j0]);
45
+ ++i0;
46
+ ++j0;
47
+ ++this.comparisonCount;
48
+ }
49
+ return head.concat(this.indexesOfLongestCommonSubsequence(a, i0, i1, b, j0, j1));
50
+ }
51
+ ++this.comparisonCount;
52
+ if (a[i1] === b[j1]){
53
+ var tail = [];
54
+ ++this.comparisonCount;
55
+ while (i1 >= i0 && j1 >= j0 && a[i1] === b[j1]){
56
+ tail.unshift([i1, j1]);
57
+ --i1;
58
+ --j1;
59
+ ++this.comparisonCount;
60
+ }
61
+ return this.indexesOfLongestCommonSubsequence(a, i0, i1, b, j0, j1).concat(tail);
62
+ }
63
+ var sequence1 = this.indexesOfLongestCommonSubsequence(a, i0, i1, b, j0, j1 - 1);
64
+ var sequence2 = this.indexesOfLongestCommonSubsequence(a, i0, i1 - 1, b, j0, j1);
65
+ if (sequence1.length >= sequence2.length){
66
+ return sequence1;
67
+ }
68
+ return sequence2;
69
+ }
70
+ return [];
71
+ },
72
+
73
+ operations: function(){
74
+ var a = [];
75
+ var b = [];
76
+ var i, l;
77
+ var j, k;
78
+ var commonIndexes = this.commonIndexes;
79
+ for (i = 0, l = a.length; i < l; ++i){
80
+ }
81
+ return [a, b];
82
+ },
83
+
84
+ longestCommonSubsequence: function(){
85
+ var commonIndexes = this.commonIndexes;
86
+ var sequence = [];
87
+ var i, l;
88
+ for (i = 0, l = commonIndexes.length; i < l; ++i){
89
+ sequence.push(this.a[commonIndexes[i][0]]);
90
+ }
91
+ return sequence;
92
+ }
93
+
94
+ });
95
+
96
+ JSDiff.Operation = {
97
+ insert: 1,
98
+ delete: 2
99
+ };
@@ -526,23 +526,120 @@ JSClass("JSNumberFormatter", JSObject, {
526
526
  if (this._minimumFractionDigits > 0 || fraction !== 0){
527
527
  fraction *= Math.pow(10, this._maximumFractionDigits);
528
528
  fraction = Math.round(fraction);
529
- var extras = this._maximumFractionDigits - this._minimumFractionDigits;
530
- while (extras > 0 && ((fraction % 10) === 0)){
531
- fraction /= 10;
532
- --extras;
533
- }
534
529
  if (this._minimumFractionDigits > 0 || fraction !== 0){
535
530
  str += ".";
536
531
  var fractionString = fraction.toString();
537
- while (fractionString.length < this._minimumFractionDigits){
538
- fractionString += "0";
532
+ while (fractionString.length < this._maximumFractionDigits){
533
+ fractionString = "0" + fractionString;
534
+ }
535
+ while (fractionString.length > this._minimumFractionDigits && fractionString[fractionString.length - 1] === "0"){
536
+ fractionString = fractionString.substr(0, fractionString.length - 1);
539
537
  }
540
538
  str += fractionString;
541
539
  }
542
540
  }
543
541
  }
544
542
  return prefix + str + suffix;
545
- }
543
+ },
544
+
545
+ numberFromString: function(string){
546
+ var n = 0;
547
+ var f = 0;
548
+ var d = 1;
549
+ var sign = 1;
550
+ var iterator = string.unicodeIterator();
551
+ var i = 0;
552
+ var l = string.length;
553
+ var c;
554
+ var canSeeSign = true;
555
+ var canSeeCurrency = true;
556
+ var canSeeDecimal = true;
557
+ var canSeeInteger = true;
558
+ var canSeeFraction = false;
559
+ var canSeePercent = false;
560
+ var canSeeGroup = false;
561
+ var seenDigit = false;
562
+ var stringMatches = function(substr){
563
+ if (substr.length === 0){
564
+ return false;
565
+ }
566
+ return string.substr(i, substr.length) === substr;
567
+ };
568
+ while (i < l){
569
+ c = string.charCodeAt(i);
570
+ if (c >= 0x30 && c <= 0x39){
571
+ if (canSeeInteger){
572
+ canSeeSign = false;
573
+ canSeeGroup = true;
574
+ canSeePercent = true;
575
+ n *= 10;
576
+ n += (c - 0x30);
577
+ }else if (canSeeFraction){
578
+ f *= 10;
579
+ f += (c - 0x30);
580
+ d *= 10;
581
+ }else{
582
+ return null;
583
+ }
584
+ seenDigit = true;
585
+ ++i;
586
+ }else if (canSeeSign && stringMatches(this.minusSign)){
587
+ sign = -1;
588
+ canSeeSign = false;
589
+ i += this.minusSign.length;
590
+ }else if (canSeeSign && stringMatches(this.plusSign)){
591
+ canSeeSign = false;
592
+ i += this.plusSign.length;
593
+ }else if (canSeeCurrency && stringMatches(this.currencySymbol)){
594
+ canSeeCurrency = false;
595
+ if (seenDigit){
596
+ canSeeInteger = false;
597
+ canSeeDecimal = false;
598
+ canSeeFraction = false;
599
+ }
600
+ i += this.currencySymbol.length;
601
+ }else if (canSeePercent && stringMatches(this.percentSymbol)){
602
+ canSeePercent = false;
603
+ if (seenDigit){
604
+ canSeeInteger = false;
605
+ canSeeDecimal = false;
606
+ canSeeFraction = false;
607
+ }
608
+ i += this.percentSymbol.length;
609
+ }else if (canSeePercent && stringMatches(this.perMilleSymbol)){
610
+ canSeePercent = false;
611
+ if (seenDigit){
612
+ canSeeInteger = false;
613
+ canSeeDecimal = false;
614
+ canSeeFraction = false;
615
+ }
616
+ i += this.perMilleSymbol.length;
617
+ }else if (canSeeDecimal && stringMatches(this.decimalSeparator)){
618
+ canSeeDecimal = false;
619
+ canSeeGroup = false;
620
+ canSeeInteger = false;
621
+ canSeeFraction = true;
622
+ i += this.decimalSeparator.length;
623
+ }else if (canSeeGroup && stringMatches(this.groupingSeparator)){
624
+ i += this.groupingSeparator.length;
625
+ }else if (c == 0x20){
626
+ ++i;
627
+ }else{
628
+ return null;
629
+ }
630
+ }
631
+ if (!seenDigit){
632
+ return null;
633
+ }
634
+ if (f > 0){
635
+ n += f / d;
636
+ }
637
+ n /= this.multiplier;
638
+ if (sign < 0){
639
+ n = -n;
640
+ }
641
+ return n;
642
+ },
546
643
 
547
644
  });
548
645
 
@@ -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": "2023.3.1",
6
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
14
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
15
15
  },
16
16
  "Resources": [
17
17
  {
@@ -95,6 +95,7 @@
95
95
  "JSUndoManager.js",
96
96
  "JSDistributedNotificationCenter.js",
97
97
  "JSSynchronizer.js",
98
+ "JSDiff.js",
98
99
  "JSCRC32.js",
99
100
  "JSZip.js",
100
101
  "JSIterativeHash.js",
@@ -259,6 +260,7 @@
259
260
  "JSUndoManager",
260
261
  "JSDistributedNotificationCenter",
261
262
  "JSSynchronizer",
263
+ "JSDiff",
262
264
  "JSCRC32",
263
265
  "JSZip",
264
266
  "JSIterativeHash",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
4
- "JSBundleVersion": "2023.3.1",
4
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
12
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
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": "2023.3.1",
6
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
14
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
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": "2023.3.1",
4
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
11
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
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": "2023.3.1",
6
+ "JSBundleVersion": "2023.9.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": "df8e70a10e575e443fb5f452739d77640fdd1519"
13
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
14
14
  },
15
15
  "Resources": [
16
16
  {
package/Node/jskit CHANGED
@@ -96,6 +96,7 @@ require("./../Frameworks/Foundation.jsframework/JS/JSUserDefaults.js");
96
96
  require("./../Frameworks/Foundation.jsframework/JS/JSUndoManager.js");
97
97
  require("./../Frameworks/Foundation.jsframework/JS/JSDistributedNotificationCenter.js");
98
98
  require("./../Frameworks/Foundation.jsframework/JS/JSSynchronizer.js");
99
+ require("./../Frameworks/Foundation.jsframework/JS/JSDiff.js");
99
100
  require("./../Frameworks/Foundation.jsframework/JS/JSCRC32.js");
100
101
  require("./../Frameworks/Foundation.jsframework/JS/JSZip.js");
101
102
  require("./../Frameworks/Foundation.jsframework/JS/JSIterativeHash.js");
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKit
3
- JSBundleVersion: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -56,6 +56,7 @@ JSClass("CHAreaChart", CHCategoryChart, {
56
56
  }
57
57
  context.setLineWidth(series.style.lineWidth);
58
58
  context.setLineCap(series.style.lineCap);
59
+ context.setLineJoin(series.style.lineJoin);
59
60
  if (series.style.lineDashLengths !== null){
60
61
  context.setLineDash(0, series.style.lineDashLengths);
61
62
  }
@@ -164,6 +165,7 @@ JSClass("CHAreaChart", CHCategoryChart, {
164
165
  }
165
166
  context.setLineWidth(series.style.lineWidth);
166
167
  context.setLineCap(series.style.lineCap);
168
+ context.setLineJoin(series.style.lineJoin);
167
169
  if (series.style.lineDashLengths !== null){
168
170
  context.setLineDash(0, series.style.lineDashLengths);
169
171
  }
@@ -47,6 +47,7 @@ JSClass("CHLineChart", CHCategoryChart, {
47
47
  context.setStrokeColor(series.style.color);
48
48
  context.setLineWidth(series.style.lineWidth);
49
49
  context.setLineCap(series.style.lineCap);
50
+ context.setLineJoin(series.style.lineJoin);
50
51
  if (series.style.lineDashLengths !== null){
51
52
  context.setLineDash(0, series.style.lineDashLengths);
52
53
  }
@@ -117,6 +118,7 @@ JSClass("CHLineChart", CHCategoryChart, {
117
118
  context.setStrokeColor(series.style.color);
118
119
  context.setLineWidth(series.style.lineWidth);
119
120
  context.setLineCap(series.style.lineCap);
121
+ context.setLineJoin(series.style.lineJoin);
120
122
  if (series.style.lineDashLengths !== null){
121
123
  context.setLineDash(0, series.style.lineDashLengths);
122
124
  }
@@ -146,6 +146,7 @@ JSClass("CHSeriesLineStyle", CHSeriesStyle, {
146
146
  lineWidth: 4,
147
147
  lineDashLengths: null,
148
148
  lineCap: JSContext.LineCap.butt,
149
+ lineJoin: JSContext.LineJoin.miter,
149
150
  symbolPath: null,
150
151
  symbolFillColor: null,
151
152
  symbolStrokeColor: null,
@@ -108,6 +108,7 @@ JSClass("CHStackedAreaChart", CHAreaChart, {
108
108
  }
109
109
  context.setLineWidth(series.style.lineWidth);
110
110
  context.setLineCap(series.style.lineCap);
111
+ context.setLineJoin(series.style.lineJoin);
111
112
  if (series.style.lineDashLengths !== null){
112
113
  context.setLineDash(0, series.style.lineDashLengths);
113
114
  }
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ChartKit
3
- JSBundleVersion: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.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: 2023.3.1
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -96,6 +96,7 @@
96
96
  // #import "JSNotification.js"
97
97
 
98
98
  // #import "JSSynchronizer.js"
99
+ // #import "JSDiff.js"
99
100
 
100
101
  // #import "JSLog.js"
101
102
  // #import "Zlib.js"
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.Foundation
3
- JSBundleVersion: 2023.3.1
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -43,6 +43,9 @@ JSClass("JSAttributedString", JSObject, {
43
43
  },
44
44
 
45
45
  initFromDictionary: function(dictionary){
46
+ if (dictionary === null || dictionary === undefined){
47
+ return null;
48
+ }
46
49
  this._string = typeof(dictionary.string) === "string" ? dictionary.string : "";
47
50
  this._runs = [];
48
51
  var i, l;
@@ -29,8 +29,9 @@ JSBundle.definePropertiesFromExtensions({
29
29
  var task = session.dataTaskWithURL(url, function(error){
30
30
  if (error !== null || task.response.statusClass != JSURLResponse.StatusClass.success){
31
31
  completion.call(target, null);
32
+ }else{
33
+ completion.call(target, task.response.data);
32
34
  }
33
- completion.call(target, task.response.data);
34
35
  });
35
36
  task.resume();
36
37
  return completion.promise;