From 015a31a14f5de5a1c7aa3dc71175eb0c2fe58b30 Mon Sep 17 00:00:00 2001 From: Miquel Lionel Date: Thu, 17 Jun 2021 22:30:49 +0100 Subject: shorter patch names, updated README.md, new Makefile --- Makefile | 80 ++++++ README.md | 65 +++-- altnavbar.patch | 42 +++ altnavbar_i18n.patch | 28 ++ honk.service | 23 ++ honkinit | 3 + i18n.go | 4 +- i18n.patch | 165 ++++++++++++ i18n_views/about.html | 15 ++ i18n_views/account.html | 62 +++++ i18n_views/chatter.html | 66 +++++ i18n_views/combos.html | 13 + i18n_views/funzone.html | 16 ++ i18n_views/header.html | 83 ++++++ i18n_views/hfcs.html | 73 +++++ i18n_views/honk.html | 146 ++++++++++ i18n_views/honkers.html | 62 +++++ i18n_views/honkform.html | 49 ++++ i18n_views/honkfrags.html | 11 + i18n_views/honkpage.html | 45 ++++ i18n_views/honkpage.js | 390 +++++++++++++++++++++++++++ i18n_views/local.css | 8 + i18n_views/login.html | 12 + i18n_views/msg.html | 7 + i18n_views/onts.html | 16 ++ i18n_views/pleroma.css | 7 + i18n_views/style.css | 334 +++++++++++++++++++++++ i18n_views/xzone.html | 17 ++ patches/01_prettier_rssfeed.patch | 16 -- patches/03_bloated_i18n_implementation.patch | 212 --------------- rsstitle.patch | 16 ++ views/header.html | 90 ------- views/honk.html | 140 ---------- views/i18n/about.html | 15 -- views/i18n/account.html | 62 ----- views/i18n/chatter.html | 66 ----- views/i18n/combos.html | 13 - views/i18n/funzone.html | 16 -- views/i18n/header.html | 100 ------- views/i18n/hfcs.html | 73 ----- views/i18n/honk.html | 146 ---------- views/i18n/honkers.html | 62 ----- views/i18n/honkform.html | 49 ---- views/i18n/honkfrags.html | 11 - views/i18n/honkpage.html | 45 ---- views/i18n/honkpage.js | 390 --------------------------- views/i18n/local.css | 58 ---- views/i18n/login.html | 12 - views/i18n/msg.html | 7 - views/i18n/onts.html | 16 -- views/i18n/pleroma.css | 7 - views/i18n/style.css | 334 ----------------------- views/i18n/xzone.html | 17 -- views/local.css | 8 - 54 files changed, 1839 insertions(+), 1984 deletions(-) create mode 100644 Makefile create mode 100644 altnavbar.patch create mode 100644 altnavbar_i18n.patch create mode 100644 honk.service create mode 100755 honkinit create mode 100644 i18n.patch create mode 100644 i18n_views/about.html create mode 100644 i18n_views/account.html create mode 100644 i18n_views/chatter.html create mode 100644 i18n_views/combos.html create mode 100644 i18n_views/funzone.html create mode 100644 i18n_views/header.html create mode 100644 i18n_views/hfcs.html create mode 100644 i18n_views/honk.html create mode 100644 i18n_views/honkers.html create mode 100644 i18n_views/honkform.html create mode 100644 i18n_views/honkfrags.html create mode 100644 i18n_views/honkpage.html create mode 100644 i18n_views/honkpage.js create mode 100644 i18n_views/local.css create mode 100644 i18n_views/login.html create mode 100644 i18n_views/msg.html create mode 100644 i18n_views/onts.html create mode 100644 i18n_views/pleroma.css create mode 100644 i18n_views/style.css create mode 100644 i18n_views/xzone.html delete mode 100644 patches/01_prettier_rssfeed.patch delete mode 100644 patches/03_bloated_i18n_implementation.patch create mode 100644 rsstitle.patch delete mode 100644 views/header.html delete mode 100644 views/honk.html delete mode 100644 views/i18n/about.html delete mode 100644 views/i18n/account.html delete mode 100644 views/i18n/chatter.html delete mode 100644 views/i18n/combos.html delete mode 100644 views/i18n/funzone.html delete mode 100644 views/i18n/header.html delete mode 100644 views/i18n/hfcs.html delete mode 100644 views/i18n/honk.html delete mode 100644 views/i18n/honkers.html delete mode 100644 views/i18n/honkform.html delete mode 100644 views/i18n/honkfrags.html delete mode 100644 views/i18n/honkpage.html delete mode 100644 views/i18n/honkpage.js delete mode 100644 views/i18n/local.css delete mode 100644 views/i18n/login.html delete mode 100644 views/i18n/msg.html delete mode 100644 views/i18n/onts.html delete mode 100644 views/i18n/pleroma.css delete mode 100644 views/i18n/style.css delete mode 100644 views/i18n/xzone.html delete mode 100644 views/local.css diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..295bada --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +VER=0.9.6 +PREFIX=/usr/share +DLURL="https://humungus.tedunangst.com/r/honk/d/honk-$(VER).tgz" +MANDIR="$(DESTDIR)$(PREFIX)/man/man" +DOCS="honk-$(VER)/docs" +SYSTEMD=1 + +getsrc: + @if ! test -e honk-$(VER).tgz; then \ + $(MAKE) clean; \ + printf "Getting source for honk version $(VER)...\n"; \ + curl --progress-bar -fOJL $(DLURL); \ + fi + @tar xzf honk-$(VER).tgz; \ + +rsstitle: rsstitle.patch + $(MAKE) getsrc; + cd honk-$(VER)/ && patch -Nbp1 < ../rsstitle.patch; + +i18n: i18n.patch i18n.go + $(MAKE) getsrc; + cp i18n.go honk-$(VER)/; + cp i18n_views/* honk-$(VER)/views/; + cd honk-$(VER) && patch -Nbp1 < ../i18n.patch; + +altnavbar: altnavbar.patch + $(MAKE) getsrc; + cp i18n_views/local.css honk-$(VER)/views; + cd honk-$(VER) && patch -Nbp1 < ../altnavbar.patch; + +i18naltnavbar: altnavbar_i18n.patch + $(MAKE) getsrc; + $(MAKE) i18n; + cp i18n_views/local.css honk-$(VER)/views; + cd honk-$(VER) && patch -Nbp1 < ../altnavbar_i18n.patch; + +build: honk-$(VER)/ + cd honk-$(VER) && go build -mod=`ls -d vendor 2> /dev/null` -o honk; + +install: honk.service honkinit honk-$(VER)/ + $(MAKE) build; + install -Dm755 "honk-$(VER)/honk" -t "$(DESTDIR)/usr/bin/"; + install -Dm644 honk-$(VER)/views/* -t "$(DESTDIR)$(PREFIX)/honk/views/"; + install -Dm644 $(DOCS)/* -t "$(DESTDIR)$(PREFIX)/honk/docs/"; + gzip -k -f $(DOCS)/*.{1,3,5,7,8}; + install -Dm644 $(DOCS)/honk.1.gz -t $(MANDIR)1/; + install -Dm644 $(DOCS)/honk.3.gz -t $(MANDIR)3/; + install -Dm644 $(DOCS)/honk.5.gz -t $(MANDIR)5/; + install -Dm644 $(DOCS)/honk.8.gz -t $(MANDIR)8/; + install -Dm644 $(DOCS)/activitypub.7.gz $(MANDIR)7/honk_activitypub.7.gz; + install -Dm644 $(DOCS)/hfcs.1.gz $(MANDIR)1/honk_hfcs.1.gz; + install -Dm644 $(DOCS)/intro.1.gz $(MANDIR)1/honk_intro.1.gz; + install -Dm644 $(DOCS)/vim.3.gz $(MANDIR)3/honk_vim.3.gz; + install -Dm644 "honk-$(VER)"/LICENSE -t "$(DESTDIR)$(PREFIX)/licenses/honk/"; + @if test -n $(SYSTEMD); #if systemd + install -Dm644 honk.service -t "$(DESTDIR)/usr/lib/systemd/system/";\ + systemctl daemon-reload;\ + fi; + mandb -q > /dev/null; + if ! getent passwd honk >/dev/null; then \ + useradd -r -d $(DESTDIR)$(PREFIX)/honk honk; \ + fi + chown honk:honk -R "$(DESTDIR)$(PREFIX)/honk"; + @if ! test -e $(PREFIX)/honk/honk.db; then \ + sh honkinit;\ + fi + @printf "\nDone\n"; + +uninstall: $(DESTDIR)$(PREFIX)/honk; + @if test -n $(SYSTEMD); #if systemd + systemctl stop honk; + fi; + userdel honk; + rm -rf $(DESTDIR)$(PREFIX)/honk; + rm -f $(DESTDIR)/usr/lib/systemd/system/honk.service; + rm -f $(DESTDIR)/usr/bin/honk; + find $(DESTDIR)$(PREFIX)/man/ -name "honk*.gz" -exec rm -f {} \;; + +clean: + rm -rf honk honk-$(VER)*; diff --git a/README.md b/README.md index 4ccd7e5..3ae2cd9 100644 --- a/README.md +++ b/README.md @@ -8,31 +8,62 @@ ActivityPub server. These are mainly related to the UX, but patching of the Go files might happen if I feel the need. -Branches are created based on released version numbers. +# How to use -# i18n +If you are already using Honk, backup +your `blob.db`, `honk.db` and `local.css`. For example, if you +want prepare the source with the rss patch: +``` +make rsstitle +``` +This will download the source tarball if not already done, untar it +and patch the source with the rsstitle.patch. +The patches are useable outside the Makefile. You just have to make +sure to put them in the root of the cloned honk repo or untarred source. + +# Patches + +## i18n.patch : Translation of the honk user interface -The patch `03_bloated_i18n_implementation.patch` works on -`web.go` in the latest changeset -of honk, [dca9f49c629f](https://humungus.tedunangst.com/r/honk/v/dca9f49c629f). +- Adds an option to switch language, cookie-based (defaults to eng) +- Can also switch it in account settings + +The patches `i18n.patch` works in the latest honk release, `0.9.6`, and +latest hg changeset of honk, [f74b9ce19463](https://humungus.tedunangst.com/r/honk/v/d/f74b9ce19463). The translated strings are contained in the `i18n.go` and -`views/i18n/honkpage.js` files. Contact me if you need +`i18n_views/honkpage.js` files. Contact me if you need help to add translations or notify me for problems, suggestions or improvements. -Command line to do after adding translations to compile -and run the i18n'd honk should ressemble this: -``` -cp patches/03_bloated_i18n_implementation.patch ../honk/ -cp views/i18n/* ../honk/views/ -cd ../honk -patch -b < 03_bloated_i18n_implementation.patch -make all -./honk -``` +## rsstitle.patch : More descriptive RSS title and description + +Before the patch, the title and description of an user RSS Feed is like this: +- title : yourhandle honk +- description: yourhandle honk rss +After the patch: +- title: @yourhandle - honking from honk.club +- description: Honks from yourhandle@honk.club + +I find it clearer. + +## altnavbar.patch (and the i18n version): honking faster with less clicks + +You need to shitpost fast ? Look no further, this will add a floating +navigation bar at the page's top with link to: +- /newhonk +- /front +- /home +- /xzone +- /@me +- /u/yourhandle (so your can see your own honks) +- /account + +The `altnavbar_i18n.patch` is the same, but the labels are i18n'd. # Screenshots -Alternative navigation bar, less uses of the drop down menu: +Alternative navigation bar, less uses of the menu on the left: [alt nav bar menu for honk](https://git.les-miquelots.net/honk_custom/plain/scrots/honk_altnavbar.png) + +A video of the i18n module and the navbar patch [here](https://partage.les-miquelots.net/img/honk_i18n.mp4) diff --git a/altnavbar.patch b/altnavbar.patch new file mode 100644 index 0000000..10864bf --- /dev/null +++ b/altnavbar.patch @@ -0,0 +1,42 @@ +--- a/views/header.html ++++ b/views/header.html +@@ -1,6 +1,7 @@ + + + ++ + honk + + {{ if .LocalStyleParam }} +@@ -12,6 +13,8 @@ + + + ++ ++ + + +
+@@ -57,6 +60,22 @@ + + + ++ ++ ++
++ new honk | ++ ptl | ++ home | ++ fetch | ++ @me | ++ profile | ++ settings | ++
++ ++
++
++ ++ +

+ {{ else }} + home diff --git a/altnavbar_i18n.patch b/altnavbar_i18n.patch new file mode 100644 index 0000000..4c2fc10 --- /dev/null +++ b/altnavbar_i18n.patch @@ -0,0 +1,28 @@ +diff --git a/i18n_views/header.html b/usr/share/honk/views/header.html +index 4f3373e..9e65c45 100644 +--- a/views/header.html ++++ b/views/header.html +@@ -60,6 +60,23 @@ + + + ++ ++ ++ ++ ++ +

+ {{ else }} + {{ .i18n.Home }} diff --git a/honk.service b/honk.service new file mode 100644 index 0000000..0d9d3ba --- /dev/null +++ b/honk.service @@ -0,0 +1,23 @@ +[Unit] +Description="Honk ActivityPub server" +After=syslog.target network.target +Requires=network.target + +[Service] +Restart=always +RestartSec=30 +WorkingDirectory=/usr/share/honk +ExecStart=/usr/bin/honk +NoNewPrivileges=yes +ProtectKernelLogs=true +ProtectKernelModules=true +ProtectKernelTunables=true +ProtectControlGroups=true +ReadWritePaths=/usr/share/honk + + +User=honk +Group=honk + +[Install] +WantedBy=default.target diff --git a/honkinit b/honkinit new file mode 100755 index 0000000..6c5d568 --- /dev/null +++ b/honkinit @@ -0,0 +1,3 @@ +#!/bin/sh +HONKDIR="/usr/share/honk" +su -l honk -c "honk -datadir $HONKDIR init" diff --git a/i18n.go b/i18n.go index 9e9126e..83a3e36 100644 --- a/i18n.go +++ b/i18n.go @@ -222,7 +222,7 @@ func setLangStr (lang string) interface{} { "mentions", "premier (first)", "combos", - "discutaille", + "tchat", "balises", "événements", "il y a longtemps", @@ -233,7 +233,7 @@ func setLangStr (lang string) interface{} { "plus de choses", "profil", "à propos", - "tout le réseau connu", + "tlrc", "zone fun", "récup", "aide", diff --git a/i18n.patch b/i18n.patch new file mode 100644 index 0000000..07916c3 --- /dev/null +++ b/i18n.patch @@ -0,0 +1,165 @@ +diff --git a/honk-0.9.6/web.go.orig b/honk-0.9.6/web.go +index 600f28b..cadca17 100644 +--- a/web.go ++++ b/web.go +@@ -85,6 +85,9 @@ func getInfo(r *http.Request) map[string]interface{} { + templinfo["IconName"] = iconName + templinfo["UserInfo"] = u + templinfo["UserSep"] = userSep ++ templinfo["Lang"] = getLangCookie(r) ++ templinfo["i18n"] = setLangStr(getLangCookie(r)) ++ + if u != nil { + var combos []string + combocache.Get(u.UserID, &combos) +@@ -99,12 +102,17 @@ func homepage(w http.ResponseWriter, r *http.Request) { + var honks []*Honk + var userid int64 = -1 + +- templinfo["ServerMessage"] = serverMsg ++ templinfo["ServerMessage"] = serverMsg + if u == nil || r.URL.Path == "/front" { + switch r.URL.Path { + case "/events": + honks = geteventhonks(userid) +- templinfo["ServerMessage"] = "some recent and upcoming events" ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "quelques évenements récents et à venir" ++ default: ++ templinfo["ServerMessage"] = "some recent and upcoming events" ++ } + default: + templinfo["ShowRSS"] = true + honks = getpublichonks() +@@ -113,17 +121,32 @@ func homepage(w http.ResponseWriter, r *http.Request) { + userid = u.UserID + switch r.URL.Path { + case "/atme": +- templinfo["ServerMessage"] = "at me!" ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "pour moi!" ++ default: ++ templinfo["ServerMessage"] = "at me!" ++ } + templinfo["PageName"] = "atme" + honks = gethonksforme(userid, 0) + honks = osmosis(honks, userid, false) + case "/longago": +- templinfo["ServerMessage"] = "long ago and far away!" ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "il y a longtemps" ++ default: ++ templinfo["ServerMessage"] = "long ago and far away!" ++ } + templinfo["PageName"] = "longago" + honks = gethonksfromlongago(userid, 0) + honks = osmosis(honks, userid, false) + case "/events": +- templinfo["ServerMessage"] = "some recent and upcoming events" ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "quelques événements récents et à venir" ++ default: ++ templinfo["ServerMessage"] = "some recent and upcoming events" ++ } + templinfo["PageName"] = "events" + honks = geteventhonks(userid) + honks = osmosis(honks, userid, true) +@@ -132,7 +155,12 @@ func homepage(w http.ResponseWriter, r *http.Request) { + honks = gethonksforuserfirstclass(userid, 0) + honks = osmosis(honks, userid, true) + case "/saved": +- templinfo["ServerMessage"] = "saved honks" ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "klaxons " ++ default: ++ templinfo["ServerMessage"] = "saved honks" ++ } + templinfo["PageName"] = "saved" + honks = getsavedhonks(userid, 0) + default: +@@ -744,6 +772,8 @@ func showhonker(w http.ResponseWriter, r *http.Request) { + templinfo["PageArg"] = name + templinfo["ServerMessage"] = msg + templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) ++ templinfo["Lang"] = getLangCookie(r) ++ + honkpage(w, u, honks, templinfo) + } + +@@ -755,7 +785,12 @@ func showcombo(w http.ResponseWriter, r *http.Request) { + templinfo := getInfo(r) + templinfo["PageName"] = "combo" + templinfo["PageArg"] = name +- templinfo["ServerMessage"] = "honks by combo: " + name ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "klaxons par groupes: " + name ++ default: ++ templinfo["ServerMessage"] = "honks by combo: " + name ++ } + templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) + honkpage(w, u, honks, templinfo) + } +@@ -1120,8 +1155,9 @@ func saveuser(w http.ResponseWriter, r *http.Request) { + options.MapLink = "" + } + options.Reaction = r.FormValue("reaction") +- +- sendupdate := false ++ setLangCookie(w, r) ++ ++ sendupdate := false + ava := re_avatar.FindString(whatabout) + if ava != "" { + whatabout = re_avatar.ReplaceAllString(whatabout, "") +@@ -2192,11 +2228,22 @@ func webhydra(w http.ResponseWriter, r *http.Request) { + case "atme": + honks = gethonksforme(userid, wanted) + honks = osmosis(honks, userid, false) +- templinfo["ServerMessage"] = "at me!" ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "pour moi!" ++ default: ++ templinfo["ServerMessage"] = "at me!" ++ } + case "longago": + honks = gethonksfromlongago(userid, wanted) + honks = osmosis(honks, userid, false) +- templinfo["ServerMessage"] = "from long ago" ++ ++ switch templinfo["Lang"] { ++ case "fr": ++ templinfo["ServerMessage"] = "il y a longtemps" ++ default: ++ templinfo["ServerMessage"] = "from long ago" ++ } + case "home": + honks = gethonksforuser(userid, wanted) + honks = osmosis(honks, userid, true) +@@ -2229,6 +2276,12 @@ func webhydra(w http.ResponseWriter, r *http.Request) { + `, login.GetCSRF("submithonker", r), xid) + msg := templates.Sprintf(`honks by honker: %s%s`, xid, xid, miniform) + templinfo["ServerMessage"] = msg ++ switch templinfo["Lang"]{ ++ case "fr": ++ templinfo["ServerMessage"] = "klaxons enregistrés" ++ default: ++ templinfo["ServerMessage"] = "saved honks" ++ } + default: + http.NotFound(w, r) + } +@@ -2454,6 +2507,7 @@ func serve() { + getters.HandleFunc("/server", serveractor) + posters.HandleFunc("/server/inbox", serverinbox) + posters.HandleFunc("/inbox", serverinbox) ++ posters.HandleFunc("/langcookie", setLangCookie) + + getters.HandleFunc("/style.css", serveasset) + getters.HandleFunc("/local.css", serveasset) diff --git a/i18n_views/about.html b/i18n_views/about.html new file mode 100644 index 0000000..962e7c3 --- /dev/null +++ b/i18n_views/about.html @@ -0,0 +1,15 @@ +{{ template "header.html" . }} +
+
+{{ .AboutMsg }}
+

+ + +
{{ .i18n.Version }}:{{ .HonkVersion }} +
{{ .i18n.Memory }}:{{ printf "%.02f" .Sensors.Memory }}MB +
{{ .i18n.Uptime }}:{{ printf "%.02f" .Sensors.Uptime }}s +
{{ .i18n.Cputime }}:{{ printf "%.02f" .Sensors.CPU }}s +
+

+

+
diff --git a/i18n_views/account.html b/i18n_views/account.html new file mode 100644 index 0000000..2d5a3f3 --- /dev/null +++ b/i18n_views/account.html @@ -0,0 +1,62 @@ +{{ template "header.html" . }} +
+
+

{{ .i18n.Account }} - {{ .i18n.Logout }} +

{{ .i18n.Username }}: {{ .User.Name }} +

+
+ +

{{ .i18n.Aboutme }}: +

+ +

+ + +

+ + +

+ + +

+ + +

+ + +

+ + +

+

+
+
+
+
+ +

{{ .i18n.ChangePwd }} +

- {{ .i18n.OldPwd }} +

- {{ .i18n.NewPwd }} +

+

+
+
diff --git a/i18n_views/chatter.html b/i18n_views/chatter.html new file mode 100644 index 0000000..0173224 --- /dev/null +++ b/i18n_views/chatter.html @@ -0,0 +1,66 @@ +{{ template "header.html" . }} +
+
+

+

+

{{ .i18n.NewChatter }}

+ +


+ +


+ +

+ +

+ +
+{{ $chonkcsrf := .ChonkCSRF }} +{{ range .Chatter }} +
+

+chatter: {{ .Target }} +{{ $target := .Target }} +{{ range .Chonks }} +

+

+{{ .Date.Local.Format "15:04" }} {{ .Handle }}: +{{ .HTML }} +{{ range .Donks }} +{{ if .Local }} +{{ if eq .Media "text/plain" }} +

{{ .i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} +{{ else if eq .Media "application/pdf" }} +

{{ .i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} +{{ else }} +

{{ .Desc }} +{{ end }} +{{ else }} +{{ if .XID }} +

{{ .i18n.ExtAttachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} +{{ else }} +{{ if eq .Media "video/mp4" }} +

+{{ else }} +

{{ .Desc }} +{{ end }} +{{ end }} +{{ end }} +{{ end }} +

+{{ end }} +
+ + +


+ +

+ +

+
+{{ end }} +
diff --git a/i18n_views/combos.html b/i18n_views/combos.html new file mode 100644 index 0000000..9cd227d --- /dev/null +++ b/i18n_views/combos.html @@ -0,0 +1,13 @@ +{{ template "header.html" . }} +
+
+

{{ .i18n.Combos }} +

+{{ range .Combos }} +
+
+

{{ . }} +

+
+{{ end }} +
diff --git a/i18n_views/funzone.html b/i18n_views/funzone.html new file mode 100644 index 0000000..d5e69e3 --- /dev/null +++ b/i18n_views/funzone.html @@ -0,0 +1,16 @@ +{{ template "header.html" . }} +
+
+

{{ .i18n.FunZoneGreet }} +

    +{{ range .Emus }} +
  • :{{ . }}: +{{ end }} +
+
    +{{ range .Memes }} +
  • meme: {{ . }} +{{ end }} +
+
+
diff --git a/i18n_views/header.html b/i18n_views/header.html new file mode 100644 index 0000000..4f3373e --- /dev/null +++ b/i18n_views/header.html @@ -0,0 +1,83 @@ + + + + +honk + +{{ if .LocalStyleParam }} + +{{ end }} + + + + + + + + +
+{{ if .UserInfo }} +
+menu {{ .UserInfo.Username }} + +
+

+{{ else }} +{{ .i18n.Home }} +{{ .i18n.Tags }} +{{ .i18n.Events }} +{{ .i18n.About }} +{{ if .ShowRSS }} +rss +{{ end }} +{{ .i18n.Login }} +
+ + +
+ +
+{{ end }} +
diff --git a/i18n_views/hfcs.html b/i18n_views/hfcs.html new file mode 100644 index 0000000..75b6f4f --- /dev/null +++ b/i18n_views/hfcs.html @@ -0,0 +1,73 @@ +{{ template "header.html" . }} +
+
+

+{{ .i18n.Hfcs }} +

+ +
+

{{ .i18n.NewFilter }}

+


+ +


+ +


+

{{ .i18n.Matches }}

+


+ +

+


+ +

+


+ +


+

action

+

+ + + + +


+ +


+ +


+

{{ .i18n.Expiration }}

+


+ +


+

+

+
+{{ $i18n := .i18n }} +{{ $csrf := .FilterCSRF }} +{{ range .Filters }} +
+

{{ $i18n.FilterName }}: {{ .Name }} +{{ with .Notes }}

{{ $i18n.Notes }}: {{ . }}{{ end }} +

Date: {{ .Date.Format "2006-01-02" }} +{{ with .Actor }}

{{ $i18n.Who }}: {{ . }}{{ end }} {{ with .IncludeAudience }} (inclusive) {{ end }} +{{ if .IsAnnounce }}

Announce: {{ .AnnounceOf }}{{ end }} +{{ with .Text }}

Text: {{ . }}{{ end }} +

{{ $i18n.Action }}: {{ range .Actions }} {{ . }} {{ end }} +{{ with .Rewrite }}

{{ $i18n.Rewrite }}: {{ . }}{{ end }} +{{ with .Replace }}

{{ $i18n.Replace }}: {{ . }}{{ end }} +{{ if not .Expiration.IsZero }}

{{ $i18n.Expiration }}: {{ .Expiration.Format "2006-01-02 03:04" }}{{ end }} +

+ + + + +
+

+

+{{ end }} +
diff --git a/i18n_views/honk.html b/i18n_views/honk.html new file mode 100644 index 0000000..52f63a7 --- /dev/null +++ b/i18n_views/honk.html @@ -0,0 +1,146 @@ +
+{{ $bonkcsrf := .BonkCSRF }} +{{ $IsPreview := .IsPreview }} +{{ $maplink := .MapLink }} +{{ $omitimages := .OmitImages }} +{{ $i18n := .i18n }} +{{ $lang := .Lang }} +{{ with .Honk }} +
+{{ if $bonkcsrf }} + +{{ else }} + +{{ end }} + +{{ if $bonkcsrf }} {{ end }} +{{ if .Oonker }} +{{ if $bonkcsrf }} + +{{ else }} + +{{ end }} + +{{ if $bonkcsrf }} {{ end }} +{{ end }} +

+{{ if $bonkcsrf }} +{{ .Username }} +{{ else }} +{{ .Username }} +{{ end }} +{{ .What }} {{ .Date.Local.Format "02 Jan 2006 15:04 -0700" }} +{{ if .Oonker }} +
+ +{{ if $bonkcsrf }} +{{ $i18n.Original }}: {{ .Oondle }} +{{ else }} +{{ $i18n.Original }}: {{ .Oondle }} +{{ end }} + +{{ else }} +{{ if .RID }} +
+ +{{ $i18n.InReplyTo }}: {{ .RID }} + +{{ end }} +{{ end }} +
+{{ if $bonkcsrf }} + {{ $i18n.Convoy }}: {{ .Convoy }} +{{ else }} + {{ $i18n.Convoy }}: {{ .Convoy }} + +{{ end }} +

+

+

+{{ .HTPrecis }}

+

{{ .HTPrecis }} +

{{ .HTML }} +{{ with .Time }} +

{{ $i18n.Time }}: {{ .StartTime.Local.Format "03:04PM EDT Mon Jan 02"}} +{{ if .Duration }}
{{ $i18n.Duration }}: {{ .Duration }}{{ end }} +{{ end }} +{{ with .Place }} +

{{ $i18n.Location }}: {{ with .Url }}{{ end }}{{ .Name }}{{ if .Url }}{{ end }}{{ if or .Latitude .Longitude }} {{ .Latitude }} {{ .Longitude }}{{ end }} +{{ end }} +{{ range .Donks }} +{{ if .Local }} +{{ if eq .Media "text/plain" }} +

{{ $i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} +{{ else if eq .Media "application/pdf" }} +

{{ $i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} +{{ else }} +{{ if $omitimages }} +

{{ $i18n.Image }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} +{{ else }} +

{{ .Desc }} +{{ end }} +{{ end }} +{{ else }} +{{ if .External }} +

{{ $i18n.ExtAttachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} +{{ else }} +{{ if eq .Media "video/mp4" }} +

+{{ else }} +

{{ .Desc }} +{{ end }} +{{ end }} +{{ end }} +{{ end }} +

+{{ end }} +{{ if and $bonkcsrf (not $IsPreview) }} +

+

+{{ $i18n.Actions }} +
+

+{{ if .Honk.Public }} +{{ if .Honk.IsBonked }} + +{{ else }} + +{{ end }} +{{ else }} + +{{ end }} + + + +

+ +
+

+{{ end }} +

diff --git a/i18n_views/honkers.html b/i18n_views/honkers.html new file mode 100644 index 0000000..5b9ecf4 --- /dev/null +++ b/i18n_views/honkers.html @@ -0,0 +1,62 @@ +{{ template "header.html" . }} +
+{{ $i18n := .i18n }} +
+

+

+

{{ $i18n.AddNewHonker }}

+ +


+ +


+ +


+ +

+


+ +

+

+
+{{ $honkercsrf := .HonkerCSRF }} +
+ +

+

+{{ range .Honkers }} +
+
+avatar +

{{ .Name }} +

+

+

+

url: {{ .XID }} +

{{ $i18n.Flavor }}: {{ .Flavor }} +

+ + +

{{ $i18n.Name }}: +


+ +

{{ $i18n.Combos }}: +

+ + + + +

+
+

+

+{{ end }} +
diff --git a/i18n_views/honkform.html b/i18n_views/honkform.html new file mode 100644 index 0000000..ce17fca --- /dev/null +++ b/i18n_views/honkform.html @@ -0,0 +1,49 @@ +

+ +

+ + + +

{{ .i18n.MakeNoise }}

+

+

+{{ .i18n.MoreOptions }} +

+ + +


+ +{{ with .SavedPlace }} +

+

+


+


+

+ +

+{{ else }} +

+

+{{ end }} +

+

+


+ +


+ +

+
+

+ +

+ + + +

diff --git a/i18n_views/honkfrags.html b/i18n_views/honkfrags.html new file mode 100644 index 0000000..5ccc2da --- /dev/null +++ b/i18n_views/honkfrags.html @@ -0,0 +1,11 @@ +
{{ .TopHID }}
+{{ $BonkCSRF := .HonkCSRF }} +{{ $MapLink := .MapLink }} +{{ $Badonk := .User.Options.Reaction }} +{{ $OmitImages := .User.Options.OmitImages }} +

{{ .ServerMessage }}

+
+{{ range .Honks }} +{{ template "honk.html" map "Honk" . "MapLink" $MapLink "BonkCSRF" $BonkCSRF "Badonk" $Badonk "OmitImages" $OmitImages }} +{{ end }} +
diff --git a/i18n_views/honkpage.html b/i18n_views/honkpage.html new file mode 100644 index 0000000..0ae42ef --- /dev/null +++ b/i18n_views/honkpage.html @@ -0,0 +1,45 @@ +{{ template "header.html" . }} +
+
+
+{{ if .Name }} +

{{ .Name }} rss +

{{ .WhatAbout }} +{{ end }} +

{{ .ServerMessage }} +

+{{ if .HonkCSRF }} +{{ template "honkform.html" . }} + + +{{ end }} +
+{{ if and .HonkCSRF (not .IsPreview) }} +
+

+ +

+{{ if eq .ServerMessage .i18n.MoarHonks }} {{ end }} +{{ end }} +
+
+{{ $BonkCSRF := .HonkCSRF }} +{{ $IsPreview := .IsPreview }} +{{ $MapLink := .MapLink }} +{{ $Badonk := .User.Options.Reaction }} +{{ $i18n := .i18n }} +{{ $OmitImages := .User.Options.OmitImages }} +{{ range .Honks }} +{{ template "honk.html" map "Honk" . "MapLink" $MapLink "BonkCSRF" $BonkCSRF "IsPreview" $IsPreview "Badonk" $Badonk "OmitImages" $OmitImages "i18n" $i18n }} +{{ end }} +
+
+
diff --git a/i18n_views/honkpage.js b/i18n_views/honkpage.js new file mode 100644 index 0000000..351cde4 --- /dev/null +++ b/i18n_views/honkpage.js @@ -0,0 +1,390 @@ +function getCookie(name){ + if(document.cookie.length == 0) + return null; + + var regSepCookie = new RegExp('(; )', 'g'); + var cookies = document.cookie.split(regSepCookie); + + for(var i = 0; i < cookies.length; i++){ + var regInfo = new RegExp('=', 'g'); + var infos = cookies[i].split(regInfo); + if(infos[0] == name){ + return unescape(infos[1]); + } + } + return null; +} + + +function encode(hash) { + var s = [] + for (var key in hash) { + var val = hash[key] + s.push(escape(key) + "=" + escape(val)) + } + return s.join("&") +} +function post(url, data) { + var x = new XMLHttpRequest() + x.open("POST", url) + x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") + x.send(data) +} +function get(url, whendone) { + var x = new XMLHttpRequest() + x.open("GET", url) + x.responseType = "document" + x.onload = function() { whendone(x) } + x.send() +} +function bonk(el, xid) { + el.innerHTML = i18n_bonked + el.disabled = true + post("/bonk", encode({"js": "2", "CSRF": csrftoken, "xid": xid})) + return false +} +function unbonk(el, xid) { + el.innerHTML = i18n_unbonked + el.disabled = true + post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "unbonk", "what": xid})) +} +function muteit(el, convoy) { + el.innerHTML = i18n_muted + el.disabled = true + post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "zonvoy", "what": convoy})) + var els = document.querySelectorAll('article.honk') + for (var i = 0; i < els.length; i++) { + var e = els[i] + if (e.getAttribute("data-convoy") == convoy) { + e.remove() + } + } +} +function zonkit(el, xid) { + el.innerHTML = i18n_zonked + el.disabled = true + post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "zonk", "what": xid})) + var p = el + while (p && p.tagName != "ARTICLE") { + p = p.parentElement + } + if (p) { + p.remove() + } +} +function flogit(el, how, xid) { + var s = how + if (honklang == 'en') { + if (s[s.length-1] != "e") { s += "e" } + s += "d" + if (s == "untaged") s = i18n_untagged + if (s == "reacted") s = i18n_badonked + } else { + if (s == "deack") s = i18n_deack + if (s == "ack") s = i18n_ack + if (s == "unsave") s = i18n_unsave + if (s == "save") s = i18n_save + if (s == "untag") s = i18n_untagged + if (s == "react") s = i18n_badonked + } + + el.innerHTML = s + el.disabled = true + post("/zonkit", encode({"CSRF": csrftoken, "wherefore": how, "what": xid})) +} + +var lehonkform = document.getElementById("honkform") +var lehonkbutton = document.getElementById("honkingtime") + +function oldestnewest(btn) { + var els = document.getElementsByClassName("glow") + if (els.length) { + els[els.length-1].scrollIntoView() + } +} +function removeglow() { + var els = document.getElementsByClassName("glow") + while (els.length) { + els[0].classList.remove("glow") + } +} + +function fillinhonks(xhr, glowit) { + var doc = xhr.responseXML + var stash = curpagestate.name + ":" + curpagestate.arg + tophid[stash] = doc.children[0].children[1].children[0].innerText + var srvmsg = doc.children[0].children[1].children[1] + var honks = doc.children[0].children[1].children[2].children + + var srvel = document.getElementById("srvmsg") + while (srvel.children[0]) { + srvel.children[0].remove() + } + srvel.prepend(srvmsg) + + var frontload = true + if (curpagestate.name == "convoy") { + frontload = false + } + + var honksonpage = document.getElementById("honksonpage") + var holder = honksonpage.children[0] + var lenhonks = honks.length + for (var i = honks.length; i > 0; i--) { + var h = honks[i-1] + if (glowit) + h.classList.add("glow") + if (frontload) { + holder.prepend(h) + } else { + holder.append(h) + } + + } + relinklinks() + return lenhonks +} +function hydrargs() { + var name = curpagestate.name + var arg = curpagestate.arg + var args = { "page" : name } + if (name == "convoy") { + args["c"] = arg + } else if (name == "combo") { + args["c"] = arg + } else if (name == "honker") { + args["xid"] = arg + } + return args +} +function refreshupdate(msg) { + var el = document.querySelector("#refreshbox p span") + if (el) { + el.innerHTML = msg + } +} +function refreshhonks(btn) { + removeglow() + btn.innerHTML = i18n_refreshing + btn.disabled = true + var args = hydrargs() + var stash = curpagestate.name + ":" + curpagestate.arg + args["tophid"] = tophid[stash] + get("/hydra?" + encode(args), function(xhr) { + var lenhonks = fillinhonks(xhr, true) + btn.innerHTML = i18n_refreshing + btn.disabled = false + refreshupdate(" " + lenhonks + " new") + }) +} +function statechanger(evt) { + var data = evt.state + if (!data) { + return + } + switchtopage(data.name, data.arg) +} +function switchtopage(name, arg) { + var stash = curpagestate.name + ":" + curpagestate.arg + var honksonpage = document.getElementById("honksonpage") + var holder = honksonpage.children[0] + holder.remove() + var srvel = document.getElementById("srvmsg") + var msg = srvel.children[0] + if (msg) { + msg.remove() + servermsgs[stash] = msg + } + showelement("refreshbox") + + honksforpage[stash] = holder + + curpagestate.name = name + curpagestate.arg = arg + // get the holder for the target page + var stash = name + ":" + arg + holder = honksforpage[stash] + if (holder) { + honksonpage.prepend(holder) + msg = servermsgs[stash] + if (msg) { + srvel.prepend(msg) + } + } else { + // or create one and fill it + honksonpage.prepend(document.createElement("div")) + var args = hydrargs() + get("/hydra?" + encode(args), function(xhr) { fillinhonks(xhr, false) }) + } + refreshupdate("") +} +function newpagestate(name, arg) { + return { "name": name, "arg": arg } +} +function pageswitcher(name, arg) { + return function(evt) { + var topmenu = document.getElementById("topmenu") + topmenu.open = false + if (name == curpagestate.name && arg == curpagestate.arg) { + return false + } + switchtopage(name, arg) + var url = evt.srcElement.href + if (!url) { + url = evt.srcElement.parentElement.href + } + history.pushState(newpagestate(name, arg), "some title", url) + window.scrollTo(0, 0) + return false + } +} +function relinklinks() { + var els = document.getElementsByClassName("convoylink") + while (els.length) { + els[0].onclick = pageswitcher("convoy", els[0].text) + els[0].classList.remove("convoylink") + } + els = document.getElementsByClassName("combolink") + while (els.length) { + els[0].onclick = pageswitcher("combo", els[0].text) + els[0].classList.remove("combolink") + } + els = document.getElementsByClassName("honkerlink") + while (els.length) { + var el = els[0] + var xid = el.getAttribute("data-xid") + el.onclick = pageswitcher("honker", xid) + el.classList.remove("honkerlink") + } +} +(function() { + var el = document.getElementById("homelink") + el.onclick = pageswitcher("home", "") + el = document.getElementById("atmelink") + el.onclick = pageswitcher("atme", "") + el = document.getElementById("firstlink") + el.onclick = pageswitcher("first", "") + el = document.getElementById("savedlink") + el.onclick = pageswitcher("saved", "") + el = document.getElementById("longagolink") + el.onclick = pageswitcher("longago", "") + relinklinks() + window.onpopstate = statechanger + history.replaceState(curpagestate, "some title", "") +})(); +(function() { + hideelement("donkdescriptor") +})(); +function showhonkform(elem, rid, hname) { + var form = lehonkform + form.style = "display: block" + if (elem) { + form.remove() + elem.parentElement.parentElement.parentElement.insertAdjacentElement('beforebegin', form) + } else { + hideelement(lehonkbutton) + elem = document.getElementById("honkformhost") + elem.insertAdjacentElement('afterend', form) + } + var ridinput = document.getElementById("ridinput") + if (rid) { + ridinput.value = rid + honknoise.value = hname + " " + } else { + ridinput.value = "" + honknoise.value = "" + } + var updateinput = document.getElementById("updatexidinput") + updateinput.value = "" + document.getElementById("honknoise").focus() + return false +} +function cancelhonking() { + hideelement(lehonkform) + showelement(lehonkbutton) +} +function showelement(el) { + if (typeof(el) == "string") + el = document.getElementById(el) + if (!el) return + el.style.display = "block" +} +function hideelement(el) { + if (typeof(el) == "string") + el = document.getElementById(el) + if (!el) return + el.style.display = "none" +} +function updatedonker() { + var el = document.getElementById("donker") + el.children[1].textContent = el.children[0].value.slice(-20) + var el = document.getElementById("donkdescriptor") + el.style.display = "" + var el = document.getElementById("saveddonkxid") + el.value = "" +} +var checkinprec = 100.0 +var gpsoptions = { + enableHighAccuracy: false, + timeout: 1000, + maximumAge: 0 +}; +function fillcheckin() { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function(pos) { + showelement("placedescriptor") + var el = document.getElementById("placelatinput") + el.value = Math.round(pos.coords.latitude * checkinprec) / checkinprec + el = document.getElementById("placelonginput") + el.value = Math.round(pos.coords.longitude * checkinprec) / checkinprec + checkinprec = 10000.0 + gpsoptions.enableHighAccuracy = true + gpsoptions.timeout = 2000 + }, function(err) { + showelement("placedescriptor") + el = document.getElementById("placenameinput") + el.value = err.message + }, gpsoptions) + } +} + +window.getCookie = function(name) { + var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); + if (match) return match[2]; +} + +var honklang = getCookie('lang') +switch(honklang) { + case "fr": + var i18n_deack = "marqué non lu" + var i18n_ack = "marqué lu" + var i18n_unsave = "oublié" + var i18n_save = "sauvegardé" + + var i18n_bonked = "reposté" + var i18n_unbonked = "départagé" + var i18n_muted = "mis en sourdine" + var i18n_badonked = "réagi" + var i18n_zonked = "supprimé" + var i18n_untagged = "débalisé" + var i18n_refreshing = "rafraîchissement" + break; + + default: + var i18n_deack = "deacked" + var i18n_ack = "ack" + var i18n_unsave = "unsave" + var i18n_save = "save" + + var i18n_bonked = "bonked" + var i18n_unbonked = "unbonked" + var i18n_muted = "muted" + var i18n_badonked = "badonked" + var i18n_untagged = "untagged" + var i18n_zonked = "zonked" + var i18n_refreshing = "refreshing" + +} + +//console.log("i18n_bonked: "+ i18n_bonked + "\n"+ "cookie: "+ getCookie("lang")) + diff --git a/i18n_views/local.css b/i18n_views/local.css new file mode 100644 index 0000000..680d300 --- /dev/null +++ b/i18n_views/local.css @@ -0,0 +1,8 @@ +#altnavbar{ + margin-left:17%; + position:fixed; + background:var(--bg-page); + opacity:0.7; + top:0; + padding:5px +} diff --git a/i18n_views/login.html b/i18n_views/login.html new file mode 100644 index 0000000..e5ea195 --- /dev/null +++ b/i18n_views/login.html @@ -0,0 +1,12 @@ +{{ template "header.html" . }} +
+
+{{ .LoginMsg }} +
+

- + {{ .i18n.Username }} +

- {{ .i18n.Pwd }} +

+

+
+
diff --git a/i18n_views/msg.html b/i18n_views/msg.html new file mode 100644 index 0000000..b729caa --- /dev/null +++ b/i18n_views/msg.html @@ -0,0 +1,7 @@ +{{ template "header.html" . }} +
+
+

+{{ .ServerMessage }} +

+
diff --git a/i18n_views/onts.html b/i18n_views/onts.html new file mode 100644 index 0000000..4a208c8 --- /dev/null +++ b/i18n_views/onts.html @@ -0,0 +1,16 @@ +{{ template "header.html" . }} +
+
+

{{ .i18n.Onts }} +{{ $letter := 0 }} +

    +{{ range .Onts }} +{{ if not (eq $letter (index .Name 0)) }} +{{ $letter = (index .Name 0) }} +
  • +{{ end }} +#{{ .Name }} ({{ .Count }}) +{{ end }} +

+
+
diff --git a/i18n_views/pleroma.css b/i18n_views/pleroma.css new file mode 100644 index 0000000..b25439a --- /dev/null +++ b/i18n_views/pleroma.css @@ -0,0 +1,7 @@ +html { + --bg-page: #1b2735; + --bg-dark: #121a24; + --fg: #b9b9ba; + --hl: #d8a070; + --fg-subtle: rgba(185, 185, 186, 0.5); +} diff --git a/i18n_views/style.css b/i18n_views/style.css new file mode 100644 index 0000000..b1da23d --- /dev/null +++ b/i18n_views/style.css @@ -0,0 +1,334 @@ +html { + --bg-page: #306; + --bg-dark: #002; + --fg: #dcf; + --hl: #dcf; + --fg-subtle: #a9c; + --fg-limited: #a79; +} + +body { + background: var(--bg-page); + color: var(--fg); + font-size: 1em; + word-wrap: break-word; + font-family: sans-serif, "Noto Color Emoji"; + line-height: 1.2; + overscroll-behavior-y: contain; +} +pre, code { + white-space: pre-wrap; +} +blockquote { + margin-left: 0em; + padding-left: 0.5em; + border-left: 1px solid var(--fg-subtle); +} +blockquote cite { + margin-left: 2em; +} +table { + display: block; + max-width: 100%; + overflow-x: auto; +} +a { + color: var(--fg); +} +form, input, textarea { + font-family: monospace, "Noto Color Emoji"; +} +p { + margin-top: 1em; + margin-bottom: 1em; +} +input { + background: var(--bg-page); + color: var(--fg); + font-size: 1.0em; + line-height: 1.2em; + padding: 0.4em; +} +#honkform input { + font-size: 0.8em; +} +body > header { + margin: 1em auto; + font-size: 1.5em; +} +body > header span { + margin-left: 2em; +} +body > header p { + padding: 1em; +} +header > details { + background: var(--bg-page); + padding: 1em 1em 1em 1em; + position: fixed; + top: 0; + left: 0; + display: inline; + max-height: calc(100% - 1em); + overflow: auto; + opacity: 0.7; + overscroll-behavior: contain; +} +header > details[open] { + padding: 1em 1em 0em 1em; + background: var(--bg-dark); + border: 1px solid var(--hl); + margin-bottom: 1em; + opacity: 1.0; +} +header > details summary span { + display: none; +} +header > details[open] summary span { + display: inline; +} +header > details li { + margin: 1em 0em 1em 0em; +} +details summary { + display: inline; +} +@supports (-moz-appearance:none) { + details summary { + display: list-item; + } +} +main { + max-width: 1200px; + margin: auto; + font-size: 1.5em; +} +hr { + border-color: var(--hl); +} +.info { + background: var(--bg-dark); + border: 1px solid var(--hl); + margin-bottom: 1em; + padding: 0em 1em 0em 1em; +} +.info div { + margin-top: 1em; + margin-bottom: 1em; +} +label { + font-size: 0.8em; +} +label.button, button, select { + font-size: 16px; + font-family: monospace; + color: var(--fg); + background: var(--bg-page); + border: 1px solid var(--hl); + padding: 0.5em; + white-space: nowrap; +} +.buttonarray { + margin-top: -2.0em; +} +.buttonarray button, .buttonarray > span { + margin-top: 2.0em; + display: inline-block; +} +button a { + text-decoration: none; +} +form { + margin-top: 1em; +} +textarea { + padding: 0.5em; + font-size: 1em; + background: var(--bg-page); + color: var(--fg); + width: 600px; + height: 4em; + margin-bottom: 0.5em; + box-sizing: border-box; + max-width: 100%; +} +textarea#honknoise { + height: 10em; +} +input[type="checkbox"] { + position: fixed; + top: -9999px; +} +input[type="checkbox"] + span:after { + content: "no"; +} +input[type="checkbox"]:checked + span:after { + content: "yes"; +} +input[type="checkbox"]:focus + span:after { + outline: 1px solid var(--fg); +} +input[type=file] { + display: none; +} + +.glow { + /* box-shadow: 0px 0px 16px var(--hl);*/ + box-shadow: 0px 0px 16px black; +} + +.honk { + margin: auto; + background: var(--bg-dark); + border: 1px solid var(--hl); + border-radius: 1em; + margin-bottom: 1em; + padding-left: 1em; + padding-right: 1em; + padding-top: 0; + overflow: hidden; +} + +.chat { + border-bottom: 0.5px solid var(--fg-subtle); + padding-left: 1em; +} +.chat p { + margin-top: 0.2em; + margin-bottom: 0.2em; +} +.chattarget { + border-bottom: 1px solid var(--fg-subtle); +} +.chatstamp { + margin-left: -1em; +} + +.honk #honkform { + padding: 1em; + border: 1px solid var(--fg); + } +.honk a { + color: var(--fg); + } +.honk header { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 0.8em; + line-height: 1.1; + margin-top: 1em; + height: 64px; + } + +.honk header .clip a { + color: var(--fg-subtle); + } +.honk header img { + float: left; + margin-right: 1em; + width: 64px; + height: 64px; + } +.honk header p { + margin-top: 0px; + } +.honk .actions button { + margin-left: 4em; + margin-top: 2em; + } +.honk .noise { + line-height: 1.4; + } + +.honk .noise code .kw { font-weight: bold; } +.honk .noise code .bi { font-weight: bold; } +.honk .noise code .st { color: var(--fg-subtle); } +.honk .noise code .nm { color: #ba88ff; } +.honk .noise code .op { color: #ba88ff; } +.honk .noise code .tp { font-weight: bold; } +.honk .noise code .cm { color: var(--fg-subtle); font-style: italic; } +.honk .noise code .al { color: #aaffbb; } +.honk .noise code .dl { color: #ffaabb; } + +.honk details.actions summary { + color: var(--fg-subtle); +} +.subtle .noise { + color: var(--fg-subtle); + font-size: 0.8em; +} +.subtle .noise a { + color: var(--fg-subtle); +} +.limited { + border: 1px solid var(--fg-limited); + color: var(--fg-limited); +} +.limited .glow { + box-shadow: 0px 0px 16px var(--fg-limited); +} +.limited .noise { + color: var(--fg-limited); + } +.limited .noise a { + color: var(--fg-limited); + } +.limited details.actions summary { + color: var(--fg-limited); + } +details.noise[open] summary { + display: none; +} +h1, h2 { + font-size: 1.2em; +} +h3, h4 { + font-size: 1.1em; +} + +img:not(.emu) { + background: var(--bg-page); +} +img, video { + max-width: 100%; + max-height: 600px; +} +.noise img:not(.emu) { + display: block; +} +img.emu { + width: 2em; + height: 2em; + vertical-align: middle; + margin: -2px; + object-fit: contain; +} +@media screen and (max-width: 740px) { + body { + font-size: 12px; + } + .honk header { + height: 52px; + } + .honk header img { + width: 48px; + height: 48px; + } + details summary { + outline: none; + } +} +@media print { + #topmenu, #topspacer, #infobox, #refreshbox, .actions { + display: none; + } + + html { + --bg-page: white; + --bg-dark: white; + --fg: black; + --fg-subtle: black; + --fg-limited: #a79; + } +} diff --git a/i18n_views/xzone.html b/i18n_views/xzone.html new file mode 100644 index 0000000..e2ab0d7 --- /dev/null +++ b/i18n_views/xzone.html @@ -0,0 +1,17 @@ +{{ template "header.html" . }} +
+
+
+ +

