@breakside/jskit 2026.8.0 → 2026.10.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.
- package/Frameworks/DOM.jsframework/Info.json +2 -2
- package/Frameworks/DOM.jsframework/io.breakside.JSKit.DOM-bundle.js +2 -2
- package/Frameworks/FontKit.jsframework/Info.json +2 -2
- package/Frameworks/FontKit.jsframework/io.breakside.JSKit.FontKit-bundle.js +2 -2
- package/Frameworks/Foundation.jsframework/Info.json +2 -2
- package/Frameworks/Foundation.jsframework/JS/JSColor.js +5 -0
- package/Frameworks/Foundation.jsframework/JS/JSPath.js +482 -49
- package/Frameworks/Foundation.jsframework/JS/JSRect.js +12 -0
- package/Frameworks/Foundation.jsframework/JS/JSSpec.js +5 -1
- package/Frameworks/Foundation.jsframework/JS/String+JS.js +78 -2
- package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
- package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
- package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
- package/Info.json +2 -2
- package/Node/DocCommand.js +5 -2
- package/Node/Docs/DocClass.js +2 -2
- package/Node/Docs/DocComponent.js +6 -4
- package/Node/Docs/DocDictionaryProperty.js +2 -2
- package/Node/Docs/DocEnumOption.js +2 -2
- package/Node/Docs/DocFunction.js +2 -2
- package/Node/Docs/DocProperty.js +2 -2
- package/Node/Docs/DocProtocol.js +1 -1
- package/Node/Docs/DocSpec.js +1 -1
- package/Node/Docs/DocSpecProperty.js +2 -2
- package/Node/Docs/DocTopicBasedComponent.js +2 -2
- package/Node/Documentation.js +10 -2
- package/Node/HTMLBuilder.js +3 -1
- package/Node/HTMLProjectServer.js +39 -1
- package/Node/io.breakside.jskit-bundle.js +4 -4
- package/Resources/doc-default.css +4 -4
- package/Root/Frameworks/APIKit/Info.yaml +1 -1
- package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
- package/Root/Frameworks/AuthKit/Info.yaml +1 -1
- package/Root/Frameworks/CSSOM/Info.yaml +1 -1
- package/Root/Frameworks/ChartKit/Info.yaml +1 -1
- package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
- package/Root/Frameworks/DBKit/Info.yaml +1 -1
- package/Root/Frameworks/DOM/Info.yaml +1 -1
- package/Root/Frameworks/Dispatch/Info.yaml +1 -1
- package/Root/Frameworks/FontKit/Info.yaml +1 -1
- package/Root/Frameworks/Foundation/Info.yaml +1 -1
- package/Root/Frameworks/Foundation/JSColor.js +5 -0
- package/Root/Frameworks/Foundation/JSPath.js +482 -49
- package/Root/Frameworks/Foundation/JSRect.js +12 -0
- package/Root/Frameworks/Foundation/JSSpec.js +5 -1
- package/Root/Frameworks/Foundation/String+JS.js +78 -2
- package/Root/Frameworks/ImageKit/Info.yaml +1 -1
- package/Root/Frameworks/MediaKit/Info.yaml +1 -1
- package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
- package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
- package/Root/Frameworks/PDFKit/Info.yaml +1 -1
- package/Root/Frameworks/QRKit/Info.yaml +1 -1
- package/Root/Frameworks/SearchKit/Info.yaml +1 -1
- package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
- package/Root/Frameworks/ServerKit/Info.yaml +1 -1
- package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
- package/Root/Frameworks/TestKit/Info.yaml +1 -1
- package/Root/Frameworks/UIKit/Info.yaml +1 -1
- package/Root/Frameworks/UIKit/UIApplication.js +5 -1
- package/Root/Frameworks/UIKit/UIHTMLApplication.js +24 -0
- package/Root/Frameworks/UIKit/UIHTMLWindowServer.js +17 -3
- package/Root/Frameworks/UIKit/UIKit.js +2 -0
- package/Root/Frameworks/UIKit/UIListView.js +11 -3
- package/Root/Frameworks/UIKit/UIOutlineView.js +65 -5
- package/Root/Frameworks/UIKit/UIPopupWindow.js +15 -5
- package/Root/Frameworks/UIKit/UITextAction.js +16 -0
- package/Root/Frameworks/UIKit/UITextActionsMenu.js +95 -0
- package/Root/Frameworks/UIKit/UITextEditor.js +57 -7
- package/Root/Frameworks/UIKit/UITextField.js +102 -0
- package/Root/Frameworks/UIKit/en.lproj/Localizable.strings.yaml +4 -1
- package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
- package/package.json +1 -1
|
@@ -1592,7 +1592,7 @@ String.printf_formatter = {
|
|
|
1592
1592
|
|
|
1593
1593
|
x: function(arg, options){
|
|
1594
1594
|
// TODO: obey any other options
|
|
1595
|
-
var str = arg.toString(16);
|
|
1595
|
+
var str = Math.floor(arg).toString(16);
|
|
1596
1596
|
if (options.width){
|
|
1597
1597
|
if (options.zero){
|
|
1598
1598
|
str = str.leftPaddedString('0', options.width);
|
|
@@ -1633,7 +1633,83 @@ String.printf_formatter = {
|
|
|
1633
1633
|
if (Math.abs(arg) < 0.000001){
|
|
1634
1634
|
arg = 0;
|
|
1635
1635
|
}
|
|
1636
|
-
|
|
1636
|
+
var n = arg;
|
|
1637
|
+
if (n === null){
|
|
1638
|
+
return "null";
|
|
1639
|
+
}
|
|
1640
|
+
if (n === undefined){
|
|
1641
|
+
return "undefined";
|
|
1642
|
+
}
|
|
1643
|
+
if (isNaN(n)){
|
|
1644
|
+
return "NaN";
|
|
1645
|
+
}
|
|
1646
|
+
if (!isFinite(n)){
|
|
1647
|
+
if (n < 0){
|
|
1648
|
+
return "-Inf";
|
|
1649
|
+
}
|
|
1650
|
+
return "Inf";
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1653
|
+
// Prefix & Suffix
|
|
1654
|
+
var negative = n < 0;
|
|
1655
|
+
var prefix = "";
|
|
1656
|
+
if (negative){
|
|
1657
|
+
n = -n;
|
|
1658
|
+
prefix = "-";
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
// Integer
|
|
1662
|
+
var maximumFractionDigits = options.precision || 6;
|
|
1663
|
+
var minimumFractionDigits = options.precision || 0;
|
|
1664
|
+
var minimumIntegerDigits = options.zero ? 1 : 0;
|
|
1665
|
+
var integer = Math.floor(n);
|
|
1666
|
+
var fraction = n - integer;
|
|
1667
|
+
var maximumFraction = Math.pow(10, maximumFractionDigits);
|
|
1668
|
+
fraction = Math.round(fraction * maximumFraction);
|
|
1669
|
+
if (fraction >= maximumFraction){
|
|
1670
|
+
integer += 1;
|
|
1671
|
+
fraction = 0;
|
|
1672
|
+
}
|
|
1673
|
+
var str = (integer !== 0 || (minimumIntegerDigits === 0 && minimumFractionDigits === 0)) ? integer.toString() : "";
|
|
1674
|
+
var zeroFillCount = minimumIntegerDigits - str.length;
|
|
1675
|
+
var i, l;
|
|
1676
|
+
if (zeroFillCount > 0){
|
|
1677
|
+
var fill = "";
|
|
1678
|
+
for (i = 0; i < zeroFillCount; ++i){
|
|
1679
|
+
fill += "0";
|
|
1680
|
+
}
|
|
1681
|
+
str = fill + str;
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
// Decimal
|
|
1685
|
+
if (maximumFraction > 0){
|
|
1686
|
+
if (minimumFractionDigits > 0 || fraction !== 0){
|
|
1687
|
+
if (minimumFractionDigits > 0 || fraction !== 0){
|
|
1688
|
+
str += ".";
|
|
1689
|
+
var fractionString = fraction.toString();
|
|
1690
|
+
while (fractionString.length < maximumFractionDigits){
|
|
1691
|
+
fractionString = "0" + fractionString;
|
|
1692
|
+
}
|
|
1693
|
+
while (fractionString.length > minimumFractionDigits && fractionString[fractionString.length - 1] === "0"){
|
|
1694
|
+
fractionString = fractionString.substr(0, fractionString.length - 1);
|
|
1695
|
+
}
|
|
1696
|
+
str += fractionString;
|
|
1697
|
+
}
|
|
1698
|
+
}
|
|
1699
|
+
}
|
|
1700
|
+
str = prefix + str;
|
|
1701
|
+
if (options.width){
|
|
1702
|
+
if (options.zero){
|
|
1703
|
+
str = str.leftPaddedString('0', options.width);
|
|
1704
|
+
}else if (options.left_justified){
|
|
1705
|
+
str = str.rightPaddedString(' ', options.width);
|
|
1706
|
+
}else{
|
|
1707
|
+
str = str.leftPaddedString(' ', options.width);
|
|
1708
|
+
}
|
|
1709
|
+
}else if (str === ""){
|
|
1710
|
+
str = "0";
|
|
1711
|
+
}
|
|
1712
|
+
return str;
|
|
1637
1713
|
},
|
|
1638
1714
|
|
|
1639
1715
|
b: function(arg, options){
|
|
@@ -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": "2026.
|
|
6
|
+
"JSBundleVersion": "2026.10.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": "
|
|
14
|
+
"GitRevision": "4f9f54d7fd9b56bd8c893ac8689a8efee1958ee5"
|
|
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": "2026.
|
|
4
|
+
"JSBundleVersion": "2026.10.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": "
|
|
12
|
+
"GitRevision": "4f9f54d7fd9b56bd8c893ac8689a8efee1958ee5"
|
|
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": "2026.
|
|
6
|
+
"JSBundleVersion": "2026.10.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": "
|
|
14
|
+
"GitRevision": "4f9f54d7fd9b56bd8c893ac8689a8efee1958ee5"
|
|
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": "2026.
|
|
4
|
+
"JSBundleVersion": "2026.10.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": "
|
|
11
|
+
"GitRevision": "4f9f54d7fd9b56bd8c893ac8689a8efee1958ee5"
|
|
12
12
|
}
|
package/Node/DocCommand.js
CHANGED
|
@@ -26,8 +26,8 @@ JSClass("DocCommand", Command, {
|
|
|
26
26
|
options: {
|
|
27
27
|
input: {kind: "positional", help: "The root documentation file to start with"},
|
|
28
28
|
output: {kind: "positional", help: "The directory in which to output the generated documentation"},
|
|
29
|
-
sublime: {kind: "flag", help: "Generate Sublime Text completions"}
|
|
30
|
-
|
|
29
|
+
sublime: {kind: "flag", help: "Generate Sublime Text completions"},
|
|
30
|
+
stylesheet: {default: null, help: "Path to the stylesheet to use for docs"},
|
|
31
31
|
},
|
|
32
32
|
|
|
33
33
|
run: async function(){
|
|
@@ -37,6 +37,9 @@ JSClass("DocCommand", Command, {
|
|
|
37
37
|
var documentation = Documentation.initWithRootURL(rootURL, this.fileManager);
|
|
38
38
|
documentation.printer = printer;
|
|
39
39
|
documentation.outputDirectoryURL = this.fileManager.urlForPath(this.arguments.output, workspaceURL);
|
|
40
|
+
if (this.arguments.stylesheet){
|
|
41
|
+
documentation.customStylesheetURL = this.fileManager.urlForPath(this.arguments.stylesheet, workspaceURL);
|
|
42
|
+
}
|
|
40
43
|
|
|
41
44
|
if (this.arguments.sublime){
|
|
42
45
|
await documentation.sublime();
|
package/Node/Docs/DocClass.js
CHANGED
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
elements.push(inherits);
|
|
68
68
|
inherits.setAttribute("class", "inherits");
|
|
69
69
|
let header = inherits.appendChild(document.createElement("header"));
|
|
70
|
-
let h1 = header.appendChild(document.createElement("
|
|
70
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
71
71
|
h1.setAttribute("outline-level", "1");
|
|
72
72
|
h1.appendChild(document.createTextNode("Inherits From"));
|
|
73
73
|
let p = inherits.appendChild(document.createElement("p"));
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
elements.push(section);
|
|
88
88
|
section.setAttribute("class", "implements");
|
|
89
89
|
let header = section.appendChild(document.createElement("header"));
|
|
90
|
-
let h1 = header.appendChild(document.createElement("
|
|
90
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
91
91
|
h1.setAttribute("outline-level", "1");
|
|
92
92
|
h1.appendChild(document.createTextNode("Implements"));
|
|
93
93
|
let ul = section.appendChild(document.createElement("ul"));
|
|
@@ -300,7 +300,7 @@ JSClass("DocComponent", JSObject, {
|
|
|
300
300
|
let section = document.createElement('section');
|
|
301
301
|
section.setAttribute('class', 'see');
|
|
302
302
|
let header = document.createElement('header');
|
|
303
|
-
let h1 = header.appendChild(document.createElement("
|
|
303
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
304
304
|
h1.appendChild(document.createTextNode('See Also'));
|
|
305
305
|
let p = document.createElement('p');
|
|
306
306
|
section.appendChild(header);
|
|
@@ -428,10 +428,10 @@ JSClass("DocComponent", JSObject, {
|
|
|
428
428
|
let description = document.createElement("section");
|
|
429
429
|
elements.push(description);
|
|
430
430
|
description.setAttribute("class", "description");
|
|
431
|
-
let markdown = this.createMarkdownWithString(this.description);
|
|
431
|
+
let markdown = this.createMarkdownWithString(this.description,);
|
|
432
432
|
let children = markdown.htmlElementsForDocument(document);
|
|
433
433
|
if (children.length === 0 || children[0].tagName != markdown.htmlOptions.firstLevelHeaderTagName){
|
|
434
|
-
let h1 = description.appendChild(document.createElement(
|
|
434
|
+
let h1 = description.appendChild(document.createElement(markdown.htmlOptions.firstLevelHeaderTagName));
|
|
435
435
|
h1.appendChild(document.createTextNode(this.titleForDescriptionSection));
|
|
436
436
|
h1.setAttribute("outline-level", "1");
|
|
437
437
|
}
|
|
@@ -591,7 +591,7 @@ JSClass("DocComponent", JSObject, {
|
|
|
591
591
|
codeSectionElement: function(document, title, lines){
|
|
592
592
|
var section = document.createElement("section");
|
|
593
593
|
var header = section.appendChild(document.createElement("header"));
|
|
594
|
-
var h1 = header.appendChild(document.createElement("
|
|
594
|
+
var h1 = header.appendChild(document.createElement("h2"));
|
|
595
595
|
h1.appendChild(document.createTextNode(title));
|
|
596
596
|
var code = section.appendChild(document.createElement("div"));
|
|
597
597
|
code.setAttribute("class", "code");
|
|
@@ -865,6 +865,8 @@ JSClass("DocComponent", JSObject, {
|
|
|
865
865
|
|
|
866
866
|
createMarkdownWithString: function(string){
|
|
867
867
|
let markdown = Markdown.initWithString(string);
|
|
868
|
+
markdown.htmlOptions.firstLevelHeaderTagName = "h2";
|
|
869
|
+
markdown.htmlOptions.secondLevelHeaderTagName = "h3";
|
|
868
870
|
markdown.delegate = this;
|
|
869
871
|
return markdown;
|
|
870
872
|
},
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
elements.splice(index++, 0, typeSection);
|
|
46
46
|
typeSection.setAttribute("class", "return");
|
|
47
47
|
let header = typeSection.appendChild(document.createElement("header"));
|
|
48
|
-
let h1 = header.appendChild(document.createElement("
|
|
48
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
49
49
|
h1.appendChild(document.createTextNode("Value Type"));
|
|
50
50
|
let p = typeSection.appendChild(document.createElement("p"));
|
|
51
51
|
let code = p.appendChild(document.createElement("code"));
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
section.setAttribute("class", "variations");
|
|
66
66
|
elements.push(section);
|
|
67
67
|
let header = section.appendChild(document.createElement("header"));
|
|
68
|
-
let h1 = header.appendChild(document.createElement("
|
|
68
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
69
69
|
h1.appendChild(document.createTextNode("Alternate Forms"));
|
|
70
70
|
|
|
71
71
|
let ul = section.appendChild(document.createElement("ul"));
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
elements.splice(index++, 0, params);
|
|
58
58
|
params.setAttribute("class", "parameters");
|
|
59
59
|
let header = params.appendChild(document.createElement("header"));
|
|
60
|
-
let h1 = header.appendChild(document.createElement("
|
|
60
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
61
61
|
h1.setAttribute("outline-level", "1");
|
|
62
62
|
h1.appendChild(document.createTextNode("Parameters"));
|
|
63
63
|
let dl = fn.argumentListElement(document, this);
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
elements.splice(index++, 0, returnSection);
|
|
70
70
|
returnSection.setAttribute("class", "return");
|
|
71
71
|
let header = returnSection.appendChild(document.createElement("header"));
|
|
72
|
-
let h1 = header.appendChild(document.createElement("
|
|
72
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
73
73
|
h1.setAttribute("outline-level", "1");
|
|
74
74
|
h1.appendChild(document.createTextNode("Return Value"));
|
|
75
75
|
|
package/Node/Docs/DocFunction.js
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
elements.splice(index++, 0, params);
|
|
67
67
|
params.setAttribute("class", "parameters");
|
|
68
68
|
let header = params.appendChild(document.createElement("header"));
|
|
69
|
-
let h1 = header.appendChild(document.createElement("
|
|
69
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
70
70
|
h1.setAttribute("outline-level", "1");
|
|
71
71
|
h1.appendChild(document.createTextNode("Parameters"));
|
|
72
72
|
let dl = this.argumentListElement(document, this);
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
elements.splice(index++, 0, returnSection);
|
|
79
79
|
returnSection.setAttribute("class", "return");
|
|
80
80
|
let header = returnSection.appendChild(document.createElement("header"));
|
|
81
|
-
let h1 = header.appendChild(document.createElement("
|
|
81
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
82
82
|
h1.setAttribute("outline-level", "1");
|
|
83
83
|
h1.appendChild(document.createTextNode("Return Value"));
|
|
84
84
|
if (this.valueType){
|
package/Node/Docs/DocProperty.js
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
elements.splice(index++, 0, typeSection);
|
|
63
63
|
typeSection.setAttribute("class", "return");
|
|
64
64
|
let header = typeSection.appendChild(document.createElement("header"));
|
|
65
|
-
let h1 = header.appendChild(document.createElement("
|
|
65
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
66
66
|
h1.appendChild(document.createTextNode("Value Type"));
|
|
67
67
|
let p = typeSection.appendChild(document.createElement("p"));
|
|
68
68
|
let code = p.appendChild(document.createElement("code"));
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
section.setAttribute("class", "variations");
|
|
86
86
|
elements.push(section);
|
|
87
87
|
let header = section.appendChild(document.createElement("header"));
|
|
88
|
-
let h1 = header.appendChild(document.createElement("
|
|
88
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
89
89
|
h1.appendChild(document.createTextNode("Alternate Forms"));
|
|
90
90
|
|
|
91
91
|
let ul = section.appendChild(document.createElement("ul"));
|
package/Node/Docs/DocProtocol.js
CHANGED
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
elements.push(inherits);
|
|
55
55
|
inherits.setAttribute("class", "inherits");
|
|
56
56
|
let header = inherits.appendChild(document.createElement("header"));
|
|
57
|
-
let h1 = header.appendChild(document.createElement("
|
|
57
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
58
58
|
h1.appendChild(document.createTextNode("Inherits From"));
|
|
59
59
|
let p = inherits.appendChild(document.createElement("p"));
|
|
60
60
|
let code = p.appendChild(document.createElement("code"));
|
package/Node/Docs/DocSpec.js
CHANGED
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
elements.push(inherits);
|
|
58
58
|
inherits.setAttribute("class", "inherits");
|
|
59
59
|
let header = inherits.appendChild(document.createElement("header"));
|
|
60
|
-
let h1 = header.appendChild(document.createElement("
|
|
60
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
61
61
|
h1.appendChild(document.createTextNode("Inherits From"));
|
|
62
62
|
let p = inherits.appendChild(document.createElement("p"));
|
|
63
63
|
let code = p.appendChild(document.createElement("code"));
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
elements.splice(index++, 0, typeSection);
|
|
43
43
|
typeSection.setAttribute("class", "return");
|
|
44
44
|
let header = typeSection.appendChild(document.createElement("header"));
|
|
45
|
-
let h1 = header.appendChild(document.createElement("
|
|
45
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
46
46
|
h1.appendChild(document.createTextNode("Resolved Value Type"));
|
|
47
47
|
let p = typeSection.appendChild(document.createElement("p"));
|
|
48
48
|
let code = p.appendChild(document.createElement("code"));
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
section.setAttribute("class", "variations");
|
|
66
66
|
elements.push(section);
|
|
67
67
|
let header = section.appendChild(document.createElement("header"));
|
|
68
|
-
let h1 = header.appendChild(document.createElement("
|
|
68
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
69
69
|
h1.appendChild(document.createTextNode("Alternate Forms"));
|
|
70
70
|
|
|
71
71
|
let ul = section.appendChild(document.createElement("ul"));
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
elements.push(topicsSection);
|
|
80
80
|
topicsSection.setAttribute("class", "topics");
|
|
81
81
|
let header = topicsSection.appendChild(document.createElement("header"));
|
|
82
|
-
let h1 = header.appendChild(document.createElement("
|
|
82
|
+
let h1 = header.appendChild(document.createElement("h2"));
|
|
83
83
|
h1.setAttribute("outline-level", "1");
|
|
84
84
|
h1.appendChild(document.createTextNode("Topics"));
|
|
85
85
|
for (let i = 0, l = this.topics.length; i < l; ++i){
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
let section = topicsSection.appendChild(document.createElement("section"));
|
|
89
89
|
section.setAttribute("class", "topic");
|
|
90
90
|
let header = section.appendChild(document.createElement("header"));
|
|
91
|
-
let h1 = header.appendChild(document.createElement("
|
|
91
|
+
let h1 = header.appendChild(document.createElement("h3"));
|
|
92
92
|
h1.appendChild(document.createTextNode(topic.name));
|
|
93
93
|
h1.setAttribute("outline-level", "2");
|
|
94
94
|
let div = section.appendChild(document.createElement('div'));
|
package/Node/Documentation.js
CHANGED
|
@@ -44,6 +44,7 @@ JSClass("Documentation", JSObject, {
|
|
|
44
44
|
this.fileManager = fileManager;
|
|
45
45
|
},
|
|
46
46
|
|
|
47
|
+
customStylesheetURL: null,
|
|
47
48
|
stylesheetURL: null,
|
|
48
49
|
rootURL: null,
|
|
49
50
|
outputDirectoryURL: null,
|
|
@@ -197,8 +198,15 @@ JSClass("Documentation", JSObject, {
|
|
|
197
198
|
var stylesURL = this.wwwURL.appendingPathComponent('_style', true);
|
|
198
199
|
var metadata = JSBundle.mainBundle.metadataForResourceName('doc-default', 'css');
|
|
199
200
|
var contents = await JSBundle.mainBundle.getResourceData(metadata);
|
|
200
|
-
|
|
201
|
-
await this.fileManager.createFileAtURL(
|
|
201
|
+
var defaultStyleURL = stylesURL.appendingPathComponent('default.css');
|
|
202
|
+
await this.fileManager.createFileAtURL(defaultStyleURL, contents);
|
|
203
|
+
if (this.customStylesheetURL !== null){
|
|
204
|
+
var customStyleURL = stylesURL.appendingPathComponent(this.customStylesheetURL.lastPathComponent);
|
|
205
|
+
await this.fileManager.copyItemAtURL(this.customStylesheetURL, customStyleURL);
|
|
206
|
+
this.stylesheetURL = customStyleURL;
|
|
207
|
+
}else{
|
|
208
|
+
this.stylesheetURL = defaultStyleURL;
|
|
209
|
+
}
|
|
202
210
|
},
|
|
203
211
|
|
|
204
212
|
loadSource: async function(url){
|
package/Node/HTMLBuilder.js
CHANGED
|
@@ -1197,7 +1197,9 @@ JSClass("HTMLBuilder", Builder, {
|
|
|
1197
1197
|
this.httpServer.tlsKeyFileURL = JSURL.initWithString(this.arguments['tls-key'], this.workingDirectoryURL);
|
|
1198
1198
|
}
|
|
1199
1199
|
}
|
|
1200
|
-
this.httpServer.run();
|
|
1200
|
+
await this.httpServer.run();
|
|
1201
|
+
}else{
|
|
1202
|
+
await this.httpServer.reload();
|
|
1201
1203
|
}
|
|
1202
1204
|
}else{
|
|
1203
1205
|
if (this.httpServer !== null){
|
|
@@ -49,6 +49,7 @@ JSClass("HTMLProjectServer", JSObject, {
|
|
|
49
49
|
_nodeHttpServer: null,
|
|
50
50
|
|
|
51
51
|
run: async function(){
|
|
52
|
+
await this.reload();
|
|
52
53
|
var scheme = "http";
|
|
53
54
|
if (this.tlsCertificateFileURL !== null && this.tlsKeyFileURL !== null){
|
|
54
55
|
scheme = "https";
|
|
@@ -81,6 +82,10 @@ JSClass("HTMLProjectServer", JSObject, {
|
|
|
81
82
|
}
|
|
82
83
|
},
|
|
83
84
|
|
|
85
|
+
reload: async function(){
|
|
86
|
+
await this.loadFilenameMap();
|
|
87
|
+
},
|
|
88
|
+
|
|
84
89
|
stop: function(completion, target){
|
|
85
90
|
if (!completion){
|
|
86
91
|
completion = Promise.completion();
|
|
@@ -107,6 +112,32 @@ JSClass("HTMLProjectServer", JSObject, {
|
|
|
107
112
|
"/apple-touch-icon-precomposed.png"
|
|
108
113
|
])),
|
|
109
114
|
|
|
115
|
+
filenameMap: null,
|
|
116
|
+
|
|
117
|
+
loadFilenameMap: async function(){
|
|
118
|
+
this.filenameMap = {};
|
|
119
|
+
var configFiles = this.project.info.HMTLManifestConfiguration || [];
|
|
120
|
+
if (!(configFiles instanceof Array)){
|
|
121
|
+
configFiles = [configFiles];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
for (let i = 0, l = configFiles.length; i < l; ++i){
|
|
125
|
+
let config = configFiles[i];
|
|
126
|
+
if (typeof(config) == "string"){
|
|
127
|
+
let url = this.project.url.appendingPathComponent(configFiles[i]);
|
|
128
|
+
let contents = await this.fileManager.contentsAtURL(url);
|
|
129
|
+
let json = contents.stringByDecodingUTF8();
|
|
130
|
+
config = JSON.parse(json);
|
|
131
|
+
}
|
|
132
|
+
for (let k in config){
|
|
133
|
+
let item = config[k];
|
|
134
|
+
if (item.path && item.path !== k){
|
|
135
|
+
this.filenameMap[item.path] = k;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
|
|
110
141
|
_handleNodeRequest: async function(nodeRequest, nodeResponse){
|
|
111
142
|
let statusCode = null;
|
|
112
143
|
let headers = {};
|
|
@@ -141,6 +172,12 @@ JSClass("HTMLProjectServer", JSObject, {
|
|
|
141
172
|
}
|
|
142
173
|
}
|
|
143
174
|
}
|
|
175
|
+
if (this.project.info.HTMLDocViewer){
|
|
176
|
+
if (this.filenameMap["docs" + url.path]){
|
|
177
|
+
statusCode = 302;
|
|
178
|
+
headers.Location = "/#" + url.path;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
144
181
|
if (statusCode === null){
|
|
145
182
|
if (url.pathComponents.length === 2){
|
|
146
183
|
if (url.pathComponents[1] === "index.html"){
|
|
@@ -161,7 +198,8 @@ JSClass("HTMLProjectServer", JSObject, {
|
|
|
161
198
|
headers["Cache-Control"] = "max-age=315360000"; // ~10 years
|
|
162
199
|
headers.Etag = url.lastPathComponent;
|
|
163
200
|
}
|
|
164
|
-
let
|
|
201
|
+
let path = url.pathComponents.slice(1).join("/");
|
|
202
|
+
let fileURL = this.wwwURL.appendingPathComponents((this.filenameMap[path] || path).split("/"));
|
|
165
203
|
let exists = await this.fileManager.itemExistsAtURL(fileURL);
|
|
166
204
|
if (exists){
|
|
167
205
|
let attributes = await this.fileManager.attributesOfItemAtURL(fileURL);
|
|
@@ -3,22 +3,22 @@ JSBundle.bundles['io.breakside.jskit'] = {
|
|
|
3
3
|
"Info": {
|
|
4
4
|
"JSBundleType": "node",
|
|
5
5
|
"JSBundleIdentifier": "io.breakside.jskit",
|
|
6
|
-
"JSBundleVersion": "2026.
|
|
6
|
+
"JSBundleVersion": "2026.10.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": "
|
|
13
|
+
"GitRevision": "4f9f54d7fd9b56bd8c893ac8689a8efee1958ee5"
|
|
14
14
|
},
|
|
15
15
|
"Resources": [
|
|
16
16
|
{
|
|
17
17
|
"path": "doc-default.css",
|
|
18
18
|
"ext": ".css",
|
|
19
|
-
"byte_size":
|
|
19
|
+
"byte_size": 10906,
|
|
20
20
|
"mimetype": "text/css",
|
|
21
|
-
"hash": "
|
|
21
|
+
"hash": "8e97b7b1e6c054c8490b19d2c4d64d14ad96cd3f",
|
|
22
22
|
"nodeBundlePath": "Resources/doc-default.css"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
@@ -21,6 +21,10 @@ article.doc h1,h2,h3,h4,h5,h5,b,strong{
|
|
|
21
21
|
font-weight: 600;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
article.doc h3{
|
|
25
|
+
font-size: 1em;
|
|
26
|
+
}
|
|
27
|
+
|
|
24
28
|
article.doc a{
|
|
25
29
|
text-decoration: none;
|
|
26
30
|
color: rgb(90,90,200);
|
|
@@ -213,10 +217,6 @@ article.doc > section{
|
|
|
213
217
|
margin-bottom: 40px;
|
|
214
218
|
}
|
|
215
219
|
|
|
216
|
-
article.doc > section.description h2{
|
|
217
|
-
font-size: 1em;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
220
|
article.doc > section.note{
|
|
221
221
|
display: flex;
|
|
222
222
|
flex-direction: row;
|