Clean up the cruft

This commit is contained in:
Jonah Aragon 2021-01-15 23:46:23 -06:00
parent e2bc10d8e8
commit 960181d8b2
No known key found for this signature in database
GPG Key ID: 6A957C9A9A9429F7
31 changed files with 59 additions and 697 deletions

32
.github/CODEOWNERS vendored
View File

@ -1,32 +0,0 @@
# Editorial Team
*.md @privacytools/editorial
/assets/ @privacytools/editorial
/pages/ @privacytools/editorial
/_includes/sections/ @privacytools/editorial
/index.html @privacytools/editorial
/font/ @dawidpotocki
# Administration Related Files
/pages/donate.html @JonahAragon @BurungHantu1605
/pages/notices.md @JonahAragon
/pages/sponsors.html @JonahAragon
/_includes/sponsors/ @JonahAragon
/assets/img/svg/3rd-party/sponsors/ @JonahAragon
/README.md @JonahAragon @BurungHantu1605
/assets/js/redirects.js @JonahAragon
/.well-known/ @JonahAragon
/404.html @JonahAragon
/.github/CODEOWNERS @JonahAragon @BurungHantu1605
/.github/FUNDING.yml @JonahAragon @BurungHantu1605
/LICENSE.txt @JonahAragon @BurungHantu1605
/.travis.yml @JonahAragon @Shifterovich @nitrohorse
/CNAME @JonahAragon
/nginx/ @JonahAragon
# WKD
/.well-known/openpgpkey/hu/mrobfoimg5wz876m7kp6spyu66941weo @Mikaela
/.well-known/openpgpkey/hu/nqspr7yd4bgs8ry43zbzpjd45p4iug5b @dawidpotocki
/.well-known/openpgpkey/hu/dnrefmbtd6i58w8xfy4imj94cmbw3u3h @dngray
/.well-known/openpgpkey/hu/rse6m7dxfdjo86qhyj6wqs1hcdcp7em4 @danarel
/.well-known/openpgpkey/hu/zt71pstaerw1jpa5ru3borqmfsnbwnf6 @nitrohorse
/.well-known/openpgpkey/hu/omn8s4nziz8zmyz6f756asto39gefr63 @JonahAragon

View File

