pvincent
2 years ago
commit
b85c8a69ef
2 changed files with 152 additions and 0 deletions
-
7README.md
-
145index.html
@ -0,0 +1,7 @@ |
|||||
|
Web Development example 01 |
||||
|
========================== |
||||
|
|
||||
|
* [x] Tailwind |
||||
|
* [x] Font Awesome |
||||
|
* [x] Alpine JS |
||||
|
* [x] transition |
@ -0,0 +1,145 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8" /> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
|
|
||||
|
<link |
||||
|
rel="stylesheet" |
||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" |
||||
|
/> |
||||
|
|
||||
|
<script |
||||
|
defer |
||||
|
src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" |
||||
|
></script> |
||||
|
|
||||
|
<!-- Tailwind docs: https://tailwindcss.com/docs/installation/play-cdn --> |
||||
|
<script src="https://cdn.tailwindcss.com"></script> |
||||
|
<script> |
||||
|
tailwind.config = { |
||||
|
theme: { |
||||
|
extend: { |
||||
|
colors: { |
||||
|
clifford: "#da373d", |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
</head> |
||||
|
|
||||
|
<body |
||||
|
x-data="{ |
||||
|
formatter: new Intl.NumberFormat('fr-FR', { |
||||
|
minimumFractionDigits: 2, |
||||
|
maximumFractionDigits: 2, |
||||
|
}), |
||||
|
count: 0, |
||||
|
taxChoice:0, |
||||
|
taxes: [0, 8.5, 20], |
||||
|
articles: [ |
||||
|
{ |
||||
|
id: 0, |
||||
|
label: 'savon', |
||||
|
price: 5, |
||||
|
order: 0, |
||||
|
}, |
||||
|
{ |
||||
|
id: 1, |
||||
|
label: 'brosse', |
||||
|
price: 10, |
||||
|
order: 0, |
||||
|
}, |
||||
|
{ |
||||
|
id: 2, |
||||
|
label: 'lessive', |
||||
|
price: 13, |
||||
|
order: 0, |
||||
|
} |
||||
|
], |
||||
|
taxLabel: (entry)=> { |
||||
|
switch (entry) { |
||||
|
case 0: return 'exonéré'; |
||||
|
default: return entry+' %'; |
||||
|
} |
||||
|
}, |
||||
|
order(id){ |
||||
|
this.articles[id].order++; |
||||
|
}, |
||||
|
decrementOrder(id){ |
||||
|
this.articles[id].order--; |
||||
|
}, |
||||
|
computePrice(){ |
||||
|
let sum=0; |
||||
|
console.log(this.articles); |
||||
|
for (item of this.articles) { |
||||
|
sum += item.price * item.order; |
||||
|
} |
||||
|
return this.formatter.format(sum*(1+this.taxChoice/100)); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
}" |
||||
|
class="p-8 bg-white dark:bg-slate-400" |
||||
|
> |
||||
|
<h1 class="text-3xl text-clifford">Articles</h1> |
||||
|
|
||||
|
<div class="flex space-x-4"> |
||||
|
<template x-for="article in articles" :key="article.id"> |
||||
|
<div> |
||||
|
<span x-text="article.label"></span> |
||||
|
<span x-show="article.order>0" x-text=" '('+article.order+')'"></span> |
||||
|
<button |
||||
|
@click="order(article.id)" |
||||
|
class="flex items-center rounded bg-blue-100 px-5 py-2 text-slate-500 shadow-md" |
||||
|
> |
||||
|
<i class="mr-5 fa-solid fa-cart-plus"></i> |
||||
|
Increment |
||||
|
</button> |
||||
|
|
||||
|
<button |
||||
|
x-show="article.order>0" |
||||
|
@click="if (article.order>0) decrementOrder(article.id)" |
||||
|
class="flex items-center rounded bg-blue-100 px-5 py-2 text-slate-500 shadow-md" |
||||
|
> |
||||
|
<i class="mr-5 fa-regular fa-square-minus"></i> |
||||
|
Decrement |
||||
|
</button> |
||||
|
</div> |
||||
|
</template> |
||||
|
</div> |
||||
|
|
||||
|
<h2 class="text-2xl text-clifford">Taxes</h2> |
||||
|
<template x-for="item in taxes" :key="item"> |
||||
|
<div> |
||||
|
<input |
||||
|
x-model="taxChoice" |
||||
|
type="radio" |
||||
|
name="taxChoice" |
||||
|
:value="item" |
||||
|
/> |
||||
|
<label x-text="taxLabel(item)"></label> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<h2 class="text-2xl text-clifford mt-4">TOTAL TTC</h2> |
||||
|
<span class="text-3xl" x-text="computePrice() + ' €'" /> |
||||
|
|
||||
|
<div x-data="{ open: false }"> |
||||
|
<button |
||||
|
@click="open = ! open" |
||||
|
class="flex items-center rounded bg-orange-100 px-5 py-2 text-slate-500 shadow-md" |
||||
|
> |
||||
|
Voir C.G.U |
||||
|
</button> |
||||
|
<div |
||||
|
x-transition.duration.500ms |
||||
|
x-show="open" |
||||
|
@click.outside="open = false" |
||||
|
> |
||||
|
Les conditions de vente standard s'appliquent à la date de la commande |
||||
|
</div> |
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue