Copyright and license

This commit is contained in:
Olaf
2026-08-25 08:39:46 +02:00
parent 1cba4e8649
commit d896d3d068
51 changed files with 343 additions and 0 deletions
+3
View File
@@ -1,3 +1,6 @@
# Copyright © 2026 Olaf Kolkman
# SPDX-License-Identifier: GPL-3.0-or-later
FROM python:3.11-slim
WORKDIR /app
+12
View File
@@ -0,0 +1,12 @@
LinkLog is licensed under the GNU General Public License, version 3 or any later version (GPL-3.0-or-later).
Copyright (C) 2026 Olaf Kolkman
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
The complete license text is available at:
https://www.gnu.org/licenses/gpl-3.0.html
+2
View File
@@ -1,4 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 1804 1712" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1,0,0,1,-669.006,-255.89)">

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

+3
View File
@@ -1,3 +1,6 @@
# Copyright © 2026 Olaf Kolkman
# SPDX-License-Identifier: GPL-3.0-or-later
SHELL := /bin/sh
SOURCE_LOGO := LinkLog.svg
+2
View File
@@ -25,6 +25,7 @@ For local development:
The backend currently uses FastAPI, uvicorn, SQLite, and Pydantic. `httpx2` is included for the Starlette-compatible test client.
Jinja2 is included for server-rendered HTML templates.
LinkLog is licensed under the GNU General Public License, version 3 or any later version. See [LICENSE](LICENSE).
## Local Installation
@@ -71,6 +72,7 @@ Open these URLs:
- User feed: <http://localhost:8000/alice>
- Profile settings: <http://localhost:8000/profile>
- Labels: <http://localhost:8000/labels>
- About: <http://localhost:8000/about>
- Admin page: <http://localhost:8000/admin>
- Web login: <http://localhost:8000/login>
- Health check: <http://localhost:8000/health>
+42
View File
@@ -451,3 +451,45 @@ Use the Asset Font from google foundry as font for the LinkLog text
### Assistant outcome
Applied the Google Foundry `Asset` font to visible LinkLog branding on the web and Firefox popup, retaining graceful local fallbacks for restricted or offline extension contexts. Font declarations, branding references, extension scripts, whitespace checks, and the strict backend suite passed.
### User
Create an about page and add an entry in the hamburger menu. The about page explains what the linklog does
### Assistant outcome
Added an `/about` page explaining LinkLog's link capture, cleanup, tagging, filtering, ownership, and Mastodon publishing workflow. Added an always-visible About item to every shared hamburger menu, documented the route, and verified all web routes, scripts, and the strict backend suite with 15 passing tests.
### User
On the bottom of all files add a copyright statement (Olaf Kolkman) and a link to the git.kolkman.org/LinkLog repository in small print
### Assistant outcome
Added small-print attribution footers to all seven web templates and both Firefox extension pages. Each footer contains `Copyright Olaf Kolkman` and a link to `https://git.kolkman.org/olaf/Link-Log`, with matching web and extension styling. All web routes, extension footer references, strict backend tests, and whitespace checks passed.
### User
the link in the site footer must be underlined and in the same color as the other text
### Assistant outcome
Updated the web footer repository link to remain the same muted color as the surrounding footer text and always display an underline. Added a footer rendering assertion and validated the site.
### User
Add copyright sign and 2026 to the copyright notices
### Assistant outcome
Updated all web and Firefox extension footer notices to `© 2026 Olaf Kolkman`, preserving the repository links and small-print styling. Verified all eight user-facing pages, whitespace, and the strict backend suite with 15 passing tests.
### User
in the footer make the link the same color as the mother text, when clicked use a tint from the Catpuccin theme
### Assistant outcome
Updated web and extension footer links to inherit the surrounding footer text color, remain underlined, and use Catppuccin lavender/mauve interaction tints for hover, focus, and active click states. Preserved the current repository URL edits and verified the strict backend suite with 15 passing tests.
### User
Add a GNU License file
### Assistant outcome
Added a root `LICENSE` file declaring GNU General Public License version 3 or any later version (GPL-3.0-or-later), with Olaf Kolkman copyright attribution and the official GNU license reference. Documented the license in `README.md`.
### User
Add a copyright statement to source files refer to GNU license
### Assistant outcome
Added `Copyright © 2026 Olaf Kolkman` and `SPDX-License-Identifier: GPL-3.0-or-later` headers to all 47 non-minified application, test, frontend, extension, build, deployment, and source-logo files. Generated/runtime assets were left untouched. Python and JavaScript compilation, Compose validation, whitespace checks, and the strict backend suite passed with 15 tests.
+7
View File
@@ -78,6 +78,13 @@
74. Refine the Plugins Settings page. When the user is logged in it shows all "<user> logged in at <url>" and a sign-out button. If the user is not logged in it shows the form as is now.
75. On the plugin, next to the logo, create a link of the form: [LinkLog](https://<host>/<user>)
76. Use the Asset Font from google foundry as font for the LinkLog text
77. Create an about page and add an entry in the hamburger menu. The about page explains what the linklog does
78. On the bottom of all files add a copyright statement (Olaf Kolkman) and a link to the git.kolkman.org/LinkLog repository in small print
79. the link in the site footer must be underlined and in the same color as the other text
80. Add copyright sign and 2026 to the copyright notices
81. in the footer make the link the same color as the mother text, when clicked use a tint from the Catpuccin theme
82. Add a GNU License file
83. Add a copyright statement to source files refer to GNU license
## Future entries
+3
View File
@@ -1 +1,4 @@
"""LinkLog backend package."""
# Copyright © 2026 Olaf Kolkman
# SPDX-License-Identifier: GPL-3.0-or-later
+5
View File
@@ -1,3 +1,8 @@
"""Legacy admin page wiring."""
# Copyright © 2026 Olaf Kolkman
# SPDX-License-Identifier: GPL-3.0-or-later
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
import json
from uuid import uuid4
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from uuid import uuid4
from fastapi import APIRouter, HTTPException
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from fastapi import APIRouter, Header, HTTPException, status
from pydantic import BaseModel
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from fastapi import APIRouter, Depends
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
import json
from uuid import uuid4
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from dataclasses import dataclass
import os
from pathlib import Path
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from datetime import datetime, timedelta, timezone
from hashlib import sha256
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
import sqlite3
import os
from hashlib import sha256
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
+8
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
@@ -45,6 +48,11 @@ async def labels_page(request: Request):
return templates.TemplateResponse(request, 'labels.html', {})
@app.get('/about', response_class=HTMLResponse)
async def about_page(request: Request):
return templates.TemplateResponse(request, 'about.html', {})
@app.get('/login', response_class=HTMLResponse)
async def login_page(request: Request):
return templates.TemplateResponse(request, 'login.html', {})
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from dataclasses import dataclass
from datetime import datetime
from typing import Optional
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
class BasePlugin:
name = 'base'
version = '1.0.0'
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from datetime import datetime, timezone
from hashlib import sha256
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from datetime import datetime, timezone
from uuid import uuid4
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
import json
from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from datetime import datetime, timezone
from hashlib import sha256
from uuid import uuid4
+9
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
import json
import threading
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
@@ -235,6 +238,8 @@ def test_public_and_admin_pages_render_html():
root_page = client.get('/')
assert 'LinkLog' in root_page.text
assert 'src="/static/logo.svg"' in root_page.text
assert 'class="site-footer"' in root_page.text
assert 'https://git.kolkman.org/' in root_page.text
assert 'class="menu-toggle"' in root_page.text
assert 'id="auth-menu" class="auth-menu hidden"' in root_page.text
assert 'id="auth-home-link" href="/">Home</a>' in root_page.text
@@ -259,6 +264,10 @@ def test_public_and_admin_pages_render_html():
assert 'src="/static/logo.svg"' in login_page
assert 'id="auth-session" class="auth-session hidden"' in login_page
assert 'logout.js?v=3' in login_page
about_page = client.get('/about')
assert about_page.status_code == 200
assert 'Save the good stuff' in about_page.text
assert 'id="auth-about-link" href="/about"' in about_page.text
assert client.get('/admin').status_code == 200
admin_page = client.get('/admin').text
assert 'Admin' in admin_page
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
import sqlite3
from backend.app.database import DEFAULT_TAGS, apply_migrations, get_schema_version, seed_default_tags
+3
View File
@@ -1,3 +1,6 @@
## Copyright © 2026 Olaf Kolkman
## SPDX-License-Identifier: GPL-3.0-or-later
from fastapi.testclient import TestClient
from backend.app.main import app
+3
View File
@@ -1,3 +1,6 @@
# Copyright © 2026 Olaf Kolkman
# SPDX-License-Identifier: GPL-3.0-or-later
services:
app:
build:
+3
View File
@@ -1,4 +1,7 @@
#!/bin/sh
# Copyright © 2026 Olaf Kolkman
# SPDX-License-Identifier: GPL-3.0-or-later
set -eu
chown -R linklog:linklog /app/backend/data
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
(() => {
const pluginList = document.querySelector('#plugin-list');
const adminLabelList = document.querySelector('#admin-label-list');
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
(() => {
const loginButton = document.querySelector('#auth-login-button');
const profileLink = document.querySelector('#auth-profile-link');
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
const feedEl = document.getElementById('feed');
const sortSelect = document.getElementById('sort-select');
const userFilter = document.getElementById('user-filter');
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
const form = document.querySelector('#login-form');
const status = document.querySelector('#login-status');
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
(() => {
const logoutButton = document.querySelector('#logout-button');
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
(() => {
const profileForm = document.querySelector('#profile-form');
const passwordForm = document.querySelector('#password-form');
+32
View File
@@ -1,3 +1,6 @@
/* Copyright © 2026 Olaf Kolkman */
/* SPDX-License-Identifier: GPL-3.0-or-later */
@import url('https://fonts.googleapis.com/css2?family=Asset&family=DM+Sans:wght@400;500;600;700&family=Space+Grotesk:wght@500;600;700&display=swap');
:root {
@@ -207,6 +210,26 @@ main.container {
padding-bottom: 64px;
}
.site-footer {
max-width: 960px;
margin: 0 auto;
padding: 0 24px 24px;
color: var(--muted);
font-size: 0.72rem;
text-align: center;
}
.site-footer a {
color: inherit;
text-decoration: underline;
}
.site-footer a:hover,
.site-footer a:focus-visible,
.site-footer a:active {
color: var(--lavender);
}
.toolbar {
display: flex;
flex-wrap: wrap;
@@ -459,6 +482,11 @@ button:disabled {
box-shadow: var(--shadow);
}
.about-content {
display: grid;
gap: 14px;
}
.link-item h2 {
margin: 0 0 8px;
color: var(--text);
@@ -574,6 +602,10 @@ button:disabled {
padding-top: 18px;
}
.site-footer {
padding: 0 14px 18px;
}
.toolbar {
gap: 12px;
padding: 14px;
+60
View File
@@ -0,0 +1,60 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
<title>About LinkLog</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/static/style.css" />
</head>
<body>
<header class="site-header">
<div class="container">
<div class="header-row">
<div>
<img class="site-logo" src="/static/logo.svg" alt="LinkLog" />
<h1>About</h1>
<p>A quiet place for the links worth keeping.</p>
</div>
<div class="header-actions">
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="auth-menu">Menu</button>
<nav id="auth-menu" class="auth-menu hidden" aria-label="Account menu">
<a id="auth-home-link" href="/">Home</a>
<a id="auth-about-link" href="/about">About</a>
<a id="auth-login-button" href="/login">Sign in</a>
<a id="auth-profile-link" class="hidden" href="/profile">Profile</a>
<a id="auth-labels-link" class="hidden" href="/labels">Labels</a>
<a id="auth-admin-link" class="hidden" href="/admin">Admin</a>
<div id="auth-session" class="auth-session hidden"><a id="auth-username" class="user-name" href="/"></a></div>
<button id="logout-button" class="logout-button hidden" type="button">Sign out</button>
</nav>
</div>
</div>
</div>
</header>
<main class="container about-content">
<section class="link-item">
<h2>Save the good stuff</h2>
<p>LinkLog captures the page title, cleaned URL, comment, and timestamp when you save a page from the Firefox extension.</p>
</section>
<section class="link-item">
<h2>Make it yours</h2>
<p>Organize links with up to ten tags, browse the public feed, filter by user or tag, and edit the links you own.</p>
</section>
<section class="link-item">
<h2>Share selectively</h2>
<p>LinkLog stores the feed in SQLite and can publish new links to Mastodon when that plugin is configured.</p>
</section>
<section class="link-item">
<h2>Open source</h2>
<p>LinkLog is open source software. You can run your own instance, or contribute to the project on
<a href="https://git.kolkman.org/olaf/Link-Log">my repository</a>.</p>
</section>
</main>
<footer class="site-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">git.kolkman.org/LinkLog</a></footer>
<script src="/static/auth-header.js?v=3"></script>
<script src="/static/logout.js?v=3"></script>
</body>
</html>
+4
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -19,6 +21,7 @@
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="auth-menu">Menu</button>
<nav id="auth-menu" class="auth-menu hidden" aria-label="Account menu">
<a id="auth-home-link" href="/">Home</a>
<a id="auth-about-link" href="/about">About</a>
<a id="auth-login-button" href="/login">Sign in</a>
<a id="auth-profile-link" class="hidden" href="/profile">Profile</a>
<a id="auth-labels-link" class="hidden" href="/labels">Labels</a>
@@ -71,6 +74,7 @@
</section>
</div>
</main>
<footer class="site-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">git.kolkman.org/LinkLog</a></footer>
<script src="/static/auth-header.js?v=3"></script>
<script src="/static/logout.js?v=2"></script>
<script src="/static/admin.js?v=3"></script>
+4
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -18,6 +20,7 @@
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="auth-menu">Menu</button>
<nav id="auth-menu" class="auth-menu hidden" aria-label="Account menu">
<a id="auth-home-link" href="/">Home</a>
<a id="auth-about-link" href="/about">About</a>
<a id="auth-login-button" href="/login">Sign in</a>
<a id="auth-profile-link" class="hidden" href="/profile">Profile</a>
<a id="auth-labels-link" class="hidden" href="/labels">Labels</a>
@@ -72,6 +75,7 @@
<section id="feed" class="feed" aria-live="polite"></section>
</main>
<footer class="site-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">git.kolkman.org/LinkLog</a></footer>
<script src="/static/auth-header.js?v=3"></script>
<script src="/static/logout.js?v=3"></script>
+4
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -19,6 +21,7 @@
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="auth-menu">Menu</button>
<nav id="auth-menu" class="auth-menu hidden" aria-label="Account menu">
<a id="auth-home-link" href="/">Home</a>
<a id="auth-about-link" href="/about">About</a>
<a id="auth-login-button" href="/login">Sign in</a>
<a id="auth-profile-link" class="hidden" href="/profile">Profile</a>
<a id="auth-labels-link" class="hidden" href="/labels">Labels</a>
@@ -41,6 +44,7 @@
<div id="label-list" class="plugin-list"></div>
</section>
</main>
<footer class="site-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">git.kolkman.org/LinkLog</a></footer>
<script src="/static/auth-header.js?v=3"></script>
<script src="/static/logout.js?v=3"></script>
<script src="/static/labels.js?v=1"></script>
+4
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -18,6 +20,7 @@
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="auth-menu">Menu</button>
<nav id="auth-menu" class="auth-menu hidden" aria-label="Account menu">
<a id="auth-home-link" href="/">Home</a>
<a id="auth-about-link" href="/about">About</a>
<a id="auth-login-button" href="/login">Sign in</a>
<a id="auth-profile-link" class="hidden" href="/profile">Profile</a>
<a id="auth-labels-link" class="hidden" href="/labels">Labels</a>
@@ -47,6 +50,7 @@
</form>
</section>
</main>
<footer class="site-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">git.kolkman.org/LinkLog</a></footer>
<script src="/static/auth-header.js?v=3"></script>
<script src="/static/logout.js?v=3"></script>
<script src="/static/login.js"></script>
+4
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -18,6 +20,7 @@
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="auth-menu">Menu</button>
<nav id="auth-menu" class="auth-menu hidden" aria-label="Account menu">
<a id="auth-home-link" href="/">Home</a>
<a id="auth-about-link" href="/about">About</a>
<a id="auth-login-button" href="/login">Sign in</a>
<a id="auth-profile-link" class="hidden" href="/profile">Profile</a>
<a id="auth-labels-link" class="hidden" href="/labels">Labels</a>
@@ -94,6 +97,7 @@
</form>
</section>
</main>
<footer class="site-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">git.kolkman.org/LinkLog</a></footer>
<script src="/static/auth-header.js?v=3"></script>
<script src="/static/logout.js?v=2"></script>
<script src="/static/profile.js?v=3"></script>
+21
View File
@@ -1,3 +1,6 @@
/* Copyright © 2026 Olaf Kolkman */
/* SPDX-License-Identifier: GPL-3.0-or-later */
body {
margin: 0;
font-family: sans-serif;
@@ -97,3 +100,21 @@ button {
.hidden {
display: none;
}
.extension-footer {
margin: 16px auto;
color: #7f849c;
font-size: 0.68rem;
text-align: center;
}
.extension-footer a {
color: inherit;
text-decoration: underline;
}
.extension-footer a:hover,
.extension-footer a:focus-visible,
.extension-footer a:active {
color: #b4befe;
}
+3
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -36,6 +38,7 @@
<button type="submit">Save and log in</button>
</form>
</main>
<footer class="extension-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">Repository</a></footer>
<script src="options.js"></script>
</body>
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
const DEFAULT_BACKEND = 'http://localhost:8000';
const statusEl = document.getElementById('status');
+21
View File
@@ -1,3 +1,6 @@
/* Copyright © 2026 Olaf Kolkman */
/* SPDX-License-Identifier: GPL-3.0-or-later */
body {
width: 360px;
margin: 0;
@@ -149,3 +152,21 @@ button {
.hidden {
display: none;
}
.extension-footer {
margin-top: 16px;
color: #7f849c;
font-size: 0.68rem;
text-align: center;
}
.extension-footer a {
color: inherit;
text-decoration: underline;
}
.extension-footer a:hover,
.extension-footer a:focus-visible,
.extension-footer a:active {
color: #cba6f7;
}
+3
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<!-- Copyright © 2026 Olaf Kolkman -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<html lang="en">
<head>
<meta charset="utf-8" />
@@ -42,6 +44,7 @@
</div>
</form>
</main>
<footer class="extension-footer">Copyright © 2026 Olaf Kolkman · <a href="https://git.kolkman.org/olaf/Link-Log">Repository</a></footer>
<script src="popup.js"></script>
</body>
+3
View File
@@ -1,3 +1,6 @@
// Copyright © 2026 Olaf Kolkman
// SPDX-License-Identifier: GPL-3.0-or-later
const statusEl = document.getElementById('status');
const form = document.getElementById('link-form');
const titleInput = document.getElementById('title');