From 236839a914b139a5997165333eda48a1c8a42128 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 7 Nov 2026 14:36:36 +0000 Subject: [PATCH] site/brand: the banner says StarshipOS [skip ci] Captain Bob, 2026-11-07: "The banner XWiki should not say that." Both wikis now have a colour theme of their own, FlamingoThemes.StarshipOS (the stock Iceberg, copied, with the starshipOS wordmark as its logo; Iceberg untouched), and the browser tab's title ends "- StarshipOS". Installed on both; checked as a guest on each (logo and title), and the .org's top bar seen logged in. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- site/brand/README.md | 14 +++++++++ site/brand/install.sh | 57 ++++++++++++++++++++++++++++++++++ site/brand/starshipos-com.png | Bin 0 -> 9093 bytes site/brand/starshipos-org.png | Bin 0 -> 11131 bytes 4 files changed, 71 insertions(+) create mode 100644 site/brand/README.md create mode 100755 site/brand/install.sh create mode 100644 site/brand/starshipos-com.png create mode 100644 site/brand/starshipos-org.png diff --git a/site/brand/README.md b/site/brand/README.md new file mode 100644 index 00000000..2e81c18c --- /dev/null +++ b/site/brand/README.md @@ -0,0 +1,14 @@ +# site/brand -- the wikis' banner + +The top bar of both XWikis shows the starshipOS wordmark, not XWiki's logo, and the browser tab's +title ends "- StarshipOS" (Captain Bob, 2026-11-07). `starshipos-com.png` and `starshipos-org.png` +are the wordmark (Exo 2, white with an orange "OS", transparent), rendered at 2x. + +``` +XWIKI_USER=rajames XWIKI_PASSWORD=... site/brand/install.sh https://starshipos-f18.com starshipos-com.png +XWIKI_USER=rajames XWIKI_PASSWORD=... site/brand/install.sh https://starshipos-f18.org starshipos-org.png +``` + +The logo belongs to the colour theme, so this makes one of our own, `FlamingoThemes.StarshipOS` (a +copy of the stock Iceberg with the wordmark), and makes it the wiki's. To undo: set the wiki's +colour theme back to Iceberg (Administration, Look & Feel, Themes). diff --git a/site/brand/install.sh b/site/brand/install.sh new file mode 100755 index 00000000..d0eaa39f --- /dev/null +++ b/site/brand/install.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# install.sh -- the wiki's banner says StarshipOS, not XWiki (Captain Bob, 2026-11-07: "The banner +# XWiki should not say that"). +# +# site/brand/install.sh https://starshipos-f18.com starshipos-com.png +# site/brand/install.sh https://starshipos-f18.org starshipos-org.png +# +# In XWiki 17 the top bar's logo is the colour theme's. This makes a colour theme of our own, +# FlamingoThemes.StarshipOS -- a copy of the stock Iceberg with our wordmark as its logo -- and +# makes it the wiki's; the stock theme is not touched (set colorTheme back to +# FlamingoThemes.Iceberg to undo). It also makes the browser tab's title " - StarshipOS". +# Run again after changing the wordmark: the logo is replaced. XWIKI_USER and XWIKI_PASSWORD as for +# site/*/install.sh. Everything goes as XML: XWiki refuses form and plain-text writes without its +# form token. +set -euo pipefail +cd "$(dirname "$0")" +base=${1:?usage: install.sh } +logo=${2:?usage: install.sh } +rest="$base/rest/wikis/xwiki/spaces" +auth=(-u "${XWIKI_USER:?set XWIKI_USER}:${XWIKI_PASSWORD:?set XWIKI_PASSWORD}") +theme="$rest/FlamingoThemes/pages/StarshipOS" +x() { curl -fsS -m 60 "${auth[@]}" "$@"; } +prop() { # prop : set one property + x -o /dev/null -w " $2: %{http_code}\n" -X PUT -H 'Content-Type: application/xml' \ + --data-binary "$(python3 -c ' +import sys +from xml.sax.saxutils import escape +print("%s" % (escape(sys.argv[1]), escape(sys.argv[2])))' "$2" "$3")" \ + "$1/properties/$2" +} + +echo "=== $base: the colour theme FlamingoThemes.StarshipOS" +x -o /dev/null -w " page: %{http_code}\n" -X PUT -H 'Content-Type: application/xml' --data-binary \ + 'StarshipOSxwiki/2.1{{include reference="FlamingoThemesCode.ThemeSheet"/}}' \ + "$theme" +x -o /dev/null -w " logo $logo: %{http_code}\n" -X PUT -H 'Content-Type: image/png' --data-binary "@$logo" \ + "$theme/attachments/$logo" +have=$(x -H 'Accept: application/json' "$theme/objects/FlamingoThemesCode.ThemeClass" | + python3 -c 'import json,sys; print(len(json.load(sys.stdin).get("objectSummaries") or []))') +if [ "$have" = 0 ]; then + # Iceberg's theme object, every property as it is, posted to our page + x -H 'Accept: application/xml' "$rest/FlamingoThemes/pages/Iceberg/objects/FlamingoThemesCode.ThemeClass/0" | + x -o /dev/null -w " theme object, from Iceberg: %{http_code}\n" -X POST -H 'Content-Type: application/xml' \ + --data-binary @- "$theme/objects" +fi +prop "$theme/objects/FlamingoThemesCode.ThemeClass/0" logo "$logo" +prop "$theme/objects/FlamingoThemesCode.ThemeClass/0" logo-description "StarshipOS" + +echo "=== the wiki's preferences" +prefs="$rest/XWiki/pages/XWikiPreferences/objects/XWiki.XWikiPreferences/0" +prop "$prefs" colorTheme "FlamingoThemes.StarshipOS" +prop "$prefs" title "\$tdoc.getRenderedTitle('plain/1.0') - StarshipOS" + +echo "=== check, as a guest" +page=$(curl -sS -m 60 "$base/bin/login/XWiki/XWikiLogin") # a page that shows the chrome to a guest +case "$page" in *"FlamingoThemes/StarshipOS/$logo"*) echo " the banner's logo: ours";; *) echo " the banner's logo: NOT ours" >&2; exit 1;; esac +case "$page" in *"- StarshipOS"*) echo " the tab's title: ends - StarshipOS";; *) echo " the tab's title: NOT ours" >&2; exit 1;; esac diff --git a/site/brand/starshipos-com.png b/site/brand/starshipos-com.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c32a1e3e7d3466412783ba7e8e4e61d2d4a28c GIT binary patch literal 9093 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 R!s`fvnzE)+je>dD{{e^&L*M`a literal 0 HcmV?d00001 diff --git a/site/brand/starshipos-org.png b/site/brand/starshipos-org.png new file mode 100644 index 0000000000000000000000000000000000000000..2ebd208914d435ed0454a65b4f8f67617aaf3f99 GIT binary patch literal 11131 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 C)J>lN literal 0 HcmV?d00001