first commit
هذا الالتزام موجود في:
ثنائية
icon-192x192.png
Normal file
ثنائية
icon-192x192.png
Normal file
ملف ثنائي غير معروض.
|
بعد العرض: | الارتفاع: | الحجم: 19 KiB |
ثنائية
icon-512x512.png
Normal file
ثنائية
icon-512x512.png
Normal file
ملف ثنائي غير معروض.
|
بعد العرض: | الارتفاع: | الحجم: 43 KiB |
19
index.html
Normal file
19
index.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>QR Code Generator PWA</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
||||
<link rel="manifest" href="manifest.json">
|
||||
</head>
|
||||
<body class="flex items-center justify-center h-screen bg-gray-100">
|
||||
<div class="bg-white p-6 rounded-lg shadow-lg">
|
||||
<h1 class="text-2xl font-bold mb-4">QR Code Generator</h1>
|
||||
<input type="text" id="text-input" class="w-full p-2 mb-4 border rounded" placeholder="Enter text to generate QR code">
|
||||
<button id="generate-btn" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Generate QR Code</button>
|
||||
<canvas id="qr-code" class="mt-4"></canvas>
|
||||
</div>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
20
manifest.json
Normal file
20
manifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "QR Code Generator",
|
||||
"short_name": "QRGen",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#ffffff",
|
||||
"theme_color": "#000000",
|
||||
"icons": [
|
||||
{
|
||||
"src": "icon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
]
|
||||
}
|
||||
24
script.js
Normal file
24
script.js
Normal file
@@ -0,0 +1,24 @@
|
||||
document.getElementById('generate-btn').addEventListener('click', () => {
|
||||
const text = document.getElementById('text-input').value;
|
||||
const canvas = document.getElementById('qr-code');
|
||||
if (text) {
|
||||
QRCode.toCanvas(canvas, text, function (error) {
|
||||
if (error) console.error(error);
|
||||
console.log('QR code generated!');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Add QRCode library
|
||||
const script = document.createElement('script');
|
||||
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/qrcode-generator/1.4.4/qrcode.min.js';
|
||||
document.body.appendChild(script);
|
||||
|
||||
// Register the Service Worker
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', () => {
|
||||
navigator.serviceWorker.register('/sw.js')
|
||||
.then(registration => console.log('Service Worker registered:', registration))
|
||||
.catch(error => console.log('Service Worker registration failed:', error));
|
||||
});
|
||||
}
|
||||
23
sw.js
Normal file
23
sw.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const CACHE_NAME = 'qr-code-pwa-v1';
|
||||
const assetsToCache = [
|
||||
'/',
|
||||
'/index.html',
|
||||
'/style.css',
|
||||
'/script.js',
|
||||
'https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css',
|
||||
'https://cdnjs.cloudflare.com/ajax/libs/qrcode-generator/1.4.4/qrcode.min.js'
|
||||
];
|
||||
|
||||
self.addEventListener('install', event => {
|
||||
event.waitUntil(
|
||||
caches.open(CACHE_NAME)
|
||||
.then(cache => cache.addAll(assetsToCache))
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', event => {
|
||||
event.respondWith(
|
||||
caches.match(event.request)
|
||||
.then(response => response || fetch(event.request))
|
||||
);
|
||||
});
|
||||
المرجع في مشكلة جديدة
حظر مستخدم