Skip to content
This repository has been archived by the owner on Jan 3, 2024. It is now read-only.

Commit

Permalink
Improvements to make modal more accessible
Browse files Browse the repository at this point in the history
  • Loading branch information
pascalwengerter committed Apr 22, 2021
1 parent cd5460f commit b4664c8
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 103 deletions.
8 changes: 8 additions & 0 deletions changelog/unreleased/enhancement-improve-modal
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Enhancement: Improve modal component

We've made the OcModal component more accessible:
- It now features `role="dialog"` and `aria-modal="true"`
- The modal title is now a `<h2>`
- Component styles have been moved from an individual stylesheet to the component file

https://github.com/owncloud/owncloud-design-system/pull/1214
104 changes: 102 additions & 2 deletions src/components/OcModal.vue
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<template>
<div class="oc-modal-background">
<div ref="$_ocModal" :class="classes" tabindex="0">
<div ref="$_ocModal" :class="classes" tabindex="0" role="dialog" aria-modal="true">
<div class="oc-modal-title">
<oc-icon v-if="icon" :name="icon" :variation="variation" />
<span v-text="title" />
<h2 v-text="title" />
</div>
<div class="oc-modal-body">
<div v-if="$slots.content" key="modal-slot-content" class="oc-modal-body-message">
Expand Down Expand Up @@ -285,6 +285,106 @@ export default {
}
</script>

<style lang="scss">
@mixin oc-modal-variation($color) {
border-top-color: $color;
span {
color: $color;
}
}
.oc-modal {
border-radius: 8px;
border-top: 10px solid var(--oc-color-swatch-passive-default);
box-shadow: 0 2px 4px rgba(14, 30, 37, 0.25);
max-width: 500px;
overflow: hidden;
width: 100%;
&:focus {
outline: none;
}
&-background {
align-items: center;
background-color: rgba(100, 100, 100, 0.3);
display: flex;
flex-flow: row wrap;
height: 100%;
justify-content: center;
left: 0;
position: fixed;
top: 0;
width: 100%;
z-index: 4;
}
&-primary {
@include oc-modal-variation(var(--oc-color-swatch-primary-default));
}
&-success {
@include oc-modal-variation(var(--oc-color-swatch-success-default));
}
&-warning {
@include oc-modal-variation(var(--oc-color-swatch-warning-default));
}
&-danger {
@include oc-modal-variation(var(--oc-color-swatch-danger-default));
}
&-title {
align-items: center;
background-color: var(--oc-color-text-inverse);
display: flex;
flex-flow: row wrap;
padding: var(--oc-space-small) var(--oc-space-medium);
> .oc-icon {
margin-right: var(--oc-space-small);
}
> h2 {
font-size: 1rem;
font-weight: bold;
margin: 0;
}
}
&-body {
background-color: var(--oc-color-background-muted);
color: var(--oc-color-text-default);
padding: var(--oc-space-medium);
&-message {
margin-bottom: var(--oc-space-medium);
}
&-input {
/* FIXME: this is ugly, but required so that the bottom padding doesn't look off when reserving vertical space for error messages below the input. */
margin-bottom: -20px;
padding-bottom: var(--oc-space-medium);
}
&-actions {
text-align: right;
.oc-button {
border-radius: 4px;
&.uk-button-default {
background-color: var(--oc-color-text-inverse);
color: var(--oc-color-text-default);
}
}
}
}
}
</style>

<docs>
```vue
<oc-modal
Expand Down
20 changes: 12 additions & 8 deletions src/components/__snapshots__/OcModal.spec.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

exports[`OcModal displays input 1`] = `
<div class="oc-modal-background">
<div tabindex="0" class="oc-modal oc-modal-passive">
<div tabindex="0" role="dialog" aria-modal="true" class="oc-modal oc-modal-passive">
<div class="oc-modal-title">
<!----> <span>Create new folder</span>
<!---->
<h2>Create new folder</h2>
</div>
<div class="oc-modal-body">
<oc-text-input-stub id="oc-textinput-1" type="text" value="New folder" label="Folder name" fixmessageline="true" class="oc-modal-body-input"></oc-text-input-stub>
Expand All @@ -19,9 +20,10 @@ exports[`OcModal displays input 1`] = `

exports[`OcModal hides icon if not specified 1`] = `
<div class="oc-modal-background">
<div tabindex="0" class="oc-modal oc-modal-passive">
<div tabindex="0" role="dialog" aria-modal="true" class="oc-modal oc-modal-passive">
<div class="oc-modal-title">
<!----> <span>Example title</span>
<!---->
<h2>Example title</h2>
</div>
<div class="oc-modal-body">
<p class="oc-modal-body-message">Example message</p>
Expand All @@ -36,9 +38,10 @@ exports[`OcModal hides icon if not specified 1`] = `

exports[`OcModal matches snapshot 1`] = `
<div class="oc-modal-background">
<div tabindex="0" class="oc-modal oc-modal-passive">
<div tabindex="0" role="dialog" aria-modal="true" class="oc-modal oc-modal-passive">
<div class="oc-modal-title">
<oc-icon-stub name="info" accessiblelabel="" type="span" size="medium" variation="passive"></oc-icon-stub> <span>Example title</span>
<oc-icon-stub name="info" accessiblelabel="" type="span" size="medium" variation="passive"></oc-icon-stub>
<h2>Example title</h2>
</div>
<div class="oc-modal-body">
<p class="oc-modal-body-message">Example message</p>
Expand All @@ -53,9 +56,10 @@ exports[`OcModal matches snapshot 1`] = `

exports[`OcModal overrides props message with slot 1`] = `
<div class="oc-modal-background">
<div tabindex="0" class="oc-modal oc-modal-passive">
<div tabindex="0" role="dialog" aria-modal="true" class="oc-modal oc-modal-passive">
<div class="oc-modal-title">
<!----> <span>Example title</span>
<!---->
<h2>Example title</h2>
</div>
<div class="oc-modal-body">
<div class="oc-modal-body-message">
Expand Down
1 change: 0 additions & 1 deletion src/styles/styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
@import 'theme/oc-file-actions';
@import 'theme/oc-icon';
@import 'theme/oc-loader';
@import 'theme/oc-modal';
@import 'theme/oc-progress-pie';
@import 'theme/oc-public-share-icon';
@import 'theme/oc-radio';
Expand Down
92 changes: 0 additions & 92 deletions src/styles/theme/oc-modal.scss

This file was deleted.

0 comments on commit b4664c8

Please sign in to comment.