diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index bc561bf9..00000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "theme/assets/brand"] - path = theme/assets/brand - url = https://github.com/privacyguides/brand.git -[submodule "modules/mkdocs-material"] - path = modules/mkdocs-material - url = https://github.com/privacyguides/mkdocs-material-insiders.git diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ce086535..00000000 --- a/Dockerfile +++ /dev/null @@ -1,84 +0,0 @@ -FROM python:3.12-slim-bookworm AS base - -LABEL org.opencontainers.image.source="https://github.com/privacyguides/privacyguides.org" - -# Setup environment -ENV LANG=C.UTF-8 -ENV LC_ALL=C.UTF-8 -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONFAULTHANDLER=1 - -#################################################### -# Stage: python-deps -# Install pipenv and compilation dependencies -#################################################### -FROM base AS python-deps - -# Install pipenv -RUN pip install --no-cache-dir pipenv - -# Install build tools and libraries needed to compile any Python packages -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - gcc \ - libffi-dev \ - build-essential \ - && rm -rf /var/lib/apt/lists/* - -# Copy Pipfile, Pipfile.lock, and any local modules needed for dependency resolution -COPY modules/mkdocs-material ./modules/mkdocs-material -COPY Pipfile . -COPY Pipfile.lock . - -# Install all Python dependencies into a project‐local virtual environment at /.venv -RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy - -#################################################### -# Stage: nodejs-deps -# Install nodejs/npm and compilation dependencies -#################################################### -FROM node:24-bookworm-slim AS nodejs-deps - -RUN npm i -g all-contributors-cli -RUN npm install -g pkg - -RUN cd /usr/local/lib/node_modules/all-contributors-cli && \ - pkg dist/cli.js -t node18-linux -o /usr/local/bin/all-contributors-cli - -#################################################### -# Stage: runtime -# Install runtime dependencies and copy runtime artifacts -#################################################### -FROM base AS runtime - -# Install runtime packages (GTK/Cairo, image processing libraries, Git, etc.) -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - libcairo2-dev \ - libfreetype6-dev \ - git \ - libjpeg-dev \ - libpng-dev \ - openssh-client \ - pngquant \ - tini \ - zlib1g-dev \ - libffi-dev \ - bash \ - caddy \ - && rm -rf /var/lib/apt/lists/* - -# Copy virtual environment and local mkdocs-material module from python-deps stage -COPY --from=python-deps /.venv /.venv -COPY --from=python-deps /modules/mkdocs-material /modules/mkdocs-material - -# Copy all-contributors-cli from nodejs-deps stage -COPY --from=nodejs-deps /usr/local/bin/all-contributors-cli /usr/local/bin/all-contributors-cli - -# Ensure the virtual environment’s bin directory is first in PATH -ENV PATH="/.venv/bin:$PATH" - -HEALTHCHECK NONE - -# Entry point script and default cmd for running mkdocs -ENTRYPOINT ["/bin/bash"] diff --git a/theme/assets/files/meta/browserconfig.xml b/assets/files/meta/browserconfig.xml similarity index 100% rename from theme/assets/files/meta/browserconfig.xml rename to assets/files/meta/browserconfig.xml diff --git a/theme/assets/files/meta/site.webmanifest b/assets/files/meta/site.webmanifest similarity index 100% rename from theme/assets/files/meta/site.webmanifest rename to assets/files/meta/site.webmanifest diff --git a/theme/icons/custom/green-flag.svg b/assets/green-flag.svg similarity index 100% rename from theme/icons/custom/green-flag.svg rename to assets/green-flag.svg diff --git a/theme/assets/javascripts/feedback.js b/assets/javascripts/feedback.js similarity index 100% rename from theme/assets/javascripts/feedback.js rename to assets/javascripts/feedback.js diff --git a/theme/assets/javascripts/randomize-element.js b/assets/javascripts/randomize-element.js similarity index 100% rename from theme/assets/javascripts/randomize-element.js rename to assets/javascripts/randomize-element.js diff --git a/theme/assets/stylesheets/extra.css b/assets/stylesheets/extra.css similarity index 100% rename from theme/assets/stylesheets/extra.css rename to assets/stylesheets/extra.css diff --git a/theme/assets/stylesheets/home.css b/assets/stylesheets/home.css similarity index 100% rename from theme/assets/stylesheets/home.css rename to assets/stylesheets/home.css diff --git a/theme/assets/stylesheets/lang-he.css b/assets/stylesheets/lang-he.css similarity index 100% rename from theme/assets/stylesheets/lang-he.css rename to assets/stylesheets/lang-he.css diff --git a/theme/assets/stylesheets/lang-ru.css b/assets/stylesheets/lang-ru.css similarity index 100% rename from theme/assets/stylesheets/lang-ru.css rename to assets/stylesheets/lang-ru.css diff --git a/theme/assets/stylesheets/lang-zh-Hant.css b/assets/stylesheets/lang-zh-Hant.css similarity index 100% rename from theme/assets/stylesheets/lang-zh-Hant.css rename to assets/stylesheets/lang-zh-Hant.css diff --git a/theme/assets/stylesheets/lang-zh-TW.css b/assets/stylesheets/lang-zh-TW.css similarity index 100% rename from theme/assets/stylesheets/lang-zh-TW.css rename to assets/stylesheets/lang-zh-TW.css diff --git a/.well-known/funding-manifest-urls b/static/.well-known/funding-manifest-urls similarity index 100% rename from .well-known/funding-manifest-urls rename to static/.well-known/funding-manifest-urls diff --git a/theme/assets/brand b/theme/assets/brand deleted file mode 160000 index e567eb3f..00000000 --- a/theme/assets/brand +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e567eb3f0e6cb54242a809661d78d884caa05b72 diff --git a/theme/blog-post.html b/theme/blog-post.html deleted file mode 100644 index 71dfde67..00000000 --- a/theme/blog-post.html +++ /dev/null @@ -1,284 +0,0 @@ - - -{% extends "main.html" %} - -{% import "partials/nav-item.html" as item with context %} - - -{% block container %} -
- - - - {% if config.theme.language == "en" %} - - {% endif %} - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - - {% if "toc.integrate" in features %} - {% include "partials/toc.html" %} - {% endif %} -
-
-
- - -
- {% set postyear = page.config.date.created.strftime('%s') | int %} - {% set currentyear = build_date_utc.strftime('%s') | int %} - {% set difference = (currentyear / 2628000) - (postyear / 2628000) %} - {% if difference > 18 %} - {% set yearsdifference = ((difference - 1) / 12) | int %} -
-
-

