New docs ✨
1
docs/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
node_modules
|
9
docs/.travis.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "9.0.0"
|
||||||
|
|
||||||
|
install:
|
||||||
|
- npm i -g yarn webpack webpack-cli webpack-dev-server && yarn
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- yarn run build
|
22
docs/LICENSE.md
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
## The MIT License (MIT)
|
||||||
|
|
||||||
|
### Copyright (c) Alicia Sykes <alicia@as93.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, sub-license, 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 install
|
||||||
|
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 MERCHANT ABILITY,
|
||||||
|
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.
|
||||||
|
|
||||||
|
![License](https://upload.wikimedia.org/wikipedia/commons/f/f8/License_icon-mit-88x31-2.svg)
|
144
docs/README.md
@ -1,144 +0,0 @@
|
|||||||
# The Checklist
|
|
||||||
|
|
||||||
## Passwords
|
|
||||||
|
|
||||||
Ideally you should use a different, and secure password to access each service you use. To securely manage all of these, a password manager is usually the best option.
|
|
||||||
|
|
||||||
Most reported data breaches [this Verizon report](http://www.verizonenterprise.com/resources/reports/rp_dbir-2016-executive-summary_xg_en.pdf) are caused by involved weak, default or stolen passwords. Massive amounts of private data was stolen because of this.
|
|
||||||
|
|
||||||
For everything you could ever want to know about passwords, check out [this guide](https://heimdalsecurity.com/blog/password-security-guide/).
|
|
||||||
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| -------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| **Use a strong password** | Recommended | Check how strong your password is at: [HowSecureIsMyPassword.net](https://howsecureismypassword.net). Try to get a got mixture of upper and lower-case letters, numbers and symbols. Avoid names, places and dictionary words where possible, and aim to get a decent length. Have a look at [How Long will it take to Crack my Password](https://www.betterbuys.com/estimating-password-cracking-times/). |
|
|
||||||
| **Don’t save your password in browsers** | Recommended | Most modern browsers offer to save your credentials when you log into a site. Don’t allow this! As they are not encrypted, hence can allow easy access into your accounts. Also do not store passwords in a .txt file or any other unencrypted means. Ideally use a password manager. |
|
|
||||||
| **Use different passwords for each account you have** | Recommended | If one password gets compromised, it can give hackers access to your other online sites, so it is highly recommended not to reuse the same passwords. In order to manage having hundreds of different passwords, use a [password manager](https://en.wikipedia.org/wiki/Password_manager). Have a look at [LastPass](https://www.lastpass.com), [DashLane](https://www.dashlane.com), [KeePass](https://keepass.info) or [Robo Forms 8](https://www.roboform.com). |
|
|
||||||
| **Be cautious when logging in on someone else’s device** | Recommended | Ideally you wouldn’t ever log into any of your services on someone else’s device, since you can’t be sure that they don’t have any malware. If you do, ensure that your in a private session (like Incognito mode) so that nothing gets saved |
|
|
||||||
| **Avoid password hints** | Optional | It is likely that there is a lot of information about you online, so it can be an easy task for a hacker to find out which high school you went to, or what your Mums name is. |
|
|
||||||
| **Never answer online security questions truthaly** | Optional | Instead, create a password inside your password manager to store your fictitious answer. This will stop people guessing your place of birth or mothers mainen name. |
|
|
||||||
| **Don’t use a 4-digit pin to access your phone** | Optional | Don’t use a short pin to access your smartphone or computer. Instead use a text password. |
|
|
||||||
| **Use an offline password manager** | Advanced | Consider an offline password manager, encrypted by a strong password. If you work across two or more computers, this could be stored on an encrypted USB. [KeePass](http://keepass.info/) is a strong choice |
|
|
||||||
| **If possible, try to avoid bio-metric and hardware-based authentication** | Advanced | Fingerprint sensors, face-detection and voice-recognition are all easily hackable. Where possible replace these with traditional passwords. |
|
|
||||||
| P**assword protect your BIOS and drives** | Advanced | A BIOS or UEFI password helps to make an inexperienced hackers life a bit harder if they get hold of your PC or hard drive, [here is a guide on how to do it](https://www.howtogeek.com/186235/how-to-secure-your-computer-with-a-bios-or-uefi-password/). |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 2-Factor Authentication
|
|
||||||
|
|
||||||
This is a secure method of logging in, where you supply not just your password, but also an additional code usually from a device that only you’d have access to.
|
|
||||||
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| ------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| **Use an authenticator.** | Recommended | Use [Google Authenticator](https://support.google.com/accounts/answer/1066447) where sites offer 2-FA. Alternative authenticators include: [Authy](https://authy.com), [FreeOTP](https://freeotp.github.io), [LastPassAuthenticator](https://lastpass.com/auth/) and [AuthenticatorPlus](https://www.authenticatorplus.com). SMS codes are ubiquitous, but easy to break so although better than nothing, not ideal. Another option is a hardware-based 2FA, such as [Yubico](https://www.yubico.com/security-keys-authentication/), although with limited compatibility and of course a physical cost. Check out [this list of apps/ sites which provide the option of 2FA](https://twofactorauth.org/). |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Browser and Search
|
|
||||||
|
|
||||||
Most modern web browsers allow for addons and extensions, these can access anything that you do online, avoid installing anything that may not be legitimate and check permissions first. Be aware that ever website that you interact with, including search engines will likely be keeping records of all your activity. Last year Kaspersky reported [over a million data exploits caused by malicious sites](https://securelist.com/it-threat-evolution-q1-2017-statistics/78475/).
|
|
||||||
|
|
||||||
For more browser security pointers, check out: [Here’s How To Get Solid Browser Security](https://heimdalsecurity.com/blog/ultimate-guide-secure-online-browsing/)
|
|
||||||
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| -------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| **Deactivate ActiveX** | Recommended | [ActiveX](https://en.wikipedia.org/wiki/ActiveX) is barley used nowadays, but Microsoft browsers have it enabled by default. It acts as a middleware between Java and Flash applications and your PC. But it is commonly used for malicious sites to run scripts directly on your PC. See [this article](https://www.howtogeek.com/162282/what-activex-controls-are-and-why-theyre-dangerous/) for more details. |
|
|
||||||
| **Disable Flash** | Recommended | Adobe Flash has been around since the dawn of the internet, however it has been falling in popularity for a while. It brings with it many unpatched vulnerabilities (a few of which you can [read about here](https://www.comparitech.com/blog/information-security/flash-vulnerabilities-security/)). See [this guide](https://www.howtogeek.com/222275/how-to-uninstall-and-disable-flash-in-every-web-browser/), on how to disable Flash player, or [this guide for more details on how dangerous it can be](https://www.tomsguide.com/us/disable-flash-how-to,news-21335.html). |
|
|
||||||
| **Block Trackers** | Recommended | Consider installing a browser extension, such as [Privacy Badger](https://www.eff.org/privacybadger), to stop advertisers from secretly tracking you |
|
|
||||||
| **Block scripts from bad origin** | Recommended | Use an extension such as [uBlock Origin](https://github.com/gorhill/uBlock), to block anything being loaded from an external or unverified origin. |
|
|
||||||
| **Force HTTPS only traffic** | Recommended | Ensure that you only use websites through https. It’s recomended to use an extension such as [HTTPS Everywhere](https://www.eff.org/https-everywhere), to force all sites to load securely. |
|
|
||||||
| **Only use trusted browser addons and extensions** | Recommended | Both Firefox and Chrome webstore allow you to check what permissions access rights an extension requires before you install it. Check the reviews. Only install extensions you really need. |
|
|
||||||
| **Always keep your browser up-to-date** | Recommended | Browser vulnerabilities are constantly being discovered and patched, so it’s important to keep it up to date, to avoid a zero-day exploit. |
|
|
||||||
| **Use a private search engine** | Optional | Take a look at [DuckDuckGo](https://duckduckgo.com) or [StartPage](https://www.startpage.com). Neither store cookies or cache anything. |
|
|
||||||
| **Consider a privacy browser** | Optional | Google openly collects usage data on Chrome usage. There are several privacy browsers out there which minimise the amount of data collected. Have a look at [Brave Browser](https://brave.com), [Yandex](https://browser.yandex.com), or [Comodo](https://www.comodo.com/home/browsers-toolbars/browser.php). As a more extreme choice, consider [Tor](https://www.torproject.org/). |
|
|
||||||
| **Disable JavaScript** | Advanced | Many modern web apps, are JavaScript based, so disabling it will greatly reduce your browsing experience. But if you really want to go all out, then it will reduce your attack surface. Read more about the growing [risk of JavaScript malware](https://heimdalsecurity.com/blog/javascript-malware-explained/). |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## VPN
|
|
||||||
|
|
||||||
A Virtual Private Network (VPN) allows you to securely connect to the internet, when you visit a site, your visiting it through the secure VPN connection and not broadcasting your own IP address, therefore hiding your identity on the sites you visit, to both your ISP anyone else trying to track you, they can also encrypt your traffic so you can browse more securely on public networks. They’re really easy to setup. To learn more about what a VPN is, how it works and how to choose one, checkout [this PC Mag article](http://uk.pcmag.com/software/138/guide/the-best-vpn-services-of-2018).
|
|
||||||
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| ------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| **Use a VPN** | Recommended | Ideally use a paid-for VPN, as they’re considerably better quality so won’t affect your speeds, nor show adds. Take a look at [VyprVPN](https://www.goldenfrog.com/vyprvpn), [NordVPN](https://nordvpn.com), [IPVanish](https://www.ipvanish.com) and [TunnelBear](https://www.tunnelbear.com). |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Emails
|
|
||||||
|
|
||||||
Nearly 50 years since the first email was sent, they’re still very much a big part of our day-to-day life, and will probably continue to be for the near future. So considering how much trust we put in them, it’s surprising how fundamentally insecure this infrastructure is. Email-related fraud [is on the up](https://www.csoonline.com/article/3247670/email/email-security-in-2018.html), and without taking basic measures you could be at risk. (For basic enterprise pointers, see [this article](https://digitalguardian.com/blog/what-email-security-data-protection-101)).
|
|
||||||
|
|
||||||
If a hacker gets access to your emails, it provides a gateway for your other accounts to be compromised, therefore email security is paramount for your digital safety.
|
|
||||||
|
|
||||||
These links are also useful for additional simple measures that you can take to specifically protect a [Yahoo](https://heimdalsecurity.com/blog/complete-guide-e-mail-security/#yahoo), [GMail](https://heimdalsecurity.com/blog/complete-guide-e-mail-security/#gmail), [Outlook](https://heimdalsecurity.com/blog/complete-guide-e-mail-security/#outlook) and [AOL](https://heimdalsecurity.com/blog/complete-guide-e-mail-security/#aol) account.
|
|
||||||
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| -------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| **Have more than one email address** | Recommended | Keeping your important and safety-critical messages separate from trivial subscriptions such as newsletters, is a very good idea. Be sure to use different passwords. This will also make recovering a compromised account after an email breach easier. |
|
|
||||||
| **Keep security in mind when logging into emails** | Recommended | Your email account is one of the most important to protect with a secure password. Only sync your emails with your phone, if it is secured (encrypted with password). Don’t allow your browser to save your email password. Prevent man-in-the-middle attacks by only logging in on a secured browser. |
|
|
||||||
| **Always be weary of phishing and scams** | Recommended | If you get an email from someone you don’t recognize, don’t reply, don’t click on any links, and absolutely don’t download an attachment. Keep an eye out for senders pretending to be someone else, such as your bank, email provider or utility company. Check the domain, read it, ensure it’s addressed directly to you, and still don’t give them any personal details. Check out [this guide, on how to spot phishing emails](https://heimdalsecurity.com/blog/abcs-detecting-preventing-phishing/). |
|
|
||||||
| **Don’t share sensitive over email** | Optional | Emails are very very easily intercepted. Also you can’t know how secure your recipients environment is. Don’t share anything personal, such as bank details, passwords, confidential information over email. Ideally, don’t use email as any primary method of communication. |
|
|
||||||
| **Don’t connect third-party apps to your email account** | Optional | If you give a third-party app (like Unroll.me) full access to your inbox, this makes you vulnerable to cyber attacks. The app can be compromised and, as a consequence, cyber criminals would gain unhindered access to all your emails and their contents. |
|
|
||||||
| **Consider switching to a more secure email provider** | Optional | Email providers such as [ProtonMail](https://protonmail.com), [CounterMail](https://countermail.com), [HushMail](https://www.hushmail.com) (for business users) or [MailFence](https://mailfence.com) allow for end-to-end encryption, full privacy as well as more security-focused features. |
|
|
||||||
|
|
||||||
## Social Media
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| --------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| **Check your privacy settings** | Recommended | Most social networks allow you to control your privacy settings. Ensure that your profile can only be viewed by people who you are in your friends list, and you know personally. |
|
|
||||||
| **Only put info on social media that you wouldn’t mind being public** | Recommended | Even with tightened security settings, don’t put anything online that you wouldn’t want to be seen by anyone other than your friends. Don’t reply soley on the social networks security. |
|
|
||||||
| **Don’t give social networking apps permissions they don’t need** | Recommended | By default many of the popular social networking apps, will ask for permission to access your contacts, your call log, your location, your messaging history etc.. If they don’t need this access- don’t grant it. |
|
|
||||||
| **Revoke access for apps your no longer using** | Recommended | Instructions: [Facebook](https://www.facebook.com/settings?tab=applications), [Twitter](https://twitter.com/settings/applications), [LinkedIn](https://www.linkedin.com/psettings/third-party-applications), [Instagram](https://www.instagram.com/accounts/manage_access/). |
|
|
||||||
| **Remove meta data before uploading media** | Optional | Most smartphones and some cameras automatically attach a comprehensive set of additional data to each photograph., This usually includes things like time, date, location, camera model, user etc. Remove this data before uploading. See [this guide](https://www.makeuseof.com/tag/3-ways-to-remove-exif-metadata-from-photos-and-why-you-might-want-to/) for more info. |
|
|
||||||
| **Don’t have any social media accounts** | Advanced | It may seem a bit extreme, but if your serious about data privacy and security, stay away from entering information on any social media platform. |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Your Devices
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| --------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| **Turn of connectivity features that arn’t being used** | Recommended | When your not using WiFi, Bluetooth, NFC or anything else- turn those features off. These are commonly used to easily hack individuals. |
|
|
||||||
| **Uninstall apps that you don’t need** | Recommended | Don’t have apps that your not using on your phone, as they can be collecting data in the background. Don’t install apps from non-legitimate sources, or apps with few reviews. |
|
|
||||||
| **Don’t grant apps permissions that they don’t need.** | Recommended | If an app doesn’t need access to your camera- don’t grant it access. Same with any features of your phone, be wary about what each app has access to. |
|
|
||||||
| **Consider running a custom ROM if you have an Android device** | Advanced | Your default OS tracks information about your usage, and app data, constantly. Consider a security-focused custom ROM, such as [Lineage](https://lineageos.org) or [CopperheadOS](https://copperhead.co/android/). |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## SMS and Calls
|
|
||||||
|
|
||||||
Both SMS texting and traditional phone calls are not secure. Avoid it whenever there is a reasonable alternative, and don’t use these means to communicate anything secure. Be wary of who you share your phone number with
|
|
||||||
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| -------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| **Don’t use SMS - Use E2E encrypted messaging apps** | Optional | [iMessage is secure](https://techcrunch.com/2014/02/27/apple-explains-exactly-how-secure-imessage-really-is/). For non-Apple users [Signal](https://signal.org) is the most secure option. As of late 2016 [WhatsApp](https://www.whatsapp.com) is also [end-to-end-encrypted using the Signal protocol](https://signal.org/blog/whatsapp-complete/). Keep in mind that although the transmission may be secured, breaches can still be cause if your, or your recipients device has been compromised. |
|
|
||||||
| **Use a secure email provider** | Optional | Most email providers completely invade your privacy intercepting both messages sent and received. [ProtonMail](https://protonmail.com) is a secure email provider, that is open source and offers end-to-end encryption. There are alternative secure mail providers (such as [CounterMail](https://countermail.com), [HushMail](https://www.hushmail.com) and [MailFence](https://mailfence.com))- but [ProtonMail](https://protonmail.com) has both a clear interface and strong security record. |
|
|
||||||
| **Avoid using your real phone number when signing up for an account or service** | Optional | Where possible, avoid giving out your real phone number while creating accounts online. You can create phone numbers using services such as [Google Voice](https://voice.google.com) or [Skype](https://www.skype.com/en/features/online-number/). For temporary usage you can use a service like [iNumbr](https://www.inumbr.com) that generates a phone number that forwards messages and calls to your main number. |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Your Router
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| --------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| **Don’t use a default password** | Recommended | Change your router password- [here is a guide as to how](https://www.lifewire.com/how-to-change-your-wireless-routers-admin-password-2487652). |
|
|
||||||
| **Use WPA2** | Recommended | WPA and WEP make it very easy for a hacker to gain access to your router. Use a [WPA2](https://en.wikipedia.org/wiki/Wi-Fi_Protected_Access) password instead. Ensure it is strong: 12+ alpha-numeric characters, avoiding dictionary words. |
|
|
||||||
| **Ideally hide your SSID** | Optional | An SSID (or Service Set Identifier) is simply your network name. If it is not visible, it is much less likely to be targeted. You can usually hide it after logging into your router admin panel, [see here for more details](https://www.lifewire.com/hide-your-wireless-network-from-your-internet-leeching-neighbors-2487655). |
|
|
||||||
| **Avoid the free router from your ISP** | Optional | Typically they’re manufactured cheaply in bulk in China, and firmware updates which fix crucial security flaws aren’t released regularly |
|
|
||||||
| **Kill unused process and services** | Advanced | Services like Telnet and SSH (Secure Shell) that provide command-line access to devices should never be exposed to the internet and should also be disabled on the local network unless they're actually needed. In general, [any service that’s not used should be disabled](https://www.securityevaluators.com/knowledge/case_studies/routers/soho_service_hacks.php) to reduce attack surface |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Operating Systems
|
|
||||||
|
|
||||||
Although Windows and OS X are easy and convenient, they both are far from secure. Your OS provides the interface between hardware and your applications, so if compromised can have detrimental effects.
|
|
||||||
|
|
||||||
| **Security** | **Priority** | **Details and Hints** |
|
|
||||||
| ------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| **Keep your OS up-to-date** | Recommended | Microsoft, Apple and ChromeOS release regular updates, which fix security risks. Always keep your device updated. |
|
|
||||||
| **Consider Switching to Linux** | Advanced | Linux is considerably [more secure](https://www.pcworld.com/article/202452/why_linux_is_more_secure_than_windows.html) than both OSX and Windows. Some distros are still more secure than others, so it’s worth choosing the right one to get a balance between security and convenience. |
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
![logo](_media/icon.svg)
|
|
||||||
|
|
||||||
# Personal Security Checklist
|
|
||||||
|
|
||||||
> A Curated List of Cyber Security Essentials to Protect your Digital Life in 2018
|
|
||||||
|
|
||||||
* Quick-reference checklist covering everything from beginer concepts through to advanced privacy princaples.
|
|
||||||
* The aim of this guide is to provide an essential reference of the steps which can be taken to minimise your risk of being hacked or spied on.
|
|
||||||
|
|
||||||
[GitHub](https://github.com/Lissy93/personal-security-checklist)
|
|
||||||
[Get Started](#the-checklist)
|
|
1
docs/dist/analytics.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/",r(r.s=2)}({2:function(e,t){var r=r||[];r.push(["_setAccount","UA-XXXXXXXX-Y"]),r.push(["_trackPageview"]),function(){var e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src=("https:"==document.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()}});
|
BIN
docs/dist/assets/cover.png
vendored
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
docs/dist/assets/icon.png
vendored
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
docs/dist/icons/android-chrome-144x144.png
vendored
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
docs/dist/icons/android-chrome-192x192.png
vendored
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
docs/dist/icons/android-chrome-256x256.png
vendored
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
docs/dist/icons/android-chrome-36x36.png
vendored
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
docs/dist/icons/android-chrome-384x384.png
vendored
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
docs/dist/icons/android-chrome-48x48.png
vendored
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
docs/dist/icons/android-chrome-512x512.png
vendored
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
docs/dist/icons/android-chrome-72x72.png
vendored
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
docs/dist/icons/android-chrome-96x96.png
vendored
Normal file
After Width: | Height: | Size: 8.9 KiB |
BIN
docs/dist/icons/favicon-16x16.png
vendored
Normal file
After Width: | Height: | Size: 813 B |
BIN
docs/dist/icons/favicon-32x32.png
vendored
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
docs/dist/icons/favicon.ico
vendored
Normal file
After Width: | Height: | Size: 32 KiB |
58
docs/dist/icons/manifest.json
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"name": "personal-security-checklist-docs",
|
||||||
|
"short_name": "personal-security-checklist-docs",
|
||||||
|
"description": null,
|
||||||
|
"dir": "auto",
|
||||||
|
"lang": "en-US",
|
||||||
|
"display": "standalone",
|
||||||
|
"orientation": "any",
|
||||||
|
"start_url": "/?homescreen=1",
|
||||||
|
"background_color": "#fff",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "android-chrome-36x36.png",
|
||||||
|
"sizes": "36x36",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-48x48.png",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-72x72.png",
|
||||||
|
"sizes": "72x72",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-96x96.png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-144x144.png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-256x256.png",
|
||||||
|
"sizes": "256x256",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-384x384.png",
|
||||||
|
"sizes": "384x384",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
1
docs/dist/lib/css/bulma.min.css
vendored
Normal file
4
docs/dist/lib/css/font-awesome.min.css
vendored
Normal file
1
docs/dist/lib/css/vue.css
vendored
Normal file
1
docs/dist/lib/font/raleway.min.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
@font-face{font-family:Raleway;src:url(fonts/Raleway-Thin.ttf) format('truetype');font-style:normal;font-weight:100;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Thin-Italic.ttf) format('truetype');font-style:italic;font-weight:100;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-ExtraLight.ttf) format('truetype');font-style:normal;font-weight:200;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-ExtraLight-Italic.ttf) format('truetype');font-style:italic;font-weight:200;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Light.ttf) format('truetype');font-style:normal;font-weight:300;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Light-Italic.ttf) format('truetype');font-style:italic;font-weight:300;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Regular.ttf) format('truetype');font-style:normal;font-weight:400;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Regular-Italic.ttf) format('truetype');font-style:italic;font-weight:400;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Medium.ttf) format('truetype');font-style:normal;font-weight:500;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Medium-Italic.ttf) format('truetype');font-style:italic;font-weight:500;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-SemiBold.ttf) format('truetype');font-style:normal;font-weight:600;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-SemiBold-Italic.ttf) format('truetype');font-style:italic;font-weight:600;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Bold.ttf) format('truetype');font-style:normal;font-weight:700;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Bold-Italic.ttf) format('truetype');font-style:italic;font-weight:700;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-ExtraBold.ttf) format('truetype');font-style:normal;font-weight:800;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-ExtraBold-Italic.ttf) format('truetype');font-style:italic;font-weight:800;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Black.ttf) format('truetype');font-style:normal;font-weight:900;text-rendering:optimizeLegibility}@font-face{font-family:Raleway;src:url(fonts/Raleway-Black-Italic.ttf) format('truetype');font-style:italic;font-weight:900;text-rendering:optimizeLegibility}/*# sourceMappingURL=raleway.min.css.map */
|
2
docs/dist/lib/js/d3.min.js
vendored
Normal file
1
docs/dist/lib/js/docsify.min.js
vendored
Normal file
1
docs/dist/lib/js/emoji.min.js
vendored
Normal file
1
docs/dist/lib/js/external-script.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
!function(){function o(){for(var o=Docsify.dom.getNode("#main"),e=Docsify.dom.findAll(o,"script"),n=e.length;n--;){var i=e[n];if(i&&i.src){var t=document.createElement("script");Array.prototype.slice.call(i.attributes).forEach(function(o){t[o.name]=o.value}),i.parentNode.insertBefore(t,i),i.parentNode.removeChild(i)}}}window.$docsify.plugins=[].concat(function(e){e.doneEach(o)},window.$docsify.plugins)}();
|
1
docs/dist/lib/js/ga.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
!function(){function n(n){!function(){var n=document.createElement("script");n.async=!0,n.src="https://www.google-analytics.com/analytics.js",document.body.appendChild(n)}(),window.ga=window.ga||function(){(window.ga.q=window.ga.q||[]).push(arguments)},window.ga.l=Number(new Date),window.ga("create",n,"auto")}function o(){window.ga||n($docsify.ga),window.ga("set","page",location.hash),window.ga("send","pageview")}$docsify.plugins=[].concat(function(n){$docsify.ga?n.beforeEach(o):console.error("[Docsify] ga is required.")},$docsify.plugins)}();
|
1
docs/dist/lib/js/gitalk.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
!function(){$docsify.plugins=[].concat(function(n){var t=Docsify.dom;n.mounted(function(n){var i=t.create("div");i.id="gitalk-container";var e=t.getNode("#main");i.style="width: "+e.clientWidth+"px; margin: 0 auto 20px;",t.appendTo(t.find(".content"),i);var o=t.create("script");o.textContent="gitalk.render('gitalk-container')",t.appendTo(t.body,o)})},$docsify.plugins)}();
|
1
docs/dist/lib/js/search.min.js
vendored
Normal file
1
docs/dist/lib/js/zoom-image.min.js
vendored
Normal file
56
docs/dist/manifest.json
vendored
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"short_name": "Security Checklist",
|
||||||
|
"name": "Personal Security Checklist",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-36x36.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "36x36"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-48x48.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "48x48"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-72x72.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-96x96.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "96x96"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-144x144.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "144x144"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-192x192.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-256x256.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-384x384.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "384x384"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-512x512.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": "/index.html/?source=pwa",
|
||||||
|
"background_color": "#BCA9F5",
|
||||||
|
"display": "standalone",
|
||||||
|
"scope": "/",
|
||||||
|
"theme_color": "#121f42"
|
||||||
|
}
|
1
docs/dist/voronoi-app.js
vendored
Normal file
1
docs/dist/voronoi-styles.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.links{stroke:#121f42;stroke-opacity:.2}.polygons{fill:none;stroke:#121f42}.polygons :first-child{fill:#f4be1a}.deselect-polygon{fill:#121f42!important}.sites{fill:none;stroke:#121f42}.sites :first-child{fill:#121f42;stroke:#121f42}.v-0{fill:#121f42}.v-1{fill:#132146}.v-2{fill:#14234a}.v-3{fill:#15254e}.v-4{fill:#162752}.v-5{fill:#172856}.v-6{fill:#192a5a}.v-7{fill:#1a2c5e}.v-8{fill:#1b2e62}.v-9{fill:#1c3066}.github-corner svg{fill:#f4be1a}.progress{background:#f4be1a}path.octo-arm,path.octo-body{fill:#121f42}section.cover .cover-main h1 a span{color:#f4be1a}section.cover .cover-main blockquote p{color:#e8e8e8}section.cover .cover-main p:last-child a{color:#f4be1a;border-radius:3px;border:2px solid #f4be1a}section.cover .cover-main p:last-child a:hover{background:#f9da7b;opacity:1}section.cover .cover-main p:last-child a:last-child{color:#272727;background:#f4be1a}section.cover .cover-main p:last-child a:last-child:hover{background:#f9da7b;opacity:1}section.cover .cover-main .cover-footer{position:absolute;bottom:2em;width:100%;text-align:center}section.cover .cover-main .cover-footer a{display:inline-block;color:#f4be1a;padding:1em 2em;min-width:200px;border-radius:3px;border:2px solid transparent}section.cover .cover-main .cover-footer a:hover{border:2px solid #f4be1a}body,html{margin:0;padding:0;height:100%;width:100%;position:relative;overflow-y:auto}#vonoroi{min-height:100%;min-width:100%;position:absolute}a,div,h1,h2,h3,p,span{font-family:Raleway,sans-serif}.markdown-section a{color:#121f42}.markdown-section a:hover,.markdown-section code,.markdown-section pre>code,.sidebar ul li.active>a{color:#f4be1a}.sidebar-toggle span{background-color:#f4be1a}section.content{background:#fff}div.p404{width:80%;margin:1em auto}div.p404 h1,div.p404 h2{text-align:center}div.p404 h1{font-weight:700;font-size:5em}div.p404 h2{font-size:2em}div.p404 .p404-links{margin:20% auto}div.p404 .p404-links a{text-align:center;color:#121f42;min-width:180px;display:inline-block;margin:.5em;padding:.25em .5em;border:2px solid transparent;border-radius:3px}div.p404 .p404-links a:hover{border:2px solid #121f42}
|
110
docs/index.html
@ -1,24 +1,116 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
|
<!-- Site Basic Meta Info -->
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Personal Security Checklist</title>
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
<meta name="description" content="A Curated List of Cyber Security Essentials to Protect your Digital Life in 2018">
|
|
||||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
<!-- Site Basic Name Info -->
|
||||||
<link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css">
|
<title>Personal Security Checklist</title>
|
||||||
<link rel="stylesheet" href="assets/as93-docs-theme.css">
|
<meta name="author" content="Alicia Sykes">
|
||||||
|
<meta name="description" content="A checklist of basic things you should do, to stay safer online">
|
||||||
|
<meta name="keywords" content="voroni,d3,demo,lissy93">
|
||||||
|
<meta name="image" content="dist/assets/cover.png">
|
||||||
|
<link rel="canonical" href="https://lissy93.github.io/personal-security-checklist/#/" />
|
||||||
|
|
||||||
|
<!-- App Manifest -->
|
||||||
|
<link rel="manifest" href="dist/manifest.json">
|
||||||
|
<meta name="theme-color" content="#121f42"/>
|
||||||
|
|
||||||
|
<!-- Schema.org for Google -->
|
||||||
|
<meta itemprop="name" content="Personal Security Checklist">
|
||||||
|
<meta itemprop="description" content="A checklist of basic things you should do, to stay safer online">
|
||||||
|
<meta itemprop="image" content="dist/assets/cover.png">
|
||||||
|
|
||||||
|
<!-- Twitter -->
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:title" content="Personal Security Checklist">
|
||||||
|
<meta name="twitter:description" content="A checklist of basic things you should do, to stay safer online">
|
||||||
|
<meta name="twitter:image" content="dist/assets/cover.png">
|
||||||
|
|
||||||
|
<!-- Open Graph general (Facebook, Pinterest & Google+) -->
|
||||||
|
<meta name="og:title" content="Personal Security Checklist">
|
||||||
|
<meta name="og:description" content="A checklist of basic things you should do, to stay safer online">
|
||||||
|
<meta name="og:image" content="dist/assets/cover.png">
|
||||||
|
<meta name="og:url" content="https://lissy93.github.io/personal-security-checklist/#/">
|
||||||
|
<meta name="og:site_name" content="Personal Security Checklist">
|
||||||
|
<meta name="og:type" content="website">
|
||||||
|
|
||||||
|
<!-- Fonts, Icons and Styles -->
|
||||||
|
<link rel="shortcut icon" href="dist/icons/favicon.ico" type="image/vnd.microsoft.icon">
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/docsify/lib/themes/vue.css">
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.1/css/bulma.min.css" />
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" href="dist/voronoi-styles.css" type="text/css">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
<div id="vonoroi"></div>
|
||||||
|
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
window.$docsify = {
|
window.$docsify = {
|
||||||
name: 'Personal Security Checklist',
|
name: 'Personal Security Checklist',
|
||||||
repo: 'https://github.com/Lissy93/personal-security-checklist',
|
repo: 'https://github.com/Lissy93/personal-security-checklist',
|
||||||
coverpage: true,
|
ga: 'UA-120900119-4',
|
||||||
coverpage: 'cover-page.md'
|
homepage: 'readme.md',
|
||||||
|
coverpage: 'pages/cover.md',
|
||||||
|
notFoundPage: 'pages/404.md',
|
||||||
|
themeColor: '#121f42',
|
||||||
|
auto2top: true,
|
||||||
|
|
||||||
|
homepage: 'https://raw.githubusercontent.com/Lissy93/personal-security-checklist/master/readme.md',
|
||||||
|
|
||||||
|
search: {
|
||||||
|
maxAge: 86400000,
|
||||||
|
paths: ['readme.md'],
|
||||||
|
placeholder: 'Type to search',
|
||||||
|
noData: 'No Results!',
|
||||||
|
},
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
function (hook) {
|
||||||
|
hook.ready(function () {
|
||||||
|
Window.finishMdRender();
|
||||||
|
})
|
||||||
|
},
|
||||||
|
function (hook) {
|
||||||
|
var footer = [
|
||||||
|
'<hr/>',
|
||||||
|
'<footer>',
|
||||||
|
'<span><a href="https://aliciasykes.com">Alicia Sykes</a> ©2018.</span>',
|
||||||
|
'</footer>'
|
||||||
|
].join('')
|
||||||
|
hook.afterEach(function (html) {
|
||||||
|
return html + footer
|
||||||
|
})
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
|
|
||||||
|
<!-- Docsify and Plugins -->
|
||||||
|
<script src="https://unpkg.com/docsify/lib/docsify.min.js"></script>
|
||||||
|
|
||||||
|
<script src="//unpkg.com/docsify-copy-code"></script>
|
||||||
|
<script src="//unpkg.com/docsify/lib/plugins/ga.min.js"></script>
|
||||||
|
<script src="//unpkg.com/docsify/lib/plugins/search.min.js"></script>
|
||||||
|
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- JavaScripts (D3 and voronoi + website scripts) -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
|
||||||
|
<script src="dist/voronoi-app.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
56
docs/package.json
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"name": "personal-security-checklist-docs",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "The documentation site for code related to the personal-security-checklist repo",
|
||||||
|
"main": "server.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "open index.html",
|
||||||
|
"serve": "node server.js",
|
||||||
|
"build": "webpack",
|
||||||
|
"dev": "webpack-dev-server",
|
||||||
|
"test": "echo \"Error: Specific tests are yet to be specified\" && exit 0",
|
||||||
|
"clean": "git clean -x && rm -r dist",
|
||||||
|
"postinstall": "webpack"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"voroni",
|
||||||
|
"d3",
|
||||||
|
"demo",
|
||||||
|
"lissy93",
|
||||||
|
"security",
|
||||||
|
"personal-security",
|
||||||
|
"cyber-security",
|
||||||
|
"checklist"
|
||||||
|
],
|
||||||
|
"author": "Alicia Sykes",
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.0.0-beta.49",
|
||||||
|
"@babel/preset-env": "^7.0.0-beta.49",
|
||||||
|
"@babel/preset-es2016": "^7.0.0-beta.49",
|
||||||
|
"babel-loader": "^8.0.0-beta.3",
|
||||||
|
"copy-webpack-plugin": "^4.5.1",
|
||||||
|
"css-loader": "^0.28.11",
|
||||||
|
"favicons-webpack-plugin": "0.0.9",
|
||||||
|
"handlebars-webpack-plugin": "^1.4.2",
|
||||||
|
"html-webpack-plugin": "^3.2.0",
|
||||||
|
"mini-css-extract-plugin": "^0.4.0",
|
||||||
|
"node-sass": "^4.9.0",
|
||||||
|
"optimize-css-assets-webpack-plugin": "^4.0.2",
|
||||||
|
"sass-loader": "^7.0.1",
|
||||||
|
"style-loader": "^0.21.0",
|
||||||
|
"ts-loader": "^4.3.0",
|
||||||
|
"typescript": "^2.9.1",
|
||||||
|
"webpack": "^4.11.1",
|
||||||
|
"webpack-cli": "^3.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"bulma": "^0.7.1",
|
||||||
|
"connect": "^3.6.6",
|
||||||
|
"d3": "^5.4.0",
|
||||||
|
"docsify": "^4.6.10",
|
||||||
|
"font-awesome": "^4.7.0",
|
||||||
|
"raleway-webfont": "^3.0.1",
|
||||||
|
"serve-static": "^1.13.2"
|
||||||
|
}
|
||||||
|
}
|
14
docs/pages/404.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
<div class="p404">
|
||||||
|
|
||||||
|
<h1>404</h1>
|
||||||
|
|
||||||
|
<h2>That page wasn't found</h2>
|
||||||
|
|
||||||
|
<div class="p404-links">
|
||||||
|
[<i class="fas fa-home"></i> Back to Homepage](/)
|
||||||
|
[<i class="fas fa-desktop"></i> Demo](/)
|
||||||
|
[<i class="fas fa-suitcase"></i> License](#)
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
9
docs/pages/cover.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Personal Security Checklist
|
||||||
|
|
||||||
|
> A list of hints and tips to stay safe in cyber space
|
||||||
|
|
||||||
|
[<i class="fab fa-github"></i> Source Code](https://github.com/Lissy93/personal-security-checklist)
|
||||||
|
[<i class="fas fa-book"></i> The List](#main)
|
||||||
|
|
||||||
|
<!-- Backup background color -->
|
||||||
|
![color](#121f42)
|
41
docs/pages/docs-site-docs.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
## Documentation for the GitHub Docs Site
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://travis-ci.org/Lissy93/voronoi-site-template"><img data-no-zoom src="https://travis-ci.org/Lissy93/voronoi-site-template.svg?branch=master" alt="Build Status" /></a>
|
||||||
|
<a href="https://www.codacy.com/app/lissy93/voronoi-site-template?utm_source=github.com&utm_medium=referral&utm_content=Lissy93/voronoi-site-template&utm_campaign=Badge_Grade"><img src="https://api.codacy.com/project/badge/Grade/42869ef92bb2469e9f92bcf5de15bc94" alt="Codacy Badge" /></a>
|
||||||
|
<a href="https://david-dm.org/Lissy93/voronoi-site-template"><img data-no-zoom src="https://david-dm.org/Lissy93/voronoi-site-template/status.svg" alt="dependencies Status" /></a>
|
||||||
|
<a href="https://david-dm.org/Lissy93/voronoi-site-template?type=dev"><img data-no-zoom src="https://david-dm.org/Lissy93/voronoi-site-template/dev-status.svg" alt="devDependencies Status" /></a>
|
||||||
|
<a href="https://github.com/Lissy93/voronoi-site-template/commits/master"><img data-no-zoom src="https://img.shields.io/maintenance/yes/2018.svg?style=flat-square" alt="Maintenance" /></a>
|
||||||
|
<a href="https://codeclimate.com/github/Lissy93/voronoi-site-template/maintainability"><img data-no-zoom src="https://api.codeclimate.com/v1/badges/58e7ee2c035047d1572e/maintainability" alt="Maintainability" /></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
|
||||||
|
Simply clone the repo, navigate into the new directory, install dependencies, build, and your ready to go!
|
||||||
|
|
||||||
|
```console
|
||||||
|
git clone https://github.com/Lissy93/voronoi-site-template.git
|
||||||
|
cd voronoi-site-template
|
||||||
|
yarn
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building, Developing and Deploying
|
||||||
|
|
||||||
|
- [**`npm run build`**](package.json#L9) *Triggers complete webpack build*
|
||||||
|
- [**`npm run start`**](package.json#L7) *Opens the standalone version*
|
||||||
|
- [**`npm run serve`**](package.json#L8) *Runs app on a lightweight node server*
|
||||||
|
- [**`npm run dev`**](package.json#L10) *Starts webpack-dev-server, for live changes*
|
||||||
|
- [**`npm run clean`**](package.json#L12) *Removes all generated files and libraries*
|
||||||
|
- [**`npm run test`**](package.json#L11) *Executes the test scripts*
|
||||||
|
|
||||||
|
*__Note:__ You should only need to modify files within the [`/src`](src/) directory, and the [`*.md`](pages/) files. Anything else will be overidden when webpack builds.*
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
- This project uses [Docsify](https://github.com/QingWei-Li/docsify/) to display MD docs and for navigation
|
||||||
|
- The homepage Vonoroi visualisation was based on Mike Bostock's origional D3.js [voronoi](https://github.com/d3/d3-voronoi) script.
|
||||||
|
|
||||||
|
## License
|
||||||
|
Licensed under MIT, (C) [Alicia Sykes](https://aliciasykes.com) 2018. [Read full License](LICENSE.md).
|
||||||
|
|
||||||
|
[![License](https://upload.wikimedia.org/wikipedia/commons/f/f8/License_icon-mit-88x31-2.svg)](LICENSE.md)
|
5
docs/server.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
var connect = require('connect');
|
||||||
|
var serveStatic = require('serve-static');
|
||||||
|
connect().use(serveStatic(__dirname)).listen(8080, function(){
|
||||||
|
console.log('Server running on 8080...');
|
||||||
|
});
|
BIN
docs/src/assets/cover.png
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
docs/src/assets/icon.png
Normal file
After Width: | Height: | Size: 66 KiB |
116
docs/src/index.hbs
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<!-- Site Basic Meta Info -->
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
|
|
||||||
|
<!-- Site Basic Name Info -->
|
||||||
|
<title>{{meta.title}}</title>
|
||||||
|
<meta name="author" content="{{meta.author}}">
|
||||||
|
<meta name="description" content="{{meta.description}}">
|
||||||
|
<meta name="keywords" content="{{meta.keywords}}">
|
||||||
|
<meta name="image" content="dist/assets/cover.png">
|
||||||
|
<link rel="canonical" href="{{meta.url}}" />
|
||||||
|
|
||||||
|
<!-- App Manifest -->
|
||||||
|
<link rel="manifest" href="dist/manifest.json">
|
||||||
|
<meta name="theme-color" content="{{meta.color}}"/>
|
||||||
|
|
||||||
|
<!-- Schema.org for Google -->
|
||||||
|
<meta itemprop="name" content="{{meta.title}}">
|
||||||
|
<meta itemprop="description" content="{{meta.description}}">
|
||||||
|
<meta itemprop="image" content="dist/assets/cover.png">
|
||||||
|
|
||||||
|
<!-- Twitter -->
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:title" content="{{meta.title}}">
|
||||||
|
<meta name="twitter:description" content="{{meta.description}}">
|
||||||
|
<meta name="twitter:image" content="dist/assets/cover.png">
|
||||||
|
|
||||||
|
<!-- Open Graph general (Facebook, Pinterest & Google+) -->
|
||||||
|
<meta name="og:title" content="{{meta.title}}">
|
||||||
|
<meta name="og:description" content="{{meta.description}}">
|
||||||
|
<meta name="og:image" content="dist/assets/cover.png">
|
||||||
|
<meta name="og:url" content="{{meta.url}}">
|
||||||
|
<meta name="og:site_name" content="{{meta.title}}">
|
||||||
|
<meta name="og:type" content="website">
|
||||||
|
|
||||||
|
<!-- Fonts, Icons and Styles -->
|
||||||
|
<link rel="shortcut icon" href="dist/icons/favicon.ico" type="image/vnd.microsoft.icon">
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/docsify/lib/themes/vue.css">
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.1/css/bulma.min.css" />
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" href="dist/voronoi-styles.css" type="text/css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="vonoroi"></div>
|
||||||
|
|
||||||
|
<div id="app"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
window.$docsify = {
|
||||||
|
name: '{{meta.title}}',
|
||||||
|
repo: '{{meta.repo}}',
|
||||||
|
ga: '{{meta.ga}}',
|
||||||
|
homepage: 'readme.md',
|
||||||
|
coverpage: 'pages/cover.md',
|
||||||
|
notFoundPage: 'pages/404.md',
|
||||||
|
themeColor: '{{meta.color}}',
|
||||||
|
auto2top: true,
|
||||||
|
|
||||||
|
homepage: 'https://raw.githubusercontent.com/Lissy93/personal-security-checklist/master/readme.md',
|
||||||
|
|
||||||
|
search: {
|
||||||
|
maxAge: 86400000,
|
||||||
|
paths: ['readme.md'],
|
||||||
|
placeholder: 'Type to search',
|
||||||
|
noData: 'No Results!',
|
||||||
|
},
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
function (hook) {
|
||||||
|
hook.ready(function () {
|
||||||
|
Window.finishMdRender();
|
||||||
|
})
|
||||||
|
},
|
||||||
|
function (hook) {
|
||||||
|
var footer = [
|
||||||
|
'<hr/>',
|
||||||
|
'<footer>',
|
||||||
|
'<span><a href="https://aliciasykes.com">Alicia Sykes</a> ©2018.</span>',
|
||||||
|
'</footer>'
|
||||||
|
].join('')
|
||||||
|
hook.afterEach(function (html) {
|
||||||
|
return html + footer
|
||||||
|
})
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- Docsify and Plugins -->
|
||||||
|
<script src="https://unpkg.com/docsify/lib/docsify.min.js"></script>
|
||||||
|
|
||||||
|
<script src="//unpkg.com/docsify-copy-code"></script>
|
||||||
|
<script src="//unpkg.com/docsify/lib/plugins/ga.min.js"></script>
|
||||||
|
<script src="//unpkg.com/docsify/lib/plugins/search.min.js"></script>
|
||||||
|
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- JavaScripts (D3 and voronoi + website scripts) -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
|
||||||
|
<script src="dist/voronoi-app.js"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
13
docs/src/locals.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"meta":{
|
||||||
|
"title": "Personal Security Checklist",
|
||||||
|
"author": "Alicia Sykes",
|
||||||
|
"description": "A checklist of basic things you should do, to stay safer online",
|
||||||
|
"keywords": "voroni,d3,demo,lissy93",
|
||||||
|
"url": "https://lissy93.github.io/personal-security-checklist/#/",
|
||||||
|
"repo": "https://github.com/Lissy93/personal-security-checklist",
|
||||||
|
"color": "#121f42",
|
||||||
|
"ga": "UA-120900119-4"
|
||||||
|
},
|
||||||
|
"show-vonori-chart": true
|
||||||
|
}
|
8
docs/src/main.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import './styles/voronoi-styles.scss'
|
||||||
|
import D3Voronoi from './scripts/d3-voronoi.ts'
|
||||||
|
import SmoothScrolling from './scripts/page-actions.js'
|
||||||
|
|
||||||
|
const voronoi = new D3Voronoi();
|
||||||
|
|
||||||
|
// I will go to hell for this next line
|
||||||
|
Window.finishMdRender = ()=> SmoothScrolling();
|
56
docs/src/manifest.json
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"short_name": "Security Checklist",
|
||||||
|
"name": "Personal Security Checklist",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-36x36.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "36x36"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-48x48.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "48x48"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-72x72.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-96x96.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "96x96"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-144x144.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "144x144"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-192x192.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-256x256.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-384x384.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "384x384"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "dist/icons/android-chrome-512x512.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": "/index.html/?source=pwa",
|
||||||
|
"background_color": "#BCA9F5",
|
||||||
|
"display": "standalone",
|
||||||
|
"scope": "/",
|
||||||
|
"theme_color": "#121f42"
|
||||||
|
}
|
153
docs/src/scripts/d3-voronoi.ts
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
declare const d3; // D3.js is either already bundled by Webpack or fetched via CDN
|
||||||
|
|
||||||
|
export default class D3Voronoi{
|
||||||
|
|
||||||
|
/* Defining the attrinbuteds */
|
||||||
|
private target;
|
||||||
|
private svg;
|
||||||
|
private height;
|
||||||
|
private width;
|
||||||
|
|
||||||
|
private voronoi;
|
||||||
|
private sites;
|
||||||
|
private polygon;
|
||||||
|
private link;
|
||||||
|
private site;
|
||||||
|
|
||||||
|
constructor(targetContainer = '#vonoroi'){
|
||||||
|
this.target = d3.select(targetContainer);
|
||||||
|
this.renderTheAwesome()
|
||||||
|
this.watchForResize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the main render method
|
||||||
|
*/
|
||||||
|
public renderTheAwesome(){
|
||||||
|
|
||||||
|
this.svg = this.target.append("svg");
|
||||||
|
this.width = this.target.node().getBoundingClientRect().width;
|
||||||
|
this.height = this.target.node().getBoundingClientRect().height;
|
||||||
|
|
||||||
|
this.svg.attr('width', this.width);
|
||||||
|
this.svg.attr('height', this.height);
|
||||||
|
|
||||||
|
this.mouseLeaveEvents();
|
||||||
|
|
||||||
|
/* Calculate how many sites to display and generate them */
|
||||||
|
this.sites = d3.range(300).map((d) => {
|
||||||
|
return [Math.random() * this.width, Math.random() * this.height];
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Add the mouseover event, for highlighting */
|
||||||
|
let that = this;
|
||||||
|
this.svg.on('touchmove mousemove', function(){
|
||||||
|
that.sites[0] = d3.mouse(this);
|
||||||
|
that.redraw();
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Initialise the D3 Voroni */
|
||||||
|
this.voronoi = d3.voronoi()
|
||||||
|
.extent([[-1, -1], [this.width + 1, this.height + 1]]);
|
||||||
|
|
||||||
|
/* Add Polygon for each site */
|
||||||
|
this.polygon = this.svg.append('g')
|
||||||
|
.attr('class', 'polygons')
|
||||||
|
.selectAll('path')
|
||||||
|
.data(this.voronoi.polygons(this.sites))
|
||||||
|
.enter().append('path')
|
||||||
|
.call(this.redrawPolygon);
|
||||||
|
|
||||||
|
/* Add Lines for each polygon */
|
||||||
|
this.link = this.svg.append('g')
|
||||||
|
.attr('class', 'links')
|
||||||
|
.selectAll('line')
|
||||||
|
.data(this.voronoi.links(this.sites))
|
||||||
|
.enter().append('line')
|
||||||
|
.call(this.redrawLink);
|
||||||
|
|
||||||
|
/* Add the actual Site */
|
||||||
|
this.site = this.svg.append('g')
|
||||||
|
.attr('class', 'sites')
|
||||||
|
.selectAll('circle')
|
||||||
|
.data(this.sites)
|
||||||
|
.enter().append('circle')
|
||||||
|
.attr('r', 2.5)
|
||||||
|
.call(this.redrawSite);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Triggers the render methods for polygons, lins and sites
|
||||||
|
*/
|
||||||
|
private redraw() {
|
||||||
|
const diagram = this.voronoi(this.sites);
|
||||||
|
this.polygon = this.polygon.data(diagram.polygons()).call(this.redrawPolygon);
|
||||||
|
this.link = this.link.data(diagram.links()), this.link.exit().remove();
|
||||||
|
this.link = this.link.enter().append('line').merge(this.link).call(this.redrawLink);
|
||||||
|
this.site = this.site.data(this.sites).call(this.redrawSite);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a given polygon
|
||||||
|
* @param polygon
|
||||||
|
*/
|
||||||
|
private redrawPolygon(polygon) {
|
||||||
|
polygon
|
||||||
|
.attr('d', (d) => { return d ? 'M' + d.join('L') + 'Z' : null; })
|
||||||
|
.attr('class', (d, i) => { return 'v-' + i % 9; });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the dimensions and positions of the links between sites
|
||||||
|
* @param link
|
||||||
|
*/
|
||||||
|
private redrawLink(link) {
|
||||||
|
link
|
||||||
|
.attr('x1', (d) => { return d.source[0]; })
|
||||||
|
.attr('y1', (d) => { return d.source[1]; })
|
||||||
|
.attr('x2', (d) => { return d.target[0]; })
|
||||||
|
.attr('y2', (d) => { return d.target[1]; });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets dimensions and positions of each given site
|
||||||
|
* @param site
|
||||||
|
*/
|
||||||
|
private redrawSite(site) {
|
||||||
|
site
|
||||||
|
.attr('cx', (d) => { return d[0]; })
|
||||||
|
.attr('cy', (d) => { return d[1]; });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes old svg and rerenders a new one
|
||||||
|
* Only used in the (hopefully) rare occasion
|
||||||
|
* that a user will resize their browser
|
||||||
|
*/
|
||||||
|
private rerender(){
|
||||||
|
this.svg.remove();
|
||||||
|
this.renderTheAwesome();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Work-around to make the chart work on all (most) screen sizes
|
||||||
|
* @param event
|
||||||
|
*/
|
||||||
|
private watchForResize(){
|
||||||
|
let resizeTimer = undefined;
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
clearTimeout(resizeTimer);
|
||||||
|
return resizeTimer = setTimeout((() =>
|
||||||
|
this.rerender() ), 250);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private mouseLeaveEvents(){
|
||||||
|
let that = this;
|
||||||
|
this.svg.on('mouseleave', function() {
|
||||||
|
d3.selectAll('.polygons :first-child').attr('class', 'deselect-polygon');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
8
docs/src/scripts/google-analytics.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-XXXXXXXX-Y']);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();
|
12
docs/src/scripts/page-actions.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/* Smooth Scrolling for Internal Anchor Links */
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||||
|
anchor.addEventListener('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
document.querySelector(this.getAttribute('href').replace('/?id=', '')).scrollIntoView({
|
||||||
|
behavior: 'smooth'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
36
docs/src/styles/404.scss
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
@import 'constants.scss';
|
||||||
|
|
||||||
|
div.p404 {
|
||||||
|
width: 80%;
|
||||||
|
margin: 1em auto;
|
||||||
|
|
||||||
|
h1, h2 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 5em;
|
||||||
|
}
|
||||||
|
h2{
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p404-links{
|
||||||
|
margin: 20% auto;
|
||||||
|
a{
|
||||||
|
text-align: center;
|
||||||
|
color: $col-cover-secondry;
|
||||||
|
min-width: 180px;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0.5em;
|
||||||
|
padding: 0.25em 0.5em;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
border-radius: 3px;
|
||||||
|
|
||||||
|
&:hover{
|
||||||
|
border: 2px solid $col-cover-secondry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
docs/src/styles/constants.scss
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
/* Default Website Font*/
|
||||||
|
$font: 'Raleway', sans-serif;
|
||||||
|
|
||||||
|
/* Website Cover Colors */
|
||||||
|
$col-cover-primary: #f4be1a;
|
||||||
|
$col-cover-secondry: #121f42;
|
||||||
|
$col-cover-pale: #E8E8E8;
|
||||||
|
$col-cover-dark: #272727;
|
||||||
|
|
||||||
|
|
||||||
|
/* Vonoroi Chart Colors */
|
||||||
|
$col-lines: #121f42;
|
||||||
|
$col-initial-primary-fill: #121f42;
|
||||||
|
$col-selected-polygon: #f4be1a;
|
||||||
|
$col-selected-site-fill: #121f42;
|
||||||
|
$col-selected-site-stroke: #121f42;
|
||||||
|
$col-sites-fill: none;
|
||||||
|
$col-sites-line: #121f42;
|
75
docs/src/styles/cover-styles.scss
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
|
||||||
|
@import 'constants.scss';
|
||||||
|
|
||||||
|
.github-corner svg{
|
||||||
|
fill: $col-cover-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress{
|
||||||
|
background: $col-cover-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
path.octo-body, path.octo-arm{
|
||||||
|
fill: $col-cover-secondry;
|
||||||
|
}
|
||||||
|
|
||||||
|
section.cover .cover-main{
|
||||||
|
|
||||||
|
/* Main cover title */
|
||||||
|
h1 a span{
|
||||||
|
color: $col-cover-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tag line / short description */
|
||||||
|
blockquote p{
|
||||||
|
color: $col-cover-pale;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* All but the last button */
|
||||||
|
p:last-child a{
|
||||||
|
color: $col-cover-primary;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 2px solid $col-cover-primary;
|
||||||
|
&:hover{
|
||||||
|
background: lighten($col-cover-primary, 20);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Last button */
|
||||||
|
p:last-child a:last-child{
|
||||||
|
color: $col-cover-dark;
|
||||||
|
background: $col-cover-primary;
|
||||||
|
&:hover{
|
||||||
|
background: lighten($col-cover-primary, 20);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.cover-footer{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 2em;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
a{
|
||||||
|
display: inline-block;
|
||||||
|
color: $col-cover-primary;
|
||||||
|
padding: 1em 2em;
|
||||||
|
min-width: 200px;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
&:hover{
|
||||||
|
border: 2px solid $col-cover-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.cover{
|
||||||
|
height: auto !important;
|
||||||
|
min-height: 30%;
|
||||||
|
max-height: 50%;
|
||||||
|
}
|
49
docs/src/styles/general-site-styles.scss
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
|
||||||
|
@import 'constants.scss';
|
||||||
|
|
||||||
|
/* Cover Page Layout */
|
||||||
|
html, body{
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height:100%;
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
#vonoroi{
|
||||||
|
min-height: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set fonts */
|
||||||
|
h1, h2, h3, p, span, a, div {
|
||||||
|
font-family: $font;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Underline colors for MD headings */
|
||||||
|
.markdown-section a {
|
||||||
|
color: $col-cover-secondry;
|
||||||
|
&:hover{
|
||||||
|
color: $col-cover-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selected link color for sidebar */
|
||||||
|
.sidebar ul li.active>a{
|
||||||
|
color: $col-cover-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color of code snippets */
|
||||||
|
.markdown-section code, .markdown-section pre>code{
|
||||||
|
color: $col-cover-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color of burger menu */
|
||||||
|
.sidebar-toggle span{
|
||||||
|
background-color: $col-cover-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
section.content{
|
||||||
|
background: #FFFFFF;
|
||||||
|
}
|
36
docs/src/styles/vonoroi-chart-colors.scss
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
@import 'constants.scss';
|
||||||
|
|
||||||
|
.links {
|
||||||
|
stroke: $col-lines;
|
||||||
|
stroke-opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.polygons {
|
||||||
|
fill: none;
|
||||||
|
stroke: $col-lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
.polygons :first-child {
|
||||||
|
fill: $col-selected-polygon;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deselect-polygon {
|
||||||
|
fill: $col-initial-primary-fill !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sites {
|
||||||
|
fill: $col-sites-fill;
|
||||||
|
stroke: $col-sites-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sites :first-child {
|
||||||
|
fill: $col-selected-site-fill;
|
||||||
|
stroke: $col-selected-site-stroke;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@for $von-num from 0 through 9 {
|
||||||
|
.v-#{$von-num} {
|
||||||
|
fill: lighten($col-initial-primary-fill, $von-num*1);
|
||||||
|
}
|
||||||
|
}
|
5
docs/src/styles/voronoi-styles.scss
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
@import 'vonoroi-chart-colors.scss';
|
||||||
|
@import 'cover-styles.scss';
|
||||||
|
@import 'general-site-styles.scss';
|
||||||
|
@import '404.scss';
|
1
docs/src/tsconfig.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
138
docs/webpack.config.js
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
|
||||||
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||||
|
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
|
||||||
|
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||||
|
const HandlebarsPlugin = require("handlebars-webpack-plugin");
|
||||||
|
const FaviconsWebpackPlugin = require('favicons-webpack-plugin')
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
|
|
||||||
|
|
||||||
|
const webpack = require('webpack');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
mode: 'production',
|
||||||
|
|
||||||
|
entry: {
|
||||||
|
'voronoi-app': './src/main.js',
|
||||||
|
analytics: './src/scripts/google-analytics.js',
|
||||||
|
},
|
||||||
|
|
||||||
|
output: {
|
||||||
|
path: path.join(__dirname, 'dist'),
|
||||||
|
publicPath: "/dist/",
|
||||||
|
filename: '[name].js'
|
||||||
|
},
|
||||||
|
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.ts', '.js' ]
|
||||||
|
},
|
||||||
|
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.js?$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: {
|
||||||
|
loader: 'babel-loader',
|
||||||
|
options: {
|
||||||
|
presets: ['@babel/preset-es2016']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
test: /\.ts?$/,
|
||||||
|
loader: 'ts-loader',
|
||||||
|
exclude: /node_modules/,
|
||||||
|
options: {
|
||||||
|
configFile: 'src/tsconfig.json'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
test: /\.scss$/,
|
||||||
|
use: [ 'style-loader', MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
devServer: { /* todo */},
|
||||||
|
|
||||||
|
externals: {
|
||||||
|
d3: 'd3'
|
||||||
|
},
|
||||||
|
|
||||||
|
optimization: {
|
||||||
|
minimizer: [
|
||||||
|
new UglifyJsPlugin({
|
||||||
|
cache: true,
|
||||||
|
parallel: true
|
||||||
|
}),
|
||||||
|
new OptimizeCSSAssetsPlugin({})
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
|
||||||
|
new FaviconsWebpackPlugin({
|
||||||
|
logo: './src/assets/icon.png',
|
||||||
|
prefix: 'icons/',
|
||||||
|
inject: false,
|
||||||
|
persistentCache: false,
|
||||||
|
icons: {
|
||||||
|
android: true,
|
||||||
|
appleIcon: false,
|
||||||
|
appleStartup: false,
|
||||||
|
coast: false,
|
||||||
|
favicons: true,
|
||||||
|
firefox: false,
|
||||||
|
windows: false,
|
||||||
|
yandex: false
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
new HandlebarsPlugin({
|
||||||
|
entry: 'src/index.hbs',
|
||||||
|
output: 'index.html',
|
||||||
|
data: 'src/locals.json'
|
||||||
|
}),
|
||||||
|
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: 'voronoi-styles.css',
|
||||||
|
}),
|
||||||
|
|
||||||
|
// new HtmlWebpackPlugin({
|
||||||
|
// template: 'src/main.js',
|
||||||
|
// title: 'HTML Webpack Plugin',
|
||||||
|
// }),
|
||||||
|
|
||||||
|
new webpack.ProvidePlugin({
|
||||||
|
_: "underscore"
|
||||||
|
}),
|
||||||
|
|
||||||
|
new CopyWebpackPlugin([
|
||||||
|
// Static Assets
|
||||||
|
{ from: 'src/manifest.json', to: '' },
|
||||||
|
{ from: 'src/assets', to: 'assets' },
|
||||||
|
|
||||||
|
// Offline fallback for CDN libraries - JS
|
||||||
|
{ from: 'node_modules/d3/dist/d3.min.js', to: 'lib/js' },
|
||||||
|
{ from: 'node_modules/docsify/lib/docsify.min.js', to: 'lib/js' },
|
||||||
|
{ from: 'node_modules/docsify/lib/plugins/emoji.min.js', to: 'lib/js' },
|
||||||
|
{ from: 'node_modules/docsify/lib/plugins/external-script.min.js', to: 'lib/js' },
|
||||||
|
{ from: 'node_modules/docsify/lib/plugins/ga.min.js', to: 'lib/js' },
|
||||||
|
{ from: 'node_modules/docsify/lib/plugins/gitalk.min.js', to: 'lib/js' },
|
||||||
|
{ from: 'node_modules/docsify/lib/plugins/search.min.js', to: 'lib/js' },
|
||||||
|
{ from: 'node_modules/docsify/lib/plugins/zoom-image.min.js', to: 'lib/js' },
|
||||||
|
|
||||||
|
// Offline fallback for CDN libraries - CSS
|
||||||
|
{ from: 'node_modules/raleway-webfont/raleway.min.css', to: 'lib/font' },
|
||||||
|
{ from: 'node_modules/bulma/css/bulma.min.css', to: 'lib/css' },
|
||||||
|
{ from: 'node_modules/docsify/lib/themes/vue.css', to: 'lib/css' },
|
||||||
|
{ from: 'node_modules/font-awesome/css/font-awesome.min.css', to: 'lib/css' }
|
||||||
|
])
|
||||||
|
]
|
||||||
|
};
|