Skip to content

Commit

Permalink
Created QR Reader extension
Browse files Browse the repository at this point in the history
  • Loading branch information
prasad-chavan1 authored May 16, 2024
1 parent 0b0ce6e commit 502cd84
Show file tree
Hide file tree
Showing 4 changed files with 220 additions and 0 deletions.
33 changes: 33 additions & 0 deletions QR Code Reader/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>QR Code Reader | CodingNepal</title>
<link rel="stylesheet" href="src/style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Font Awesome CDN Link for Icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css">
</head>
<body>
<div class="wrapper">
<form action="#">
<input type="file" hidden>
<img src="#" alt="qr-code">
<div class="content">
<i class="fas fa-cloud-upload"></i>
<p>Upload QR Code to Read</p>
</div>
</form>
<div class="details">
<textarea spellcheck="false" disabled></textarea>
<div class="buttons">
<button class="close">Close</button>
<button class="copy">Copy Text</button>
</div>
</div>
</div>

<script src="scripts/script.js"></script>

</body>
</html>
19 changes: 19 additions & 0 deletions QR Code Reader/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"manifest_version": 3,
"name": "QR Reader",
"version": "1.0",
"description": "Simple QR Reader",
"permissions": [
"storage"
],
"action": {
"default_popup": "index.html"
},
"web_accessible_resources": [
{
"resources": ["index.html"],
"matches": ["<all_urls>"]
}
]
}

38 changes: 38 additions & 0 deletions QR Code Reader/scripts/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const wrapper = document.querySelector(".wrapper"),
form = document.querySelector("form"),
fileInp = form.querySelector("input"),
infoText = form.querySelector("p"),
closeBtn = document.querySelector(".close"),
copyBtn = document.querySelector(".copy");

function fetchRequest(file, formData) {
infoText.innerText = "Scanning QR Code...";
fetch("http://api.qrserver.com/v1/read-qr-code/", {
method: 'POST', body: formData
}).then(res => res.json()).then(result => {
result = result[0].symbol[0].data;
infoText.innerText = result ? "Upload QR Code to Scan" : "Couldn't scan QR Code";
if(!result) return;
document.querySelector("textarea").innerText = result;
form.querySelector("img").src = URL.createObjectURL(file);
wrapper.classList.add("active");
}).catch(() => {
infoText.innerText = "Couldn't scan QR Code";
});
}

fileInp.addEventListener("change", async e => {
let file = e.target.files[0];
if(!file) return;
let formData = new FormData();
formData.append('file', file);
fetchRequest(file, formData);
});

copyBtn.addEventListener("click", () => {
let text = document.querySelector("textarea").textContent;
navigator.clipboard.writeText(text);
});

form.addEventListener("click", () => fileInp.click());
closeBtn.addEventListener("click", () => wrapper.classList.remove("active"));
130 changes: 130 additions & 0 deletions QR Code Reader/src/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
/* Import Google Font - Poppins */
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
body{
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
padding: 0 10px;
background: #E3F2FD;
}
.wrapper{
height: 270px;
width: 420px;
border-radius: 7px;
background: #0B85FF;
padding: 30px 30px 35px;
transition: height 0.2s ease;
box-shadow: 0 10px 20px rgba(0,0,0,0.1);
}
.wrapper.active{
height: 525px;
}
.wrapper form{
height: 210px;
display: flex;
cursor: pointer;
user-select: none;
text-align: center;
border-radius: 7px;
background: #fff;
align-items: center;
justify-content: center;
transition: height 0.2s ease;
}
.wrapper.active form{
height: 225px;
pointer-events: none;
}
form img{
display: none;
max-width: 148px;
}
.wrapper.active form img{
display: block;
}
.wrapper.active form .content{
display: none;
}
form .content i{
color: #0B85FF;
font-size: 55px;
}
form .content p{
color: #0B85FF;
margin-top: 15px;
font-size: 16px;
}
.wrapper .details{
opacity: 0;
margin-top: 25px;
pointer-events: none;
}
.wrapper.active .details{
opacity: 1;
pointer-events: auto;
transition: opacity 0.5s 0.05s ease;
}
.details textarea{
width: 100%;
height: 128px;
outline: none;
resize: none;
color: #fff;
font-size: 18px;
background: none;
border-radius: 5px;
padding: 10px 15px;
border: 1px solid #fff;
}
textarea::-webkit-scrollbar{
width: 0px;
}
textarea:hover::-webkit-scrollbar{
width: 5px;
}
textarea:hover::-webkit-scrollbar-track{
background: none;
}
textarea:hover::-webkit-scrollbar-thumb{
background: #fff;
border-radius: 8px;
}
.details .buttons{
display: flex;
margin-top: 20px;
align-items: center;
justify-content: space-between;
}
.buttons button{
height: 55px;
outline: none;
border: none;
font-weight: 500;
font-size: 16px;
cursor: pointer;
color: #0B85FF;
border-radius: 5px;
background: #fff;
transition: transform 0.3s ease;
width: calc(100% / 2 - 10px);
}
.buttons button:active{
transform: scale(0.95);
}

@media (max-width: 450px) {
.wrapper{
padding: 25px;
height: 260px;
}
.wrapper.active{
height: 520px;
}
}

0 comments on commit 502cd84

Please sign in to comment.