@openui5/sap.ui.documentation 1.145.0 → 1.146.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/THIRDPARTY.txt +7 -7
- package/package.json +7 -7
- package/src/sap/ui/documentation/.library +1 -1
- package/src/sap/ui/documentation/LightTable.js +20 -46
- package/src/sap/ui/documentation/Row.js +146 -7
- package/src/sap/ui/documentation/library.js +2 -2
- package/src/sap/ui/documentation/messagebundle_de.properties +1 -1
- package/src/sap/ui/documentation/sdk/controller/App.controller.js +1 -1
- package/src/sap/ui/documentation/sdk/controller/Code.controller.js +1 -0
- package/src/sap/ui/documentation/sdk/controller/ErrorHandler.js +1 -0
- package/src/sap/ui/documentation/sdk/controller/Sample.controller.js +10 -5
- package/src/sap/ui/documentation/sdk/controller/SubApiDetail.controller.js +487 -17
- package/src/sap/ui/documentation/sdk/controller/util/ConfigUtil.js +1 -0
- package/src/sap/ui/documentation/sdk/controller/util/CookiesConsentManager.js +1 -0
- package/src/sap/ui/documentation/sdk/controller/util/UsageTracker.js +1 -0
- package/src/sap/ui/documentation/sdk/cookieSettingsDialog/controller/CookieSettingsDialog.controller.js +1 -0
- package/src/sap/ui/documentation/sdk/thirdparty/highlight.js/highlight.js +3 -3
- package/src/sap/ui/documentation/sdk/view/SubApiDetail.view.xml +3 -17
- package/src/sap/ui/documentation/themes/base/Documentation.less +4 -4
- package/src/sap/ui/documentation/themes/base/LightTable.less +29 -0
- package/src/sap/ui/documentation/themes/sap_belize_base/Documentation.less +4 -4
- package/src/sap/ui/documentation/themes/sap_horizon_dark/Documentation.less +1 -1
package/THIRDPARTY.txt
CHANGED
|
@@ -6,31 +6,31 @@ The full text of all referenced licenses is appended at the end of this file.
|
|
|
6
6
|
|
|
7
7
|
Library: sap.f:
|
|
8
8
|
|
|
9
|
-
Component: UI5 Web Components, version: 2.
|
|
9
|
+
Component: UI5 Web Components, version: 2.19.2
|
|
10
10
|
Copyright: SAP
|
|
11
11
|
License: Apache-2.0
|
|
12
12
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
13
13
|
Contained in: src/sap.f/src/sap/f/thirdparty/**
|
|
14
14
|
|
|
15
|
-
Component: UI5 Web Components Fiori, version: 2.
|
|
15
|
+
Component: UI5 Web Components Fiori, version: 2.19.2
|
|
16
16
|
Copyright: SAP
|
|
17
17
|
License: Apache-2.0
|
|
18
18
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
19
19
|
Contained in: src/sap.f/src/sap/f/thirdparty/**
|
|
20
20
|
|
|
21
|
-
Component: UI5 Web Components Icons, version: 2.
|
|
21
|
+
Component: UI5 Web Components Icons, version: 2.19.2
|
|
22
22
|
Copyright: SAP
|
|
23
23
|
License: Apache-2.0
|
|
24
24
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
25
25
|
Contained in: src/sap.f/src/sap/f/thirdparty/**
|
|
26
26
|
|
|
27
|
-
Component: UI5 Web Components Icons Business Suite, version: 2.
|
|
27
|
+
Component: UI5 Web Components Icons Business Suite, version: 2.19.2
|
|
28
28
|
Copyright: SAP
|
|
29
29
|
License: Apache-2.0
|
|
30
30
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
31
31
|
Contained in: src/sap.f/src/sap/f/thirdparty/**
|
|
32
32
|
|
|
33
|
-
Component: UI5 Web Components Icons TNT, version: 2.
|
|
33
|
+
Component: UI5 Web Components Icons TNT, version: 2.19.2
|
|
34
34
|
Copyright: SAP
|
|
35
35
|
License: Apache-2.0
|
|
36
36
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
@@ -309,7 +309,7 @@ License: MIT
|
|
|
309
309
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/MIT.txt
|
|
310
310
|
Contained in: src/sap.ui.core/src/sap/ui/thirdparty/bignumber.js
|
|
311
311
|
|
|
312
|
-
Component: lodash, version: 4.17.
|
|
312
|
+
Component: lodash, version: 4.17.23
|
|
313
313
|
Copyright: OpenJS Foundation and other contributors
|
|
314
314
|
License: MIT
|
|
315
315
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/MIT.txt
|
|
@@ -498,7 +498,7 @@ License: Apache-2.0
|
|
|
498
498
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
499
499
|
Contained in: lib/jsdoc/ui5/plugin.js
|
|
500
500
|
|
|
501
|
-
Component: SAP Theming Base Content, version: 11.
|
|
501
|
+
Component: SAP Theming Base Content, version: 11.34.0
|
|
502
502
|
Copyright: SAP SE or an SAP affiliate company and Theming Base Content contributors
|
|
503
503
|
License: Apache-2.0
|
|
504
504
|
License Text: https://github.com/UI5/openui5/blob/master/LICENSES/Apache-2.0.txt
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openui5/sap.ui.documentation",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.146.0",
|
|
4
4
|
"description": "OpenUI5 UI Library sap.ui.documentation",
|
|
5
5
|
"author": "SAP SE (https://www.sap.com)",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"url": "https://github.com/UI5/openui5.git"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@openui5/sap.m": "1.
|
|
18
|
-
"@openui5/sap.ui.core": "1.
|
|
19
|
-
"@openui5/sap.ui.layout": "1.
|
|
20
|
-
"@openui5/themelib_sap_belize": "1.
|
|
21
|
-
"@openui5/themelib_sap_fiori_3": "1.
|
|
22
|
-
"@openui5/themelib_sap_horizon": "1.
|
|
17
|
+
"@openui5/sap.m": "1.146.0",
|
|
18
|
+
"@openui5/sap.ui.core": "1.146.0",
|
|
19
|
+
"@openui5/sap.ui.layout": "1.146.0",
|
|
20
|
+
"@openui5/themelib_sap_belize": "1.146.0",
|
|
21
|
+
"@openui5/themelib_sap_fiori_3": "1.146.0",
|
|
22
|
+
"@openui5/themelib_sap_horizon": "1.146.0"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<copyright>OpenUI5
|
|
7
7
|
* (c) Copyright 2026 SAP SE or an SAP affiliate company.
|
|
8
8
|
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.</copyright>
|
|
9
|
-
<version>1.
|
|
9
|
+
<version>1.146.0</version>
|
|
10
10
|
|
|
11
11
|
<documentation>SAPUI5 library for the Demokit 2.0.</documentation>
|
|
12
12
|
|
|
@@ -37,68 +37,42 @@ sap.ui.define(['sap/ui/core/Control'],
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
renderer: {
|
|
40
|
-
|
|
40
|
+
apiVersion: 2,
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
aControls,
|
|
42
|
+
render: function(oRm, oControl) {
|
|
43
|
+
var aRows = oControl.getRows(),
|
|
45
44
|
aColumnTitles = oControl.getColumnTitles(),
|
|
46
|
-
aLen,
|
|
47
|
-
a,
|
|
48
45
|
iLen,
|
|
49
46
|
i;
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
oRm.openStart("div", oControl);
|
|
49
|
+
oRm.class("sapUiDocLightTable");
|
|
50
|
+
oRm.class("columns-" + oControl.getColumnCount());
|
|
51
|
+
oRm.openEnd();
|
|
55
52
|
|
|
56
|
-
|
|
57
|
-
oRm.openStart("div")
|
|
58
|
-
.class("head")
|
|
59
|
-
.openEnd();
|
|
60
|
-
|
|
61
|
-
for (i = 0, iLen = aColumnTitles.length; i < iLen; i++) {
|
|
62
|
-
oRm.openStart("div")
|
|
63
|
-
.class("cell")
|
|
64
|
-
.openEnd();
|
|
65
|
-
|
|
66
|
-
oRm.text(aColumnTitles[i])
|
|
67
|
-
.close("div");
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
oRm.close("div");
|
|
71
|
-
|
|
72
|
-
// Rows
|
|
73
|
-
for (i = 0, iLen = aRows.length; i < iLen; i++) {
|
|
53
|
+
// Column titles
|
|
74
54
|
oRm.openStart("div")
|
|
75
|
-
.class("
|
|
55
|
+
.class("head")
|
|
76
56
|
.openEnd();
|
|
77
57
|
|
|
78
|
-
|
|
79
|
-
for (a = 0, aLen = aControls.length; a < aLen; a++) {
|
|
58
|
+
for (i = 0, iLen = aColumnTitles.length; i < iLen; i++) {
|
|
80
59
|
oRm.openStart("div")
|
|
81
60
|
.class("cell")
|
|
82
61
|
.openEnd();
|
|
83
62
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
.text(aColumnTitles[a] + ":")
|
|
90
|
-
.close("div");
|
|
91
|
-
}
|
|
63
|
+
oRm.text(aColumnTitles[i])
|
|
64
|
+
.close("div");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
oRm.close("div");
|
|
92
68
|
|
|
93
|
-
|
|
94
|
-
|
|
69
|
+
// Render rows (each row handles its own rendering including subRows)
|
|
70
|
+
for (i = 0, iLen = aRows.length; i < iLen; i++) {
|
|
71
|
+
oRm.renderControl(aRows[i]);
|
|
95
72
|
}
|
|
96
73
|
|
|
97
74
|
oRm.close("div");
|
|
98
75
|
}
|
|
99
|
-
|
|
100
|
-
oRm.close("div");
|
|
101
76
|
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
@@ -3,34 +3,173 @@
|
|
|
3
3
|
* (c) Copyright 2026 SAP SE or an SAP affiliate company.
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
5
|
*/
|
|
6
|
-
sap.ui.define([
|
|
7
|
-
|
|
6
|
+
sap.ui.define([
|
|
7
|
+
'sap/ui/core/Control',
|
|
8
|
+
'sap/ui/core/Icon'
|
|
9
|
+
], function(Control, Icon) {
|
|
8
10
|
"use strict";
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* @class
|
|
12
14
|
* Provides a row element for the <code>LightTable</code>.
|
|
13
|
-
* @extends sap.ui.core.
|
|
15
|
+
* @extends sap.ui.core.Control
|
|
14
16
|
* @private
|
|
15
17
|
* @ui5-restricted sdk
|
|
16
18
|
*/
|
|
17
|
-
|
|
19
|
+
var Row = Control.extend("sap.ui.documentation.Row", {
|
|
18
20
|
metadata : {
|
|
19
21
|
library: "sap.ui.documentation",
|
|
20
22
|
properties: {
|
|
21
23
|
/**
|
|
22
24
|
* Determines whether the row is visible.
|
|
23
25
|
*/
|
|
24
|
-
visible: {type: "boolean"}
|
|
26
|
+
visible: {type: "boolean", defaultValue: true},
|
|
27
|
+
/**
|
|
28
|
+
* Determines whether the row is expanded (showing subRows).
|
|
29
|
+
*/
|
|
30
|
+
expanded: {type: "boolean", defaultValue: false},
|
|
31
|
+
/**
|
|
32
|
+
* Determines whether the row can be expanded/collapsed (shows expand/collapse icon).
|
|
33
|
+
*/
|
|
34
|
+
expandable: {type: "boolean", defaultValue: false},
|
|
35
|
+
/**
|
|
36
|
+
* The name of the typedef that this parameter refers to
|
|
37
|
+
*/
|
|
38
|
+
typedefName: {type : "string", defaultValue : ""}
|
|
25
39
|
},
|
|
26
40
|
defaultAggregation : "content",
|
|
27
41
|
aggregations: {
|
|
28
42
|
/**
|
|
29
43
|
* Controls to be displayed by the <code>LightTable</code>.
|
|
30
44
|
*/
|
|
31
|
-
content: {type: "sap.ui.core.Control", multiple: true}
|
|
45
|
+
content: {type: "sap.ui.core.Control", multiple: true},
|
|
46
|
+
/**
|
|
47
|
+
* Sub-rows to be displayed when the row is expanded.
|
|
48
|
+
*/
|
|
49
|
+
subRows: {type: "sap.ui.documentation.Row", multiple: true},
|
|
50
|
+
/**
|
|
51
|
+
* Internal Icon control for the expand/collapse functionality
|
|
52
|
+
*/
|
|
53
|
+
_expandIcon: {type: "sap.ui.core.Icon", multiple: false, visibility: "hidden"}
|
|
54
|
+
},
|
|
55
|
+
events: {
|
|
56
|
+
/**
|
|
57
|
+
* Event is fired when the user clicks on the expand/collapse icon.
|
|
58
|
+
*/
|
|
59
|
+
expandToggle: {}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Creates the expand/collapse icon
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
_getExpandCollapseIcon: function() {
|
|
68
|
+
if (!this.getAggregation("_expandIcon")) {
|
|
69
|
+
var oExpandIcon = new Icon({
|
|
70
|
+
press: function() {
|
|
71
|
+
this.fireExpandToggle();
|
|
72
|
+
}.bind(this)
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Add custom classes for styling
|
|
76
|
+
oExpandIcon.addStyleClass("sapUiTinyMarginEnd").addStyleClass("sapUiDocTypedefExpandIcon");
|
|
77
|
+
|
|
78
|
+
this.setAggregation("_expandIcon", oExpandIcon);
|
|
79
|
+
|
|
80
|
+
// Update the icon appearance based on the current expanded state
|
|
81
|
+
this._updateExpandIconState();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return this.getAggregation("_expandIcon");
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Updates the expand icon state (src) based on the expanded property
|
|
89
|
+
* @private
|
|
90
|
+
*/
|
|
91
|
+
_updateExpandIconState: function() {
|
|
92
|
+
var oExpandIcon = this.getAggregation("_expandIcon");
|
|
93
|
+
|
|
94
|
+
if (oExpandIcon) {
|
|
95
|
+
var bExpanded = this.getExpanded();
|
|
96
|
+
oExpandIcon.setSrc(bExpanded ? "sap-icon://slim-arrow-down" : "sap-icon://slim-arrow-right");
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Updates the expand icon when the expanded property changes
|
|
102
|
+
*/
|
|
103
|
+
setExpanded: function(bExpanded) {
|
|
104
|
+
this.setProperty("expanded", bExpanded, true); // Suppress rerendering
|
|
105
|
+
this._updateExpandIconState();
|
|
106
|
+
return this;
|
|
107
|
+
},
|
|
108
|
+
renderer: {
|
|
109
|
+
apiVersion: 2,
|
|
110
|
+
|
|
111
|
+
render: function(oRm, oControl) {
|
|
112
|
+
var aControls = oControl.getContent(),
|
|
113
|
+
aSubRows = oControl.getSubRows(),
|
|
114
|
+
bExpanded = oControl.getExpanded(),
|
|
115
|
+
bExpandable = oControl.getExpandable(),
|
|
116
|
+
bVisible = oControl.getVisible(),
|
|
117
|
+
aLen,
|
|
118
|
+
a;
|
|
119
|
+
|
|
120
|
+
// Don't render if not visible
|
|
121
|
+
if (!bVisible) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Get column titles from parent LightTable
|
|
126
|
+
var oParent = oControl.getParent(),
|
|
127
|
+
aColumnTitles = oParent && oParent.getColumnTitles ? oParent.getColumnTitles() : [];
|
|
128
|
+
|
|
129
|
+
// Render the main row
|
|
130
|
+
oRm.openStart("div", oControl);
|
|
131
|
+
oRm.class("row");
|
|
132
|
+
if (bExpandable) {
|
|
133
|
+
oRm.class(bExpanded ? "expanded" : "collapsed");
|
|
134
|
+
}
|
|
135
|
+
oRm.openEnd();
|
|
136
|
+
|
|
137
|
+
// Render cells
|
|
138
|
+
for (a = 0, aLen = aControls.length; a < aLen; a++) {
|
|
139
|
+
oRm.openStart("div")
|
|
140
|
+
.class("cell")
|
|
141
|
+
.openEnd();
|
|
142
|
+
|
|
143
|
+
// Handle inline title (for responsive view)
|
|
144
|
+
if (a > 0 && aColumnTitles[a]) {
|
|
145
|
+
oRm.openStart("div")
|
|
146
|
+
.class("inTitle")
|
|
147
|
+
.openEnd()
|
|
148
|
+
.text(aColumnTitles[a] + ":")
|
|
149
|
+
.close("div");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Render the expand/collapse icon in the first cell if expandable
|
|
153
|
+
if (a === 0 && bExpandable) {
|
|
154
|
+
oRm.renderControl(oControl._getExpandCollapseIcon());
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
oRm.renderControl(aControls[a]);
|
|
158
|
+
oRm.close("div");
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
oRm.close("div");
|
|
162
|
+
|
|
163
|
+
// Render sub-rows if expanded
|
|
164
|
+
if (bExpanded && aSubRows.length > 0) {
|
|
165
|
+
for (var i = 0; i < aSubRows.length; i++) {
|
|
166
|
+
oRm.renderControl(aSubRows[i]);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
32
169
|
}
|
|
33
170
|
}
|
|
34
171
|
});
|
|
35
172
|
|
|
36
|
-
|
|
173
|
+
return Row;
|
|
174
|
+
|
|
175
|
+
});
|
|
@@ -25,14 +25,14 @@ sap.ui.define([
|
|
|
25
25
|
* @namespace
|
|
26
26
|
* @alias sap.ui.documentation
|
|
27
27
|
* @author SAP SE
|
|
28
|
-
* @version 1.
|
|
28
|
+
* @version 1.146.0
|
|
29
29
|
* @since 1.48
|
|
30
30
|
* @public
|
|
31
31
|
*/
|
|
32
32
|
var thisLibrary = Lib.init({
|
|
33
33
|
apiVersion: 2,
|
|
34
34
|
name : 'sap.ui.documentation',
|
|
35
|
-
version: '1.
|
|
35
|
+
version: '1.146.0',
|
|
36
36
|
dependencies : ['sap.ui.core','sap.m'],
|
|
37
37
|
types: [],
|
|
38
38
|
interfaces: [],
|
|
@@ -8,7 +8,7 @@ APP_TABHEADER_ITEM_API_REFERENCE=API-Referenz
|
|
|
8
8
|
APP_TABHEADER_ITEM_SAMPLES=Beispiele
|
|
9
9
|
APP_TABHEADER_ITEM_DEMO_APPS=Demo-Apps
|
|
10
10
|
APP_TABHEADER_ITEM_RESOURCES=Ressourcen
|
|
11
|
-
APP_TABHEADER_SUBITEM_FIORI_TOOLS=Fiori
|
|
11
|
+
APP_TABHEADER_SUBITEM_FIORI_TOOLS=SAP Fiori tools
|
|
12
12
|
APP_TABHEADER_SUBITEM_ICON_EXPLORER=Symbolexplorer
|
|
13
13
|
APP_TABHEADER_SUBITEM_UI5_INSPECTOR=UI5 Inspector
|
|
14
14
|
APP_TABHEADER_SUBITEM_UI5_CLI=UI5 CLI
|
|
@@ -1477,7 +1477,7 @@ sap.ui.define([
|
|
|
1477
1477
|
// Handle the case when the user deletes the query and the search picker is open
|
|
1478
1478
|
// Only on desktop, because on mobile we don't want to close the picker
|
|
1479
1479
|
if (!sQuery && Device.system.desktop) {
|
|
1480
|
-
if (this.oPicker.isOpen()) {
|
|
1480
|
+
if (this.oPicker && this.oPicker.isOpen()) {
|
|
1481
1481
|
this.oPicker.close();
|
|
1482
1482
|
}
|
|
1483
1483
|
|
|
@@ -35,6 +35,7 @@ sap.ui.define(
|
|
|
35
35
|
|
|
36
36
|
return SampleController.extend("sap.ui.documentation.sdk.controller.Code", {
|
|
37
37
|
constructor: function () {
|
|
38
|
+
SampleController.apply(this, arguments);
|
|
38
39
|
this.onFileEditorFileChangeDebounced = _debounce(this.onFileEditorFileChangeDebounced, 500);
|
|
39
40
|
},
|
|
40
41
|
|
|
@@ -409,10 +409,13 @@ sap.ui.define([
|
|
|
409
409
|
});
|
|
410
410
|
|
|
411
411
|
var fnLoadSettings = function(eMessage) {
|
|
412
|
+
if (!this._isMessageFromSampleIframe(eMessage)) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
412
415
|
fnCallback(eMessage);
|
|
413
416
|
window.removeEventListener("message", fnLoadSettings);
|
|
414
417
|
resolve();
|
|
415
|
-
};
|
|
418
|
+
}.bind(this);
|
|
416
419
|
|
|
417
420
|
window.addEventListener("message", fnLoadSettings);
|
|
418
421
|
|
|
@@ -680,6 +683,11 @@ sap.ui.define([
|
|
|
680
683
|
return this.byId("page");
|
|
681
684
|
},
|
|
682
685
|
|
|
686
|
+
_isMessageFromSampleIframe: function(eMessage) {
|
|
687
|
+
return eMessage.origin === this.getOwnerComponent()._sSampleIframeOrigin &&
|
|
688
|
+
eMessage.source === this._oHtmlControl.getDomRef().contentWindow;
|
|
689
|
+
},
|
|
690
|
+
|
|
683
691
|
onMessage: function(eMessage) {
|
|
684
692
|
var oModelData = this.oModel.getData();
|
|
685
693
|
|
|
@@ -687,10 +695,7 @@ sap.ui.define([
|
|
|
687
695
|
return;
|
|
688
696
|
}
|
|
689
697
|
|
|
690
|
-
if (
|
|
691
|
-
return;
|
|
692
|
-
}
|
|
693
|
-
if (eMessage.source !== this._oHtmlControl.getDomRef().contentWindow) {
|
|
698
|
+
if (!this._isMessageFromSampleIframe(eMessage)) {
|
|
694
699
|
return;
|
|
695
700
|
}
|
|
696
701
|
|
|
@@ -6,10 +6,16 @@
|
|
|
6
6
|
|
|
7
7
|
sap.ui.define([
|
|
8
8
|
"sap/ui/thirdparty/jquery",
|
|
9
|
+
"sap/base/Log",
|
|
9
10
|
"sap/ui/core/Fragment",
|
|
11
|
+
"sap/ui/documentation/sdk/controller/util/APIInfo",
|
|
10
12
|
"sap/ui/documentation/sdk/controller/BaseController",
|
|
11
13
|
"sap/ui/documentation/sdk/util/ToggleFullScreenHandler",
|
|
12
14
|
"sap/ui/documentation/sdk/model/formatter",
|
|
15
|
+
"sap/ui/documentation/Row",
|
|
16
|
+
"sap/ui/documentation/ParamText",
|
|
17
|
+
"sap/ui/documentation/JSDocType",
|
|
18
|
+
"sap/ui/documentation/JSDocText",
|
|
13
19
|
"sap/m/Image",
|
|
14
20
|
"sap/m/Label",
|
|
15
21
|
"sap/m/Link",
|
|
@@ -23,10 +29,14 @@ sap.ui.define([
|
|
|
23
29
|
"sap/m/CustomListItem",
|
|
24
30
|
"sap/m/List",
|
|
25
31
|
"sap/ui/dom/includeStylesheet",
|
|
26
|
-
"sap/ui/dom/includeScript"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
"sap/ui/dom/includeScript",
|
|
33
|
+
"sap/uxap/ObjectPageSection",
|
|
34
|
+
"sap/ui/documentation/ObjectPageSubSection",
|
|
35
|
+
"sap/ui/core/HTML"
|
|
36
|
+
], function (jQuery, Log, Fragment, APIInfo, BaseController, ToggleFullScreenHandler,
|
|
37
|
+
formatter, Row, ParamText, JSDocType, JSDocText, Image, Label, Link, Text, HBox, ObjectAttribute, ObjectStatus, Popover,
|
|
38
|
+
library, coreLibrary, CustomListItem, List, includeStylesheet, includeScript,
|
|
39
|
+
ObjectPageSection, ObjectPageSubSection, HTML) {
|
|
30
40
|
"use strict";
|
|
31
41
|
|
|
32
42
|
// shortcut for sap.m.FlexWrap
|
|
@@ -122,21 +132,56 @@ sap.ui.define([
|
|
|
122
132
|
this._oModel.setProperty("/ui5-metadata/associations", bHasSelfAssoc ? this._selfAssociations : this._allAssociations);
|
|
123
133
|
}
|
|
124
134
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
135
|
+
var sLibName = this._oEntityData.lib,
|
|
136
|
+
sLibPath = sLibName.replace(/\./g, '/'),
|
|
137
|
+
sComponentPath = this._oEntityData.name.replace(sLibName, "").replace(/^[.]/, "").replace(/\./g, '/'),
|
|
138
|
+
aSectionTypes = (this._oControlData.customSections || []).map(function(section) {
|
|
139
|
+
var sType = typeof section === 'string' ? section : section.name;
|
|
140
|
+
return {
|
|
141
|
+
type: sType,
|
|
142
|
+
property: sType + "Content",
|
|
143
|
+
displayTitle: sType.charAt(0).toUpperCase() + sType.slice(1),
|
|
144
|
+
sectionId: sType.toLowerCase(),
|
|
145
|
+
hasSubsections: section.hasSubsections || false,
|
|
146
|
+
subsections: section.subsections || null
|
|
147
|
+
};
|
|
136
148
|
});
|
|
137
|
-
}
|
|
138
149
|
|
|
139
|
-
|
|
150
|
+
var fnLoadContent = function(sUrl, sProperty) {
|
|
151
|
+
return new Promise(function(resolve) {
|
|
152
|
+
jQuery.ajax({
|
|
153
|
+
url: sUrl,
|
|
154
|
+
success: function(data) {
|
|
155
|
+
this._oModel.setProperty("/" + sProperty, data);
|
|
156
|
+
resolve(true);
|
|
157
|
+
}.bind(this),
|
|
158
|
+
error: function() { resolve(false); }
|
|
159
|
+
});
|
|
160
|
+
}.bind(this));
|
|
161
|
+
}.bind(this);
|
|
162
|
+
|
|
163
|
+
var aContentPromises = aSectionTypes.map(function(oSection) {
|
|
164
|
+
var aPromises = [];
|
|
165
|
+
var sBaseUrl = './docs/api/' + sLibPath + '/demokit/sections/' + sComponentPath + '/';
|
|
166
|
+
|
|
167
|
+
if (oSection.hasSubsections) {
|
|
168
|
+
// Load main + subsections
|
|
169
|
+
aPromises.push(fnLoadContent(sBaseUrl + oSection.type + '.html', oSection.type + "_mainContent"));
|
|
170
|
+
oSection.subsections.forEach(function(sub) {
|
|
171
|
+
aPromises.push(fnLoadContent(sBaseUrl + oSection.type + '/' + sub + '.html', oSection.type + "_" + sub + "Content"));
|
|
172
|
+
});
|
|
173
|
+
} else {
|
|
174
|
+
// Load single section
|
|
175
|
+
aPromises.push(fnLoadContent(sBaseUrl + oSection.type + '.html', oSection.property));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return Promise.all(aPromises).then(function() { return oSection; });
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
Promise.all(aContentPromises).then(function(aSections) {
|
|
182
|
+
aSections.forEach(this._createAndAddSection, this);
|
|
183
|
+
}.bind(this));
|
|
184
|
+
|
|
140
185
|
this.setModel(this._oModel);
|
|
141
186
|
|
|
142
187
|
// Build needed resources and pre-process data
|
|
@@ -305,6 +350,40 @@ sap.ui.define([
|
|
|
305
350
|
}
|
|
306
351
|
},
|
|
307
352
|
|
|
353
|
+
/**
|
|
354
|
+
* Applies syntax highlighting to a LightTable after it is re-rendered.
|
|
355
|
+
* Attaches an onAfterRendering delegate to the LightTable, applies highlighting,
|
|
356
|
+
* and then removes the delegate.
|
|
357
|
+
* @param {sap.ui.documentation.LightTable} oLightTable The LightTable control to apply highlighting to
|
|
358
|
+
* @private
|
|
359
|
+
*/
|
|
360
|
+
_applyHljsToLightTable: function(oLightTable) {
|
|
361
|
+
if (!oLightTable || !window.hljs) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
var oDelegate = {
|
|
366
|
+
onAfterRendering: function() {
|
|
367
|
+
// Find unprocessed pre elements within the LightTable's DOM
|
|
368
|
+
var oDomRef = oLightTable.getDomRef();
|
|
369
|
+
if (oDomRef) {
|
|
370
|
+
var aPreElements = oDomRef.querySelectorAll('pre:not(.hljs)');
|
|
371
|
+
if (aPreElements.length > 0) {
|
|
372
|
+
aPreElements.forEach(function(oElement) {
|
|
373
|
+
oElement.classList.add('hljs');
|
|
374
|
+
window.hljs.highlightElement(oElement);
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Remove the delegate after execution
|
|
379
|
+
oLightTable.removeEventDelegate(oDelegate);
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
// Attach the delegate to the LightTable
|
|
384
|
+
oLightTable.addEventDelegate(oDelegate);
|
|
385
|
+
},
|
|
386
|
+
|
|
308
387
|
scrollToEntity: function (sSectionId, sEntityId) {
|
|
309
388
|
|
|
310
389
|
var aFilteredSubSections,
|
|
@@ -657,6 +736,366 @@ sap.ui.define([
|
|
|
657
736
|
return this._oPopover;
|
|
658
737
|
},
|
|
659
738
|
|
|
739
|
+
/**
|
|
740
|
+
* Handles the typedef toggle event
|
|
741
|
+
* @param {sap.ui.base.Event} oEvent The event object
|
|
742
|
+
*/
|
|
743
|
+
onTypedefToggle: function(oEvent) {
|
|
744
|
+
var oRow = oEvent.getSource(),
|
|
745
|
+
oLightTable = this._findParentLightTable(oRow),
|
|
746
|
+
sTypedefName = oRow?.getTypedefName();
|
|
747
|
+
|
|
748
|
+
if (!sTypedefName || !oLightTable) {
|
|
749
|
+
return;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
if (oRow.getExpanded()) {
|
|
753
|
+
oRow.setExpanded(false);
|
|
754
|
+
|
|
755
|
+
oLightTable.invalidate();
|
|
756
|
+
this._applyHljsToLightTable(oLightTable);
|
|
757
|
+
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
if (oRow.getSubRows().length > 0) {
|
|
762
|
+
// Already loaded typedef properties, just expand
|
|
763
|
+
oRow.setExpanded(true);
|
|
764
|
+
|
|
765
|
+
oLightTable.invalidate();
|
|
766
|
+
this._applyHljsToLightTable(oLightTable);
|
|
767
|
+
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
// Find the typedef entity in the API index first
|
|
772
|
+
var oTypedefInfo = this._findTypedefInApiIndex(sTypedefName);
|
|
773
|
+
|
|
774
|
+
if (oTypedefInfo) {
|
|
775
|
+
// Fetch complete typedef data from API.json including inherited properties
|
|
776
|
+
this._collectTypedefPropertiesWithInheritance(oTypedefInfo)
|
|
777
|
+
.then(function(aTypedefProperties) {
|
|
778
|
+
// Add Row controls to the LightTable for each typedef property
|
|
779
|
+
if (aTypedefProperties && aTypedefProperties.length > 0) {
|
|
780
|
+
this._addTypedefSubRows(oRow, aTypedefProperties);
|
|
781
|
+
|
|
782
|
+
oRow.setExpanded(true);
|
|
783
|
+
oLightTable.invalidate();
|
|
784
|
+
this._applyHljsToLightTable(oLightTable);
|
|
785
|
+
}
|
|
786
|
+
}.bind(this))
|
|
787
|
+
.catch(function(oError) {
|
|
788
|
+
// Handle error silently
|
|
789
|
+
Log.error("Error loading typedef data: " + oError);
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
},
|
|
793
|
+
|
|
794
|
+
/**
|
|
795
|
+
* Collects typedef properties including inherited properties from base typedefs.
|
|
796
|
+
* Traverses the inheritance chain and concatenates all properties.
|
|
797
|
+
* @param {object} oTypedefInfo Initial typedef info from API index
|
|
798
|
+
* @returns {Promise} Promise that resolves with array of all typedef properties (own + inherited)
|
|
799
|
+
* @private
|
|
800
|
+
*/
|
|
801
|
+
_collectTypedefPropertiesWithInheritance: function(oTypedefInfo) {
|
|
802
|
+
var aInheritanceChain = [],
|
|
803
|
+
aRequiredLibs = [];
|
|
804
|
+
|
|
805
|
+
// Build the inheritance chain by traversing the extends property
|
|
806
|
+
// Also collect all required libraries for loading
|
|
807
|
+
return this._buildTypedefInheritanceChain(oTypedefInfo)
|
|
808
|
+
.then(function(oChainResult) {
|
|
809
|
+
aInheritanceChain = oChainResult.chain;
|
|
810
|
+
aRequiredLibs = oChainResult.libs;
|
|
811
|
+
|
|
812
|
+
// Generate promises for all required libraries
|
|
813
|
+
var aPromises = aRequiredLibs.map(function(sLibName) {
|
|
814
|
+
return APIInfo.getLibraryElementsJSONPromise(sLibName);
|
|
815
|
+
});
|
|
816
|
+
|
|
817
|
+
return Promise.all(aPromises);
|
|
818
|
+
})
|
|
819
|
+
.then(function(aLibResults) {
|
|
820
|
+
// Combine all library elements into one array
|
|
821
|
+
var aAllLibraryElements = [];
|
|
822
|
+
aLibResults.forEach(function(aSingleLibraryElements) {
|
|
823
|
+
aAllLibraryElements = aAllLibraryElements.concat(aSingleLibraryElements);
|
|
824
|
+
});
|
|
825
|
+
|
|
826
|
+
// Collect properties from all typedefs in the inheritance chain
|
|
827
|
+
var aAllProperties = [],
|
|
828
|
+
aPropertyNames = []; // Track property names to handle overrides
|
|
829
|
+
|
|
830
|
+
// Process inheritance chain in order (current typedef first, then base typedefs)
|
|
831
|
+
aInheritanceChain.forEach(function(sTypedefName, iIndex) {
|
|
832
|
+
var oTypedefData = this._findEntityInLibraryData(aAllLibraryElements, sTypedefName);
|
|
833
|
+
|
|
834
|
+
if (oTypedefData?.properties) {
|
|
835
|
+
oTypedefData.properties.forEach(function(oProperty) {
|
|
836
|
+
// Only add property if it's not already defined (handle overrides)
|
|
837
|
+
if (aPropertyNames.indexOf(oProperty.name) === -1) {
|
|
838
|
+
// Clone the property to avoid modifying the original
|
|
839
|
+
var oClone = jQuery.extend(true, {}, oProperty);
|
|
840
|
+
oClone.depth = 1;
|
|
841
|
+
|
|
842
|
+
// Mark inherited properties (not from the first typedef in chain)
|
|
843
|
+
if (iIndex > 0) {
|
|
844
|
+
oClone.borrowedFrom = sTypedefName;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
aAllProperties.push(oClone);
|
|
848
|
+
aPropertyNames.push(oProperty.name);
|
|
849
|
+
}
|
|
850
|
+
});
|
|
851
|
+
}
|
|
852
|
+
}.bind(this));
|
|
853
|
+
|
|
854
|
+
return aAllProperties;
|
|
855
|
+
}.bind(this));
|
|
856
|
+
},
|
|
857
|
+
|
|
858
|
+
/**
|
|
859
|
+
* Builds the inheritance chain for a typedef by following the extends property.
|
|
860
|
+
* @param {object} oTypedefInfo Initial typedef info from API index
|
|
861
|
+
* @returns {Promise} Promise that resolves with object containing chain array and libs array
|
|
862
|
+
* @private
|
|
863
|
+
*/
|
|
864
|
+
_buildTypedefInheritanceChain: function(oTypedefInfo) {
|
|
865
|
+
var aInheritanceChain = [oTypedefInfo.name],
|
|
866
|
+
aRequiredLibs = [];
|
|
867
|
+
|
|
868
|
+
// Add the initial library
|
|
869
|
+
if (oTypedefInfo.lib && aRequiredLibs.indexOf(oTypedefInfo.lib) === -1) {
|
|
870
|
+
aRequiredLibs.push(oTypedefInfo.lib);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// Load the initial typedef to get its extends property
|
|
874
|
+
return this._loadCompleteTypedefData(oTypedefInfo)
|
|
875
|
+
.then(function(oFullTypedefData) {
|
|
876
|
+
// Check if typedef has a base typedef (extends property)
|
|
877
|
+
if (!oFullTypedefData.extends) {
|
|
878
|
+
return {
|
|
879
|
+
chain: aInheritanceChain,
|
|
880
|
+
libs: aRequiredLibs
|
|
881
|
+
};
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
// Build the rest of the inheritance chain
|
|
885
|
+
return this._traverseTypedefInheritanceChain(
|
|
886
|
+
oFullTypedefData.extends,
|
|
887
|
+
aInheritanceChain,
|
|
888
|
+
aRequiredLibs
|
|
889
|
+
);
|
|
890
|
+
}.bind(this));
|
|
891
|
+
},
|
|
892
|
+
|
|
893
|
+
/**
|
|
894
|
+
* Recursively traverses the typedef inheritance chain.
|
|
895
|
+
* @param {string} sBaseTypedefName Name of the base typedef to process
|
|
896
|
+
* @param {array} aInheritanceChain Current inheritance chain array
|
|
897
|
+
* @param {array} aRequiredLibs Current required libraries array
|
|
898
|
+
* @returns {Promise} Promise that resolves with object containing chain and libs arrays
|
|
899
|
+
* @private
|
|
900
|
+
*/
|
|
901
|
+
_traverseTypedefInheritanceChain: function(sBaseTypedefName, aInheritanceChain, aRequiredLibs) {
|
|
902
|
+
// Find the base typedef in the API index
|
|
903
|
+
var oBaseTypedefInfo = this._findTypedefInApiIndex(sBaseTypedefName);
|
|
904
|
+
|
|
905
|
+
// If base typedef not found, stop traversal
|
|
906
|
+
if (!oBaseTypedefInfo) {
|
|
907
|
+
return Promise.resolve({
|
|
908
|
+
chain: aInheritanceChain,
|
|
909
|
+
libs: aRequiredLibs
|
|
910
|
+
});
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
// Add to inheritance chain
|
|
914
|
+
aInheritanceChain.push(sBaseTypedefName);
|
|
915
|
+
|
|
916
|
+
// Add library if not already included
|
|
917
|
+
if (oBaseTypedefInfo.lib && aRequiredLibs.indexOf(oBaseTypedefInfo.lib) === -1) {
|
|
918
|
+
aRequiredLibs.push(oBaseTypedefInfo.lib);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// Load the base typedef to check if it also has a parent
|
|
922
|
+
return this._loadCompleteTypedefData(oBaseTypedefInfo)
|
|
923
|
+
.then(function(oBaseTypedefData) {
|
|
924
|
+
// If this typedef also extends another, continue traversal
|
|
925
|
+
if (oBaseTypedefData.extends) {
|
|
926
|
+
return this._traverseTypedefInheritanceChain(
|
|
927
|
+
oBaseTypedefData.extends,
|
|
928
|
+
aInheritanceChain,
|
|
929
|
+
aRequiredLibs
|
|
930
|
+
);
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
// No more parents, return the complete chain
|
|
934
|
+
return {
|
|
935
|
+
chain: aInheritanceChain,
|
|
936
|
+
libs: aRequiredLibs
|
|
937
|
+
};
|
|
938
|
+
}.bind(this))
|
|
939
|
+
.catch(function() {
|
|
940
|
+
// If loading fails, return what we have so far
|
|
941
|
+
return {
|
|
942
|
+
chain: aInheritanceChain,
|
|
943
|
+
libs: aRequiredLibs
|
|
944
|
+
};
|
|
945
|
+
});
|
|
946
|
+
},
|
|
947
|
+
|
|
948
|
+
/**
|
|
949
|
+
* Adds Row controls to the LightTable for typedef properties
|
|
950
|
+
* @param {sap.ui.documentation.Row} oParentRow The parent row being expanded
|
|
951
|
+
* @param {array} aTypedefProperties Array of typedef properties to add as rows
|
|
952
|
+
* @private
|
|
953
|
+
*/
|
|
954
|
+
_addTypedefSubRows: function(oParentRow, aTypedefProperties) {
|
|
955
|
+
// Create sub-row controls for typedef properties
|
|
956
|
+
var aSubRows = aTypedefProperties.map(function(oProperty) {
|
|
957
|
+
return new Row({
|
|
958
|
+
content: [
|
|
959
|
+
new ParamText({
|
|
960
|
+
text: oProperty.name,
|
|
961
|
+
phoneText: oProperty.phoneName,
|
|
962
|
+
depth: oProperty.depth || 1,
|
|
963
|
+
optional: oProperty.optional
|
|
964
|
+
}),
|
|
965
|
+
new JSDocType({
|
|
966
|
+
typeInfo: oProperty.typeInfo
|
|
967
|
+
}),
|
|
968
|
+
new Text({
|
|
969
|
+
text: oProperty.defaultValue || "",
|
|
970
|
+
wrapping: false
|
|
971
|
+
}),
|
|
972
|
+
new JSDocText({
|
|
973
|
+
sanitizeContent: false,
|
|
974
|
+
text: this.formatter.escapeSettingsValue(oProperty.description)
|
|
975
|
+
})
|
|
976
|
+
]
|
|
977
|
+
}).addStyleClass("subrow");
|
|
978
|
+
}.bind(this));
|
|
979
|
+
|
|
980
|
+
// Add sub-rows to the parent row
|
|
981
|
+
aSubRows.forEach(function(oSubRow) {
|
|
982
|
+
oParentRow.addSubRow(oSubRow);
|
|
983
|
+
});
|
|
984
|
+
},
|
|
985
|
+
|
|
986
|
+
/**
|
|
987
|
+
* Finds the parent LightTable control of a given control
|
|
988
|
+
* @param {sap.ui.core.Control} oControl - The control to find the parent LightTable for
|
|
989
|
+
* @returns {sap.ui.documentation.LightTable|null} The parent LightTable control or null if not found
|
|
990
|
+
* @private
|
|
991
|
+
*/
|
|
992
|
+
_findParentLightTable: function(oControl) {
|
|
993
|
+
var oParent = oControl?.getParent();
|
|
994
|
+
|
|
995
|
+
while (oParent) {
|
|
996
|
+
if (oParent.isA("sap.ui.documentation.LightTable")) {
|
|
997
|
+
return oParent;
|
|
998
|
+
}
|
|
999
|
+
oParent = oParent.getParent();
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
return null;
|
|
1003
|
+
},
|
|
1004
|
+
|
|
1005
|
+
/**
|
|
1006
|
+
* Finds a typedef entity in the API index
|
|
1007
|
+
* @param {string} sTypedefName The name of the typedef to find
|
|
1008
|
+
* @returns {object} The typedef entity data or null if not found
|
|
1009
|
+
* @private
|
|
1010
|
+
*/
|
|
1011
|
+
_findTypedefInApiIndex: function(sTypedefName) {
|
|
1012
|
+
var oTypedefData = null;
|
|
1013
|
+
|
|
1014
|
+
// Recursive function to find the typedef in the API index
|
|
1015
|
+
function findSymbol(aNodes) {
|
|
1016
|
+
if (!aNodes) {
|
|
1017
|
+
return false;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
return aNodes.some(function(oNode) {
|
|
1021
|
+
var bFound = oNode.name === sTypedefName;
|
|
1022
|
+
if (bFound) {
|
|
1023
|
+
oTypedefData = oNode;
|
|
1024
|
+
return true;
|
|
1025
|
+
} else if (oNode.nodes && sTypedefName.startsWith(oNode.name + ".")) {
|
|
1026
|
+
return findSymbol(oNode.nodes);
|
|
1027
|
+
}
|
|
1028
|
+
return false;
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
// Search in the API index
|
|
1033
|
+
if (this._aApiIndex) {
|
|
1034
|
+
findSymbol(this._aApiIndex);
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
return oTypedefData;
|
|
1038
|
+
},
|
|
1039
|
+
|
|
1040
|
+
/**
|
|
1041
|
+
* Loads complete typedef data from API.json files
|
|
1042
|
+
* @param {object} oTypedefInfo Initial typedef info from API index
|
|
1043
|
+
* @returns {Promise} Promise that resolves with the complete typedef data
|
|
1044
|
+
* @private
|
|
1045
|
+
*/
|
|
1046
|
+
_loadCompleteTypedefData: function(oTypedefInfo) {
|
|
1047
|
+
// Get the library name from the typedef info
|
|
1048
|
+
var sLibName = oTypedefInfo.lib;
|
|
1049
|
+
|
|
1050
|
+
if (!sLibName) {
|
|
1051
|
+
return Promise.reject("Library name not found for typedef");
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
// Use APIInfo to load the library's API.json data
|
|
1055
|
+
return APIInfo.getLibraryElementsJSONPromise(sLibName)
|
|
1056
|
+
.then(function(aLibData) {
|
|
1057
|
+
try {
|
|
1058
|
+
// Find the complete typedef data in the library elements
|
|
1059
|
+
var oTypedefData = this._findEntityInLibraryData(aLibData, oTypedefInfo.name);
|
|
1060
|
+
|
|
1061
|
+
if (oTypedefData) {
|
|
1062
|
+
return oTypedefData;
|
|
1063
|
+
} else {
|
|
1064
|
+
return Promise.reject("Typedef not found in library data");
|
|
1065
|
+
}
|
|
1066
|
+
} catch (oProcessError) {
|
|
1067
|
+
return Promise.reject("Error processing typedef data: " + oProcessError);
|
|
1068
|
+
}
|
|
1069
|
+
}.bind(this))
|
|
1070
|
+
.catch(function(oError) {
|
|
1071
|
+
return Promise.reject("Error loading library data: " + oError);
|
|
1072
|
+
});
|
|
1073
|
+
},
|
|
1074
|
+
|
|
1075
|
+
/**
|
|
1076
|
+
* Finds an entity in library data loaded from API.json
|
|
1077
|
+
* @param {array} aLibraryData Array of library elements from API.json
|
|
1078
|
+
* @param {string} sEntityName Name of the entity to find
|
|
1079
|
+
* @returns {object} The entity data or null if not found
|
|
1080
|
+
* @private
|
|
1081
|
+
*/
|
|
1082
|
+
_findEntityInLibraryData: function(aLibraryData, sEntityName) {
|
|
1083
|
+
// Find entity in loaded libs data
|
|
1084
|
+
for (var i = 0, iLen = aLibraryData.length; i < iLen; i++) {
|
|
1085
|
+
var oLibItem = aLibraryData[i];
|
|
1086
|
+
if (oLibItem.name === sEntityName) {
|
|
1087
|
+
// Check if we are allowed to display the requested symbol
|
|
1088
|
+
// BCP: 1870269087 item may not have visibility info at all. In this case we show the item
|
|
1089
|
+
if (oLibItem.visibility === undefined || this._aAllowedMembers.indexOf(oLibItem.visibility) >= 0) {
|
|
1090
|
+
return oLibItem;
|
|
1091
|
+
} else {
|
|
1092
|
+
return null;
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
return null;
|
|
1097
|
+
},
|
|
1098
|
+
|
|
660
1099
|
/**
|
|
661
1100
|
* Builds the header layout structure.
|
|
662
1101
|
* The header displays the entity data in 3 columns
|
|
@@ -727,6 +1166,37 @@ sap.ui.define([
|
|
|
727
1166
|
}, this);
|
|
728
1167
|
},
|
|
729
1168
|
|
|
1169
|
+
/**
|
|
1170
|
+
* Creates and adds a dynamic section to the ObjectPageLayout
|
|
1171
|
+
* @param {object} oSectionConfig Section configuration object
|
|
1172
|
+
* @private
|
|
1173
|
+
*/
|
|
1174
|
+
_createAndAddSection: function(oSectionConfig) {
|
|
1175
|
+
var fnCreateSubSection = function(sProperty, sTitle) {
|
|
1176
|
+
var oHTML = new HTML({content: "{/" + sProperty + "}"});
|
|
1177
|
+
oHTML.setModel(this._oModel);
|
|
1178
|
+
return new ObjectPageSubSection(sTitle ? {title: sTitle, blocks: [oHTML]} : {blocks: [oHTML]});
|
|
1179
|
+
}.bind(this);
|
|
1180
|
+
|
|
1181
|
+
var aSubSections = [];
|
|
1182
|
+
if (oSectionConfig.hasSubsections) {
|
|
1183
|
+
aSubSections.push(fnCreateSubSection(oSectionConfig.type + "_mainContent", "Overview"));
|
|
1184
|
+
oSectionConfig.subsections.forEach(function(sub) {
|
|
1185
|
+
aSubSections.push(fnCreateSubSection(oSectionConfig.type + "_" + sub + "Content", sub));
|
|
1186
|
+
});
|
|
1187
|
+
} else {
|
|
1188
|
+
aSubSections.push(fnCreateSubSection(oSectionConfig.property));
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
var oPageSection = new ObjectPageSection({
|
|
1192
|
+
id: this.createId(oSectionConfig.sectionId),
|
|
1193
|
+
title: oSectionConfig.displayTitle,
|
|
1194
|
+
titleUppercase: false,
|
|
1195
|
+
subSections: aSubSections
|
|
1196
|
+
});
|
|
1197
|
+
oPageSection.addStyleClass("sectionContent");
|
|
1198
|
+
this._objectPage.addSection(oPageSection);
|
|
1199
|
+
},
|
|
730
1200
|
onAnnotationsLinkPress: function () {
|
|
731
1201
|
this.scrollToEntity("annotations", "Summary");
|
|
732
1202
|
},
|
|
@@ -74,6 +74,7 @@ sap.ui.define(
|
|
|
74
74
|
"sap.ui.documentation.sdk.controller.util.DefaultConsentManager",
|
|
75
75
|
{
|
|
76
76
|
constructor: function (oComponent, oConfig) {
|
|
77
|
+
BaseObject.call(this);
|
|
77
78
|
this._oCmponent = oComponent;
|
|
78
79
|
this._oConfigUtil = oComponent.getConfigUtil();
|
|
79
80
|
this._sConsentDialogComponentId = oConfig.defaultConsentDialogComponentId;
|
|
@@ -69,6 +69,7 @@ sap.ui.define(
|
|
|
69
69
|
"sap.ui.documentation.sdk.controller.util.UsageTracker",
|
|
70
70
|
{
|
|
71
71
|
constructor: function (oComponent) {
|
|
72
|
+
BaseObject.call(this);
|
|
72
73
|
this._oComponent = oComponent;
|
|
73
74
|
this._oRouter = oComponent.getRouter();
|
|
74
75
|
this._oConfig = oComponent.getConfig();
|
|
@@ -16,6 +16,7 @@ sap.ui.define([
|
|
|
16
16
|
return Controller.extend("sap.ui.documentation.sdk.cookieSettingsDialog.controller.CookieSettingsDialog", {
|
|
17
17
|
|
|
18
18
|
constructor: function() {
|
|
19
|
+
Controller.call(this);
|
|
19
20
|
this._oCookiesUtil = null;
|
|
20
21
|
this._oRootView = null;
|
|
21
22
|
this._oInitOptions = null;
|
|
@@ -998,10 +998,10 @@ var hljs = (function () {
|
|
|
998
998
|
* @param {string} message
|
|
999
999
|
*/
|
|
1000
1000
|
const deprecated = (version, message) => {
|
|
1001
|
-
if (seenDeprecations[`1.
|
|
1001
|
+
if (seenDeprecations[`1.146.0/${message}`]) return;
|
|
1002
1002
|
|
|
1003
|
-
console.log(`Deprecated as of 1.
|
|
1004
|
-
seenDeprecations[`1.
|
|
1003
|
+
console.log(`Deprecated as of 1.146.0. ${message}`);
|
|
1004
|
+
seenDeprecations[`1.146.0/${message}`] = true;
|
|
1005
1005
|
};
|
|
1006
1006
|
|
|
1007
1007
|
/* eslint-disable no-throw-literal */
|
|
@@ -248,7 +248,7 @@
|
|
|
248
248
|
columnTitles="Param,Type,Default Value,Description"
|
|
249
249
|
columnCount="4"
|
|
250
250
|
class="sapUiDocumentationParamsTable">
|
|
251
|
-
<custom:Row>
|
|
251
|
+
<custom:Row expandable="{= ${typeInfo/refersToTypedef} === true}" typedefName="{= ${typeInfo/UI5Types} ? ${typeInfo/UI5Types/0} : ${typeInfo/type} }" expandToggle="onTypedefToggle">
|
|
252
252
|
<custom:ParamText text="{name}" phoneText="{phoneName}" depth="{depth}" optional="{optional}"/>
|
|
253
253
|
<custom:JSDocType typeInfo="{parts: ['typeInfo', 'types', 'type', 'linkEnabled'], formatter: '.formatter.formatJSDocType'}"/>
|
|
254
254
|
<m:Text text="{defaultValue}" wrapping="false"/>
|
|
@@ -544,7 +544,7 @@
|
|
|
544
544
|
<template:if test="{= !!${event>parameters} && ${event>parameters}.length > 0}">
|
|
545
545
|
<custom:LightTable columnTitles="Param,Type,Description" columnCount="3">
|
|
546
546
|
<template:repeat list="{event>parameters}" var="parameter">
|
|
547
|
-
<custom:Row>
|
|
547
|
+
<custom:Row expandable="{= ${parameter>typeInfo/refersToTypedef} === true}" typedefName="{= ${parameter>typeInfo/UI5Types} ? ${parameter>typeInfo/UI5Types/0} : ${parameter>typeInfo/type} }" expandToggle="onTypedefToggle">
|
|
548
548
|
<custom:ParamText text="{parameter>name}" phoneText="{parameter>phoneName}" depth="{parameter>depth}" optional="{parameter>optional}"/>
|
|
549
549
|
<custom:JSDocType typeInfo="{parts: ['parameter>typeInfo', 'parameter>types', 'parameter>type', 'parameter>linkEnabled'], formatter: '.formatter.stringifyJSDocType'}"/>
|
|
550
550
|
<layout:VerticalLayout>
|
|
@@ -668,7 +668,7 @@
|
|
|
668
668
|
columnTitles="Param,Type,Default Value,Description"
|
|
669
669
|
class="sapUiDocumentationParamsTable">
|
|
670
670
|
<template:repeat list="{method>parameters}" var="parameter">
|
|
671
|
-
<custom:Row>
|
|
671
|
+
<custom:Row expandable="{= ${parameter>typeInfo/refersToTypedef} === true}" typedefName="{= ${parameter>typeInfo/UI5Types} ? ${parameter>typeInfo/UI5Types/0} : ${parameter>typeInfo/type} }" expandToggle="onTypedefToggle">
|
|
672
672
|
<custom:ParamText text="{parameter>name}" phoneText="{parameter>phoneName}" depth="{parameter>depth}" optional="{parameter>optional}"/>
|
|
673
673
|
<custom:JSDocType typeInfo="{parts: ['parameter>typeInfo','parameter>types'], formatter: '.formatter.stringifyJSDocType'}"/>
|
|
674
674
|
<m:Text text="{parameter>defaultValue}" wrapping="false"/>
|
|
@@ -782,20 +782,6 @@
|
|
|
782
782
|
</ObjectPageSection>
|
|
783
783
|
</template:if>
|
|
784
784
|
|
|
785
|
-
<template:if test="{data>/hasFAQ}">
|
|
786
|
-
<ObjectPageSection id="faq" title="FAQ" class="faqContent">
|
|
787
|
-
<subSections>
|
|
788
|
-
<custom:ObjectPageSubSection>
|
|
789
|
-
<custom:blocks>
|
|
790
|
-
<core:HTML id="parserId" content="{/faqContent}"/>
|
|
791
|
-
</custom:blocks>
|
|
792
|
-
</custom:ObjectPageSubSection>
|
|
793
|
-
</subSections>
|
|
794
|
-
</ObjectPageSection>
|
|
795
|
-
</template:if>
|
|
796
|
-
|
|
797
|
-
<core:ExtensionPoint name="customSections" />
|
|
798
|
-
|
|
799
785
|
</sections>
|
|
800
786
|
|
|
801
787
|
</ObjectPageLayout>
|
|
@@ -42,7 +42,7 @@ html.sap-tablet:not(.sap-desktop) {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
.
|
|
45
|
+
.sectionContent {
|
|
46
46
|
details {
|
|
47
47
|
margin: 0.8em;
|
|
48
48
|
}
|
|
@@ -67,10 +67,10 @@ html.sap-tablet:not(.sap-desktop) {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
#d4h5-main-container,
|
|
70
|
-
.
|
|
70
|
+
.sectionContent {
|
|
71
71
|
font-size: 0.875em;
|
|
72
72
|
|
|
73
|
-
&.
|
|
73
|
+
&.sectionContent pre > code {
|
|
74
74
|
font-family: monospace;
|
|
75
75
|
}
|
|
76
76
|
|
|
@@ -157,7 +157,7 @@ html.sap-tablet:not(.sap-desktop) {
|
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
&.
|
|
160
|
+
&.sectionContent h2,
|
|
161
161
|
.section.topic > .innerTitle > h2 {
|
|
162
162
|
font-size: 2em;
|
|
163
163
|
font-weight: 400;
|
|
@@ -144,6 +144,30 @@
|
|
|
144
144
|
border-bottom: solid 1px #e5e5e5;
|
|
145
145
|
border-left: solid 1px #e5e5e5;
|
|
146
146
|
border-right: solid 1px #e5e5e5;
|
|
147
|
+
|
|
148
|
+
&.subrow,
|
|
149
|
+
&.expanded {
|
|
150
|
+
background-color: #f5f5f5;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Expandable rows - display icon and ParamText inline */
|
|
154
|
+
&.collapsed,
|
|
155
|
+
&.expanded {
|
|
156
|
+
> .cell:first-child {
|
|
157
|
+
display: flex;
|
|
158
|
+
align-items: flex-start;
|
|
159
|
+
|
|
160
|
+
.sapUiDocTypedefExpandIcon {
|
|
161
|
+
margin-top: 0.25rem;
|
|
162
|
+
flex-shrink: 0;
|
|
163
|
+
color: var(--sapButton_Lite_TextColor);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.sapUiParamText {
|
|
167
|
+
flex: 1;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
147
171
|
}
|
|
148
172
|
|
|
149
173
|
.sapUiTheme-sap_belize_hcb .sapUiDocLightTable .head,
|
|
@@ -182,6 +206,11 @@
|
|
|
182
206
|
.sapUiDocLightTable .row {
|
|
183
207
|
background-color: @sapBaseColor;
|
|
184
208
|
border-bottom: solid 1px @sapPageHeader_BorderColor;
|
|
209
|
+
|
|
210
|
+
&.subrow,
|
|
211
|
+
&.expanded {
|
|
212
|
+
background-color: #282c34;
|
|
213
|
+
}
|
|
185
214
|
}
|
|
186
215
|
|
|
187
216
|
.sapUiDocLightTable .head,
|
|
@@ -42,7 +42,7 @@ html.sap-tablet:not(.sap-desktop) {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
.
|
|
45
|
+
.sectionContent {
|
|
46
46
|
details {
|
|
47
47
|
margin: 0.8em;
|
|
48
48
|
}
|
|
@@ -67,10 +67,10 @@ html.sap-tablet:not(.sap-desktop) {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
#d4h5-main-container,
|
|
70
|
-
.
|
|
70
|
+
.sectionContent {
|
|
71
71
|
font-size: 0.875em;
|
|
72
72
|
|
|
73
|
-
&.
|
|
73
|
+
&.sectionContent pre > code {
|
|
74
74
|
font-family: monospace;
|
|
75
75
|
}
|
|
76
76
|
|
|
@@ -156,7 +156,7 @@ html.sap-tablet:not(.sap-desktop) {
|
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
&.
|
|
159
|
+
&.sectionContent h2,
|
|
160
160
|
.section.topic > .innerTitle > h2 {
|
|
161
161
|
font-size: 2em;
|
|
162
162
|
font-weight: 400;
|