spanish-quizzer

An app to quiz you on Spanish vocabulary and verb conjugations
git clone https://git.ashermorgan.net/spanish-quizzer/
Log | Files | Refs | README

commit 971323cb7b19493de3eea29ea3915a9547772342
parent 850182c21a97fb4e76c14b3b49687d8fdd777ea4
Author: AsherMorgan <59518073+AsherMorgan@users.noreply.github.com>
Date:   Sun, 14 Mar 2021 11:18:20 -0700

Improve accessibility

Diffstat:
Mcss/global.css | 14++++++++------
Mjs/app.js | 45++++++++++++++++++++++++++++++++++++++++-----
Mjs/filtersPage.js | 11++++++-----
Mjs/quizzer.js | 2+-
Mjs/reference.js | 3++-
Mjs/settingsPage.js | 2+-
6 files changed, 58 insertions(+), 19 deletions(-)

diff --git a/css/global.css b/css/global.css @@ -45,17 +45,19 @@ header { header>* { cursor: pointer; } -header>img { +header button { position: absolute; - height: 30px; - background-color: var(--theme-color); } -header>img:first-child { +header button:first-child { left: 10px; } -header>img:last-child { +header button:last-child { right: 10px; } +header button img { + height: 30px; + width: 30px; +} @@ -100,7 +102,7 @@ button.icon { cursor: pointer; vertical-align: middle; } -button.icon img { +main button.icon img { height: 24px; width: 24px; } diff --git a/js/app.js b/js/app.js @@ -6,37 +6,72 @@ let app; // page-header component const pageHeader = Vue.component("pageHeader", { props: { + /** + * The 1st header icon + */ icon1: { type: String }, + + /** + * The 2nd header icon + */ icon2: { type: String }, + + /** + * The label for the 1st header icon + */ + label1: { + type: String + }, + + /** + * The label for the 2nd header icon + */ + label2: { + type: String + }, + + /** + * The header text + */ title: { type: String, default: "Spanish-Quizzer", } }, computed: { - image1: function() { + /** + * The path to the 1st header icon + */ + path1: function() { if (this.icon1) return `images/${this.icon1}.svg`; else return null; }, - image2: function() { + + /** + * The path to the 2nd header icon + */ + path2: function() { if (this.icon2) return `images/${this.icon2}.svg`; else return null; } }, methods: { + /** + * Navigate to the home page + */ goHome: function() { if (this.$route.name !== 'home') this.$router.push('home'); } }, template: ` <header> - <img v-if="image1" :src="image1" @click="$emit('click1')"/> + <button v-if="path1" :title="label1" class="icon"><img :src="path1" alt="" @click="$emit('click1')"/></button> <span @click="goHome">{{ title }}</span> - <img v-if="image2" :src="image2" @click="$emit('click2')"/> + <button v-if="path2" :title="label2" class="icon"><img :src="path2" alt="" @click="$emit('click2')"/></button> </header> ` }); @@ -83,7 +118,7 @@ const homePage = Vue.component("homePage", { }, template: ` <div class="home"> - <page-header icon2="settings" @click2="$router.push({name:'settings', params:{referer:$route.name}})"></page-header> + <page-header icon2="settings" label2="Settings" @click2="$router.push({name:'settings', params:{referer:$route.name}})"></page-header> <main> <h1>What do you want to study?</h1> <div> diff --git a/js/filtersPage.js b/js/filtersPage.js @@ -215,7 +215,7 @@ const filterInput = Vue.component("filterInput", { <div class="verbSettings" v-show="category === 'verbs'"> <h1> Verb Filters - <button class="icon" @click="AddFilter();"><img src="./images/plus.svg"></button> + <button title="Add filter" class="icon" @click="AddFilter();"><img src="./images/plus.svg" alt=""></button> </h1> <div v-for="(filter, index) in verbFilters" class="filter"> @@ -241,7 +241,7 @@ const filterInput = Vue.component("filterInput", { <option>Conj. → Eng.</option> <option>Conj. → Esp.</option> </select> - <button class="icon" @click="RemoveFilter(index);"><img src="./images/trash.svg"></button> + <button title="Remove filter" class="icon" @click="RemoveFilter(index);"><img src="./images/trash.svg" alt=""></button> </div> </div> @@ -249,7 +249,7 @@ const filterInput = Vue.component("filterInput", { <div class="vocabSettings" v-show="category === 'vocab'"> <h1> Vocabulary Filters - <button class="icon" @click="AddFilter();"><img src="./images/plus.svg"></button> + <button title="Add filter" class="icon" @click="AddFilter();"><img src="./images/plus.svg" alt=""></button> </h1> <div v-for="(filter, index) in vocabFilters" class="filter"> @@ -290,7 +290,7 @@ const filterInput = Vue.component("filterInput", { <option>Eng. → Esp.</option> <option>Esp. → Eng.</option> </select> - <button class="icon" @click="RemoveFilter(index);"><img src="./images/trash.svg"></button> + <button title="Remove filter" class="icon" @click="RemoveFilter(index);"><img src="./images/trash.svg" alt=""></button> </div> </div> </div> @@ -378,7 +378,8 @@ const filtersPage = Vue.component("filtersPage", { template: ` <div class="filtersPage"> - <page-header icon1="arrow-left" @click1="$emit('back');" icon2="settings" @click2="$router.push({name:'settings', params:{referer:$route.name}})"></page-header> + <page-header icon1="arrow-left" label1="Back" @click1="$emit('back');" + icon2="settings" label2="Settings" @click2="$router.push({name:'settings', params:{referer:$route.name}})"></page-header> <main> <filter-input ref="filters" :category="category" v-model="filters"></filter-input> <h1>Quizzer Settings</h1> diff --git a/js/quizzer.js b/js/quizzer.js @@ -378,7 +378,7 @@ const quizzerPage = Vue.component("quizzerPage", { template: ` <div class="quizzer-page"> - <page-header @click1="$emit('back', referer);" icon1="x"></page-header> + <page-header @click1="$emit('back', referer);" icon1="x" label1="Back"></page-header> <main> <quizzer :starting-prompts="prompts" :starting-index="index" :settings="settings" @new-prompt="updateProgress" @finished-prompts="$emit('back', referer);"> diff --git a/js/reference.js b/js/reference.js @@ -109,7 +109,8 @@ const referenceTables = Vue.component("referenceTables", { const referencePage = Vue.component("referencePage", { template: ` <div class="referencePage"> - <page-header icon1="arrow-left" @click1="$emit('back');" icon2="settings" @click2="$router.push({name:'settings', params:{referer:$route.name}})"></page-header> + <page-header icon1="arrow-left" label1="Back" @click1="$emit('back');" + icon2="settings" label2="Settings" @click2="$router.push({name:'settings', params:{referer:$route.name}})"></page-header> <main> <reference-tables :data="this.$root.$data.data"></reference-tables> </main> diff --git a/js/settingsPage.js b/js/settingsPage.js @@ -110,7 +110,7 @@ const settingsPage = Vue.component("settingsPage", { template: ` <div class="settingsPage"> - <page-header @click1="$emit('back', referer);" icon1="x"></page-header> + <page-header @click1="$emit('back', referer);" icon1="x" label1="Back"></page-header> <main> <h1>Settings</h1> <settings-input></settings-input>