@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.
Files changed (35) hide show
  1. package/.eslintrc.json +18 -0
  2. package/THIRDPARTY.txt +5 -5
  3. package/package.json +5 -5
  4. package/src/sap/uxap/.library +1 -1
  5. package/src/sap/uxap/AnchorBar.js +16 -0
  6. package/src/sap/uxap/AnchorBarRenderer.js +2 -2
  7. package/src/sap/uxap/BlockBase.js +2 -1
  8. package/src/sap/uxap/BlockBaseMetadata.js +1 -1
  9. package/src/sap/uxap/BreadCrumbsRenderer.js +2 -2
  10. package/src/sap/uxap/HierarchicalSelectRenderer.js +2 -2
  11. package/src/sap/uxap/ObjectPageAccessibleLandmarkInfo.js +1 -1
  12. package/src/sap/uxap/ObjectPageDynamicHeaderContent.js +1 -1
  13. package/src/sap/uxap/ObjectPageDynamicHeaderTitle.js +3 -3
  14. package/src/sap/uxap/ObjectPageHeader.js +2 -2
  15. package/src/sap/uxap/ObjectPageHeaderActionButtonRenderer.js +2 -2
  16. package/src/sap/uxap/ObjectPageHeaderContentRenderer.js +2 -2
  17. package/src/sap/uxap/ObjectPageHeaderRenderer.js +2 -2
  18. package/src/sap/uxap/ObjectPageLayout.js +72 -98
  19. package/src/sap/uxap/ObjectPageLayoutABHelper.js +1 -1
  20. package/src/sap/uxap/ObjectPageLayoutRenderer.js +3 -8
  21. package/src/sap/uxap/ObjectPageLazyLoader.js +1 -1
  22. package/src/sap/uxap/ObjectPageSection.js +46 -1
  23. package/src/sap/uxap/ObjectPageSectionRenderer.js +4 -2
  24. package/src/sap/uxap/ObjectPageSubSection.js +5 -0
  25. package/src/sap/uxap/ObjectPageSubSectionRenderer.js +6 -2
  26. package/src/sap/uxap/ThrottledTaskHelper.js +4 -0
  27. package/src/sap/uxap/changeHandler/AddIFrameObjectPageLayout.js +1 -1
  28. package/src/sap/uxap/changeHandler/MoveObjectPageSection.js +1 -1
  29. package/src/sap/uxap/changeHandler/RenameObjectPageSection.js +14 -3
  30. package/src/sap/uxap/designtime/ObjectPageLayout.designtime.js +4 -1
  31. package/src/sap/uxap/library.js +20 -21
  32. package/src/sap/uxap/messagebundle_ja.properties +3 -3
  33. package/src/sap/uxap/themes/base/ObjectPageLayout.less +10 -0
  34. package/src/sap/uxap/themes/base/ObjectPageSection.less +1 -0
  35. 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.0.0-rc.12
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: 1.4.1
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.0.0-rc.12
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.0.0-rc.12
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.34
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.99.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.99.1",
18
- "@openui5/sap.m": "1.99.1",
19
- "@openui5/sap.ui.core": "1.99.1",
20
- "@openui5/sap.ui.layout": "1.99.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
  }
@@ -3,7 +3,7 @@
3
3
 
4
4
  <name>sap.uxap</name>
5
5
  <vendor>SAP SE</vendor>
6
- <version>1.99.1</version>
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
- * @class ObjectPageRenderer renderer.
13
- * @static
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
  /**
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  *
22
22
  * @class
23
23
  * @author SAP SE
24
- * @version 1.99.1
24
+ * @version 1.102.0
25
25
  * @since 1.26
26
26
  * @alias sap.uxap.BlockBaseMetadata
27
27
  * @extends sap.ui.core.ElementMetadata
@@ -8,8 +8,8 @@ sap.ui.define(function () {
8
8
  "use strict";
9
9
 
10
10
  /**
11
- * @class BreadCrumbs renderer.
12
- * @static
11
+ * BreadCrumbs renderer.
12
+ * @namespace
13
13
  */