- This article is more than {{ yearsdifference }} - {% if yearsdifference == 1 %} - year - {% else %} - years - {% endif %} - old -

-
-
- {% endif %} - - {% block content %} - {% include "partials/content.html" %} - {% endblock %} -
-
-

- - - Join our forum - - to comment on this article.

-

Thank you for reading, and please consider sharing this post with your friends. - Privacy Guides is an independent, nonprofit media outlet. We don't have ads or sponsors, so if you liked this work your donation would be greatly appreciated. - Have a question, comment, or tip for us? You can securely contact us at @privacyguides.01 on Signal.

-
-
-
-{% endblock %} diff --git a/theme/home.html b/theme/home.html deleted file mode 100644 index b42e782a..00000000 --- a/theme/home.html +++ /dev/null @@ -1,120 +0,0 @@ - -{% extends "main.html" %} -{% set homepage = config.extra.privacy_guides.homepage %} -{% block extrahead %} - - {% for feed in homepage.rss %} - - {% endfor %} - {{ super() }} -{% endblock %} -{% block tabs %} - {{ super() }} - -
-
-
-
-

{{ homepage.hero.header }}

-

{{ homepage.hero.subheader }}

- {% for button in homepage.hero.buttons %} - - {{ button.name }} - - {% endfor %} -
-
-
-
-{% endblock %} -{% block content %} - {% if config.theme.language == "en" %} -

Top discussions this week

-
- - -
- - {% endif %} - {{ page.content }} -
-
- {% for cta in homepage.cta %} -

{{ cta.title }}

- {% for icon in cta.links %} - - {% include ".icons/" ~ icon.icon ~ ".svg" %} - - {% endfor %} -

{{ cta.description }}

- {% endfor %} -
- {% if config.theme.language == "en" %} -
-

Latest discussions