{{ .i18n.Import }} +

- xid +

+

+
+{{ $i18n := .i18n }} +{{ range .Honkers }} +
+

{{ $i18n.Honks }} {{ $i18n.HonksFrom }} {{ .Handle }} +

+{{ end }} +
diff --git a/patches/01_prettier_rssfeed.patch b/patches/01_prettier_rssfeed.patch deleted file mode 100644 index 80e8d9e..0000000 --- a/patches/01_prettier_rssfeed.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/web.go b/web.go -index 11adf5b..502e15f 100644 ---- a/web.go -+++ b/web.go -@@ -190,9 +190,9 @@ func showrss(w http.ResponseWriter, r *http.Request) { - name += " " - } - feed := rss.Feed{ -- Title: name + "honk", -+ Title: "@" + name + " - honking from " + serverName, - Link: home, -- Description: name + "honk rss", -+ Description: "RSS Feed of honks from " + name + "@" + serverName, - Image: &rss.Image{ - URL: base + "icon.png", - Title: name + "honk rss", diff --git a/patches/03_bloated_i18n_implementation.patch b/patches/03_bloated_i18n_implementation.patch deleted file mode 100644 index d8d09a5..0000000 --- a/patches/03_bloated_i18n_implementation.patch +++ /dev/null @@ -1,212 +0,0 @@ -diff --git a/web.go b/web.go -index 11adf5b..d15fbac 100644 ---- a/web.go -+++ b/web.go -@@ -85,6 +85,9 @@ func getInfo(r *http.Request) map[string]interface{} { - templinfo["IconName"] = iconName - templinfo["UserInfo"] = u - templinfo["UserSep"] = userSep -+ templinfo["Lang"] = getLangCookie(r) -+ templinfo["i18n"] = setLangStr(getLangCookie(r)) -+ - if u != nil { - var combos []string - combocache.Get(u.UserID, &combos) -@@ -99,12 +102,17 @@ func homepage(w http.ResponseWriter, r *http.Request) { - var honks []*Honk - var userid int64 = -1 - -- templinfo["ServerMessage"] = serverMsg -+ templinfo["ServerMessage"] = serverMsg - if u == nil || r.URL.Path == "/front" { - switch r.URL.Path { - case "/events": - honks = geteventhonks(userid) -- templinfo["ServerMessage"] = "some recent and upcoming events" -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "quelques évenements récents et à venir" -+ default: -+ templinfo["ServerMessage"] = "some recent and upcoming events" -+ } - default: - templinfo["ShowRSS"] = true - honks = getpublichonks() -@@ -113,17 +121,32 @@ func homepage(w http.ResponseWriter, r *http.Request) { - userid = u.UserID - switch r.URL.Path { - case "/atme": -- templinfo["ServerMessage"] = "at me!" -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "pour moi!" -+ default: -+ templinfo["ServerMessage"] = "at me!" -+ } - templinfo["PageName"] = "atme" - honks = gethonksforme(userid, 0) - honks = osmosis(honks, userid, false) - case "/longago": -- templinfo["ServerMessage"] = "long ago and far away!" -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "il y a longtemps" -+ default: -+ templinfo["ServerMessage"] = "long ago and far away!" -+ } - templinfo["PageName"] = "longago" - honks = gethonksfromlongago(userid, 0) - honks = osmosis(honks, userid, false) - case "/events": -- templinfo["ServerMessage"] = "some recent and upcoming events" -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "quelques événements récents et à venir" -+ default: -+ templinfo["ServerMessage"] = "some recent and upcoming events" -+ } - templinfo["PageName"] = "events" - honks = geteventhonks(userid) - honks = osmosis(honks, userid, true) -@@ -132,7 +155,12 @@ func homepage(w http.ResponseWriter, r *http.Request) { - honks = gethonksforuserfirstclass(userid, 0) - honks = osmosis(honks, userid, true) - case "/saved": -- templinfo["ServerMessage"] = "saved honks" -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "klaxons enregistrés" -+ default: -+ templinfo["ServerMessage"] = "saved honks" -+ } - templinfo["PageName"] = "saved" - honks = getsavedhonks(userid, 0) - default: -@@ -733,6 +761,8 @@ func showhonker(w http.ResponseWriter, r *http.Request) { - templinfo["PageArg"] = name - templinfo["ServerMessage"] = msg - templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) -+ templinfo["Lang"] = getLangCookie(r) -+ - honkpage(w, u, honks, templinfo) - } - -@@ -744,7 +774,12 @@ func showcombo(w http.ResponseWriter, r *http.Request) { - templinfo := getInfo(r) - templinfo["PageName"] = "combo" - templinfo["PageArg"] = name -- templinfo["ServerMessage"] = "honks by combo: " + name -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "klaxons par groupes: " + name -+ default: -+ templinfo["ServerMessage"] = "honks by combo: " + name -+ } - templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) - honkpage(w, u, honks, templinfo) - } -@@ -1109,8 +1144,9 @@ func saveuser(w http.ResponseWriter, r *http.Request) { - options.MapLink = "" - } - options.Reaction = r.FormValue("reaction") -- -- sendupdate := false -+ setLangCookie(w, r) -+ -+ sendupdate := false - ava := re_avatar.FindString(whatabout) - if ava != "" { - whatabout = re_avatar.ReplaceAllString(whatabout, "") -@@ -2179,11 +2215,22 @@ func webhydra(w http.ResponseWriter, r *http.Request) { - case "atme": - honks = gethonksforme(userid, wanted) - honks = osmosis(honks, userid, false) -- templinfo["ServerMessage"] = "at me!" -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "pour moi!" -+ default: -+ templinfo["ServerMessage"] = "at me!" -+ } - case "longago": - honks = gethonksfromlongago(userid, wanted) - honks = osmosis(honks, userid, false) -- templinfo["ServerMessage"] = "from long ago" -+ -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "il y a longtemps" -+ default: -+ templinfo["ServerMessage"] = "from long ago" -+ } - case "home": - honks = gethonksforuser(userid, wanted) - honks = osmosis(honks, userid, true) -@@ -2191,26 +2238,53 @@ func webhydra(w http.ResponseWriter, r *http.Request) { - case "first": - honks = gethonksforuserfirstclass(userid, wanted) - honks = osmosis(honks, userid, true) -- templinfo["ServerMessage"] = "first class only" -+ -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "première classe seulement" -+ default: -+ templinfo["ServerMessage"] = "first class only" -+ } - case "saved": - honks = getsavedhonks(userid, wanted) - templinfo["PageName"] = "saved" -- templinfo["ServerMessage"] = "saved honks" -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "klaxons enregistrés" -+ default: -+ templinfo["ServerMessage"] = "saved honks" -+ } - case "combo": - c := r.FormValue("c") - honks = gethonksbycombo(userid, c, wanted) - honks = osmosis(honks, userid, false) -- templinfo["ServerMessage"] = "honks by combo: " + c -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "klaxons par groupe: " + c -+ default: -+ templinfo["ServerMessage"] = "honks by combo: " + c -+ } - case "convoy": - c := r.FormValue("c") - honks = gethonksbyconvoy(userid, c, wanted) - honks = osmosis(honks, userid, false) -- templinfo["ServerMessage"] = "honks in convoy: " + c -+ switch templinfo["Lang"] { -+ case "fr": -+ templinfo["ServerMessage"] = "klaxons dans le convoi: " + c -+ default: -+ templinfo["ServerMessage"] = "honks in convoy: " + c -+ } - case "honker": - xid := r.FormValue("xid") - honks = gethonksbyxonker(userid, xid, wanted) -- msg := templates.Sprintf(`honks by honker: %s`, xid, xid) -- templinfo["ServerMessage"] = msg -+ switch templinfo["Lang"] { -+ case "fr": -+ msg := templates.Sprintf(`klaxons par le klaxonneur: %s`, xid, xid) -+ templinfo["ServerMessage"] = msg -+ default: -+ msg := templates.Sprintf(`honks by honker: %s`, xid, xid) -+ templinfo["ServerMessage"] = msg -+ } - default: - http.NotFound(w, r) - } -@@ -2436,6 +2510,7 @@ func serve() { - getters.HandleFunc("/server", serveractor) - posters.HandleFunc("/server/inbox", serverinbox) - posters.HandleFunc("/inbox", serverinbox) -+ posters.HandleFunc("/langcookie", setLangCookie) - - getters.HandleFunc("/style.css", serveasset) - getters.HandleFunc("/local.css", serveasset) diff --git a/rsstitle.patch b/rsstitle.patch new file mode 100644 index 0000000..c4993ec --- /dev/null +++ b/rsstitle.patch @@ -0,0 +1,16 @@ +diff --git a/web.go b/web.go +index 11adf5b..502e15f 100644 +--- a/web.go ++++ b/web.go +@@ -190,9 +190,9 @@ func showrss(w http.ResponseWriter, r *http.Request) { + name += " " + } + feed := rss.Feed{ +- Title: name + "honk", ++ Title: "@" + name + " - honking from " + serverName, + Link: home, +- Description: name + "honk rss", ++ Description: "Honks from " + name + "@" + serverName, + Image: &rss.Image{ + URL: base + "icon.png", + Title: name + "honk rss", diff --git a/views/header.html b/views/header.html deleted file mode 100644 index 4498ca1..0000000 --- a/views/header.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - -honk - -{{ if .LocalStyleParam }} - -{{ end }} - - - - - - - - -
-{{ if .UserInfo }} -
- menu {{ .UserInfo.Username }} - -
- - -
- new honk | - front | - home | - fetch | - @me | - profile | - settings | -
- -
-
- - -

-{{ else }} -home -tags -events -about -{{ if .ShowRSS }} -rss -{{ end }} -login -{{ end }} -
diff --git a/views/honk.html b/views/honk.html deleted file mode 100644 index 2d1e465..0000000 --- a/views/honk.html +++ /dev/null @@ -1,140 +0,0 @@ -
-{{ $bonkcsrf := .BonkCSRF }} -{{ $IsPreview := .IsPreview }} -{{ $maplink := .MapLink }} -{{ $omitimages := .OmitImages }} -{{ with .Honk }} -
-{{ if $bonkcsrf }} - -{{ else }} - -{{ end }} - -{{ if $bonkcsrf }} {{ end }} -{{ if .Oonker }} -{{ if $bonkcsrf }} - -{{ else }} - -{{ end }} - -{{ if $bonkcsrf }} {{ end }} -{{ end }} -

-{{ if $bonkcsrf }} -{{ .Username }} -{{ else }} -{{ .Username }} -{{ end }} -{{ .What }} {{ .Date.Local.Format "02 Jan 2006 15:04 -0700" }} -{{ if .Oonker }} -
- -{{ if $bonkcsrf }} -original: {{ .Oondle }} -{{ else }} -original: {{ .Oondle }} -{{ end }} - -{{ else }} -{{ if .RID }} -
- -in reply to: {{ .RID }} - -{{ end }} -{{ end }} -
-{{ if $bonkcsrf }} -convoy: {{ .Convoy }} -{{ else }} -convoy: {{ .Convoy }} -{{ end }} -

-

-

-{{ .HTPrecis }}

-

{{ .HTPrecis }} -

{{ .HTML }} -{{ with .Time }} -

Time: {{ .StartTime.Local.Format "03:04PM EDT Mon Jan 02"}} -{{ if .Duration }}
Duration: {{ .Duration }}{{ end }} -{{ end }} -{{ with .Place }} -

Location: {{ with .Url }}{{ end }}{{ .Name }}{{ if .Url }}{{ end }}{{ if or .Latitude .Longitude }} {{ .Latitude }} {{ .Longitude }}{{ end }} -{{ end }} -{{ range .Donks }} -{{ if .Local }} -{{ if eq .Media "text/plain" }} -

Attachment: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else if eq .Media "application/pdf" }} -

Attachment: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -{{ if $omitimages }} -

Image: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -

{{ .Desc }} -{{ end }} -{{ end }} -{{ else }} -{{ if .External }} -

External Attachment: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -{{ if eq .Media "video/mp4" }} -

-{{ else }} -

{{ .Desc }} -{{ end }} -{{ end }} -{{ end }} -{{ end }} -

-{{ end }} -{{ if and $bonkcsrf (not $IsPreview) }} -

-

-

-{{ if .Honk.Public }} -{{ if .Honk.IsBonked }} - -{{ else }} - -{{ end }} -{{ else }} - -{{ end }} - - - -

- -

-{{ end }} -

diff --git a/views/i18n/about.html b/views/i18n/about.html deleted file mode 100644 index 962e7c3..0000000 --- a/views/i18n/about.html +++ /dev/null @@ -1,15 +0,0 @@ -{{ template "header.html" . }} -
-
-{{ .AboutMsg }}
-

- - -
{{ .i18n.Version }}:{{ .HonkVersion }} -
{{ .i18n.Memory }}:{{ printf "%.02f" .Sensors.Memory }}MB -
{{ .i18n.Uptime }}:{{ printf "%.02f" .Sensors.Uptime }}s -
{{ .i18n.Cputime }}:{{ printf "%.02f" .Sensors.CPU }}s -
-

-

-
diff --git a/views/i18n/account.html b/views/i18n/account.html deleted file mode 100644 index 2d5a3f3..0000000 --- a/views/i18n/account.html +++ /dev/null @@ -1,62 +0,0 @@ -{{ template "header.html" . }} -
-
-

{{ .i18n.Account }} - {{ .i18n.Logout }} -

{{ .i18n.Username }}: {{ .User.Name }} -

-
- -

{{ .i18n.Aboutme }}: -

- -

- - -

- - -

- - -

- - -

- - -

- - -

-

-
-
-
-
- -

{{ .i18n.ChangePwd }} -

- {{ .i18n.OldPwd }} -

- {{ .i18n.NewPwd }} -

-

-
-
diff --git a/views/i18n/chatter.html b/views/i18n/chatter.html deleted file mode 100644 index 0173224..0000000 --- a/views/i18n/chatter.html +++ /dev/null @@ -1,66 +0,0 @@ -{{ template "header.html" . }} -
-
-

-

-

{{ .i18n.NewChatter }}

- -


- -


- -

- -

- -
-{{ $chonkcsrf := .ChonkCSRF }} -{{ range .Chatter }} -
-

-chatter: {{ .Target }} -{{ $target := .Target }} -{{ range .Chonks }} -

-

-{{ .Date.Local.Format "15:04" }} {{ .Handle }}: -{{ .HTML }} -{{ range .Donks }} -{{ if .Local }} -{{ if eq .Media "text/plain" }} -

{{ .i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else if eq .Media "application/pdf" }} -

{{ .i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -

{{ .Desc }} -{{ end }} -{{ else }} -{{ if .XID }} -

{{ .i18n.ExtAttachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -{{ if eq .Media "video/mp4" }} -

-{{ else }} -

{{ .Desc }} -{{ end }} -{{ end }} -{{ end }} -{{ end }} -

-{{ end }} -
- - -


- -

- -

-
-{{ end }} -
diff --git a/views/i18n/combos.html b/views/i18n/combos.html deleted file mode 100644 index 9cd227d..0000000 --- a/views/i18n/combos.html +++ /dev/null @@ -1,13 +0,0 @@ -{{ template "header.html" . }} -
-
-

{{ .i18n.Combos }} -

-{{ range .Combos }} -
-
-

{{ . }} -

-
-{{ end }} -
diff --git a/views/i18n/funzone.html b/views/i18n/funzone.html deleted file mode 100644 index d5e69e3..0000000 --- a/views/i18n/funzone.html +++ /dev/null @@ -1,16 +0,0 @@ -{{ template "header.html" . }} -
-
-

{{ .i18n.FunZoneGreet }} -

    -{{ range .Emus }} -
  • :{{ . }}: -{{ end }} -
-
    -{{ range .Memes }} -
  • meme: {{ . }} -{{ end }} -
-
-
diff --git a/views/i18n/header.html b/views/i18n/header.html deleted file mode 100644 index 77995e7..0000000 --- a/views/i18n/header.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - -honk - -{{ if .LocalStyleParam }} - -{{ end }} - - - - - - - - -
-{{ if .UserInfo }} -
- menu {{ .UserInfo.Username }} - -
- - - - - -

-{{ else }} -{{ .i18n.Home }} -{{ .i18n.Tags }} -{{ .i18n.Events }} -{{ .i18n.About }} -{{ if .ShowRSS }} -rss -{{ end }} -{{ .i18n.Login }} -
- - -
- -
-{{ end }} -
diff --git a/views/i18n/hfcs.html b/views/i18n/hfcs.html deleted file mode 100644 index 75b6f4f..0000000 --- a/views/i18n/hfcs.html +++ /dev/null @@ -1,73 +0,0 @@ -{{ template "header.html" . }} -
-
-

-{{ .i18n.Hfcs }} -

- -
-

{{ .i18n.NewFilter }}

-


- -


- -


-

{{ .i18n.Matches }}

-


- -

-


- -

-


- -


-

action

-

- - - - -


- -


- -


-

{{ .i18n.Expiration }}

-


- -


-

-

-
-{{ $i18n := .i18n }} -{{ $csrf := .FilterCSRF }} -{{ range .Filters }} -
-

{{ $i18n.FilterName }}: {{ .Name }} -{{ with .Notes }}

{{ $i18n.Notes }}: {{ . }}{{ end }} -

Date: {{ .Date.Format "2006-01-02" }} -{{ with .Actor }}

{{ $i18n.Who }}: {{ . }}{{ end }} {{ with .IncludeAudience }} (inclusive) {{ end }} -{{ if .IsAnnounce }}

Announce: {{ .AnnounceOf }}{{ end }} -{{ with .Text }}

Text: {{ . }}{{ end }} -

{{ $i18n.Action }}: {{ range .Actions }} {{ . }} {{ end }} -{{ with .Rewrite }}

{{ $i18n.Rewrite }}: {{ . }}{{ end }} -{{ with .Replace }}

{{ $i18n.Replace }}: {{ . }}{{ end }} -{{ if not .Expiration.IsZero }}

{{ $i18n.Expiration }}: {{ .Expiration.Format "2006-01-02 03:04" }}{{ end }} -

- - - - -
-

-

-{{ end }} -
diff --git a/views/i18n/honk.html b/views/i18n/honk.html deleted file mode 100644 index 52f63a7..0000000 --- a/views/i18n/honk.html +++ /dev/null @@ -1,146 +0,0 @@ -
-{{ $bonkcsrf := .BonkCSRF }} -{{ $IsPreview := .IsPreview }} -{{ $maplink := .MapLink }} -{{ $omitimages := .OmitImages }} -{{ $i18n := .i18n }} -{{ $lang := .Lang }} -{{ with .Honk }} -
-{{ if $bonkcsrf }} - -{{ else }} - -{{ end }} - -{{ if $bonkcsrf }} {{ end }} -{{ if .Oonker }} -{{ if $bonkcsrf }} - -{{ else }} - -{{ end }} - -{{ if $bonkcsrf }} {{ end }} -{{ end }} -

-{{ if $bonkcsrf }} -{{ .Username }} -{{ else }} -{{ .Username }} -{{ end }} -{{ .What }} {{ .Date.Local.Format "02 Jan 2006 15:04 -0700" }} -{{ if .Oonker }} -
- -{{ if $bonkcsrf }} -{{ $i18n.Original }}: {{ .Oondle }} -{{ else }} -{{ $i18n.Original }}: {{ .Oondle }} -{{ end }} - -{{ else }} -{{ if .RID }} -
- -{{ $i18n.InReplyTo }}: {{ .RID }} - -{{ end }} -{{ end }} -
-{{ if $bonkcsrf }} - {{ $i18n.Convoy }}: {{ .Convoy }} -{{ else }} - {{ $i18n.Convoy }}: {{ .Convoy }} - -{{ end }} -

-

-

-{{ .HTPrecis }}

-

{{ .HTPrecis }} -

{{ .HTML }} -{{ with .Time }} -

{{ $i18n.Time }}: {{ .StartTime.Local.Format "03:04PM EDT Mon Jan 02"}} -{{ if .Duration }}
{{ $i18n.Duration }}: {{ .Duration }}{{ end }} -{{ end }} -{{ with .Place }} -

{{ $i18n.Location }}: {{ with .Url }}{{ end }}{{ .Name }}{{ if .Url }}{{ end }}{{ if or .Latitude .Longitude }} {{ .Latitude }} {{ .Longitude }}{{ end }} -{{ end }} -{{ range .Donks }} -{{ if .Local }} -{{ if eq .Media "text/plain" }} -

{{ $i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else if eq .Media "application/pdf" }} -

{{ $i18n.Attachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -{{ if $omitimages }} -

{{ $i18n.Image }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -

{{ .Desc }} -{{ end }} -{{ end }} -{{ else }} -{{ if .External }} -

{{ $i18n.ExtAttachment }}: {{ .Name }}{{ if not (eq .Desc .Name) }} {{ .Desc }}{{ end }} -{{ else }} -{{ if eq .Media "video/mp4" }} -

-{{ else }} -

{{ .Desc }} -{{ end }} -{{ end }} -{{ end }} -{{ end }} -

-{{ end }} -{{ if and $bonkcsrf (not $IsPreview) }} -

-

-{{ $i18n.Actions }} -
-

-{{ if .Honk.Public }} -{{ if .Honk.IsBonked }} - -{{ else }} - -{{ end }} -{{ else }} - -{{ end }} - - - -

- -
-

-{{ end }} -

diff --git a/views/i18n/honkers.html b/views/i18n/honkers.html deleted file mode 100644 index 5b9ecf4..0000000 --- a/views/i18n/honkers.html +++ /dev/null @@ -1,62 +0,0 @@ -{{ template "header.html" . }} -
-{{ $i18n := .i18n }} -
-

-

-

{{ $i18n.AddNewHonker }}

- -


- -


- -


- -

-


- -

-

-
-{{ $honkercsrf := .HonkerCSRF }} -
- -

-

-{{ range .Honkers }} -
-
-avatar -

{{ .Name }} -

-

-

-

url: {{ .XID }} -

{{ $i18n.Flavor }}: {{ .Flavor }} -

- - -

{{ $i18n.Name }}: -


- -

{{ $i18n.Combos }}: -

- - - - -

-
-

-

-{{ end }} -
diff --git a/views/i18n/honkform.html b/views/i18n/honkform.html deleted file mode 100644 index ce17fca..0000000 --- a/views/i18n/honkform.html +++ /dev/null @@ -1,49 +0,0 @@ -

- -

- - - -

{{ .i18n.MakeNoise }}

-

-

-{{ .i18n.MoreOptions }} -

- - -


- -{{ with .SavedPlace }} -

-

-


-


-

- -

-{{ else }} -

-

-{{ end }} -

-

-


- -


- -

-
-

- -

- - - -

diff --git a/views/i18n/honkfrags.html b/views/i18n/honkfrags.html deleted file mode 100644 index 5ccc2da..0000000 --- a/views/i18n/honkfrags.html +++ /dev/null @@ -1,11 +0,0 @@ -
{{ .TopHID }}
-{{ $BonkCSRF := .HonkCSRF }} -{{ $MapLink := .MapLink }} -{{ $Badonk := .User.Options.Reaction }} -{{ $OmitImages := .User.Options.OmitImages }} -

{{ .ServerMessage }}

-
-{{ range .Honks }} -{{ template "honk.html" map "Honk" . "MapLink" $MapLink "BonkCSRF" $BonkCSRF "Badonk" $Badonk "OmitImages" $OmitImages }} -{{ end }} -
diff --git a/views/i18n/honkpage.html b/views/i18n/honkpage.html deleted file mode 100644 index 0ae42ef..0000000 --- a/views/i18n/honkpage.html +++ /dev/null @@ -1,45 +0,0 @@ -{{ template "header.html" . }} -
-
-
-{{ if .Name }} -

{{ .Name }} rss -

{{ .WhatAbout }} -{{ end }} -

{{ .ServerMessage }} -

-{{ if .HonkCSRF }} -{{ template "honkform.html" . }} - - -{{ end }} -
-{{ if and .HonkCSRF (not .IsPreview) }} -
-

- -

-{{ if eq .ServerMessage .i18n.MoarHonks }} {{ end }} -{{ end }} -
-
-{{ $BonkCSRF := .HonkCSRF }} -{{ $IsPreview := .IsPreview }} -{{ $MapLink := .MapLink }} -{{ $Badonk := .User.Options.Reaction }} -{{ $i18n := .i18n }} -{{ $OmitImages := .User.Options.OmitImages }} -{{ range .Honks }} -{{ template "honk.html" map "Honk" . "MapLink" $MapLink "BonkCSRF" $BonkCSRF "IsPreview" $IsPreview "Badonk" $Badonk "OmitImages" $OmitImages "i18n" $i18n }} -{{ end }} -
-
-
diff --git a/views/i18n/honkpage.js b/views/i18n/honkpage.js deleted file mode 100644 index 351cde4..0000000 --- a/views/i18n/honkpage.js +++ /dev/null @@ -1,390 +0,0 @@ -function getCookie(name){ - if(document.cookie.length == 0) - return null; - - var regSepCookie = new RegExp('(; )', 'g'); - var cookies = document.cookie.split(regSepCookie); - - for(var i = 0; i < cookies.length; i++){ - var regInfo = new RegExp('=', 'g'); - var infos = cookies[i].split(regInfo); - if(infos[0] == name){ - return unescape(infos[1]); - } - } - return null; -} - - -function encode(hash) { - var s = [] - for (var key in hash) { - var val = hash[key] - s.push(escape(key) + "=" + escape(val)) - } - return s.join("&") -} -function post(url, data) { - var x = new XMLHttpRequest() - x.open("POST", url) - x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") - x.send(data) -} -function get(url, whendone) { - var x = new XMLHttpRequest() - x.open("GET", url) - x.responseType = "document" - x.onload = function() { whendone(x) } - x.send() -} -function bonk(el, xid) { - el.innerHTML = i18n_bonked - el.disabled = true - post("/bonk", encode({"js": "2", "CSRF": csrftoken, "xid": xid})) - return false -} -function unbonk(el, xid) { - el.innerHTML = i18n_unbonked - el.disabled = true - post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "unbonk", "what": xid})) -} -function muteit(el, convoy) { - el.innerHTML = i18n_muted - el.disabled = true - post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "zonvoy", "what": convoy})) - var els = document.querySelectorAll('article.honk') - for (var i = 0; i < els.length; i++) { - var e = els[i] - if (e.getAttribute("data-convoy") == convoy) { - e.remove() - } - } -} -function zonkit(el, xid) { - el.innerHTML = i18n_zonked - el.disabled = true - post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "zonk", "what": xid})) - var p = el - while (p && p.tagName != "ARTICLE") { - p = p.parentElement - } - if (p) { - p.remove() - } -} -function flogit(el, how, xid) { - var s = how - if (honklang == 'en') { - if (s[s.length-1] != "e") { s += "e" } - s += "d" - if (s == "untaged") s = i18n_untagged - if (s == "reacted") s = i18n_badonked - } else { - if (s == "deack") s = i18n_deack - if (s == "ack") s = i18n_ack - if (s == "unsave") s = i18n_unsave - if (s == "save") s = i18n_save - if (s == "untag") s = i18n_untagged - if (s == "react") s = i18n_badonked - } - - el.innerHTML = s - el.disabled = true - post("/zonkit", encode({"CSRF": csrftoken, "wherefore": how, "what": xid})) -} - -var lehonkform = document.getElementById("honkform") -var lehonkbutton = document.getElementById("honkingtime") - -function oldestnewest(btn) { - var els = document.getElementsByClassName("glow") - if (els.length) { - els[els.length-1].scrollIntoView() - } -} -function removeglow() { - var els = document.getElementsByClassName("glow") - while (els.length) { - els[0].classList.remove("glow") - } -} - -function fillinhonks(xhr, glowit) { - var doc = xhr.responseXML - var stash = curpagestate.name + ":" + curpagestate.arg - tophid[stash] = doc.children[0].children[1].children[0].innerText - var srvmsg = doc.children[0].children[1].children[1] - var honks = doc.children[0].children[1].children[2].children - - var srvel = document.getElementById("srvmsg") - while (srvel.children[0]) { - srvel.children[0].remove() - } - srvel.prepend(srvmsg) - - var frontload = true - if (curpagestate.name == "convoy") { - frontload = false - } - - var honksonpage = document.getElementById("honksonpage") - var holder = honksonpage.children[0] - var lenhonks = honks.length - for (var i = honks.length; i > 0; i--) { - var h = honks[i-1] - if (glowit) - h.classList.add("glow") - if (frontload) { - holder.prepend(h) - } else { - holder.append(h) - } - - } - relinklinks() - return lenhonks -} -function hydrargs() { - var name = curpagestate.name - var arg = curpagestate.arg - var args = { "page" : name } - if (name == "convoy") { - args["c"] = arg - } else if (name == "combo") { - args["c"] = arg - } else if (name == "honker") { - args["xid"] = arg - } - return args -} -function refreshupdate(msg) { - var el = document.querySelector("#refreshbox p span") - if (el) { - el.innerHTML = msg - } -} -function refreshhonks(btn) { - removeglow() - btn.innerHTML = i18n_refreshing - btn.disabled = true - var args = hydrargs() - var stash = curpagestate.name + ":" + curpagestate.arg - args["tophid"] = tophid[stash] - get("/hydra?" + encode(args), function(xhr) { - var lenhonks = fillinhonks(xhr, true) - btn.innerHTML = i18n_refreshing - btn.disabled = false - refreshupdate(" " + lenhonks + " new") - }) -} -function statechanger(evt) { - var data = evt.state - if (!data) { - return - } - switchtopage(data.name, data.arg) -} -function switchtopage(name, arg) { - var stash = curpagestate.name + ":" + curpagestate.arg - var honksonpage = document.getElementById("honksonpage") - var holder = honksonpage.children[0] - holder.remove() - var srvel = document.getElementById("srvmsg") - var msg = srvel.children[0] - if (msg) { - msg.remove() - servermsgs[stash] = msg - } - showelement("refreshbox") - - honksforpage[stash] = holder - - curpagestate.name = name - curpagestate.arg = arg - // get the holder for the target page - var stash = name + ":" + arg - holder = honksforpage[stash] - if (holder) { - honksonpage.prepend(holder) - msg = servermsgs[stash] - if (msg) { - srvel.prepend(msg) - } - } else { - // or create one and fill it - honksonpage.prepend(document.createElement("div")) - var args = hydrargs() - get("/hydra?" + encode(args), function(xhr) { fillinhonks(xhr, false) }) - } - refreshupdate("") -} -function newpagestate(name, arg) { - return { "name": name, "arg": arg } -} -function pageswitcher(name, arg) { - return function(evt) { - var topmenu = document.getElementById("topmenu") - topmenu.open = false - if (name == curpagestate.name && arg == curpagestate.arg) { - return false - } - switchtopage(name, arg) - var url = evt.srcElement.href - if (!url) { - url = evt.srcElement.parentElement.href - } - history.pushState(newpagestate(name, arg), "some title", url) - window.scrollTo(0, 0) - return false - } -} -function relinklinks() { - var els = document.getElementsByClassName("convoylink") - while (els.length) { - els[0].onclick = pageswitcher("convoy", els[0].text) - els[0].classList.remove("convoylink") - } - els = document.getElementsByClassName("combolink") - while (els.length) { - els[0].onclick = pageswitcher("combo", els[0].text) - els[0].classList.remove("combolink") - } - els = document.getElementsByClassName("honkerlink") - while (els.length) { - var el = els[0] - var xid = el.getAttribute("data-xid") - el.onclick = pageswitcher("honker", xid) - el.classList.remove("honkerlink") - } -} -(function() { - var el = document.getElementById("homelink") - el.onclick = pageswitcher("home", "") - el = document.getElementById("atmelink") - el.onclick = pageswitcher("atme", "") - el = document.getElementById("firstlink") - el.onclick = pageswitcher("first", "") - el = document.getElementById("savedlink") - el.onclick = pageswitcher("saved", "") - el = document.getElementById("longagolink") - el.onclick = pageswitcher("longago", "") - relinklinks() - window.onpopstate = statechanger - history.replaceState(curpagestate, "some title", "") -})(); -(function() { - hideelement("donkdescriptor") -})(); -function showhonkform(elem, rid, hname) { - var form = lehonkform - form.style = "display: block" - if (elem) { - form.remove() - elem.parentElement.parentElement.parentElement.insertAdjacentElement('beforebegin', form) - } else { - hideelement(lehonkbutton) - elem = document.getElementById("honkformhost") - elem.insertAdjacentElement('afterend', form) - } - var ridinput = document.getElementById("ridinput") - if (rid) { - ridinput.value = rid - honknoise.value = hname + " " - } else { - ridinput.value = "" - honknoise.value = "" - } - var updateinput = document.getElementById("updatexidinput") - updateinput.value = "" - document.getElementById("honknoise").focus() - return false -} -function cancelhonking() { - hideelement(lehonkform) - showelement(lehonkbutton) -} -function showelement(el) { - if (typeof(el) == "string") - el = document.getElementById(el) - if (!el) return - el.style.display = "block" -} -function hideelement(el) { - if (typeof(el) == "string") - el = document.getElementById(el) - if (!el) return - el.style.display = "none" -} -function updatedonker() { - var el = document.getElementById("donker") - el.children[1].textContent = el.children[0].value.slice(-20) - var el = document.getElementById("donkdescriptor") - el.style.display = "" - var el = document.getElementById("saveddonkxid") - el.value = "" -} -var checkinprec = 100.0 -var gpsoptions = { - enableHighAccuracy: false, - timeout: 1000, - maximumAge: 0 -}; -function fillcheckin() { - if (navigator.geolocation) { - navigator.geolocation.getCurrentPosition(function(pos) { - showelement("placedescriptor") - var el = document.getElementById("placelatinput") - el.value = Math.round(pos.coords.latitude * checkinprec) / checkinprec - el = document.getElementById("placelonginput") - el.value = Math.round(pos.coords.longitude * checkinprec) / checkinprec - checkinprec = 10000.0 - gpsoptions.enableHighAccuracy = true - gpsoptions.timeout = 2000 - }, function(err) { - showelement("placedescriptor") - el = document.getElementById("placenameinput") - el.value = err.message - }, gpsoptions) - } -} - -window.getCookie = function(name) { - var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); - if (match) return match[2]; -} - -var honklang = getCookie('lang') -switch(honklang) { - case "fr": - var i18n_deack = "marqué non lu" - var i18n_ack = "marqué lu" - var i18n_unsave = "oublié" - var i18n_save = "sauvegardé" - - var i18n_bonked = "reposté" - var i18n_unbonked = "départagé" - var i18n_muted = "mis en sourdine" - var i18n_badonked = "réagi" - var i18n_zonked = "supprimé" - var i18n_untagged = "débalisé" - var i18n_refreshing = "rafraîchissement" - break; - - default: - var i18n_deack = "deacked" - var i18n_ack = "ack" - var i18n_unsave = "unsave" - var i18n_save = "save" - - var i18n_bonked = "bonked" - var i18n_unbonked = "unbonked" - var i18n_muted = "muted" - var i18n_badonked = "badonked" - var i18n_untagged = "untagged" - var i18n_zonked = "zonked" - var i18n_refreshing = "refreshing" - -} - -//console.log("i18n_bonked: "+ i18n_bonked + "\n"+ "cookie: "+ getCookie("lang")) - diff --git a/views/i18n/local.css b/views/i18n/local.css deleted file mode 100644 index 0e6f7e1..0000000 --- a/views/i18n/local.css +++ /dev/null @@ -1,58 +0,0 @@ -html{ - --bg-page: beige; - --fg: #222; - --fg-subtle: teal; - --bg-dark:lightblue; -} - -#honksonpage td { - border:1px solid #222; - padding: 0.2em; -} - -#altnavbar a { - text-decoration:none -} -#altnavbar{ - margin-left:17%; - position:fixed; - background:var(--bg-page); - opacity:0.7; - top:0; - padding: 0.5em 0.5em 0.5em 0.5em; -} - -#altnavbar input { - height:0.3em; -} - - -#setlang{ - vertical-align:middle; - display:inline; - margin-left:2em; -} - -@media screen and (max-width: 740px) { - #altnavbar{ - font-size:0.9em; - margin-left:30%; - } - - #altnavbar input { - height:0.3em; - width:4em - } - - header > details { - padding: 0.5em 0.5em 0.5em 0.5em; - } - - #setlang { - display:block; - } -} - -@media print{ - #altnavbar,#setlang{display:none;} -} diff --git a/views/i18n/login.html b/views/i18n/login.html deleted file mode 100644 index e5ea195..0000000 --- a/views/i18n/login.html +++ /dev/null @@ -1,12 +0,0 @@ -{{ template "header.html" . }} -
-
-{{ .LoginMsg }} -
-

- - {{ .i18n.Username }} -

- {{ .i18n.Pwd }} -

-

-
-
diff --git a/views/i18n/msg.html b/views/i18n/msg.html deleted file mode 100644 index b729caa..0000000 --- a/views/i18n/msg.html +++ /dev/null @@ -1,7 +0,0 @@ -{{ template "header.html" . }} -
-
-

-{{ .ServerMessage }} -

-
diff --git a/views/i18n/onts.html b/views/i18n/onts.html deleted file mode 100644 index 4a208c8..0000000 --- a/views/i18n/onts.html +++ /dev/null @@ -1,16 +0,0 @@ -{{ template "header.html" . }} -
-
-

{{ .i18n.Onts }} -{{ $letter := 0 }} -

    -{{ range .Onts }} -{{ if not (eq $letter (index .Name 0)) }} -{{ $letter = (index .Name 0) }} -
  • -{{ end }} -#{{ .Name }} ({{ .Count }}) -{{ end }} -

-
-
diff --git a/views/i18n/pleroma.css b/views/i18n/pleroma.css deleted file mode 100644 index b25439a..0000000 --- a/views/i18n/pleroma.css +++ /dev/null @@ -1,7 +0,0 @@ -html { - --bg-page: #1b2735; - --bg-dark: #121a24; - --fg: #b9b9ba; - --hl: #d8a070; - --fg-subtle: rgba(185, 185, 186, 0.5); -} diff --git a/views/i18n/style.css b/views/i18n/style.css deleted file mode 100644 index b1da23d..0000000 --- a/views/i18n/style.css +++ /dev/null @@ -1,334 +0,0 @@ -html { - --bg-page: #306; - --bg-dark: #002; - --fg: #dcf; - --hl: #dcf; - --fg-subtle: #a9c; - --fg-limited: #a79; -} - -body { - background: var(--bg-page); - color: var(--fg); - font-size: 1em; - word-wrap: break-word; - font-family: sans-serif, "Noto Color Emoji"; - line-height: 1.2; - overscroll-behavior-y: contain; -} -pre, code { - white-space: pre-wrap; -} -blockquote { - margin-left: 0em; - padding-left: 0.5em; - border-left: 1px solid var(--fg-subtle); -} -blockquote cite { - margin-left: 2em; -} -table { - display: block; - max-width: 100%; - overflow-x: auto; -} -a { - color: var(--fg); -} -form, input, textarea { - font-family: monospace, "Noto Color Emoji"; -} -p { - margin-top: 1em; - margin-bottom: 1em; -} -input { - background: var(--bg-page); - color: var(--fg); - font-size: 1.0em; - line-height: 1.2em; - padding: 0.4em; -} -#honkform input { - font-size: 0.8em; -} -body > header { - margin: 1em auto; - font-size: 1.5em; -} -body > header span { - margin-left: 2em; -} -body > header p { - padding: 1em; -} -header > details { - background: var(--bg-page); - padding: 1em 1em 1em 1em; - position: fixed; - top: 0; - left: 0; - display: inline; - max-height: calc(100% - 1em); - overflow: auto; - opacity: 0.7; - overscroll-behavior: contain; -} -header > details[open] { - padding: 1em 1em 0em 1em; - background: var(--bg-dark); - border: 1px solid var(--hl); - margin-bottom: 1em; - opacity: 1.0; -} -header > details summary span { - display: none; -} -header > details[open] summary span { - display: inline; -} -header > details li { - margin: 1em 0em 1em 0em; -} -details summary { - display: inline; -} -@supports (-moz-appearance:none) { - details summary { - display: list-item; - } -} -main { - max-width: 1200px; - margin: auto; - font-size: 1.5em; -} -hr { - border-color: var(--hl); -} -.info { - background: var(--bg-dark); - border: 1px solid var(--hl); - margin-bottom: 1em; - padding: 0em 1em 0em 1em; -} -.info div { - margin-top: 1em; - margin-bottom: 1em; -} -label { - font-size: 0.8em; -} -label.button, button, select { - font-size: 16px; - font-family: monospace; - color: var(--fg); - background: var(--bg-page); - border: 1px solid var(--hl); - padding: 0.5em; - white-space: nowrap; -} -.buttonarray { - margin-top: -2.0em; -} -.buttonarray button, .buttonarray > span { - margin-top: 2.0em; - display: inline-block; -} -button a { - text-decoration: none; -} -form { - margin-top: 1em; -} -textarea { - padding: 0.5em; - font-size: 1em; - background: var(--bg-page); - color: var(--fg); - width: 600px; - height: 4em; - margin-bottom: 0.5em; - box-sizing: border-box; - max-width: 100%; -} -textarea#honknoise { - height: 10em; -} -input[type="checkbox"] { - position: fixed; - top: -9999px; -} -input[type="checkbox"] + span:after { - content: "no"; -} -input[type="checkbox"]:checked + span:after { - content: "yes"; -} -input[type="checkbox"]:focus + span:after { - outline: 1px solid var(--fg); -} -input[type=file] { - display: none; -} - -.glow { - /* box-shadow: 0px 0px 16px var(--hl);*/ - box-shadow: 0px 0px 16px black; -} - -.honk { - margin: auto; - background: var(--bg-dark); - border: 1px solid var(--hl); - border-radius: 1em; - margin-bottom: 1em; - padding-left: 1em; - padding-right: 1em; - padding-top: 0; - overflow: hidden; -} - -.chat { - border-bottom: 0.5px solid var(--fg-subtle); - padding-left: 1em; -} -.chat p { - margin-top: 0.2em; - margin-bottom: 0.2em; -} -.chattarget { - border-bottom: 1px solid var(--fg-subtle); -} -.chatstamp { - margin-left: -1em; -} - -.honk #honkform { - padding: 1em; - border: 1px solid var(--fg); - } -.honk a { - color: var(--fg); - } -.honk header { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-size: 0.8em; - line-height: 1.1; - margin-top: 1em; - height: 64px; - } - -.honk header .clip a { - color: var(--fg-subtle); - } -.honk header img { - float: left; - margin-right: 1em; - width: 64px; - height: 64px; - } -.honk header p { - margin-top: 0px; - } -.honk .actions button { - margin-left: 4em; - margin-top: 2em; - } -.honk .noise { - line-height: 1.4; - } - -.honk .noise code .kw { font-weight: bold; } -.honk .noise code .bi { font-weight: bold; } -.honk .noise code .st { color: var(--fg-subtle); } -.honk .noise code .nm { color: #ba88ff; } -.honk .noise code .op { color: #ba88ff; } -.honk .noise code .tp { font-weight: bold; } -.honk .noise code .cm { color: var(--fg-subtle); font-style: italic; } -.honk .noise code .al { color: #aaffbb; } -.honk .noise code .dl { color: #ffaabb; } - -.honk details.actions summary { - color: var(--fg-subtle); -} -.subtle .noise { - color: var(--fg-subtle); - font-size: 0.8em; -} -.subtle .noise a { - color: var(--fg-subtle); -} -.limited { - border: 1px solid var(--fg-limited); - color: var(--fg-limited); -} -.limited .glow { - box-shadow: 0px 0px 16px var(--fg-limited); -} -.limited .noise { - color: var(--fg-limited); - } -.limited .noise a { - color: var(--fg-limited); - } -.limited details.actions summary { - color: var(--fg-limited); - } -details.noise[open] summary { - display: none; -} -h1, h2 { - font-size: 1.2em; -} -h3, h4 { - font-size: 1.1em; -} - -img:not(.emu) { - background: var(--bg-page); -} -img, video { - max-width: 100%; - max-height: 600px; -} -.noise img:not(.emu) { - display: block; -} -img.emu { - width: 2em; - height: 2em; - vertical-align: middle; - margin: -2px; - object-fit: contain; -} -@media screen and (max-width: 740px) { - body { - font-size: 12px; - } - .honk header { - height: 52px; - } - .honk header img { - width: 48px; - height: 48px; - } - details summary { - outline: none; - } -} -@media print { - #topmenu, #topspacer, #infobox, #refreshbox, .actions { - display: none; - } - - html { - --bg-page: white; - --bg-dark: white; - --fg: black; - --fg-subtle: black; - --fg-limited: #a79; - } -} diff --git a/views/i18n/xzone.html b/views/i18n/xzone.html deleted file mode 100644 index e2ab0d7..0000000 --- a/views/i18n/xzone.html +++ /dev/null @@ -1,17 +0,0 @@ -{{ template "header.html" . }} -
-
-
- -

{{ .i18n.Import }} -

- xid -

-

-
-{{ $i18n := .i18n }} -{{ range .Honkers }} -
-

{{ $i18n.Honks }} {{ $i18n.HonksFrom }} {{ .Handle }} -

-{{ end }} -
diff --git a/views/local.css b/views/local.css deleted file mode 100644 index 680d300..0000000 --- a/views/local.css +++ /dev/null @@ -1,8 +0,0 @@ -#altnavbar{ - margin-left:17%; - position:fixed; - background:var(--bg-page); - opacity:0.7; - top:0; - padding:5px -} -- cgit v1.2.3-54-g00ecf