1
1
mirror of https://github.com/privacyguides/privacyguides.org.git synced 2026-05-14 15:41:17 +00:00

style: Remove more unused mkdocs files

This commit is contained in:
2026-05-08 21:34:21 -05:00
parent 7667e22b89
commit 6057ce2121
42 changed files with 0 additions and 2709 deletions
-6
View File
@@ -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
-84
View File
@@ -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 projectlocal 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 environments 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"]

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 797 B

-284
View File
@@ -1,284 +0,0 @@
<!--
Copyright (c) 2024 Jonah Aragon <jonah@triplebit.net>
Copyright (c) 2016-2024 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
{% extends "main.html" %}
{% import "partials/nav-item.html" as item with context %}
<!-- Page content -->
{% block container %}
<div class="md-content md-content--post" data-md-component="content" itemscope itemtype="https://schema.org/{{ page.meta.schema_type or 'Article' }}">
<meta itemprop="headline" content="{{ page.title | striptags }}" />
<meta itemprop="isAccessibleForFree" content="True" />
<meta itemprop="isFamilyFriendly" content="True" />
{% if config.theme.language == "en" %}
<meta itemprop="inLanguage" content="en-US" />
{% endif %}
<span itemprop="publisher" itemscope itemtype="https://schema.org/NewsMediaOrganization">
<meta itemprop="name" content="Privacy Guides" />
<link itemprop="url" href="https://www.privacyguides.org/" />
<link itemprop="sameAs" href="https://mastodon.neat.computer/@privacyguides" />
<link itemprop="sameAs" href="https://twitter.com/privacy_guides" />
<link itemprop="sameAs" href="https://github.com/privacyguides" />
<span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
<link itemprop="url" href="https://www.privacyguides.org/en/assets/brand/logos/png/square/pg-yellow.png" />
<meta itemprop="width" content="512" />
<meta itemprop="height" content="512" />
</span>
<link itemprop="publishingPrinciples" href="https://www.privacyguides.org/en/about/criteria/" />
<link itemprop="actionableFeedbackPolicy" href="https://www.privacyguides.org/articles/editorial/#actionable-feedback" />
<link itemprop="correctionsPolicy" href="https://www.privacyguides.org/articles/editorial/#corrections-policy" />
<link itemprop="ethicsPolicy" href="https://www.privacyguides.org/articles/editorial/#ethics-policy" />
<link itemprop="missionCoveragePrioritiesPolicy" href="https://www.privacyguides.org/articles/editorial/#coverage-priorities" />
<link itemprop="unnamedSourcesPolicy" href="https://www.privacyguides.org/articles/editorial/#unnamed-sources-policy" />
<link itemprop="verificationFactCheckingPolicy" href="https://www.privacyguides.org/articles/editorial/#verification-fact-checking" />
<link itemprop="ownershipFundingInfo" href="https://www.privacyguides.org/en/about/donate/" />
<link itemprop="masthead" href="https://www.privacyguides.org/en/about/" />
</span>
<!-- Sidebar -->
<div
class="md-sidebar md-sidebar--post"
data-md-component="sidebar"
data-md-type="navigation"
>
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner md-post">
<nav class="md-nav md-nav--primary">
<!-- Back to overview link -->
<div class="md-post__back">
<div class="md-nav__title md-nav__container">
<a href="{{ page.parent.url | url }}" class=" md-nav__link">
{% include ".icons/material/arrow-left.svg" %}
<span class="md-ellipsis">
{{ lang.t("blog.index") }}
</span>
</a>
</div>
</div>
<!-- Post authors -->
{% if page.authors %}
<div class="md-post__authors md-typeset">
{% for author in page.authors %}
<div class="md-profile md-post__profile" itemprop="author" itemscope itemtype="https://schema.org/{{ author.type | default('Person') }}">
<span class="md-author md-author--long">
<img src="{{ author.avatar | url }}" alt="{{ author.name }}" />
</span>
<span class="md-profile__description">
<strong>
{% if author.url %}
<a itemprop="url" href="{{ author.url | url }}"><span itemprop="name">{{ author.name }}</span></a>
{% else %}
<span itemprop="name">{{ author.name }}</span>
{% endif %}
</strong>
<br />
<span {% if author.type is not defined -%}itemprop="jobTitle"{%- endif -%}>{{ author.description }}</span>
</span>
</div>
{% endfor %}
</div>
{% endif %}
<!-- Post metadata -->
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
{{ lang.t("blog.meta") }}
</span>
</div>
<nav class="md-nav">
<ul class="md-nav__list">
<!-- Post date -->
<li class="md-nav__item">
<div class="md-nav__link" title="Date published">
{% include ".icons/material/calendar.svg" %}
<time
datetime="{{ page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}"
class="md-ellipsis"
itemprop="datePublished"
>
{{- page.config.date.created | date -}}
</time>
</div>
</li>
<!-- Post date updated -->
{% if page.config.date.updated %}
<li class="md-nav__item">
<div class="md-nav__link" title="Date last updated">
{% include ".icons/material/calendar-clock.svg" %}
<time
datetime="{{ page.config.date.updated.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}"
class="md-ellipsis"
itemprop="dateModified"
>
{{- page.config.date.updated | date -}}
</time>
</div>
</li>
{% endif %}
<!-- Post categories -->
{% if page.categories %}
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/bookshelf.svg" %}
<span class="md-ellipsis">
{{ lang.t("blog.categories.in") }}
{% for category in page.categories %}
<a href="{{ category.url | url }}">
{{- category.title -}}
</a>
{%- if loop.revindex > 1 %}, {% endif -%}
{% endfor -%}
</span>
</div>
</li>
{% endif %}
<!-- Post readtime -->
{% if page.config.readtime %}
{% set time = page.config.readtime %}
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/clock-outline.svg" %}
<span class="md-ellipsis" itemprop="timeRequired">
{% if time == 1 %}
{{ lang.t("readtime.one") }}
{% else %}
{{ lang.t("readtime.other") | replace("#", time) }}
{% endif %}
</span>
</div>
</li>
{% endif %}
</ul>
</nav>
</li>
</ul>
<!-- Related links -->
{% if page.config.links %}
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
{{ lang.t("blog.references") }}
</span>
</div>
<!-- Render related links -->
<nav class="md-nav">
<ul class="md-nav__list">
{% for nav_item in page.config.links %}
{% set path = "__ref_" ~ loop.index %}
{{ item.render(nav_item, path, 1) }}
{% endfor %}
</ul>
</nav>
</li>
</ul>
{% endif %}
{% block extra_sidebar %}
{% if page.categories[0].title == "Opinion" %}
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
<span>Disclaimer</span>
</span>
</div>
<div class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<span class="md-nav__link">
<span>
<small>
This is an opinion piece.
The views expressed in this article are the author's own and do not necessarily reflect the views of Privacy Guides and its editorial team.
</small>
</span>
</span>
</li>
</ul>
</div>
</li>
</ul>
{% endif %}
{% endblock %}
</nav>
<!-- Table of contents, if integrated -->
{% if "toc.integrate" in features %}
{% include "partials/toc.html" %}
{% endif %}
</div>
</div>
</div>
<!-- Page content -->
<article class="md-content__inner md-typeset">
{% 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 %}
<div>
<div class="admonition info" style="max-width: 14rem">
<p class="admonition-title" title="Some information may no longer be relevant or accurate. We encourage you to conduct your own research to verify if any changes have occurred.">
This article is more than {{ yearsdifference }}
{% if yearsdifference == 1 %}
year
{% else %}
years
{% endif %}
old
</p>
</div>
</div>
{% endif %}
{% block content %}
{% include "partials/content.html" %}
{% endblock %}
<div>
<hr>
<p><strong><a href="https://discuss.privacyguides.net/c/announcements/articles/10">
<span class="twemoji">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0m.116 4.563a7.4 7.4 0 0 0-6.337 3.57 7.25 7.25 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.42 7.42 0 0 0 8.136-1.39 7.26 7.26 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585z"></path></svg>
</span> Join our forum
</a>
to comment on this article.</strong></p>
<p><em>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 <a href="https://donate.magicgrants.org/privacyguides">donation</a> would be greatly appreciated.
Have a question, comment, or tip for us? You can securely <a href="https://www.privacyguides.org/en/about/#contact-us">contact us</a> at <code>@privacyguides.01</code> on Signal.</em></p>
</div>
</article>
</div>
{% endblock %}
-120
View File
@@ -1,120 +0,0 @@
<!-- {#
Copyright (c) 2016-2022 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2022-2024 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
#} -->
{% extends "main.html" %}
{% set homepage = config.extra.privacy_guides.homepage %}
{% block extrahead %}
<link rel="stylesheet" href="{{ 'assets/stylesheets/home.css?v=20240801' | url }}">
{% for feed in homepage.rss %}
<link rel="alternate" type="application/rss+xml" title="{{ feed.title }}" href="{{ feed.link }}">
{% endfor %}
{{ super() }}
{% endblock %}
{% block tabs %}
{{ super() }}
<style>.md-content > .md-typeset h1{visibility:hidden;font-size:0;}.md-button{margin-top:.5rem;}</style>
<section class="mdx-container">
<div class="md-grid md-typeset">
<div class="mdx-hero">
<div class="mdx-hero__content">
<h1>{{ homepage.hero.header }}</h1>
<p>{{ homepage.hero.subheader }}</p>
{% for button in homepage.hero.buttons %}
<a href="{{ button.link }}" title="{{ button.title }}" class="{{ button.class }}">
{{ button.name }}
</a>
{% endfor %}
</div>
</div>
</div>
</section>
{% endblock %}
{% block content %}
{% if config.theme.language == "en" %}
<h2>Top discussions this week</h2>
<div class="grid cards">
<ul>
<!-- start top posts -->
<!-- end top posts -->
</ul>
</div>
<noscript>
<p>You have Javascript disabled, so we can't load the latest discussions. Visit one of our top forum categories directly at the links below:</p>
<div class="grid cards">
<ul>
<li>
<p><a href="https://discuss.privacyguides.net/c/privacy/4"><strong>Privacy Discussions</strong></a></p>
<hr>
<p>Find the latest news and discuss privacy, security, and data protection.</p>
</li>
<li>
<p><a href="https://discuss.privacyguides.net/c/site-development/suggestions/6"><strong>Tool Suggestions</strong></a></p>
<hr>
<p>Suggest a tool for us to review and provide feedback on other suggestions.</p>
</li>
<li>
<p><a href="https://discuss.privacyguides.net/c/privacy/questions/8"><strong>Questions</strong></a></p>
<hr>
<p>Ask questions and get advice from our community of privacy advocates.</p>
</li>
</ul>
</div>
<a href="https://discuss.privacyguides.net/" class="md-button md-button--primary">
Join the forum
</a>
</noscript>
{% endif %}
{{ page.content }}
<div class="mdx-cta">
<hr />
{% for cta in homepage.cta %}
<h2>{{ cta.title }}</h2>
{% for icon in cta.links %}
<a href="{{ icon.link }}" title="{{ icon.name }}">
<span class="twemoji">{% include ".icons/" ~ icon.icon ~ ".svg" %}</span>
</a>
{% endfor %}
<p>{{ cta.description }}</p>
{% endfor %}
</div>
{% if config.theme.language == "en" %}
<div class="mdx-discourse-topics">
<h3>Latest discussions</h3>
<div class="grid cards">
<ul>
<!-- start latest posts -->
<!-- end latest posts -->
</ul>
</div>
<noscript>
<a href="https://discuss.privacyguides.net/" class="md-button md-button--primary">
Join the forum
</a>
</noscript>
<hr />
</div>
{% endif %}
{% endblock %}
-182
View File
@@ -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
-103
View File
@@ -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
-159
View File
@@ -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
-137
View File
@@ -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
-155
View File
@@ -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
-114
View File
@@ -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
-135
View File
@@ -1,135 +0,0 @@
<!-- {#
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2023 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
#} -->
{% extends "base.html" %}
{% block site_meta %}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
{% if page.meta and page.meta.description %}
<meta name="description" content="{{ page.meta.description }}">
{% endif %}
{% if page.meta and page.meta.author %}
<meta name="author" content="{{ page.meta.author }}">
{% elif page.authors %}
<meta name="author" content="{{ page.authors[0].name }}">
{% elif config.site_author %}
<meta name="author" content="{{ config.site_author }}">
{% endif %}
{% if page.meta and page.meta.canonical_url %}
<link rel="canonical" href="{{ page.meta.canonical_url }}">
{% elif page.canonical_url %}
<link rel="canonical" href="{{ page.canonical_url }}">
{% endif %}
{% if page.previous_page %}
<link rel="prev" href="{{ page.previous_page.url | url }}">
{% endif %}
{% if page.next_page %}
<link rel="next" href="{{ page.next_page.url | url }}">
{% endif %}
{% if config.extra.alternate is iterable %}
{% if page.is_homepage %}
<link rel="alternate" href="https://www.privacyguides.org/" hreflang="x-default">
{% else %}
<link rel="alternate" href="{{ "https://www.privacyguides.org/" ~ "en" ~ "/" ~ page.url }}" hreflang="x-default">
{% endif %}
{% for alt in config.extra.alternate %}
<link rel="alternate" href="{{ "https://www.privacyguides.org/" ~ alt.lang ~ "/" ~ page.url }}" hreflang="{{ alt.lang | d(lang.t('language')) }}">
{% endfor %}
{% endif %}
{% if "rss" in config.plugins %}
<link rel="alternate" type="application/rss+xml" title="{{ lang.t('rss.created') }}" href="{{ 'feed_rss_created.xml' | url }}">
<link rel="alternate" type="application/rss+xml" title="{{ lang.t('rss.updated') }}" href="{{ 'feed_rss_updated.xml' | url }}">
{% endif %}
<link rel="icon" href="{{ config.theme.favicon | url }}">
<meta name="generator" content="mkdocs-{{ mkdocs_version }}, mkdocs-material-9.1.0+insiders-4.32.2">
{% if page %}
<meta name="global-data" id="global-data" {% for data in page.meta.global %}data-{{ data.0 }}="{{data.1}}"{% endfor %}>
{% endif %}
{% endblock %}
{% block htmltitle %}
{% if page.meta and page.meta.meta_title and config.theme.language == "en" %}
<title>{{ page.meta.meta_title }}</title>
{% elif page.meta and page.meta.title %}
<title>{{ page.meta.title }} - {{ config.site_name }}</title>
{% elif page.title and not page.is_homepage %}
<title>{{ page.title | striptags }} - {{ config.site_name }}</title>
{% else %}
<title>{{ config.site_name }}</title>
{% endif %}
{% endblock %}
{% block extrahead %}
<!-- language-specific stylesheets -->
{% if config.extra.privacy_guides.translation_stylesheet %}
<link rel="stylesheet" href="{{ config.extra.privacy_guides.translation_stylesheet | url }}" />
{% endif %}
{% if page and page.meta and page.meta.robots %}
<meta name="robots" content="{{ page.meta.robots }}">
{% else %}
<meta name="robots" content="max-snippet:-1, max-image-preview:large">
{% endif %}
{% if not config.extra.offline %}
<script defer src="https://cdn.jsdelivr.net/ghost/portal@2.53.2/umd/portal.min.js"
data-i18n="true"
data-ghost="{{ config.extra.ghost.base_url }}/"
data-key="{{ config.extra.ghost.content_api_key }}"
data-api="{{ config.extra.ghost.admin_url }}/api/content/"
data-locale="{{ config.theme.language }}"
data-members-signin-otc="false"
crossorigin="anonymous">
</script>
<script defer src="https://cdn.jsdelivr.net/ghost/announcement-bar@~1.1/umd/announcement-bar.min.js"
data-announcement-bar="{{ config.extra.ghost.base_url }}/"
data-api-url="{{ config.extra.ghost.base_url }}/members/api/announcement/"
crossorigin="anonymous">
</script>
{% endif %}
{% if config.extra.context == "production" %}
<link href="{{ config.extra.ghost.base_url }}/webmentions/receive/" rel="webmention">
<meta http-equiv="onion-location" content="{{ page.canonical_url | replace("https://www.privacyguides.org", "http://www.xoe4vn5uwdztif6goazfbmogh6wh5jc4up35bqdflu6bkdc5cas5vjqd.onion") }}" />
{% if config.theme.language == "en" %}
<script defer src="{{ config.extra.ghost.base_url }}/public/ghost-stats.min.js?v=8037af1487"
data-stringify-payload="false"
data-datasource="analytics_events"
data-storage="localStorage"
data-host="{{ config.extra.ghost.base_url }}/.ghost/analytics/api/v1/page_hit"
tb_site_uuid="{{ config.extra.ghost.tb_site_uuid }}"
tb_post_uuid="undefined"
tb_post_type="null"
tb_member_uuid="undefined"
tb_member_status="undefined">
</script>
{% endif %}
{% endif %}
{% if page and page.meta and page.meta.schema %}
<script type="application/ld+json">
{{ page.meta.schema|tojson }}
</script>
{% endif %}
{% endblock %}
-51
View File
@@ -1,51 +0,0 @@
<!--
Copyright (c) 2016-2024 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2023-2024 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Site language selector -->
<div class="md-header__option">
<div class="md-select">
{% for alt in config.extra.alternate %}
{% if alt.lang == config.theme.language %}
<button class="md-header__button md-icon" aria-label="{{ lang.t('select.language') }}">
<img alt="{{ config.theme.language }}" class="twemoji" src="{{ alt.icon }}" width="20" height="20">
</button>
{% endif %}
{% endfor %}
<div class="md-select__inner">
<ul class="md-select__list">
{% for alt in config.extra.alternate %}
<li class="md-select__item">
<a
href="{{ "/" ~ alt.lang ~ "/" ~ page.url }}"
hreflang="{{ alt.lang }}"
class="md-select__link"
>
<img alt="{{ alt.lang }}" class="twemoji" src="{{ alt.icon }}" width="20" height="20">
{{ alt.name }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
-63
View File
@@ -1,63 +0,0 @@
<!--
Copyright (c) 2016-2024 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2024 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
{{ config.extra.privacy_guides.translation_stylesheet | url }}
-->
{% if page and page.meta and page.meta.cover %}
<div class="cover center-cropped">
<img itemprop="image" src="{{ 'assets/img/cover/' | url }}{{ page.meta.cover }}" alt="">
</div>
<h1>{{ page.title | d(config.site_name, true)}}</h1>
{% endif %}
<!-- Tags -->
{% include "partials/tags.html" %}
<!-- Actions -->
{% include "partials/actions.html" %}
{% if "\x3ch1" not in page.content and not page.meta.cover %}
<h1>{{ page.title | d(config.site_name, true)}}</h1>
{% endif %}
<!-- Page content -->
<div>
{{ page.content }}
</div>
<!-- Source file information -->
{% include "partials/source-file.html" %}
<!-- Was this page helpful? -->
{% include "partials/feedback.html" %}
{% set translation_notice = config.extra.privacy_guides.translation_notice %}
{% if config.theme.language == "en" %}
{% elif translation_notice %}
<div class="admonition info">
<p>{{ translation_notice.notice }} <strong><a href="https://crowdin.com/project/privacyguides">{{ translation_notice.cta }}</a></strong></p>
<p>You're viewing the {{ translation_notice.language }} copy of Privacy Guides, translated by our fantastic language team on <a href="https://crowdin.com/project/privacyguides">Crowdin</a>. If you notice an error, or see any untranslated sections on this page, please consider <a href="https://matrix.to/#/#pg-i18n:aragon.sh">helping out!</a></p>
</div>
{% endif %}
<!-- Comment system -->
{% include "partials/comments.html" %}
-45
View File
@@ -1,45 +0,0 @@
<!--
Copyright (c) 2024 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
{% set copyright = config.extra.privacy_guides.footer %}
<!-- Copyright information -->
<div class="md-copyright">
{% if copyright %}
<div class="md-copyright__highlight" title="This version of Privacy Guides was built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}">
{{ copyright.intro }}
<br />
{{ copyright.note }}
<br />
<a href='https://www.privacyguides.org/license' aria-label="More information about our website license.">
{% for icon in copyright.license %}
<span class="twemoji">{% include ".icons/" ~ icon ~ ".svg" %}</span>
{% endfor %}
</a>
{{ copyright.copyright.date }} {{ copyright.copyright.author }}
{% for link in copyright.links %}
<a href="{{ link.url }}">
<strong>{{ link.name }}</strong>
</a>
{% endfor %}
</div>
{% endif %}
</div>
-8
View File
@@ -1,8 +0,0 @@
<div class="md-header__option">
<div class="">
{% set icon = "material/heart" %}
<a href="https://www.privacyguides.org/{{ config.theme.language }}/about/donate/" class="md-header__button md-icon pg-red" title="Donate">
{% include ".icons/" ~ icon ~ ".svg" %}
</a>
</div>
</div>
-149
View File
@@ -1,149 +0,0 @@
<!--
Copyright (c) 2016-2024 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2023-2024 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
{% 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') }}.
<a href="https://www.privacyguides.org/">
<strong>Visit privacyguides.org for the latest version.</strong>
</a>
{% elif config.extra.context == "deploy-preview" %}
You're viewing an <strong>unreviewed preview</strong> of Privacy Guides built on {{ build_date_utc.strftime('%B %d, %Y at %I:%M%p') }}.
These previews are <strong>user-submitted</strong> and may not necessarily reflect the opinion of the site.
<a href="https://www.privacyguides.org/">
<strong>Visit privacyguides.org for current advice.</strong>
</a>
{% elif config.extra.context == "branch-deploy" %}
You're viewing a <strong>staging branch</strong> 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.
<a href="https://www.privacyguides.org/">
<strong>Visit privacyguides.org for current advice.</strong>
</a>
{% else %}{% endif %}{% endmacro %}
{% if notice() %}
<div data-md-color-scheme="default" data-md-component="outdated">
<aside class="md-banner md-banner--warning">
<div class="md-banner__inner md-grid md-typeset">
{{ notice() }}
</div>
</aside>
</div>
{% endif %}
<!-- Determine classes -->
{% 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 %}
<!-- Header -->
<header class="{{ class }}" data-md-component="header">
<nav
class="md-header__inner md-grid"
aria-label="{{ lang.t('header') }}"
>
<!-- Link to home -->
<a
href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}"
title="{{ config.site_name | e }}"
class="md-header__button md-logo"
aria-label="{{ config.site_name }}"
data-md-component="logo"
>
{% include "partials/logo.html" %}
</a>
<!-- Button to open drawer -->
<label class="md-header__button md-icon" for="__drawer">
{% set icon = config.theme.icon.menu or "material/menu" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</label>
<!-- Header title -->
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
{{ config.site_name }}
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
{% if page.meta and page.meta.title %}
{{ page.meta.title }}
{% else %}
{{ page.title }}
{% endif %}
</span>
</div>
</div>
</div>
<!-- Repository information -->
{% if config.repo_url %}
<div class="md-header__source">
{% include "partials/source.html" %}
</div>
{% endif %}
<!-- Button to open search modal -->
{% if "material/search" in config.plugins %}
<label class="md-header__button md-icon" for="__search">
{% set icon = config.theme.icon.search or "material/magnify" %}
{% include ".icons/" ~ icon ~ ".svg" %}
</label>
<!-- Search interface -->
{% include "partials/search.html" %}
{% endif %}
<!-- Site language selector -->
{% if config.extra.alternate and config.extra.language_switcher %}
{% include "partials/alternate.html" %}
{% endif %}
<!-- Color palette toggle -->
{% if config.theme.palette %}
{% if not config.theme.palette is mapping %}
{% include "partials/palette.html" %}
{% endif %}
{% endif %}
<!-- User preference: color palette -->
{% if not config.theme.palette is mapping %}
{% include "partials/javascripts/palette.html" %}
{% endif %}
{% include "partials/donate.html" %}
</nav>
<!-- Navigation tabs (sticky) -->
{% if "navigation.tabs.sticky" in features %}
{% if "navigation.tabs" in features %}
{% include "partials/tabs.html" %}
{% endif %}
{% endif %}
</header>
-27
View File
@@ -1,27 +0,0 @@
<!-- {#
Copyright (c) 2023 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
#} -->
<!-- {#
<img src="{{ 'assets/brand/logos/svg/logo/privacy-guides-rainbow-logo-notext.svg#only-light' | url }}" alt="logo">
<img src="{{ 'assets/brand/logos/svg/logo/privacy-guides-rainbow-logo-notext-darkbg.svg#only-dark' | url }}" alt="logo">
#} -->
<img src="{{ 'assets/brand/logos/svg/logo/privacy-guides-logo-notext.svg#only-light' | url }}" alt="logo" width="24" height="24">
<img src="{{ 'assets/brand/logos/svg/logo/privacy-guides-logo-notext-darkbg.svg#only-dark' | url }}" alt="logo" width="24" height="24">
-52
View File
@@ -1,52 +0,0 @@
<!-- {#
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2023 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
#} -->
<!-- Render navigation item -->
{% macro render(nav_item, ref = nav_item) %}
<!-- Navigation item with nested items -->
{% if nav_item.children %}
{% set first = nav_item.children | first %}
<!-- Recurse, if the first item has further nested items -->
{% if first.children %}
{{ render(first, ref) }}
<!-- Nested navigation link -->
{% else %}
<a href="{{ first.canonical_url | url }}" class="md-path__link" property="item" typeof="WebPage">
<span class="md-ellipsis" property="name">
{{ ref.title }}
</span>
</a>
{% endif %}
<!-- Navigation link -->
{% else %}
<a href="{{ nav_item.canonical_url | url }}" class="md-path__link" property="item" typeof="WebPage">
<span class="md-ellipsis" property="name">
{{ ref.title }}
</span>
</a>
{% endif %}
{% endmacro %}
-62
View File
@@ -1,62 +0,0 @@
<!-- {#
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2023 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
#} -->
{% import "partials/path-item.html" as item with context %}
<!-- Determine whether to show navigation path -->
{% if page.meta and page.meta.hide %}
{% set hidden = "hidden" if "path" in page.meta.hide %}
{% endif %}
<!-- Determine whether we have enough pages for rendering -->
{% set depth = page.ancestors | length %}
{% if nav.homepage %}
{% set depth = depth + 1 %}
{% endif %}
<!-- Navigation path (breadcrumbs) -->
{% if depth > 1 %}
{% set count = namespace(value=1) %}
<nav class="md-path" aria-label="{{ lang.t('nav') }}" {{ hidden }}>
<ol class="md-path__list" vocab="https://schema.org/" typeof="BreadcrumbList">
{% if nav.homepage %}
<li class="md-path__item" property="itemListElement" typeof="ListItem">
{{ item.render(nav.homepage) }}
<meta property="position" content="{{ count.value }}">
{% set count.value = count.value + 1 %}
</li>
{% endif %}
{% for nav_item in page.ancestors | reverse %}
<li class="md-path__item" property="itemListElement" typeof="ListItem">
{{ item.render(nav_item) }}
<meta property="position" content="{{ count.value }}">
{% set count.value = count.value + 1 %}
</li>
{% endfor %}
<li property="itemListElement" typeof="ListItem" hidden>
<meta property="name" content="{{ page.title }}">
<meta property="position" content="{{ count.value }}">
</li>
</ol>
</nav>
{% endif %}
-103
View File
@@ -1,103 +0,0 @@
<!--
Copyright (c) 2016-2024 Martin Donath <martin.donath@squidfunk.com>
Copyright (c) 2024 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Render date of last update -->
{% macro render_updated(date) %}
<span class="md-source-file__fact">
<span class="md-icon" title="{{ lang.t('source.file.date.updated') }}">
{% include ".icons/material/clock-edit-outline.svg" %}
</span>
{{ date }}
</span>
{% endmacro %}
<!-- Render date of creation -->
{% macro render_created(date) %}
<span class="md-source-file__fact">
<span class="md-icon" title="{{ lang.t('source.file.date.created') }}">
{% include ".icons/material/clock-plus-outline.svg" %}
</span>
{{ date }}
</span>
{% endmacro %}
<!-- ---------------------------------------------------------------------- -->
<!-- Render authors -->
{% macro render_authors(authors) %}
{% set git_authors = config.plugins.get("git-authors") %}
<span class="md-source-file__fact">
<span class="md-icon" title="{{ lang.t('source.file.contributors') }}">
{% if authors | length == 1 %}
{% include ".icons/material/account.svg" %}
{% else %}
{% include ".icons/material/account-group.svg" %}
{% endif %}
</span>
<nav>
{% for author in authors %}
{%- if loop.index0 < 2 %}{{- author.name ~ ' (' ~ author.contribution ~ ')' -}}
{%- else -%}<abbr title="{{- author.contribution -}}">{{- author.name -}}</abbr>{%- endif -%}
{%- if loop.revindex > 1 %}, {% endif -%}
{% endfor %}
</nav>
</span>
{% endmacro %}
<!-- ---------------------------------------------------------------------- -->
<!-- Determine date of last update -->
{% 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 %}
<!-- Determine date of creation -->
{% if page.meta.git_creation_date_localized %}
{% set created = page.meta.git_creation_date_localized %}
{% endif %}
{% endif %}
<!-- Source file information -->
{% if updated or created or git_info %}
<aside class="md-source-file">
<!-- Date of last update -->
{% if updated %}
{{ render_updated(updated) }}
{% endif %}
<!-- Date of creation -->
{% if created %}
{{ render_created(created) }}
{% endif %}
<!-- Authors (git-authors plugin) -->
{% if git_info %}
{{ render_authors(git_info.get("page_authors")) }}
{% endif %}
</aside>
{% endif %}
-41
View File
@@ -1,41 +0,0 @@
<!-- Post excerpt -->
<article class="md-post md-post--excerpt">
<header class="md-post__header">
<!-- Post metadata -->
<div class="md-post__meta md-meta">
<ul class="md-meta__list">
<!-- Post date -->
<li class="md-meta__item">
<time datetime="{{ post.config.date.created }}">
{{- post.config.date.created | date -}}
</time>
{#- Collapse whitespace -#}
</li>
<!-- Post readtime -->
{% if post.config.readtime %}
{% set time = post.config.readtime %}
<li class="md-meta__item">
{{ "# min watch" | replace("#", time) }}
</li>
{% endif %}
</ul>
</div>
</header>
<!-- Post content -->
<div class="md-post__content md-typeset">
<h2 class="toclink">
<a href="{{ post.url | url }}">
{{ post.title | d(config.site_name, true)}}
</a>
</h2>
<div>
<a href="{{ post.url | url }}">
<img width="100%" height="100%" src="{{ post.meta.thumbnail }}"></img>
</a>
</div>
</div>
</article>
-129
View File
@@ -1,129 +0,0 @@
<!--
Copyright (c) 2024 Jonah Aragon <jonah@triplebit.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
{% extends "blog-post.html" %}
{% import "partials/nav-item.html" as item with context %}
{% block extra_sidebar %}
<!-- Product review information -->
{% if page.meta.review %}
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
<span>Our rating</span>
</span>
</div>
<div class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<span itemprop="reviewRating" itemscope itemtype="https://schema.org/Rating">
<meta itemprop="bestRating" content="5" />
<meta itemprop="worstRating" content="0.5" />
<span class="md-nav__link" itemprop="ratingValue" content="{{ page.meta.review.rating }}" title="Rating: {{ page.meta.review.rating }} / 5">
{% for i in range(1, 6) %}
{% if i <= page.meta.review.rating %}
{% include ".icons/material/star.svg" %}
{% else %}
{% if i - 0.5 == page.meta.review.rating %}
{% include ".icons/material/star-half-full.svg" %}
{% else %}
{% include ".icons/material/star-outline.svg" %}
{% endif %}
{% endif %}
{% endfor %}
</span>
</span>
</li>
<li class="md-nav__item">
<span class="md-nav__link">
<span itemprop="positiveNotes" itemscope itemtype="https://schema.org/ItemList">
<strong itemprop="name">Pros:</strong>
<span>
<ul class="pg-proconlist">
{% for pro in page.meta.review.pros %}
<li itemprop="itemListElement">{{ pro }}</li>
{% endfor %}
</ul>
</span>
</span>
</span>
</li>
<li class="md-nav__item">
<span class="md-nav__link">
<span itemprop="negativeNotes" itemscope itemtype="https://schema.org/ItemList">
<strong itemprop="name">Cons:</strong>
<span>
<ul class="pg-proconlist">
{% for con in page.meta.review.cons %}
<li itemprop="itemListElement">{{ con }}</li>
{% endfor %}
</ul>
</span>
</span>
</span>
</li>
</ul>
</div>
</li>
</ul>
<ul class="md-post__meta md-nav__list" itemprop="itemReviewed" itemscope itemtype="https://schema.org/{{ page.meta.review.type }}">
<meta itemprop="applicationCategory" content="{{ page.meta.review.category }}" />
<meta itemprop="applicationSubCategory" content="{{ page.meta.review.subcategory }}" />
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
<span itemprop="name">{{ page.meta.review.name }}</span> summary
</span>
<meta itemprop="alternateName" content="{{ page.meta.review.alternateName }}" />
</div>
<div class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<span class="md-nav__link">
<span itemprop="offers" itemscope itemtype="https://schema.org/Offer">
<strong>Price:</strong>
{% if page.meta.review.price == 0 %}
<span itemprop="price" content="0">Free</span>
{% else %}
<span itemprop="priceCurrency" content="USD">$</span><span itemprop="price" content="{{ page.meta.review.price }}">{{ page.meta.review.price }}</span>
{% endif %}
{% if page.meta.review.period %}
/ {{ page.meta.review.period }}
{% endif %}
</span>
</span>
</li>
<li class="md-nav__item">
<span class="md-nav__link">
<strong>Website:</strong>
<a itemprop="url" href="{{ page.meta.review.website }}"><em>{{ page.meta.review.website.rpartition("//")[-1].partition("/")[0] }}</em></a>
</span>
</li>
</ul>
</div>
</li>
</ul>
{% endif %}
</nav>
{% endblock %}
-259
View File
@@ -1,259 +0,0 @@
<!--
Copyright (c) 2024-2025 Jonah Aragon <jonah@triplebit.net>
Copyright (c) 2016-2025 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
{% extends "main.html" %}
{% import "partials/nav-item.html" as item with context %}
{% block htmltitle %}
<title>[Video] {{ page.title | striptags }} - {{ config.site_name }}</title>
{% endblock %}
{% block extrahead %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "{{ page.title }}",
"description": "{{ page.meta.description }}",
"thumbnailUrl": [
"{{ page.meta.thumbnail }}"
],
"uploadDate": "{{ page.meta.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}",
"embedUrl": "{{ page.meta.embed }}"
}
</script>
<link rel="alternate" type="application/json+oembed" href="https://neat.tube/services/oembed?url={{ page.meta.peertube | urlencode |replace('/', '%2F')}}">
{% endblock %}
<!-- Page content -->
{% block container %}
<div class="md-content md-content--post" data-md-component="content">
<!-- Sidebar -->
<div
class="md-sidebar md-sidebar--post"
data-md-component="sidebar"
data-md-type="navigation"
>
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner md-post">
<nav class="md-nav md-nav--primary">
<!-- Back to overview link -->
<div class="md-post__back">
<div class="md-nav__title md-nav__container">
<a href="{{ page.parent.url | url }}" class=" md-nav__link">
{% include ".icons/material/arrow-left.svg" %}
<span class="md-ellipsis">
{{ lang.t("blog.index") }}
</span>
</a>
</div>
</div>
<!-- Post authors -->
{% if page.authors %}
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
Host
</span>
</div>
</li>
</ul>
<div class="md-post__authors md-typeset">
{% for author in page.authors %}
<div class="md-profile md-post__profile">
<span class="md-author md-author--long">
<img src="{{ author.avatar | url }}" alt="{{ author.name }}" />
</span>
<span class="md-profile__description">
<strong>
{% if author.url %}
<a href="{{ author.url }}">{{ author.name }}</a>
{% else %}
{{ author.name }}
{% endif %}
</strong>
<br />
{{ author.description }}
</span>
</div>
{% endfor %}
</div>
{% endif %}
<!-- Post metadata -->
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
{{ lang.t("blog.meta") }}
</span>
</div>
<nav class="md-nav">
<ul class="md-nav__list">
<!-- Post date -->
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/calendar.svg" %}
<time
datetime="{{ page.config.date.created.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}"
class="md-ellipsis"
>
{{- page.config.date.created | date -}}
</time>
</div>
</li>
<!-- Post date updated -->
{% if page.config.date.updated %}
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/calendar-clock.svg" %}
<time
datetime="{{ page.config.date.updated.strftime('%Y-%m-%dT%H:%M:%S+00:00') }}"
class="md-ellipsis"
>
{{- page.config.date.updated | date -}}
</time>
</div>
</li>
{% endif %}
<!-- Post categories -->
{% if page.categories %}
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/bookshelf.svg" %}
<span class="md-ellipsis">
{{ lang.t("blog.categories.in") }}
{% for category in page.categories %}
<a href="{{ category.url | url }}">
{{- category.title -}}
</a>
{%- if loop.revindex > 1 %}, {% endif -%}
{% endfor -%}
</span>
</div>
</li>
{% endif %}
<!-- Post readtime -->
{% if page.config.readtime %}
{% set time = page.config.readtime %}
<li class="md-nav__item">
<div class="md-nav__link">
{% include ".icons/material/clock-outline.svg" %}
<span class="md-ellipsis">
{{ "# minute watch" | replace("#", time) }}
</span>
</div>
</li>
{% endif %}
</ul>
</nav>
</li>
</ul>
<!-- Related links -->
{% if page.config.links %}
<ul class="md-post__meta md-nav__list">
<li class="md-nav__item md-nav__item--section">
<div class="md-post__title">
<span class="md-ellipsis">
{{ lang.t("blog.references") }}
</span>
</div>
<!-- Render related links -->
<nav class="md-nav">
<ul class="md-nav__list">
{% for nav_item in page.config.links %}
{% set path = "__ref_" ~ loop.index %}
{{ item.render(nav_item, path, 1) }}
{% endfor %}
</ul>
</nav>
</li>
</ul>
{% endif %}
</nav>
<!-- Table of contents, if integrated -->
{% if "toc.integrate" in features %}
{% include "partials/toc.html" %}
{% endif %}
</div>
</div>
</div>
<!-- Page content ?title=0&warningTitle=0 -->
<article class="md-content__inner md-typeset">
{% block content %}
<!-- Tags -->
{% include "partials/tags.html" %}
<!-- Actions -->
{% include "partials/actions.html" %}
{% if "\x3ch1" not in page.content and not page.meta.cover %}
<h1>{{ page.title | d(config.site_name, true)}}</h1>
{% endif %}
<div>
<div style="position: relative; padding-top: 56.25%;">
<iframe width="100%" height="100%" src="{{ page.meta.embed }}?autoplay=1&title=0&p2p=0" allow="autoplay" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups allow-forms" style="position: absolute; inset: 0px;"></iframe>
</div>
</div>
<p>
<a class="md-button md-button--primary" href="{{ page.meta.youtube }}">
<span class="twemoji">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.498 6.186a3.02 3.02 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.02 3.02 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.02 3.02 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.02 3.02 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814M9.545 15.568V8.432L15.818 12z"/></svg>
</span>
Watch on YouTube</a>
<a class="md-button md-button--primary" href="{{ page.meta.peertube }}">
<span class="twemoji">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 6.545v10.91L20.727 12M3.273 12v12L12 17.455M3.273 0v12L12 6.545"/></svg>
</span>
Watch on PeerTube</a>
</p>
<!-- Page content -->
<div>
{{ page.content }}
</div>
<!-- Source file information -->
{% include "partials/source-file.html" %}
<!-- Was this page helpful? -->
{% include "partials/feedback.html" %}
{% endblock %}
</article>
</div>
{% endblock %}
-26
View File
@@ -1,26 +0,0 @@
{% extends "main.html" %}
<!-- Page content -->
{% block container %}
<div class="md-content" data-md-component="content">
<div class="md-content__inner">
<!-- Header -->
<header class="md-typeset">
{{ page.content }}
</header>
<!-- Posts -->
{% for post in posts %}
{% include "partials/video.html" %}
{% endfor %}
<!-- Pagination -->
{% if pagination %}
{% block pagination %}
{% include "partials/pagination.html" %}
{% endblock %}
{% endif %}
</div>
</div>
{% endblock %}
-19
View File
@@ -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."
-64
View File
@@ -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"
-20
View File
@@ -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'<a href="{member['url']}" target="_blank" title="@{member['username']}" class="mdx-donors__item"><img loading="lazy" src="{member['avatar']}"></a>'
# Append the count of private members
if members_data['unaccounted'] > 0:
html_output += f'<a href="https://donate.magicgrants.org/privacyguides" class="mdx-donors__item mdx-donors__item--private">+{members_data["unaccounted"]}</a>'
print(html_output)
-91
View File
@@ -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+="<li class='discourse-topic'>"
html_output+="<p class='discourse-title'><a href='https://discuss.privacyguides.net/t/${id}'><strong>${title}</strong></a></p>"
html_output+="<hr>"
html_output+="<p class='discourse-author'>"
html_output+="<span class='discourse-author'>"
if [[ -z "$BUILD_OFFLINE" ]]; then
html_output+="<img src='https://forum-cdn.privacyguides.net/user_avatar/discuss.privacyguides.net/${author_username}/48/1.png' loading='lazy' aria-hidden='true' alt='${author_username}' width='20' height='20' class='middle'>"
fi
html_output+="<span> Posted by <em>$author_username</em></span>"
html_output+="</span>"
html_output+="</p>"
html_output+="<p class='discourse-data'>"
html_output+="<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><title>eye</title><path d='M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z' /></svg></span>"
html_output+="<span class='discourse-views'> ${views} </span>"
html_output+="<span class='twemoji pg-red'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><title>heart</title><path d='M12,21.35L10.55,20.03C5.4,15.36 2,12.27 2,8.5C2,5.41 4.42,3 7.5,3C9.24,3 10.91,3.81 12,5.08C13.09,3.81 14.76,3 16.5,3C19.58,3 22,5.41 22,8.5C22,12.27 18.6,15.36 13.45,20.03L12,21.35Z' /></svg></span>"
html_output+="<span class='discourse-likes'> ${like_count} </span>"
html_output+="<span class='twemoji'><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><title>reply</title><path d='M10,9V5L3,12L10,19V14.9C15,14.9 18.5,16.5 21,20C20,15 17,10 10,9Z' /></svg></span>"
html_output+="<span class='discourse-replies'> ${reply_count} </span>"
html_output+="</p>"
html_output+="</li>"
done
tempfile=$(mktemp)
echo "$html_output" > "$tempfile"
# Insert the HTML output between the comments in index.html
sed -i'.bak' "/<!-- start $tag -->/,/<!-- end $tag -->/{//!d;}; /<!-- start $tag -->/r $tempfile" "$destination"
-20
View File
@@ -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