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

feat(icon-button): Add new package #2748

Merged
merged 32 commits into from
May 25, 2018
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
c90a152
WIP: New component
williamernest Apr 27, 2018
2014853
WIP: New Component
williamernest Apr 27, 2018
c219043
WIP: Revert changes to package-lock.json
williamernest Apr 27, 2018
bd863c2
WIP:Temp
williamernest Apr 30, 2018
a3f2411
WIP: Adding button--icon to button package
williamernest May 1, 2018
2379283
WIP: Move icon button to it's own package
williamernest May 16, 2018
ff6d902
WIP: remove package-lock
williamernest May 16, 2018
7b6ce1e
Merge branch 'master' into feat/icon-button/add-new-package
williamernest May 16, 2018
3c65ab7
feat(icon-toggle): Update tests, and various uses of icon toggle
williamernest May 16, 2018
da51dd9
feat(icon-button): Update for comments
williamernest May 16, 2018
02192df
feat(icon-button): Update for comments. Replace theme uses. Add demo
williamernest May 16, 2018
21e3b83
feat(icon-button): Update for comments
williamernest May 16, 2018
a3254d3
feat(icon-button): Update for comments
williamernest May 17, 2018
a27180a
feat(icon-button): Revert theme style changes
williamernest May 17, 2018
b9d1890
feat(icon-button): Update for comments
williamernest May 17, 2018
d16bd67
feat(icon-button): Update tests
williamernest May 17, 2018
b2f11f0
WIP Add common.js to avoid # jumping to top
May 17, 2018
23cccd7
feat(icon-button): Change icon button to display inline block
williamernest May 18, 2018
8c99a1a
feat(icon-button): Update for comments
williamernest May 18, 2018
27c8ae9
WIP: Update for comments
williamernest May 18, 2018
c7436f5
Merge branch 'master' into feat/icon-button/add-new-package
williamernest May 18, 2018
1a12ff3
feat(icon-button): Update for commentS
williamernest May 21, 2018
9fae22c
Update
williamernest May 21, 2018
ac281de
feat(icon-button): Remove trailing whitespace
williamernest May 22, 2018
d005b41
feat(icon-button): Update
williamernest May 23, 2018
0c1a72a
feat(icon-button): Update for comments
williamernest May 23, 2018
28307a6
feat(icon-button): Update
williamernest May 23, 2018
945d7a6
feat(icon-button): Update
williamernest May 24, 2018
e09096e
WIP Update a couple more icon-toggle references in docs
May 24, 2018
8721628
Merge branch 'master' into feat/icon-button/add-new-package
kfranqueiro May 24, 2018
49b3be3
Merge branch 'master' into feat/icon-button/add-new-package
williamernest May 24, 2018
2a95b2c
Merge branch 'master' into feat/icon-button/add-new-package
williamernest May 25, 2018
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
12 changes: 6 additions & 6 deletions demos/card.html
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ <h3 class="demo-card__subtitle mdc-typography--subtitle2">by Kurt Wagner</h3>
<button class="mdc-button mdc-card__action mdc-card__action--button">Bookmark</button>
</div>
<div class="mdc-card__action-icons">
<i class="mdc-icon-toggle material-icons mdc-card__action mdc-card__action--icon"
<i class="mdc-icon-button material-icons mdc-card__action mdc-card__action--icon"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't we also add mdc-icon-button to the other mdc-card__action--icon elements to make sure it works for them? (Which would also affect MDC Card documentation, and might mean there are styles we can pull out of Card if mdc-icon-button already covers it now)

Need to be careful to only instantiate MDCIconButtonToggle for the actual toggle buttons though, and not all icon buttons... This might actually point to a developer ergonomics problem, if it becomes difficult to programmatically distinguish things we want to be toggle-able from things that aren't.

tabindex="0"
role="button"
aria-pressed="false"
Expand Down Expand Up @@ -152,7 +152,7 @@ <h2 class="demo-card-article__title mdc-typography--headline5">Asia's clean ener
</div>
</a>
<div class="mdc-card__actions mdc-card__action-icons">
<i class="mdc-icon-toggle material-icons mdc-card__action mdc-card__action--icon"
<i class="mdc-icon-button material-icons mdc-card__action mdc-card__action--icon"
tabindex="0"
role="button"
aria-pressed="false"
Expand All @@ -162,7 +162,7 @@ <h2 class="demo-card-article__title mdc-typography--headline5">Asia's clean ener
data-toggle-off='{"content": "favorite_border", "label": "Add to favorites"}'>
favorite_border
</i>
<i class="mdc-icon-toggle material-icons mdc-card__action mdc-card__action--icon"
<i class="mdc-icon-button material-icons mdc-card__action mdc-card__action--icon"
tabindex="0"
role="button"
aria-pressed="false"
Expand Down Expand Up @@ -245,11 +245,11 @@ <h2 class="demo-card-article__title mdc-typography--headline5">Asia's clean ener
mdc.ripple.MDCRipple.attachTo(surface);
});

