From 130e67a3deb3dad40654aabd704a9a8d1ec5bd11 Mon Sep 17 00:00:00 2001
From: paidge <paidge_cs@hotmail.com>
Date: Thu, 3 Feb 2022 00:36:38 +0100
Subject: [PATCH] v0.19 add icons

---
 assets/css/style.scss                  |   4 ++
 assets/img/clipboard.svg               |   1 -
 assets/img/favori_add.png              | Bin 2149 -> 0 bytes
 assets/img/favori_remove.png           | Bin 1962 -> 0 bytes
 components/badge/Danger.vue            |   2 +-
 components/btn/Clipboard.vue           |  11 ++---
 components/btn/Pagination.vue          |   4 +-
 components/btn/Search.vue              |  36 +++++++++++++++++
 components/btn/Sort.vue                |  53 ++++++++++---------------
 components/certif/List.vue             |   2 +-
 components/member/Card.vue             |  28 +++++--------
 components/member/List.vue             |  19 +++++----
 components/navigation/menu/Sidebar.vue |   2 +-
 layouts/default.vue                    |   2 +-
 nuxt.config.js                         |   4 +-
 package.json                           |   1 +
 pages/favoris.vue                      |   2 +-
 pages/lexique.vue                      |   8 +---
 pages/membres/index.vue                |  15 +------
 19 files changed, 101 insertions(+), 93 deletions(-)
 delete mode 100644 assets/img/clipboard.svg
 delete mode 100644 assets/img/favori_add.png
 delete mode 100644 assets/img/favori_remove.png
 create mode 100644 components/btn/Search.vue

diff --git a/assets/css/style.scss b/assets/css/style.scss
index 89754ed..81bc940 100644
--- a/assets/css/style.scss
+++ b/assets/css/style.scss
@@ -101,3 +101,7 @@ $info: #0a8299;
 		max-width: 205px;
 	}
 }
+
+.icon {
+	width: 1.15rem;
+}
diff --git a/assets/img/clipboard.svg b/assets/img/clipboard.svg
deleted file mode 100644
index e2d4666..0000000
--- a/assets/img/clipboard.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" x="0px" y="0px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"><path d="M19,2h-4.2c-0.4-1.2-1.5-2-2.8-2S9.6,0.8,9.2,2H5C3.9,2,3,2.9,3,4v16c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V4  C21,2.9,20.1,2,19,2z M12,2c0.6,0,1,0.4,1,1c0,0.6-0.4,1-1,1s-1-0.4-1-1C11,2.4,11.4,2,12,2z M19,20H5V4h2v2h10V4h2V20z"/></svg>
\ No newline at end of file
diff --git a/assets/img/favori_add.png b/assets/img/favori_add.png
deleted file mode 100644
index b0e2bf740cb17aa0ebe47367fdf1a4a66c6aff45..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2149
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

diff --git a/assets/img/favori_remove.png b/assets/img/favori_remove.png
deleted file mode 100644
index 584d636ceddc432ac0251065ba63fdf3a0d5c1cf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1962
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
YQAI|U$<n{x!9OO#6X%Pqbq%}x7m&emCIA2c

diff --git a/components/badge/Danger.vue b/components/badge/Danger.vue
index 786e21d..13bc023 100644
--- a/components/badge/Danger.vue
+++ b/components/badge/Danger.vue
@@ -7,7 +7,7 @@
 			$options.filters.dateStatus(limitDate) != 'success' &&
 			['MEMBER', 'MISSING'].includes(memberStatus)
 		"
-		>âš 
+		><outline-exclamation-icon class="icon" />
 		<span class="sr-only" v-if="title">{{ title }}</span>
 	</span>
 </template>
diff --git a/components/btn/Clipboard.vue b/components/btn/Clipboard.vue
index 121b4f5..005368a 100644
--- a/components/btn/Clipboard.vue
+++ b/components/btn/Clipboard.vue
@@ -3,9 +3,11 @@
 		<div class="input-group-prepend">
 			<button
 				id="btncopy"
-				class="btn btn-outline-secondary px-4 py-1"
+				class="btn btn-secondary px-4 py-1"
 				type="button"
-				@click="copyText"></button>
+				@click="copyText">
+				<outline-clipboard-copy-icon class="icon" />
+			</button>
 		</div>
 		<input
 			type="text"
@@ -42,10 +44,5 @@ export default {
 <style lang="scss">
 .clipboard {
 	max-width: 500px;
-
-	button {
-		background: url("~assets/img/clipboard.svg") no-repeat 50% 50% #fff;
-		background-size: 40%;
-	}
 }
 </style>
diff --git a/components/btn/Pagination.vue b/components/btn/Pagination.vue
index 63feac3..ae53984 100644
--- a/components/btn/Pagination.vue
+++ b/components/btn/Pagination.vue
@@ -3,7 +3,7 @@
 		<button
 			class="btn"
 			:class="{
-				'btn-primary': currentPage > 1,
+				'btn-info': currentPage > 1,
 				'btn-secondary': currentPage == 1
 			}"
 			@click="prevPage"
@@ -16,7 +16,7 @@
 		<button
 			class="btn"
 			:class="{
-				'btn-primary': currentPage * pageSize < arrayLength,
+				'btn-info': currentPage * pageSize < arrayLength,
 				'btn-secondary': currentPage * pageSize >= arrayLength
 			}"
 			@click="nextPage"