-
- -
- - -
-
- {% endif %} -{% endblock %} diff --git a/theme/layouts/blog.yml b/theme/layouts/blog.yml deleted file mode 100644 index ec7c5982..00000000 --- a/theme/layouts/blog.yml +++ /dev/null @@ -1,182 +0,0 @@ -definitions: - - &site_name >- - {{ config.site_name }} - - - &page_title >- - {{ page.meta.get("title", page.title) }} - - - &page_description >- - {{ page.meta.get("description", config.site_description) or "" }} - - - &page_logo >- - {% if page.meta.preview and page.meta.preview.logo %} - {{- page.meta.preview.logo -}} - {% endif %} - - - &page_icon >- - {%- if page.meta.preview and page.meta.preview.icon -%} - {{- page.meta.preview.icon -}} - {%- elif page.meta.preview and page.meta.preview.logo -%} - {%- else -%} - material/book-open-page-variant - {%- endif -%} - - - &page_color >- - {%- if page.meta.preview and page.meta.preview.color -%} - {{- page.meta.preview.color -}} - {%- else -%} - #FFD06F - {%- endif -%} - - - &text_color >- - {%- if page.meta.preview and page.meta.preview.text_color -%} - {{- page.meta.preview.text_color -}} - {%- else -%} - #2d2d2d - {%- endif -%} - - - &background_transparency >- - {%- if page.meta.preview and page.meta.preview.color -%} - {{- page.meta.preview.color -}}99 - {%- else -%} - #FFD06F99 - {%- endif -%} - - - &icon_transparency >- - {%- if page.meta.preview and page.meta.preview.text_color -%} - {{- page.meta.preview.text_color -}}33 - {%- else -%} - #00000033 - {%- endif -%} - - - &logo >- - {%- if page.meta.preview and page.meta.preview.site_logo -%} - theme/assets/brand/logos/svg/logo/{{- page.meta.preview.site_logo -}} - {%- else -%} - theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg - {%- endif -%} - - - &updated_time >- - {% if page.config.date.updated %} - {{- page.config.date.updated.strftime('%Y-%m-%dT%H:%M:%S+00:00') -}} - {% else %} - {{- page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') -}} - {% endif %} - - - &author_mastodon >- - {%- if page.authors[0].mastodon -%} - @{{- page.authors[0].mastodon.username -}}@{{- page.authors[0].mastodon.instance -}} - {%- else -%} - {{- "@privacyguides@neat.computer" -}} - {%- endif -%} - - - &author_twitter >- - {%- if page.authors[0].twitter -%} - @{{- page.authors[0].twitter -}} - {%- else -%} - {{- "@privacy_guides" -}} - {%- endif -%} - - - &replacement_image >- - {%- if page.meta.preview and page.meta.preview.cover -%} - {{- page.meta.preview.cover -}} - {%- endif -%} - -# Meta tags -tags: - # Open Graph - og:site_name: *site_name - og:locale: "en_US" - og:type: article - og:title: *page_title - og:description: *page_description - og:image: "{{ image.url }}" - og:image:type: "{{ image.type }}" - og:image:width: "{{ image.width }}" - og:image:height: "{{ image.height }}" - og:url: "{{ page.canonical_url }}" - - # Blog - article:published_time: "{{ page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}" - article:modified_time: *updated_time - article:section: "{{ page.categories[0].title }}" - article:author: "https://www.privacyguides.org/articles/{{ page.authors[0].url }}" - - # Facebook - article:publisher: "https://www.facebook.com/PrivacyGuides.org" - article:tag: "Technology" - - # Mastodon - fediverse:creator: *author_mastodon - - # Twitter - twitter:site: "@privacy_guides" - twitter:creator: *author_twitter - twitter:card: summary_large_image - twitter:title: *page_title - twitter:description: *page_description - twitter:image: "{{ image.url }}" - twitter:image:width: "{{ image.width }}" - twitter:image:height: "{{ image.height }}" - twitter:image:alt: "Privacy Guides: Trusted, non-profit privacy and cybersecurity resources." - twitter:label1: "Written by" - twitter:data1: "{{ page.authors[0].name }}" - -# ----------------------------------------------------------------------------- -# Specification -# ----------------------------------------------------------------------------- - -# Card size and layers -size: { width: 1200, height: 630 } -layers: - # Background - - background: - color: *page_color - - - size: { width: 512, height: 512 } - offset: { x: 600, y: 59 } - background: - image: *page_logo - - - background: - color: *background_transparency - - # Page icon - - size: { width: 630, height: 630 } - offset: { x: 570, y: 0 } - icon: - value: *page_icon - color: *icon_transparency - - # Logo - - size: { width: 64, height: 64 } - offset: { x: 64, y: 64 } - background: - image: *logo - - # Site name - - size: { width: 768, height: 42 } - offset: { x: 160, y: 78 } - typography: - content: *site_name - color: *text_color - font: - family: Bagnard - style: Bold - - # Page title - - size: { width: 864, height: 360 } - offset: { x: 62, y: 192 } - typography: - content: *page_title - align: start - color: *text_color - line: - amount: 4 - height: 1.5 - font: - family: Bagnard - style: Bold - - - background: - image: *replacement_image diff --git a/theme/layouts/home.yml b/theme/layouts/home.yml deleted file mode 100644 index 0f2f7cf3..00000000 --- a/theme/layouts/home.yml +++ /dev/null @@ -1,103 +0,0 @@ -definitions: - - &background_color >- - #FFD06F - - - &color >- - #2d2d2d - - - &title_font_family >- - Bagnard - - - &font_family >- - {%- if config.theme.language == "he" -%} - Suez One - {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%} - Noto Sans TC - {%- else -%} - Public Sans - {%- endif -%} - - - &page_title >- - {{ config.site_name }} - - - &page_title_with_site_name >- - {{ page.meta.get("title", page.title) }} - - - &page_description >- - {{ config.extra.privacy_guides.homepage.description }} - - - &og_description >- - {{ page.meta.get("description", config.site_description) or "" }} - - - &logo >- - theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg - -# Meta tags -tags: - # Open Graph - og:type: website - og:title: *page_title_with_site_name - og:description: *og_description - og:image: "{{ image.url }}" - og:image:type: "{{ image.type }}" - og:image:width: "{{ image.width }}" - og:image:height: "{{ image.height }}" - og:url: "{{ page.canonical_url }}" - - # Facebook - article:publisher: "https://www.facebook.com/PrivacyGuides.org" - - # Mastodon - fediverse:creator: "@privacyguides@neat.computer" - - # Twitter - twitter:card: summary_large_image - twitter:title: *page_title_with_site_name - twitter:description: *page_description - twitter:image: "{{ image.url }}" - -# ----------------------------------------------------------------------------- -# Specification -# ----------------------------------------------------------------------------- - -# Card size and layers -size: { width: 1200, height: 630 } -layers: - # Background - - background: - color: *background_color - - # Logo - - size: { width: 64, height: 64 } - offset: { x: 64, y: 64 } - background: - image: *logo - - # Page title - - size: { width: 864, height: 256 } - offset: { x: 62, y: 192 } - typography: - content: *page_title - align: start - color: *color - line: - amount: 3 - height: 1.5 - font: - family: *title_font_family - style: Bold - - # Page description - - size: { width: 864, height: 192 } - offset: { x: 64, y: 320 } - typography: - content: *page_description - overflow: shrink - align: start - color: *color - line: - amount: 3 - height: 1.5 - font: - family: *font_family - style: Regular diff --git a/theme/layouts/page.yml b/theme/layouts/page.yml deleted file mode 100644 index f49b1f03..00000000 --- a/theme/layouts/page.yml +++ /dev/null @@ -1,159 +0,0 @@ -definitions: - - &background_image >- - {%- if page.meta.cover -%} - theme/assets/img/cover/{{ page.meta.cover }} - {%- else -%} - {{ layout.background_image or "" }} - {%- endif -%} - - - &background_color >- - {%- if page.meta.cover -%} - #f7f7fcaa - {%- else -%} - #FFD06F - {%- endif -%} - - - &color >- - {{ layout.color or "#2d2d2d" }} - - - &title_font_family >- - {%- if config.theme.language == "he" -%} - Suez One - {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%} - Noto Serif TC - {%- else -%} - Bagnard - {%- endif -%} - - - &title_font_style >- - {%- if config.theme.language == "he" -%} - Regular - {%- else -%} - Bold - {%- endif -%} - - - &font_family >- - {%- if config.theme.language == "he" -%} - Suez One - {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%} - Noto Sans TC - {%- else -%} - Public Sans - {%- endif -%} - - - &site_name >- - {{ config.site_name }} - - - &page_title >- - {{ page.meta.get("title", page.title) }} - - - &page_title_with_site_name >- - {%- if page.meta.meta_title -%} - {{ page.meta.meta_title }} - {%- else -%} - {{ page.meta.get("title", page.title) }} - {{ config.site_name }} - {%- endif -%} - - - &page_description >- - {{ page.meta.get("description", config.site_description) or "" }} - - - &page_icon >- - {{ page.meta.icon or "" }} - - - &logo >- - {%- if page.meta.cover -%} - theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext.svg - {%- else -%} - theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg - {%- endif -%} - -# Meta tags -tags: - # Open Graph - og:site_name: *site_name - og:type: website - og:title: *page_title_with_site_name - og:description: *page_description - og:image: "{{ image.url }}" - og:image:type: "{{ image.type }}" - og:image:width: "{{ image.width }}" - og:image:height: "{{ image.height }}" - og:url: "{{ page.canonical_url }}" - - # Facebook - article:publisher: "https://www.facebook.com/PrivacyGuides.org" - - # Mastodon - fediverse:creator: "@privacyguides@neat.computer" - - # Twitter - twitter:site: "@privacy_guides" - twitter:card: summary_large_image - twitter:title: *page_title_with_site_name - twitter:description: *page_description - twitter:image: "{{ image.url }}" - twitter:image:width: "{{ image.width }}" - twitter:image:height: "{{ image.height }}" - -# ----------------------------------------------------------------------------- -# Specification -# ----------------------------------------------------------------------------- - -# Card size and layers -size: { width: 1200, height: 630 } -layers: - # Background - - background: - image: *background_image - color: *background_color - - # Page icon - - size: { width: 630, height: 630 } - offset: { x: 570, y: 0 } - icon: - value: *page_icon - color: "#00000033" - - # Logo - - size: { width: 64, height: 64 } - offset: { x: 64, y: 64 } - background: - image: *logo - - # Site name - - size: { width: 768, height: 42 } - offset: { x: 160, y: 78 } - typography: - content: *site_name - color: *color - font: - family: Bagnard - style: Bold - - # Page title - - size: { width: 864, height: 256 } - offset: { x: 62, y: 192 } - typography: - content: *page_title - align: start - color: *color - line: - amount: 3 - height: 1.5 - font: - family: *title_font_family - style: *title_font_style - - # Page description - - size: { width: 864, height: 96 } - offset: { x: 64, y: 480 } - typography: - content: *page_description - align: start - color: *color - line: - amount: 3 - height: 1.5 - font: - family: *font_family - style: Regular diff --git a/theme/layouts/pride.yml b/theme/layouts/pride.yml deleted file mode 100644 index 1f6be9f9..00000000 --- a/theme/layouts/pride.yml +++ /dev/null @@ -1,137 +0,0 @@ -definitions: - - &background_image >- - {%- if page.meta.cover -%} - theme/assets/img/cover/{{ page.meta.cover }} - {%- else -%} - {{ layout.background_image or "theme/assets/brand/images/png/cover-progress-notext-blur.png" }} - {%- endif -%} - - - &background_color >- - #f7f7fcaa - - - &color >- - {{ layout.color or "#2d2d2d" }} - - - &title_font_family >- - {%- if config.theme.language == "he" -%} - Suez One - {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%} - Noto Serif TC - {%- else -%} - Bagnard - {%- endif -%} - - - &font_family >- - {%- if config.theme.language == "he" -%} - Suez One - {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%} - Noto Sans TC - {%- else -%} - Public Sans - {%- endif -%} - - - &site_name >- - {{ config.site_name }} - - - &page_title >- - {{ page.meta.get("title", page.title) }} - - - &page_title_with_site_name >- - {%- if page.meta.meta_title -%} - {{ page.meta.meta_title }} - {%- else -%} - {{ page.meta.get("title", page.title) }} - {%- endif -%} - - - &page_description >- - {{ page.meta.get("description", config.site_description) or "" }} - - - &page_icon >- - {{ page.meta.icon or "" }} - - - &logo >- - theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext.svg - -# Meta tags -tags: - # Open Graph - og:type: website - og:title: *page_title_with_site_name - og:description: *page_description - og:image: "{{ image.url }}" - og:image:type: "{{ image.type }}" - og:image:width: "{{ image.width }}" - og:image:height: "{{ image.height }}" - og:url: "{{ page.canonical_url }}" - - # Facebook - article:publisher: "https://www.facebook.com/PrivacyGuides.org" - - # Twitter - twitter:card: summary_large_image - twitter:title: *page_title_with_site_name - twitter:description: *page_description - twitter:image: "{{ image.url }}" - -# ----------------------------------------------------------------------------- -# Specification -# ----------------------------------------------------------------------------- - -# Card size and layers -size: { width: 1200, height: 630 } -layers: - # Background - - background: - image: *background_image - color: *background_color - - # Page icon - - size: { width: 630, height: 630 } - offset: { x: 570, y: 0 } - icon: - value: *page_icon - color: "#00000033" - - # Logo - - size: { width: 64, height: 64 } - offset: { x: 64, y: 64 } - background: - image: *logo - - # Site name - - size: { width: 768, height: 42 } - offset: { x: 160, y: 78 } - typography: - content: *site_name - color: *color - font: - family: Bagnard - style: Bold - - # Page title - - size: { width: 864, height: 256 } - offset: { x: 62, y: 192 } - typography: - content: *page_title - align: start - color: *color - line: - amount: 3 - height: 1.5 - font: - family: *title_font_family - style: Bold - - # Page description - - size: { width: 864, height: 96 } - offset: { x: 64, y: 480 } - typography: - content: *page_description - align: start - color: *color - line: - amount: 3 - height: 1.5 - font: - family: *font_family - style: Regular diff --git a/theme/layouts/toolbox.yml b/theme/layouts/toolbox.yml deleted file mode 100644 index 66374d21..00000000 --- a/theme/layouts/toolbox.yml +++ /dev/null @@ -1,155 +0,0 @@ -definitions: - - &background_image >- - {%- if page.meta.cover -%} - theme/assets/img/cover/{{ page.meta.cover }} - {%- else -%} - {{ layout.background_image or "" }} - {%- endif -%} - - - &background_color >- - {%- if page.meta.cover -%} - #f7f7fcaa - {%- else -%} - #FFD06F - {%- endif -%} - - - &color >- - {{ layout.color or "#2d2d2d" }} - - - &title_font_family >- - {%- if config.theme.language == "he" -%} - Suez One - {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%} - Noto Serif TC - {%- else -%} - Bagnard - {%- endif -%} - - - &title_font_style >- - {%- if config.theme.language == "he" -%} - Regular - {%- else -%} - Bold - {%- endif -%} - - - &font_family >- - {%- if config.theme.language == "he" -%} - Suez One - {%- elif config.theme.language == ("ru" or "zh-Hant" or "zh-TW") -%} - Noto Sans TC - {%- else -%} - Public Sans - {%- endif -%} - - - &site_name >- - {{ config.site_name }} - - - &page_title >- - {{ page.meta.get("title", page.title) }} - - - &page_title_with_site_name >- - {%- if page.meta.meta_title -%} - {{ page.meta.meta_title }} - {%- else -%} - {{ page.meta.get("title", page.title) }} - {{ config.site_name }} - {%- endif -%} - - - &page_description >- - {{ page.meta.get("description", config.site_description) or "" }} - - - &page_icon >- - {{ page.meta.icon or "" }} - - - &logo >- - theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg - -# Meta tags -tags: - # Open Graph - og:site_name: *site_name - og:type: website - og:title: *page_title_with_site_name - og:description: *page_description - og:image: "{{ image.url }}" - og:image:type: "{{ image.type }}" - og:image:width: "{{ image.width }}" - og:image:height: "{{ image.height }}" - og:url: "{{ page.canonical_url }}" - - # Facebook - article:publisher: "https://www.facebook.com/PrivacyGuides.org" - - # Mastodon - fediverse:creator: "@privacyguides@neat.computer" - - # Twitter - twitter:site: "@privacy_guides" - twitter:card: summary_large_image - twitter:title: *page_title_with_site_name - twitter:description: *page_description - twitter:image: "{{ image.url }}" - twitter:image:width: "{{ image.width }}" - twitter:image:height: "{{ image.height }}" - -# ----------------------------------------------------------------------------- -# Specification -# ----------------------------------------------------------------------------- - -# Card size and layers -size: { width: 1200, height: 630 } -layers: - # Background - - background: - image: *background_image - color: *background_color - - # # Page icon - # - size: { width: 630, height: 630 } - # offset: { x: 570, y: 0 } - # icon: - # value: *page_icon - # color: "#00000033" - - # Logo - - size: { width: 64, height: 64 } - offset: { x: 64, y: 64 } - background: - image: *logo - - # Site name - - size: { width: 768, height: 42 } - offset: { x: 160, y: 78 } - typography: - content: Activism Toolbox - color: *color - font: - family: Bagnard - style: Bold - - # Page title - - size: { width: 864, height: 256 } - offset: { x: 160, y: 256 } - typography: - content: *page_title - align: start - color: *color - line: - amount: 3 - height: 1.5 - font: - family: *title_font_family - style: *title_font_style - - # # Page description - # - size: { width: 864, height: 96 } - # offset: { x: 64, y: 480 } - # typography: - # content: *page_description - # align: start - # color: *color - # line: - # amount: 3 - # height: 1.5 - # font: - # family: *font_family - # style: Regular diff --git a/theme/layouts/video.yml b/theme/layouts/video.yml deleted file mode 100644 index 90ef6cab..00000000 --- a/theme/layouts/video.yml +++ /dev/null @@ -1,114 +0,0 @@ -definitions: - - &site_name >- - {{ config.site_name }} - - - &page_title >- - {{ page.meta.get("title", page.title) }} - - - &page_description >- - {{ page.meta.get("description", config.site_description) or "" }} - - - &page_logo >- - {% if page.meta.preview and page.meta.preview.logo %} - {{- page.meta.preview.logo -}} - {% endif %} - - - &page_icon >- - {%- if not page.meta.preview or not page.meta.preview.logo -%} - material/video-box - {%- endif -%} - - - &logo >- - theme/assets/brand/logos/svg/logo/privacy-guides-logo-notext-colorbg.svg - - - &thumbnail >- - {%- if page.meta.get("thumbnail") -%} - {{ config.site_url }}{{ page.meta.get("thumbnail") | replace("https://", "assets/external/") }} - {%- else -%} - {{ image.url }} - {%- endif -%} - -# Meta tags -tags: - # Open Graph - og:type: video.other - og:title: *page_title - og:description: *page_description - og:image: *thumbnail - og:url: "{{ page.canonical_url }}" - - # Video - og:video: "{{ page.meta.embed }}" - og:video:url: "{{ page.meta.embed }}" - og:video:secure_url: "{{ page.meta.embed }}" - og:video:type: "text/html" - og:video:width: "560" - og:video:height: "315" - video:release_date: "{{ page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}" - - # Mastodon - fediverse:creator: "@privacyguides@neat.computer" - - # Twitter - twitter:site: "@privacy_guides" - twitter:creator: "@privacy_guides" - twitter:card: summary_large_image - twitter:title: *page_title - twitter:description: *page_description - twitter:image: *thumbnail - -# ----------------------------------------------------------------------------- -# Specification -# ----------------------------------------------------------------------------- - -# Card size and layers -size: { width: 1200, height: 630 } -layers: - # Background - - background: - color: "#FFD06F" - - - size: { width: 512, height: 512 } - offset: { x: 600, y: 59 } - background: - image: *page_logo - - - background: - color: "#FFD06F99" - - # Page icon - - size: { width: 630, height: 630 } - offset: { x: 570, y: 0 } - icon: - value: *page_icon - color: "#00000033" - - # Logo - - size: { width: 64, height: 64 } - offset: { x: 64, y: 64 } - background: - image: *logo - - # Site name - - size: { width: 768, height: 42 } - offset: { x: 160, y: 78 } - typography: - content: *site_name - color: "#2d2d2d" - font: - family: Bagnard - style: Bold - - # Page title - - size: { width: 864, height: 256 } - offset: { x: 62, y: 192 } - typography: - content: *page_title - align: start - color: "#2d2d2d" - line: - amount: 3 - height: 1.5 - font: - family: Bagnard - style: Bold diff --git a/theme/main.html b/theme/main.html deleted file mode 100644 index 785fb529..00000000 --- a/theme/main.html +++ /dev/null @@ -1,135 +0,0 @@ - -{% extends "base.html" %} -{% block site_meta %} - - - {% if page.meta and page.meta.description %} - - {% endif %} - {% if page.meta and page.meta.author %} - - {% elif page.authors %} - - {% elif config.site_author %} - - {% endif %} - {% if page.meta and page.meta.canonical_url %} - - {% elif page.canonical_url %} - - {% endif %} - {% if page.previous_page %} - - {% endif %} - {% if page.next_page %} - - {% endif %} - {% if config.extra.alternate is iterable %} - {% if page.is_homepage %} - - {% else %} - - {% endif %} - {% for alt in config.extra.alternate %} - - {% endfor %} - {% endif %} - {% if "rss" in config.plugins %} - - - {% endif %} - - - {% if page %} - - {% endif %} -{% endblock %} -{% block htmltitle %} - {% if page.meta and page.meta.meta_title and config.theme.language == "en" %} - {{ page.meta.meta_title }} - {% elif page.meta and page.meta.title %} - {{ page.meta.title }} - {{ config.site_name }} - {% elif page.title and not page.is_homepage %} - {{ page.title | striptags }} - {{ config.site_name }} - {% else %} - {{ config.site_name }} - {% endif %} -{% endblock %} - -{% block extrahead %} - - {% if config.extra.privacy_guides.translation_stylesheet %} - - {% endif %} - - {% if page and page.meta and page.meta.robots %} - - {% else %} - - {% endif %} - - {% if not config.extra.offline %} - - - {% endif %} - - {% if config.extra.context == "production" %} - - - - - {% if config.theme.language == "en" %} - - {% endif %} - - {% endif %} - - {% if page and page.meta and page.meta.schema %} - - {% endif %} -{% endblock %} diff --git a/theme/partials/alternate.html b/theme/partials/alternate.html deleted file mode 100644 index 91b2afea..00000000 --- a/theme/partials/alternate.html +++ /dev/null @@ -1,51 +0,0 @@ - - - -
-
- {% for alt in config.extra.alternate %} - {% if alt.lang == config.theme.language %} - - {% endif %} - {% endfor %} -
- -
-
-
diff --git a/theme/partials/content.html b/theme/partials/content.html deleted file mode 100644 index 6dc85d93..00000000 --- a/theme/partials/content.html +++ /dev/null @@ -1,63 +0,0 @@ - - -{% if page and page.meta and page.meta.cover %} -
- -
-

