1
+ <!DOCTYPE html>
2
+ < html lang ="en ">
3
+ < head >
4
+ < meta charset ="utf-8 ">
5
+ < meta name ="viewport " content ="width=device-width, initial-scale=1 ">
6
+ < title > Satoshis Converter</ title >
7
+ < link rel ="preconnect " href ="https://fonts.googleapis.com ">
8
+ < link rel ="preconnect " href ="https://fonts.gstatic.com " crossorigin >
9
+ < link href ="https://fonts.googleapis.com/css2?family=Itim&display=swap " rel ="stylesheet ">
10
+ < link href ="https://fonts.googleapis.com/css2?family=Maven+Pro&display=swap " rel ="stylesheet ">
11
+ < style >
12
+ body {
13
+ font-family : 'Maven Pro' , sans-serif;
14
+ }
15
+
16
+ header {
17
+ text-align : center;
18
+ }
19
+
20
+ h1 {
21
+ font-family : 'Itim' , cursive;
22
+ color : # f79412 ;
23
+ }
24
+
25
+ .container {
26
+ max-width : 35rem ;
27
+ min-height : 30rem ;
28
+ margin : auto;
29
+ }
30
+
31
+ .main-border {
32
+ min-height : 30rem ;
33
+ background-color : rgb (250 , 248 , 248 );
34
+ border : solid 1.5px # f79412 ;
35
+ border-radius : 5px ;
36
+ padding : 1rem 0 ;
37
+ display : flex;
38
+ flex-direction : column;
39
+ }
40
+
41
+ .convert-title {
42
+ font-size : 1.3rem ;
43
+ text-align : center;
44
+ }
45
+
46
+ .currencies-inputs {
47
+ gap : 20px ;
48
+ display : flex;
49
+ flex-direction : column;
50
+ align-items : center;
51
+ }
52
+
53
+ .currency-borders {
54
+ border : solid 1.5px gainsboro;
55
+ background-color : aliceblue;
56
+ border-radius : 8px ;
57
+ min-width : 20rem ;
58
+ display : flex;
59
+ flex-direction : column;
60
+ gap : 6px ;
61
+ padding : 5px 2px ;
62
+ }
63
+
64
+ .currency-header {
65
+ margin : 5px 10px ;
66
+ opacity : 0.6 ;
67
+ display : flex;
68
+ justify-content : space-between;
69
+ }
70
+
71
+ p {
72
+ margin : 0 ;
73
+ }
74
+
75
+ .currency-main-container {
76
+ margin : 2px 10px ;
77
+ display : flex;
78
+ justify-content : space-between;
79
+ }
80
+
81
+ .currency-logo-symbol {
82
+ display : flex;
83
+ gap : 10px ;
84
+ max-width : 60px ;
85
+ }
86
+
87
+ .currency-symbol {
88
+ opacity : 0.6 ;
89
+ }
90
+
91
+ .currency-symbol-name {
92
+ display : flex;
93
+ flex-direction : column;
94
+ gap : 5px ;
95
+ }
96
+
97
+ .currency-amount {
98
+ align-self : center;
99
+ font-size : 24px ;
100
+ }
101
+
102
+ .sats-amount {
103
+ align-self : center;
104
+ font-size : 24px ;
105
+ }
106
+
107
+ .currency-logo {
108
+ align-self : center;
109
+ }
110
+
111
+ .buttons-container {
112
+ margin-top : 30px ;
113
+ text-align : center;
114
+ }
115
+
116
+ .icon-swap-currency-button {
117
+ font-size : 1.5em ;
118
+ align-self : center;
119
+ border : none;
120
+ background : none;
121
+ cursor : pointer;
122
+ }
123
+
124
+ .icon-swap-currency-button : hover {
125
+ color : # f79412 ;
126
+ }
127
+
128
+ .button {
129
+ font-family : 'Itim' , cursive;
130
+ font-size : 20px ;
131
+ font-weight : 500 ;
132
+ display : inline-flex;
133
+ height : 50px ;
134
+ padding : 0 ;
135
+ background : # f79412 ;
136
+ border : none;
137
+ outline : none;
138
+ border-radius : 5px ;
139
+ overflow : hidden;
140
+ cursor : pointer;
141
+ }
142
+
143
+ .button : hover {
144
+ background : # ee8e0f ;
145
+ }
146
+
147
+ .button : active {
148
+ background : # ab6203 ;
149
+ }
150
+
151
+ .button-text ,
152
+ .button-icon {
153
+ display : inline-flex;
154
+ align-items : center;
155
+ padding : 0 24px ;
156
+ color : white;
157
+ height : 100% ;
158
+ }
159
+
160
+ .button-icon {
161
+ font-size : 1.5em ;
162
+ background-color : rgba (0 , 0 , 0 , 0.08 );
163
+ }
164
+
165
+ .currency-input {
166
+ border : none;
167
+ background : none;
168
+ font-size : 24px ;
169
+ border : none transparent;
170
+ outline : none;
171
+ text-align : right;
172
+ max-width : 180px ;
173
+ }
174
+
175
+ footer {
176
+ text-align : center;
177
+ }
178
+
179
+ .disclaimer {
180
+ margin-top : 25px ;
181
+ display : flex;
182
+ justify-content : center;
183
+ gap : 8px ;
184
+ }
185
+
186
+ .disclaimer p {
187
+ font-size : 10px ;
188
+ }
189
+
190
+ </ style >
191
+ </ head >
192
+ < body >
193
+
194
+ < header >
195
+ < h1 > Satoshi's Converter</ h1 >
196
+ </ header >
197
+
198
+ < main >
199
+ < div class ="container ">
200
+ < div class ="main-border ">
201
+
202
+ < h2 class ="convert-title "> Convert EUR/USD into BTC and Satoshis</ h2 >
203
+
204
+ < div class ="currencies-inputs ">
205
+
206
+ < div class ="currency-borders ">
207
+
208
+ < div class ="currency-header ">
209
+ < p > Currency</ p >
210
+ < p > Amount</ p >
211
+ </ div >
212
+
213
+ < div class ="currency-main-container ">
214
+
215
+ < div class ="currency-logo-symbol ">
216
+ < div class ="currency-logo ">
217
+ < img src ="https://cdn-icons-png.flaticon.com/512/126/126252.png?w=826&t=st=1675967593~exp=1675968193~hmac=505745616d456816c7063dfa588892bfb33f9fd7d0053167fcbe57c0ea977bd6 " id ="fiat-logo " width ="30 " height ="30 ">
218
+ </ div >
219
+ < div class ="currency-symbol-name ">
220
+ < p id ="currency-name "> Euro</ p >
221
+ < p class ="currency-symbol " id ="fiat-currency-symbol "> EUR</ p >
222
+ </ div >
223
+ < button class ="icon-swap-currency-button " id ="swap-button ">
224
+ < ion-icon name ="swap-vertical-outline "> </ ion-icon >
225
+ </ button >
226
+ </ div >
227
+
228
+ < div class ="currency-amount ">
229
+ < input class ="currency-input " type ="text " value ="20000 " maxlength ='10 '>
230
+ </ div >
231
+ </ div >
232
+ </ div >
233
+
234
+ < div class ="currency-borders ">
235
+ < div class ="currency-header ">
236
+ < p > Currency</ p >
237
+ < p > Amount</ p >
238
+ </ div >
239
+
240
+ < div class ="currency-main-container ">
241
+
242
+ < div class ="currency-logo-symbol ">
243
+ < div class ="currency-logo ">
244
+ < img src ="https://upload.wikimedia.org/wikipedia/commons/4/46/Bitcoin.svg " width ="30 " height ="30 ">
245
+ </ div >
246
+ < div class ="currency-symbol-name ">
247
+ < div >
248
+ Bitcoin
249
+ </ div >
250
+ < div class ="currency-symbol ">
251
+ BTC
252
+ </ div >
253
+ </ div >
254
+ </ div >
255
+
256
+ < div class ="currency-amount " id ="btc-amount ">
257
+ 1
258
+ </ div >
259
+ </ div >
260
+ </ div >
261
+
262
+ < div class ="currency-borders ">
263
+ < div class ="currency-header ">
264
+ < p > Currency</ p >
265
+ < p > Amount</ p >
266
+ </ div >
267
+
268
+ < div class ="currency-main-container ">
269
+
270
+ < div class ="currency-logo-symbol ">
271
+ < div class ="currency-logo ">
272
+ < img src ="https://upload.wikimedia.org/wikipedia/commons/4/46/Bitcoin.svg " width ="30 " height ="30 ">
273
+ </ div >
274
+ < div class ="currency-symbol-name ">
275
+ < div >
276
+ Satoshis
277
+ </ div >
278
+ < div class ="currency-symbol ">
279
+ SATS
280
+ </ div >
281
+ </ div >
282
+ </ div >
283
+
284
+ < div class ="sats-amount " id ="sat-amount ">
285
+ 100000000
286
+ </ div >
287
+ </ div >
288
+ </ div >
289
+
290
+ </ div >
291
+
292
+ < div class ="buttons-container ">
293
+ < button type ="button " class ="button ">
294
+ < span class ="button-text "> Convert</ span >
295
+ < span class ="button-icon ">
296
+ < ion-icon name ="sync-outline "> </ ion-icon >
297
+ </ span >
298
+ </ button >
299
+ </ div >
300
+
301
+ < div class ="disclaimer ">
302
+ < ion-icon name ="alert-circle-outline "> </ ion-icon >
303
+ < p >
304
+ BTC values for EUR and USD currencies < br > are not up to date. This project has one < br > purpose only and that is to practice.
305
+ </ p >
306
+ </ div >
307
+
308
+ </ div >
309
+ </ div >
310
+ </ main >
311
+
312
+ < footer >
313
+ < h4 > Made by Almopt</ h4 >
314
+ </ footer >
315
+
316
+ < script type ="
module "
src ="
https://unpkg.com/[email protected] /dist/ionicons/ionicons.esm.js "
> </ script >
317
+ < script nomodule src ="
https://unpkg.com/[email protected] /dist/ionicons/ionicons.js "
> </ script >
318
+ < script >
319
+
320
+ const btcPriceEUR = 20000 ;
321
+ const btcPriceUSD = 23000 ;
322
+ const oneBtcInSats = 100000000 ;
323
+ const EURImg = "https://cdn-icons-png.flaticon.com/512/126/126252.png?w=826&t=st=1675967593~exp=1675968193~hmac=505745616d456816c7063dfa588892bfb33f9fd7d0053167fcbe57c0ea977bd6" ;
324
+ const USDImg = "https://cdn-icons-png.flaticon.com/512/117/117626.png?w=826&t=st=1675967862~exp=1675968462~hmac=8075584ec0c311d1304ca9c3ca8578dc359ff9675d74a3710ff8303d522824b0" ;
325
+ const euroSymbol = "EUR" ;
326
+ const dollarSymbol = "USD" ;
327
+ const euroName = "Euro" ;
328
+ const dollarName = "Dollar" ;
329
+
330
+ let swapButton = document . getElementById ( "swap-button" ) ;
331
+ let amountInput = document . querySelector ( ".currency-input" ) ;
332
+ let btcAmount = document . getElementById ( "btc-amount" ) ;
333
+ let satAmount = document . getElementById ( "sat-amount" ) ;
334
+ let convertButton = document . querySelector ( ".button" ) ;
335
+ let currencyLogo = document . getElementById ( "fiat-logo" ) ;
336
+ let currencyName = document . getElementById ( "currency-name" ) ;
337
+ let currencySymbol = document . getElementById ( "fiat-currency-symbol" ) ;
338
+ let swapCurrencyButton = document . getElementById ( "swap-button" ) ;
339
+
340
+ const convertFiatToBTC = ( event , currencySymbol ) => {
341
+
342
+ let btcPriceInFiat = ( currencySymbol . textContent === euroSymbol ) ? btcPriceEUR : btcPriceUSD ;
343
+
344
+ btcAmount . innerText = ( Number ( amountInput . value ) / btcPriceInFiat ) . toFixed ( 5 ) ;
345
+ satAmount . innerText = ( btcAmount . innerText * oneBtcInSats ) . toFixed ( 3 ) ;
346
+
347
+ if ( satAmount . innerText > 1000000000 ) {
348
+ satAmount . style . fontSize = '17px' ;
349
+ }
350
+ }
351
+
352
+ const swapFiatCurrency = ( ) => {
353
+ if ( currencySymbol . textContent === euroSymbol ) {
354
+ currencyName . textContent = dollarName ;
355
+ currencySymbol . textContent = dollarSymbol ;
356
+ currencyLogo . src = USDImg ;
357
+ } else {
358
+ currencyName . textContent = euroName ;
359
+ currencySymbol . textContent = euroSymbol ;
360
+ currencyLogo . src = EURImg ;
361
+ }
362
+ }
363
+
364
+ swapButton . addEventListener ( "click" , swapFiatCurrency ) ;
365
+ convertButton . addEventListener ( "click" , ( ) => convertFiatToBTC ( event , currencySymbol ) ) ;
366
+
367
+ </ script >
368
+ </ body >
369
+ </ html >
0 commit comments