Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(ui5-rating-indicator): refactor rating-indicator to use SVG icons #5191

Merged
merged 7 commits into from
May 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions packages/main/src/RatingIndicator.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,30 @@
title="{{tooltip}}"
aria-label="{{accessibleName}}"
>
<div
class="ui5-rating-indicator-stars-wrapper"
<ul class="ui5-rating-indicator-list"
aria-hidden="true"
>
>
{{#each _stars}}
{{#if this.selected}}
<div class="ui5-rating-indicator-icon ui5-rating-indicator-active-icon" data-value="{{this.index}}">&#9733;</div>
<li data-ui5-value="{{this.index}}" class="ui5-rating-indicator-item ui5-rating-indicator-item-sel">
<ui5-icon data-ui5-value="{{this.index}}" name="favorite"></ui5-icon>
</li>
{{else if this.halfStar}}
<div class="ui5-rating-indicator-icon ui5-rating-indicator-half-icon" data-value="{{this.index}}">&#9734;</div>
<li class="ui5-rating-indicator-item ui5-rating-indicator-item-half">
<ui5-icon data-ui5-value="{{this.index}}" name="unfavorite"></ui5-icon>
<div class="ui5-rating-indicator-half-icon-wrapper">
<ui5-icon data-ui5-value="{{this.index}}" name="favorite" class="ui5-rating-indicator-half-icon"></ui5-icon>
</div>
</li>
{{else if ../readonly}}
<div class="ui5-rating-indicator-icon ui5-rating-indicator-readonly-unselected-icon" data-value="{{this.index}}">&#9733;</div>
<li class="ui5-rating-indicator-item ui5-rating-indicator-readonly-item-unsel">
<ui5-icon data-ui5-value="{{this.index}}" name="favorite"></ui5-icon>
</li>
{{else}}
<div class="ui5-rating-indicator-icon" data-value="{{this.index}}">&#9734;</div>
<li data-ui5-value="{{this.index}}" class="ui5-rating-indicator-item ui5-rating-indicator-item-unsel">
<ui5-icon data-ui5-value="{{this.index}}" name="unfavorite"></ui5-icon>
</li>
{{/if}}
{{/each}}
</div>
</ul>
</div>
4 changes: 3 additions & 1 deletion packages/main/src/RatingIndicator.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import {
RATING_INDICATOR_TOOLTIP_TEXT,
} from "./generated/i18n/i18n-defaults.js";
import RatingIndicatorTemplate from "./generated/templates/RatingIndicatorTemplate.lit.js";
import "@ui5/webcomponents-icons/dist/favorite.js";
import "@ui5/webcomponents-icons/dist/unfavorite.js";

// Styles
import RatingIndicatorCss from "./generated/themes/RatingIndicator.css.js";
Expand Down Expand Up @@ -231,7 +233,7 @@ class RatingIndicator extends UI5Element {
return;
}

this.value = parseInt(event.target.getAttribute("data-value"));
this.value = parseInt(event.target.getAttribute("data-ui5-value"));

if (this.value === 1 && this._liveValue === 1) {
this.value = 0;
Expand Down
71 changes: 56 additions & 15 deletions packages/main/src/themes/RatingIndicator.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
:host(:not([hidden])) {
display: inline-block;
font-size: 1.5rem;
font-size: 24px;
margin: var(--_ui5_rating_indicator_component_spacing);
cursor: pointer;
}

Expand All @@ -14,39 +15,79 @@
cursor: initial;
}

:host([readonly]) .ui5-rating-indicator-icon.ui5-rating-indicator-readonly-unselected-icon {
:host([readonly]) .ui5-rating-indicator-readonly-item-unsel {
color: var(--sapContent_UnratedColor);
}

:host(:not([readonly]):not([disabled])) .ui5-rating-indicator-root:hover {
opacity: .9;
}

:host([_focused]) {
outline: var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);
border-radius: var(--_ui5_rating_indicator_border_radius);
}

[ui5-icon] {
display: flex;
text-shadow: var(--sapContent_TextShadow);
}

.ui5-rating-indicator-root {
outline: none;
position: relative;
}

.ui5-rating-indicator-icon {
.ui5-rating-indicator-list {
list-style-type: none;
display: flex;
margin: 0;
padding: 0;
}

.ui5-rating-indicator-item {
position: relative;
color: var(--sapContent_UnratedColor);
user-select: none;
width: var(--_ui5_rating_indicator_item_width);
height: var(--_ui5_rating_indicator_item_height);
min-width: var(--_ui5_rating_indicator_item_width);
min-height: var(--_ui5_rating_indicator_item_height);
}

.ui5-rating-indicator-icon.ui5-rating-indicator-active-icon {
color: var(--sapContent_RatedColor);
.ui5-rating-indicator-item:not(:last-child) {
margin-inline-end: 0.1875rem;
}

.ui5-rating-indicator-icon.ui5-rating-indicator-half-icon:before {
content: "\2605";
position: absolute;
top: 0;
width: 50%;
.ui5-rating-indicator-item [ui5-icon] {
width: 100%;
height: 100%;
color: inherit;
user-select: none;
}

.ui5-rating-indicator-item.ui5-rating-indicator-item-sel {
color: var(--sapContent_RatedColor);
overflow: hidden;
}

.ui5-rating-indicator-stars-wrapper {
display: flex;
.ui5-rating-indicator-item.ui5-rating-indicator-item-unsel {
color: var(--sapContent_UnratedColor);
}

.ui5-rating-indicator-item.ui5-rating-indicator-item-half {
color: var(--sapContent_UnratedColor);
}

.ui5-rating-indicator-item [ui5-icon].ui5-rating-indicator-half-icon {
position: absolute;
inset-inline-start: 50%;
color: var(--sapContent_RatedColor);
}

.ui5-rating-indicator-half-icon-wrapper {
width: 100%;
height: 100%;
position: absolute;
inset-inline-start: -50%;
top: 0;
z-index: 32;
overflow: hidden;
}
11 changes: 11 additions & 0 deletions packages/main/src/themes/base/RatingIndicator-parameters.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
:root {
--_ui5_rating_indicator_border_radius: 0px;
--_ui5_rating_indicator_item_height: 1em;
--_ui5_rating_indicator_item_width: 1em;
--_ui5_rating_indicator_component_spacing: 0.5rem 0px;
}

[data-ui5-compact-size],
.ui5-content-density-compact,
.sapUiSizeCompact {
--_ui5_rating_indicator_item_height: 0.67em;
--_ui5_rating_indicator_item_width: 0.67em;
--_ui5_rating_indicator_component_spacing: 0.8125rem 0px;
}
1 change: 1 addition & 0 deletions packages/main/src/themes/sap_belize/parameters-bundle.css
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
@import "./PopupsCommon-parameters.css";
@import "./ProgressIndicator-parameters.css";
@import "../base/RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "../base/SegmentedButtton-parameters.css";
@import "../base/Select-parameters.css";
@import "./SplitButton-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
@import "./PopupsCommon-parameters.css";
@import "./ProgressIndicator-parameters.css";
@import "./RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "../base/SegmentedButtton-parameters.css";
@import "./Select-parameters.css";
@import "./SplitButton-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
@import "./PopupsCommon-parameters.css";
@import "./ProgressIndicator-parameters.css";
@import "./RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "../base/SegmentedButtton-parameters.css";
@import "./Select-parameters.css";
@import "./SplitButton-parameters.css";
Expand Down
1 change: 1 addition & 0 deletions packages/main/src/themes/sap_fiori_3/parameters-bundle.css
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
@import "../base/PopupsCommon-parameters.css";
@import "../base/ProgressIndicator-parameters.css";
@import "../base/RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "../base/SegmentedButtton-parameters.css";
@import "../base/Select-parameters.css";
@import "../base/SplitButton-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
@import "../base/PopupsCommon-parameters.css";
@import "../base/ProgressIndicator-parameters.css";
@import "../base/RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "../base/SegmentedButtton-parameters.css";
@import "../base/Select-parameters.css";
@import "../base/SplitButton-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
@import "../base/PopupsCommon-parameters.css";
@import "./ProgressIndicator-parameters.css";
@import "./RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "../base/SegmentedButtton-parameters.css";
@import "./Select-parameters.css";
@import "./SplitButton-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
@import "../base/PopupsCommon-parameters.css";
@import "./ProgressIndicator-parameters.css";
@import "./RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "../base/SegmentedButtton-parameters.css";
@import "./Select-parameters.css";
@import "./SplitButton-parameters.css";
Expand Down
1 change: 1 addition & 0 deletions packages/main/src/themes/sap_horizon/parameters-bundle.css
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
@import "../base/PopupsCommon-parameters.css";
@import "./ProgressIndicator-parameters.css";
@import "../base/RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "./RatingIndicator-parameters.css";
@import "./SegmentedButtton-parameters.css";
@import "./RadioButton-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
@import "../sap_horizon/ProgressIndicator-parameters.css";
@import "../base/RadioButton-parameters.css";
@import "./RatingIndicator-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "./SegmentedButtton-parameters.css";
@import "./RadioButton-parameters.css";
@import "./Switch-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
@import "./Popover-parameters.css";
@import "../base/ProgressIndicator-parameters.css";
@import "./RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "./Select-parameters.css";
@import "./Switch-parameters.css";
@import "./TabContainer-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
@import "../base/PopupsCommon-parameters.css";
@import "./ProgressIndicator-parameters";
@import "./RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "./SegmentedButtton-parameters.css";
@import "./Select-parameters.css";
@import "./SplitButton-parameters.css";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
@import "../base/PopupsCommon-parameters.css";
@import "../sap_horizon_hcb/ProgressIndicator-parameters";
@import "./RadioButton-parameters.css";
@import "../base/RatingIndicator-parameters.css";
@import "./SegmentedButtton-parameters.css";
@import "./Select-parameters.css";
@import "./SplitButton-parameters.css";
Expand Down
16 changes: 8 additions & 8 deletions packages/main/test/specs/RatingIndicator.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ describe("Rating Indicator general interaction", () => {
it("Tests basic rating indicator rendering", async () => {
const ratingIndicator = await browser.$("#rating-indicator1");

assert.strictEqual(await ratingIndicator.shadow$$(".ui5-rating-indicator-icon").length, 5, "Basic rating indicator renders 5 stars");
assert.strictEqual(await ratingIndicator.shadow$$(".ui5-rating-indicator-item").length, 5, "Basic rating indicator renders 5 stars");
});

it("Tests max property", async () => {
const ratingIndicator = await browser.$("#rating-indicator2");

assert.strictEqual(await ratingIndicator.shadow$$(".ui5-rating-indicator-icon").length, 10, "Basic rating indicator renders 10 stars");
assert.strictEqual(await ratingIndicator.shadow$$(".ui5-rating-indicator-item").length, 10, "Basic rating indicator renders 10 stars");
});

it("Tests clicking on star", async () => {
const ratingIndicator = await browser.$("#rating-indicator3");
const thirdStar = await ratingIndicator.shadow$$(".ui5-rating-indicator-icon")[2];
const thirdStar = await ratingIndicator.shadow$$(".ui5-rating-indicator-item")[2];

assert.strictEqual(await ratingIndicator.getProperty("value"), 6, "Initial value is applied");

Expand All @@ -32,7 +32,7 @@ describe("Rating Indicator general interaction", () => {

it("Tests change event", async () => {
const ratingIndicator = await browser.$("#rating-indicator4");
const thirdStar = await ratingIndicator.shadow$$(".ui5-rating-indicator-icon")[2];
const thirdStar = await ratingIndicator.shadow$$(".ui5-rating-indicator-item")[2];
const input = await browser.$("#change-event");

assert.strictEqual(await ratingIndicator.getProperty("value"), 6, "Initial value is applied");
Expand Down Expand Up @@ -90,8 +90,8 @@ describe("Rating Indicator general interaction", () => {
it("Tests ACC attrs", async () => {
const ratingIndicator = await browser.$("#rating-indicator1");
const ratingIndicatorRoot = ratingIndicator.shadow$(".ui5-rating-indicator-root");
const ratingIndicatorWrapper = ratingIndicator.shadow$(".ui5-rating-indicator-stars-wrapper");
const thirdStar = await ratingIndicator.shadow$$(".ui5-rating-indicator-icon")[2];
const ratingIndicatorList = ratingIndicator.shadow$(".ui5-rating-indicator-list");
const thirdStar = await ratingIndicator.shadow$$(".ui5-rating-indicator-item")[2];
const ratingIndicatorReadOnly = await browser.$("#rating-indicator-readonly").shadow$(".ui5-rating-indicator-root");

const TOOLTIP = "Rating";
Expand All @@ -105,7 +105,7 @@ describe("Rating Indicator general interaction", () => {

assert.notOk(await ratingIndicatorRoot.getAttribute("aria-readonly"), "The aria-readonly attribute is not presented");
assert.strictEqual(await ratingIndicatorReadOnly.getAttribute("aria-readonly"), 'true', "The aria-readonly attribute is presented");

assert.strictEqual(await ratingIndicatorRoot.getAttribute("aria-valuetext"),
`${await ratingIndicator.getProperty("value")} of ${await ratingIndicator.getProperty("max")}`, "aria-valuetext is set correctly");

Expand All @@ -114,7 +114,7 @@ describe("Rating Indicator general interaction", () => {
assert.strictEqual(await ratingIndicatorRoot.getAttribute("aria-valuetext"),
"3 of 5", "aria-valuetext is updated correctly");

assert.strictEqual(await ratingIndicatorWrapper.getAttribute("aria-hidden"), "true", "aria-hidden is set");
assert.strictEqual(await ratingIndicatorList.getAttribute("aria-hidden"), "true", "aria-hidden is set");
});

it("Tests ACC attrs - title attribute provided", async () => {
Expand Down