{{ page.title | d(config.site_name, true)}}

-{% endif %} - - -{% include "partials/tags.html" %} - - -{% include "partials/actions.html" %} - -{% if "\x3ch1" not in page.content and not page.meta.cover %} -

{{ page.title | d(config.site_name, true)}}

-{% endif %} - - -
-{{ page.content }} -
- - -{% include "partials/source-file.html" %} - - -{% include "partials/feedback.html" %} - -{% set translation_notice = config.extra.privacy_guides.translation_notice %} -{% if config.theme.language == "en" %} -{% elif translation_notice %} -
-

{{ translation_notice.notice }} {{ translation_notice.cta }}

-

You're viewing the {{ translation_notice.language }} copy of Privacy Guides, translated by our fantastic language team on Crowdin. If you notice an error, or see any untranslated sections on this page, please consider helping out!

-
-{% endif %} - - -{% include "partials/comments.html" %} diff --git a/theme/partials/copyright.html b/theme/partials/copyright.html deleted file mode 100644 index 99858263..00000000 --- a/theme/partials/copyright.html +++ /dev/null @@ -1,45 +0,0 @@ - -{% set copyright = config.extra.privacy_guides.footer %} - - - diff --git a/theme/partials/donate.html b/theme/partials/donate.html deleted file mode 100644 index dac9fa7c..00000000 --- a/theme/partials/donate.html +++ /dev/null @@ -1,8 +0,0 @@ -
-
- {% set icon = "material/heart" %} - - {% include ".icons/" ~ icon ~ ".svg" %} - -
-
diff --git a/theme/partials/header.html b/theme/partials/header.html deleted file mode 100644 index 639eb857..00000000 --- a/theme/partials/header.html +++ /dev/null @@ -1,149 +0,0 @@ - - -{% macro notice() %}{% if config.extra.offline %} - You're viewing an offline copy of Privacy Guides built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}. - - Visit privacyguides.org for the latest version. - -{% elif config.extra.context == "deploy-preview" %} - You're viewing an unreviewed preview of Privacy Guides built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}. - These previews are user-submitted and may not necessarily reflect the opinion of the site. - - Visit privacyguides.org for current advice. - -{% elif config.extra.context == "branch-deploy" %} - You're viewing a staging branch of Privacy Guides built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}. - The information on this page may be incomplete or otherwise not yet meet our editorial release standards. - - Visit privacyguides.org for current advice. - -{% else %}{% endif %}{% endmacro %} - -{% if notice() %} -
- -
-{% endif %} - - -{% set class = "md-header" %} -{% if "navigation.tabs.sticky" in features %} - {% set class = class ~ " md-header--shadow md-header--lifted" %} -{% elif "navigation.tabs" not in features %} - {% set class = class ~ " md-header--shadow" %} -{% endif %} - - -
- - - - {% if "navigation.tabs.sticky" in features %} - {% if "navigation.tabs" in features %} - {% include "partials/tabs.html" %} - {% endif %} - {% endif %} -
diff --git a/theme/partials/logo.html b/theme/partials/logo.html deleted file mode 100644 index 760fa4a3..00000000 --- a/theme/partials/logo.html +++ /dev/null @@ -1,27 +0,0 @@ - - -logo -logo diff --git a/theme/partials/path-item.html b/theme/partials/path-item.html deleted file mode 100644 index 134be484..00000000 --- a/theme/partials/path-item.html +++ /dev/null @@ -1,52 +0,0 @@ - - - -{% macro render(nav_item, ref = nav_item) %} - - - {% if nav_item.children %} - {% set first = nav_item.children | first %} - - - {% if first.children %} - {{ render(first, ref) }} - - - {% else %} - - - {{ ref.title }} - - - {% endif %} - - - {% else %} - - - {{ ref.title }} - - - {% endif %} -{% endmacro %} diff --git a/theme/partials/path.html b/theme/partials/path.html deleted file mode 100644 index c8ac1b5b..00000000 --- a/theme/partials/path.html +++ /dev/null @@ -1,62 +0,0 @@ - - -{% import "partials/path-item.html" as item with context %} - - -{% if page.meta and page.meta.hide %} - {% set hidden = "hidden" if "path" in page.meta.hide %} -{% endif %} - - -{% set depth = page.ancestors | length %} -{% if nav.homepage %} - {% set depth = depth + 1 %} -{% endif %} - - -{% if depth > 1 %} - {% set count = namespace(value=1) %} - -{% endif %} diff --git a/theme/partials/source-file.html b/theme/partials/source-file.html deleted file mode 100644 index ff9cd460..00000000 --- a/theme/partials/source-file.html +++ /dev/null @@ -1,103 +0,0 @@ - - - -{% macro render_updated(date) %} - - - {% include ".icons/material/clock-edit-outline.svg" %} - - {{ date }} - -{% endmacro %} - - -{% macro render_created(date) %} - - - {% include ".icons/material/clock-plus-outline.svg" %} - - {{ date }} - -{% endmacro %} - - - - -{% macro render_authors(authors) %} - {% set git_authors = config.plugins.get("git-authors") %} - - - {% if authors | length == 1 %} - {% include ".icons/material/account.svg" %} - {% else %} - {% include ".icons/material/account-group.svg" %} - {% endif %} - - - -{% endmacro %} - - - - - -{% if page.meta %} - {% if page.meta.git_revision_date_localized %} - {% set updated = page.meta.git_revision_date_localized %} - {% elif page.meta.revision_date %} - {% set updated = page.meta.revision_date %} - {% endif %} - - - {% if page.meta.git_creation_date_localized %} - {% set created = page.meta.git_creation_date_localized %} - {% endif %} -{% endif %} - - -{% if updated or created or git_info %} - -{% endif %} diff --git a/theme/partials/video.html b/theme/partials/video.html deleted file mode 100644 index c24880ee..00000000 --- a/theme/partials/video.html +++ /dev/null @@ -1,41 +0,0 @@ - -
-
- - - -
- - -
- -
- - - -
-
-
diff --git a/theme/review-article.html b/theme/review-article.html deleted file mode 100644 index 3d33e2f2..00000000 --- a/theme/review-article.html +++ /dev/null @@ -1,129 +0,0 @@ - - -{% extends "blog-post.html" %} - -{% import "partials/nav-item.html" as item with context %} - -{% block extra_sidebar %} - - {% if page.meta.review %} - - - {% endif %} - -{% endblock %} diff --git a/theme/video-post.html b/theme/video-post.html deleted file mode 100644 index 50e6e332..00000000 --- a/theme/video-post.html +++ /dev/null @@ -1,259 +0,0 @@ - - -{% extends "main.html" %} - -{% import "partials/nav-item.html" as item with context %} - -{% block htmltitle %} - [Video] {{ page.title | striptags }} - {{ config.site_name }} -{% endblock %} - -{% block extrahead %} - - -{% endblock %} - - -{% block container %} -
- - -
-
-
- - - - {% if "toc.integrate" in features %} - {% include "partials/toc.html" %} - {% endif %} -
-
-
- - -
- {% block content %} - - {% include "partials/tags.html" %} - - - {% include "partials/actions.html" %} - - {% if "\x3ch1" not in page.content and not page.meta.cover %} -

