packages = ["qrcode", "pillow"]

Loading QR Generator

Initializing PyScript environment...

from js import document, console import qrcode from io import BytesIO import base64 from pyodide.ffi import create_proxy # Store QR code data between functions qr_data = None tab_proxies = {} # Define all functions first def generate_qr(event): try: global qr_data url = document.getElementById("url-input").value if not url: show_error("Please enter a URL") return qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, ) qr.add_data(url) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") display_qr_code(img) show_success(f"QR code generated for: {url}") except Exception as e: show_error(f"URL QR generation error: {str(e)}") console.error(f"URL QR error: {e}") def generate_wifi_qr(event): try: global qr_data ssid = document.getElementById("wifi-ssid").value password = document.getElementById("wifi-password").value security = document.getElementById("wifi-security").value if not ssid: show_error("Please enter a network name") return wifi_config = f"WIFI:T:{security};S:{ssid};P:{password};;" qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, ) qr.add_data(wifi_config) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") display_qr_code(img) show_success(f"WiFi QR code generated for: {ssid}") except Exception as e: show_error(f"WiFi QR generation error: {str(e)}") console.error(f"WiFi QR error: {e}") def generate_text_qr(event): try: global qr_data text = document.getElementById("text-input").value if not text: show_error("Please enter some text") return qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, ) qr.add_data(text) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") display_qr_code(img) show_success("Text QR code generated") except Exception as e: show_error(f"Text QR generation error: {str(e)}") console.error(f"Text QR error: {e}") def generate_contact_qr(event): try: global qr_data name = document.getElementById("contact-name").value phone = document.getElementById("contact-phone").value email = document.getElementById("contact-email").value if not name: show_error("Please enter at least a name") return vcard = f"BEGIN:VCARD\nVERSION:3.0\nN:{name}\n" if phone: vcard += f"TEL:{phone}\n" if email: vcard += f"EMAIL:{email}\n" vcard += "END:VCARD" qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, ) qr.add_data(vcard) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") display_qr_code(img) show_success(f"Contact QR code generated for: {name}") except Exception as e: show_error(f"Contact QR generation error: {str(e)}") console.error(f"Contact QR error: {e}") def display_qr_code(img): try: global qr_data buffered = BytesIO() img.save(buffered, format="PNG") img_str = base64.b64encode(buffered.getvalue()).decode("utf-8") img_element = document.getElementById("qrcode-image") img_element.src = f"data:image/png;base64,{img_str}" document.getElementById("qrcode-container").style.display = "block" qr_data = img_str except Exception as e: show_error(f"QR display error: {str(e)}") console.error(f"Display error: {e}") def download_qr(event): try: global qr_data if not qr_data: show_error("No QR code generated yet") return active_tab = document.querySelector(".tab-btn.active").getAttribute("data-tab") filename = "qrcode.png" if active_tab == "url": url = document.getElementById("url-input").value or "qrcode" filename = url.replace("https://", "").replace("http://", "").replace("/", "_")[:50] + ".png" elif active_tab == "wifi": ssid = document.getElementById("wifi-ssid").value or "wifi" filename = ssid.replace(" ", "_")[:50] + "_wifi.png" elif active_tab == "text": filename = "text_qrcode.png" elif active_tab == "contact": name = document.getElementById("contact-name").value or "contact" filename = name.replace(" ", "_")[:50] + "_contact.png" a = document.createElement("a") a.href = f"data:image/png;base64,{qr_data}" a.download = filename document.body.appendChild(a) a.click() document.body.removeChild(a) show_success(f"Downloaded: {filename}") except Exception as e: show_error(f"Download error: {str(e)}") console.error(f"Download error: {e}") def show_error(message): output_div = document.getElementById("output") output_div.innerHTML = f"❌ {message}" output_div.style.color = "#dc3545" def show_success(message): output_div = document.getElementById("output") output_div.innerHTML = f"✓ {message}" output_div.style.color = "#28a745" def switch_tab(event): try: target = event.target buttons = document.querySelectorAll(".tab-btn") containers = document.querySelectorAll(".qr-type-container") for btn in buttons: btn.classList.remove("active") for tab in containers: tab.classList.remove("active") target.classList.add("active") tab_id = target.getAttribute("data-tab") + "-tab" document.getElementById(tab_id).classList.add("active") except Exception as e: console.error(f"Tab switch error: {e}") show_error(f"Tab switch error: {str(e)}") # Now define setup functions that reference the above functions def setup_proxies(): global tab_proxies tab_proxies = { 'generate_qr': create_proxy(generate_qr), 'generate_wifi_qr': create_proxy(generate_wifi_qr), 'generate_text_qr': create_proxy(generate_text_qr), 'generate_contact_qr': create_proxy(generate_contact_qr), 'download_qr': create_proxy(download_qr), 'switch_tab': create_proxy(switch_tab) } document.py_proxies = tab_proxies def setup_tabs(): tab_buttons = document.querySelectorAll(".tab-btn") for btn in tab_buttons: btn.addEventListener("click", tab_proxies['switch_tab']) def init(): try: setup_proxies() setup_tabs() document.getElementById("generate-btn").addEventListener("click", tab_proxies['generate_qr']) document.getElementById("generate-wifi-btn").addEventListener("click", tab_proxies['generate_wifi_qr']) document.getElementById("generate-text-btn").addEventListener("click", tab_proxies['generate_text_qr']) document.getElementById("generate-contact-btn").addEventListener("click", tab_proxies['generate_contact_qr']) document.getElementById("download-btn").addEventListener("click", tab_proxies['download_qr']) document.getElementById("loading").style.display = "none" document.getElementById("content").style.display = "block" except Exception as e: console.error(f"Initialization error: {e}") loading_div = document.getElementById("loading") loading_div.innerHTML = "" p = document.createElement("p") p.style.color = "red" p.textContent = f"Initialization failed: {e}" loading_div.appendChild(p) init()