[].forEach.call(document.querySelectorAll('.mdc-icon-toggle'), function(iconToggle) {
mdc.iconToggle.MDCIconToggle.attachTo(iconToggle);
[].forEach.call(document.querySelectorAll('.mdc-icon-button'), function(iconButtonToggle) {
mdc.iconButton.MDCIconButtonToggle.attachTo(iconButtonToggle);
});

document.addEventListener('MDCIconToggle:change', function(evt) {
document.addEventListener('MDCIconButtonToggle:change', function(evt) {
evt.target.setAttribute('title', evt.target.getAttribute('aria-label'));
});

Expand Down
2 changes: 1 addition & 1 deletion demos/card.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
@import "../packages/mdc-card/mdc-card";
@import "../packages/mdc-checkbox/mdc-checkbox";
@import "../packages/mdc-form-field/mdc-form-field";
@import "../packages/mdc-icon-toggle/mdc-icon-toggle";
@import "../packages/mdc-icon-button/mdc-icon-button";
@import "../packages/mdc-list/mdc-list";
@import "../packages/mdc-ripple/mdc-ripple";

Expand Down
271 changes: 271 additions & 0 deletions demos/icon-button.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,271 @@
<!DOCTYPE html>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I appreciate that this file was added (especially in this case where it's effectively replacing an existing component), but is it feasible to fast-follow this PR with screenshot testing page(s)?

<!--
Copyright 2016 Google Inc. All rights reserved.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might want to do a copyright year check on new files


Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License
-->
<html>
<head>
<meta charset="utf-8">
<title>Icon Button - Material Components Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="/images/logo_components_color_2x_web_48dp.png">
<link rel="stylesheet" href="/assets/icon-button.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.css">
<script src="/ready.js"></script>
</head>
<body class="mdc-typography">
<header class="mdc-toolbar mdc-toolbar--fixed">
<div class="mdc-toolbar__row">
<section class="mdc-toolbar__section mdc-toolbar__section--align-start">
<a href="/" class="catalog-back mdc-toolbar__menu-icon"><i class="material-icons">&#xE5C4;</i></a>
<span class="mdc-toolbar__title catalog-title">Icon Buttons</span>
</section>
</div>
</header>
<main>
<div class="mdc-toolbar-fixed-adjust"></div>
<section class="hero">
<div class="demo-wrapper">
<i class="mdc-icon-button material-icons"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we enforce that all mdc-icon-buttons use the button or a elements, akin to MDC Button?

(And also like Button, disabled would only be valid for button elements)

role="button"
aria-label="Add to favorites"
aria-pressed="false"
tabindex="0"
data-toggle-on='{"content": "favorite", "label": "Remove From Favorites"}'
data-toggle-off='{"content": "favorite_border", "label": "Add to Favorites"}'>
<!-- Prevent FOUC by putting the initial content in -->
favorite_border
</i>
</div>
</section>

<section class="example">
<div>
<div>
<h1 class="mdc-typography--headline5">Buttons</h1>
</div>
<div class="toggle-examples-container">
<div class="toggle-example">
<h2 class="mdc-typography--headline6">Material Icons</h2>
<div class="demo-wrapper">
<a class="mdc-icon-button material-icons"
role="button"
aria-label="Add to favorites"
aria-pressed="false"
tabindex="0">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a and button elements shouldn't need tabindex, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a needs tabIndex if there isn't an href attribute.

favorite
</a>
<span class="mdc-icon-button material-icons"
role="button"
aria-label="Transit directions"
aria-pressed="false"
tabindex="0">
directions_transit
</span>
<button class="mdc-icon-button material-icons"
role="button"
aria-label="Airplane Mode active"
aria-pressed="false"
tabindex="0">
airplanemode_active
</button>
</div>
</div>

<div class="toggle-example">
<h2 class="mdc-typography--headline6">SVG Icon</h2>
<div class="demo-wrapper">
<button class="mdc-icon-button"
role="button"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

role="button" is redundant for button elements, right?

aria-label="Add to favorites"
aria-pressed="false"
tabindex="0">
<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need width and height hard-coded inline here or should CSS cover this?

<path fill="none" d="M0 0h24v24H0z"/>
<path d="M23 12c0-6.07-4.93-11-11-11S1 5.93 1 12s4.93 11 11 11 11-4.93 11-11zM5 17.64C3.75 16.1 3 14.14 3 12c0-2.13.76-4.08 2-5.63v11.27zM17.64 5H6.36C7.9 3.75 9.86 3 12 3s4.1.75 5.64 2zM12 14.53L8.24 7h7.53L12 14.53zM17 9v8h-4l4-8zm-6 8H7V9l4 8zm6.64 2c-1.55 1.25-3.51 2-5.64 2s-4.1-.75-5.64-2h11.28zM21 12c0 2.14-.75 4.1-2 5.64V6.37c1.24 1.55 2 3.5 2 5.63z"/>
</svg>
</button>
</div>
</div>

<div class="toggle-example">
<h2 class="mdc-typography--headline6">Disabled Buttons</h2>
<div class="demo-wrapper">
<span class="mdc-icon-button mdc-icon-button--disabled material-icons"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See previous comment RE potentially limiting to button and a elements. We shouldn't need to support a disabled CSS modifier class at all that way, and I suspect we wouldn't need aria-disabled then either (which is missing here but present on others below).

role="button"
aria-label="Transit directions"
aria-pressed="false"
tabindex="0">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These shouldn't have tabindex if they're disabled.

directions_transit
</span>
<button class="mdc-icon-button material-icons"
role="button"
aria-label="Airplane Mode active"
aria-pressed="false"
disabled
tabindex="0">
airplanemode_active
</button>
<button class="mdc-icon-button"
role="button"
aria-label="Add to favorites"
aria-pressed="false"
disabled
tabindex="0">
<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0z"/>
<path d="M23 12c0-6.07-4.93-11-11-11S1 5.93 1 12s4.93 11 11 11 11-4.93 11-11zM5 17.64C3.75 16.1 3 14.14 3 12c0-2.13.76-4.08 2-5.63v11.27zM17.64 5H6.36C7.9 3.75 9.86 3 12 3s4.1.75 5.64 2zM12 14.53L8.24 7h7.53L12 14.53zM17 9v8h-4l4-8zm-6 8H7V9l4 8zm6.64 2c-1.55 1.25-3.51 2-5.64 2s-4.1-.75-5.64-2h11.28zM21 12c0 2.14-.75 4.1-2 5.64V6.37c1.24 1.55 2 3.5 2 5.63z"/>
</svg>
</button>
</div>
</div>
</div>
</div>
</section>

<section class="example">
<div>
<div>
<h1 class="mdc-typography--headline5">Button Toggles</h1>
</div>
<div class="toggle-examples-container">
<div class="toggle-example">
<h2 class="mdc-typography--headline6">Using Material Icons</h2>
<div class="demo-wrapper">
<i id="add-to-favorites"
class="mdc-icon-button material-icons"
role="button"
aria-label="Add to favorites"
aria-pressed="false"
tabindex="0"
data-toggle-on='{"content": "favorite", "label": "Remove From Favorites"}'
data-toggle-off='{"content": "favorite_border", "label": "Add to Favorites"}'>
<!-- Prevent FOUC by putting the initial content in -->
favorite_border
</i>
</div>
<p>Favorited? <span id="favorited-status">no</span></p>
</div>

<div class="toggle-example">
<h2 class="mdc-typography--headline6">Using Font Awesome</h2>
<div class="demo-wrapper">
<span class="mdc-icon-button mdc-icon-button--on"
role="button"
aria-label="Unstar this item"
aria-pressed="true"
tabindex="0"
data-icon-inner-selector=".fa"
data-toggle-on='{"cssClass": "fa-star", "label": "Unstar this item"}'
data-toggle-off='{"cssClass": "fa-star-o", "label": "Star this item"}'>
<i class="fa fa-star" aria-hidden="true"></i>
</span>
</div>
</div>

<div class="toggle-example">
<h2 class="mdc-typography--headline6">Disabled Icons</h2>
<div class="demo-wrapper">
<i class="mdc-icon-button mdc-icon-button--disabled material-icons"
role="button"
aria-label="Add to favorites"
aria-pressed="false"
aria-disabled="true"
tabindex="-1"
data-toggle-on='{"content": "favorite", "label": "Remove From Favorites"}'
data-toggle-off='{"content": "favorite_border", "label": "Add to Favorites"}'>
favorite_border
</i>
</div>
</div>
</div>

<div class="toggle-example">
<h2 class="mdc-typography--headline6">Additional Color Combinations</h2>
<div id="demo-color-combos">
<div id="light-on-bg" class="demo-color-combo">
<div>
<i class="mdc-icon-button material-icons mdc-theme--on-primary"
role="button"
aria-label="Add to favorites"
aria-pressed="false"
tabindex="0"
data-toggle-on='{"content": "favorite", "label": "Remove From Favorites"}'
data-toggle-off='{"content": "favorite_border", "label": "Add to Favorites"}'>
favorite_border
</i>
</div>
<div class="mdc-theme--on-primary">Light icon on background</div>
</div>
<div id="dark-on-bg" class="demo-color-combo">
<div class="mdc-theme--primary">
<i class="mdc-icon-button material-icons"
role="button"
aria-label="Add to favorites"
aria-pressed="false"
tabindex="0"
data-toggle-on='{"content": "favorite", "label": "Remove From Favorites"}'
data-toggle-off='{"content": "favorite_border", "label": "Add to Favorites"}'>
favorite_border
</i>
</div>
<div>Dark icon on background</div>
</div>
<div id="custom-color-combo" class="demo-color-combo">
<div>
<i class="mdc-icon-button material-icons"
role="button"
aria-label="Add to favorites"
aria-pressed="false"
tabindex="0"
data-toggle-on='{"content": "favorite", "label": "Remove From Favorites"}'
data-toggle-off='{"content": "favorite_border", "label": "Add to Favorites"}'>
favorite_border
</i>
</div>
<div>Custom color</div>
</div>
</div>
</div>
</div>
</section>
</main>

<script src="/assets/material-components-web.js" async></script>
<script>
demoReady(function() {
var nodes = document.querySelectorAll('.mdc-icon-button[data-toggle-on]');
for (var i = 0, node; node = nodes[i]; i++) {
mdc.iconButton.MDCIconButtonToggle.attachTo(node);
}

var buttons = document.querySelectorAll('.mdc-icon-button:not([data-toggle-on])');
for (var x = 0, button; button = buttons[x]; x++) {
mdc.ripple.MDCRipple.attachTo(button, {isUnbounded: true});
}

var addToFavorites = document.getElementById('add-to-favorites');
var favoritedStatus = document.getElementById('favorited-status');
addToFavorites.addEventListener('MDCIconButtonToggle:change', function(evt) {
console.log(evt);
var newStatus = evt.detail.isOn ? 'yes' : 'no';
favoritedStatus.textContent = newStatus;
});
});
</script>
</body>
</html>
22 changes: 13 additions & 9 deletions demos/icon-toggle.scss → demos/icon-button.scss
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
//

@import "./common";
@import "../packages/mdc-icon-toggle/mdc-icon-toggle";
@import "../packages/mdc-icon-button/mdc-icon-button";
@import "../packages/mdc-ripple/mixins";

.demo-wrapper {
Expand All @@ -30,9 +30,13 @@
}

.toggle-example {
min-width: 240px;
padding: 24px;
min-width: 260px;
margin: 24px;
padding: 24px;
}

.toggle-examples-container {
display: flex;
}

#demo-color-combos {
Expand All @@ -55,8 +59,8 @@
#light-on-bg {
background-color: #3e82f7;
}
#light-on-bg .mdc-icon-toggle {
@include mdc-icon-toggle-ink-color(white);
#light-on-bg .mdc-icon-button {
@include mdc-icon-button-ink-color(white);
@include mdc-states-base-color(white);
@include mdc-states-hover-opacity(.1);
@include mdc-states-focus-opacity(.3);
Expand All @@ -66,13 +70,13 @@
#dark-on-bg {
background-color: #00bcd6;
}
#dark-on-bg .mdc-icon-toggle {
@include mdc-icon-toggle-ink-color(black);
#dark-on-bg .mdc-icon-button {
@include mdc-icon-button-ink-color(black);
@include mdc-states(black);
}

#custom-color-combo .mdc-icon-toggle {
@include mdc-icon-toggle-ink-color(#de442c);
#custom-color-combo .mdc-icon-button {
@include mdc-icon-button-ink-color(#de442c);
@include mdc-states-base-color(#de442c);
@include mdc-states-hover-opacity(.09);
@include mdc-states-focus-opacity(.26);
Expand Down
Loading