{{ page.title | d(config.site_name, true)}}

- {% endif %} - -
-
- -
-
- -

- - - - - Watch on YouTube - - - - - Watch on PeerTube -

- - -
- {{ page.content }} -
- - - {% include "partials/source-file.html" %} - - - {% include "partials/feedback.html" %} - {% endblock %} -
-
-{% endblock %} diff --git a/theme/video.html b/theme/video.html deleted file mode 100644 index 12003212..00000000 --- a/theme/video.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "main.html" %} - - -{% block container %} -
-
- - -
- {{ page.content }} -
- - - {% for post in posts %} - {% include "partials/video.html" %} - {% endfor %} - - - {% if pagination %} - {% block pagination %} - {% include "partials/pagination.html" %} - {% endblock %} - {% endif %} -
-
-{% endblock %} diff --git a/tools/archive-releases.sh b/tools/archive-releases.sh deleted file mode 100755 index 3a239e14..00000000 --- a/tools/archive-releases.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -set -euo pipefail - -REPO="privacyguides/privacyguides.org" -BASE_DIR="releases" - -mkdir -p "$BASE_DIR" - -# Get all release tags using gh CLI -release_tags=$(gh release list -R "$REPO" --limit 1000 | awk '{print $1}') - -for tag in $release_tags; do - target_dir="$BASE_DIR/$tag" - mkdir -p "$target_dir" - echo "Downloading assets for release: $tag" - gh release download "$tag" -R "$REPO" --dir "$target_dir" -done - -echo "All releases downloaded." diff --git a/tools/delete-unreferenced.sh b/tools/delete-unreferenced.sh deleted file mode 100644 index 9466b42b..00000000 --- a/tools/delete-unreferenced.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -# Script to find and delete unreferenced asset files -# This script searches through all HTML, CSS, and JavaScript files to see if asset files are referenced - -set -e # Exit on any error - -echo -e "Starting unreferenced asset cleanup..." -echo "Assets directory: $ASSETS_DIR" -echo "Search directory: $SEARCH_DIR" -echo "" - -# Check if assets directory exists -if [ ! -d "$ASSETS_DIR" ]; then - echo -e "Error: Assets directory '$ASSETS_DIR' not found!" - exit 1 -fi - -# Find all asset files recursively -echo "Finding all asset files..." -ASSET_FILES=$(find "$ASSETS_DIR" -type f) -ASSET_COUNT=$(echo "$ASSET_FILES" | wc -l) -echo "Found $ASSET_COUNT asset files" -echo "" - -# Find all HTML, CSS, and JavaScript files -echo "Finding all HTML, CSS, and JavaScript files..." -SEARCH_FILES=$(find "$SEARCH_DIR" \( -name "*.html" -o -name "*.css" -o -name "*.js" \) -type f) -SEARCH_COUNT=$(echo "$SEARCH_FILES" | wc -l) -echo "Found $SEARCH_COUNT HTML, CSS, and JavaScript files" -echo "" - -# Process each asset file -echo "Checking each asset file for references..." -echo "" - -while IFS= read -r asset_file; do - if [ -z "$asset_file" ]; then - continue - fi - - # Get just the filename (without path) - asset_filename=$(basename "$asset_file") - - # Search for this filename in all HTML, CSS, and JavaScript files - found_reference=false - - while IFS= read -r search_file; do - if [ -z "$search_file" ]; then - continue - fi - - # Simple string search for the filename in the file - if grep -q "$asset_filename" "$search_file" 2>/dev/null; then - found_reference=true - break - fi - done <<< "$SEARCH_FILES" - - if [ "$found_reference" = false ]; then - echo -e "Unreferenced: $asset_file" - rm "$asset_file" - fi -done <<< "$ASSET_FILES" diff --git a/tools/generate-members.py b/tools/generate-members.py deleted file mode 100644 index c8ba19fc..00000000 --- a/tools/generate-members.py +++ /dev/null @@ -1,20 +0,0 @@ -import requests -import os - -# Fetch members from the API -members_api_url = os.getenv('MEMBERS_API_URL', 'https://ghost.privacyguides.org/cache/members.json') -members_response = requests.get(members_api_url) -members_data = members_response.json()[0] - -members = members_data['members'] - -html_output = "" -for member in members: - username = member['username'] - html_output += f'' - -# Append the count of private members -if members_data['unaccounted'] > 0: - html_output += f'+{members_data["unaccounted"]}' - -print(html_output) diff --git a/tools/generate-topics.sh b/tools/generate-topics.sh deleted file mode 100755 index 85d73f0b..00000000 --- a/tools/generate-topics.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash - -DATE_CMD="date" - -# Check if the script is running on macOS -if [[ "$OSTYPE" == "darwin"* ]]; then - DATE_CMD="gdate" -fi - -# Defaults -source="https://discuss.privacyguides.net/top.json?period=weekly" -tag="top posts" -destination="./site/en/index.html" -count=3 - -for arg in "$@" -do - case $arg in - --source=*) - source="${arg#*=}" - shift - ;; - --tag=*) - tag="${arg#*=}" - shift - ;; - --destination=*) - destination="${arg#*=}" - shift - ;; - --count=*) - count="${arg#*=}" - shift - ;; - esac -done - -# URL of the Discourse top.json -DISCOURSE_URL="$source" - -# Fetch the JSON data -json_data="$(curl -s "$DISCOURSE_URL")" - -# Extract the first 3 topics -topics=$(echo "$json_data" | jq -r ".topic_list.topics[:$count]") - -users=$(echo "$json_data" | jq -r ".users") -# Generate HTML for the first 3 posts -html_output="" -for row in $(echo "${topics}" | jq -r '.[] | @base64'); do - _jq() { - echo "${row}" | base64 --decode | jq -r "${1}" - } - - title="$(_jq '.title')" - id=$(_jq '.id') - like_count=$(_jq '.like_count') - reply_count=$(_jq '.posts_count') - views=$(_jq '.views') - - author_id=$(_jq '.posters[0].user_id') - author_info=$(echo "${users}" | jq -r ".[] | select(.id==$author_id)") - author_username=$(echo "${author_info}" | jq -r ".username") - - html_output+="
  • " - html_output+="

    ${title}

    " - html_output+="
    " - html_output+="

    " - html_output+="" - if [[ -z "$BUILD_OFFLINE" ]]; then - html_output+="" - fi - html_output+=" Posted by $author_username" - html_output+="" - html_output+="

    " - html_output+="

    " - html_output+="eye" - html_output+=" ${views} " - html_output+="heart" - html_output+=" ${like_count} " - html_output+="reply" - html_output+=" ${reply_count} " - html_output+="

    " - html_output+="
  • " -done - -tempfile=$(mktemp) -echo "$html_output" > "$tempfile" - -# Insert the HTML output between the comments in index.html -sed -i'.bak' "//,//{//!d;}; //r $tempfile" "$destination" diff --git a/tools/symlink-duplicates.sh b/tools/symlink-duplicates.sh deleted file mode 100644 index da3daf66..00000000 --- a/tools/symlink-duplicates.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -set -euo pipefail - -declare -A file_hashes - -find . -type f | while read -r file; do - hash=$(sha256sum "$file" | awk '{print $1}') - if [[ -n "${file_hashes[$hash]+_}" ]]; then - # Duplicate found, replace with symlink to first copy - first="${file_hashes[$hash]}" - # Remove the duplicate file - rm "$file" - # Create symlink (relative path) - ln -s "$(realpath --relative-to="$(dirname "$file")" "$first")" "$file" - echo "Replaced duplicate: $file -> $first" - else - # First time seeing this hash - file_hashes[$hash]="$file" - fi -done