diff --git a/components/btn/Search.vue b/components/btn/Search.vue
new file mode 100644
index 0000000..18c94c8
--- /dev/null
+++ b/components/btn/Search.vue
@@ -0,0 +1,36 @@
+<template>
+	<div>
+		<div class="input-group mb-3">
+			<div class="input-group-prepend">
+				<span class="input-group-text"
+					><outline-search-icon class="icon"
+				/></span>
+			</div>
+			<input
+				type="text"
+				class="form-control"
+				:value="value"
+				autocomplete="off"
+				@input="$emit('input', $event.target.value)"
+				:placeholder="$t('recherche.title')"
+				:aria-label="$t('recherche.title')"
+				aria-describedby="rechHelp" />
+		</div>
+		<small v-if="help" id="rechHelp" class="form-text text-muted text-center">{{
+			help
+		}}</small>
+	</div>
+</template>
+
+<script>
+export default {
+	props: {
+		value: {
+			type: String
+		},
+		help: {
+			type: String
+		}
+	}
+}
+</script>
diff --git a/components/btn/Sort.vue b/components/btn/Sort.vue
index e178f04..e8c2c72 100644
--- a/components/btn/Sort.vue
+++ b/components/btn/Sort.vue
@@ -1,26 +1,13 @@
 <template>
-	<button
-		class="px-1 py-2 w-100 h-100 d-flex align-items-center justify-content-center">
-		<span>{{ title }}</span>
-		<span class="ml-2 d-flex flex-column">
-			<span
-				class="up"
-				:class="{
-					sorted: currentSortDir == 'desc' && currentSort == fieldName,
-					invisible: currentSortDir == 'asc' && currentSort == fieldName
-				}">
-				â–²
-			</span>
-			<span
-				class="down"
-				:class="{
-					sorted: currentSortDir == 'asc' && currentSort == fieldName,
-					invisible: currentSortDir == 'desc' && currentSort == fieldName
-				}">
-				â–¼
-			</span>
-		</span>
-	</button>
+	<div class="btn-sort px-2" tabindex="0">
+		{{ title }}
+		<outline-sort-ascending-icon
+			class="ml-2 icon"
+			v-if="currentSortDir == 'desc' && currentSort == fieldName" />
+		<outline-sort-descending-icon
+			class="ml-2 icon"
+			v-if="currentSortDir == 'asc' && currentSort == fieldName" />
+	</div>
 </template>
 
 <script>
@@ -49,16 +36,18 @@ export default {
 }
 </script>
 
