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:
@@ -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
@@ -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"]
|
||||
|
Before Width: | Height: | Size: 797 B After Width: | Height: | Size: 797 B |
Submodule theme/assets/brand deleted from e567eb3f0e
@@ -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
@@ -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 %}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
@@ -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 %}
|
||||
@@ -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>
|
||||
@@ -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" %}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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">
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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>
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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."
|
||||
@@ -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"
|
||||
@@ -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)
|
||||
@@ -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"
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user