feat: add initial version of QRMaker web app
Introduced QRMaker, a simple web app for generating QR codes from user input. Key features include real-time QR code generation, multi-line input, and responsive design using Bootstrap. Added initial project setup with HTML, CSS, JS, and a README for setup and usage instructions.
This commit is contained in:
commit
a2335a7082
4 changed files with 157 additions and 0 deletions
61
README.md
Normal file
61
README.md
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
# QRMaker
|
||||||
|
|
||||||
|
A simple web application that allows users to generate QR codes from the text they input. The application is built using Bootstrap for styling and QRCode.js for generating the QR codes.
|
||||||
|
|
||||||
|
The QR code is generated locally in the browser, no data is sent to a server.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Real-time QR code generation based on user input.
|
||||||
|
- Multi-line input.
|
||||||
|
- Responsive design with Bootstrap.
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|
You can view a live version of the project [here](https://qrmaker.private.coffee).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To run this project locally, follow these steps:
|
||||||
|
|
||||||
|
1. **Clone the repository:**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone https://git.private.coffee/PrivateCoffee/QRMaker.git
|
||||||
|
cd QRMaker
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Open `index.html` in your browser:**
|
||||||
|
```sh
|
||||||
|
open index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. Open the web page.
|
||||||
|
2. Enter text into the multi-line input field.
|
||||||
|
3. The QR code will be generated automatically as you type.
|
||||||
|
4. Done! You can now download the QR code or scan it directly from the screen.
|
||||||
|
|
||||||
|
## Technologies Used
|
||||||
|
|
||||||
|
- HTML
|
||||||
|
- CSS (Bootstrap)
|
||||||
|
- JavaScript (QRCode.js)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Contributions are welcome! Please fork the repository and create a pull request with your changes.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
||||||
|
|
||||||
|
## Acknowledgements
|
||||||
|
|
||||||
|
- [Bootstrap](https://getbootstrap.com/)
|
||||||
|
- [QRCode.js](https://davidshimjs.github.io/qrcodejs/)
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
For any questions or feedback, please open an issue or join our [Matrix room](https://matrix.pcof.fi/#/#private.coffee:private.coffee).
|
46
index.html
Normal file
46
index.html
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>QRMaker</title>
|
||||||
|
<!-- Bootstrap CSS -->
|
||||||
|
<link href="https://nobsdelivr.private.coffee/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<!-- Custom CSS -->
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="card">
|
||||||
|
<h1 class="text-center">QR Code Generator</h1>
|
||||||
|
<div class="form-group textarea-container">
|
||||||
|
<label for="text-input">Enter text to generate QR code:</label>
|
||||||
|
<textarea class="form-control" id="text-input" rows="5" placeholder="Type something..."></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="qr-code-container">
|
||||||
|
<div id="qrcode"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
<p>Brought to you by <a href="https://private.coffee" target="_blank">Private.coffee</a></p>
|
||||||
|
<p>Source code available on <a href="https://git.private.coffee/PrivateCoffee/QRMaker" target="_blank">Private.coffee Git</a></p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- QRCode.js library -->
|
||||||
|
<script src="https://nobsdelivr.private.coffee/npm/qrcodejs/qrcode.min.js"></script>
|
||||||
|
<!-- Bootstrap JS and dependencies -->
|
||||||
|
<script src="https://nobsdelivr.private.coffee/npm/jquery@3.7.1/dist/jquery.min.js"></script>
|
||||||
|
<script src="https://nobsdelivr.private.coffee/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js"></script>
|
||||||
|
<script src="https://nobsdelivr.private.coffee/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js"></script>
|
||||||
|
<!-- Custom JS -->
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
22
script.js
Normal file
22
script.js
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
const textInput = document.getElementById('text-input');
|
||||||
|
const qrCodeContainer = document.getElementById('qrcode');
|
||||||
|
|
||||||
|
const qrCode = new QRCode(qrCodeContainer, {
|
||||||
|
text: "",
|
||||||
|
width: 256,
|
||||||
|
height: 256,
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateQRCode() {
|
||||||
|
const text = textInput.value;
|
||||||
|
qrCode.clear();
|
||||||
|
if (text) {
|
||||||
|
qrCode.makeCode(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
textInput.addEventListener('input', updateQRCode);
|
||||||
|
|
||||||
|
updateQRCode();
|
||||||
|
});
|
28
style.css
Normal file
28
style.css
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
body {
|
||||||
|
padding-top: 50px;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
}
|
||||||
|
.qr-code-container {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
.textarea-container {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
footer {
|
||||||
|
background-color: #343a40;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px 0;
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
bottom: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
footer a {
|
||||||
|
color: #ffc107;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
Loading…
Reference in a new issue