-<style lang="scss" scoped>
-.up,
-.down {
-	line-height: 10px;
-	font-size: 1.1rem;
-	transform: scale(1.5, 1);
-	opacity: 0.3;
-}
+<style lang="scss">
+.btn-sort {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	min-height: 50px;
+	cursor: pointer;
+	background: var(--info);
+	color: white;
 
-.sorted {
-	opacity: 1;
+	&:focus {
+		background: #086375;
+	}
 }
 </style>
diff --git a/components/certif/List.vue b/components/certif/List.vue
index 6b3e2a5..7e72710 100644
--- a/components/certif/List.vue
+++ b/components/certif/List.vue
@@ -4,7 +4,7 @@
 			type="text"
 			v-if="certifs.length > 5"
 			v-model="search"
-			class="form-control w-75 mx-auto mb-2"
+			class="form-control w-75 mx-auto my-2"
 			:placeholder="$t('recherche.title')" />
 		<table class="table table-striped table-hover">
 			<thead class="thead-light">
diff --git a/components/member/Card.vue b/components/member/Card.vue
index 819ee13..b6979e4 100644
--- a/components/member/Card.vue
+++ b/components/member/Card.vue
@@ -3,20 +3,23 @@
 		<div class="card-body">
 			<div
 				class="uid-wrapper d-flex align-items-center justify-content-between mb-4">
-				<h2 class="card-title text-center">
+				<h2 class="card-title text-center d-flex align-items-center">
 					<span class="text-truncate d-inline-block">
 						{{ hash.uid }}
 					</span>
-					<BadgeStatus :membre="hash" />
+					<BadgeStatus class="ml-2" :membre="hash" />
 				</h2>
 				<button
 					id="favori"
 					class="btn btn-info"
-					:class="{
-						add: !$favourites.list.includes(hash.uid),
-						remove: $favourites.list.includes(hash.uid)
-					}"
-					@click="$favourites.toggleFavourite(hash.uid, $event)"></button>
+					@click="$favourites.toggleFavourite(hash.uid, $event)">
+					<outline-user-add-icon
+						class="icon"
+						v-if="!$favourites.list.includes(hash.uid)" />
+					<outline-user-remove-icon
+						class="icon"
+						v-if="$favourites.list.includes(hash.uid)" />
+				</button>
 			</div>
 			<BtnClipboard :textContent="hash.pubkey" />
 			<div class="table-responsive">
@@ -159,19 +162,8 @@ export default {
 }
 
 #favori {
-	background-size: 75%;
-	background-repeat: no-repeat;
-	background-position: center;
 	width: 50px;
 	height: 50px;
