mirror of
https://github.com/privacyguides/privacyguides.org.git
synced 2024-10-01 01:35:57 -04:00
Clean up the cruft
This commit is contained in:
parent
e2bc10d8e8
commit
960181d8b2
32
.github/CODEOWNERS
vendored
32
.github/CODEOWNERS
vendored
@ -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
|
|
89
.github/CONTRIBUTING.md
vendored
89
.github/CONTRIBUTING.md
vendored
@ -21,68 +21,67 @@ Please read this document in full before contributing.
|
|||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
- Be nice and respectful.
|
- Be nice and respectful.
|
||||||
- English only.
|
|
||||||
- Be constructive.
|
- 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
|
## Quality over Quantity
|
||||||
|
|
||||||
We're trying to keep it simple and promote the best tools, not all of them.
|
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
|
## Software Criteria
|
||||||
|
|
||||||
### Main
|
### Primary Requirements
|
||||||
|
|
||||||
- Easy to use. Could your mother use that tool or service? Usability is most important.
|
- Privacy respecting (duh!).
|
||||||
- Cross-platform / Accessible.
|
|
||||||
- Privacy respecting.
|
### Primary Recommendations
|
||||||
- Open Source / Free Software is preferred but not required.
|
|
||||||
|
- Open Source / Free Software.
|
||||||
- Prioritize Products without Vendor Lock-in (decentralized/self-hostable) or data interoperability.
|
- 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
|
- 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).
|
||||||
- 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).
|
- 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).
|
||||||
- Supports DNSSEC (https://dnssec.vs.uni-due.de/ can test your current DNS provider).
|
- 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).
|
||||||
- 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)
|
|
||||||
|
|
||||||
### VPN
|
### 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.
|
- MUST NOT be based in USA or UK.
|
||||||
- Cannot be based in USA or UK.
|
- MUST be accessible via Open Source Software (e.g. OpenVPN, WireGuard).
|
||||||
- Must be accessible via Open Source Software (e.g. OpenVPN, WireGuard)
|
- MUST Use Strong Encryption.
|
||||||
- Use Encryption
|
- SHOULD Accept Cryptocurrency.
|
||||||
- Accept Cryptocurrency
|
- MUST have a no logging policy.
|
||||||
- No logging policy
|
|
||||||
|
|
||||||
### Email
|
### Email
|
||||||
|
|
||||||
- Outside of USA
|
See https://privacyguides.org/providers/email/#criteria for full details, the following is an incomplete summary.
|
||||||
- Support SMTP SSL
|
|
||||||
- Accessible Using Open Source Software (e.g. allows IMAP)
|
- MUST Support SMTP SSL.
|
||||||
|
- SHOULD be accessible with standard/FOSS software (e.g. allows IMAP).
|
||||||
|
|
||||||
### Hardware
|
### Hardware
|
||||||
|
|
||||||
- Must be [H-Node Class A](https://h-node.org/wiki/page/en/compatibility-classes) or equivalent (if applicable)
|
- SHOULD 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.
|
- SHOULD 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 NOT lock users to a particular platform.
|
||||||
|
|
||||||
### Software
|
### Software
|
||||||
|
|
||||||
- Must be able to download over encrypted network (can be a mirror)
|
- MUST be able to download over encrypted network (can be a mirror).
|
||||||
- Must be Open Source Software
|
- SHOULD be Free and Open Source Software.
|
||||||
|
|
||||||
### Encryption
|
### Encryption
|
||||||
|
|
||||||
@ -96,23 +95,5 @@ See https://www.privacytools.io/providers/vpn/#criteria for more details.
|
|||||||
## Images
|
## 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.
|
- 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/)
|
- Provider logo dimensions are 384px x 128px ([example](/assets/img/legacy_svg/3rd-party/mullvad.svg))
|
||||||
- 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.
|
- 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))
|
||||||
- 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).
|
|
||||||
|
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
github: jonaharagon
|
21
.github/ISSUE_TEMPLATE/1_Software_Suggestion.md
vendored
21
.github/ISSUE_TEMPLATE/1_Software_Suggestion.md
vendored
@ -1,8 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: "🆕 Software Suggestion"
|
name: "🆕 Software or Provider Suggestion"
|
||||||
about: Suggest new software that enhances privacy.
|
about: "Suggest something new for us to look at!"
|
||||||
title: "🆕 Software Suggestion | "
|
|
||||||
labels: 🆕 software suggestion
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Basic Information
|
## Basic Information
|
||||||
@ -14,14 +12,11 @@ labels: 🆕 software suggestion
|
|||||||
## Description
|
## 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? -->
|
<!-- 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?
|
||||||
## My connection with the software
|
An employee of the software maker? -->
|
||||||
|
|
||||||
<!-- 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.
|
|
||||||
|
16
.github/ISSUE_TEMPLATE/2_Software_Removal.md
vendored
16
.github/ISSUE_TEMPLATE/2_Software_Removal.md
vendored
@ -1,21 +1,15 @@
|
|||||||
---
|
---
|
||||||
name: "❌ Software Removal"
|
name: "❌ Software Removal"
|
||||||
about: Suggest the removal of outdated, insecure, or otherwise bad software.
|
about: Suggest the removal of outdated, insecure, or otherwise bad software.
|
||||||
title: "❌ Software Removal | "
|
|
||||||
labels: ❌ software removal
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Description
|
## 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? -->
|
<!-- 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? :) -->
|
||||||
## 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.
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
name: "✨ Feature Suggestion"
|
name: "✨ Feature Suggestion"
|
||||||
about: Suggest a new feature/section/page for the website.
|
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
|
## Description
|
||||||
|
15
.github/ISSUE_TEMPLATE/4_Content_Correction.md
vendored
15
.github/ISSUE_TEMPLATE/4_Content_Correction.md
vendored
@ -1,21 +1,8 @@
|
|||||||
---
|
---
|
||||||
name: "📝 Content Correction"
|
name: "📝 Content Correction"
|
||||||
about: Report any inaccurate, incorrect, or outdated information on the website.
|
about: Report any inaccurate, incorrect, or outdated information on the website.
|
||||||
title: "📝 Correction | "
|
|
||||||
labels: 📝 correction
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
|
**URL of affected page:**
|
||||||
|
|
||||||
## 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.
|
|
||||||
|
4
.github/ISSUE_TEMPLATE/5_Website_Issues.md
vendored
4
.github/ISSUE_TEMPLATE/5_Website_Issues.md
vendored
@ -9,8 +9,8 @@ labels: 🌐 website issue
|
|||||||
|
|
||||||
READ ME FIRST:
|
READ ME FIRST:
|
||||||
This is NOT the place to request changes to the content of the website.
|
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 NOT the place to report issues with our services like Matrix.
|
||||||
This is ONLY for reporting bugs or technical issues with www.privacytools.io.
|
This is ONLY for reporting bugs or technical issues with www.privacyguides.org, the website.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
21
.github/ISSUE_TEMPLATE/6_Translation_Issues.md
vendored
21
.github/ISSUE_TEMPLATE/6_Translation_Issues.md
vendored
@ -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
|
|
||||||
-->
|
|
7
.github/ISSUE_TEMPLATE/config.yml
vendored
7
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -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.
|
|
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -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
16
.github/stale.yml
vendored
@ -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
|
|
@ -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
|
|
||||||
|
|
||||||
==================================================================
|
|
@ -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"
|
|
||||||
}
|
|
@ -1,8 +1,5 @@
|
|||||||
{
|
{
|
||||||
"m.homeserver": {
|
"m.homeserver": {
|
||||||
"base_url": "https://chat.privacytools.io"
|
"base_url": "https://dendrite-client.privacyguides.org"
|
||||||
},
|
|
||||||
"m.identity_server": {
|
|
||||||
"base_url": "https://chat.privacytools.io"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"m.server": "chat.privacytools.io:8448"
|
"m.server": "dendrite-federation.privacyguides.org:443"
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Contact: admin@privacytools.io
|
Contact: jonah@triplebit.net
|
||||||
Encryption: https://www.jonaharagon.com/keys/
|
Encryption: https://www.jonaharagon.com/keys/
|
||||||
Preferred-Languages: en
|
Preferred-Languages: en
|
||||||
Canonical: https://www.privacytools.io/.well-known/security.txt
|
Canonical: https://privacyguides.org/.well-known/security.txt
|
||||||
Policy: https://github.com/privacytools/privacytools.io/security/policy
|
Policy: https://github.com/privacyguides/privacyguides.org/security/policy
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
layout: minimal
|
|
||||||
---
|
|
||||||
<div class="container" role="main">
|
|
||||||
<main>
|
|
||||||
{{ content }}
|
|
||||||
</main>
|
|
||||||
<footer>
|
|
||||||
{% include footer.html %}
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
@ -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>
|
|
@ -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 }}
|
|
@ -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;
|
|
6
privacytools.io/_sass/bootstrap.scss
vendored
6
privacytools.io/_sass/bootstrap.scss
vendored
File diff suppressed because one or more lines are too long
5
privacytools.io/_sass/fontawesome.scss
vendored
5
privacytools.io/_sass/fontawesome.scss
vendored
File diff suppressed because one or more lines are too long
@ -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
|
|
||||||
}
|
|
6
privacytools.io/assets/js/bootstrap.min.js
vendored
6
privacytools.io/assets/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -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();
|
|
||||||
}
|
|
4
privacytools.io/assets/js/popper.min.js
vendored
4
privacytools.io/assets/js/popper.min.js
vendored
File diff suppressed because one or more lines are too long
@ -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';}
|
|
@ -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);
|
|
2
privacytools.io/assets/js/sortable.min.js
vendored
2
privacytools.io/assets/js/sortable.min.js
vendored
@ -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);
|
|
Loading…
Reference in New Issue
Block a user