Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a830d14c32 | ||
| 1c8a678ec9 | |||
|
|
c59d7b62bb | ||
| 75387e40ad | |||
|
|
e829f08aca | ||
| a20a4a698b | |||
| c85df7cd44 | |||
|
|
6469f92c12 | ||
| 303e1ad89e | |||
|
|
73da0e732c | ||
| 3afbc4d640 | |||
| e8bca48304 | |||
|
|
d1191e27fc | ||
| e5f83a12e3 | |||
|
|
6cca124291 | ||
| 400a50c7f3 | |||
| e2efbba5b8 |
@@ -6,7 +6,7 @@ on:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '28 5 * * *'
|
||||
- cron: "28 5 * * *"
|
||||
# workflow_run support in Gitea can be tricky, keeping it but might need adjustment
|
||||
workflow_run:
|
||||
workflows: ["Sync Repo"]
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
@@ -139,7 +139,7 @@ jobs:
|
||||
LATEST_RELEASE_TAG=$(curl -sL -H "Accept: application/json" \
|
||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
"${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/latest" | jq -r .tag_name)
|
||||
|
||||
|
||||
if [ -z "$LATEST_RELEASE_TAG" ] || [ "$LATEST_RELEASE_TAG" = "null" ]; then
|
||||
LATEST_RELEASE_TAG="v1.0.0"
|
||||
fi
|
||||
@@ -245,7 +245,7 @@ jobs:
|
||||
AUTHOR="Ivan Carlos"
|
||||
VERSION_FILE="manifest.json"
|
||||
UPSTREAM_SHA="${{ steps.check_upstream.outputs.upstream_sha }}"
|
||||
|
||||
|
||||
if [ -f "$VERSION_FILE" ]; then
|
||||
jq --arg v "$VERSION" \
|
||||
--arg a "$AUTHOR" \
|
||||
@@ -265,6 +265,11 @@ jobs:
|
||||
git commit -m "Update manifest version to ${{ steps.version.outputs.VERSION }} [▶️]" || echo "Nothing to commit"
|
||||
git push origin main
|
||||
|
||||
- name: 🛠 Install zip
|
||||
if: steps.check_commits.outputs.commit_count != '0'
|
||||
run: |
|
||||
apt-get update && apt-get install -y zip
|
||||
|
||||
- name: 📦 Create ZIP package (excluding certain files)
|
||||
if: steps.check_commits.outputs.commit_count != '0'
|
||||
run: |
|
||||
@@ -279,11 +284,11 @@ jobs:
|
||||
run: |
|
||||
TAG_NAME="v${{ steps.version.outputs.VERSION }}"
|
||||
RELEASE_NAME="${{ steps.version.outputs.REPO_NAME }} v${{ steps.version.outputs.VERSION }}"
|
||||
|
||||
|
||||
# Construct Markdown body safely using env var
|
||||
# We use printf to avoid interpreting backslashes in the file list
|
||||
BODY=$(printf "### Changelog\nFiles changed in this release:\n%s" "$CHANGELOG_LIST")
|
||||
|
||||
|
||||
# Create JSON payload using jq
|
||||
jq -n \
|
||||
--arg tag_name "$TAG_NAME" \
|
||||
@@ -299,13 +304,13 @@ jobs:
|
||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d @release_payload.json > api_response.json
|
||||
|
||||
|
||||
echo "DEBUG: API Response:"
|
||||
cat api_response.json || true
|
||||
|
||||
|
||||
RELEASE_ID=$(jq -r .id api_response.json)
|
||||
echo "RELEASE_ID=$RELEASE_ID" >> "$GITHUB_OUTPUT"
|
||||
|
||||
|
||||
if [ "$RELEASE_ID" == "null" ] || [ -z "$RELEASE_ID" ]; then
|
||||
echo "Failed to create release. Response content:"
|
||||
cat api_response.json
|
||||
@@ -318,19 +323,18 @@ jobs:
|
||||
RELEASE_ID="${{ steps.create_release.outputs.RELEASE_ID }}"
|
||||
ZIP_NAME="${{ steps.version.outputs.ZIP_NAME }}"
|
||||
FILE_PATH="./$ZIP_NAME"
|
||||
|
||||
curl -s -X POST "${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/$RELEASE_ID/assets" \
|
||||
|
||||
curl --fail -s -X POST "${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/$RELEASE_ID/assets?name=$ZIP_NAME" \
|
||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Content-Type: application/zip" \
|
||||
--data-binary @"$FILE_PATH" \
|
||||
-o /dev/null
|
||||
--data-binary @"$FILE_PATH"
|
||||
|
||||
# ----- Docker steps -----
|
||||
- name: Clone Upstream Code (if needed)
|
||||
if: steps.check_commits.outputs.commit_count != '0' && (steps.check_upstream.outputs.upstream_needs_update == 'true' || steps.check_upstream.outputs.repo_url != '')
|
||||
run: |
|
||||
rm -rf upstream_src
|
||||
git clone --depth 1 --branch ${{ steps.check_upstream.outputs.repo_branch }} ${{ steps.check_upstream.outputs.repo_url }} upstream_src
|
||||
rm -rf upstream_src
|
||||
git clone --depth 1 --branch ${{ steps.check_upstream.outputs.repo_branch }} ${{ steps.check_upstream.outputs.repo_url }} upstream_src
|
||||
|
||||
- name: 🔍 Check if Dockerfile exists
|
||||
if: steps.check_commits.outputs.commit_count != '0' || steps.check_upstream.outputs.upstream_needs_update == 'true'
|
||||
|
||||
60
.gitea/workflows/update_readme.yml
Normal file
60
.gitea/workflows/update_readme.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
name: Update README
|
||||
|
||||
# Allow Gitea Actions to commit and push changes
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 4 * * *" # Every day at 4 AM UTC
|
||||
|
||||
jobs:
|
||||
update-readme:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
|
||||
env:
|
||||
SOURCE_REPO: ivancarlos/.gitea
|
||||
SOURCE_BRANCH: main
|
||||
|
||||
steps:
|
||||
- name: Checkout current repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Checkout source README template
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ env.SOURCE_REPO }}
|
||||
ref: ${{ env.SOURCE_BRANCH }}
|
||||
token: ${{ secrets.CR_PAT }}
|
||||
path: source_readme
|
||||
|
||||
- name: Update README.md (footer only)
|
||||
run: |
|
||||
set -e
|
||||
|
||||
# --- Extract footer block from source (everything from <!-- footer --> onward) ---
|
||||
FOOTER=$(awk '/<!-- footer -->/{flag=1}flag' source_readme/README.md)
|
||||
|
||||
# --- Replace everything after <!-- footer --> with FOOTER ---
|
||||
awk -v footer="$FOOTER" '
|
||||
/<!-- footer -->/ {
|
||||
print footer
|
||||
found=1
|
||||
exit
|
||||
}
|
||||
{ print }
|
||||
' README.md > README.tmp && mv README.tmp README.md
|
||||
|
||||
- name: Remove source_readme from git index
|
||||
run: rm -rf source_readme
|
||||
|
||||
- name: Commit and push changes
|
||||
run: |
|
||||
git config user.name "Gitea Actions"
|
||||
git config user.email "actions@git.icc.gg"
|
||||
git add README.md
|
||||
git commit -m "Sync README from template [▶️]" || echo "Nothing to commit"
|
||||
git push origin ${{ github.ref_name }}
|
||||
@@ -1,8 +1,3 @@
|
||||
FROM nginx:alpine
|
||||
|
||||
COPY public/ /usr/share/nginx/html
|
||||
|
||||
# Install wget and download jQuery
|
||||
RUN apk add --no-cache wget && \
|
||||
mkdir -p /usr/share/nginx/html/jquery && \
|
||||
wget https://code.jquery.com/jquery-3.5.1.slim.min.js -O /usr/share/nginx/html/jquery/jquery-3.5.1.slim.min.js
|
||||
|
||||
53
README.md
53
README.md
@@ -1,2 +1,53 @@
|
||||
# wificode
|
||||
# WiFi Code
|
||||
WiFi Code is a fully browser-based site for generating QR codes
|
||||
|
||||
<!-- buttons -->
|
||||
[](https://github.com/ivancarlosti/wificode/stargazers)
|
||||
[](https://github.com/sponsors/ivancarlosti)
|
||||
[](https://github.com/sponsors/ivancarlosti)
|
||||
[](https://github.com/ivancarlosti/wificode/pulse)
|
||||
[](https://github.com/ivancarlosti/wificode/issues)
|
||||
[](LICENSE)
|
||||
[](https://github.com/ivancarlosti/wificode/commits)
|
||||
[](https://github.com/ivancarlosti/wificode/security)
|
||||
[](https://github.com/ivancarlosti/wificode?tab=coc-ov-file)
|
||||
[][sponsor]
|
||||
<!-- endbuttons -->
|
||||
|
||||
## Inspiration
|
||||
1. Project inspired by [qifi](https://github.com/evgeni/qifi/), license preserved.
|
||||
|
||||
## Installation
|
||||
1. Fork this repository;
|
||||
2. Make changes.
|
||||
|
||||
## Configuration
|
||||
1. Check `Pages` configuration on your repository settings for custom domain.
|
||||
|
||||
## Usage
|
||||
1. Open your `Pages` repository URL in a browser.
|
||||
|
||||
<!-- footer -->
|
||||
---
|
||||
|
||||
## 🧑💻 Consulting and technical support
|
||||
* For personal support and queries, please submit a new issue to have it addressed.
|
||||
* For commercial related questions, please [**contact me**][ivancarlos] for consulting costs.
|
||||
|
||||
## 🩷 Project support
|
||||
| If you found this project helpful, consider |
|
||||
| :---: |
|
||||
[**buying me a coffee**][buymeacoffee], [**donate by paypal**][paypal], [**sponsor this project**][sponsor] or just [**leave a star**](../..)⭐
|
||||
|Thanks for your support, it is much appreciated!|
|
||||
|
||||
[cc]: https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-code-of-conduct-to-your-project
|
||||
[contributing]: https://docs.github.com/en/articles/setting-guidelines-for-repository-contributors
|
||||
[security]: https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository
|
||||
[support]: https://docs.github.com/en/articles/adding-support-resources-to-your-project
|
||||
[it]: https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
|
||||
[prt]: https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository
|
||||
[funding]: https://docs.github.com/en/articles/displaying-a-sponsor-button-in-your-repository
|
||||
[ivancarlos]: https://ivancarlos.it
|
||||
[buymeacoffee]: https://www.buymeacoffee.com/ivancarlos
|
||||
[paypal]: https://icc.gg/donate
|
||||
[sponsor]: https://github.com/sponsors/ivancarlosti
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.7",
|
||||
"author": "Ivan Carlos"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
@@ -17,13 +18,15 @@
|
||||
<link rel="canonical" href="https://wifi.git.icc.gg/">
|
||||
<!-- Bootstrap removed -->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<section id="generator" class="card">
|
||||
<header class="page-header">
|
||||
<h1 id="title">Wifi no QR</h1>
|
||||
<p class="subtitle">
|
||||
Enter your WiFi details below and click <strong>Generate</strong>. The QR Code is created locally in your browser—no data is sent to any server.
|
||||
Enter your WiFi details below and click <strong>Generate</strong>. The QR Code is created locally in
|
||||
your browser—no data is sent to any server.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
@@ -38,7 +41,13 @@
|
||||
<label for="ssid">SSID (Network Name)</label>
|
||||
<div class="input-wrapper">
|
||||
<!-- Signal Icon -->
|
||||
<svg class="input-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12.55a11 11 0 0 1 14.08 0"></path><path d="M1.42 9a16 16 0 0 1 21.16 0"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12.01" y2="20"></line></svg>
|
||||
<svg class="input-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M5 12.55a11 11 0 0 1 14.08 0"></path>
|
||||
<path d="M1.42 9a16 16 0 0 1 21.16 0"></path>
|
||||
<path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path>
|
||||
<line x1="12" y1="20" x2="12.01" y2="20"></line>
|
||||
</svg>
|
||||
<input type="text" id="ssid" name="ssid" placeholder="MyWiFiNetwork" required>
|
||||
</div>
|
||||
</div>
|
||||
@@ -51,7 +60,11 @@
|
||||
<option value="WEP">WEP</option>
|
||||
<option value="nopass">None</option>
|
||||
</select>
|
||||
<svg class="select-arrow" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
|
||||
<svg class="select-arrow" xmlns="http://www.w3.org/2000/svg" width="16" height="16"
|
||||
viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||||
stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="6 9 12 15 18 9"></polyline>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -59,11 +72,20 @@
|
||||
<label for="key">Password</label>
|
||||
<div class="input-wrapper">
|
||||
<!-- Lock Icon -->
|
||||
<svg class="input-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg>
|
||||
<svg class="input-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
|
||||
<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
|
||||
</svg>
|
||||
<input type="password" id="key" name="key" placeholder="Wireless Key" required>
|
||||
<button type="button" id="display-key" class="icon-btn">
|
||||
<!-- Eye Icon -->
|
||||
<svg id="display-key-icon" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>
|
||||
<!-- Eye Icon -->
|
||||
<svg id="display-key-icon" xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||||
stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
|
||||
<circle cx="12" cy="12" r="3"></circle>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -75,8 +97,10 @@
|
||||
|
||||
<div class="button-group">
|
||||
<button id="generate" class="btn btn-primary">Generate QR Code</button>
|
||||
<button id="save" type="button" class="btn btn-secondary" title="Save credentials locally">Save</button>
|
||||
<a href="#" id="export" class="btn btn-outline" target="_blank" title="Download PNG">Download PNG</a>
|
||||
<button id="save" type="button" class="btn btn-secondary"
|
||||
title="Save credentials locally">Save</button>
|
||||
<a href="#" id="export" class="btn btn-outline" target="_blank" title="Download PNG">Download
|
||||
PNG</a>
|
||||
<a href="javascript:window.print()" id="print" class="btn btn-outline" title="Print">Print</a>
|
||||
</div>
|
||||
</form>
|
||||
@@ -88,25 +112,33 @@
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<p><a href="https://icc.gg/privacidade" target="_blank">Privacy Policy</a> • <a href="https://icc.gg/termos" target="_blank">Terms and Conditions</a></p>
|
||||
<p><a href="https://icc.gg/privacidade" target="_blank">Privacy Policy</a> • <a
|
||||
href="https://icc.gg/termos" target="_blank">Terms and Conditions</a></p>
|
||||
</footer>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Scripts preserved and paths adjusted if necessary -->
|
||||
<script src="jquery/jquery-3.5.1.slim.min.js"></script>
|
||||
<!-- Scripts -->
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
|
||||
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="jquery-qrcode/jquery.qrcode.min.js"></script>
|
||||
<script src="jquery.storage.js/jquery.storage.js"></script>
|
||||
|
||||
|
||||
<!-- Original Logic Preserved -->
|
||||
<script type="text/javascript">
|
||||
function escape_string (string) {
|
||||
// Prevent default form submission globally
|
||||
document.getElementById('form').addEventListener('submit', function (e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
function escape_string(string) {
|
||||
var to_escape = ['\\', ';', ',', ':', '"'];
|
||||
var hex_only = /^[0-9a-f]+$/i;
|
||||
var output = "";
|
||||
for (var i=0; i<string.length; i++) {
|
||||
if($.inArray(string[i], to_escape) != -1) {
|
||||
output += '\\'+string[i];
|
||||
for (var i = 0; i < string.length; i++) {
|
||||
if ($.inArray(string[i], to_escape) != -1) {
|
||||
output += '\\' + string[i];
|
||||
}
|
||||
else {
|
||||
output += string[i];
|
||||
@@ -115,26 +147,26 @@
|
||||
return output;
|
||||
};
|
||||
|
||||
function generate () {
|
||||
function generate() {
|
||||
var ssid = $('#ssid').val();
|
||||
var hidden = $('#hidden').is(':checked');
|
||||
var enc = $('#enc').val();
|
||||
if (enc != 'nopass') {
|
||||
var key = $('#key').val();
|
||||
$('#showkey').text(enc+' Passphrase: '+key);
|
||||
$('#showkey').text(enc + ' Passphrase: ' + key);
|
||||
} else {
|
||||
var key = '';
|
||||
$('#showkey').text('');
|
||||
}
|
||||
// https://github.com/zxing/zxing/wiki/Barcode-Contents#wi-fi-network-config-android-ios-11
|
||||
var qrstring = 'WIFI:S:'+escape_string(ssid)+';T:'+enc+';P:'+escape_string(key)+';';
|
||||
var qrstring = 'WIFI:S:' + escape_string(ssid) + ';T:' + enc + ';P:' + escape_string(key) + ';';
|
||||
if (hidden) {
|
||||
qrstring += 'H:true';
|
||||
}
|
||||
qrstring += ';';
|
||||
$('#qrcode').empty();
|
||||
$('#qrcode').qrcode(qrstring);
|
||||
$('#showssid').text('SSID: '+ssid);
|
||||
$('#showssid').text('SSID: ' + ssid);
|
||||
$('#save').show();
|
||||
$('#print').css('display', 'inline-block');
|
||||
$('#showssid, #showkey').show(); // Show result text
|
||||
@@ -144,12 +176,12 @@
|
||||
var data = canvas[0].toDataURL('image/png');
|
||||
var e = $('#export');
|
||||
e.attr('href', data);
|
||||
e.attr('download', ssid+'-qrcode.png');
|
||||
e.attr('download', ssid + '-qrcode.png');
|
||||
e.css('display', 'inline-block');
|
||||
}
|
||||
};
|
||||
|
||||
function save () {
|
||||
function save() {
|
||||
var ssid = $('#ssid').val();
|
||||
if (!ssid) return;
|
||||
var hidden = $('#hidden').is(':checked');
|
||||
@@ -157,7 +189,7 @@
|
||||
var key = $('#key').val();
|
||||
var storage = $.localStorage('qificodes');
|
||||
if (!storage) storage = {};
|
||||
storage[ssid] = {'hidden': hidden, 'enc': enc, 'key': key};
|
||||
storage[ssid] = { 'hidden': hidden, 'enc': enc, 'key': key };
|
||||
$.localStorage('qificodes', storage);
|
||||
loadhistory();
|
||||
};
|
||||
@@ -173,23 +205,23 @@
|
||||
}
|
||||
};
|
||||
|
||||
function loadhistory () {
|
||||
function loadhistory() {
|
||||
var storage = $.localStorage('qificodes');
|
||||
if (storage) {
|
||||
var history = $('#history-drop ul.dropdown-menu');
|
||||
var ssids = Object.keys(storage);
|
||||
history.empty();
|
||||
for (var i=0; i<ssids.length; i++) {
|
||||
history.append('<li><a href="#" class="history-item">'+ssids[i]+'</a></li>');
|
||||
for (var i = 0; i < ssids.length; i++) {
|
||||
history.append('<li><a href="#" class="history-item">' + ssids[i] + '</a></li>');
|
||||
}
|
||||
history.append('<li class="divider"></li>');
|
||||
history.append('<li><a href="#" class="history-clear">clear history</a></li>');
|
||||
|
||||
history.on('click', 'a.history-item', function(e) {
|
||||
history.on('click', 'a.history-item', function (e) {
|
||||
e.preventDefault();
|
||||
load($(this).text());
|
||||
});
|
||||
history.on('click', 'a.history-clear', function(e) {
|
||||
history.on('click', 'a.history-clear', function (e) {
|
||||
e.preventDefault();
|
||||
clearhistory();
|
||||
});
|
||||
@@ -197,13 +229,13 @@
|
||||
}
|
||||
};
|
||||
|
||||
function clearhistory () {
|
||||
function clearhistory() {
|
||||
$.localStorage('qificodes', null);
|
||||
$('#history-drop').hide();
|
||||
};
|
||||
|
||||
$(document).ready(function(){
|
||||
$('#form').submit(function() {
|
||||
$(document).ready(function () {
|
||||
$('#form').submit(function () {
|
||||
generate();
|
||||
// Scroll to result on mobile
|
||||
$('html, body').animate({
|
||||
@@ -211,37 +243,37 @@
|
||||
}, 500);
|
||||
return false;
|
||||
});
|
||||
$('#save').click(function() {
|
||||
$('#save').click(function () {
|
||||
save();
|
||||
});
|
||||
|
||||
|
||||
// Eye toggle logic adapted for SVG changes
|
||||
$('#display-key').click(function() {
|
||||
$('#display-key').click(function () {
|
||||
var $key = $("#key");
|
||||
var $icon = $("#display-key-icon");
|
||||
if ($key.attr('type') === 'password') {
|
||||
$key.attr('type', 'text');
|
||||
// Simple logic to visual indicate change - in real app would swap SVG path
|
||||
$icon.css('opacity', '0.5');
|
||||
$icon.css('opacity', '0.5');
|
||||
} else {
|
||||
$key.attr('type', 'password');
|
||||
$icon.css('opacity', '1');
|
||||
}
|
||||
});
|
||||
|
||||
$('#enc').change(function() {
|
||||
if($(this).val() != 'nopass') {
|
||||
$('#key-p').slideDown();
|
||||
$('#key').attr('required','required');
|
||||
$('#enc').change(function () {
|
||||
if ($(this).val() != 'nopass') {
|
||||
$('#key-p').slideDown();
|
||||
$('#key').attr('required', 'required');
|
||||
}
|
||||
else {
|
||||
$('#key-p').slideUp();
|
||||
$('#key').removeAttr('required');
|
||||
$('#key-p').slideUp();
|
||||
$('#key').removeAttr('required');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Toggle history logic
|
||||
$('.history-btn').click(function() {
|
||||
$('.history-btn').click(function () {
|
||||
$('.dropdown-menu').toggle();
|
||||
});
|
||||
|
||||
@@ -250,14 +282,15 @@
|
||||
|
||||
// Service Worker installation
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', function() {
|
||||
navigator.serviceWorker.register('/sw.js', {scope: './'}).then(function(registration) {
|
||||
window.addEventListener('load', function () {
|
||||
navigator.serviceWorker.register('/sw.js', { scope: './' }).then(function (registration) {
|
||||
console.log('[Service Worker] Successfully installed');
|
||||
}).catch(function(error) {
|
||||
}).catch(function (error) {
|
||||
console.log('[Service Worker] Installation failed:', error);
|
||||
})
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
</html>
|
||||
@@ -1,29 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>basic example</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
|
||||
|
||||
<!--<script type="text/javascript" src="../jquery.qrcode.min.js"></script>
|
||||
--><script type="text/javascript" src="../src/jquery.qrcode.js"></script>
|
||||
<script type="text/javascript" src="../src/qrcode.js"></script>
|
||||
|
||||
<p>Render in table</p>
|
||||
<div id="qrcodeTable"></div>
|
||||
<p>Render in canvas</p>
|
||||
<div id="qrcodeCanvas"></div>
|
||||
<script>
|
||||
//jQuery('#qrcode').qrcode("this plugin is great");
|
||||
jQuery('#qrcodeTable').qrcode({
|
||||
render : "table",
|
||||
text : "http://jetienne.com"
|
||||
});
|
||||
jQuery('#qrcodeCanvas').qrcode({
|
||||
text : "http://jetienne.com"
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,24 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Demo page</title>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
TODO make a nice looking pure client qrcode generator
|
||||
even allow download of the image
|
||||
</p>
|
||||
|
||||
<div id="output"></div>
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="../jquery.qrcode.min.js"></script>
|
||||
<script>
|
||||
jQuery(function(){
|
||||
jQuery('#output').qrcode("http://jetienne.com");
|
||||
})
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user