@openui5/sap.uxap 1.99.1 → 1.102.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/.eslintrc.json +18 -0
- package/THIRDPARTY.txt +5 -5
- package/package.json +5 -5
- package/src/sap/uxap/.library +1 -1
- package/src/sap/uxap/AnchorBar.js +16 -0
- package/src/sap/uxap/AnchorBarRenderer.js +2 -2
- package/src/sap/uxap/BlockBase.js +2 -1
- package/src/sap/uxap/BlockBaseMetadata.js +1 -1
- package/src/sap/uxap/BreadCrumbsRenderer.js +2 -2
- package/src/sap/uxap/HierarchicalSelectRenderer.js +2 -2
- package/src/sap/uxap/ObjectPageAccessibleLandmarkInfo.js +1 -1
- package/src/sap/uxap/ObjectPageDynamicHeaderContent.js +1 -1
- package/src/sap/uxap/ObjectPageDynamicHeaderTitle.js +3 -3
- package/src/sap/uxap/ObjectPageHeader.js +2 -2
- package/src/sap/uxap/ObjectPageHeaderActionButtonRenderer.js +2 -2
- package/src/sap/uxap/ObjectPageHeaderContentRenderer.js +2 -2
- package/src/sap/uxap/ObjectPageHeaderRenderer.js +2 -2
- package/src/sap/uxap/ObjectPageLayout.js +72 -98
- package/src/sap/uxap/ObjectPageLayoutABHelper.js +1 -1
- package/src/sap/uxap/ObjectPageLayoutRenderer.js +3 -8
- package/src/sap/uxap/ObjectPageLazyLoader.js +1 -1
- package/src/sap/uxap/ObjectPageSection.js +46 -1
- package/src/sap/uxap/ObjectPageSectionRenderer.js +4 -2
- package/src/sap/uxap/ObjectPageSubSection.js +5 -0
- package/src/sap/uxap/ObjectPageSubSectionRenderer.js +6 -2
- package/src/sap/uxap/ThrottledTaskHelper.js +4 -0
- package/src/sap/uxap/changeHandler/AddIFrameObjectPageLayout.js +1 -1
- package/src/sap/uxap/changeHandler/MoveObjectPageSection.js +1 -1
- package/src/sap/uxap/changeHandler/RenameObjectPageSection.js +14 -3
- package/src/sap/uxap/designtime/ObjectPageLayout.designtime.js +4 -1
- package/src/sap/uxap/library.js +20 -21
- package/src/sap/uxap/messagebundle_ja.properties +3 -3
- package/src/sap/uxap/themes/base/ObjectPageLayout.less +10 -0
- package/src/sap/uxap/themes/base/ObjectPageSection.less +1 -0
- package/src/sap/uxap/themes/base/ObjectPageSubSection.less +6 -41
package/.eslintrc.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"overrides": [
|
|
3
|
+
/*
|
|
4
|
+
* Productive code, sample and unit test code of sap.uxap has been cleaned up.
|
|
5
|
+
* No more references to the global jQuery allowed
|
|
6
|
+
*/
|
|
7
|
+
{
|
|
8
|
+
"files": [
|
|
9
|
+
"src/**/*.js",
|
|
10
|
+
"test/sap/uxap/demokit/**/*.js",
|
|
11
|
+
"test/sap/uxap/qunit/**/*.js"
|
|
12
|
+
],
|
|
13
|
+
"globals": {
|
|
14
|
+
"jQuery": "off"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
package/THIRDPARTY.txt
CHANGED
|
@@ -400,7 +400,7 @@ Contained in: src/sap.ui.mdc/test/sap/ui/mdc/sample/field/filterfieldwithoperato
|
|
|
400
400
|
|
|
401
401
|
Library: sap.ui.webc.common:
|
|
402
402
|
|
|
403
|
-
Component: UI5 Web Components, version: 1.
|
|
403
|
+
Component: UI5 Web Components, version: 1.1.2
|
|
404
404
|
Copyright: SAP
|
|
405
405
|
License: Apache-2.0
|
|
406
406
|
License Text: https://github.com/SAP/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
@@ -411,7 +411,7 @@ Contained in: src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/base/*.*
|
|
|
411
411
|
src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/icons-tnt/*.*
|
|
412
412
|
src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/icons-business-suite/*.*
|
|
413
413
|
|
|
414
|
-
Component: lit-html, version:
|
|
414
|
+
Component: lit-html, version: 2.0.1
|
|
415
415
|
Copyright: Google LLC
|
|
416
416
|
License: BSD-3-Clause
|
|
417
417
|
License Text: https://github.com/SAP/openui5/blob/master/LICENSES/BSD-3-Clause.txt
|
|
@@ -420,7 +420,7 @@ Contained in: src/sap.ui.webc.common/src/sap/ui/webc/common/thirdparty/lit-html/
|
|
|
420
420
|
|
|
421
421
|
Library: sap.ui.webc.fiori:
|
|
422
422
|
|
|
423
|
-
Component: UI5 Web Components, version: 1.
|
|
423
|
+
Component: UI5 Web Components, version: 1.1.2
|
|
424
424
|
Copyright: SAP
|
|
425
425
|
License: Apache-2.0
|
|
426
426
|
License Text: https://github.com/SAP/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
@@ -429,7 +429,7 @@ Contained in: src/sap.ui.webc.fiori/src/sap/ui/webc/fiori/thirdparty/*.*
|
|
|
429
429
|
|
|
430
430
|
Library: sap.ui.webc.main:
|
|
431
431
|
|
|
432
|
-
Component: UI5 Web Components, version: 1.
|
|
432
|
+
Component: UI5 Web Components, version: 1.1.2
|
|
433
433
|
Copyright: SAP
|
|
434
434
|
License: Apache-2.0
|
|
435
435
|
License Text: https://github.com/SAP/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
@@ -450,7 +450,7 @@ License: Apache-2.0
|
|
|
450
450
|
License Text: https://github.com/SAP/openui5/blob/master/LICENSES/Apache-2.0.txt
|
|
451
451
|
Contained in: lib/jsdoc/ui5/plugin.js
|
|
452
452
|
|
|
453
|
-
Component: SAP Theming Base Content, version: 11.1.
|
|
453
|
+
Component: SAP Theming Base Content, version: 11.1.39
|
|
454
454
|
Copyright: SAP SE or an SAP affiliate company and Theming Base Content contributors
|
|
455
455
|
License: Apache-2.0
|
|
456
456
|
License Text: https://github.com/SAP/openui5/blob/master/LICENSES/Apache-2.0.txt
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openui5/sap.uxap",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.102.0",
|
|
4
4
|
"description": "OpenUI5 UI Library sap.uxap",
|
|
5
5
|
"author": "SAP SE (https://www.sap.com)",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"url": "https://github.com/SAP/openui5.git"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@openui5/sap.f": "1.
|
|
18
|
-
"@openui5/sap.m": "1.
|
|
19
|
-
"@openui5/sap.ui.core": "1.
|
|
20
|
-
"@openui5/sap.ui.layout": "1.
|
|
17
|
+
"@openui5/sap.f": "1.102.0",
|
|
18
|
+
"@openui5/sap.m": "1.102.0",
|
|
19
|
+
"@openui5/sap.ui.core": "1.102.0",
|
|
20
|
+
"@openui5/sap.ui.layout": "1.102.0"
|
|
21
21
|
}
|
|
22
22
|
}
|
package/src/sap/uxap/.library
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
<name>sap.uxap</name>
|
|
5
5
|
<vendor>SAP SE</vendor>
|
|
6
|
-
<version>1.
|
|
6
|
+
<version>1.102.0</version>
|
|
7
7
|
<copyright>OpenUI5
|
|
8
8
|
* (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
|
|
9
9
|
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.</copyright>
|
|
@@ -640,6 +640,22 @@ sap.ui.define([
|
|
|
640
640
|
}
|
|
641
641
|
};
|
|
642
642
|
|
|
643
|
+
/**
|
|
644
|
+
* Scrolls to the currently selected Section tab, when the header titles is snapped/unsnapped
|
|
645
|
+
*
|
|
646
|
+
* @public
|
|
647
|
+
*/
|
|
648
|
+
AnchorBar.prototype.scrollToCurrentlySelectedSection = function () {
|
|
649
|
+
var sSelectedButton = this.getSelectedButton(),
|
|
650
|
+
oSelectedButton = sap.ui.getCore().byId(sSelectedButton),
|
|
651
|
+
sSelectedSectionId;
|
|
652
|
+
|
|
653
|
+
if (oSelectedButton) {
|
|
654
|
+
sSelectedSectionId = oSelectedButton.data("sectionId");
|
|
655
|
+
this.scrollToSection(sSelectedSectionId, 0);
|
|
656
|
+
}
|
|
657
|
+
};
|
|
658
|
+
|
|
643
659
|
// use type 'object' because Metamodel doesn't know ScrollEnablement
|
|
644
660
|
/**
|
|
645
661
|
* Returns an sap.ui.core.delegate.ScrollEnablement object used to handle scrolling.
|
|
@@ -9,8 +9,8 @@ sap.ui.define(["sap/m/ToolbarRenderer", "sap/ui/core/Renderer", "sap/m/BarInPage
|
|
|
9
9
|
"use strict";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* @
|
|
12
|
+
* ObjectPageRenderer renderer.
|
|
13
|
+
* @namespace
|
|
14
14
|
*/
|
|
15
15
|
var AnchorBarRenderer = Renderer.extend(ToolbarRenderer);
|
|
16
16
|
|
|
@@ -378,6 +378,7 @@ sap.ui.define([
|
|
|
378
378
|
/**
|
|
379
379
|
* Set the column layout for this particular block.
|
|
380
380
|
* @param {string} sLayout The column layout to apply to the control
|
|
381
|
+
* @returns {*} this
|
|
381
382
|
* @public
|
|
382
383
|
*/
|
|
383
384
|
BlockBase.prototype.setColumnLayout = function (sLayout) {
|
|
@@ -386,7 +387,7 @@ sap.ui.define([
|
|
|
386
387
|
/*the parent subsection needs to recalculate block layout data
|
|
387
388
|
based on the changed block column layout */
|
|
388
389
|
}
|
|
389
|
-
this.setProperty("columnLayout", sLayout);
|
|
390
|
+
return this.setProperty("columnLayout", sLayout);
|
|
390
391
|
};
|
|
391
392
|
|
|
392
393
|
/**
|
|
@@ -9,8 +9,8 @@ sap.ui.define(["sap/m/SelectRenderer", "sap/ui/core/Renderer"
|
|
|
9
9
|
"use strict";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* @
|
|
12
|
+
* ObjectPageRenderer renderer.
|
|
13
|
+
* @namespace
|
|
14
14
|
*/
|
|
15
15
|
var HierarchicalSelectRenderer = Renderer.extend(SelectRenderer);
|
|
16
16
|
HierarchicalSelectRenderer.apiVersion = 2;
|
|
@@ -42,7 +42,7 @@ sap.ui.define([
|
|
|
42
42
|
* @implements sap.uxap.IHeaderTitle
|
|
43
43
|
*
|
|
44
44
|
* @author SAP SE
|
|
45
|
-
* @version 1.
|
|
45
|
+
* @version 1.102.0
|
|
46
46
|
*
|
|
47
47
|
* @constructor
|
|
48
48
|
* @public
|
|
@@ -148,8 +148,8 @@ sap.ui.define([
|
|
|
148
148
|
|
|
149
149
|
/**
|
|
150
150
|
* Required by the {@link sap.uxap.IHeaderTitle} interface.
|
|
151
|
-
* @param {
|
|
152
|
-
* @param {object} change event of child-element that brought the need to adapt the headerTitle layout
|
|
151
|
+
* @param {jQuery} $headerDomRef reference to the header dom element
|
|
152
|
+
* @param {object} oEvent change event of child-element that brought the need to adapt the headerTitle layout
|
|
153
153
|
* @private
|
|
154
154
|
*/
|
|
155
155
|
ObjectPageDynamicHeaderTitle.prototype._adaptObjectPageHeaderIndentifierLine = function ($headerDomRef, oEvent) {
|
|
@@ -1045,8 +1045,8 @@ sap.ui.define([
|
|
|
1045
1045
|
* Finds the sub-element with the given <code>sId</code> contained
|
|
1046
1046
|
* within <code>$headerDomRef</code>
|
|
1047
1047
|
*
|
|
1048
|
-
* @param {
|
|
1049
|
-
* @param {string} the id of the element to be found
|
|
1048
|
+
* @param {jQuery} $headerDomRef reference to the header dom element
|
|
1049
|
+
* @param {string} sId the id of the element to be found
|
|
1050
1050
|
*
|
|
1051
1051
|
* Returns the jQuery reference to the dom element with the given sId
|
|
1052
1052
|
* @private
|
|
@@ -9,8 +9,8 @@ sap.ui.define(["sap/m/ButtonRenderer", "sap/ui/core/Renderer"],
|
|
|
9
9
|
"use strict";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* @
|
|
12
|
+
* ObjectPageRenderer renderer.
|
|
13
|
+
* @namespace
|
|
14
14
|
*/
|
|
15
15
|
var ObjectPageHeaderActionButtonRenderer = Renderer.extend(ButtonRenderer);
|
|
16
16
|
|
|
@@ -32,7 +32,6 @@ sap.ui.define([
|
|
|
32
32
|
"sap/base/util/isEmptyObject",
|
|
33
33
|
"sap/base/util/merge",
|
|
34
34
|
"sap/ui/events/KeyCodes",
|
|
35
|
-
"sap/ui/events/F6Navigation",
|
|
36
35
|
"sap/ui/dom/getFirstEditableInput",
|
|
37
36
|
"sap/ui/core/theming/Parameters",
|
|
38
37
|
'sap/ui/dom/units/Rem'
|
|
@@ -63,7 +62,6 @@ sap.ui.define([
|
|
|
63
62
|
isEmptyObject,
|
|
64
63
|
merge,
|
|
65
64
|
KeyCodes,
|
|
66
|
-
F6Navigation,
|
|
67
65
|
getFirstEditableInput,
|
|
68
66
|
Parameters,
|
|
69
67
|
DomUnitsRem
|
|
@@ -826,7 +824,7 @@ sap.ui.define([
|
|
|
826
824
|
* Snaps the header
|
|
827
825
|
* and toggles the state of the title and the anchorBar accordingly
|
|
828
826
|
*
|
|
829
|
-
* @param bAppendHeaderToContent
|
|
827
|
+
* @param {boolean} bAppendHeaderToContent - determines if the header should be snapped
|
|
830
828
|
* with or without scroll:
|
|
831
829
|
*
|
|
832
830
|
* (1) If the <code>bAppendHeaderToContent</code> is <code>true</code>, then the
|
|
@@ -882,7 +880,7 @@ sap.ui.define([
|
|
|
882
880
|
* Expands the header
|
|
883
881
|
* and toggles the state of the title and the anchorBar accordingly
|
|
884
882
|
*
|
|
885
|
-
* @param bAppendHeaderToTitle
|
|
883
|
+
* @param {boolean} bAppendHeaderToTitle - determines if the header should be in the
|
|
886
884
|
* scrollable content-area or in the non-scrollable title-area
|
|
887
885
|
*
|
|
888
886
|
* @private
|
|
@@ -1137,23 +1135,8 @@ sap.ui.define([
|
|
|
1137
1135
|
|
|
1138
1136
|
this._ensureCorrectParentHeight();
|
|
1139
1137
|
|
|
1140
|
-
if (this._$sectionsContainer) {
|
|
1141
|
-
this._$sectionsContainer.off("focusout");
|
|
1142
|
-
this._$sectionsContainer.off("focusin");
|
|
1143
|
-
}
|
|
1144
|
-
|
|
1145
1138
|
this._cacheDomElements();
|
|
1146
1139
|
|
|
1147
|
-
if (this._$sectionsContainer) {
|
|
1148
|
-
this._$sectionsContainer.on("focusin", function () {
|
|
1149
|
-
this._skipToNextFastGroup = true;
|
|
1150
|
-
}.bind(this));
|
|
1151
|
-
|
|
1152
|
-
this._$sectionsContainer.on("focusout", function () {
|
|
1153
|
-
this._skipToNextFastGroup = false;
|
|
1154
|
-
}.bind(this));
|
|
1155
|
-
}
|
|
1156
|
-
|
|
1157
1140
|
if (this._hasDynamicTitle()) {
|
|
1158
1141
|
this.addStyleClass("sapUxAPObjectPageHasDynamicTitle");
|
|
1159
1142
|
}
|
|
@@ -1481,12 +1464,17 @@ sap.ui.define([
|
|
|
1481
1464
|
*
|
|
1482
1465
|
* The section can either be given by itself or by its id.
|
|
1483
1466
|
*
|
|
1484
|
-
*
|
|
1485
|
-
*
|
|
1467
|
+
* If left unspecified, then the page automatically sets
|
|
1468
|
+
* the value to the first visible section before rendering.
|
|
1469
|
+
* The value never remains empty because <code>sap.uxap.ObjectPageLayout</code> should
|
|
1470
|
+
* always have one of its sections selected (unless it has 0 visible sections).
|
|
1471
|
+
*
|
|
1472
|
+
* <b>Note:</b> Updating the <code>selectedSection</code> with a value of <code>null</code>
|
|
1473
|
+
* resets the <code>selectedSection</code> to the first visible section and scrolls the page to the top.
|
|
1486
1474
|
*
|
|
1487
1475
|
* @param {string | sap.uxap.ObjectPageSection} sId
|
|
1488
1476
|
* The ID or the section instance that should be selected
|
|
1489
|
-
* Note that <code>
|
|
1477
|
+
* Note that <code>undefined</code> is not a valid argument
|
|
1490
1478
|
* @return {this} Returns <code>this</code> to allow method chaining
|
|
1491
1479
|
* @public
|
|
1492
1480
|
*/
|
|
@@ -1519,6 +1507,7 @@ sap.ui.define([
|
|
|
1519
1507
|
//but we still need to save the selectedSection value
|
|
1520
1508
|
vClosestSection = ObjectPageSection._getClosestSection(sId);
|
|
1521
1509
|
sSectionIdToSet = (vClosestSection instanceof ObjectPageSection) ? vClosestSection.getId() : vClosestSection;
|
|
1510
|
+
this.setDirectScrollingToSection(sSectionIdToSet);
|
|
1522
1511
|
return this.setAssociation("selectedSection", sSectionIdToSet, true);
|
|
1523
1512
|
};
|
|
1524
1513
|
|
|
@@ -1578,7 +1567,6 @@ sap.ui.define([
|
|
|
1578
1567
|
this._$stickyHeaderContent = this.$("stickyHeaderContent");
|
|
1579
1568
|
this._$contentContainer = this.$("scroll");
|
|
1580
1569
|
this._$sectionsContainer = this.$("sectionsContainer");
|
|
1581
|
-
this._$skipFastGroupAnchor = this.$("skipFastGroupAnchor");
|
|
1582
1570
|
|
|
1583
1571
|
// BCP 1870201875: explicitly set the latest scrollContainer dom ref
|
|
1584
1572
|
// (as the scroller obtains the latest scrollContainer dom ref in a LATER hook, which fails in conditions detailed in BCP 1870201875)
|
|
@@ -1600,7 +1588,8 @@ sap.ui.define([
|
|
|
1600
1588
|
* @private
|
|
1601
1589
|
*/
|
|
1602
1590
|
ObjectPageLayout.prototype._toggleHeaderTitle = function (bExpand, bUserInteraction) {
|
|
1603
|
-
var oHeaderTitle = this.getHeaderTitle()
|
|
1591
|
+
var oHeaderTitle = this.getHeaderTitle(),
|
|
1592
|
+
oAnchorBar = this._oABHelper._getAnchorBar();
|
|
1604
1593
|
|
|
1605
1594
|
// note that <code>this._$titleArea</code> is the placeholder [of the sticky area] where both the header title and header content are placed
|
|
1606
1595
|
if (this._$titleArea.length) {
|
|
@@ -1614,6 +1603,8 @@ sap.ui.define([
|
|
|
1614
1603
|
} else {
|
|
1615
1604
|
oHeaderTitle && oHeaderTitle.snap(bUserInteraction);
|
|
1616
1605
|
}
|
|
1606
|
+
|
|
1607
|
+
oAnchorBar.scrollToCurrentlySelectedSection();
|
|
1617
1608
|
};
|
|
1618
1609
|
|
|
1619
1610
|
/**
|
|
@@ -1714,6 +1705,12 @@ sap.ui.define([
|
|
|
1714
1705
|
|
|
1715
1706
|
}, this);
|
|
1716
1707
|
|
|
1708
|
+
if (iVisibleSubSections > 1) {
|
|
1709
|
+
aSubSections.forEach(function(oSubSection) {
|
|
1710
|
+
oSubSection._setBorrowedTitleDomId("");
|
|
1711
|
+
});
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1717
1714
|
//rule noVisibleSubSection: If a section has no content (or only empty subsections) the section will be hidden.
|
|
1718
1715
|
if (iVisibleSubSections == 0) {
|
|
1719
1716
|
oSection._setInternalVisible(false, bInvalidate);
|
|
@@ -1833,37 +1830,6 @@ sap.ui.define([
|
|
|
1833
1830
|
return this;
|
|
1834
1831
|
};
|
|
1835
1832
|
|
|
1836
|
-
/**
|
|
1837
|
-
* Handler for F6
|
|
1838
|
-
*
|
|
1839
|
-
* @param {Object} oEvent - The event object
|
|
1840
|
-
*/
|
|
1841
|
-
ObjectPageLayout.prototype.onsapskipforward = function(oEvent) {
|
|
1842
|
-
if (this._skipToNextFastGroup) {
|
|
1843
|
-
this._handleGroupNavigation(oEvent, true);
|
|
1844
|
-
}
|
|
1845
|
-
};
|
|
1846
|
-
|
|
1847
|
-
/**
|
|
1848
|
-
* Handler for Shift + F6
|
|
1849
|
-
*
|
|
1850
|
-
* @param {Object} oEvent - The event object
|
|
1851
|
-
*/
|
|
1852
|
-
ObjectPageLayout.prototype.onsapskipback = function(oEvent) {
|
|
1853
|
-
if (this._skipToNextFastGroup) {
|
|
1854
|
-
this._handleGroupNavigation(oEvent, false);
|
|
1855
|
-
}
|
|
1856
|
-
};
|
|
1857
|
-
|
|
1858
|
-
ObjectPageLayout.prototype._handleGroupNavigation = function (oEvent, bForward) {
|
|
1859
|
-
var oSettings = {
|
|
1860
|
-
target: bForward ? this._$skipFastGroupAnchor[0] : this._$sectionsContainer[0]
|
|
1861
|
-
};
|
|
1862
|
-
|
|
1863
|
-
oEvent.type = "keydown";
|
|
1864
|
-
F6Navigation.handleF6GroupNavigation(oEvent, oSettings);
|
|
1865
|
-
};
|
|
1866
|
-
|
|
1867
1833
|
/**
|
|
1868
1834
|
* Sets a new section to be displayed as currently selected tab
|
|
1869
1835
|
* @param oSection
|
|
@@ -2017,6 +1983,8 @@ sap.ui.define([
|
|
|
2017
1983
|
|
|
2018
1984
|
this._applyUxRules(true);
|
|
2019
1985
|
|
|
1986
|
+
this._requestAdjustLayout(true);
|
|
1987
|
+
|
|
2020
1988
|
/* reset the selected section,
|
|
2021
1989
|
as the previously selected section may not be available anymore,
|
|
2022
1990
|
as it might have been deleted, or emptied, or set to hidden in the previous step */
|
|
@@ -2030,19 +1998,14 @@ sap.ui.define([
|
|
|
2030
1998
|
this._setCurrentTabSection(oSelectedSection);
|
|
2031
1999
|
this._bAllContentFitsContainer = this._hasSingleVisibleFullscreenSubSection(oSelectedSection);
|
|
2032
2000
|
}
|
|
2033
|
-
this.
|
|
2034
|
-
.
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
if (!this._isClosestScrolledSection(sSelectedSectionId) || this._oScroller._$Container.is(":animated")) {
|
|
2042
|
-
// then change the selection to match the correct section
|
|
2043
|
-
this.scrollToSection(sSelectedSectionId, null, 0, false, true /* redirect scroll */);
|
|
2044
|
-
}
|
|
2045
|
-
}.bind(this));
|
|
2001
|
+
if (this.getEnableLazyLoading() && this._oLazyLoading) {
|
|
2002
|
+
this._oLazyLoading.doLazyLoading();
|
|
2003
|
+
}
|
|
2004
|
+
// if the current scroll position is not at the selected section OR the ScrollEnablement is still scrolling due to an animation
|
|
2005
|
+
if (!this._isClosestScrolledSection(sSelectedSectionId) || (this._oScroller._$Container && this._oScroller._$Container.is(":animated"))) {
|
|
2006
|
+
// then change the selection to match the correct section
|
|
2007
|
+
this.scrollToSection(sSelectedSectionId, null, 0, false, true /* redirect scroll */);
|
|
2008
|
+
}
|
|
2046
2009
|
}
|
|
2047
2010
|
};
|
|
2048
2011
|
|
|
@@ -2535,8 +2498,9 @@ sap.ui.define([
|
|
|
2535
2498
|
this._aSectionBases.forEach(function (oSectionBase) {
|
|
2536
2499
|
var oInfo = this._oSectionInfo[oSectionBase.getId()],
|
|
2537
2500
|
$this = oSectionBase.$(),
|
|
2501
|
+
bPromoted = false,
|
|
2538
2502
|
oSection,
|
|
2539
|
-
|
|
2503
|
+
iSectionsTopMargin;
|
|
2540
2504
|
|
|
2541
2505
|
if (!oInfo /* sectionBase is visible */ || !$this.length) {
|
|
2542
2506
|
return;
|
|
@@ -2550,7 +2514,7 @@ sap.ui.define([
|
|
|
2550
2514
|
|
|
2551
2515
|
//calculate the scrollTop value to get the section title at the bottom of the header
|
|
2552
2516
|
//performance improvements possible here as .position() is costly
|
|
2553
|
-
var realTop = $this.
|
|
2517
|
+
var realTop = library.Utilities.getChildPosition($this, this._$contentContainer).top;
|
|
2554
2518
|
|
|
2555
2519
|
//the amount of scrolling required is the distance between their position().top and the bottom of the anchorBar
|
|
2556
2520
|
oInfo.positionTop = Math.ceil(realTop);
|
|
@@ -2613,8 +2577,9 @@ sap.ui.define([
|
|
|
2613
2577
|
bParentIsFirstVisibleSection = bUseIconTabBar /* there is only single section per tab */ || (oSectionBase.getParent() === this._oFirstVisibleSection);
|
|
2614
2578
|
bIsFirstVisibleSubSection = bParentIsFirstVisibleSection && (iSubSectionIndex === 0); /* index of *visible* subSections is first */
|
|
2615
2579
|
bIsFullscreenSection = oSectionBase.hasStyleClass(ObjectPageSubSection.FIT_CONTAINER_CLASS);
|
|
2580
|
+
iSectionsTopMargin = oSection && oSection.$().length ? parseInt(oSection.$().css("marginTop")) : 0;
|
|
2616
2581
|
|
|
2617
|
-
oSectionBase._setHeight(this._computeSubSectionHeight(bIsFirstVisibleSubSection, bIsFullscreenSection, Math.ceil(realTop), iSectionsContainerOffsetTop));
|
|
2582
|
+
oSectionBase._setHeight(this._computeSubSectionHeight(bIsFirstVisibleSubSection, bIsFullscreenSection, Math.ceil(realTop), iSectionsContainerOffsetTop, iSectionsTopMargin));
|
|
2618
2583
|
}
|
|
2619
2584
|
|
|
2620
2585
|
}, this);
|
|
@@ -2671,10 +2636,16 @@ sap.ui.define([
|
|
|
2671
2636
|
|
|
2672
2637
|
this._setSectionInfoIsDirty(false);
|
|
2673
2638
|
|
|
2639
|
+
// if a scroll event was fired *before* the delayed execution of <code>_updateScreenHeightSectionBasesAndSpacer</code>
|
|
2640
|
+
// => wrong section may have been selected in <code>_updateSelectionOnScroll</code>
|
|
2641
|
+
// => update the selection using the newly updated DOM positions and the current scrollTop
|
|
2642
|
+
this._updateSelectionOnScroll(this._$opWrapper.scrollTop());
|
|
2643
|
+
|
|
2674
2644
|
return true; // return success flag
|
|
2675
2645
|
};
|
|
2676
2646
|
|
|
2677
|
-
ObjectPageLayout.prototype._computeSubSectionHeight = function(bFirstVisibleSubSection, bFullscreenSection,
|
|
2647
|
+
ObjectPageLayout.prototype._computeSubSectionHeight = function(bFirstVisibleSubSection, bFullscreenSection,
|
|
2648
|
+
iSubSectionOffsetTop, iSectionsContainerOffsetTop, iSectionsTopMargin) {
|
|
2678
2649
|
|
|
2679
2650
|
var iSectionsContainerHeight,
|
|
2680
2651
|
iRemainingSectionContentHeight;
|
|
@@ -2699,8 +2670,8 @@ sap.ui.define([
|
|
|
2699
2670
|
|
|
2700
2671
|
if (this._bAllContentFitsContainer) {
|
|
2701
2672
|
// if we have a single fullscreen subsection [that takes the entire available height within the sections container]
|
|
2702
|
-
// => subtract the heights above and bellow the subSection to *avoid having a scrollbar
|
|
2703
|
-
iRemainingSectionContentHeight = (iSubSectionOffsetTop - iSectionsContainerOffsetTop) + this.iFooterHeight;
|
|
2673
|
+
// => subtract the heights above and bellow the subSection to *avoid having a scrollbar*, having in mind the top margin of the Section
|
|
2674
|
+
iRemainingSectionContentHeight = (iSubSectionOffsetTop - iSectionsContainerOffsetTop) + iSectionsTopMargin + this.iFooterHeight;
|
|
2704
2675
|
iSectionsContainerHeight -= iRemainingSectionContentHeight;
|
|
2705
2676
|
}
|
|
2706
2677
|
|
|
@@ -2753,7 +2724,7 @@ sap.ui.define([
|
|
|
2753
2724
|
var bIsStickyMode = this._bStickyAnchorBar || this._bHeaderInTitleArea; // get current mode
|
|
2754
2725
|
var iLastSectionPositionTop = this._getSectionPositionTop(oLastVisibleSubSection, bIsStickyMode); /* we need to get the position in the current mode */
|
|
2755
2726
|
|
|
2756
|
-
return this._$spacer.position().top - iLastSectionPositionTop;
|
|
2727
|
+
return Math.ceil(this._$spacer.position().top) - iLastSectionPositionTop;
|
|
2757
2728
|
};
|
|
2758
2729
|
|
|
2759
2730
|
ObjectPageLayout.prototype._getStickyAreaHeight = function(bIsStickyMode) {
|
|
@@ -3004,9 +2975,9 @@ sap.ui.define([
|
|
|
3004
2975
|
};
|
|
3005
2976
|
|
|
3006
2977
|
ObjectPageLayout.prototype._onUpdateContentSize = function (oEvent) {
|
|
3007
|
-
var
|
|
3008
|
-
|
|
3009
|
-
|
|
2978
|
+
var oSize = oEvent.size;
|
|
2979
|
+
|
|
2980
|
+
this.iContentHeight = oSize.height;
|
|
3010
2981
|
|
|
3011
2982
|
if (oSize.height === 0 || oSize.width === 0) {
|
|
3012
2983
|
Log.info("ObjectPageLayout :: not triggering calculations if height or width is 0");
|
|
@@ -3019,17 +2990,18 @@ sap.ui.define([
|
|
|
3019
2990
|
|
|
3020
2991
|
this._adjustHeaderHeights();
|
|
3021
2992
|
this._requestAdjustLayout(true); // call adjust layout to calculate the new section sizes
|
|
2993
|
+
};
|
|
3022
2994
|
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
// a new section may become selected during that scroll;
|
|
3027
|
-
// problem if this happened BEFORE _requestAdjustLayout executed => wrong section may have been selected
|
|
3028
|
-
// solution implemented bellow is to ensure that scroll handler is called with the latest scrollTop => we ensure the correct section is selected
|
|
3029
|
-
iScrollTop = this._$opWrapper.scrollTop();
|
|
3030
|
-
this._updateSelectionOnScroll(iScrollTop);
|
|
2995
|
+
ObjectPageLayout.prototype.triggerPendingLayoutUpdates = function () {
|
|
2996
|
+
if (this._hasPendingLayoutUpdate()) {
|
|
2997
|
+
this._requestAdjustLayout(true);
|
|
3031
2998
|
}
|
|
2999
|
+
};
|
|
3032
3000
|
|
|
3001
|
+
ObjectPageLayout.prototype._hasPendingLayoutUpdate = function () {
|
|
3002
|
+
return this._oLayoutTask && this._oLayoutTask.isPending()
|
|
3003
|
+
// pending resize notification that will trigger the due layout update on resize
|
|
3004
|
+
|| (this._$contentContainer.length && this._$contentContainer.get(0).offsetHeight !== this.iContentHeight);
|
|
3033
3005
|
};
|
|
3034
3006
|
|
|
3035
3007
|
/**
|
|
@@ -3209,7 +3181,7 @@ sap.ui.define([
|
|
|
3209
3181
|
var iScrollTop = Math.max(Math.ceil(oEvent.target.scrollTop), 0), // top of the visible page
|
|
3210
3182
|
$wrapper = this._$opWrapper.length && this._$opWrapper[0],
|
|
3211
3183
|
$spacer = this._$spacer.length && this._$spacer[0],
|
|
3212
|
-
iSpacerHeight = $spacer.
|
|
3184
|
+
iSpacerHeight = this._$spacer.height(),
|
|
3213
3185
|
iPageHeight,
|
|
3214
3186
|
oHeader = this.getHeaderTitle(),
|
|
3215
3187
|
bShouldStick = this._shouldSnapHeaderOnScroll(iScrollTop),
|
|
@@ -3319,10 +3291,12 @@ sap.ui.define([
|
|
|
3319
3291
|
* @param iScrollTop
|
|
3320
3292
|
* @private
|
|
3321
3293
|
*/
|
|
3322
|
-
|
|
3294
|
+
ObjectPageLayout.prototype._updateSelectionOnScroll = function(iScrollTop) {
|
|
3323
3295
|
|
|
3324
3296
|
var iPageHeight = this.iScreenHeight,
|
|
3325
3297
|
sClosestId,
|
|
3298
|
+
oClosestSection,
|
|
3299
|
+
sClosestSectionId,
|
|
3326
3300
|
sClosestSubSectionId;
|
|
3327
3301
|
|
|
3328
3302
|
if (iPageHeight === 0) {
|
|
@@ -3331,6 +3305,8 @@ sap.ui.define([
|
|
|
3331
3305
|
|
|
3332
3306
|
//find the currently scrolled section = where position - iScrollTop is closest to 0
|
|
3333
3307
|
sClosestId = this._getClosestScrolledSectionBaseId(iScrollTop, iPageHeight);
|
|
3308
|
+
oClosestSection = ObjectPageSection._getClosestSection(sClosestId);
|
|
3309
|
+
sClosestSectionId = oClosestSection ? oClosestSection.getId() : null;
|
|
3334
3310
|
sClosestSubSectionId = this._getClosestScrolledSectionBaseId(iScrollTop, iPageHeight, true /* subSections only */);
|
|
3335
3311
|
|
|
3336
3312
|
if (sClosestId) {
|
|
@@ -3350,13 +3326,13 @@ sap.ui.define([
|
|
|
3350
3326
|
// then we do not want to process intermediate sections (i.e. sections between scroll-start section and scroll-destination sections)
|
|
3351
3327
|
// so if current section is not destination section
|
|
3352
3328
|
// then no need to proceed further
|
|
3353
|
-
if (sDestinationSectionId && sDestinationSectionId !==
|
|
3329
|
+
if (sDestinationSectionId && sDestinationSectionId !== sClosestSectionId) {
|
|
3354
3330
|
return;
|
|
3355
3331
|
}
|
|
3356
3332
|
this.clearDirectScrollingToSection();
|
|
3357
3333
|
|
|
3358
3334
|
this._setAsCurrentSection(sClosestId);
|
|
3359
|
-
} else if (
|
|
3335
|
+
} else if (sClosestSectionId === this.getDirectScrollingToSection()) { //we are already in the destination section
|
|
3360
3336
|
this.clearDirectScrollingToSection();
|
|
3361
3337
|
}
|
|
3362
3338
|
|
|
@@ -3433,10 +3409,7 @@ sap.ui.define([
|
|
|
3433
3409
|
|
|
3434
3410
|
// on desktop/tablet, skip subsections
|
|
3435
3411
|
// BCP 1680331690. Should skip subsections that are in a section with lower importance, which makes them hidden.
|
|
3436
|
-
section =
|
|
3437
|
-
if (!section) {
|
|
3438
|
-
return;
|
|
3439
|
-
}
|
|
3412
|
+
section = oInfo.sectionReference;
|
|
3440
3413
|
sectionParent = section.getParent();
|
|
3441
3414
|
isParentHiddenSection = sectionParent instanceof ObjectPageSection && sectionParent._getIsHidden();
|
|
3442
3415
|
|
|
@@ -3473,16 +3446,15 @@ sap.ui.define([
|
|
|
3473
3446
|
// current section/subsection is inside the view port
|
|
3474
3447
|
if (oInfo.positionTop <= iScrollPageBottom && iScrollTop <= oInfo.positionBottom) {
|
|
3475
3448
|
// scrolling position is over current section/subsection
|
|
3476
|
-
if (oInfo.positionTop <= iScrollTop && oInfo.positionBottom > iScrollTop) {
|
|
3449
|
+
if (oInfo.positionTop <= iScrollTop + 1 && oInfo.positionBottom > iScrollTop) {
|
|
3477
3450
|
sClosestId = sId;
|
|
3478
|
-
return false;
|
|
3479
3451
|
}
|
|
3480
3452
|
}
|
|
3481
3453
|
}
|
|
3482
3454
|
|
|
3483
3455
|
}.bind(this));
|
|
3484
3456
|
|
|
3485
|
-
return sClosestId;
|
|
3457
|
+
return this.oCore.byId(sClosestId) ? sClosestId : null;
|
|
3486
3458
|
};
|
|
3487
3459
|
|
|
3488
3460
|
|
|
@@ -4221,7 +4193,9 @@ sap.ui.define([
|
|
|
4221
4193
|
return;
|
|
4222
4194
|
}
|
|
4223
4195
|
|
|
4224
|
-
|
|
4196
|
+
this.triggerPendingLayoutUpdates();
|
|
4197
|
+
|
|
4198
|
+
var iScrollTop = this._$opWrapper.scrollTop(),
|
|
4225
4199
|
sScrolledSubSectionId = this._getClosestScrolledSectionBaseId(
|
|
4226
4200
|
this._oScroller.getScrollTop(), this.iScreenHeight, true /* subSections only */),
|
|
4227
4201
|
iScrollTopWithinScrolledSubSection;
|
|
@@ -246,7 +246,7 @@ sap.ui.define([
|
|
|
246
246
|
|
|
247
247
|
/**
|
|
248
248
|
* Moves focus on the corresponding subsection when MenuItem is selected
|
|
249
|
-
* @param {sap.ui.core.Control} oSourceControl
|
|
249
|
+
* @param {sap.ui.core.Control} oSourceControl selected Item
|
|
250
250
|
* @private
|
|
251
251
|
*/
|
|
252
252
|
ABHelper.prototype._moveFocusOnSection = function (oSourceControl) {
|
|
@@ -9,8 +9,8 @@ sap.ui.define(["sap/ui/Device"],
|
|
|
9
9
|
"use strict";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* @
|
|
12
|
+
* ObjectPageLayout renderer.
|
|
13
|
+
* @namespace
|
|
14
14
|
*/
|
|
15
15
|
var ObjectPageLayoutRenderer = {
|
|
16
16
|
apiVersion: 2
|
|
@@ -199,11 +199,6 @@ sap.ui.define(["sap/ui/Device"],
|
|
|
199
199
|
.openEnd()
|
|
200
200
|
.close("div");
|
|
201
201
|
|
|
202
|
-
oRm.openStart("span", oControl.getId() + "-skipFastGroupAnchor")
|
|
203
|
-
.class("sapUiPseudoInvisibleText")
|
|
204
|
-
.openEnd()
|
|
205
|
-
.close("span");
|
|
206
|
-
|
|
207
202
|
oRm.close("div"); // END scroll
|
|
208
203
|
|
|
209
204
|
oRm.close("div"); // END wrapper
|
|
@@ -246,7 +241,7 @@ sap.ui.define(["sap/ui/Device"],
|
|
|
246
241
|
* @param {sap.ui.core.Control} oControl an object representation of the control that should be rendered
|
|
247
242
|
* @param {boolean} bRender - shows if the control should be rendered
|
|
248
243
|
* @param {string} sId - the id of the div that should be rendered
|
|
249
|
-
* @param {boolean}
|
|
244
|
+
* @param {boolean} bApplyBelizePlusClass - shows if the DOM of the control should be rendered no matter if the control is rendered inside or not
|
|
250
245
|
*/
|
|
251
246
|
ObjectPageLayoutRenderer._renderHeaderContentDOM = function (oRm, oControl, bRender, sId, bApplyBelizePlusClass) {
|
|
252
247
|
oRm.openStart("header", oControl.getId() + sId)
|
|
@@ -9,6 +9,7 @@ sap.ui.define([
|
|
|
9
9
|
"./ObjectPageSectionBase",
|
|
10
10
|
"sap/ui/Device",
|
|
11
11
|
"sap/m/Button",
|
|
12
|
+
"sap/ui/core/ResizeHandler",
|
|
12
13
|
"sap/ui/core/StashedControlSupport",
|
|
13
14
|
"./ObjectPageSubSection",
|
|
14
15
|
"./library",
|
|
@@ -18,6 +19,7 @@ sap.ui.define([
|
|
|
18
19
|
ObjectPageSectionBase,
|
|
19
20
|
Device,
|
|
20
21
|
Button,
|
|
22
|
+
ResizeHandler,
|
|
21
23
|
StashedControlSupport,
|
|
22
24
|
ObjectPageSubSection,
|
|
23
25
|
library,
|
|
@@ -92,7 +94,7 @@ sap.ui.define([
|
|
|
92
94
|
|
|
93
95
|
/**
|
|
94
96
|
* Returns the closest ObjectPageSection.
|
|
95
|
-
* @param {sap.uxap.ObjectPageSectionBase}
|
|
97
|
+
* @param {sap.uxap.ObjectPageSectionBase} vSectionBase
|
|
96
98
|
* @returns {sap.uxap.ObjectPageSection} The closest ObjectPageSection
|
|
97
99
|
* @private
|
|
98
100
|
*/
|
|
@@ -130,10 +132,20 @@ sap.ui.define([
|
|
|
130
132
|
ObjectPageSection.prototype.init = function () {
|
|
131
133
|
ObjectPageSectionBase.prototype.init.call(this);
|
|
132
134
|
this._sContainerSelector = ".sapUxAPObjectPageSectionContainer";
|
|
135
|
+
this._onResizeRef = this._onResize.bind(this);
|
|
133
136
|
};
|
|
134
137
|
|
|
135
138
|
ObjectPageSection.prototype.exit = function () {
|
|
136
139
|
this._detachMediaContainerWidthChange(this._updateImportance, this);
|
|
140
|
+
|
|
141
|
+
if (this._iResizeHandlerId) {
|
|
142
|
+
ResizeHandler.deregister(this._iResizeHandlerId);
|
|
143
|
+
this._iResizeHandlerId = null;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
ObjectPageSection.prototype._onResize = function () {
|
|
148
|
+
this._updateMultilineContent();
|
|
137
149
|
};
|
|
138
150
|
|
|
139
151
|
ObjectPageSection.prototype._getImportanceLevelToHide = function (oCurrentMedia) {
|
|
@@ -164,6 +176,37 @@ sap.ui.define([
|
|
|
164
176
|
}
|
|
165
177
|
};
|
|
166
178
|
|
|
179
|
+
ObjectPageSection.prototype._updateMultilineContent = function () {
|
|
180
|
+
var aSubSections = this.getSubSections(),
|
|
181
|
+
oFirstSubSection = aSubSections.find(function(oSubSection) {
|
|
182
|
+
return oSubSection.getVisible();
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
if (oFirstSubSection && oFirstSubSection.getDomRef()) {
|
|
186
|
+
var sTitleDomId = oFirstSubSection._getTitleDomId(),
|
|
187
|
+
iTitleWidth,
|
|
188
|
+
iActionsWidth,
|
|
189
|
+
iHeaderWidth,
|
|
190
|
+
bMultiLine,
|
|
191
|
+
oFirstSubSectionTitle;
|
|
192
|
+
|
|
193
|
+
// When there are more than one SubSections with no title, sTitleDomId=false.
|
|
194
|
+
// However, we are not interested in this case anyway, as there is no promoted SubSection
|
|
195
|
+
if (!sTitleDomId) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
oFirstSubSectionTitle = document.getElementById(oFirstSubSection._getTitleDomId());
|
|
200
|
+
// Title is hidden for the first SubSection of the first Section
|
|
201
|
+
iTitleWidth = oFirstSubSectionTitle ? oFirstSubSectionTitle.offsetWidth : 0;
|
|
202
|
+
iActionsWidth = this.$().find(".sapUxAPObjectPageSubSectionHeaderActions").width();
|
|
203
|
+
iHeaderWidth = this.$("header").width();
|
|
204
|
+
bMultiLine = (iTitleWidth + iActionsWidth) > iHeaderWidth;
|
|
205
|
+
|
|
206
|
+
oFirstSubSection._toggleMultiLineSectionContent(bMultiLine);
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
|
|
167
210
|
ObjectPageSection.prototype._determineTheLowestLevelOfImportanceToShow = function (sMedia, bShowOnlyHighImportance) {
|
|
168
211
|
if (bShowOnlyHighImportance || sMedia === "Phone") {
|
|
169
212
|
return library.Importance.High;
|
|
@@ -196,7 +239,9 @@ sap.ui.define([
|
|
|
196
239
|
};
|
|
197
240
|
|
|
198
241
|
ObjectPageSection.prototype.onAfterRendering = function () {
|
|
242
|
+
this._updateMultilineContent();
|
|
199
243
|
this._attachMediaContainerWidthChange(this._updateImportance, this);
|
|
244
|
+
this._iResizeHandlerId = ResizeHandler.register(this, this._onResizeRef);
|
|
200
245
|
};
|
|
201
246
|
|
|
202
247
|
/**
|
|
@@ -8,8 +8,8 @@ sap.ui.define(function () {
|
|
|
8
8
|
"use strict";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
* @
|
|
11
|
+
* Section renderer.
|
|
12
|
+
* @namespace
|
|
13
13
|
*/
|
|
14
14
|
var ObjectPageSectionRenderer = {
|
|
15
15
|
apiVersion: 2
|
|
@@ -40,6 +40,8 @@ sap.ui.define(function () {
|
|
|
40
40
|
oRm.attr("aria-labelledby", oLabelledBy.getId());
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
oRm.attr("data-sap-ui-customfastnavgroup", true);
|
|
44
|
+
|
|
43
45
|
oRm.openEnd();
|
|
44
46
|
|
|
45
47
|
oRm.openStart("div", oControl.getId() + "-header")
|
|
@@ -291,6 +291,11 @@ sap.ui.define([
|
|
|
291
291
|
this._sBorrowedTitleDomId = sId;
|
|
292
292
|
};
|
|
293
293
|
|
|
294
|
+
ObjectPageSubSection.prototype._toggleMultiLineSectionContent = function (bMultiLine) {
|
|
295
|
+
this.toggleStyleClass("sapUxAPObjectPageSectionMultilineContent", bMultiLine);
|
|
296
|
+
this._bMultiLine = bMultiLine;
|
|
297
|
+
};
|
|
298
|
+
|
|
294
299
|
ObjectPageSubSection.prototype._expandSection = function () {
|
|
295
300
|
ObjectPageSectionBase.prototype._expandSection.call(this);
|
|
296
301
|
var oParent = this.getParent();
|
|
@@ -8,8 +8,8 @@ sap.ui.define(function () {
|
|
|
8
8
|
"use strict";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
* @
|
|
11
|
+
* SubSection renderer.
|
|
12
|
+
* @namespace
|
|
13
13
|
*/
|
|
14
14
|
var ObjectPageSubSectionRenderer = {
|
|
15
15
|
apiVersion: 2
|
|
@@ -39,6 +39,10 @@ sap.ui.define(function () {
|
|
|
39
39
|
oRm.class("sapUxAPObjectPageSubSectionWithSeeMore");
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
if (oControl._bMultiLine) {
|
|
43
|
+
oRm.class("sapUxAPObjectPageSectionMultilineContent");
|
|
44
|
+
}
|
|
45
|
+
|
|
42
46
|
oRm.class("sapUxAPObjectPageSubSection")
|
|
43
47
|
.class("ui-helper-clearfix");
|
|
44
48
|
|
|
@@ -21,7 +21,7 @@ sap.ui.define([
|
|
|
21
21
|
* @constructor
|
|
22
22
|
* @alias sap.uxap.changeHandler.RenameObjectPageSection
|
|
23
23
|
* @author SAP SE
|
|
24
|
-
* @version 1.
|
|
24
|
+
* @version 1.102.0
|
|
25
25
|
* @experimental Since 1.50
|
|
26
26
|
*/
|
|
27
27
|
|
|
@@ -34,23 +34,34 @@ sap.ui.define([
|
|
|
34
34
|
var RenameObjectPageSection = BaseRename.createRenameChangeHandler(mRenameSettings);
|
|
35
35
|
|
|
36
36
|
RenameObjectPageSection._getControlForRename = function (oControl, oModifier) {
|
|
37
|
-
var aSubSections
|
|
37
|
+
var aSubSections,
|
|
38
|
+
vTitle;
|
|
39
|
+
|
|
38
40
|
return Promise.resolve()
|
|
39
41
|
.then(function() {
|
|
40
42
|
return oModifier.getAggregation(oControl, "subSections");
|
|
41
43
|
})
|
|
42
44
|
.then(function(aSubSectionsLocal) {
|
|
43
45
|
aSubSections = aSubSectionsLocal;
|
|
46
|
+
|
|
47
|
+
if (aSubSections.length !== 1) {
|
|
48
|
+
// if there are no or more than one sub sections, the following
|
|
49
|
+
// code should not execute and oControl should be returned
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
return Promise.all([oModifier.getPropertyBindingOrProperty(aSubSections[0], "title"),
|
|
45
54
|
oModifier.getProperty(oModifier.getParent(oControl), "subSectionLayout")]);
|
|
46
55
|
})
|
|
47
56
|
.then(function(aProperties) {
|
|
48
57
|
// due to specific logic in the Object Page Layout, the title of the Section is
|
|
49
58
|
// taken from its SubSection in case it is only one no matter if the Section has title itself.
|
|
59
|
+
vTitle = aProperties[0];
|
|
50
60
|
|
|
51
61
|
if (aSubSections
|
|
52
62
|
&& aSubSections.length === 1
|
|
53
|
-
&&
|
|
63
|
+
&& vTitle
|
|
64
|
+
&& (typeof vTitle === "object") || (typeof vTitle === "string" && vTitle.trim() !== "")
|
|
54
65
|
&& aProperties[1] === "TitleOnTop"
|
|
55
66
|
) {
|
|
56
67
|
return aSubSections[0];
|
|
@@ -159,6 +159,9 @@ function(
|
|
|
159
159
|
addIFrame: {
|
|
160
160
|
text: sap.ui.getCore().getLibraryResourceBundle("sap.uxap").getText("ADD_IFRAME_IN_HEADER"),
|
|
161
161
|
changeType: "addIFrame"
|
|
162
|
+
},
|
|
163
|
+
remove : {
|
|
164
|
+
removeLastElement: true
|
|
162
165
|
}
|
|
163
166
|
}
|
|
164
167
|
},
|
|
@@ -202,4 +205,4 @@ function(
|
|
|
202
205
|
}
|
|
203
206
|
};
|
|
204
207
|
|
|
205
|
-
});
|
|
208
|
+
});
|
package/src/sap/uxap/library.js
CHANGED
|
@@ -11,26 +11,25 @@ sap.ui.define([
|
|
|
11
11
|
"sap/ui/core/Core",
|
|
12
12
|
"sap/ui/base/DataType",
|
|
13
13
|
"sap/ui/Device",
|
|
14
|
+
"sap/ui/thirdparty/jquery",
|
|
14
15
|
"sap/ui/core/library", // library dependency
|
|
15
16
|
"sap/f/library", // library dependency
|
|
16
17
|
"sap/m/library", // library dependency
|
|
17
18
|
"sap/ui/layout/library" // library dependency
|
|
18
|
-
], function(Core, DataType, Device) {
|
|
19
|
+
], function(Core, DataType, Device, jQuery) {
|
|
19
20
|
"use strict";
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* SAP UxAP
|
|
23
24
|
*
|
|
24
25
|
* @namespace
|
|
25
|
-
* @
|
|
26
|
+
* @alias sap.uxap
|
|
26
27
|
* @author SAP SE
|
|
27
|
-
* @version 1.
|
|
28
|
+
* @version 1.102.0
|
|
28
29
|
* @since 1.36
|
|
29
30
|
* @public
|
|
30
31
|
*/
|
|
31
|
-
|
|
32
|
-
// delegate further initialization of this library to the Core
|
|
33
|
-
sap.ui.getCore().initLibrary({
|
|
32
|
+
var thisLib = sap.ui.getCore().initLibrary({
|
|
34
33
|
name: "sap.uxap",
|
|
35
34
|
dependencies: ["sap.ui.core", "sap.f", "sap.m", "sap.ui.layout"],
|
|
36
35
|
designtime: "sap/uxap/designtime/library.designtime",
|
|
@@ -69,7 +68,7 @@ sap.ui.define([
|
|
|
69
68
|
"sap.uxap.ObjectPageHeaderLayoutData",
|
|
70
69
|
"sap.uxap.ObjectPageLazyLoader"
|
|
71
70
|
],
|
|
72
|
-
version: "1.
|
|
71
|
+
version: "1.102.0",
|
|
73
72
|
extensions: {
|
|
74
73
|
flChangeHandlers: {
|
|
75
74
|
"sap.uxap.ObjectPageHeader": "sap/uxap/flexibility/ObjectPageHeader",
|
|
@@ -101,15 +100,15 @@ sap.ui.define([
|
|
|
101
100
|
});
|
|
102
101
|
|
|
103
102
|
/**
|
|
104
|
-
*
|
|
103
|
+
* Used by the <code>BlockBase</code> control to define how many columns should it be assigned by the <code>objectPageSubSection</code>.
|
|
105
104
|
* The allowed values can be auto (subsection assigned a number of columns based on the parent objectPageLayout subsectionLayout property), 1, 2, 3 or 4
|
|
106
105
|
* (This may not be a valid value for some <code>subSectionLayout</code>, for example, asking for 3 columns in a 2 column layout would raise warnings).
|
|
107
106
|
*
|
|
108
|
-
* @
|
|
107
|
+
* @namespace
|
|
109
108
|
* @public
|
|
110
109
|
* @ui5-metamodel This simple type also will be described in the UI5 (legacy) designtime metamodel
|
|
111
110
|
*/
|
|
112
|
-
|
|
111
|
+
thisLib.BlockBaseColumnLayout = DataType.createType('sap.uxap.BlockBaseColumnLayout', {
|
|
113
112
|
isValid: function (vValue) {
|
|
114
113
|
return /^(auto|[1-4]{1})$/.test(vValue);
|
|
115
114
|
}
|
|
@@ -127,7 +126,7 @@ sap.ui.define([
|
|
|
127
126
|
* @public
|
|
128
127
|
* @ui5-metamodel This simple type also will be described in the UI5 (legacy) designtime metamodel
|
|
129
128
|
*/
|
|
130
|
-
|
|
129
|
+
thisLib.BlockBaseFormAdjustment = {
|
|
131
130
|
|
|
132
131
|
/**
|
|
133
132
|
* Any form within the block will be automatically adjusted to have as many columns as the colspan of its parent block.
|
|
@@ -154,7 +153,7 @@ sap.ui.define([
|
|
|
154
153
|
* @public
|
|
155
154
|
* @ui5-metamodel This enumeration also will be described in the UI5 (legacy) designtime metamodel
|
|
156
155
|
*/
|
|
157
|
-
|
|
156
|
+
thisLib.ObjectPageConfigurationMode = {
|
|
158
157
|
|
|
159
158
|
/**
|
|
160
159
|
* Determines the JSON URL.
|
|
@@ -177,7 +176,7 @@ sap.ui.define([
|
|
|
177
176
|
* @public
|
|
178
177
|
* @ui5-metamodel This enumeration also will be described in the UI5 (legacy) designtime metamodel
|
|
179
178
|
*/
|
|
180
|
-
|
|
179
|
+
thisLib.ObjectPageHeaderDesign = {
|
|
181
180
|
|
|
182
181
|
/**
|
|
183
182
|
* Light theme for the <code>ObjectPageHeader</code>.
|
|
@@ -200,7 +199,7 @@ sap.ui.define([
|
|
|
200
199
|
* @public
|
|
201
200
|
* @ui5-metamodel This enumeration also will be described in the UI5 (legacy) designtime metamodel
|
|
202
201
|
*/
|
|
203
|
-
|
|
202
|
+
thisLib.ObjectPageHeaderPictureShape = {
|
|
204
203
|
|
|
205
204
|
/**
|
|
206
205
|
* Circle shape for the images in the <code>ObjectPageHeader</code>.
|
|
@@ -223,7 +222,7 @@ sap.ui.define([
|
|
|
223
222
|
* @public
|
|
224
223
|
* @ui5-metamodel This enumeration also will be described in the UI5 (legacy) designtime metamodel
|
|
225
224
|
*/
|
|
226
|
-
|
|
225
|
+
thisLib.ObjectPageSubSectionLayout = {
|
|
227
226
|
|
|
228
227
|
/**
|
|
229
228
|
* Title and actions on top of the block area.
|
|
@@ -246,7 +245,7 @@ sap.ui.define([
|
|
|
246
245
|
* @public
|
|
247
246
|
* @ui5-metamodel This enumeration also will be described in the UI5 (legacy) designtime metamodel
|
|
248
247
|
*/
|
|
249
|
-
|
|
248
|
+
thisLib.ObjectPageSubSectionMode = {
|
|
250
249
|
|
|
251
250
|
/**
|
|
252
251
|
* Collapsed mode of display of the <code>ObjectPageLayout</code>.
|
|
@@ -271,7 +270,7 @@ sap.ui.define([
|
|
|
271
270
|
* @since 1.32.0
|
|
272
271
|
* @ui5-metamodel This enumeration also will be described in the UI5 (legacy) designtime metamodel
|
|
273
272
|
*/
|
|
274
|
-
|
|
273
|
+
thisLib.Importance = {
|
|
275
274
|
|
|
276
275
|
/**
|
|
277
276
|
* Low importance of the content.
|
|
@@ -296,7 +295,7 @@ sap.ui.define([
|
|
|
296
295
|
*
|
|
297
296
|
* @type {{getClosestOPL: Function}}
|
|
298
297
|
*/
|
|
299
|
-
|
|
298
|
+
thisLib.Utilities = {
|
|
300
299
|
|
|
301
300
|
/**
|
|
302
301
|
* Returns the reference to the <code>ObjectPageLayout</code> for a given control.
|
|
@@ -318,10 +317,10 @@ sap.ui.define([
|
|
|
318
317
|
return true;
|
|
319
318
|
}
|
|
320
319
|
|
|
321
|
-
return
|
|
320
|
+
return thisLib.Utilities._isCurrentMediaSize("Phone", oRange);
|
|
322
321
|
},
|
|
323
322
|
isTabletScenario: function (oRange) {
|
|
324
|
-
return
|
|
323
|
+
return thisLib.Utilities._isCurrentMediaSize("Tablet", oRange);
|
|
325
324
|
},
|
|
326
325
|
_isCurrentMediaSize: function (sMedia, oRange) {
|
|
327
326
|
return oRange && oRange.name === sMedia;
|
|
@@ -403,6 +402,6 @@ sap.ui.define([
|
|
|
403
402
|
* @see {@link topic:d2ef0099542d44dc868719d908e576d0 Object Page Headers}
|
|
404
403
|
*/
|
|
405
404
|
|
|
406
|
-
return
|
|
405
|
+
return thisLib;
|
|
407
406
|
|
|
408
407
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
SHOW_MORE=\u8868\u793A
|
|
2
|
+
SHOW_MORE=\u3055\u3089\u306B\u8868\u793A
|
|
3
3
|
|
|
4
|
-
SHOW_LESS=\u8868\u793A\
|
|
4
|
+
SHOW_LESS=\u8868\u793A\u3092\u6E1B\u3089\u3059
|
|
5
5
|
|
|
6
6
|
ANCHOR_BAR_ARIA_LABEL=\u30A2\u30F3\u30AB\u30FC
|
|
7
7
|
|
|
@@ -13,7 +13,7 @@ BREADCRUMB_TRAIL_LABEL=\u8A73\u7D30\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3
|
|
|
13
13
|
|
|
14
14
|
SHOW_ALL=\u3059\u3079\u3066\u8868\u793A
|
|
15
15
|
|
|
16
|
-
HIDE_ALL=\u8868\u793A\
|
|
16
|
+
HIDE_ALL=\u8868\u793A\u3092\u6E1B\u3089\u3059
|
|
17
17
|
|
|
18
18
|
SHOW=\u5C55\u958B
|
|
19
19
|
|
|
@@ -28,6 +28,16 @@
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
.sapUxAPObjectPageLayout:not(.sapUxAPObjectPageLayout-Std-Phone) .sapUxAPObjectPageSubSectionPromoted:not(.sapUxAPObjectPageSectionMultilineContent) .sapUxAPObjectPageSubSectionHeaderActions {
|
|
32
|
+
position: absolute;
|
|
33
|
+
top: 0;
|
|
34
|
+
right: 1rem;
|
|
35
|
+
}
|
|
36
|
+
.sapUxAPObjectPageLayout:not(.sapUxAPObjectPageLayout-Std-Phone) .sapUxAPObjectPageSubSectionPromoted:not(.sapUxAPObjectPageSectionMultilineContent) .sapUxAPObjectPageSubSectionHeader {
|
|
37
|
+
height: 0;
|
|
38
|
+
padding: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
31
41
|
body > .sapUxAPObjectPageLayout,
|
|
32
42
|
.sapUiVltCell .sapUxAPObjectPageLayout {
|
|
33
43
|
position: fixed;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/* ============================================== */
|
|
5
5
|
|
|
6
6
|
.sapUxAPObjectPageSubSection {
|
|
7
|
-
padding-
|
|
7
|
+
padding-top: 1rem;
|
|
8
8
|
box-sizing: border-box;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
height: auto;
|
|
17
17
|
overflow: auto;
|
|
18
18
|
word-wrap: break-word;
|
|
19
|
-
padding:
|
|
19
|
+
padding: 0 2.25rem 0 3rem
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
.sapUxAPObjectPageSubSectionHeaderTitle {
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
/* phone display */
|
|
51
51
|
.sapUxAPObjectPageLayout-Std-Phone .sapUxAPObjectPageSubSectionHeader,
|
|
52
52
|
html .sapUiContainer-Narrow .sapUxAPObjectPageSubSectionHeader {
|
|
53
|
-
padding: 1rem;
|
|
53
|
+
padding: 0 1rem;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
.sapUxAPObjectPageLayout-Std-Phone .sapUxAPObjectPageSubSectionHeaderTitle,
|
|
@@ -67,7 +67,7 @@ html .sapUiContainer-Narrow .sapUxAPObjectPageSubSectionHeaderTitle {
|
|
|
67
67
|
|
|
68
68
|
.sapUxAPObjectPageLayout-Std-Tablet .sapUxAPObjectPageSubSectionHeader,
|
|
69
69
|
html .sapUiContainer-Medium .sapUxAPObjectPageSubSectionHeader {
|
|
70
|
-
padding:
|
|
70
|
+
padding: 0 1.25rem 0 2rem;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/* Those styles apply Desktop and Desktop-XL.
|
|
@@ -101,7 +101,6 @@ Doing so will result in less generated CSS, as well as less future maintanance i
|
|
|
101
101
|
white-space: normal;
|
|
102
102
|
word-wrap: break-word;
|
|
103
103
|
line-height: normal;
|
|
104
|
-
padding-top: 1rem;
|
|
105
104
|
}
|
|
106
105
|
|
|
107
106
|
.sapUxAPObjectPageSubSectionHeader.titleOnLeftLayout .sapUxAPObjectPageSubSectionHeaderActions {
|
|
@@ -141,10 +140,10 @@ Doing so will result in less generated CSS, as well as less future maintanance i
|
|
|
141
140
|
}
|
|
142
141
|
|
|
143
142
|
.sapUxAPBlockContainer {
|
|
144
|
-
padding:
|
|
143
|
+
padding: 0 2rem;
|
|
145
144
|
}
|
|
146
145
|
.sapUxAPObjectPageLayout-Std-Tablet .sapUxAPBlockContainer {
|
|
147
|
-
padding:
|
|
146
|
+
padding: 0 1rem;
|
|
148
147
|
}
|
|
149
148
|
.sapUxAPObjectPageLayout-Std-Phone .sapUxAPBlockContainer {
|
|
150
149
|
padding: 0 1rem;
|
|
@@ -154,20 +153,6 @@ Doing so will result in less generated CSS, as well as less future maintanance i
|
|
|
154
153
|
}
|
|
155
154
|
}
|
|
156
155
|
|
|
157
|
-
.sapUxAPObjectPageLayout-Std-Tablet .sapUxAPObjectPageSubSectionWithSeeMore {
|
|
158
|
-
.sapUxAPBlockContainer {
|
|
159
|
-
padding-bottom: 0;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
.sapUxAPSubSectionSeeMoreContainer {
|
|
163
|
-
padding-bottom: 2rem;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
.sapUxAPObjectPageLayout-Std-Phone .sapUxAPObjectPageSubSectionPromoted .sapUxAPBlockContainer {
|
|
169
|
-
padding-top: 1rem;
|
|
170
|
-
}
|
|
171
156
|
|
|
172
157
|
.sapUxAPObjectPageLayout-Std-Phone .sapUxAPObjectPageSubSection {
|
|
173
158
|
.sapUiRespGrid.sapUiRespGridHSpace1 {
|
|
@@ -200,35 +185,15 @@ Doing so will result in less generated CSS, as well as less future maintanance i
|
|
|
200
185
|
}
|
|
201
186
|
}
|
|
202
187
|
|
|
203
|
-
.sapUxAPObjectPageSection .sapUxAPObjectPageSectionContainer .sapUxAPObjectPageSubSection .sapUxAPBlockContainer {
|
|
204
|
-
padding-bottom: 0;
|
|
205
|
-
}
|
|
206
188
|
/* compact size */
|
|
207
189
|
.sapUiSizeCompact {
|
|
208
190
|
.sapUxAPObjectPageSubSectionHeaderTitle {
|
|
209
191
|
height: 2rem;
|
|
210
192
|
line-height: 2rem;
|
|
211
193
|
}
|
|
212
|
-
.sapUxAPBlockContainer {
|
|
213
|
-
padding: 1rem 2rem 2rem 2rem;
|
|
214
|
-
}
|
|
215
|
-
.sapUxAPObjectPageLayout-Std-Tablet .sapUxAPBlockContainer,
|
|
216
|
-
.sapUxAPObjectPageLayout-Std-Phone .sapUxAPBlockContainer {
|
|
217
|
-
padding: 1rem 1rem 2rem 1rem;
|
|
218
|
-
}
|
|
219
194
|
.sapUxAPObjectPageLayout-Std-Phone .sapUxAPBlockContainer .sapUiFormResGrid > div{
|
|
220
195
|
padding: 1rem 0;
|
|
221
196
|
}
|
|
222
|
-
|
|
223
|
-
.sapUxAPObjectPageSubSectionWithSeeMore {
|
|
224
|
-
.sapUxAPBlockContainer {
|
|
225
|
-
padding-bottom: 0;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
.sapUxAPSubSectionSeeMoreContainer {
|
|
229
|
-
padding-bottom: 2rem;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
197
|
}
|
|
233
198
|
|
|
234
199
|
html[data-sap-ui-browser^="ed"].sap-desktop .sapUxAPObjectPageSubSection:focus {
|