14
14
  var BreadCrumbsRenderer = {
15
15
  apiVersion: 2
@@ -9,8 +9,8 @@ sap.ui.define(["sap/m/SelectRenderer", "sap/ui/core/Renderer"
9
9
  "use strict";
10
10
 
11
11
  /**
12
- * @class ObjectPageRenderer renderer.
13
- * @static
12
+ * ObjectPageRenderer renderer.
13
+ * @namespace
14
14
  */
15
15
  var HierarchicalSelectRenderer = Renderer.extend(SelectRenderer);
16
16
  HierarchicalSelectRenderer.apiVersion = 2;
@@ -22,7 +22,7 @@ sap.ui.define(['sap/ui/core/Element', './library'],
22
22
  * @extends sap.ui.core.Element
23
23
  *
24
24
  * @author SAP SE
25
- * @version 1.99.1
25
+ * @version 1.102.0
26
26
  *
27
27
  * @constructor
28
28
  * @public
@@ -41,7 +41,7 @@ sap.ui.define([
41
41
  * @implements sap.uxap.IHeaderContent
42
42
  *
43
43
  * @author SAP SE
44
- * @version 1.99.1
44
+ * @version 1.102.0
45
45
  *
46
46
  * @constructor
47
47
  * @public
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @implements sap.uxap.IHeaderTitle
43
43
  *
44
44
  * @author SAP SE
45
- * @version 1.99.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 {object} jQuery reference to the header dom element
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 {object} jQuery reference to the header dom element
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
- * @class ObjectPageRenderer renderer.
13
- * @static
12
+ * ObjectPageRenderer renderer.
13
+ * @namespace
14
14
  */
15
15
  var ObjectPageHeaderActionButtonRenderer = Renderer.extend(ButtonRenderer);
16
16
 
@@ -10,8 +10,8 @@ sap.ui.define([
10
10
  "use strict";
11
11
 
12
12
  /**
13
- * @class HeaderContent renderer.
14
- * @static
13
+ * HeaderContent renderer.
14
+ * @namespace
15
15
  */
16
16
  var ObjectPageHeaderContentRenderer = {
17
17
  apiVersion: 2
@@ -8,8 +8,8 @@ sap.ui.define(["./ObjectImageHelper", "sap/ui/Device"], function (ObjectImageHel
8
8
  "use strict";
9
9
 
10
10
  /**
11
- * @class HeaderBase renderer.
12
- * @static
11
+ * Header renderer.
12
+ * @namespace
13
13
  */
14
14
  var ObjectPageHeaderRenderer = {
15
15
  apiVersion: 2
@@ -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, determines if the header should be snapped
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, determines if the header should be in the
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
- * Note that an argument of <code>null</code> will cause the first visible section be set as <code>selectedSection</code>.
1485
- * This is because the <code>sap.uxap.ObjectPageLayout</code> should always have one of its sections selected (unless it has 0 visible sections).
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>null</code> or <code>undefined</code> are not valid arguments
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._requestAdjustLayout(true)
2034
- .then(function (bSuccess) { // scrolling must be done after the layout adjustment is done (so the latest section positions are determined)
2035
- if (bSuccess) {
2036
- this._oLazyLoading.doLazyLoading();
2037
- }
2038
- this._adjustSelectedSectionByUXRules(); //section may have changed again from the app before the promise completed => ensure adjustment
2039
- sSelectedSectionId = this.getSelectedSection();
2040
- // if the current scroll position is not at the selected section OR the ScrollEnablement is still scrolling due to an animation
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
- bPromoted = false;
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.position().top; //first get the dom position = scrollTop to get the section at the window top
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, iSubSectionOffsetTop, iSectionsContainerOffsetTop) {
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 iScrollTop,
3008
- oSize = oEvent.size,
3009
- oOldSize = oEvent.oldSize;
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
- if (oOldSize.height > 0 || oOldSize.width > 0) {
3024
- // if the content that changed its height was *above* the current scroll position =>
3025
- // then the current scroll position updated respectively and => triggered a scroll event =>
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.offsetHeight,
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
- ObjectPageLayout.prototype._updateSelectionOnScroll = function(iScrollTop) {
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 !== sClosestId) {
3329
+ if (sDestinationSectionId && sDestinationSectionId !== sClosestSectionId) {
3354
3330
  return;
3355
3331
  }
3356
3332
  this.clearDirectScrollingToSection();
3357
3333
 
3358
3334
  this._setAsCurrentSection(sClosestId);
3359
- } else if (sClosestId === this.getDirectScrollingToSection()) { //we are already in the destination section
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 = this.oCore.byId(sId);
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
- var iScrollTop = this._oScroller.getScrollTop(),
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: selected Item
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
- * @class ObjectPageRenderer renderer.
13
- * @static
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} bRenderAlways - shows if the DOM of the control should be rendered no matter if the control is rendered inside or not
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)
@@ -37,7 +37,7 @@ sap.ui.define([
37
37
  * @extends sap.ui.core.Element
38
38
  *
39
39
  * @author SAP SE
40
- * @version 1.99.1
40
+ * @version 1.102.0
41
41
  *
42
42
  * @constructor
43
43
  * @public
@@ -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} oSectionBase
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
- * @class Section renderer.
12
- * @static
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
- * @class Section renderer.
12
- * @static
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
 
@@ -64,6 +64,10 @@ sap.ui.define([
64
64
  return oReturnPromise;
65
65
  },
66
66
 
67
+ isPending: function() {
68
+ return this._iTimer != null;
69
+ },
70
+
67
71
  _getPromise: function () {
68
72
 
69
73
  if (!this._oPromise) {
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @constructor
26
26
  * @alias sap.uxap.changeHandler.AddIFrameObjectPageLayout
27
27
  * @author SAP SE
28
- * @version 1.99.1
28
+ * @version 1.102.0
29
29
  * @since 1.75
30
30
  * @experimental Since 1.75
31
31
  */
@@ -13,7 +13,7 @@ sap.ui.define(["sap/ui/fl/changeHandler/MoveControls", "sap/ui/core/Core", "sap/
13
13
  * @constructor
14
14
  * @alias sap.uxap.changeHandler.MoveObjectPageSection
15
15
  * @author SAP SE
16
- * @version 1.99.1
16
+ * @version 1.102.0
17
17
  * @experimental Since 1.54
18
18
  */
19
19
 
@@ -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.99.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
- && aProperties[0]
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
+ });
@@ -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
- * @name sap.uxap
26
+ * @alias sap.uxap
26
27
  * @author SAP SE
27
- * @version 1.99.1
28
+ * @version 1.102.0
28
29
  * @since 1.36
29
30
  * @public
30
31
  */
31
- // library dependencies
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.99.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
- * @class Used by the <code>BlockBase</code> control to define how many columns should it be assigned by the <code>objectPageSubSection</code>.
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
- * @static
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
- sap.uxap.BlockBaseColumnLayout = DataType.createType('sap.uxap.BlockBaseColumnLayout', {
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
- sap.uxap.BlockBaseFormAdjustment = {
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
- sap.uxap.ObjectPageConfigurationMode = {
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
- sap.uxap.ObjectPageHeaderDesign = {
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
- sap.uxap.ObjectPageHeaderPictureShape = {
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
- sap.uxap.ObjectPageSubSectionLayout = {
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
- sap.uxap.ObjectPageSubSectionMode = {
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
- sap.uxap.Importance = {
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
- sap.uxap.Utilities = {
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 sap.uxap.Utilities._isCurrentMediaSize("Phone", oRange);
320
+ return thisLib.Utilities._isCurrentMediaSize("Phone", oRange);
322
321
  },
323
322
  isTabletScenario: function (oRange) {
324
- return sap.uxap.Utilities._isCurrentMediaSize("Tablet", oRange);
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 sap.uxap;
405
+ return thisLib;
407
406
 
408
407
  });
@@ -1,7 +1,7 @@
1
1
 
2
- SHOW_MORE=\u8868\u793A\u8FFD\u52A0
2
+ SHOW_MORE=\u3055\u3089\u306B\u8868\u793A
3
3
 
4
- SHOW_LESS=\u8868\u793A\u5727\u7E2E
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\u5727\u7E2E
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;
@@ -6,6 +6,7 @@
6
6
  .sapUxAPObjectPageSection {
7
7
  margin-left: 0;
8
8
  margin-bottom: 0;
9
+ position: relative;
9
10
  }
10
11
 
11
12
  .sapUxAPObjectPageSectionTitleUppercase {
@@ -4,7 +4,7 @@
4
4
  /* ============================================== */
5
5
 
6
6
  .sapUxAPObjectPageSubSection {
7
- padding-bottom: 0;
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: 1rem 2.25rem 0 3rem
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: 1rem 1.25rem 0 2rem;
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: 1rem 2rem 3rem 2rem;
143
+ padding: 0 2rem;
145
144
  }
146
145
  .sapUxAPObjectPageLayout-Std-Tablet .sapUxAPBlockContainer {
147
- padding: 1rem 1rem 3rem 1rem;
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 {