@ -21,68 +21,67 @@ Please read this document in full before contributing.
## Rules
- Be nice and respectful.
- English only.
- Be constructive.
- Please feel free to *review changes* in the *files changed* tab of any
pull request at any time.
- See also our [Code of Conduct](https://github.com/privacytools/.github/blob/master/CODE_OF_CONDUCT.md)
## Quality over Quantity
We're trying to keep it simple and promote the best tools, not all of them.
Something meeting the below criteria ***does not automatically qualify it to be included on the site!***
## Software Criteria
### Main
### Primary Requirements
- Easy to use. Could your mother use that tool or service? Usability is most important.
- Cross-platform / Accessible.
- Privacy respecting.
- Open Source / Free Software is preferred but not required.
- Privacy respecting (duh!).
### Primary Recommendations
- Open Source / Free Software.
- Prioritize Products without Vendor Lock-in (decentralized/self-hostable) or data interoperability.
- Cross-platform / Accessible.
- Easy to use. Could your mother use that tool or service? Usability is most important.
There can be exceptions if no software is available that meet the criteria.
If no software exists in a certain category that meets *all* these criteria, exceptions can be made on a case-by-case basis.
Note: This criteria applies to all of the Privacy Guides website and recommendations.
### Service Provider Information
### Providers
- Products and services listed as "Providers" SHOULD be prioritized primarily based on their jurisdiction (i.e. how privacy-respecting the laws of their home country are).
- Prioritize Products by privacy respecting nationality.
### DNS Provider Requirements
### DNS
- Supports DoH or DoT (We love DNSCrypt, but there is already https://github.com/DNSCrypt/dnscrypt-resolvers which is directly supported by dnscrypt-proxy, so we don't consider useful to list providers only supporting it).
- Supports DNSSEC (https://dnssec.vs.uni-due.de/ can test your current DNS provider).
- Doesn't log IP addresses during normal operation (If your suggestion logs, please compare its privacy policy with other servers on our table that keep logs).
- Preferably supports QNAME minimization (if you have access to the dig command, `dig +short txt qnamemintest.internet.nl` or `Resolve-DnsName -Type TXT -Name qnamemintest.internet.nl` if you are on Windows 10)
- MUST support DoH or DoT (DNSCrypt is great too, but there is already https://github.com/DNSCrypt/dnscrypt-resolvers which is directly supported by dnscrypt-proxy, so we don't consider it useful to list providers exclusively supporting it).
- MUST support DNSSEC (https://dnssec.vs.uni-due.de/ can test your current DNS provider).
- MUST NOT log IP addresses during normal operation (If your suggested provider *ever* logs, please compare its privacy policy with other servers on our table that keep logs).
- SHOULD support QNAME minimization (if you have access to the dig command, `dig +short txt qnamemintest.internet.nl` or `Resolve-DnsName -Type TXT -Name qnamemintest.internet.nl` if you are on Windows 10).
### VPN
See https://www.privacytools.io/providers/vpn/#criteria for more details.
See https://privacyguides.org/providers/vpn/#criteria for full details, the following is an incomplete summary.
- Prioritize Products by privacy respecting nationality.
- Cannot be based in USA or UK.
- Must be accessible via Open Source Software (e.g. OpenVPN, WireGuard)
- Use Encryption
- Accept Cryptocurrency
- No logging policy
- MUST NOT be based in USA or UK.
- MUST be accessible via Open Source Software (e.g. OpenVPN, WireGuard).
- MUST Use Strong Encryption.
- SHOULD Accept Cryptocurrency.
- MUST have a no logging policy.
### Email
- Outside of USA
- Support SMTP SSL
- Accessible Using Open Source Software (e.g. allows IMAP)
See https://privacyguides.org/providers/email/#criteria for full details, the following is an incomplete summary.
- MUST Support SMTP SSL.
- SHOULD be accessible with standard/FOSS software (e.g. allows IMAP).
### Hardware
- Must be [H-Node Class A](https://h-node.org/wiki/page/en/compatibility-classes) or equivalent (if applicable)
- Must prioritize hardware certifications like [RYF](https://ryf.fsf.org/), [OSHWA](https://certification.oshwa.org/), and OSI when available.
- Cannot lock users to a particular platform.
- SHOULD be [H-Node Class A](https://h-node.org/wiki/page/en/compatibility-classes) or equivalent (if applicable)
- SHOULD prioritize hardware certifications like [RYF](https://ryf.fsf.org/), [OSHWA](https://certification.oshwa.org/), and OSI when available.
- SHOULD NOT lock users to a particular platform.
### Software
- Must be able to download over encrypted network (can be a mirror)
- Must be Open Source Software
- MUST be able to download over encrypted network (can be a mirror).
- SHOULD be Free and Open Source Software.
### Encryption
@ -96,23 +95,5 @@ See https://www.privacytools.io/providers/vpn/#criteria for more details.
## Images
- SVG file format is strongly preferred. PNG files can be used as a fallback if images are too complex or otherwise unsuitable as a vector format.
- We like to optimize all SVGs we add to the site. [This](https://github.com/privacytools/privacytools.io/pull/1968#issuecomment-652773633) is a helpful guide as to how we do it with [Inkscape](https://inkscape.org/)
- Some SVGs generated by Illustrator or Sketch are broken, therefore copying the SVG content to a new canvas is sometimes required. (We found this with the Mailcow logo). Looked fine in local builds but was wrong once rendered through netlify preview etc.
- We only have SVGs that have a canvas size of 128x128px or 384x128px.
- Provider logo dimensions are 384px x 128px ([example](https://github.com/privacytools/privacytools.io/blob/master/assets/img/svg/3rd-party/mullvad.svg))
- Tool logo dimensions are 128px x 128px ([SVG example](https://github.com/privacytools/privacytools.io/blob/master/assets/img/svg/3rd-party/firefox_browser.svg), [PNG example](https://github.com/privacytools/privacytools.io/blob/master/assets/img/png/3rd-party/claws_mail.png))
## Licensing
The content and original technology of this website is made available under the Creative Commons Zero v1.0 Universal license text. Some files or folders may include works from other projects with separate licenses, and will be marked as such. **By contributing to this repository, contributors do not necessarily agree to sign a CLA or legally transfer their copyright to the project, but they do at a minimum agree to license their work under the current license of this repository: In this case, the Creative Commons Zero v1.0 Universal.**
## Contributing via email
If you have a GitHub account, or are able to create a GitHub account, we ask that you do not submit issues via email.
If you do not have a GitHub account, you may submit software recommendations or other issues via email without creating a GitHub account by emailing `privacytools@fire.fundersclub.com`. The subject line of your email will become the issue title. Your name will be included in the posted issue.
This repository uses [@fire-bot](https://github.com/fire-bot), [a service](https://fire.fundersclub.com) from FundersClub that converts incoming emails to GitHub issues. By sending a message to the email address above, you will be sharing your email address and message content with FundersClub. FundersClub has a privacy policy at [https://fundersclub.com/catalyst-privacy-policy/](https://fundersclub.com/catalyst-privacy-policy/) you should review before using this service. Any attachments you send via this service may be stored indefinitely by FundersClub for the purpose of making them available within the submitted GitHub issue.
You can view an example of the created issues' format at [#1444](https://github.com/privacytools/privacytools.io/issues/1444).
- Provider logo dimensions are 384px x 128px ([example](/assets/img/legacy_svg/3rd-party/mullvad.svg))
- Tool logo dimensions are 128px x 128px ([SVG example](/assets/img/leagcy_svg/3rd-party/firefox_browser.svg), [PNG example](/assets/img/legacy_png/3rd-party/claws_mail.png))

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
github: jonaharagon

View File

@ -1,8 +1,6 @@
---
name: "🆕 Software Suggestion"
about: Suggest new software that enhances privacy.
title: "🆕 Software Suggestion | "
labels: 🆕 software suggestion
name: "🆕 Software or Provider Suggestion"
about: "Suggest something new for us to look at!"
---
## Basic Information
@ -14,14 +12,11 @@ labels: 🆕 software suggestion
## Description
## Additional context
## Why I am making the suggestion
<!-- Anything else you would like to tell us about the software? -->
<!-- Anything you would like to tell us about the software? -->
## My connection with the software
<!-- Are you the author? Enthustiastic or early adopter? Friends with the author or requested by them to open the isue? An employee of the software maker? -->
- [ ] I will keep the issue up-to-date if something I have said changes or I remember a connection with the software.
<!-- Additionally, please share any connection you may have with the software/organization/company/provider.
Are you the author? Enthusiastic or early adopter?
Friends with the author or requested by them to open the issue?
An employee of the software maker? -->

View File

@ -1,21 +1,15 @@
---
name: "❌ Software Removal"
about: Suggest the removal of outdated, insecure, or otherwise bad software.
title: "❌ Software Removal | "
labels: ❌ software removal
---
## Description
## Additional context
## Why I am making the suggestion
<!-- Anything else you would like to tell us? -->
<!-- Anything you would like to tell us about the software? -->
## My connection with the software
<!-- Are you the author? Competitor? Just hating the software with passsion for some reason? -->
- [ ] I will keep the issue up-to-date if something I have said changes or I remember a connection with the software.
<!-- Additionally, please share any connection you may have with the software/organization/company/provider.
Are you the author? A former contributor?
Someone who just passionately dislikes the project? :) -->

View File

@ -1,8 +1,8 @@
---
name: "✨ Feature Suggestion"
about: Suggest a new feature/section/page for the website.
title: "✨ Feature Suggestion | "
labels: ✨ enhancement
---
<!-- This is for suggesting some new feature for the website itself, or a new category of software, or anything like that. It is not for recommending new specific software, go back and choose the right option if that's what you wanted :) -->
## Description

View File

@ -1,21 +1,8 @@
---
name: "📝 Content Correction"
about: Report any inaccurate, incorrect, or outdated information on the website.
title: "📝 Correction | "
labels: 📝 correction
---
## Description
## Why I am making the suggestion
<!-- Anything you would like to tell us about the software? -->
## My connection with the software
<!-- Are you the author? Competitor? Just hating the software with passsion for some reason? -->
- [ ] I will keep the issue up-to-date if something I have said changes or I remember a connection with the software.
**URL of affected page:**

View File

@ -9,8 +9,8 @@ labels: 🌐 website issue
READ ME FIRST:
This is NOT the place to request changes to the content of the website.
This is NOT the place to report issues with our services. (That is https://github.com/privacytools/services/issues/new)
This is ONLY for reporting bugs or technical issues with www.privacytools.io.
This is NOT the place to report issues with our services like Matrix.
This is ONLY for reporting bugs or technical issues with www.privacyguides.org, the website.
-->

View File

@ -1,21 +0,0 @@
---
name: "🇦🇶 Translation Issue"
about: Report any issue with a translated site.
title: "🇦🇶 Translated Site Issue | "
labels: 🌐 website issue, 🇦🇶 translations
---
## Site Affected
**Domain:**
<!-- Add an x to the box below if true [x] -->
- [ ] This site is listed as a translated version of the site in the privacytools.io navbar.
## Description
<!--
## Screenshots
Please add screenshots if applicable
-->

View File

@ -1,7 +0,0 @@
contact_links:
- name: Services issues
url: https://github.com/privacytools/services/issues/new/choose
about: Open any issues/bug reports/requests related to our services (Mastodon, Matrix, etc) here.
- name: Privacy Guides Community
url: https://forum.privacytools.io/
about: Please ask any generic questions on our forum.

View File

@ -1,17 +0,0 @@
<!-- PLEASE READ OUR CODE OF CONDUCT (https://wiki.privacytools.io/view/PrivacyTools:Code_of_Conduct) AND CONTRIBUTING GUIDELINES (https://github.com/privacytools/privacytools.io/blob/master/.github/CONTRIBUTING.md) BEFORE SUBMITTING -->
## Description
Resolves: #none <!-- A link to the (discussion) issue resolved by this pull request. There must be a discussion issue here at GitHub, before a pull request of software/service suggestion can be considered for merging. -->
#### Check List <!-- Please add an x in each box below, like so: [x] -->
- [ ] I understand that by not opening an issue about a software/service/similar addition/removal, this pull request will be closed without merging.
- [ ] I have read and understand [the contributing guidelines](https://github.com/privacytools/privacytools.io/blob/master/.github/CONTRIBUTING.md).
- [ ] The project is [Free Libre](https://en.wikipedia.org/wiki/Free_software) and/or [Open Source](https://en.wikipedia.org/wiki/Open-source_software) Software
* Netlify preview for the mainly edited page: <!-- link or Non Applicable? Edit this in afterwards -->
* Code repository of the project (if applicable):

16
.github/stale.yml vendored
View File

@ -1,16 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- approved
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@ -1,113 +0,0 @@
==================================================================
https://keybase.io/privacytools
--------------------------------------------------------------------
I hereby claim:
* I am an admin of https://privacytools.io
* I am privacytools (https://keybase.io/privacytools) on keybase.
* I have a public key ASAkK34bChwgcSbs249aVEhWUYhfn9PYB0yx8y5hZEdLIAo
To do so, I am signing this object:
{
"body": {
"key": {
"eldest_kid": "0120242b7e1b0a1c207126ecdb8f5a54485651885f9fd3d8074cb1f32e6164474b200a",
"host": "keybase.io",
"kid": "0120242b7e1b0a1c207126ecdb8f5a54485651885f9fd3d8074cb1f32e6164474b200a",
"uid": "81b38301543203013da707b866f13619",
"username": "privacytools"
},
"merkle_root": {
"ctime": 1554941326,
"hash": "398a76706f68401cae4b733ff7c2bd7ad2fb40598604dd10f49a1f04db1173b26caf1c0bd480689d3d5f30c6b60190a69edc76e62d7ad1c16e19e0432c16b21e",
"hash_meta": "ee549365960473d4eec7331ecf3de0e38340c44a4ee61898ca542940b2e2d765",
"seqno": 5139256
},
"service": {
"entropy": "mEBRbFG3gU9gRt24VacvKVGm",
"hostname": "privacytools.io",
"protocol": "https:"
},
"type": "web_service_binding",
"version": 2
},
"client": {
"name": "keybase.io go client",
"version": "3.2.1"
},
"ctime": 1554941350,
"expire_in": 504576000,
"prev": "9947a42be64540ab809b87df765f3139cedbada82ae04012e97c94060fbed4f8",
"seqno": 20,
"tag": "signature"
}
which yields the signature:
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgJCt+GwocIHEm7NuPWlRIVlGIX5/T2AdMsfMuYWRHSyAKp3BheWxvYWTESpcCFMQgmUekK+ZFQKuAm4ffdl8xOc7bragq4EAS6XyUBg++1PjEIDwvpOGptD6jbBIm52/LR9l4T2xslWcgKtq6zH2HvOGKAgHCo3NpZ8RAeFaHjsUF7kqDas46rMXC1KDIJE520BD57OMws6dnJxbMmJf8O3rRNrLCineR5vpetxjtxGYrhmTWPtgSyYQhD6hzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEIGJSitnvAgdVMG+AyewIHT4cBbbWjGh4/cesl/uzqfQZo3RhZ80CAqd2ZXJzaW9uAQ==
And finally, I am proving ownership of this host by posting or
appending to this document.
View my publicly-auditable identity here: https://keybase.io/privacytools
==================================================================
==================================================================
https://keybase.io/jonaharagon
--------------------------------------------------------------------
I hereby claim:
* I am an admin of https://privacytools.io
* I am jonaharagon (https://keybase.io/jonaharagon) on keybase.
* I have a public key ASBD2KZniUf0KM-4GzlgrMnnJzEg54hDvlsnGRExgP2IfAo
To do so, I am signing this object:
{
"body": {
"key": {
"eldest_kid": "01014354fcf62ba0752c5ceb6175fbecef4205b22adc102cb9f4963546960039f9c20a",
"host": "keybase.io",
"kid": "012043d8a6678947f428cfb81b3960acc9e7273120e78843be5b2719113180fd887c0a",
"uid": "3164c4d37d2d2bea011091787d7bc119",
"username": "jonaharagon"
},
"merkle_root": {
"ctime": 1554921408,
"hash": "3e5c007341d4b02dbe29217419189fa111e0dda3c3e9749540f98e85d769fdc7f0587228446bebc9d114535e75c7fbe2d81dbf1d6a9998add9a9b661eabccffa",
"hash_meta": "d346ffeac7eb4a94ff2cd518a27ed5cb745933316b4a9e91f102fd0c01118a63",
"seqno": 5137134
},
"service": {
"entropy": "3MGOPdt1pbQJ3jJphywjT9e9",
"hostname": "privacytools.io",
"protocol": "https:"
},
"type": "web_service_binding",
"version": 2
},
"client": {
"name": "keybase.io go client",
"version": "3.2.1"
},
"ctime": 1554921422,
"expire_in": 504576000,
"prev": "0c6f534ada5683036a1cd98291a995386925a572742e1aa43b2eb20394879ae3",
"seqno": 159,
"tag": "signature"
}
which yields the signature:
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgQ9imZ4lH9CjPuBs5YKzJ5ycxIOeIQ75bJxkRMYD9iHwKp3BheWxvYWTES5cCzJ/EIAxvU0raVoMDahzZgpGplThpJaVydC4apDsusgOUh5rjxCBbnzb214v7MAMQHsGX2UxkYOPGr+WPD0WitCcDTTHkbQIBwqNzaWfEQByeB7GH1rHDvmFL8OZTS7xZ7oq8nbt/ZKJK8mFYoV0rym4akSdPiuzwP013lSH9msC3PhzpWSSTCmZk7OITtQGoc2lnX3R5cGUgpGhhc2iCpHR5cGUIpXZhbHVlxCBSTSnkhCA3soIAlMBA5R2DIINdDx0mk1xlj07KqwrwIKN0YWfNAgKndmVyc2lvbgE=
And finally, I am proving ownership of this host by posting or
appending to this document.
View my publicly-auditable identity here: https://keybase.io/jonaharagon
==================================================================

View File

@ -1,19 +0,0 @@
{
"@context" : "http://schema.org",
"@type" : "Organization",
"organizationType" : "Informal collective",
"name" : "PrivacyTools",
"tagLine" : "Private Services: No Ads, No Google Analytics, No Affiliates, and No Cross-Site Requests",
"homeUrl" : "https://www.privacytools.io/",
"logo" : "https://www.privacytools.io/assets/img/layout/shield.svg",
"description": "Privacy Guides is a socially motivated website that provides information and services for protecting your security and privacy online. No Ads, No Google Analytics, No Affiliates, and No Cross-Site Requests.",
"communicationLanguages": ["en"],
"contactUrl": "https://www.privacytools.io/contact/",
"privacyPolicyUrl" : "https://www.privacytools.io/privacy/",
"termsOfServiceUrl" : "-",
"isServiceProvider" : true,
"foundingDate": "2015",
"version": "0.0.1",
"dateCreated": "2019-05-02T16:25:00Z",
"dateModified": "2019-05-02T16:25:00Z"
}

View File

@ -1,8 +1,5 @@
{
"m.homeserver": {
"base_url": "https://chat.privacytools.io"
},
"m.identity_server": {
"base_url": "https://chat.privacytools.io"
"base_url": "https://dendrite-client.privacyguides.org"
}
}

View File

@ -1,3 +1,3 @@
{
"m.server": "chat.privacytools.io:8448"
"m.server": "dendrite-federation.privacyguides.org:443"
}

View File

@ -1,5 +1,5 @@
Contact: admin@privacytools.io
Contact: jonah@triplebit.net
Encryption: https://www.jonaharagon.com/keys/
Preferred-Languages: en
Canonical: https://www.privacytools.io/.well-known/security.txt
Policy: https://github.com/privacytools/privacytools.io/security/policy
Canonical: https://privacyguides.org/.well-known/security.txt
Policy: https://github.com/privacyguides/privacyguides.org/security/policy

View File

@ -1,11 +0,0 @@
---
layout: minimal
---
<div class="container" role="main">
<main>
{{ content }}
</main>
<footer>
{% include footer.html %}
</footer>
</div>

View File

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
{% include head.html %}
<body data-spy="scroll" data-target="#navbar">
<script src="/assets/js/applytheme.js?v=1"></script>
<header>
{% include nav.html %}
<div id="top" class="py-4"></div>
</header>
{{ content }}
{% include scripts.html %}
</body>
</html>

View File

@ -1,12 +0,0 @@
---
layout: default
---
{% include breadcrumbs.html %}
<div class="jumbotron p-5">
<h1 class="display-4">{{ page.title }}</h1>
{% if page.description and page.hidedesc != true %}<p class="lead">{{ page.description }}</p>{% endif %}
</div>
{{ content }}

View File

@ -1,27 +0,0 @@
/* Variables */
/* Cards */
$card-shadow: 0 3px 10px 0 rgba(150, 150, 150, .2);
$card-succes-border: rgba(40, 167, 69, .5);
$card-primary-border: rgba(0, 123, 255, .5);
$card-warning-border: rgba(255, 193, 7, .5);
/* Blockquote */
$blockquote-border: #eee;
/* Share button */
$share-btn: #fff;
$share-btn-shadow: 0 2px 0 0 rgba(0, 0, 0, .2);
$share-btn-hover: #eee;
$share-btn-active: #e2e2e2;
/* Social */
$twitter: #55acee;
$mastodon: #3088d4;
$facebook: #3b5998;
$mix: #ff8126;
$reddit: #ff5700;
$linkedin: #4875b4;
$email: #444;
$diaspora: #2f3537;
$tor: #7d4698;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +0,0 @@
if (localStorage.getItem("colorScheme") === "dark") {
document.querySelector("#dark-css").removeAttribute("media"); // Set dark theme
}
else if (localStorage.getItem("colorScheme") === "light") {
document.querySelector("#dark-css").setAttribute("media", "invalid"); // Set light theme
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,96 +0,0 @@
$(function() {
$("[data-toggle='tooltip']").tooltip();
});
document.querySelectorAll(".onclick-select").forEach(element => {
element.addEventListener("click", element.select);
});
// Navbar dropdowns
const navSections = document.querySelectorAll(".nav-details");
navSections.forEach(navSection => {
navSection.addEventListener("toggle", navSectionsToggle);
});
document.addEventListener("click", navSectionsClose);
function navSectionsToggle() {
// When opening next dropdown, hide previous
if (this.open) {
navSections.forEach(navSection => {
if (navSection != this && navSection.open) navSection.open = !open;
});
}
}
function navSectionsClose(event) {
// Hide all dropdowns when clicking in different place
if (
event.target.matches(".nav-summary") ||
event.target.parentNode.matches(".nav-summary")
)
return;
navSections.forEach(navSection => {
navSection.open = !open;
});
}
// Dark/Light color scheme switch button
document.querySelector("#nav-switch-theme").style.display = "inline";
document.querySelector("#nav-switch-theme").addEventListener("click", changeColorScheme);
function changeColorScheme() {
// Use whatever users want
if (localStorage.getItem("colorScheme") === "dark") {
// Change to light theme
if (window.matchMedia("(prefers-color-scheme: dark)").matches === false) {
document.querySelector("#dark-css").setAttribute("media", "(prefers-color-scheme: dark)");
localStorage.removeItem("colorScheme");
} else {
// by setting invalid media it will just not apply CSS for anyone
document.querySelector("#dark-css").setAttribute("media", "invalid");
localStorage.setItem("colorScheme", "light");
}
}
// Change to dark theme
else if (localStorage.getItem("colorScheme") === "light") {
if (window.matchMedia("(prefers-color-scheme: dark)").matches === true) {
document.querySelector("#dark-css").setAttribute("media", "(prefers-color-scheme: dark)");
localStorage.removeItem("colorScheme");
} else {
// media was set to prefers-color-scheme: dark
document.querySelector("#dark-css").removeAttribute("media");
localStorage.setItem("colorScheme", "dark");
}
}
// Just use whatever browsers want
else if (window.matchMedia("(prefers-color-scheme: dark)").matches === true) {
// Change to light Theme
document.querySelector("#dark-css").setAttribute("media", "invalid");
localStorage.setItem("colorScheme", "light");
} else {
// Change to dark theme
document.querySelector("#dark-css").removeAttribute("media");
localStorage.setItem("colorScheme", "dark");
}
fixThemeImages();
}
// Fix images in dark theme
function fixThemeImages() {
document.querySelectorAll('[data-theme-src]').forEach(function(image) {
tempSrc = image.src;
image.src = image.getAttribute("data-theme-src");
image.setAttribute("data-theme-src", tempSrc);
});
}
if (
(localStorage.getItem("colorScheme") === "dark") ||
(window.matchMedia("(prefers-color-scheme: dark)").matches ^
localStorage.getItem("colorScheme") === "light")
) {
fixThemeImages();
}

File diff suppressed because one or more lines are too long

View File

@ -1,33 +0,0 @@
if (window.location == 'https://www.privacytools.io/#ukusa') { window.location = 'https://www.privacytools.io/providers/';}
if (window.location == 'https://www.privacytools.io/#vpn') { window.location = 'https://www.privacytools.io/providers/vpn/';}
if (window.location == 'https://www.privacytools.io/#email') { window.location = 'https://www.privacytools.io/providers/email/';}
if (window.location == 'https://www.privacytools.io/#cloud') { window.location = 'https://www.privacytools.io/providers/cloud-storage/';}
if (window.location == 'https://www.privacytools.io/#social') { window.location = 'https://www.privacytools.io/providers/social-networks/';}
if (window.location == 'https://www.privacytools.io/#dns') { window.location = 'https://www.privacytools.io/providers/dns/';}
if (window.location == 'https://www.privacytools.io/#search') { window.location = 'https://www.privacytools.io/providers/search-engines/';}
if (window.location == 'https://www.privacytools.io/#host') { window.location = 'https://www.privacytools.io/providers/hosting/';}
if (window.location == 'https://www.privacytools.io/#paste') { window.location = 'https://www.privacytools.io/providers/paste';}
if (window.location == 'https://www.privacytools.io/#browser') { window.location = 'https://www.privacytools.io/browsers/';}
if (window.location == 'https://www.privacytools.io/#fingerprint') { window.location = 'https://www.privacytools.io/browsers/#fingerprint';}
if (window.location == 'https://www.privacytools.io/#webrtc') { window.location = 'https://www.privacytools.io/browsers/#webrtc';}
if (window.location == 'https://www.privacytools.io/#addons') { window.location = 'https://www.privacytools.io/browsers/#addons';}
if (window.location == 'https://www.privacytools.io/#about_config') { window.location = 'https://www.privacytools.io/browsers/#about_config';}
if (window.location == 'https://www.privacytools.io/#clients') { window.location = 'https://www.privacytools.io/software/email/';}
if (window.location == 'https://www.privacytools.io/#messaging') { window.location = 'https://www.privacytools.io/software/email/#messaging';}
if (window.location == 'https://www.privacytools.io/#im') { window.location = 'https://www.privacytools.io/software/im/';}
if (window.location == 'https://www.privacytools.io/#voip') { window.location = 'https://www.privacytools.io/software/voip/';}
if (window.location == 'https://www.privacytools.io/#filesharing') { window.location = 'https://www.privacytools.io/software/file-sharing/';}
if (window.location == 'https://www.privacytools.io/#mycloud') { window.location = 'https://www.privacytools.io/software/cloud/';}
if (window.location == 'https://www.privacytools.io/#sync') { window.location = 'https://www.privacytools.io/software/file-sync/';}
if (window.location == 'https://www.privacytools.io/#pw') { window.location = 'https://www.privacytools.io/software/passwords/';}
if (window.location == 'https://www.privacytools.io/#calendar_contacts') { window.location = 'https://www.privacytools.io/software/calendar-contacts/';}
if (window.location == 'https://www.privacytools.io/#encrypt') { window.location = 'https://www.privacytools.io/software/productivity/#encrypt';}
if (window.location == 'https://www.privacytools.io/#darknets') { window.location = 'https://www.privacytools.io/software/networks/';}
if (window.location == 'https://www.privacytools.io/#notebook') { window.location = 'https://www.privacytools.io/software/notebooks/';}
if (window.location == 'https://www.privacytools.io/#productivity') { window.location = 'https://www.privacytools.io/software/productivity/';}
if (window.location == 'https://www.privacytools.io/#os') { window.location = 'https://www.privacytools.io/operating-systems/';}
if (window.location == 'https://www.privacytools.io/#live_os') { window.location = 'https://www.privacytools.io/operating-systems/#live_os';}
if (window.location == 'https://www.privacytools.io/#mobile_os') { window.location = 'https://www.privacytools.io/operating-systems/#mobile_os';}
if (window.location == 'https://www.privacytools.io/#aaddons') { window.location = 'https://www.privacytools.io/operating-systems/#aaddons';}
if (window.location == 'https://www.privacytools.io/#firmware') { window.location = 'https://www.privacytools.io/operating-systems/#firmware';}
if (window.location == 'https://www.privacytools.io/#win10') { window.location = 'https://www.privacytools.io/operating-systems/#win10';}

View File

@ -1,145 +0,0 @@
(function() {
var SELECTOR, clickEvent, numberRegExp, sortable, touchDevice, trimRegExp;
SELECTOR = 'table[data-sortable]';
numberRegExp = /^-?[£$¤]?[\d,.]+%?$/;
trimRegExp = /^\s+|\s+$/g;
touchDevice = 'ontouchstart' in document.documentElement;
clickEvent = touchDevice ? 'touchstart' : 'click';
sortable = {
init: function() {
var table, tables, _i, _len, _results;
tables = document.querySelectorAll(SELECTOR);
_results = [];
for (_i = 0, _len = tables.length; _i < _len; _i++) {
table = tables[_i];
_results.push(sortable.initTable(table));
}
return _results;
},
initTable: function(table) {
var i, th, ths, _i, _len;
if (table.tHead.rows.length !== 1) {
return;
}
if (table.getAttribute('data-sortable-initialized') === 'true') {
return;
}
table.setAttribute('data-sortable-initialized', 'true');
ths = table.querySelectorAll('th');
for (i = _i = 0, _len = ths.length; _i < _len; i = ++_i) {
th = ths[i];
if (th.getAttribute('data-sortable') !== 'false') {
sortable.setupClickableTH(table, th, i);
}
}
return table;
},
setupClickableTH: function(table, th, i) {
var type;
type = sortable.getColumnType(table, i);
return th.addEventListener(clickEvent, function(e) {
var newSortedDirection, row, rowArray, rowArrayObject, sorted, sortedDirection, tBody, ths, _i, _j, _k, _len, _len1, _len2, _ref, _results;
sorted = this.getAttribute('data-sorted') === 'true';
sortedDirection = this.getAttribute('data-sorted-direction');
if (sorted) {
newSortedDirection = sortedDirection === 'ascending' ? 'descending' : 'ascending';
} else {
newSortedDirection = type.defaultSortDirection;
}
ths = this.parentNode.querySelectorAll('th');
for (_i = 0, _len = ths.length; _i < _len; _i++) {
th = ths[_i];
th.setAttribute('data-sorted', 'false');
th.removeAttribute('data-sorted-direction');
}
this.setAttribute('data-sorted', 'true');
this.setAttribute('data-sorted-direction', newSortedDirection);
tBody = table.tBodies[0];
rowArray = [];
_ref = tBody.rows;
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
row = _ref[_j];
rowArray.push([sortable.getNodeValue(row.cells[i]), row]);
}
if (sorted) {
rowArray.reverse();
} else {
rowArray.sort(type.compare);
}
_results = [];
for (_k = 0, _len2 = rowArray.length; _k < _len2; _k++) {
rowArrayObject = rowArray[_k];
_results.push(tBody.appendChild(rowArrayObject[1]));
}
return _results;
});
},
getColumnType: function(table, i) {
var row, text, _i, _len, _ref;
_ref = table.tBodies[0].rows;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
row = _ref[_i];
text = sortable.getNodeValue(row.cells[i]);
if (text !== '' && text.match(numberRegExp)) {
return sortable.types.numeric;
}
}
return sortable.types.alpha;
},
getNodeValue: function(node) {
if (!node) {
return '';
}
if (node.getAttribute('data-value') !== null) {
return node.getAttribute('data-value');
}
if (typeof node.innerText !== 'undefined') {
return node.innerText.replace(trimRegExp, '');
}
return node.textContent.replace(trimRegExp, '');
},
types: {
numeric: {
defaultSortDirection: 'descending',
compare: function(a, b) {
var aa, bb;
aa = parseFloat(a[0].replace(/[^0-9.-]/g, ''));
bb = parseFloat(b[0].replace(/[^0-9.-]/g, ''));
if (isNaN(aa)) {
aa = 0;
}
if (isNaN(bb)) {
bb = 0;
}
return bb - aa;
}
},
alpha: {
defaultSortDirection: 'ascending',
compare: function(a, b) {
var aa, bb;
aa = a[0].toLowerCase();
bb = b[0].toLowerCase();
if (aa === bb) {
return 0;
}
if (aa < bb) {
return -1;
}
return 1;
}
}
}
};
setTimeout(sortable.init, 0);
window.Sortable = sortable;
}).call(this);

View File

@ -1,2 +0,0 @@
/*! sortable.js 0.5.0 */
(function(){var a,b,c,d,e,f;a="table[data-sortable]",c=/^-?[£$¤]?[\d,.]+%?$/,f=/^\s+|\s+$/g,e="ontouchstart"in document.documentElement,b=e?"touchstart":"click",d={init:function(){var b,c,e,f,g;for(c=document.querySelectorAll(a),g=[],e=0,f=c.length;f>e;e++)b=c[e],g.push(d.initTable(b));return g},initTable:function(a){var b,c,e,f,g;if(1===a.tHead.rows.length&&"true"!==a.getAttribute("data-sortable-initialized")){for(a.setAttribute("data-sortable-initialized","true"),e=a.querySelectorAll("th"),b=f=0,g=e.length;g>f;b=++f)c=e[b],"false"!==c.getAttribute("data-sortable")&&d.setupClickableTH(a,c,b);return a}},setupClickableTH:function(a,c,e){var f;return f=d.getColumnType(a,e),c.addEventListener(b,function(){var b,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;for(j="true"===this.getAttribute("data-sorted"),k=this.getAttribute("data-sorted-direction"),b=j?"ascending"===k?"descending":"ascending":f.defaultSortDirection,m=this.parentNode.querySelectorAll("th"),n=0,q=m.length;q>n;n++)c=m[n],c.setAttribute("data-sorted","false"),c.removeAttribute("data-sorted-direction");for(this.setAttribute("data-sorted","true"),this.setAttribute("data-sorted-direction",b),l=a.tBodies[0],h=[],t=l.rows,o=0,r=t.length;r>o;o++)g=t[o],h.push([d.getNodeValue(g.cells[e]),g]);for(j?h.reverse():h.sort(f.compare),u=[],p=0,s=h.length;s>p;p++)i=h[p],u.push(l.appendChild(i[1]));return u})},getColumnType:function(a,b){var e,f,g,h,i;for(i=a.tBodies[0].rows,g=0,h=i.length;h>g;g++)if(e=i[g],f=d.getNodeValue(e.cells[b]),""!==f&&f.match(c))return d.types.numeric;return d.types.alpha},getNodeValue:function(a){return a?null!==a.getAttribute("data-value")?a.getAttribute("data-value"):"undefined"!=typeof a.innerText?a.innerText.replace(f,""):a.textContent.replace(f,""):""},types:{numeric:{defaultSortDirection:"descending",compare:function(a,b){var c,d;return c=parseFloat(a[0].replace(/[^0-9.-]/g,"")),d=parseFloat(b[0].replace(/[^0-9.-]/g,"")),isNaN(c)&&(c=0),isNaN(d)&&(d=0),d-c}},alpha:{defaultSortDirection:"ascending",compare:function(a,b){var c,d;return c=a[0].toLowerCase(),d=b[0].toLowerCase(),c===d?0:d>c?-1:1}}}},setTimeout(d.init,0),window.Sortable=d}).call(this);