-
-	&.add {
-		background-image: url("~/assets/img/favori_add.png");
-	}
-
-	&.remove {
-		background-image: url("~/assets/img/favori_remove.png");
-	}
 }
 
 .member {
diff --git a/components/member/List.vue b/components/member/List.vue
index 08264a6..1548c0a 100644
--- a/components/member/List.vue
+++ b/components/member/List.vue
@@ -2,8 +2,13 @@
 	<div class="table-responsive pb-3">
 		<table class="table table-striped table-hover text-center">
 			<thead class="thead-light">
-				<tr class="h-100">
-					<th class="p-0 h-100" scope="col" @click="sort('uid')">
+				<tr class="border-left">
+					<th
+						class="p-0 border-right"
+						scope="col"
+						@click="sort('uid')"
+						@keyup.enter="sort('uid')"
+						@keyup.space="sort('uid')">
 						<BtnSort
 							fieldName="uid"
 							title="UID"
@@ -12,7 +17,7 @@
 					</th>
 					<th
 						scope="col"
-						class="d-none d-md-table-cell p-0"
+						class="d-none d-md-table-cell p-0 border-right"
 						@click="sort('pubkey')"
 						v-if="['search', 'favoris'].includes(type)">
 						<BtnSort
@@ -23,7 +28,7 @@
 					</th>
 					<th
 						scope="col"
-						class="d-none d-sm-table-cell p-0"
+						class="d-none d-sm-table-cell p-0 border-right"
 						@click="sort('date_membership')"
 						v-if="['adhesion', 'favoris', 'search'].includes(type)">
 						<BtnSort
@@ -38,7 +43,7 @@
 					</th>
 					<th
 						scope="col"
-						class="d-none p-0"
+						class="d-none p-0 border-right"
 						:class="{
 							'd-sm-table-cell': type == 'certif',
 							'd-md-table-cell': type != 'certif'
@@ -55,7 +60,7 @@
 							:currentSort="currentSort"
 							:currentSortDir="currentSortDir" />
 					</th>
-					<th v-if="type == 'favoris'"></th>
+					<th class="border-right" v-if="type == 'favoris'"></th>
 				</tr>
 			</thead>
 			<tbody>
@@ -116,7 +121,7 @@
 							v-if="$favourites.list.includes(member.uid)"
 							@click="$favourites.toggleFavourite(member.uid, $event)"
 							:title="$t('favoris.supprimer')">
-							X
+							<outline-trash-icon class="icon" />
 						</button>
 					</td>
 				</tr>
diff --git a/components/navigation/menu/Sidebar.vue b/components/navigation/menu/Sidebar.vue
index d49a3c4..e33c4fd 100644
--- a/components/navigation/menu/Sidebar.vue
+++ b/components/navigation/menu/Sidebar.vue
@@ -5,7 +5,7 @@
 				<img :src="$icon(512)" alt="Accueil" class="logo" />
 				<div>
 					<h1 class="h3">
-						Wotwizard <small><span class="small">v0.18</span></small>
+						Wotwizard <small><span class="small">v0.19</span></small>
 					</h1>
 					<small class="text-muted">{{ $t("slogan") }}</small>
 				</div>
diff --git a/layouts/default.vue b/layouts/default.vue
index f8fac1f..d75149e 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -6,7 +6,7 @@
 			class="scrollToTop bg-primary position-fixed text-white d-flex align-items-center justify-content-center rounded"
 			href="#"
 			@click="scrollToTop($event)">
-			↑
+			<outline-chevron-double-up-icon class="icon" />
 		</a>
 	</div>
 </template>
diff --git a/nuxt.config.js b/nuxt.config.js
index 7b7bd1a..ee308c5 100644
--- a/nuxt.config.js
+++ b/nuxt.config.js
@@ -36,7 +36,9 @@ export default {
 	// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
 	buildModules: [
 		// https://go.nuxtjs.dev/pwa
-		"@nuxtjs/pwa"
+		"@nuxtjs/pwa",
+		// https://github.com/whardier/nuxt-hero-icons
+		"@nuxt-hero-icons/outline/nuxt"
 	],
 
 	// Modules: https://go.nuxtjs.dev/config-modules
diff --git a/package.json b/package.json
index b5bb04e..63e0b61 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
 		"nuxt-generate": "nuxt generate"
 	},
 	"dependencies": {
+		"@nuxt-hero-icons/outline": "^1.0.1",
 		"@nuxtjs/apollo": "^4.0.1-rc.5",
 		"@nuxtjs/i18n": "^7.2.0",
 		"@nuxtjs/pwa": "^3.3.5",
diff --git a/pages/favoris.vue b/pages/favoris.vue
index a4af92a..7999653 100644
--- a/pages/favoris.vue
+++ b/pages/favoris.vue
@@ -17,7 +17,7 @@
 						<input
 							type="text"
 							v-model="search"
-							class="form-control col-sm-6 col-md-5 col-lg-4 col-xl-3 mx-auto mb-2"
+							class="form-control col-sm-6 col-md-5 col-lg-4 col-xl-3 mx-auto mb-3"
 							:placeholder="$t('recherche.title')" />
 						<MemberList
 							defaultSort="date_membership"
diff --git a/pages/lexique.vue b/pages/lexique.vue
index a40cfc2..6ffd212 100644
--- a/pages/lexique.vue
+++ b/pages/lexique.vue
@@ -3,13 +3,7 @@
 		<div class="rech-lexique row mb-4">
 			<div class="col-md-6 mx-auto">
 				<h2 class="text-center my-5 font-weight-light">{{ $t("lexique") }}</h2>
-				<div class="form-group">
-					<input
-						v-model="search"
-						type="text"
-						class="form-control"
-						:placeholder="$t('recherche.title')" />
-				</div>
+				<BtnSearch v-model="search" />
 			</div>
 		</div>
 		<div class="table-responsive">
diff --git a/pages/membres/index.vue b/pages/membres/index.vue
index 3a26a74..decbbb3 100644
--- a/pages/membres/index.vue
+++ b/pages/membres/index.vue
@@ -2,19 +2,8 @@
 	<main class="container">
 		<h2 class="text-center my-5 font-weight-light">{{ $t("membres") }}</h2>
 		<div class="row mb-4">
-			<div class="col-sm-8 col-md-6 col-lg-5 m-auto text-center">
-				<label for="rech" class="form-label">{{ $t("recherche.title") }}</label>
-				<input
-					type="text"
-					class="form-control"
-					id="rech"
-					aria-describedby="rechHelp"
-					v-model="param"
-					autocomplete="off"
-					@keyup="save" />
-				<small id="rechHelp" class="form-text text-muted">{{
-					$t("recherche.desc")
-				}}</small>
+			<div class="col-sm-8 col-md-6 col-lg-5 m-auto">
+				<BtnSearch v-model="param" :help="$t('recherche.desc')" />
 			</div>
 		</div>
 		<NavigationLoader :isLoading="$apollo.queries.idSearch.loading" />
-- 
GitLab