-{% endif %}
\ No newline at end of file
diff --git a/_includes/toc b/_includes/toc
deleted file mode 100644
index 6423ccd..0000000
--- a/_includes/toc
+++ /dev/null
@@ -1,7 +0,0 @@
-
\ No newline at end of file
diff --git a/_includes/toc.html b/_includes/toc.html
deleted file mode 100644
index 8c71007..0000000
--- a/_includes/toc.html
+++ /dev/null
@@ -1,182 +0,0 @@
-{% capture tocWorkspace %}
- {% comment %}
- Copyright (c) 2017 Vladimir "allejo" Jimenez
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. 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.
- {% endcomment %}
- {% comment %}
- Version 1.1.0
- https://github.com/allejo/jekyll-toc
-
- "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
-
- Usage:
- {% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
-
- Parameters:
- * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
-
- Optional Parameters:
- * sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
- * class (string) : '' - a CSS class assigned to the TOC
- * id (string) : '' - an ID to assigned to the TOC
- * h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
- * h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
- * ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
- * item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
- * submenu_class (string) : '' - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level
- * base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
- * anchor_class (string) : '' - add custom class(es) for each anchor element
- * skip_no_ids (bool) : false - skip headers that do not have an `id` attribute
-
- Output:
- An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
- generate the table of contents and will NOT output the markdown given to it
- {% endcomment %}
-
- {% capture newline %}
- {% endcapture %}
- {% assign newline = newline | rstrip %}
-
- {% capture deprecation_warnings %}{% endcapture %}
-
- {% if include.baseurl %}
- {% capture deprecation_warnings %}{{ deprecation_warnings }}{{ newline }}{% endcapture %}
- {% endif %}
-
- {% if include.skipNoIDs %}
- {% capture deprecation_warnings %}{{ deprecation_warnings }}{{ newline }}{% endcapture %}
- {% endif %}
-
- {% capture jekyll_toc %}{% endcapture %}
- {% assign orderedList = include.ordered | default: false %}
- {% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
- {% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}
- {% assign minHeader = include.h_min | default: 1 %}
- {% assign maxHeader = include.h_max | default: 6 %}
- {% assign nodes = include.html | strip | split: ' maxHeader %}
- {% continue %}
- {% endif %}
-
- {% assign _workspace = node | split: '' | first }}>{% endcapture %}
- {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
-
- {% if include.item_class and include.item_class != blank %}
- {% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %}
- {% endif %}
-
- {% if include.submenu_class and include.submenu_class != blank %}
- {% assign subMenuLevel = currLevel | minus: 1 %}
- {% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %}
- {% endif %}
-
- {% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
-
- {% if htmlID %}
- {% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %}
-
- {% if include.anchor_class %}
- {% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %}
- {% endif %}
-
- {% capture listItem %}{{ anchorBody }}{% endcapture %}
- {% elsif skipNoIDs == true %}
- {% continue %}
- {% else %}
- {% capture listItem %}{{ anchorBody }}{% endcapture %}
- {% endif %}
-
- {% if currLevel > lastLevel %}
- {% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
- {% elsif currLevel < lastLevel %}
- {% assign repeatCount = lastLevel | minus: currLevel %}
-
- {% for i in (1..repeatCount) %}
- {% capture jekyll_toc %}{{ jekyll_toc }}{{ listModifier }}>{% endcapture %}
- {% endfor %}
-
- {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %}
- {% else %}
- {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %}
- {% endif %}
-
- {% capture jekyll_toc %}{{ jekyll_toc }}
-
-{% assign entries_layout = page.entries_layout | default: 'list' %}
-{% for i in (1..categories_max) reversed %}
- {% for category in site.categories %}
- {% if category[1].size == i %}
-
-
{{ category[0] }}
-
- {% for post in category.last %}
- {% include archive-single.html type=entries_layout %}
- {% endfor %}
-
-
-{% assign entries_layout = page.entries_layout | default: 'list' %}
-{% for i in (1..tags_max) reversed %}
- {% for tag in site.tags %}
- {% if tag[1].size == i %}
-
-
{{ tag[0] }}
-
- {% for post in tag.last %}
- {% include archive-single.html type=entries_layout %}
- {% endfor %}
-
- {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑
-
- {% endif %}
- {% endfor %}
-{% endfor %}
diff --git a/_pages/af_ZA/404.txt b/_pages/af_ZA/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/af_ZA/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/af_ZA/donations.txt b/_pages/af_ZA/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/af_ZA/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/af_ZA/home.txt b/_pages/af_ZA/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/af_ZA/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/af_ZA/privacy-policy.txt b/_pages/af_ZA/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/af_ZA/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/af_ZA/why-ads.txt b/_pages/af_ZA/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/af_ZA/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/ar_SA/404.txt b/_pages/ar_SA/404.txt
deleted file mode 100644
index b5c99b0..0000000
--- a/_pages/ar_SA/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "لم يتم العثور على الصفحة" #
-excerpt: "لم يتم العثور على الصفحة. شكرا لك ماريو! لكن أميرتنا في قلعة أخرى." #
-sitemap: false
----
-
-نأسف, ولكن الصفحة التي تحاول مشاهدتها ليست موجوده.
-{: .notice--info}
diff --git a/_pages/ar_SA/donations.txt b/_pages/ar_SA/donations.txt
deleted file mode 100644
index d057b5b..0000000
--- a/_pages/ar_SA/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "التبرعات"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/ar_SA/home.txt b/_pages/ar_SA/home.txt
deleted file mode 100644
index 7044ab8..0000000
--- a/_pages/ar_SA/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "دليل.التهكيرات"
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: " أدلة كاملة عن الـHomebrew و التحديثات المعدلة CFW لعدة أجهزة. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "دليل تهكير جهاز 3DS"
- excerpt: "دليل كامل عن التحديثات المعدلة CFW لجهاز الـ3DS، من التحديث الأصلي إلى boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "دليل تهكير جهاز Wii U"
- excerpt: "دليل كامل عن التحديثات المعدلة CFW لجهاز الـWii U، من التحديث الأصلي إلى Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "دليل تهكير جهاز سوني Vita"
- excerpt: "دليل كامل عن التحديثات المعدلة CFW لجهاز الـPS Vita (TV)، من التحديث الأصلي إلى HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/ar_SA/privacy-policy.txt b/_pages/ar_SA/privacy-policy.txt
deleted file mode 100644
index 0ead8a0..0000000
--- a/_pages/ar_SA/privacy-policy.txt
+++ /dev/null
@@ -1,34 +0,0 @@
----
-العنوان: "سياسة الخصوصية" #
----
-
-### ملفات تعريف الارتباط
-
-يستخدم هذا الموقع ملفات تعريف الارتباط لتسهيل توجيه المستخدمين من خلال إرشادات الدليل. تسمح ملفات تعريف الارتباط للشريط الجانبي للصفحة بعرض التقدم الحالي عبر الموقع لمساعدة المستخدمين على التنقل في الإرشادات بسهولة أكبر.
-
-### محتوى مضمن من مواقع أخرى
-
-قد يتضمن موقعه محتوى مضمنًا (على سبيل المثال. مقاطع الفيديو والصور والمقالات ، وما إلى ذلك). يتصرف المحتوى المضمن من مواقع الويب الأخرى كما لو كان المستخدم قد قام بزيارة الموقع الآخر.
-
-قد تقوم مواقع الويب هذه بجمع بيانات عنك ، واستخدام ملفات تعريف الارتباط ، وتضمين تتبع إضافي لجهة خارجية ، ومراقبة تفاعلك مع هذا المحتوى المضمن ، بما في ذلك تتبع تفاعلك مع المحتوى المضمن إذا كان لديك حساب وقمت بتسجيل الدخول إلى هذا الموقع.
-
-### تحليلات
-
-يستخدم هذا الموقع تحليلات جوجل لمراقبة وتحليل حركة المرور. تتم استضافة هذا الموقع بواسطة صفحات جيت هب، التي قد تجمع بيانات عنك ، وتستخدم ملفات تعريف الارتباط ، وتتضمن تتبعًا إضافيًا لجهة خارجية ، وتراقب تفاعلك مع هذا الموقع. لمزيد من المعلومات حول صفحات جيثب من حيث صلتها بخصوصية المستخدم ، انظر [بيان خصوصية جيت هب]
-(https://help.github.com/en/articles/github-privacy-statement).
-
-### المعلومات التي تم جمعها
-
-هذا الموقع لا يجمع المعلومات الشخصية. قد يجمع هذا الموقع معلومات الاستخدام من أجل تحليل الاهتمام بالمحتوى وتزويد المعلنين بالمعلومات على أساس كلي. لا تتم مشاركة معلومات التعريف الشخصية مع شركات الإعلان التابعة لجهات خارجية.
-
-تستخدم جوجل (كمورد إعلان خارجي) ملفات تعريف الارتباط لعرض الإعلانات على هذا الموقع. يتيح استخدام جوجل لملفات تعريف الارتباط DART تقديم إعلانات للزائرين استنادًا إلى زياراتهم لهذا الموقع والمواقع الأخرى. لإلغاء اشتراك ملفات تعريف الارتباط DART ، انظر [سياسة خصوصية إعلانات جوجل](http://www.google.com/policies/technologies/ads/).
-
-قد تستخدم خوادم أو شبكات إعلانات الجهات الخارجية أيضًا ملفات تعريف الارتباط لتتبع نشاط المستخدم على هذا الموقع لقياس فعالية الإعلان أو لأسباب أخرى منصوص عليها في سياسات الخصوصية الخاصة بهم. لا يتمتع هذا الموقع بأي حق الوصول أو التحكم في أي ملفات تعريف ارتباط يمكن استخدامها من قِبل المعلنين الخارجيين.
-
-### مواقع الطرف الثالث
-
-قد يرتبط هذا الموقع بمواقع أخرى لاستخدامها أو الرجوع إليها. هذا الموقع غير مسؤول عن سياسات الخصوصية للمواقع الأخرى. يجب أن يدرك المستخدمون أن سياسات الخصوصية الخاصة بمواقع الويب الأخرى قد تختلف عن هذه السياسات.
-
-### التغييرات في سياسة الخصوصية
-
-يمكن تغيير محتويات سياسة الخصوصية هذه في أي وقت ولأي سبب. للأسئلة المتعلقة بسياسة الخصوصية لهذا الموقع ، اتصل[plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/ar_SA/why-ads.txt b/_pages/ar_SA/why-ads.txt
deleted file mode 100644
index d2916c3..0000000
--- a/_pages/ar_SA/why-ads.txt
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: "لماذا الإعلانات؟"
----
-
-من الكاتب الأصلي:
-"هذا المشروع ثمرة مئات الساعات من الجهد المتواصل".
-
-"أقوم بتحديث هذا الدليل مجانا، و أحرص على مواكبته المستجدات. و لهذا السبب، أظنه من الإنصاف أن أحاول أن أسترزق قليلا من عملي.".
-
-"هذا الموقع لا يكلفك شيئا لاستعماله، و كل الإعلانات فيه لا تفسد على القارئ. لو كنت تمانع رغم كل هذا، فخذ حريتك في حجب هذه الإعلانات بمتصفحك.".
-
-"لو اخترت حجب الاعلإنات، فأود تذكيرك بصفحة التبرعات [Donations](التبرعات)، مع أنها هي الأخرى اختيارية أيضا".
-
-"شكرا،"
-Plailect
diff --git a/_pages/ca_ES/404.txt b/_pages/ca_ES/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/ca_ES/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/ca_ES/donations.txt b/_pages/ca_ES/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/ca_ES/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/ca_ES/home.txt b/_pages/ca_ES/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/ca_ES/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/ca_ES/privacy-policy.txt b/_pages/ca_ES/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/ca_ES/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/ca_ES/why-ads.txt b/_pages/ca_ES/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/ca_ES/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/cs_CZ/404.txt b/_pages/cs_CZ/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/cs_CZ/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/cs_CZ/donations.txt b/_pages/cs_CZ/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/cs_CZ/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/cs_CZ/home.txt b/_pages/cs_CZ/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/cs_CZ/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/cs_CZ/privacy-policy.txt b/_pages/cs_CZ/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/cs_CZ/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/cs_CZ/why-ads.txt b/_pages/cs_CZ/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/cs_CZ/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/da_DK/404.txt b/_pages/da_DK/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/da_DK/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/da_DK/donations.txt b/_pages/da_DK/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/da_DK/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/da_DK/home.txt b/_pages/da_DK/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/da_DK/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/da_DK/privacy-policy.txt b/_pages/da_DK/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/da_DK/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/da_DK/why-ads.txt b/_pages/da_DK/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/da_DK/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/de_DE/404.txt b/_pages/de_DE/404.txt
deleted file mode 100644
index 55ab190..0000000
--- a/_pages/de_DE/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Seite nicht gefunden" #
-excerpt: "Seite nicht gefunden. Deine Pixel befinden sich auf einem anderen Canvas." #
-sitemap: false
----
-
-Es tut uns leid, die gewünschte Seite existiert nicht.
-{: .notice--info}
diff --git a/_pages/de_DE/donations.txt b/_pages/de_DE/donations.txt
deleted file mode 100644
index 40dc99f..0000000
--- a/_pages/de_DE/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Spenden"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/de_DE/home.txt b/_pages/de_DE/home.txt
deleted file mode 100644
index 92e2efa..0000000
--- a/_pages/de_DE/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Vollständige Anleitungen zur Installation von Homebrew und veränderter Systemsoftware verschiedener Geräte. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- titel: "3DS Hacks Guide"
- excerpt: "Eine vollständige Anleitung für 3DS Custom Firmware, von original zu boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- titel: "Wii U Hacks Guide"
- excerpt: "Eine vollständige Anleitung für Wii U Custom Firmware, von original zu Coldboot Haxchi. "
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/de_DE/privacy-policy.txt b/_pages/de_DE/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/de_DE/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/de_DE/why-ads.txt b/_pages/de_DE/why-ads.txt
deleted file mode 100644
index d43022e..0000000
--- a/_pages/de_DE/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Warum Werbung?"
----
-
-Dieses Projekt hat Tausende von Stunden durchgehender Arbeit in Anspruch genommen.
-
-Ich halte diese Anleitung immer auf dem neuesten Stand und das kostenlos. Wegen diesem Aufwand denke ich, dass es fair ist, einige Einnahmen für die Arbeit zu erhalten.
-
-Diese Seite kostet dich nichts und die Werbung, die ich geschaltet habe, ist unaufdringlich. Solltest du dennoch ein Problem damit haben, steht es dir frei, die Werbung zu blockieren.
-
-Wenn du die Werbung blockiert, möchte ich dich hiermit noch einmal an die [Spendenseite](donations) erinnern, aber auch Spenden sind optional.
-
-Vielen Dank,
-Plailect
diff --git a/_pages/el_GR/404.txt b/_pages/el_GR/404.txt
deleted file mode 100644
index 5803807..0000000
--- a/_pages/el_GR/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Η Σελίδα Δεν Βρέθηκε" #
-excerpt: "Η σελίδα δεν βρέθηκε. Τα pixel σας βρίσκονται σε άλλον καμβά." #
-sitemap: false
----
-
-Συγνώμη, αλλά η σελίδα που προσπαθείτε να προβάλετε δεν υπάρχει.
-{: .notice--info}
diff --git a/_pages/el_GR/donations.txt b/_pages/el_GR/donations.txt
deleted file mode 100644
index 2440f3a..0000000
--- a/_pages/el_GR/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Δωρεές"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/el_GR/home.txt b/_pages/el_GR/home.txt
deleted file mode 100644
index f38676b..0000000
--- a/_pages/el_GR/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Οδηγός Hacks" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Ολοκληρωμένοι οδηγοί για homebrew και custom firmware για πολλαπλές συσκευές. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- τίτλος: "Οδηγός 3DS Hacks"
- excerpt: "Ένας πλήρης οδηγός για να αποκτήσετε custom firmware στο 3DS, από stock firmware σε boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Οδηγός Wii U Hacks"
- excerpt: "Ένας πλήρης οδηγός για να αποκτήσετε custom firmware στο Wii U, από stock firmware σε Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Οδηγός Vita Hacks"
- excerpt: "Ένας πλήρης οδηγός για να αποκτήσετε custom firmware στο PS Vita (TV), από stock firmware σε HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/el_GR/privacy-policy.txt b/_pages/el_GR/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/el_GR/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/el_GR/why-ads.txt b/_pages/el_GR/why-ads.txt
deleted file mode 100644
index 7dda0f7..0000000
--- a/_pages/el_GR/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Γιατί βλέπω διαφημίσεις;" #
----
-
-Αυτή η εργασία είναι συσσώρευση δουλειάς εκατοντάδων ωρών συνεχούς εργασίας.
-
-Συντηρώ αυτό τον οδηγό, δωρεάν, και διασφαλίζω πως είναι πάντα ενημερωμένος. Λόγο αυτής της προσπάθειας, πιστεύω πως είναι δίκαιο να προσπαθήσω να αποκτήσω ένα λιγοστό εισόδημα για την προσπάθεια που κατέβαλα.
-
-Αυτή η ιστοσελίδα δεν κοστίζει απολύτως τίποτα για να χρησιμοποιηθεί και όλες οι διαφημίσεις που προβάλλω είναι διακριτικές. Αν εξακολουθείτε να έχετε πρόβλημα με αυτό, μην διστάσετε να μπλοκάρετε αυτές τις διαφημίσεις.
-
-Εάν μπλοκάρετε τις διαφημίσεις, θα ήθελα να σας υπενθυμίσω σχετικά με την σελίδα για τα [Donations](donations), αλλά ξανά, αυτό είναι προαιρετικό.
-
-Ευχαριστώ,
-Plailect
diff --git a/_pages/en_PT/404.txt b/_pages/en_PT/404.txt
deleted file mode 100644
index e730d44..0000000
--- a/_pages/en_PT/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Ye pixels be on another treasure map." #
-sitemap: false
----
-
-Sorry, but th' page ye were tryin' to view does not exist.
-{: .notice--info}
diff --git a/_pages/en_PT/donations.txt b/_pages/en_PT/donations.txt
deleted file mode 100644
index 46e6e0c..0000000
--- a/_pages/en_PT/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Gimme Ye Gold"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/en_PT/home.txt b/_pages/en_PT/home.txt
deleted file mode 100644
index 7738483..0000000
--- a/_pages/en_PT/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew 'n custom firmware fer various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/en_PT/privacy-policy.txt b/_pages/en_PT/privacy-policy.txt
deleted file mode 100644
index c56cc20..0000000
--- a/_pages/en_PT/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-'Tis site makes use 'o cookies in order to make it easier fer users to be routed through th' instructions 'o th' guide. Specifically, cookies power th' overall progress display on a page's sidebar fer simpler user navigation throughout th' site.
-
-### Embedded Content From Other Websites
-
-'Tis site may embed external content (which might include, yet not be limited to, videos, images, 'n articles). When embedded content from another website be present, th' web browser behaves by th' same rules in accessin' both th' embedded content 'n th' other website itself.
-
-On account 'o 'tis, external websites wit' their content embedded in 'tis site may collect data concernin' ye. They may use cookies. They may embed additional third-party content wit' trackin'. 'N finally, they may monitor ye interaction wit' their embedded content, which might include trackin' ye interaction if ye be logged into an account on that website.
-
-### Analytics
-
-'Tis site has Google Analytics added fer analysis 'n monitorin' 'o site traffic. Additionally, 'tis site be hosted on GitHub Pages. GitHub Pages may collect data concernin' ye. It may use cookies. It may embed additional third-party content wit' trackin'. 'N finally, it may monitor ye interaction wit' 'tis site. Fer more information concernin' GitHub Pages 'n its relation to user privacy, ye oughtta read th' [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-'Tis site refrains from collectin' personal information. 'Tis site may, however, collect information on how it be used, in order that interest in content be analyzed 'n advertisers be provided wit' bulk, aggregated information. No personally identifiable information be shared wit' third-party advertisers.
-
-Google, actin' as a third party advertisement vendor, uses cookies to serve ads on 'tis site. Google makes use 'o DART cookies in order to serve advertisements to site visitors based on their visits to 'tis site as well as other sites. If ye desire to opt out of DART cookies, ye oughtta be sein' th' [Google Advertisin' Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Third-party advertisin' servers or networks besides Google may also use cookies, fer trackin' user activity 'n advertisement effectiveness on 'tis site or fer other purposes they provide in their own privacy policies. 'Tis site be unable to access or restrict any cookies that third-party advertisers may use.
-
-### Third-Party Websites
-
-'Tis site may contain hyperlinks pointin' to external websites. These be provided fer users to use or to reference. 'Tis site has no responsibility or control over external sites' privacy policies. Users oughtta be aware that these other websites' privacy policies may be different from 'tis one.
-
-### Changes to th' Privacy Policy
-
-Th' contents 'o 'tis privacy policy may be altered at whatever time, 'n fer whatever reason, alterations be deemed necessary. If ye have questions regardin' 'tis privacy policy, ye oughtta contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/en_PT/why-ads.txt b/_pages/en_PT/why-ads.txt
deleted file mode 100644
index 26ce43e..0000000
--- a/_pages/en_PT/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-'Tis project be th' culmination 'o thousands 'o hours 'o constant deck work.
-
-I maintain 'tis guide, fer free, 'n ensure it be always up to date. Because 'o 'tis effort, I feel that it be fair fer me to attempt to be gainin' a meager income from me work.
-
-'Tis site be costin' ye nothin' to use, 'n all that I display be non-intrusive ads. If ye still have a problem wit' 'tis, feel free to block these ads.
-
-If ye do block ads, I would like to also be remindin' ye 'o th' [Gimme Ye Gold](donations) page, but once again that be optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/en_US/404.txt b/_pages/en_US/404.txt
deleted file mode 100644
index 092604c..0000000
--- a/_pages/en_US/404.txt
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: "Page Not Found" #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/en_US/donations.txt b/_pages/en_US/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/en_US/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/en_US/home.txt b/_pages/en_US/home.txt
deleted file mode 100644
index 6284942..0000000
--- a/_pages/en_US/home.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Tiramisu."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
- - image_path: /images/home-page-wii.jpg
- url: "https://wii.hacks.guide/"
- title: "Wii Hacks Guide"
- excerpt: "The complete guide to modding your Nintendo Wii (and Wii mini)."
- - image_path: /images/home-page-switch.png
- url: "https://nh-server.github.io/switch-guide/"
- title: "Switch Hacks Guide"
- excerpt: "A complete guide to Switch custom firmware, from stock to Atmosphere."
----
-
-{% include feature_row %}
diff --git a/_pages/es_ES/404.txt b/_pages/es_ES/404.txt
deleted file mode 100644
index 37d20f8..0000000
--- a/_pages/es_ES/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Página no encontrada" #
-excerpt: "Página no encontrada. Tus píxeles están en otro lienzo." #
-sitemap: false
----
-
-Lo sentimos, la página que intentas ver no existe.
-{: .notice--info}
diff --git a/_pages/es_ES/donations.txt b/_pages/es_ES/donations.txt
deleted file mode 100644
index 39d4819..0000000
--- a/_pages/es_ES/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donaciones"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/es_ES/home.txt b/_pages/es_ES/home.txt
deleted file mode 100644
index 5b96307..0000000
--- a/_pages/es_ES/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Guías de Hacks" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Guías completas de homebrew y custom firmware para diversas consolas. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "Guía de hacks para 3DS"
- excerpt: "Una guía completa de custom firmware para 3DS, desde stock a boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Guía de hacks para Wii U"
- excerpt: "Una guía completa para instalar custom firmware en Wii U, desde stock hasta Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Guía de hacks para PS Vita"
- excerpt: "Una guía completa de custom firmware para PS Vita (TV), desde stock a HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/es_ES/privacy-policy.txt b/_pages/es_ES/privacy-policy.txt
deleted file mode 100644
index 74ba528..0000000
--- a/_pages/es_ES/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Política de privacidad" #
----
-
-### Cookies
-
-Este sitio utiliza cookies para facilitar el seguimiento de las instrucciones de la guía por parte de los usuarios. Las cookies permiten que el recuadro lateral de la página muestre el progreso de la lectura de la misma para ayudar a los usuarios a navegar por las instrucciones con mayor facilidad.
-
-### Contenido incluido de otros sitios web
-
-Este sitio puede incluir contenido externo (por ej.: videos, imágenes, artículos, etc.). Éste tipo de contenidos se comporta como si el usuario visitase el otro sitio web.
-
-Estos sitios pueden recolectar datos acerca de ti, usar cookies, incurrir en seguimiento adicional por parte de terceros y monitorear tu interacción con el contenido externo, incluyendo seguimiento de tu interacción con dicho contenido si posees una cuenta en ese sitio web y has iniciado sesión en la misma.
-
-### Analítica
-
-Este sitio utiliza Google Analytics para monitorear y analizar el tráfico. Este sitio web está alojado en Github Pages, quienes pueden recolectar datos sobre ti, utilizar cookies, incurrir en seguimiento por parte de terceros y monitorear tu interacción con el sitio. Para más información sobre Github Pages en relación a la privacidad del usuario, puedes revisar la [Declaración de privacidad de Github](https://help.github.com/en/articles/github-privacy-statement) (en inglés).
-
-### Información recolectada
-
-Este sitio no recolecta información personal. Este sitio puede recolectar información de uso para poder analizar el interés en el contenido y proporcionar información más completa a anunciantes. Ningún tipo de información de identificación personal es compartida con empresas de publicidad de terceros.
-
-Google (como proveedor de anuncios externo) utiliza cookies para mostrar anuncios en este sitio web. El uso de cookies DART por parte de Google les permite mostrar publicidad a los usuarios basados en sus visitas a este sitio web así como en otros sitios. Para excluirte del uso de cookies DART, revisa la [Política de privacidad de anuncios de Google](http://www.google.com/policies/technologies/ads/).
-
-Otros servidores o redes publicitarias de terceros también podrían hacer uso de cookies para hacer seguimiento de la actividad de usuarios en este sitio web, para medir la eficiencia de la publicidad o por otras razones propiamente detalladas en sus respectivas políticas de privacidad. Este sitio web no tiene acceso ni control de ninguna de las cookies que pueden ser usadas por anunciantes de terceros.
-
-### Sitios web externos
-
-Este sitio web puede enlazar a otros sitios para uso o referencia por parte de los usuarios. Este sitio no se hace responsable de las políticas de privacidad de otros sitios web. Los usuarios deben ser conscientes de que las políticas de privacidad de otros sitios pueden diferir de ésta.
-
-### Cambios a la política de privacidad
-
-El contenido de esta Política de privacidad puede ser modificado en cualquier momento y por cualquier motivo. Para consultas sobre la Política de privacidad de este sitio, escribe a [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/es_ES/why-ads.txt b/_pages/es_ES/why-ads.txt
deleted file mode 100644
index 46a56ec..0000000
--- a/_pages/es_ES/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "¿Por qué anuncios?"
----
-
-Este proyecto es el resultado de miles de horas de trabajo constante.
-
-Mantengo esta guía, sin que me paguen, y me aseguro de que siempre esté al día. Por este esfuerzo, siento que es justo intentar ganar un poco de dinero por mi trabajo.
-
-Este sitio no cuesta nada usarlo, y ningún anuncio que pongo es intrusivo. Si aún así tienes un problema con eso, siéntete libre de bloquear los anuncios.
-
-Si bloqueas los anuncios, me gustaría recordarte la página de [Donaciones](donations), pero de nuevo, eso también es opcional.
-
-Gracias,
-Plailect
diff --git a/_pages/et_EE/404.txt b/_pages/et_EE/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/et_EE/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/et_EE/donations.txt b/_pages/et_EE/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/et_EE/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/et_EE/home.txt b/_pages/et_EE/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/et_EE/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/et_EE/privacy-policy.txt b/_pages/et_EE/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/et_EE/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/et_EE/why-ads.txt b/_pages/et_EE/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/et_EE/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/fi_FI/404.txt b/_pages/fi_FI/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/fi_FI/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/fi_FI/donations.txt b/_pages/fi_FI/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/fi_FI/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/fi_FI/home.txt b/_pages/fi_FI/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/fi_FI/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/fi_FI/privacy-policy.txt b/_pages/fi_FI/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/fi_FI/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/fi_FI/why-ads.txt b/_pages/fi_FI/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/fi_FI/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/fr_FR/404.txt b/_pages/fr_FR/404.txt
deleted file mode 100644
index 0464398..0000000
--- a/_pages/fr_FR/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-titre: "Page Introuvable" #
-excerpt: "Page introuvable. Vos pixels sont dans un autre canevas." #
-sitemap: false
----
-
-Désolé, la page que vous essayez d'atteindre n'existe pas.
-{: .notice--info}
diff --git a/_pages/fr_FR/donations.txt b/_pages/fr_FR/donations.txt
deleted file mode 100644
index 5560f10..0000000
--- a/_pages/fr_FR/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Dons"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/fr_FR/home.txt b/_pages/fr_FR/home.txt
deleted file mode 100644
index cfba881..0000000
--- a/_pages/fr_FR/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Guides Hacks" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Guides complets pour installer des Homebrews et Custom Firmware sur différentes consoles. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "Guide Hacks 3DS"
- excerpt: "Un guide complet vers un custom firmware sur 3DS, depuis le firmware original vers boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Guide Hacks Wii U"
- excerpt: "Un guide complet sur l’obtention d’un Custom Firmware pour Wii U, du firmware d'origine jusqu'à Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Guide Hacks Vita"
- excerpt: "Un guide complet vers un custom firmware sur PS Vita (TV), depuis le firmware original vers HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/fr_FR/privacy-policy.txt b/_pages/fr_FR/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/fr_FR/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/fr_FR/why-ads.txt b/_pages/fr_FR/why-ads.txt
deleted file mode 100644
index 6c2f580..0000000
--- a/_pages/fr_FR/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Pourquoi des pubs ?"
----
-
-Ce projet est le fruit de centaines d’heures de travail constant.
-
-Je maintiens ce guide, gratuitement, et m’assure qu’il est toujours à jour. A cause de cet effort, il me semble juste d'essayer de gagner un peu d'argent a partir de mon travail.
-
-Ce site ne vous coûte rien, et les publicités affichées ne sont pas intrusives. Mais si cela vous pose quand même problème, vous êtes libre de bloquer ces publicités.
-
-Si vous bloquez les publicités, j'aimerais vous rappeler que j'accepte également des [dons](donations), mais, à nouveau, vous n'êtes pas obligés d'en faire.
-
-Merci,
-Plailect
diff --git a/_pages/he_IL/404.txt b/_pages/he_IL/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/he_IL/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/he_IL/donations.txt b/_pages/he_IL/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/he_IL/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/he_IL/home.txt b/_pages/he_IL/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/he_IL/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/he_IL/privacy-policy.txt b/_pages/he_IL/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/he_IL/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/he_IL/why-ads.txt b/_pages/he_IL/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/he_IL/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/hu_HU/404.txt b/_pages/hu_HU/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/hu_HU/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/hu_HU/donations.txt b/_pages/hu_HU/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/hu_HU/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/hu_HU/home.txt b/_pages/hu_HU/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/hu_HU/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/hu_HU/privacy-policy.txt b/_pages/hu_HU/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/hu_HU/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/hu_HU/why-ads.txt b/_pages/hu_HU/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/hu_HU/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/id_ID/404.txt b/_pages/id_ID/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/id_ID/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/id_ID/donations.txt b/_pages/id_ID/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/id_ID/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/id_ID/home.txt b/_pages/id_ID/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/id_ID/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/id_ID/privacy-policy.txt b/_pages/id_ID/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/id_ID/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/id_ID/why-ads.txt b/_pages/id_ID/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/id_ID/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/it_IT/404.txt b/_pages/it_IT/404.txt
deleted file mode 100644
index d178ebe..0000000
--- a/_pages/it_IT/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Pagina non trovata" #
-excerpt: "Pagina non trovata. I tuoi pixel sono in un altro canvas." #
-sitemap: false
----
-
-Mi dispiace, ma la pagina che stai cercando di raggiungere non esiste.
-{: .notice--info}
diff --git a/_pages/it_IT/donations.txt b/_pages/it_IT/donations.txt
deleted file mode 100644
index f042b5d..0000000
--- a/_pages/it_IT/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donazioni"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/it_IT/home.txt b/_pages/it_IT/home.txt
deleted file mode 100644
index 538f867..0000000
--- a/_pages/it_IT/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Guide complete per homebrew e custom firmware su vari dispositivi. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "Guida per l'Hacking del 3DS"
- excerpt: "La guida omnicomprensiva per installare un custom firmware su 3DS, da zero a boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Guida per l'Hacking della Wii U"
- excerpt: "La guida omnicomprensiva per installare un custom firmware su Wii U, da zero a Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Guida per l'Hacking della PS Vita"
- excerpt: "La guida omnicomprensiva per installare un custom firmware su PS Vita (TV), da zero a HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/it_IT/privacy-policy.txt b/_pages/it_IT/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/it_IT/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/it_IT/why-ads.txt b/_pages/it_IT/why-ads.txt
deleted file mode 100644
index 119b732..0000000
--- a/_pages/it_IT/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Perché c'è la pubblicità?"
----
-
-Questo progetto è il culmine di migliaia di ore di lavoro.
-
-Mantengo questa guida, gratuitamente, e mi assicuro che rimanga sempre aggiornata. Per questo, mi sembra corretto cercare di ottenere una minima gratificazione per il mio lavoro.
-
-Usare questo sito non ti costa nulla, e tutto ciò che mostro sono pubblicità non intrusive. Ma se per te è comunque un problema, sentiti libero di bloccarle.
-
-Se blocchi le pubblicità, ti vorrei anche ricordare della pagina delle [Donazioni](donations), anch'essa opzionale.
-
-Grazie,
-Plailect
diff --git a/_pages/ja_JP/404.txt b/_pages/ja_JP/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/ja_JP/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/ja_JP/donations.txt b/_pages/ja_JP/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/ja_JP/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/ja_JP/home.txt b/_pages/ja_JP/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/ja_JP/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/ja_JP/privacy-policy.txt b/_pages/ja_JP/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/ja_JP/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/ja_JP/why-ads.txt b/_pages/ja_JP/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/ja_JP/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/ko_KR/404.txt b/_pages/ko_KR/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/ko_KR/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/ko_KR/donations.txt b/_pages/ko_KR/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/ko_KR/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/ko_KR/home.txt b/_pages/ko_KR/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/ko_KR/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/ko_KR/privacy-policy.txt b/_pages/ko_KR/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/ko_KR/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/ko_KR/why-ads.txt b/_pages/ko_KR/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/ko_KR/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/ms_MY/404.txt b/_pages/ms_MY/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/ms_MY/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/ms_MY/donations.txt b/_pages/ms_MY/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/ms_MY/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/ms_MY/home.txt b/_pages/ms_MY/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/ms_MY/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/ms_MY/privacy-policy.txt b/_pages/ms_MY/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/ms_MY/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/ms_MY/why-ads.txt b/_pages/ms_MY/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/ms_MY/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/nl_NL/404.txt b/_pages/nl_NL/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/nl_NL/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/nl_NL/donations.txt b/_pages/nl_NL/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/nl_NL/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/nl_NL/home.txt b/_pages/nl_NL/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/nl_NL/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/nl_NL/privacy-policy.txt b/_pages/nl_NL/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/nl_NL/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/nl_NL/why-ads.txt b/_pages/nl_NL/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/nl_NL/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/no_NO/404.txt b/_pages/no_NO/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/no_NO/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/no_NO/donations.txt b/_pages/no_NO/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/no_NO/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/no_NO/home.txt b/_pages/no_NO/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/no_NO/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/no_NO/privacy-policy.txt b/_pages/no_NO/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/no_NO/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/no_NO/why-ads.txt b/_pages/no_NO/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/no_NO/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/pl_PL/404.txt b/_pages/pl_PL/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/pl_PL/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/pl_PL/donations.txt b/_pages/pl_PL/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/pl_PL/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/pl_PL/home.txt b/_pages/pl_PL/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/pl_PL/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/pl_PL/privacy-policy.txt b/_pages/pl_PL/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/pl_PL/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/pl_PL/why-ads.txt b/_pages/pl_PL/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/pl_PL/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/pt_BR/404.txt b/_pages/pt_BR/404.txt
deleted file mode 100644
index c0abd26..0000000
--- a/_pages/pt_BR/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Página Não Encontrada" #
-excerpt: "Página não encontrada. Os teus píxeis estão noutra tela." #
-sitemap: false
----
-
-Desculpa, mas a página que estavas a tentar visualizar não existe.
-{: .notice--info}
diff --git a/_pages/pt_BR/donations.txt b/_pages/pt_BR/donations.txt
deleted file mode 100644
index 7615790..0000000
--- a/_pages/pt_BR/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donativos"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/pt_BR/home.txt b/_pages/pt_BR/home.txt
deleted file mode 100644
index fe32104..0000000
--- a/_pages/pt_BR/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Guias de Hacks" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Guias completos de homebrew e custom firmware para várias consolas. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "Guia de Hacks para a 3DS"
- excerpt: "Um guia completo de custom firmware para a 3DS, desde o stock até ao boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Guia de Hacks para a Wii U"
- excerpt: "Um guia completo de custom firmware para a Wii U, desde o stock até ao Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Guia de Hacks para a PS Vita"
- excerpt: "Um guia completo de custom firmware para a PS Vita (TV), desde o stock até ao HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/pt_BR/privacy-policy.txt b/_pages/pt_BR/privacy-policy.txt
deleted file mode 100644
index 99f0777..0000000
--- a/_pages/pt_BR/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Política de Privacidade" #
----
-
-### Cookies
-
-Este sítio web utiliza cookies de modo a facilitar o seguimento dos utilizadores através das instruções do guia. Os cookies permitem que a barra lateral da página mostre o progresso atual em todo o site para ajudar os utilizadores a navegar as instruções mais facilmente.
-
-### Conteúdo Incorporado Doutros Sítios Web
-
-Este site poderá incluir conteúdo incorporado (por ex. vídeos, imagens, artigos, etc.). O conteúdo incorporado doutros sítios web comporta-se como se o utilizador tivesse visitado o outro sítio web.
-
-Estes sítios web poderão recolher dados sobre ti, usar cookies, incorporar tracking de terceiros, e monitorizar as tuas interações com esse conteúdo incorporado, incluindo as tuas interações com esse conteúdo se tiveres uma conta e estiveres com sessão iniciada nesse sítio web.
-
-### Analítica
-
-Este site usa o Google Analytics para monitorar e analisar tráfego. Este site é alojado pelo Github Pages, pelo que pode recolher dados sobre ti, usar cookies, incorporar tracking de terceiros adicionais, e monitorar a tua interação com este sítio web. Para mais informações sobre o Github Pages, como isso se relaciona com a privacidade do utilizador, vê a [Declaração de Privacidade do Github](https://help.github.com/en/articles/github-privacy-statement).
-
-### Informação Recolhida
-
-Este site não recolhe informação pessoal. Este site poderá recolher informações de uso de forma a analisar interesses em conteúdo e fornecer a anunciantes com informação numa base agregada. Nenhuma informação pessoal identificável é partilhada com empresas de anúncios de terceiros.
-
-A Google (como uma empresa de anúncios de terceiros) utiliza cookies para fornecer anúncios neste site. O uso de cookies DART pela Google permite-lhes fornecer publicidade aos visitantes baseados nas suas visitas a este site bem como doutros sites. Para excluíres os cookies DART, vê a [Política de Privacidade da Publicidade da Google](http://www.google.com/policies/technologies/ads/).
-
-Outros servidores ou redes de publicidade de terceiros poderão também usar cookies para seguir a atividade do utilizador neste site para medir a eficácia da publicidade ou por outras razões indicadas nas suas políticas de privacidade. Este site não tem acesso ou controlo sobre quaisquer cookies que possam ser usados por anunciantes de terceiros.
-
-### Sítios Web de Terceiros
-
-Este site poderá usar hiperligações para outros sites para referência ou uso dos utilizadores. Este site não é responsável pela política de privacidade doutros sites. Os utilizadores devem estar cientes que a política de privacidade doutros sítios web poderá ser diferente da deste.
-
-### Alterações à Política de Privacidade
-
-Os conteúdos desta Política de Privacidade poderão ser alteradas em qualquer altura e por qualquer motivo. Para questões relacionadas com a Política de Privacidade deste site, contacta [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/pt_BR/why-ads.txt b/_pages/pt_BR/why-ads.txt
deleted file mode 100644
index dc5d2d8..0000000
--- a/_pages/pt_BR/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Porquê Anúncios?" #
----
-
-Este projeto é a culminação de milhares de horas de trabalho constante.
-
-Eu preservo este guia, de graça, e asseguro-me de que está sempre atualizado. Por causa deste esforço, sinto que é justo tentar ganhar um salário escasso do meu trabalho.
-
-Este site não te custa um tostão para o poderes usar, e tudo o que eu exibo são anúncios não-intrusivos. Se ainda assim tiveres um problema com isto, fica à vontade de bloqueares estes anúncios.
-
-Se bloqueares os anúncios, gostaria de te relembrar da página de [Donativos](donations), mas mais uma vez isso é opcional também.
-
-Obrigado,
-Plailect
diff --git a/_pages/pt_PT/404.txt b/_pages/pt_PT/404.txt
deleted file mode 100644
index c0abd26..0000000
--- a/_pages/pt_PT/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Página Não Encontrada" #
-excerpt: "Página não encontrada. Os teus píxeis estão noutra tela." #
-sitemap: false
----
-
-Desculpa, mas a página que estavas a tentar visualizar não existe.
-{: .notice--info}
diff --git a/_pages/pt_PT/donations.txt b/_pages/pt_PT/donations.txt
deleted file mode 100644
index 7615790..0000000
--- a/_pages/pt_PT/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donativos"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/pt_PT/home.txt b/_pages/pt_PT/home.txt
deleted file mode 100644
index fe32104..0000000
--- a/_pages/pt_PT/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Guias de Hacks" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Guias completos de homebrew e custom firmware para várias consolas. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "Guia de Hacks para a 3DS"
- excerpt: "Um guia completo de custom firmware para a 3DS, desde o stock até ao boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Guia de Hacks para a Wii U"
- excerpt: "Um guia completo de custom firmware para a Wii U, desde o stock até ao Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Guia de Hacks para a PS Vita"
- excerpt: "Um guia completo de custom firmware para a PS Vita (TV), desde o stock até ao HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/pt_PT/privacy-policy.txt b/_pages/pt_PT/privacy-policy.txt
deleted file mode 100644
index 99f0777..0000000
--- a/_pages/pt_PT/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Política de Privacidade" #
----
-
-### Cookies
-
-Este sítio web utiliza cookies de modo a facilitar o seguimento dos utilizadores através das instruções do guia. Os cookies permitem que a barra lateral da página mostre o progresso atual em todo o site para ajudar os utilizadores a navegar as instruções mais facilmente.
-
-### Conteúdo Incorporado Doutros Sítios Web
-
-Este site poderá incluir conteúdo incorporado (por ex. vídeos, imagens, artigos, etc.). O conteúdo incorporado doutros sítios web comporta-se como se o utilizador tivesse visitado o outro sítio web.
-
-Estes sítios web poderão recolher dados sobre ti, usar cookies, incorporar tracking de terceiros, e monitorizar as tuas interações com esse conteúdo incorporado, incluindo as tuas interações com esse conteúdo se tiveres uma conta e estiveres com sessão iniciada nesse sítio web.
-
-### Analítica
-
-Este site usa o Google Analytics para monitorar e analisar tráfego. Este site é alojado pelo Github Pages, pelo que pode recolher dados sobre ti, usar cookies, incorporar tracking de terceiros adicionais, e monitorar a tua interação com este sítio web. Para mais informações sobre o Github Pages, como isso se relaciona com a privacidade do utilizador, vê a [Declaração de Privacidade do Github](https://help.github.com/en/articles/github-privacy-statement).
-
-### Informação Recolhida
-
-Este site não recolhe informação pessoal. Este site poderá recolher informações de uso de forma a analisar interesses em conteúdo e fornecer a anunciantes com informação numa base agregada. Nenhuma informação pessoal identificável é partilhada com empresas de anúncios de terceiros.
-
-A Google (como uma empresa de anúncios de terceiros) utiliza cookies para fornecer anúncios neste site. O uso de cookies DART pela Google permite-lhes fornecer publicidade aos visitantes baseados nas suas visitas a este site bem como doutros sites. Para excluíres os cookies DART, vê a [Política de Privacidade da Publicidade da Google](http://www.google.com/policies/technologies/ads/).
-
-Outros servidores ou redes de publicidade de terceiros poderão também usar cookies para seguir a atividade do utilizador neste site para medir a eficácia da publicidade ou por outras razões indicadas nas suas políticas de privacidade. Este site não tem acesso ou controlo sobre quaisquer cookies que possam ser usados por anunciantes de terceiros.
-
-### Sítios Web de Terceiros
-
-Este site poderá usar hiperligações para outros sites para referência ou uso dos utilizadores. Este site não é responsável pela política de privacidade doutros sites. Os utilizadores devem estar cientes que a política de privacidade doutros sítios web poderá ser diferente da deste.
-
-### Alterações à Política de Privacidade
-
-Os conteúdos desta Política de Privacidade poderão ser alteradas em qualquer altura e por qualquer motivo. Para questões relacionadas com a Política de Privacidade deste site, contacta [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/pt_PT/why-ads.txt b/_pages/pt_PT/why-ads.txt
deleted file mode 100644
index dc5d2d8..0000000
--- a/_pages/pt_PT/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Porquê Anúncios?" #
----
-
-Este projeto é a culminação de milhares de horas de trabalho constante.
-
-Eu preservo este guia, de graça, e asseguro-me de que está sempre atualizado. Por causa deste esforço, sinto que é justo tentar ganhar um salário escasso do meu trabalho.
-
-Este site não te custa um tostão para o poderes usar, e tudo o que eu exibo são anúncios não-intrusivos. Se ainda assim tiveres um problema com isto, fica à vontade de bloqueares estes anúncios.
-
-Se bloqueares os anúncios, gostaria de te relembrar da página de [Donativos](donations), mas mais uma vez isso é opcional também.
-
-Obrigado,
-Plailect
diff --git a/_pages/ro_RO/404.txt b/_pages/ro_RO/404.txt
deleted file mode 100644
index ede5283..0000000
--- a/_pages/ro_RO/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Pagina nu a fost găsită" #
-excerpt: "Pagina nu a fost găsită. Pixeli voștri sunt într-o altă pânză." #
-sitemap: false
----
-
-Scuze, dar pagina pe care încercați să o accesați nu există.
-{: .notice--info}
diff --git a/_pages/ro_RO/donations.txt b/_pages/ro_RO/donations.txt
deleted file mode 100644
index 1451a2b..0000000
--- a/_pages/ro_RO/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donaţii"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/ro_RO/home.txt b/_pages/ro_RO/home.txt
deleted file mode 100644
index 02ca9b0..0000000
--- a/_pages/ro_RO/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Ghiduri complete pentru Homebrew și custom firmware pentru diverse console. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "Ghidul de Modări 3DS"
- excerpt: "Un ghid complet spre firmware personalizat pentru 3DS, de la stoc la boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Ghidul de Modări Wii U"
- excerpt: "Un ghid complet spre firmware personalizat pentru Wii U, de la stoc la Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Ghidul de Modări Vita"
- excerpt: "Un ghid complet spre firmware personalizat pentru PS Vita (TV) de la stoc la HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/ro_RO/privacy-policy.txt b/_pages/ro_RO/privacy-policy.txt
deleted file mode 100644
index 4558993..0000000
--- a/_pages/ro_RO/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Politica de confidenţialitate" #
----
-
-### Cookie-uri
-
-Acest site folosește cookie-uri pentru a ușura urmarea instrucțiunilor de către utilizatori. Cookie-urile permit ca bara laterală a paginii să afișeze progresul prezent în site pentru a ajuta utilizatorii să navigheze instrucțiunile mai ușor.
-
-### Conținut Inclus De Pe Alte Site-uri
-
-Acest site ar putea avea conținut extern (ex.: videoclipuri, imagini, articole, etc.). Acest tip de conținut se comportă ca și cum utilizatorul a vizitat celălalt site.
-
-Aceste site-uri ar putea colecta date despre dumneavoastră, folosi cookie-uri, să suporte monitorizare suplimentară din partea terțelor dacă aveți un cont și sunteți logați la acel site.
-
-### Analitică
-
-Acest site folosește Google Analytics pentru a monitoriza și analiza traficul. Acest site este găzduit de către Github Pages, care ar putea colecta date despre dumneavoastră, folosi cookie-uri, să suporte monitorizare de către terțe, și monitorizar interacțiunea dumneavoastră cu acest site. Pentru mai multe informații despre Github Pages în legătură cu confidențialitatea utilizatorului, vedeți [Declarația de confidențialitate GitHub](https://help.github.com/en/articles/github-privacy-statement).
-
-### Informații Colectate
-
-Acest site nu colectează informații personale. Acest site ar putea colecta informații de uz pentru a analiza interes în conținut și a furniza informații mai complete agențiilor de publicitate. Nicio informație de identificare personală nu este partajată cu companii de reclame de terțe.
-
-Google (ca furnizor de anunțuri terțe) folosește cookie-uri pentru a afișa anunțuri pe acest site. Folosirea de cookie-uri DART de către Google permite afișarea de anunțuri utilizatorilor bazat pe vizitele lor pe acest site precum și pe alte site-uri. Pentru a exclude cookie-urile DART, vedeți [Politica de Confidențialitate de Anunțuri Google](http://www.google.com/policies/technologies/ads/).
-
-Alte servere sau rețele publicitare de terțe ar putea de asemena să utilizeze cookie-uri pentru a urmări activitatea utilizatorului în acest site, pentru a măsura eficiența reclamelor sau pentru alte motive dataliate în polticile lor de confidențialitate. Acest site nu are acces sau control peste orice cookie care ar putea fi folosit de către agenții de publicitate terțe.
-
-### Site-uri de Terță
-
-Acest site ar putea afișa alte site-uri utilizatorilor pentru uz sau referință. Acest site nu este responsabil pentru politicile de confidențialitate ale altor site-uri. Utilizatorii ar trebui să fie conștienți că politicile de confidențialitate de pe alte site-uri diferă de acest site.
-
-### Modificări la Politica de Confidențialitate
-
-Conținutul de pe această Politică de Confidențialitate ar putea fi alterat oricând pentru oricare motiv. Pentru întrebări în legătură cu Politica de confidențialitate de pe acest site, contactați [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/ro_RO/why-ads.txt b/_pages/ro_RO/why-ads.txt
deleted file mode 100644
index f511bfe..0000000
--- a/_pages/ro_RO/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "De ce sunt reclame?"
----
-
-Acest proiect este rezultatul a miilor de ore de muncă constantă.
-
-Mențin acest ghid, gratis, și mă asigur că e mereu de actualitate. Din cauza acestui efort, eu simt că este drept pentru mine să încerc să câștig un venit din munca mea.
-
-Acest site nu vă costă nimic să-l folosiți, și tot ce afișez sunt reclame non-intruzive. Dacă încă mai aveți o problemă cu acestea, nu ezitați să blocați aceste reclame.
-
-Dacă blocați anunturile, aș dori să vă reamintesc de pagina de [Donații](donations), dar încă o data acest lucru este opțional de asemenea.
-
-Mulţumesc,
-Plailect
diff --git a/_pages/ru_RU/404.txt b/_pages/ru_RU/404.txt
deleted file mode 100644
index ce9db9a..0000000
--- a/_pages/ru_RU/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Страница не найдена" #
-excerpt: "Страница не найдена. Your pixels are in another canvas." #
-sitemap: false
----
-
-Извините, но страница, которую вы ищете, не существует.
-{: .notice--info}
diff --git a/_pages/ru_RU/donations.txt b/_pages/ru_RU/donations.txt
deleted file mode 100644
index 68e901c..0000000
--- a/_pages/ru_RU/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Пожертвования"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/ru_RU/home.txt b/_pages/ru_RU/home.txt
deleted file mode 100644
index b7aff8d..0000000
--- a/_pages/ru_RU/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Полные руководства по хоумбрю и кастомным прошивкам для различных консолей. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "Полное руководство по прошивке 3DS, от начала до boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "Полное руководство по прошивке Wii U, от начала до Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "Полное руководство по прошивке PS Vita (TV), от начала до HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/ru_RU/privacy-policy.txt b/_pages/ru_RU/privacy-policy.txt
deleted file mode 100644
index 0563ca4..0000000
--- a/_pages/ru_RU/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Политика конфиденциальности" #
----
-
-### Cookies
-
-Этот сайт использует cookies для содействия в направлении пользователей через инструкции руководства. Cookies позволяют боковой панели страницы отображать текущий прогресс в руководстве, чтобы упростить навигацию между инструкциями для пользователей.
-
-### Встроенное содержимое с других сайтов
-
-Этот сайт может включать встроенное содержимое (например видео, изображения, статьи и т.д.). Встроенное содержимое с других сайтов ведет себя так, как если бы пользователь посетил другой сайт.
-
-Эти веб-сайты могут собирать данные о вас, использовать cookies, встраивать дополнительные сторонние средства отслеживания и следить за вашим взаимодействием со встроенным контентом, включая отслеживание вашего взаимодействия со встроенным контентом, если у вас есть учетная запись и вы вошли на этот сайт.
-
-### Аналитика
-
-Этот сайт использует Google Analytics для мониторинга и анализа трафика. Этот сайт размещен на Github Pages, который может собирать данные о вас, использовать cookies, встраивать дополнительные сторонние средства отслеживания и следить за вашим взаимодействием с этим сайтом. Для получения дополнительной информации о Github Pages, связанной с конфиденциальностью пользователей, см. [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Собираемая информация
-
-Этот сайт не собирает личную информацию. Этот сайт может собирать информацию об использовании для анализа интереса к содержимому и предоставления рекламодателям информации совокупного характера. Никакие личные данные не передаются сторонним рекламным компаниям.
-
-Google (в качестве стороннего поставщика рекламы) использует cookies для показа рекламы на этом сайте. Использование DART cookies позволяет Google показывать рекламу посетителям на основе их посещений этого сайта, а также других сайтов. Чтобы отказаться от DART cookies, см. [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Другие сторонние рекламодатели или сети могут также использовать cookies для отслеживания активности пользователей на этом сайте для оценки эффективности рекламы или по другим причинам, предусмотренным в их политике конфиденциальности. Этот сайт не имеет доступа или контроля над любыми cookies, которые могут быть использованы сторонними рекламодателями.
-
-### Сторонние веб-сайты
-
-Этот сайт может содержать ссылки на другие сайты для пользовательских нужд или ознакомления. Этот сайт не несет ответственности за политику конфиденциальности других сайтов. Пользователи должны быть осведомлены, что политика конфиденциальности других сайтов может отличаться от данной политики.
-
-### Изменения в политике конфиденциальности
-
-Содержание данной политики конфиденциальности может быть изменено в любое время и по любой причине. По вопросам, касающимся политики конфиденциальности этого сайта, обращайтесь сюда: [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/ru_RU/why-ads.txt b/_pages/ru_RU/why-ads.txt
deleted file mode 100644
index 22c6568..0000000
--- a/_pages/ru_RU/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Зачем реклама?"
----
-
-Этот проект - результат тысяч часов непрерывной работы.
-
-Я бесплатно поддерживаю это руководство в актуальном состоянии. Из-за этого я считаю, что это справедливо пытаться получить скудный доход от моей работы.
-
-Использование этого сайта бесплатно для вас, и вся реклама на сайте не мешает его использовать. Если она вам мешает, можете смело её блокировать.
-
-Если вы блокируете рекламу, то не забывайте про пожертвования на этой странице: [Donations](donations); впрочем, и это необязательно.
-
-С уважением,
-Plailect
diff --git a/_pages/sr_SP/404.txt b/_pages/sr_SP/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/sr_SP/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/sr_SP/donations.txt b/_pages/sr_SP/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/sr_SP/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/sr_SP/home.txt b/_pages/sr_SP/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/sr_SP/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/sr_SP/privacy-policy.txt b/_pages/sr_SP/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/sr_SP/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/sr_SP/why-ads.txt b/_pages/sr_SP/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/sr_SP/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/sv_SE/404.txt b/_pages/sv_SE/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/sv_SE/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/sv_SE/donations.txt b/_pages/sv_SE/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/sv_SE/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/sv_SE/home.txt b/_pages/sv_SE/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/sv_SE/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/sv_SE/privacy-policy.txt b/_pages/sv_SE/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/sv_SE/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/sv_SE/why-ads.txt b/_pages/sv_SE/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/sv_SE/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/th_TH/404.txt b/_pages/th_TH/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/th_TH/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/th_TH/donations.txt b/_pages/th_TH/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/th_TH/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/th_TH/home.txt b/_pages/th_TH/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/th_TH/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/th_TH/privacy-policy.txt b/_pages/th_TH/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/th_TH/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/th_TH/why-ads.txt b/_pages/th_TH/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/th_TH/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/tr_TR/404.txt b/_pages/tr_TR/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/tr_TR/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/tr_TR/donations.txt b/_pages/tr_TR/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/tr_TR/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/tr_TR/home.txt b/_pages/tr_TR/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/tr_TR/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/tr_TR/privacy-policy.txt b/_pages/tr_TR/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/tr_TR/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/tr_TR/why-ads.txt b/_pages/tr_TR/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/tr_TR/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/uk_UA/404.txt b/_pages/uk_UA/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/uk_UA/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/uk_UA/donations.txt b/_pages/uk_UA/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/uk_UA/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/uk_UA/home.txt b/_pages/uk_UA/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/uk_UA/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/uk_UA/privacy-policy.txt b/_pages/uk_UA/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/uk_UA/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/uk_UA/why-ads.txt b/_pages/uk_UA/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/uk_UA/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/vi_VN/404.txt b/_pages/vi_VN/404.txt
deleted file mode 100644
index cd41efe..0000000
--- a/_pages/vi_VN/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "Page Not Found" #
-excerpt: "Page not found. Your pixels are in another canvas." #
-sitemap: false
----
-
-Sorry, but the page you were trying to view does not exist.
-{: .notice--info}
diff --git a/_pages/vi_VN/donations.txt b/_pages/vi_VN/donations.txt
deleted file mode 100644
index 1b6bd35..0000000
--- a/_pages/vi_VN/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Donations"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/vi_VN/home.txt b/_pages/vi_VN/home.txt
deleted file mode 100644
index d3a99a0..0000000
--- a/_pages/vi_VN/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "Complete guides to homebrew and custom firmware for various devices. "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS Hacks Guide"
- excerpt: "A complete guide to retail 3DS custom firmware, from stock to boot9strap."
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U Hacks Guide"
- excerpt: "A complete guide to Wii U custom firmware, from stock to Coldboot Haxchi."
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita Hacks Guide"
- excerpt: "A complete guide to PS Vita (TV) custom firmware, from stock to HENkaku Ensō."
----
-
-{% include feature_row %}
diff --git a/_pages/vi_VN/privacy-policy.txt b/_pages/vi_VN/privacy-policy.txt
deleted file mode 100644
index 1f9be93..0000000
--- a/_pages/vi_VN/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "Privacy Policy" #
----
-
-### Cookies
-
-This site utilizes cookies in order to fascilitate routing users through the guide instructions. Cookies allow for the sidebar of the page to display current progress through the site to help users navigate the instructions more easily.
-
-### Embedded Content From Other Websites
-
-This site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves as if the user has visited the other website.
-
-These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.
-
-### Analytics
-
-This site uses Google Analytics to monitor and analyze traffic. This site is hosted by Github Pages, which may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with this site. For more information about Github Pages as it relates to user privacy, see the [GitHub Privacy Statement](https://help.github.com/en/articles/github-privacy-statement).
-
-### Information Collected
-
-This site does not collect personal information. This site may collect usage information in order to analyze interest in content and to provide advertisers with information on an aggregate basis. No personally identifiable information is shared with third-party advertising companies.
-
-Google (as a third party advertisement vendor) uses cookies to serve ads on this site. The use of DART cookies by Google allows them to serve advertisements to visitors based on their visits to this site as well as other sites. To opt-out of DART cookies, see the [Google Advertising Privacy Policy](http://www.google.com/policies/technologies/ads/).
-
-Other third-party advertising servers or networks may also use cookies to track user activity on this site to measure advertising effectiveness or for other reasons provided in their privacy policies. This site has no access or control over any cookies which may be used by third-party advertisers.
-
-### Third-Party Websites
-
-This site may link to other sites for users to use or reference. This site is not responsible for the privacy policies of other sites. Users should be aware that the privacy policies of other websites may differ from this one.
-
-### Changes to Privacy Policy
-
-The contents of this Privacy Policy may be altered at any time and for any reason. For questions regarding this site's Privacy policy, contact [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/vi_VN/why-ads.txt b/_pages/vi_VN/why-ads.txt
deleted file mode 100644
index 6370718..0000000
--- a/_pages/vi_VN/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Why Ads?"
----
-
-This project is the culmination of thousands of hours of constant work.
-
-I maintain this guide, for free, and ensure it is always up to date. Because of this effort, I feel that it is fair for me to attempt to gain a meager income from my work.
-
-This site costs you nothing to use, and all that I display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
-
-If you do block ads, I would like to also remind you of the [Donations](donations) page, but once again that is optional too.
-
-Thanks,
-Plailect
diff --git a/_pages/zh_CN/404.txt b/_pages/zh_CN/404.txt
deleted file mode 100644
index bc22ed3..0000000
--- a/_pages/zh_CN/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "找不到该页面" #
-excerpt: "找不到该页面。 你要的菜在另一张桌子上哦!"#
-sitemap: false
----
-
-对不起,该页面不存在。
-{: .notice--info}
diff --git a/_pages/zh_CN/donations.txt b/_pages/zh_CN/donations.txt
deleted file mode 100644
index 2fad71d..0000000
--- a/_pages/zh_CN/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "捐赠"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl(Vita 破解手册)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/zh_CN/home.txt b/_pages/zh_CN/home.txt
deleted file mode 100644
index f0621c4..0000000
--- a/_pages/zh_CN/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.guide 系列破解手册" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "为各种主机所写的最完整的自制软件 及自制固件的破解手册。 "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS 破解手册"
- excerpt: "最完整的 3DS 破解教程手册,教你如何从原厂主机破解成 boot9strap。"
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U 破解手册"
- excerpt: "最完整的 Wii U 破解手册,教你从原厂主机破解成 Coldboot Haxchi。"
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita 破解手册"
- excerpt: "最完整的 PS Vita (TV) 破解手册,教你从原厂主机破解成 HENkaku Ensō。"
----
-
-{% include feature_row %}
diff --git a/_pages/zh_CN/privacy-policy.txt b/_pages/zh_CN/privacy-policy.txt
deleted file mode 100644
index b84a248..0000000
--- a/_pages/zh_CN/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "隐私政策" #
----
-
-### Cookies
-
-本站点使用 cookies 来方便手册指导用户。 Cookies 允许通过站点的侧边栏显示当前的进度,帮助用户更容易找到指示。
-
-### 从其他网站嵌入内容
-
-本站点可能包含一部分的嵌入内容 (例如, 视频、图片、文章等)。 来自其他网站的嵌入内容就像用户访问了那个网站一样。
-
-这些网站可以使用 cookies 收集有关你的数据,并嵌入额外的第三方跟踪来监测你与该嵌入内容的互动,跟踪你与内容的互动(只要你先前在该网站登录过)。
-
-### 分析
-
-此网站使用 Google Analytics 提供的分析来监测和分析流量。 此网站由 Github Pages 托管,它也可以使用cookies收集有关你的数据并嵌入额外的第三方跟踪,监测你与这个网站的互动。 关于 Github Pages 与用户隐私有关的更多信息,请参见[GitHub 隐私声明](https://help.github.com/en/articles/github-privacy-statement)。
-
-### 收集的信息
-
-此站点不会收集任何的个人信息。 但会收集使用信息,以便分析内容的兴趣并综合向广告商提供信息。 我们不会与第三方广告公司分享任何的个人身份信息。
-
-Google(作为第三方广告供应商)使用 cookies 来运维此网站的广告。 Google 使用 DART cookies 来根据访问该网站以及其他网站的用户提供广告服务。 如果你想要退出 DART Cookies,请参见 [Google 广告隐私政策](http://www.google.com/policies/technologies/ads/)。
-
-其他的第三方广告服务器或网络提供商也可以使用 cookies 跟踪此网站上的用户活动,以衡量广告的效果,或者出于其隐私政策中提供的其他原因。 本站点无法访问或控制第三方广告商可能使用的任何 cookies。
-
-### 第三方网站
-
-此站点可以链接到用户使用或用于参考的其他站点。 本站点没有负责其他网站的隐私政策。 用户应当知道,其他网站的隐私政策可能不同于我们的政策。
-
-### 对隐私政策的更改
-
-隐私政策的内容可以在任何时候并以任何理由加以修改。 关于这个网站隐私政策的问题,请使用英文向 [plailect@gmail.com](mailto:plailect@gmail.com) 发送邮件。
diff --git a/_pages/zh_CN/why-ads.txt b/_pages/zh_CN/why-ads.txt
deleted file mode 100644
index 8473356..0000000
--- a/_pages/zh_CN/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "为什么有广告?"
----
-
-此项目包含我们数千小时持续工作的心血。
-
-我将持续免费地维护本指南,以确保这一切都是最新版的。 因此,我加入了一些广告,为我增加了一些微薄的收入是再公平不过的了。
-
-本网站所显示的广告都是非侵入式的,加上指南内的工具完全免费。 如果你还是不大喜欢,没关系,尽管挡我的广告。
-
-如果你屏蔽了这些广告,记得我们有一个[捐赠](donations)页面。当然了,这也是自愿的。
-
-谢谢,
-Plailect
diff --git a/_pages/zh_TW/404.txt b/_pages/zh_TW/404.txt
deleted file mode 100644
index c422222..0000000
--- a/_pages/zh_TW/404.txt
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: "找不到此頁面" #
-excerpt: "耶,未找到此頁面欸。 您的畫在其他的畫布上噢!" #
-sitemap: false
----
-
-對不起, 此頁面並不存在。
-{: .notice--info}
diff --git a/_pages/zh_TW/donations.txt b/_pages/zh_TW/donations.txt
deleted file mode 100644
index 6bab94a..0000000
--- a/_pages/zh_TW/donations.txt
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "贊助"
----
-
-### Nintendo Homebrew
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/NintendoHomebrew/15){: .align-center}
-{: .text-center}
-{: .notice--info}
-
-### emiyl (for Vita Hacks Guide)
-[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/emiyl/15){: .align-center}
-{: .text-center}
-{: .notice--info}
diff --git a/_pages/zh_TW/home.txt b/_pages/zh_TW/home.txt
deleted file mode 100644
index 8cc8bc7..0000000
--- a/_pages/zh_TW/home.txt
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: splash
-title: "Hacks.Guide 改機手冊系列" #
-header:
- overlay_color: "#5e616c" #
- overlay_image: images/home-page-feature.jpg
- overlay_filter: 0.5
- caption:
-excerpt: "為各式主機所寫最完整的自製軟體 及自製韌體的改機手冊。 "
-feature_row:
- - image_path: /images/home-page-3ds.jpg
- url: "https://3ds.hacks.guide/"
- title: "3DS 改機手冊"
- excerpt: "最完整的 3DS 改機教戰手冊,教您如何從原廠主機改成 boot9strap。"
- - image_path: /images/home-page-wiiu.jpg
- url: "https://wiiu.hacks.guide/"
- title: "Wii U 改機手冊"
- excerpt: "最完整的 Wii U 改機教戰手冊,教您如何從原廠韌體改成 Coldboot Haxchi。"
- - image_path: /images/home-page-vita.jpg
- url: "https://vita.hacks.guide/"
- title: "Vita 改機手冊"
- excerpt: "最完整的 PS Vita (TV) 改機教戰手冊,教您如何從原廠韌體改成 HENkaku Ensō。"
----
-
-{% include feature_row %}
diff --git a/_pages/zh_TW/privacy-policy.txt b/_pages/zh_TW/privacy-policy.txt
deleted file mode 100644
index 66bde3b..0000000
--- a/_pages/zh_TW/privacy-policy.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: "隱私權政策" #
----
-
-### Cookies
-
-本站透過 Cookies 引導用戶使用此手冊。 Cookies 讓手冊能在側欄顯示當前的進度,幫助用戶更容易的找到下一步指示。
-
-### 來自其他網站的嵌入內容
-
-本網站可能包含嵌入內容 (例如, 影片、圖案、文章等)。 打個比方,來自其他網站的嵌入內容就像您造訪其他網站一樣。
-
-這些網站可能會透過 Cookies 收集有關您的資料,嵌入其他第三方追蹤器並監視您與嵌入內容的互動,這包括追蹤您與此嵌入內容的互動 (如果您於該網站已登入過您的帳戶)。
-
-### 分析
-
-本網站使用 Google Analytics 來監控和分析流量。 本網站由 GitHub Pages 托管,因此該網站也可能透過 Cookies 收集有關您的資料並嵌入其他第三方追蹤以及監控您與本網站的互動。 有關 GitHub 與用戶隱私有關的更多訊息,請查閱 [GitHub 隱私權聲明](https://help.github.com/en/articles/github-privacy-statement)。
-
-### 收集的訊息
-
-本網站不會收集任何個人資訊。 但本網站可能會收集使用相關資訊以分析用戶對內容的興趣並向廣告商提供彙總資訊。 我們不會與第三方廣告公司分享任何可識別用戶的資訊。
-
-Google (作為第三方廣告供應商) 使用 Cookies 在本網站上投放廣告。 Google 使用 DART Cookies 來根據用戶使用本網站以及其他網站的情況,向用戶提供廣告。 如果您想要退出 DART Cookies ,請查閱 [Google廣告隱私權政策](http://www.google.com/policies/technologies/ads/).
-
-其他第三方廣告伺服器或網路可能也會使用 Cookies 來追蹤用戶使用本站的紀錄,以衡量廣告效果或其他於其隱私權政策提到的原因。 本網站無法使用或控管其他第三方廣告商所使用的 Cookies。
-
-### 第三方網站
-
-本網站可能會提及其他網站以供用戶使用或參考。 本站無權負責其他網站的隱私權政策。 用戶需知其他網站的隱私權政策可能與此網站的不同。
-
-### 對隱私權原則的更改
-
-我們有權隨時更改隱私權政策中的內容。 若您對本站之隱私權政策有任何問題,請聯繫 [plailect@gmail.com](mailto:plailect@gmail.com).
diff --git a/_pages/zh_TW/why-ads.txt b/_pages/zh_TW/why-ads.txt
deleted file mode 100644
index 3c0d99d..0000000
--- a/_pages/zh_TW/why-ads.txt
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "為什麼有廣告?"
----
-
-本專案是我們花了上千小時的努力做出來的。
-
-我們不畏辛勞也從來不收半毛錢,並持續確保本手冊為最新狀態。 因為這點,我想放一些廣告,替我增加一些微薄的收入是再公平不過的了。
-
-本網站所放的廣告都是非侵入式的,再加上手冊內所用到的工具都是完全免費的。 如果您還是不大喜歡,沒關係,我不介意您擋我所加入的廣告。
-
-如果您擋掉了這些廣告,記得,我們有個[贊助](donations) 頁面。當然了,這也是看您要不要的。
-
-謝啦,
-Plailect
diff --git a/_sass/minimal-mistakes.scss b/_sass/minimal-mistakes.scss
deleted file mode 100644
index 30fd37f..0000000
--- a/_sass/minimal-mistakes.scss
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose
- * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
- * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE)
-*/
-
-/* Variables */
-@import "minimal-mistakes/variables";
-
-/* Mixins and functions */
-@import "minimal-mistakes/vendor/breakpoint/breakpoint";
-@include breakpoint-set("to ems", true);
-@import "minimal-mistakes/vendor/magnific-popup/magnific-popup"; // Magnific Popup
-@import "minimal-mistakes/vendor/susy/susy";
-@import "minimal-mistakes/mixins";
-
-/* Core CSS */
-@import "minimal-mistakes/reset";
-@import "minimal-mistakes/base";
-@import "minimal-mistakes/forms";
-@import "minimal-mistakes/tables";
-@import "minimal-mistakes/animations";
-
-/* Components */
-@import "minimal-mistakes/buttons";
-@import "minimal-mistakes/notices";
-@import "minimal-mistakes/masthead";
-@import "minimal-mistakes/navigation";
-@import "minimal-mistakes/footer";
-@import "minimal-mistakes/search";
-@import "minimal-mistakes/syntax";
-
-/* Utility classes */
-@import "minimal-mistakes/utilities";
-
-/* Layout specific */
-@import "minimal-mistakes/page";
-@import "minimal-mistakes/archive";
-@import "minimal-mistakes/sidebar";
-@import "minimal-mistakes/print";
-
-/* hacks-guide change start: add version selector */
-@import "minimal-mistakes/vendor/hacks-guide/selector";
-/* hacks-guide change end */
diff --git a/_sass/minimal-mistakes/_animations.scss b/_sass/minimal-mistakes/_animations.scss
deleted file mode 100644
index 25ef77f..0000000
--- a/_sass/minimal-mistakes/_animations.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ==========================================================================
- ANIMATIONS
- ========================================================================== */
-
-@-webkit-keyframes intro {
- 0% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
-}
-
-@keyframes intro {
- 0% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
-}
\ No newline at end of file
diff --git a/_sass/minimal-mistakes/_archive.scss b/_sass/minimal-mistakes/_archive.scss
deleted file mode 100644
index 9f57632..0000000
--- a/_sass/minimal-mistakes/_archive.scss
+++ /dev/null
@@ -1,463 +0,0 @@
-/* ==========================================================================
- ARCHIVE
- ========================================================================== */
-
-.archive {
- margin-top: 1em;
- margin-bottom: 2em;
-
- @include breakpoint($large) {
- float: right;
- width: calc(100% - #{$right-sidebar-width-narrow});
- padding-right: $right-sidebar-width-narrow;
- }
-
- @include breakpoint($x-large) {
- width: calc(100% - #{$right-sidebar-width});
- padding-right: $right-sidebar-width;
- }
-}
-
-.archive__item {
- position: relative;
-
- a {
- position: relative;
- z-index: 10;
- }
-
- a[rel="permalink"] {
- position: static;
- }
-}
-
-.archive__subtitle {
- margin: 1.414em 0 0.5em;
- padding-bottom: 0.5em;
- font-size: $type-size-5;
- color: $muted-text-color;
- border-bottom: 1px solid $border-color;
-
- + .list__item .archive__item-title {
- margin-top: 0.5em;
- }
-}
-
-.archive__item-title {
- margin-bottom: 0.25em;
- font-family: $sans-serif-narrow;
- line-height: initial;
- overflow: hidden;
- text-overflow: ellipsis;
-
- a[rel="permalink"]::before {
- content: '';
- position: absolute;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- }
-
- a + a {
- opacity: 0.5;
- }
-}
-
-/* remove border*/
-.page__content {
- .archive__item-title {
- margin-top: 1em;
- border-bottom: none;
- }
-}
-
-.archive__item-excerpt {
- margin-top: 0;
- font-size: $type-size-6;
-
- & + p {
- text-indent: 0;
- }
-
- a {
- position: relative;
- }
-}
-
-.archive__item-teaser {
- position: relative;
- border-radius: $border-radius;
- overflow: hidden;
-
- img {
- width: 100%;
- }
-}
-
-.archive__item-caption {
- position: absolute;
- bottom: 0;
- right: 0;
- margin: 0 auto;
- padding: 2px 5px;
- color: #fff;
- font-family: $caption-font-family;
- font-size: $type-size-8;
- background: #000;
- text-align: right;
- z-index: 5;
- opacity: 0.5;
- border-radius: $border-radius 0 0 0;
-
- @include breakpoint($large) {
- padding: 5px 10px;
- }
-
- a {
- color: #fff;
- text-decoration: none;
- }
-}
-
-/*
- List view
- ========================================================================== */
-
-.list__item {
- .page__meta {
- margin: 0 0 4px;
- font-size: 0.6em;
- }
-}
-
-/*
- Grid view
- ========================================================================== */
-
-.archive {
- .grid__wrapper {
- /* extend grid elements to the right */
-
- @include breakpoint($large) {
- margin-right: -1 * $right-sidebar-width-narrow;
- }
-
- @include breakpoint($x-large) {
- margin-right: -1 * $right-sidebar-width;
- }
- }
-}
-
-.grid__item {
- margin-bottom: 2em;
-
- @include breakpoint($small) {
- float: left;
- width: span(5 of 10);
-
- &:nth-child(2n + 1) {
- clear: both;
- margin-left: 0;
- }
-
- &:nth-child(2n + 2) {
- clear: none;
- margin-left: gutter(of 10);
- }
- }
-
- @include breakpoint($medium) {
- margin-left: 0; /* override margin*/
- margin-right: 0; /* override margin*/
- width: span(3 of 12);
-
- &:nth-child(2n + 1) {
- clear: none;
- }
-
- &:nth-child(4n + 1) {
- clear: both;
- }
-
- &:nth-child(4n + 2) {
- clear: none;
- margin-left: gutter(1 of 12);
- }
-
- &:nth-child(4n + 3) {
- clear: none;
- margin-left: gutter(1 of 12);
- }
-
- &:nth-child(4n + 4) {
- clear: none;
- margin-left: gutter(1 of 12);
- }
- }
-
- .page__meta {
- margin: 0 0 4px;
- font-size: 0.6em;
- }
-
- .page__meta-sep {
- display: block;
-
- &::before {
- display: none;
- }
- }
-
- .archive__item-title {
- margin-top: 0.5em;
- font-size: $type-size-5;
- }
-
- .archive__item-excerpt {
- display: none;
-
- @include breakpoint($medium) {
- display: block;
- font-size: $type-size-6;
- }
- }
-
- .archive__item-teaser {
- @include breakpoint($small) {
- max-height: 200px;
- }
-
- @include breakpoint($medium) {
- max-height: 120px;
- }
- }
-}
-
-/*
- Features
- ========================================================================== */
-
-.feature__wrapper {
- @include clearfix();
- margin-bottom: 2em;
- border-bottom: 1px solid $border-color;
-
- .archive__item-title {
- margin-bottom: 0;
- }
-}
-
-.feature__item {
- position: relative;
- margin-bottom: 2em;
- font-size: 1.125em;
-
- @include breakpoint($small) {
- float: left;
- margin-bottom: 0;
- width: span(4 of 12);
-
- &:nth-child(3n + 1) {
- clear: both;
- margin-left: 0;
- }
-
- &:nth-child(3n + 2) {
- clear: none;
- margin-left: gutter(of 12);
- }
-
- &:nth-child(3n + 3) {
- clear: none;
- margin-left: gutter(of 12);
- }
-
- .feature__item-teaser {
- max-height: 200px;
- overflow: hidden;
- }
- }
-
- .archive__item-body {
- padding-left: gutter(1 of 12);
- padding-right: gutter(1 of 12);
- }
-
- a.btn::before {
- content: '';
- position: absolute;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- }
-
- &--left {
- position: relative;
- float: left;
- margin-left: 0;
- margin-right: 0;
- width: 100%;
- clear: both;
- font-size: 1.125em;
-
- .archive__item {
- float: left;
- }
-
- .archive__item-teaser {
- margin-bottom: 2em;
- }
-
- a.btn::before {
- content: '';
- position: absolute;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- }
-
- @include breakpoint($small) {
- .archive__item-teaser {
- float: left;
- width: span(5 of 12);
- }
-
- .archive__item-body {
- float: right;
- padding-left: gutter(0.5 of 12);
- padding-right: gutter(1 of 12);
- width: span(7 of 12);
- }
- }
- }
-
- &--right {
- position: relative;
- float: left;
- margin-left: 0;
- margin-right: 0;
- width: 100%;
- clear: both;
- font-size: 1.125em;
-
- .archive__item {
- float: left;
- }
-
- .archive__item-teaser {
- margin-bottom: 2em;
- }
-
- a.btn::before {
- content: '';
- position: absolute;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- }
-
- @include breakpoint($small) {
- text-align: right;
-
- .archive__item-teaser {
- float: right;
- width: span(5 of 12);
- }
-
- .archive__item-body {
- float: left;
- width: span(7 of 12);
- padding-left: gutter(0.5 of 12);
- padding-right: gutter(1 of 12);
- }
- }
- }
-
- &--center {
- position: relative;
- float: left;
- margin-left: 0;
- margin-right: 0;
- width: 100%;
- clear: both;
- font-size: 1.125em;
-
- .archive__item {
- float: left;
- width: 100%;
- }
-
- .archive__item-teaser {
- margin-bottom: 2em;
- }
-
- a.btn::before {
- content: '';
- position: absolute;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- }
-
- @include breakpoint($small) {
- text-align: center;
-
- .archive__item-teaser {
- margin: 0 auto;
- width: span(5 of 12);
- }
-
- .archive__item-body {
- margin: 0 auto;
- width: span(7 of 12);
- }
- }
- }
-}
-
-/* Place inside an archive layout */
-
-.archive {
- .feature__wrapper {
- .archive__item-title {
- margin-top: 0.25em;
- font-size: 1em;
- }
- }
-
- .feature__item,
- .feature__item--left,
- .feature__item--center,
- .feature__item--right {
- font-size: 1em;
- }
-}
-
-/*
- Wide Pages
- ========================================================================== */
-
- .wide {
- .archive {
- @include breakpoint($large) {
- padding-right: 0;
- }
-
- @include breakpoint($x-large) {
- padding-right: 0;
- }
- }
-}
-
-/* Place inside a single layout */
-
-.layout--single {
- .feature__wrapper {
- display: inline-block;
- }
-}
diff --git a/_sass/minimal-mistakes/_base.scss b/_sass/minimal-mistakes/_base.scss
deleted file mode 100644
index 83be663..0000000
--- a/_sass/minimal-mistakes/_base.scss
+++ /dev/null
@@ -1,361 +0,0 @@
-/* ==========================================================================
- BASE ELEMENTS
- ========================================================================== */
-
-html {
- /* sticky footer fix */
- position: relative;
- min-height: 100%;
- ::selection {
- color: $text-color;
- background: $text-highlight-color;
- }
-}
-
-body {
- margin: 0;
- padding: 0;
- color: $text-color;
- font-family: $global-font-family;
- line-height: 1.5;
-
- &.overflow--hidden {
- /* when primary navigation is visible, the content in the background won't scroll */
- overflow: hidden;
- }
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 2em 0 0.5em;
- line-height: 1.2;
- font-family: $header-font-family;
- font-weight: bold;
-}
-
-h1 {
- margin-top: 0;
- font-size: $h-size-1;
-}
-
-h2 {
- font-size: $h-size-2;
-}
-
-h3 {
- font-size: $h-size-3;
-}
-
-h4 {
- font-size: $h-size-4;
-}
-
-h5 {
- font-size: $h-size-5;
-}
-
-h6 {
- font-size: $h-size-6;
-}
-
-small,
-.small {
- font-size: $type-size-6;
-}
-
-p {
- margin-bottom: 1.3em;
-}
-
-u,
-ins {
- text-decoration: none;
- border-bottom: 1px solid $text-color;
- a {
- color: inherit;
- }
-}
-
-del a {
- color: inherit;
-}
-
-/* reduce orphans and widows when printing */
-
-p,
-pre,
-blockquote,
-ul,
-ol,
-dl,
-figure,
-table,
-fieldset {
- orphans: 3;
- widows: 3;
-}
-
-/* abbreviations */
-
-abbr[title],
-abbr[data-original-title] {
- text-decoration: none;
- cursor: help;
- border-bottom: 1px dotted $text-color;
-}
-
-/* blockquotes */
-
-blockquote {
- margin: 2em 1em 2em 0;
- padding-left: 1em;
- padding-right: 1em;
- font-style: italic;
- border-left: 0.25em solid $primary-color;
-
- cite {
- font-style: italic;
-
- &:before {
- content: "\2014";
- padding-right: 5px;
- }
- }
-}
-
-/* links */
-
-a {
- &:focus {
- @extend %tab-focus;
- }
-
- &:visited {
- color: $link-color-visited;
- }
-
- &:hover {
- color: $link-color-hover;
- outline: 0;
- }
-}
-
-/* buttons */
-
-button:focus {
- @extend %tab-focus;
-}
-
-/* code */
-
-tt,
-code,
-kbd,
-samp,
-pre {
- font-family: $monospace;
-}
-
-pre {
- overflow-x: auto; /* add scrollbars to wide code blocks*/
-}
-
-p > code,
-a > code,
-li > code,
-figcaption > code,
-td > code {
- padding-top: 0.1rem;
- padding-bottom: 0.1rem;
- font-size: 0.8em;
- background: $code-background-color;
- border-radius: $border-radius;
-
- &:before,
- &:after {
- letter-spacing: -0.2em;
- content: "\00a0"; /* non-breaking space*/
- }
-}
-
-/* horizontal rule */
-
-hr {
- display: block;
- margin: 1em 0;
- border: 0;
- border-top: 1px solid $border-color;
-}
-
-/* lists */
-
-ul li,
-ol li {
- margin-bottom: 0.5em;
-}
-
-li ul,
-li ol {
- margin-top: 0.5em;
-}
-
-/*
- Media and embeds
- ========================================================================== */
-
-/* Figures and images */
-
-figure {
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: justify;
- justify-content: space-between;
- -webkit-box-align: start;
- align-items: flex-start;
- flex-wrap: wrap;
- margin: 2em 0;
-
- img,
- iframe,
- .fluid-width-video-wrapper {
- margin-bottom: 1em;
- }
-
- img {
- width: 100%;
- border-radius: $border-radius;
- -webkit-transition: $global-transition;
- transition: $global-transition;
- }
-
- > a {
- display: block;
- }
-
- &.half {
- > a,
- > img {
- @include breakpoint($small) {
- width: calc(50% - 0.5em);
- }
- }
-
- figcaption {
- width: 100%;
- }
- }
-
- &.third {
- > a,
- > img {
- @include breakpoint($small) {
- width: calc(33.3333% - 0.5em);
- }
- }
-
- figcaption {
- width: 100%;
- }
- }
-}
-
-/* Figure captions */
-
-figcaption {
- margin-bottom: 0.5em;
- color: $muted-text-color;
- font-family: $caption-font-family;
- font-size: $type-size-6;
-
- a {
- -webkit-transition: $global-transition;
- transition: $global-transition;
-
- &:hover {
- color: $link-color-hover;
- }
- }
-}
-
-/* Fix IE9 SVG bug */
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-/*
- Navigation lists
- ========================================================================== */
-
-/**
- * Removes margins, padding, and bullet points from navigation lists
- *
- * Example usage:
- *
- */
-
-nav {
- ul {
- margin: 0;
- padding: 0;
- }
-
- li {
- list-style: none;
- }
-
- a {
- text-decoration: none;
- }
-
- /* override white-space for nested lists */
- ul li,
- ol li {
- margin-bottom: 0;
- }
-
- li ul,
- li ol {
- margin-top: 0;
- }
-}
-
-/*
- Global animation transition
- ========================================================================== */
-
-b,
-i,
-strong,
-em,
-blockquote,
-p,
-q,
-span,
-figure,
-img,
-h1,
-h2,
-header,
-input,
-a,
-tr,
-td,
-form button,
-input[type="submit"],
-.btn,
-.highlight,
-.archive__item-teaser {
- -webkit-transition: $global-transition;
- transition: $global-transition;
-}
diff --git a/_sass/minimal-mistakes/_buttons.scss b/_sass/minimal-mistakes/_buttons.scss
deleted file mode 100644
index 9ef60a8..0000000
--- a/_sass/minimal-mistakes/_buttons.scss
+++ /dev/null
@@ -1,97 +0,0 @@
-/* ==========================================================================
- BUTTONS
- ========================================================================== */
-
-/*
- Default button
- ========================================================================== */
-
-.btn {
- /* default */
- display: inline-block;
- margin-bottom: 0.25em;
- padding: 0.5em 1em;
- font-family: $sans-serif;
- font-size: $type-size-6;
- font-weight: bold;
- text-align: center;
- text-decoration: none;
- border-width: 0;
- border-radius: $border-radius;
- cursor: pointer;
-
- .icon {
- margin-right: 0.5em;
- }
-
- .icon + .hidden {
- margin-left: -0.5em; /* override for hidden text*/
- }
-
- /* button colors */
- $buttoncolors:
- (primary, $primary-color),
- (inverse, #fff),
- (light-outline, transparent),
- (success, $success-color),
- (warning, $warning-color),
- (danger, $danger-color),
- (info, $info-color),
- (facebook, $facebook-color),
- (twitter, $twitter-color),
- (linkedin, $linkedin-color);
-
- @each $buttoncolor, $color in $buttoncolors {
- &--#{$buttoncolor} {
- @include yiq-contrasted($color);
- @if ($buttoncolor == inverse) {
- border: 1px solid $border-color;
- }
- @if ($buttoncolor == light-outline) {
- border: 1px solid #fff;
- }
-
- &:visited {
- @include yiq-contrasted($color);
- }
-
- &:hover {
- @include yiq-contrasted(mix(#000, $color, 20%));
- }
- }
- }
-
- /* fills width of parent container */
- &--block {
- display: block;
- width: 100%;
-
- + .btn--block {
- margin-top: 0.25em;
- }
- }
-
- /* disabled */
- &--disabled {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- box-shadow: none;
- opacity: 0.65;
- }
-
- /* extra large button */
- &--x-large {
- font-size: $type-size-4;
- }
-
- /* large button */
- &--large {
- font-size: $type-size-5;
- }
-
- /* small button */
- &--small {
- font-size: $type-size-7;
- }
-}
\ No newline at end of file
diff --git a/_sass/minimal-mistakes/_footer.scss b/_sass/minimal-mistakes/_footer.scss
deleted file mode 100644
index c0b0625..0000000
--- a/_sass/minimal-mistakes/_footer.scss
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ==========================================================================
- FOOTER
- ========================================================================== */
-
-.page__footer {
- @include clearfix;
- float: left;
- margin-left: 0;
- margin-right: 0;
- width: 100%;
- margin-top: 3em;
- color: $muted-text-color;
- -webkit-animation: $intro-transition;
- animation: $intro-transition;
- -webkit-animation-delay: 0.45s;
- animation-delay: 0.45s;
- background-color: $footer-background-color;
-
- footer {
- @include clearfix;
- margin-left: auto;
- margin-right: auto;
- margin-top: 2em;
- max-width: 100%;
- padding: 0 1em 2em;
-
- @include breakpoint($x-large) {
- max-width: $x-large;
- }
- }
-
- a {
- color: inherit;
- text-decoration: none;
-
- &:hover {
- text-decoration: underline;
- }
- }
-
- .fas,
- .fab,
- .far,
- .fal {
- color: $muted-text-color;
- }
-}
-
-.page__footer-copyright {
- font-family: $global-font-family;
- font-size: $type-size-7;
-}
-
-.page__footer-follow {
- ul {
- margin: 0;
- padding: 0;
- list-style-type: none;
- }
-
- li {
- display: inline-block;
- padding-top: 5px;
- padding-bottom: 5px;
- font-family: $sans-serif-narrow;
- font-size: $type-size-6;
- text-transform: uppercase;
- }
-
- li + li:before {
- content: "";
- padding-right: 5px;
- }
-
- a {
- padding-right: 10px;
- font-weight: bold;
- }
-
- .social-icons {
- a {
- white-space: nowrap;
- }
- }
-}
diff --git a/_sass/minimal-mistakes/_forms.scss b/_sass/minimal-mistakes/_forms.scss
deleted file mode 100644
index 0dd9b48..0000000
--- a/_sass/minimal-mistakes/_forms.scss
+++ /dev/null
@@ -1,359 +0,0 @@
-/* ==========================================================================
- Forms
- ========================================================================== */
-
-form {
- margin: 0 0 5px 0;
- padding: 1em;
- background-color: $form-background-color;
-
- fieldset {
- margin-bottom: 5px;
- padding: 0;
- border-width: 0;
- }
-
- legend {
- display: block;
- width: 100%;
- margin-bottom: 5px * 2;
- *margin-left: -7px;
- padding: 0;
- color: $text-color;
- border: 0;
- white-space: normal;
- }
-
- p {
- margin-bottom: (5px / 2);
- }
-
- ul {
- list-style-type: none;
- margin: 0 0 5px 0;
- padding: 0;
- }
-
- br {
- display: none;
- }
-}
-
-label,
-input,
-button,
-select,
-textarea {
- vertical-align: baseline;
- *vertical-align: middle;
-}
-
-input,
-button,
-select,
-textarea {
- box-sizing: border-box;
- font-family: $sans-serif;
-}
-
-label {
- display: block;
- margin-bottom: 0.25em;
- color: $text-color;
- cursor: pointer;
-
- small {
- font-size: $type-size-6;
- }
-
- input,
- textarea,
- select {
- display: block;
- }
-}
-
-input,
-textarea,
-select {
- display: inline-block;
- width: 100%;
- padding: 0.25em;
- margin-bottom: 0.5em;
- color: $text-color;
- background-color: $background-color;
- border: $border-color;
- border-radius: $border-radius;
- box-shadow: $box-shadow;
-}
-
-.input-mini {
- width: 60px;
-}
-
-.input-small {
- width: 90px;
-}
-
-input[type="image"],
-input[type="checkbox"],
-input[type="radio"] {
- width: auto;
- height: auto;
- padding: 0;
- margin: 3px 0;
- *margin-top: 0;
- line-height: normal;
- cursor: pointer;
- border-radius: 0;
- border: 0 \9;
- box-shadow: none;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box;
- padding: 0;
- *width: 13px;
- *height: 13px;
-}
-
-input[type="image"] {
- border: 0;
-}
-
-input[type="file"] {
- width: auto;
- padding: initial;
- line-height: initial;
- border: initial;
- background-color: transparent;
- background-color: initial;
- box-shadow: none;
-}
-
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- width: auto;
- height: auto;
- cursor: pointer;
- *overflow: visible;
-}
-
-select,
-input[type="file"] {
- *margin-top: 4px;
-}
-
-select {
- width: auto;
- background-color: #fff;
-}
-
-select[multiple],
-select[size] {
- height: auto;
-}
-
-textarea {
- resize: vertical;
- height: auto;
- overflow: auto;
- vertical-align: top;
-}
-
-input[type="hidden"] {
- display: none;
-}
-
-.form {
- position: relative;
-}
-
-.radio,
-.checkbox {
- padding-left: 18px;
- font-weight: normal;
-}
-
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
- float: left;
- margin-left: -18px;
-}
-
-.radio.inline,
-.checkbox.inline {
- display: inline-block;
- padding-top: 5px;
- margin-bottom: 0;
- vertical-align: middle;
-}
-
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
- margin-left: 10px;
-}
-
-/*
- Disabled state
- ========================================================================== */
-
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-/*
- Focus & active state
- ========================================================================== */
-
-input:focus,
-textarea:focus {
- border-color: $primary-color;
- outline: 0;
- outline: thin dotted \9;
- box-shadow: inset 0 1px 3px rgba($text-color, 0.06),
- 0 0 5px rgba($primary-color, 0.7);
-}
-
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus,
-select:focus {
- box-shadow: none;
-}
-
-/*
- Help text
- ========================================================================== */
-
-.help-block,
-.help-inline {
- color: $muted-text-color;
-}
-
-.help-block {
- display: block;
- margin-bottom: 1em;
- line-height: 1em;
-}
-
-.help-inline {
- display: inline-block;
- vertical-align: middle;
- padding-left: 5px;
-}
-
-/*
- .form-group
- ========================================================================== */
-
-.form-group {
- margin-bottom: 5px;
- padding: 0;
- border-width: 0;
-}
-
-/*
- .form-inline
- ========================================================================== */
-
-.form-inline input,
-.form-inline textarea,
-.form-inline select {
- display: inline-block;
- margin-bottom: 0;
-}
-
-.form-inline label {
- display: inline-block;
-}
-
-.form-inline .radio,
-.form-inline .checkbox,
-.form-inline .radio {
- padding-left: 0;
- margin-bottom: 0;
- vertical-align: middle;
-}
-
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
- float: left;
- margin-left: 0;
- margin-right: 3px;
-}
-
-/*
- .form-search
- ========================================================================== */
-
-.form-search input,
-.form-search textarea,
-.form-search select {
- display: inline-block;
- margin-bottom: 0;
-}
-
-.form-search .search-query {
- padding-left: 14px;
- padding-right: 14px;
- margin-bottom: 0;
- border-radius: 14px;
-}
-
-.form-search label {
- display: inline-block;
-}
-
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio {
- padding-left: 0;
- margin-bottom: 0;
- vertical-align: middle;
-}
-
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"] {
- float: left;
- margin-left: 0;
- margin-right: 3px;
-}
-
-/*
- .form--loading
- ========================================================================== */
-
-.form--loading:before {
- content: "";
-}
-
-.form--loading .form__spinner {
- display: block;
-}
-
-.form:before {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-color: rgba(255, 255, 255, 0.7);
- z-index: 10;
-}
-
-.form__spinner {
- display: none;
- position: absolute;
- top: 50%;
- left: 50%;
- z-index: 11;
-}
diff --git a/_sass/minimal-mistakes/_masthead.scss b/_sass/minimal-mistakes/_masthead.scss
deleted file mode 100644
index 2dfefcc..0000000
--- a/_sass/minimal-mistakes/_masthead.scss
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ==========================================================================
- MASTHEAD
- ========================================================================== */
-
-.masthead {
- position: relative;
- border-bottom: 1px solid $border-color;
- -webkit-animation: $intro-transition;
- animation: $intro-transition;
- -webkit-animation-delay: 0.15s;
- animation-delay: 0.15s;
- z-index: 20;
-
- &__inner-wrap {
- @include clearfix;
- margin-left: auto;
- margin-right: auto;
- padding: 1em;
- max-width: 100%;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between;
- font-family: $sans-serif-narrow;
-
- @include breakpoint($x-large) {
- max-width: $max-width;
- }
-
- nav {
- z-index: 10;
- }
-
- a {
- text-decoration: none;
- }
- }
-}
-
-.site-logo img {
- max-height: 2rem;
-}
-
-.site-title {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-item-align: center;
- align-self: center;
- font-weight: bold;
- // z-index: 20;
-}
-
-.site-subtitle {
- display: block;
- font-size: $type-size-8;
-}
-
-.masthead__menu {
- float: left;
- margin-left: 0;
- margin-right: 0;
- width: 100%;
- clear: both;
-
- .site-nav {
- margin-left: 0;
-
- @include breakpoint($small) {
- float: right;
- }
- }
-
- ul {
- margin: 0;
- padding: 0;
- clear: both;
- list-style-type: none;
- }
-}
-
-.masthead__menu-item {
- display: block;
- list-style-type: none;
- white-space: nowrap;
-
- &--lg {
- padding-right: 2em;
- font-weight: 700;
- }
-}
diff --git a/_sass/minimal-mistakes/_mixins.scss b/_sass/minimal-mistakes/_mixins.scss
deleted file mode 100644
index 4aa9eb0..0000000
--- a/_sass/minimal-mistakes/_mixins.scss
+++ /dev/null
@@ -1,92 +0,0 @@
-/* ==========================================================================
- MIXINS
- ========================================================================== */
-
-%tab-focus {
- /* Default*/
- outline: thin dotted $focus-color;
- /* Webkit*/
- outline: 5px auto $focus-color;
- outline-offset: -2px;
-}
-
-/*
- em function
- ========================================================================== */
-
-@function em($target, $context: $doc-font-size) {
- @return ($target / $context) * 1em;
-}
-
-
-/*
- Bourbon clearfix
- ========================================================================== */
-
-/*
- * Provides an easy way to include a clearfix for containing floats.
- * link http://cssmojo.com/latest_new_clearfix_so_far/
- *
- * example scss - Usage
- *
- * .element {
- * @include clearfix;
- * }
- *
- * example css - CSS Output
- *
- * .element::after {
- * clear: both;
- * content: "";
- * display: table;
- * }
-*/
-
-@mixin clearfix {
- clear: both;
-
- &::after {
- clear: both;
- content: "";
- display: table;
- }
-}
-
-/*
- Compass YIQ Color Contrast
- https://github.com/easy-designs/yiq-color-contrast
- ========================================================================== */
-
-@function yiq-is-light(
- $color,
- $threshold: $yiq-contrasted-threshold
-) {
- $red: red($color);
- $green: green($color);
- $blue: blue($color);
-
- $yiq: (($red*299)+($green*587)+($blue*114))/1000;
-
- @if $yiq-debug { @debug $yiq, $threshold; }
-
- @return if($yiq >= $threshold, true, false);
-}
-
-@function yiq-contrast-color(
- $color,
- $dark: $yiq-contrasted-dark-default,
- $light: $yiq-contrasted-light-default,
- $threshold: $yiq-contrasted-threshold
-) {
- @return if(yiq-is-light($color, $threshold), $yiq-contrasted-dark-default, $yiq-contrasted-light-default);
-}
-
-@mixin yiq-contrasted(
- $background-color,
- $dark: $yiq-contrasted-dark-default,
- $light: $yiq-contrasted-light-default,
- $threshold: $yiq-contrasted-threshold
-) {
- background-color: $background-color;
- color: yiq-contrast-color($background-color, $dark, $light, $threshold);
-}
\ No newline at end of file
diff --git a/_sass/minimal-mistakes/_navigation.scss b/_sass/minimal-mistakes/_navigation.scss
deleted file mode 100644
index 30f379b..0000000
--- a/_sass/minimal-mistakes/_navigation.scss
+++ /dev/null
@@ -1,605 +0,0 @@
-/* ==========================================================================
- NAVIGATION
- ========================================================================== */
-
-/*
- Breadcrumb navigation links
- ========================================================================== */
-
-.breadcrumbs {
- @include clearfix;
- margin: 0 auto;
- max-width: 100%;
- padding-left: 1em;
- padding-right: 1em;
- font-family: $sans-serif;
- -webkit-animation: $intro-transition;
- animation: $intro-transition;
- -webkit-animation-delay: 0.3s;
- animation-delay: 0.3s;
-
- @include breakpoint($x-large) {
- max-width: $x-large;
- }
-
- ol {
- padding: 0;
- list-style: none;
- font-size: $type-size-6;
-
- @include breakpoint($large) {
- float: right;
- width: calc(100% - #{$right-sidebar-width-narrow});
- }
-
- @include breakpoint($x-large) {
- width: calc(100% - #{$right-sidebar-width});
- }
- }
-
- li {
- display: inline;
- }
-
- .current {
- font-weight: bold;
- }
-}
-
-/*
- Post pagination navigation links
- ========================================================================== */
-
-.pagination {
- @include clearfix();
- float: left;
- margin-top: 1em;
- padding-top: 1em;
- width: 100%;
-
- ul {
- margin: 0;
- padding: 0;
- list-style-type: none;
- font-family: $sans-serif;
- }
-
- li {
- display: block;
- float: left;
- margin-left: -1px;
-
- a {
- display: block;
- margin-bottom: 0.25em;
- padding: 0.5em 1em;
- font-family: $sans-serif;
- font-size: 14px;
- font-weight: bold;
- line-height: 1.5;
- text-align: center;
- text-decoration: none;
- color: $muted-text-color;
- border: 1px solid mix(#000, $border-color, 25%);
- border-radius: 0;
-
- &:hover {
- color: $link-color-hover;
- }
-
- &.current,
- &.current.disabled {
- color: #fff;
- background: $primary-color;
- }
-
- &.disabled {
- color: rgba($muted-text-color, 0.5);
- pointer-events: none;
- cursor: not-allowed;
- }
- }
-
- &:first-child {
- margin-left: 0;
-
- a {
- border-top-left-radius: $border-radius;
- border-bottom-left-radius: $border-radius;
- }
- }
-
- &:last-child {
- a {
- border-top-right-radius: $border-radius;
- border-bottom-right-radius: $border-radius;
- }
- }
- }
-
- /* next/previous buttons */
- &--pager {
- display: block;
- padding: 1em 2em;
- float: left;
- width: 50%;
- font-family: $sans-serif;
- font-size: $type-size-5;
- font-weight: bold;
- text-align: center;
- text-decoration: none;
- color: $muted-text-color;
- border: 1px solid mix(#000, $border-color, 25%);
- border-radius: $border-radius;
-
- &:hover {
- @include yiq-contrasted($muted-text-color);
- }
-
- &:first-child {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- }
-
- &:last-child {
- margin-left: -1px;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
-
- &.disabled {
- color: rgba($muted-text-color, 0.5);
- pointer-events: none;
- cursor: not-allowed;
- }
- }
-}
-
-.page__content + .pagination,
-.page__meta + .pagination,
-.page__share + .pagination,
-.page__comments + .pagination {
- margin-top: 2em;
- padding-top: 2em;
- border-top: 1px solid $border-color;
-}
-
-/*
- Priority plus navigation
- ========================================================================== */
-
-.greedy-nav {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- min-height: $nav-height;
- background: $background-color;
-
- a {
- display: block;
- margin: 0 1rem;
- color: $masthead-link-color;
- text-decoration: none;
- -webkit-transition: none;
- transition: none;
-
- &:hover {
- color: $masthead-link-color-hover;
- }
-
- // &.site-logo {
- // margin-left: 0;
- // margin-right: 0.5rem;
- // }
-
- // &.site-title {
- // margin-left: 0;
- // }
- }
-
- img{
- -webkit-transition: none;
- transition: none;
- }
-
- &__toggle {
- -ms-flex-item-align: center;
- align-self: center;
- height: $nav-toggle-height;
- border: 0;
- outline: none;
- background-color: transparent;
- cursor: pointer;
- }
-
- &__toggle_lang {
- -ms-flex-item-align: center;
- align-self: center;
- height: $nav-toggle-height;
- border: 0;
- outline: none;
- background-color: transparent;
- cursor: pointer;
- }
-
- .visible-links {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start;
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1;
- overflow: hidden;
-
- li {
- -webkit-box-flex: 0;
- -ms-flex: none;
- flex: none;
- }
-
- a {
- position: relative;
-
- &:before {
- content: "";
- position: absolute;
- left: 0;
- bottom: 0;
- height: 4px;
- background: $primary-color;
- width: 100%;
- -webkit-transition: $global-transition;
- transition: $global-transition;
- -webkit-transform: scaleX(0) translate3d(0, 0, 0);
- transform: scaleX(0) translate3d(0, 0, 0); // hide
- }
-
- &:hover:before {
- -webkit-transform: scaleX(1);
- -ms-transform: scaleX(1);
- transform: scaleX(1); // reveal
- }
- }
- }
-
- .hidden-links {
- position: absolute;
- top: 100%;
- right: 0;
- margin-top: 15px;
- padding: 5px;
- border: 1px solid $border-color;
- border-radius: $border-radius;
- background: $background-color;
- -webkit-box-shadow: 0 2px 4px 0 rgba(#000, 0.16),
- 0 2px 10px 0 rgba(#000, 0.12);
- box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);
-
- &.hidden {
- display: none;
- }
-
- a {
- margin: 0;
- padding: 10px 20px;
- font-size: $type-size-5;
-
- &:hover {
- color: $masthead-link-color-hover;
- background: $navicon-link-color-hover;
- }
- }
-
- &:before {
- content: "";
- position: absolute;
- top: -11px;
- right: 10px;
- width: 0;
- border-style: solid;
- border-width: 0 10px 10px;
- border-color: $border-color transparent;
- display: block;
- z-index: 0;
- }
-
- &:after {
- content: "";
- position: absolute;
- top: -10px;
- right: 10px;
- width: 0;
- border-style: solid;
- border-width: 0 10px 10px;
- border-color: $background-color transparent;
- display: block;
- z-index: 1;
- }
-
- li {
- display: block;
- border-bottom: 1px solid $border-color;
-
- &:last-child {
- border-bottom: none;
- }
- }
- }
-
- .links-menu{
- right: 2rem;
- }
-
-}
-
-.no-js {
- .greedy-nav {
- .visible-links {
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- overflow: visible;
- }
- }
-}
-
-/*
- Navigation list
- ========================================================================== */
-
-.nav__list {
- margin-bottom: 1.5em;
-
- input[type="checkbox"],
- label {
- display: none;
- }
-
- @include breakpoint(max-width $large - 1px) {
- label {
- position: relative;
- display: inline-block;
- padding: 0.5em 2.5em 0.5em 1em;
- color: $gray;
- font-size: $type-size-6;
- font-weight: bold;
- border: 1px solid $light-gray;
- border-radius: $border-radius;
- z-index: 20;
- -webkit-transition: 0.2s ease-out;
- transition: 0.2s ease-out;
- cursor: pointer;
-
- &:before,
- &:after {
- content: "";
- position: absolute;
- right: 1em;
- top: 1.25em;
- width: 0.75em;
- height: 0.125em;
- line-height: 1;
- background-color: $gray;
- -webkit-transition: 0.2s ease-out;
- transition: 0.2s ease-out;
- }
-
- &:after {
- -webkit-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
- }
-
- &:hover {
- color: #fff;
- border-color: $gray;
- background-color: mix(white, #000, 20%);
-
- &:before,
- &:after {
- background-color: #fff;
- }
- }
- }
-
- /* selected*/
- input:checked + label {
- color: white;
- background-color: mix(white, #000, 20%);
-
- &:before,
- &:after {
- background-color: #fff;
- }
- }
-
- /* on hover show expand*/
- label:hover:after {
- -webkit-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
- }
-
- input:checked + label:hover:after {
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- }
-
- ul {
- margin-bottom: 1em;
- }
-
- a {
- display: block;
- padding: 0.25em 0;
-
- @include breakpoint($large) {
- padding-top: 0.125em;
- padding-bottom: 0.125em;
- }
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
-}
-
-.nav__list .nav__items {
- margin: 0;
- font-size: 1.25rem;
-
- a {
- color: inherit;
- // line-height: 1.6;
- }
-
- // progress list, guide-specific
- ol {
- padding-left: 0.9rem;
- }
-
- li {
- list-style: inherit;
- }
-
- .completed {
- color: $gray;
- text-decoration: line-through;
- }
- // end guide-specific
-
- .active {
- // margin-left: -0.5em;
- // padding-left: 0.5em;
- // padding-right: 0.5em;
- font-weight: bold;
- }
-
-
- @include breakpoint(max-width $large - 1px) {
- position: relative;
- max-height: 0;
- opacity: 0%;
- overflow: hidden;
- z-index: 10;
- -webkit-transition: 0.3s ease-in-out;
- transition: 0.3s ease-in-out;
- -webkit-transform: translate(0, 10%);
- -ms-transform: translate(0, 10%);
- transform: translate(0, 10%);
- }
-}
-
-@include breakpoint(max-width $large - 1px) {
- .nav__list input:checked ~ .nav__items {
- -webkit-transition: 0.5s ease-in-out;
- transition: 0.5s ease-in-out;
- max-height: 9999px; /* exaggerate max-height to accommodate tall lists*/
- overflow: visible;
- opacity: 1;
- margin-top: 1em;
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- transform: translate(0, 0);
- }
-}
-
-.nav__title {
- margin: 0;
- padding: 0.5rem 0.75rem;
- font-family: $sans-serif-narrow;
- font-size: $type-size-5;
- font-weight: bold;
-}
-
-.nav__sub-title {
- display: block;
- margin: 0.5rem 0;
- padding: 0.25rem 0;
- font-family: $sans-serif-narrow;
- font-size: $type-size-6;
- font-weight: bold;
- text-transform: uppercase;
- border-bottom: 1px solid $border-color;
-}
-
-/*
- Table of contents navigation
- ========================================================================== */
-
-.toc {
- font-family: $sans-serif-narrow;
- color: $gray;
- background-color: $background-color;
- border: 1px solid $border-color;
- border-radius: $border-radius;
- -webkit-box-shadow: $box-shadow;
- box-shadow: $box-shadow;
-
- .nav__title {
- color: #fff;
- font-size: $type-size-6;
- background: $primary-color;
- border-top-left-radius: $border-radius;
- border-top-right-radius: $border-radius;
- }
-
- // Scrollspy marks toc items as .active when they are in focus
- .active a {
- @include yiq-contrasted($active-color);
- }
-}
-
-.toc__menu {
- margin: 0;
- padding: 0;
- width: 100%;
- list-style: none;
- font-size: $type-size-6;
-
- @include breakpoint($large) {
- font-size: $type-size-7;
- }
-
- a {
- display: block;
- padding: 0.25rem 0.75rem;
- color: $muted-text-color;
- font-weight: bold;
- line-height: 1.5;
- border-bottom: 1px solid $border-color;
-
- &:hover {
- color: $text-color;
- }
- }
-
- li ul > li a {
- padding-left: 1.25rem;
- font-weight: normal;
- }
-
- li ul li ul > li a {
- padding-left: 1.75rem;
- }
-
- li ul li ul li ul > li a {
- padding-left: 2.25rem;
- }
-
- li ul li ul li ul li ul > li a {
- padding-left: 2.75rem;
- }
-
- li ul li ul li ul li ul li ul > li a {
- padding-left: 3.25rem
- }
-}
diff --git a/_sass/minimal-mistakes/_notices.scss b/_sass/minimal-mistakes/_notices.scss
deleted file mode 100644
index 88d2c17..0000000
--- a/_sass/minimal-mistakes/_notices.scss
+++ /dev/null
@@ -1,107 +0,0 @@
-/* ==========================================================================
- NOTICE TEXT BLOCKS
- ========================================================================== */
-
-/**
- * Default Kramdown usage (no indents!):
- *
- * #### Headline for the Notice
- * Text for the notice
- *
", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " "|
- strip_html | strip_newlines | jsonify }},
- {%- else -%}
- {{ doc.content | newline_to_br |
- replace:" ", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " " |
- replace:"", " "|
- strip_html | strip_newlines | truncatewords: 50 | jsonify }},
- {%- endif -%}
- "categories": {{ doc.categories | jsonify }},
- "tags": {{ doc.tags | jsonify }},
- "url": {{ doc.url | relative_url | jsonify }},
- "teaser": {{ teaser | relative_url | jsonify }}
- }{%- unless forloop.last and l -%},{%- endunless -%}
- {%- endfor -%}
- {%- endfor -%}]
diff --git a/assets/js/lunr/lunr.js b/assets/js/lunr/lunr.js
deleted file mode 100644
index 6aa370f..0000000
--- a/assets/js/lunr/lunr.js
+++ /dev/null
@@ -1,3475 +0,0 @@
-/**
- * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
- * Copyright (C) 2020 Oliver Nightingale
- * @license MIT
- */
-
-;(function(){
-
-/**
- * A convenience function for configuring and constructing
- * a new lunr Index.
- *
- * A lunr.Builder instance is created and the pipeline setup
- * with a trimmer, stop word filter and stemmer.
- *
- * This builder object is yielded to the configuration function
- * that is passed as a parameter, allowing the list of fields
- * and other builder parameters to be customised.
- *
- * All documents _must_ be added within the passed config function.
- *
- * @example
- * var idx = lunr(function () {
- * this.field('title')
- * this.field('body')
- * this.ref('id')
- *
- * documents.forEach(function (doc) {
- * this.add(doc)
- * }, this)
- * })
- *
- * @see {@link lunr.Builder}
- * @see {@link lunr.Pipeline}
- * @see {@link lunr.trimmer}
- * @see {@link lunr.stopWordFilter}
- * @see {@link lunr.stemmer}
- * @namespace {function} lunr
- */
-var lunr = function (config) {
- var builder = new lunr.Builder
-
- builder.pipeline.add(
- lunr.trimmer,
- lunr.stopWordFilter,
- lunr.stemmer
- )
-
- builder.searchPipeline.add(
- lunr.stemmer
- )
-
- config.call(builder, builder)
- return builder.build()
-}
-
-lunr.version = "2.3.9"
-/*!
- * lunr.utils
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A namespace containing utils for the rest of the lunr library
- * @namespace lunr.utils
- */
-lunr.utils = {}
-
-/**
- * Print a warning message to the console.
- *
- * @param {String} message The message to be printed.
- * @memberOf lunr.utils
- * @function
- */
-lunr.utils.warn = (function (global) {
- /* eslint-disable no-console */
- return function (message) {
- if (global.console && console.warn) {
- console.warn(message)
- }
- }
- /* eslint-enable no-console */
-})(this)
-
-/**
- * Convert an object to a string.
- *
- * In the case of `null` and `undefined` the function returns
- * the empty string, in all other cases the result of calling
- * `toString` on the passed object is returned.
- *
- * @param {Any} obj The object to convert to a string.
- * @return {String} string representation of the passed object.
- * @memberOf lunr.utils
- */
-lunr.utils.asString = function (obj) {
- if (obj === void 0 || obj === null) {
- return ""
- } else {
- return obj.toString()
- }
-}
-
-/**
- * Clones an object.
- *
- * Will create a copy of an existing object such that any mutations
- * on the copy cannot affect the original.
- *
- * Only shallow objects are supported, passing a nested object to this
- * function will cause a TypeError.
- *
- * Objects with primitives, and arrays of primitives are supported.
- *
- * @param {Object} obj The object to clone.
- * @return {Object} a clone of the passed object.
- * @throws {TypeError} when a nested object is passed.
- * @memberOf Utils
- */
-lunr.utils.clone = function (obj) {
- if (obj === null || obj === undefined) {
- return obj
- }
-
- var clone = Object.create(null),
- keys = Object.keys(obj)
-
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i],
- val = obj[key]
-
- if (Array.isArray(val)) {
- clone[key] = val.slice()
- continue
- }
-
- if (typeof val === 'string' ||
- typeof val === 'number' ||
- typeof val === 'boolean') {
- clone[key] = val
- continue
- }
-
- throw new TypeError("clone is not deep and does not support nested objects")
- }
-
- return clone
-}
-lunr.FieldRef = function (docRef, fieldName, stringValue) {
- this.docRef = docRef
- this.fieldName = fieldName
- this._stringValue = stringValue
-}
-
-lunr.FieldRef.joiner = "/"
-
-lunr.FieldRef.fromString = function (s) {
- var n = s.indexOf(lunr.FieldRef.joiner)
-
- if (n === -1) {
- throw "malformed field ref string"
- }
-
- var fieldRef = s.slice(0, n),
- docRef = s.slice(n + 1)
-
- return new lunr.FieldRef (docRef, fieldRef, s)
-}
-
-lunr.FieldRef.prototype.toString = function () {
- if (this._stringValue == undefined) {
- this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef
- }
-
- return this._stringValue
-}
-/*!
- * lunr.Set
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A lunr set.
- *
- * @constructor
- */
-lunr.Set = function (elements) {
- this.elements = Object.create(null)
-
- if (elements) {
- this.length = elements.length
-
- for (var i = 0; i < this.length; i++) {
- this.elements[elements[i]] = true
- }
- } else {
- this.length = 0
- }
-}
-
-/**
- * A complete set that contains all elements.
- *
- * @static
- * @readonly
- * @type {lunr.Set}
- */
-lunr.Set.complete = {
- intersect: function (other) {
- return other
- },
-
- union: function () {
- return this
- },
-
- contains: function () {
- return true
- }
-}
-
-/**
- * An empty set that contains no elements.
- *
- * @static
- * @readonly
- * @type {lunr.Set}
- */
-lunr.Set.empty = {
- intersect: function () {
- return this
- },
-
- union: function (other) {
- return other
- },
-
- contains: function () {
- return false
- }
-}
-
-/**
- * Returns true if this set contains the specified object.
- *
- * @param {object} object - Object whose presence in this set is to be tested.
- * @returns {boolean} - True if this set contains the specified object.
- */
-lunr.Set.prototype.contains = function (object) {
- return !!this.elements[object]
-}
-
-/**
- * Returns a new set containing only the elements that are present in both
- * this set and the specified set.
- *
- * @param {lunr.Set} other - set to intersect with this set.
- * @returns {lunr.Set} a new set that is the intersection of this and the specified set.
- */
-
-lunr.Set.prototype.intersect = function (other) {
- var a, b, elements, intersection = []
-
- if (other === lunr.Set.complete) {
- return this
- }
-
- if (other === lunr.Set.empty) {
- return other
- }
-
- if (this.length < other.length) {
- a = this
- b = other
- } else {
- a = other
- b = this
- }
-
- elements = Object.keys(a.elements)
-
- for (var i = 0; i < elements.length; i++) {
- var element = elements[i]
- if (element in b.elements) {
- intersection.push(element)
- }
- }
-
- return new lunr.Set (intersection)
-}
-
-/**
- * Returns a new set combining the elements of this and the specified set.
- *
- * @param {lunr.Set} other - set to union with this set.
- * @return {lunr.Set} a new set that is the union of this and the specified set.
- */
-
-lunr.Set.prototype.union = function (other) {
- if (other === lunr.Set.complete) {
- return lunr.Set.complete
- }
-
- if (other === lunr.Set.empty) {
- return this
- }
-
- return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))
-}
-/**
- * A function to calculate the inverse document frequency for
- * a posting. This is shared between the builder and the index
- *
- * @private
- * @param {object} posting - The posting for a given term
- * @param {number} documentCount - The total number of documents.
- */
-lunr.idf = function (posting, documentCount) {
- var documentsWithTerm = 0
-
- for (var fieldName in posting) {
- if (fieldName == '_index') continue // Ignore the term index, its not a field
- documentsWithTerm += Object.keys(posting[fieldName]).length
- }
-
- var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)
-
- return Math.log(1 + Math.abs(x))
-}
-
-/**
- * A token wraps a string representation of a token
- * as it is passed through the text processing pipeline.
- *
- * @constructor
- * @param {string} [str=''] - The string token being wrapped.
- * @param {object} [metadata={}] - Metadata associated with this token.
- */
-lunr.Token = function (str, metadata) {
- this.str = str || ""
- this.metadata = metadata || {}
-}
-
-/**
- * Returns the token string that is being wrapped by this object.
- *
- * @returns {string}
- */
-lunr.Token.prototype.toString = function () {
- return this.str
-}
-
-/**
- * A token update function is used when updating or optionally
- * when cloning a token.
- *
- * @callback lunr.Token~updateFunction
- * @param {string} str - The string representation of the token.
- * @param {Object} metadata - All metadata associated with this token.
- */
-
-/**
- * Applies the given function to the wrapped string token.
- *
- * @example
- * token.update(function (str, metadata) {
- * return str.toUpperCase()
- * })
- *
- * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.
- * @returns {lunr.Token}
- */
-lunr.Token.prototype.update = function (fn) {
- this.str = fn(this.str, this.metadata)
- return this
-}
-
-/**
- * Creates a clone of this token. Optionally a function can be
- * applied to the cloned token.
- *
- * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.
- * @returns {lunr.Token}
- */
-lunr.Token.prototype.clone = function (fn) {
- fn = fn || function (s) { return s }
- return new lunr.Token (fn(this.str, this.metadata), this.metadata)
-}
-/*!
- * lunr.tokenizer
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A function for splitting a string into tokens ready to be inserted into
- * the search index. Uses `lunr.tokenizer.separator` to split strings, change
- * the value of this property to change how strings are split into tokens.
- *
- * This tokenizer will convert its parameter to a string by calling `toString` and
- * then will split this string on the character in `lunr.tokenizer.separator`.
- * Arrays will have their elements converted to strings and wrapped in a lunr.Token.
- *
- * Optional metadata can be passed to the tokenizer, this metadata will be cloned and
- * added as metadata to every token that is created from the object to be tokenized.
- *
- * @static
- * @param {?(string|object|object[])} obj - The object to convert into tokens
- * @param {?object} metadata - Optional metadata to associate with every token
- * @returns {lunr.Token[]}
- * @see {@link lunr.Pipeline}
- */
-lunr.tokenizer = function (obj, metadata) {
- if (obj == null || obj == undefined) {
- return []
- }
-
- if (Array.isArray(obj)) {
- return obj.map(function (t) {
- return new lunr.Token(
- lunr.utils.asString(t).toLowerCase(),
- lunr.utils.clone(metadata)
- )
- })
- }
-
- var str = obj.toString().toLowerCase(),
- len = str.length,
- tokens = []
-
- for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {
- var char = str.charAt(sliceEnd),
- sliceLength = sliceEnd - sliceStart
-
- if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {
-
- if (sliceLength > 0) {
- var tokenMetadata = lunr.utils.clone(metadata) || {}
- tokenMetadata["position"] = [sliceStart, sliceLength]
- tokenMetadata["index"] = tokens.length
-
- tokens.push(
- new lunr.Token (
- str.slice(sliceStart, sliceEnd),
- tokenMetadata
- )
- )
- }
-
- sliceStart = sliceEnd + 1
- }
-
- }
-
- return tokens
-}
-
-/**
- * The separator used to split a string into tokens. Override this property to change the behaviour of
- * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.
- *
- * @static
- * @see lunr.tokenizer
- */
-lunr.tokenizer.separator = /[\s\-]+/
-/*!
- * lunr.Pipeline
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.Pipelines maintain an ordered list of functions to be applied to all
- * tokens in documents entering the search index and queries being ran against
- * the index.
- *
- * An instance of lunr.Index created with the lunr shortcut will contain a
- * pipeline with a stop word filter and an English language stemmer. Extra
- * functions can be added before or after either of these functions or these
- * default functions can be removed.
- *
- * When run the pipeline will call each function in turn, passing a token, the
- * index of that token in the original list of all tokens and finally a list of
- * all the original tokens.
- *
- * The output of functions in the pipeline will be passed to the next function
- * in the pipeline. To exclude a token from entering the index the function
- * should return undefined, the rest of the pipeline will not be called with
- * this token.
- *
- * For serialisation of pipelines to work, all functions used in an instance of
- * a pipeline should be registered with lunr.Pipeline. Registered functions can
- * then be loaded. If trying to load a serialised pipeline that uses functions
- * that are not registered an error will be thrown.
- *
- * If not planning on serialising the pipeline then registering pipeline functions
- * is not necessary.
- *
- * @constructor
- */
-lunr.Pipeline = function () {
- this._stack = []
-}
-
-lunr.Pipeline.registeredFunctions = Object.create(null)
-
-/**
- * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token
- * string as well as all known metadata. A pipeline function can mutate the token string
- * or mutate (or add) metadata for a given token.
- *
- * A pipeline function can indicate that the passed token should be discarded by returning
- * null, undefined or an empty string. This token will not be passed to any downstream pipeline
- * functions and will not be added to the index.
- *
- * Multiple tokens can be returned by returning an array of tokens. Each token will be passed
- * to any downstream pipeline functions and all will returned tokens will be added to the index.
- *
- * Any number of pipeline functions may be chained together using a lunr.Pipeline.
- *
- * @interface lunr.PipelineFunction
- * @param {lunr.Token} token - A token from the document being processed.
- * @param {number} i - The index of this token in the complete list of tokens for this document/field.
- * @param {lunr.Token[]} tokens - All tokens for this document/field.
- * @returns {(?lunr.Token|lunr.Token[])}
- */
-
-/**
- * Register a function with the pipeline.
- *
- * Functions that are used in the pipeline should be registered if the pipeline
- * needs to be serialised, or a serialised pipeline needs to be loaded.
- *
- * Registering a function does not add it to a pipeline, functions must still be
- * added to instances of the pipeline for them to be used when running a pipeline.
- *
- * @param {lunr.PipelineFunction} fn - The function to check for.
- * @param {String} label - The label to register this function with
- */
-lunr.Pipeline.registerFunction = function (fn, label) {
- if (label in this.registeredFunctions) {
- lunr.utils.warn('Overwriting existing registered function: ' + label)
- }
-
- fn.label = label
- lunr.Pipeline.registeredFunctions[fn.label] = fn
-}
-
-/**
- * Warns if the function is not registered as a Pipeline function.
- *
- * @param {lunr.PipelineFunction} fn - The function to check for.
- * @private
- */
-lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {
- var isRegistered = fn.label && (fn.label in this.registeredFunctions)
-
- if (!isRegistered) {
- lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn)
- }
-}
-
-/**
- * Loads a previously serialised pipeline.
- *
- * All functions to be loaded must already be registered with lunr.Pipeline.
- * If any function from the serialised data has not been registered then an
- * error will be thrown.
- *
- * @param {Object} serialised - The serialised pipeline to load.
- * @returns {lunr.Pipeline}
- */
-lunr.Pipeline.load = function (serialised) {
- var pipeline = new lunr.Pipeline
-
- serialised.forEach(function (fnName) {
- var fn = lunr.Pipeline.registeredFunctions[fnName]
-
- if (fn) {
- pipeline.add(fn)
- } else {
- throw new Error('Cannot load unregistered function: ' + fnName)
- }
- })
-
- return pipeline
-}
-
-/**
- * Adds new functions to the end of the pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.
- */
-lunr.Pipeline.prototype.add = function () {
- var fns = Array.prototype.slice.call(arguments)
-
- fns.forEach(function (fn) {
- lunr.Pipeline.warnIfFunctionNotRegistered(fn)
- this._stack.push(fn)
- }, this)
-}
-
-/**
- * Adds a single function after a function that already exists in the
- * pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
- * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
- */
-lunr.Pipeline.prototype.after = function (existingFn, newFn) {
- lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
-
- var pos = this._stack.indexOf(existingFn)
- if (pos == -1) {
- throw new Error('Cannot find existingFn')
- }
-
- pos = pos + 1
- this._stack.splice(pos, 0, newFn)
-}
-
-/**
- * Adds a single function before a function that already exists in the
- * pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
- * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
- */
-lunr.Pipeline.prototype.before = function (existingFn, newFn) {
- lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
-
- var pos = this._stack.indexOf(existingFn)
- if (pos == -1) {
- throw new Error('Cannot find existingFn')
- }
-
- this._stack.splice(pos, 0, newFn)
-}
-
-/**
- * Removes a function from the pipeline.
- *
- * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.
- */
-lunr.Pipeline.prototype.remove = function (fn) {
- var pos = this._stack.indexOf(fn)
- if (pos == -1) {
- return
- }
-
- this._stack.splice(pos, 1)
-}
-
-/**
- * Runs the current list of functions that make up the pipeline against the
- * passed tokens.
- *
- * @param {Array} tokens The tokens to run through the pipeline.
- * @returns {Array}
- */
-lunr.Pipeline.prototype.run = function (tokens) {
- var stackLength = this._stack.length
-
- for (var i = 0; i < stackLength; i++) {
- var fn = this._stack[i]
- var memo = []
-
- for (var j = 0; j < tokens.length; j++) {
- var result = fn(tokens[j], j, tokens)
-
- if (result === null || result === void 0 || result === '') continue
-
- if (Array.isArray(result)) {
- for (var k = 0; k < result.length; k++) {
- memo.push(result[k])
- }
- } else {
- memo.push(result)
- }
- }
-
- tokens = memo
- }
-
- return tokens
-}
-
-/**
- * Convenience method for passing a string through a pipeline and getting
- * strings out. This method takes care of wrapping the passed string in a
- * token and mapping the resulting tokens back to strings.
- *
- * @param {string} str - The string to pass through the pipeline.
- * @param {?object} metadata - Optional metadata to associate with the token
- * passed to the pipeline.
- * @returns {string[]}
- */
-lunr.Pipeline.prototype.runString = function (str, metadata) {
- var token = new lunr.Token (str, metadata)
-
- return this.run([token]).map(function (t) {
- return t.toString()
- })
-}
-
-/**
- * Resets the pipeline by removing any existing processors.
- *
- */
-lunr.Pipeline.prototype.reset = function () {
- this._stack = []
-}
-
-/**
- * Returns a representation of the pipeline ready for serialisation.
- *
- * Logs a warning if the function has not been registered.
- *
- * @returns {Array}
- */
-lunr.Pipeline.prototype.toJSON = function () {
- return this._stack.map(function (fn) {
- lunr.Pipeline.warnIfFunctionNotRegistered(fn)
-
- return fn.label
- })
-}
-/*!
- * lunr.Vector
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A vector is used to construct the vector space of documents and queries. These
- * vectors support operations to determine the similarity between two documents or
- * a document and a query.
- *
- * Normally no parameters are required for initializing a vector, but in the case of
- * loading a previously dumped vector the raw elements can be provided to the constructor.
- *
- * For performance reasons vectors are implemented with a flat array, where an elements
- * index is immediately followed by its value. E.g. [index, value, index, value]. This
- * allows the underlying array to be as sparse as possible and still offer decent
- * performance when being used for vector calculations.
- *
- * @constructor
- * @param {Number[]} [elements] - The flat list of element index and element value pairs.
- */
-lunr.Vector = function (elements) {
- this._magnitude = 0
- this.elements = elements || []
-}
-
-
-/**
- * Calculates the position within the vector to insert a given index.
- *
- * This is used internally by insert and upsert. If there are duplicate indexes then
- * the position is returned as if the value for that index were to be updated, but it
- * is the callers responsibility to check whether there is a duplicate at that index
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @returns {Number}
- */
-lunr.Vector.prototype.positionForIndex = function (index) {
- // For an empty vector the tuple can be inserted at the beginning
- if (this.elements.length == 0) {
- return 0
- }
-
- var start = 0,
- end = this.elements.length / 2,
- sliceLength = end - start,
- pivotPoint = Math.floor(sliceLength / 2),
- pivotIndex = this.elements[pivotPoint * 2]
-
- while (sliceLength > 1) {
- if (pivotIndex < index) {
- start = pivotPoint
- }
-
- if (pivotIndex > index) {
- end = pivotPoint
- }
-
- if (pivotIndex == index) {
- break
- }
-
- sliceLength = end - start
- pivotPoint = start + Math.floor(sliceLength / 2)
- pivotIndex = this.elements[pivotPoint * 2]
- }
-
- if (pivotIndex == index) {
- return pivotPoint * 2
- }
-
- if (pivotIndex > index) {
- return pivotPoint * 2
- }
-
- if (pivotIndex < index) {
- return (pivotPoint + 1) * 2
- }
-}
-
-/**
- * Inserts an element at an index within the vector.
- *
- * Does not allow duplicates, will throw an error if there is already an entry
- * for this index.
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @param {Number} val - The value to be inserted into the vector.
- */
-lunr.Vector.prototype.insert = function (insertIdx, val) {
- this.upsert(insertIdx, val, function () {
- throw "duplicate index"
- })
-}
-
-/**
- * Inserts or updates an existing index within the vector.
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @param {Number} val - The value to be inserted into the vector.
- * @param {function} fn - A function that is called for updates, the existing value and the
- * requested value are passed as arguments
- */
-lunr.Vector.prototype.upsert = function (insertIdx, val, fn) {
- this._magnitude = 0
- var position = this.positionForIndex(insertIdx)
-
- if (this.elements[position] == insertIdx) {
- this.elements[position + 1] = fn(this.elements[position + 1], val)
- } else {
- this.elements.splice(position, 0, insertIdx, val)
- }
-}
-
-/**
- * Calculates the magnitude of this vector.
- *
- * @returns {Number}
- */
-lunr.Vector.prototype.magnitude = function () {
- if (this._magnitude) return this._magnitude
-
- var sumOfSquares = 0,
- elementsLength = this.elements.length
-
- for (var i = 1; i < elementsLength; i += 2) {
- var val = this.elements[i]
- sumOfSquares += val * val
- }
-
- return this._magnitude = Math.sqrt(sumOfSquares)
-}
-
-/**
- * Calculates the dot product of this vector and another vector.
- *
- * @param {lunr.Vector} otherVector - The vector to compute the dot product with.
- * @returns {Number}
- */
-lunr.Vector.prototype.dot = function (otherVector) {
- var dotProduct = 0,
- a = this.elements, b = otherVector.elements,
- aLen = a.length, bLen = b.length,
- aVal = 0, bVal = 0,
- i = 0, j = 0
-
- while (i < aLen && j < bLen) {
- aVal = a[i], bVal = b[j]
- if (aVal < bVal) {
- i += 2
- } else if (aVal > bVal) {
- j += 2
- } else if (aVal == bVal) {
- dotProduct += a[i + 1] * b[j + 1]
- i += 2
- j += 2
- }
- }
-
- return dotProduct
-}
-
-/**
- * Calculates the similarity between this vector and another vector.
- *
- * @param {lunr.Vector} otherVector - The other vector to calculate the
- * similarity with.
- * @returns {Number}
- */
-lunr.Vector.prototype.similarity = function (otherVector) {
- return this.dot(otherVector) / this.magnitude() || 0
-}
-
-/**
- * Converts the vector to an array of the elements within the vector.
- *
- * @returns {Number[]}
- */
-lunr.Vector.prototype.toArray = function () {
- var output = new Array (this.elements.length / 2)
-
- for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {
- output[j] = this.elements[i]
- }
-
- return output
-}
-
-/**
- * A JSON serializable representation of the vector.
- *
- * @returns {Number[]}
- */
-lunr.Vector.prototype.toJSON = function () {
- return this.elements
-}
-/* eslint-disable */
-/*!
- * lunr.stemmer
- * Copyright (C) 2020 Oliver Nightingale
- * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
- */
-
-/**
- * lunr.stemmer is an english language stemmer, this is a JavaScript
- * implementation of the PorterStemmer taken from http://tartarus.org/~martin
- *
- * @static
- * @implements {lunr.PipelineFunction}
- * @param {lunr.Token} token - The string to stem
- * @returns {lunr.Token}
- * @see {@link lunr.Pipeline}
- * @function
- */
-lunr.stemmer = (function(){
- var step2list = {
- "ational" : "ate",
- "tional" : "tion",
- "enci" : "ence",
- "anci" : "ance",
- "izer" : "ize",
- "bli" : "ble",
- "alli" : "al",
- "entli" : "ent",
- "eli" : "e",
- "ousli" : "ous",
- "ization" : "ize",
- "ation" : "ate",
- "ator" : "ate",
- "alism" : "al",
- "iveness" : "ive",
- "fulness" : "ful",
- "ousness" : "ous",
- "aliti" : "al",
- "iviti" : "ive",
- "biliti" : "ble",
- "logi" : "log"
- },
-
- step3list = {
- "icate" : "ic",
- "ative" : "",
- "alize" : "al",
- "iciti" : "ic",
- "ical" : "ic",
- "ful" : "",
- "ness" : ""
- },
-
- c = "[^aeiou]", // consonant
- v = "[aeiouy]", // vowel
- C = c + "[^aeiouy]*", // consonant sequence
- V = v + "[aeiou]*", // vowel sequence
-
- mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0
- meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1
- mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1
- s_v = "^(" + C + ")?" + v; // vowel in stem
-
- var re_mgr0 = new RegExp(mgr0);
- var re_mgr1 = new RegExp(mgr1);
- var re_meq1 = new RegExp(meq1);
- var re_s_v = new RegExp(s_v);
-
- var re_1a = /^(.+?)(ss|i)es$/;
- var re2_1a = /^(.+?)([^s])s$/;
- var re_1b = /^(.+?)eed$/;
- var re2_1b = /^(.+?)(ed|ing)$/;
- var re_1b_2 = /.$/;
- var re2_1b_2 = /(at|bl|iz)$/;
- var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$");
- var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-
- var re_1c = /^(.+?[^aeiou])y$/;
- var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
-
- var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
-
- var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
- var re2_4 = /^(.+?)(s|t)(ion)$/;
-
- var re_5 = /^(.+?)e$/;
- var re_5_1 = /ll$/;
- var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-
- var porterStemmer = function porterStemmer(w) {
- var stem,
- suffix,
- firstch,
- re,
- re2,
- re3,
- re4;
-
- if (w.length < 3) { return w; }
-
- firstch = w.substr(0,1);
- if (firstch == "y") {
- w = firstch.toUpperCase() + w.substr(1);
- }
-
- // Step 1a
- re = re_1a
- re2 = re2_1a;
-
- if (re.test(w)) { w = w.replace(re,"$1$2"); }
- else if (re2.test(w)) { w = w.replace(re2,"$1$2"); }
-
- // Step 1b
- re = re_1b;
- re2 = re2_1b;
- if (re.test(w)) {
- var fp = re.exec(w);
- re = re_mgr0;
- if (re.test(fp[1])) {
- re = re_1b_2;
- w = w.replace(re,"");
- }
- } else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1];
- re2 = re_s_v;
- if (re2.test(stem)) {
- w = stem;
- re2 = re2_1b_2;
- re3 = re3_1b_2;
- re4 = re4_1b_2;
- if (re2.test(w)) { w = w + "e"; }
- else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); }
- else if (re4.test(w)) { w = w + "e"; }
- }
- }
-
- // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)
- re = re_1c;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- w = stem + "i";
- }
-
- // Step 2
- re = re_2;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = re_mgr0;
- if (re.test(stem)) {
- w = stem + step2list[suffix];
- }
- }
-
- // Step 3
- re = re_3;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = re_mgr0;
- if (re.test(stem)) {
- w = stem + step3list[suffix];
- }
- }
-
- // Step 4
- re = re_4;
- re2 = re2_4;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = re_mgr1;
- if (re.test(stem)) {
- w = stem;
- }
- } else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1] + fp[2];
- re2 = re_mgr1;
- if (re2.test(stem)) {
- w = stem;
- }
- }
-
- // Step 5
- re = re_5;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = re_mgr1;
- re2 = re_meq1;
- re3 = re3_5;
- if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
- w = stem;
- }
- }
-
- re = re_5_1;
- re2 = re_mgr1;
- if (re.test(w) && re2.test(w)) {
- re = re_1b_2;
- w = w.replace(re,"");
- }
-
- // and turn initial Y back to y
-
- if (firstch == "y") {
- w = firstch.toLowerCase() + w.substr(1);
- }
-
- return w;
- };
-
- return function (token) {
- return token.update(porterStemmer);
- }
-})();
-
-lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')
-/*!
- * lunr.stopWordFilter
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.generateStopWordFilter builds a stopWordFilter function from the provided
- * list of stop words.
- *
- * The built in lunr.stopWordFilter is built using this generator and can be used
- * to generate custom stopWordFilters for applications or non English languages.
- *
- * @function
- * @param {Array} token The token to pass through the filter
- * @returns {lunr.PipelineFunction}
- * @see lunr.Pipeline
- * @see lunr.stopWordFilter
- */
-lunr.generateStopWordFilter = function (stopWords) {
- var words = stopWords.reduce(function (memo, stopWord) {
- memo[stopWord] = stopWord
- return memo
- }, {})
-
- return function (token) {
- if (token && words[token.toString()] !== token.toString()) return token
- }
-}
-
-/**
- * lunr.stopWordFilter is an English language stop word list filter, any words
- * contained in the list will not be passed through the filter.
- *
- * This is intended to be used in the Pipeline. If the token does not pass the
- * filter then undefined will be returned.
- *
- * @function
- * @implements {lunr.PipelineFunction}
- * @params {lunr.Token} token - A token to check for being a stop word.
- * @returns {lunr.Token}
- * @see {@link lunr.Pipeline}
- */
-lunr.stopWordFilter = lunr.generateStopWordFilter([
- 'a',
- 'able',
- 'about',
- 'across',
- 'after',
- 'all',
- 'almost',
- 'also',
- 'am',
- 'among',
- 'an',
- 'and',
- 'any',
- 'are',
- 'as',
- 'at',
- 'be',
- 'because',
- 'been',
- 'but',
- 'by',
- 'can',
- 'cannot',
- 'could',
- 'dear',
- 'did',
- 'do',
- 'does',
- 'either',
- 'else',
- 'ever',
- 'every',
- 'for',
- 'from',
- 'get',
- 'got',
- 'had',
- 'has',
- 'have',
- 'he',
- 'her',
- 'hers',
- 'him',
- 'his',
- 'how',
- 'however',
- 'i',
- 'if',
- 'in',
- 'into',
- 'is',
- 'it',
- 'its',
- 'just',
- 'least',
- 'let',
- 'like',
- 'likely',
- 'may',
- 'me',
- 'might',
- 'most',
- 'must',
- 'my',
- 'neither',
- 'no',
- 'nor',
- 'not',
- 'of',
- 'off',
- 'often',
- 'on',
- 'only',
- 'or',
- 'other',
- 'our',
- 'own',
- 'rather',
- 'said',
- 'say',
- 'says',
- 'she',
- 'should',
- 'since',
- 'so',
- 'some',
- 'than',
- 'that',
- 'the',
- 'their',
- 'them',
- 'then',
- 'there',
- 'these',
- 'they',
- 'this',
- 'tis',
- 'to',
- 'too',
- 'twas',
- 'us',
- 'wants',
- 'was',
- 'we',
- 'were',
- 'what',
- 'when',
- 'where',
- 'which',
- 'while',
- 'who',
- 'whom',
- 'why',
- 'will',
- 'with',
- 'would',
- 'yet',
- 'you',
- 'your'
-])
-
-lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')
-/*!
- * lunr.trimmer
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.trimmer is a pipeline function for trimming non word
- * characters from the beginning and end of tokens before they
- * enter the index.
- *
- * This implementation may not work correctly for non latin
- * characters and should either be removed or adapted for use
- * with languages with non-latin characters.
- *
- * @static
- * @implements {lunr.PipelineFunction}
- * @param {lunr.Token} token The token to pass through the filter
- * @returns {lunr.Token}
- * @see lunr.Pipeline
- */
-lunr.trimmer = function (token) {
- return token.update(function (s) {
- return s.replace(/^\W+/, '').replace(/\W+$/, '')
- })
-}
-
-lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')
-/*!
- * lunr.TokenSet
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A token set is used to store the unique list of all tokens
- * within an index. Token sets are also used to represent an
- * incoming query to the index, this query token set and index
- * token set are then intersected to find which tokens to look
- * up in the inverted index.
- *
- * A token set can hold multiple tokens, as in the case of the
- * index token set, or it can hold a single token as in the
- * case of a simple query token set.
- *
- * Additionally token sets are used to perform wildcard matching.
- * Leading, contained and trailing wildcards are supported, and
- * from this edit distance matching can also be provided.
- *
- * Token sets are implemented as a minimal finite state automata,
- * where both common prefixes and suffixes are shared between tokens.
- * This helps to reduce the space used for storing the token set.
- *
- * @constructor
- */
-lunr.TokenSet = function () {
- this.final = false
- this.edges = {}
- this.id = lunr.TokenSet._nextId
- lunr.TokenSet._nextId += 1
-}
-
-/**
- * Keeps track of the next, auto increment, identifier to assign
- * to a new tokenSet.
- *
- * TokenSets require a unique identifier to be correctly minimised.
- *
- * @private
- */
-lunr.TokenSet._nextId = 1
-
-/**
- * Creates a TokenSet instance from the given sorted array of words.
- *
- * @param {String[]} arr - A sorted array of strings to create the set from.
- * @returns {lunr.TokenSet}
- * @throws Will throw an error if the input array is not sorted.
- */
-lunr.TokenSet.fromArray = function (arr) {
- var builder = new lunr.TokenSet.Builder
-
- for (var i = 0, len = arr.length; i < len; i++) {
- builder.insert(arr[i])
- }
-
- builder.finish()
- return builder.root
-}
-
-/**
- * Creates a token set from a query clause.
- *
- * @private
- * @param {Object} clause - A single clause from lunr.Query.
- * @param {string} clause.term - The query clause term.
- * @param {number} [clause.editDistance] - The optional edit distance for the term.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.fromClause = function (clause) {
- if ('editDistance' in clause) {
- return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)
- } else {
- return lunr.TokenSet.fromString(clause.term)
- }
-}
-
-/**
- * Creates a token set representing a single string with a specified
- * edit distance.
- *
- * Insertions, deletions, substitutions and transpositions are each
- * treated as an edit distance of 1.
- *
- * Increasing the allowed edit distance will have a dramatic impact
- * on the performance of both creating and intersecting these TokenSets.
- * It is advised to keep the edit distance less than 3.
- *
- * @param {string} str - The string to create the token set from.
- * @param {number} editDistance - The allowed edit distance to match.
- * @returns {lunr.Vector}
- */
-lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
- var root = new lunr.TokenSet
-
- var stack = [{
- node: root,
- editsRemaining: editDistance,
- str: str
- }]
-
- while (stack.length) {
- var frame = stack.pop()
-
- // no edit
- if (frame.str.length > 0) {
- var char = frame.str.charAt(0),
- noEditNode
-
- if (char in frame.node.edges) {
- noEditNode = frame.node.edges[char]
- } else {
- noEditNode = new lunr.TokenSet
- frame.node.edges[char] = noEditNode
- }
-
- if (frame.str.length == 1) {
- noEditNode.final = true
- }
-
- stack.push({
- node: noEditNode,
- editsRemaining: frame.editsRemaining,
- str: frame.str.slice(1)
- })
- }
-
- if (frame.editsRemaining == 0) {
- continue
- }
-
- // insertion
- if ("*" in frame.node.edges) {
- var insertionNode = frame.node.edges["*"]
- } else {
- var insertionNode = new lunr.TokenSet
- frame.node.edges["*"] = insertionNode
- }
-
- if (frame.str.length == 0) {
- insertionNode.final = true
- }
-
- stack.push({
- node: insertionNode,
- editsRemaining: frame.editsRemaining - 1,
- str: frame.str
- })
-
- // deletion
- // can only do a deletion if we have enough edits remaining
- // and if there are characters left to delete in the string
- if (frame.str.length > 1) {
- stack.push({
- node: frame.node,
- editsRemaining: frame.editsRemaining - 1,
- str: frame.str.slice(1)
- })
- }
-
- // deletion
- // just removing the last character from the str
- if (frame.str.length == 1) {
- frame.node.final = true
- }
-
- // substitution
- // can only do a substitution if we have enough edits remaining
- // and if there are characters left to substitute
- if (frame.str.length >= 1) {
- if ("*" in frame.node.edges) {
- var substitutionNode = frame.node.edges["*"]
- } else {
- var substitutionNode = new lunr.TokenSet
- frame.node.edges["*"] = substitutionNode
- }
-
- if (frame.str.length == 1) {
- substitutionNode.final = true
- }
-
- stack.push({
- node: substitutionNode,
- editsRemaining: frame.editsRemaining - 1,
- str: frame.str.slice(1)
- })
- }
-
- // transposition
- // can only do a transposition if there are edits remaining
- // and there are enough characters to transpose
- if (frame.str.length > 1) {
- var charA = frame.str.charAt(0),
- charB = frame.str.charAt(1),
- transposeNode
-
- if (charB in frame.node.edges) {
- transposeNode = frame.node.edges[charB]
- } else {
- transposeNode = new lunr.TokenSet
- frame.node.edges[charB] = transposeNode
- }
-
- if (frame.str.length == 1) {
- transposeNode.final = true
- }
-
- stack.push({
- node: transposeNode,
- editsRemaining: frame.editsRemaining - 1,
- str: charA + frame.str.slice(2)
- })
- }
- }
-
- return root
-}
-
-/**
- * Creates a TokenSet from a string.
- *
- * The string may contain one or more wildcard characters (*)
- * that will allow wildcard matching when intersecting with
- * another TokenSet.
- *
- * @param {string} str - The string to create a TokenSet from.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.fromString = function (str) {
- var node = new lunr.TokenSet,
- root = node
-
- /*
- * Iterates through all characters within the passed string
- * appending a node for each character.
- *
- * When a wildcard character is found then a self
- * referencing edge is introduced to continually match
- * any number of any characters.
- */
- for (var i = 0, len = str.length; i < len; i++) {
- var char = str[i],
- final = (i == len - 1)
-
- if (char == "*") {
- node.edges[char] = node
- node.final = final
-
- } else {
- var next = new lunr.TokenSet
- next.final = final
-
- node.edges[char] = next
- node = next
- }
- }
-
- return root
-}
-
-/**
- * Converts this TokenSet into an array of strings
- * contained within the TokenSet.
- *
- * This is not intended to be used on a TokenSet that
- * contains wildcards, in these cases the results are
- * undefined and are likely to cause an infinite loop.
- *
- * @returns {string[]}
- */
-lunr.TokenSet.prototype.toArray = function () {
- var words = []
-
- var stack = [{
- prefix: "",
- node: this
- }]
-
- while (stack.length) {
- var frame = stack.pop(),
- edges = Object.keys(frame.node.edges),
- len = edges.length
-
- if (frame.node.final) {
- /* In Safari, at this point the prefix is sometimes corrupted, see:
- * https://github.com/olivernn/lunr.js/issues/279 Calling any
- * String.prototype method forces Safari to "cast" this string to what
- * it's supposed to be, fixing the bug. */
- frame.prefix.charAt(0)
- words.push(frame.prefix)
- }
-
- for (var i = 0; i < len; i++) {
- var edge = edges[i]
-
- stack.push({
- prefix: frame.prefix.concat(edge),
- node: frame.node.edges[edge]
- })
- }
- }
-
- return words
-}
-
-/**
- * Generates a string representation of a TokenSet.
- *
- * This is intended to allow TokenSets to be used as keys
- * in objects, largely to aid the construction and minimisation
- * of a TokenSet. As such it is not designed to be a human
- * friendly representation of the TokenSet.
- *
- * @returns {string}
- */
-lunr.TokenSet.prototype.toString = function () {
- // NOTE: Using Object.keys here as this.edges is very likely
- // to enter 'hash-mode' with many keys being added
- //
- // avoiding a for-in loop here as it leads to the function
- // being de-optimised (at least in V8). From some simple
- // benchmarks the performance is comparable, but allowing
- // V8 to optimize may mean easy performance wins in the future.
-
- if (this._str) {
- return this._str
- }
-
- var str = this.final ? '1' : '0',
- labels = Object.keys(this.edges).sort(),
- len = labels.length
-
- for (var i = 0; i < len; i++) {
- var label = labels[i],
- node = this.edges[label]
-
- str = str + label + node.id
- }
-
- return str
-}
-
-/**
- * Returns a new TokenSet that is the intersection of
- * this TokenSet and the passed TokenSet.
- *
- * This intersection will take into account any wildcards
- * contained within the TokenSet.
- *
- * @param {lunr.TokenSet} b - An other TokenSet to intersect with.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.prototype.intersect = function (b) {
- var output = new lunr.TokenSet,
- frame = undefined
-
- var stack = [{
- qNode: b,
- output: output,
- node: this
- }]
-
- while (stack.length) {
- frame = stack.pop()
-
- // NOTE: As with the #toString method, we are using
- // Object.keys and a for loop instead of a for-in loop
- // as both of these objects enter 'hash' mode, causing
- // the function to be de-optimised in V8
- var qEdges = Object.keys(frame.qNode.edges),
- qLen = qEdges.length,
- nEdges = Object.keys(frame.node.edges),
- nLen = nEdges.length
-
- for (var q = 0; q < qLen; q++) {
- var qEdge = qEdges[q]
-
- for (var n = 0; n < nLen; n++) {
- var nEdge = nEdges[n]
-
- if (nEdge == qEdge || qEdge == '*') {
- var node = frame.node.edges[nEdge],
- qNode = frame.qNode.edges[qEdge],
- final = node.final && qNode.final,
- next = undefined
-
- if (nEdge in frame.output.edges) {
- // an edge already exists for this character
- // no need to create a new node, just set the finality
- // bit unless this node is already final
- next = frame.output.edges[nEdge]
- next.final = next.final || final
-
- } else {
- // no edge exists yet, must create one
- // set the finality bit and insert it
- // into the output
- next = new lunr.TokenSet
- next.final = final
- frame.output.edges[nEdge] = next
- }
-
- stack.push({
- qNode: qNode,
- output: next,
- node: node
- })
- }
- }
- }
- }
-
- return output
-}
-lunr.TokenSet.Builder = function () {
- this.previousWord = ""
- this.root = new lunr.TokenSet
- this.uncheckedNodes = []
- this.minimizedNodes = {}
-}
-
-lunr.TokenSet.Builder.prototype.insert = function (word) {
- var node,
- commonPrefix = 0
-
- if (word < this.previousWord) {
- throw new Error ("Out of order word insertion")
- }
-
- for (var i = 0; i < word.length && i < this.previousWord.length; i++) {
- if (word[i] != this.previousWord[i]) break
- commonPrefix++
- }
-
- this.minimize(commonPrefix)
-
- if (this.uncheckedNodes.length == 0) {
- node = this.root
- } else {
- node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child
- }
-
- for (var i = commonPrefix; i < word.length; i++) {
- var nextNode = new lunr.TokenSet,
- char = word[i]
-
- node.edges[char] = nextNode
-
- this.uncheckedNodes.push({
- parent: node,
- char: char,
- child: nextNode
- })
-
- node = nextNode
- }
-
- node.final = true
- this.previousWord = word
-}
-
-lunr.TokenSet.Builder.prototype.finish = function () {
- this.minimize(0)
-}
-
-lunr.TokenSet.Builder.prototype.minimize = function (downTo) {
- for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {
- var node = this.uncheckedNodes[i],
- childKey = node.child.toString()
-
- if (childKey in this.minimizedNodes) {
- node.parent.edges[node.char] = this.minimizedNodes[childKey]
- } else {
- // Cache the key for this node since
- // we know it can't change anymore
- node.child._str = childKey
-
- this.minimizedNodes[childKey] = node.child
- }
-
- this.uncheckedNodes.pop()
- }
-}
-/*!
- * lunr.Index
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * An index contains the built index of all documents and provides a query interface
- * to the index.
- *
- * Usually instances of lunr.Index will not be created using this constructor, instead
- * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be
- * used to load previously built and serialized indexes.
- *
- * @constructor
- * @param {Object} attrs - The attributes of the built search index.
- * @param {Object} attrs.invertedIndex - An index of term/field to document reference.
- * @param {Object} attrs.fieldVectors - Field vectors
- * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.
- * @param {string[]} attrs.fields - The names of indexed document fields.
- * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.
- */
-lunr.Index = function (attrs) {
- this.invertedIndex = attrs.invertedIndex
- this.fieldVectors = attrs.fieldVectors
- this.tokenSet = attrs.tokenSet
- this.fields = attrs.fields
- this.pipeline = attrs.pipeline
-}
-
-/**
- * A result contains details of a document matching a search query.
- * @typedef {Object} lunr.Index~Result
- * @property {string} ref - The reference of the document this result represents.
- * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.
- * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.
- */
-
-/**
- * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple
- * query language which itself is parsed into an instance of lunr.Query.
- *
- * For programmatically building queries it is advised to directly use lunr.Query, the query language
- * is best used for human entered text rather than program generated text.
- *
- * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported
- * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'
- * or 'world', though those that contain both will rank higher in the results.
- *
- * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can
- * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding
- * wildcards will increase the number of documents that will be found but can also have a negative
- * impact on query performance, especially with wildcards at the beginning of a term.
- *
- * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term
- * hello in the title field will match this query. Using a field not present in the index will lead
- * to an error being thrown.
- *
- * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term
- * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported
- * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.
- * Avoid large values for edit distance to improve query performance.
- *
- * Each term also supports a presence modifier. By default a term's presence in document is optional, however
- * this can be changed to either required or prohibited. For a term's presence to be required in a document the
- * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and
- * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not
- * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.
- *
- * To escape special characters the backslash character '\' can be used, this allows searches to include
- * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead
- * of attempting to apply a boost of 2 to the search term "foo".
- *
- * @typedef {string} lunr.Index~QueryString
- * @example
Simple single term query
- * hello
- * @example
Multiple term query
- * hello world
- * @example
term scoped to a field
- * title:hello
- * @example
term with a boost of 10
- * hello^10
- * @example
term with an edit distance of 2
- * hello~2
- * @example
terms with presence modifiers
- * -foo +bar baz
- */
-
-/**
- * Performs a search against the index using lunr query syntax.
- *
- * Results will be returned sorted by their score, the most relevant results
- * will be returned first. For details on how the score is calculated, please see
- * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.
- *
- * For more programmatic querying use lunr.Index#query.
- *
- * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.
- * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.
- * @returns {lunr.Index~Result[]}
- */
-lunr.Index.prototype.search = function (queryString) {
- return this.query(function (query) {
- var parser = new lunr.QueryParser(queryString, query)
- parser.parse()
- })
-}
-
-/**
- * A query builder callback provides a query object to be used to express
- * the query to perform on the index.
- *
- * @callback lunr.Index~queryBuilder
- * @param {lunr.Query} query - The query object to build up.
- * @this lunr.Query
- */
-
-/**
- * Performs a query against the index using the yielded lunr.Query object.
- *
- * If performing programmatic queries against the index, this method is preferred
- * over lunr.Index#search so as to avoid the additional query parsing overhead.
- *
- * A query object is yielded to the supplied function which should be used to
- * express the query to be run against the index.
- *
- * Note that although this function takes a callback parameter it is _not_ an
- * asynchronous operation, the callback is just yielded a query object to be
- * customized.
- *
- * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.
- * @returns {lunr.Index~Result[]}
- */
-lunr.Index.prototype.query = function (fn) {
- // for each query clause
- // * process terms
- // * expand terms from token set
- // * find matching documents and metadata
- // * get document vectors
- // * score documents
-
- var query = new lunr.Query(this.fields),
- matchingFields = Object.create(null),
- queryVectors = Object.create(null),
- termFieldCache = Object.create(null),
- requiredMatches = Object.create(null),
- prohibitedMatches = Object.create(null)
-
- /*
- * To support field level boosts a query vector is created per
- * field. An empty vector is eagerly created to support negated
- * queries.
- */
- for (var i = 0; i < this.fields.length; i++) {
- queryVectors[this.fields[i]] = new lunr.Vector
- }
-
- fn.call(query, query)
-
- for (var i = 0; i < query.clauses.length; i++) {
- /*
- * Unless the pipeline has been disabled for this term, which is
- * the case for terms with wildcards, we need to pass the clause
- * term through the search pipeline. A pipeline returns an array
- * of processed terms. Pipeline functions may expand the passed
- * term, which means we may end up performing multiple index lookups
- * for a single query term.
- */
- var clause = query.clauses[i],
- terms = null,
- clauseMatches = lunr.Set.empty
-
- if (clause.usePipeline) {
- terms = this.pipeline.runString(clause.term, {
- fields: clause.fields
- })
- } else {
- terms = [clause.term]
- }
-
- for (var m = 0; m < terms.length; m++) {
- var term = terms[m]
-
- /*
- * Each term returned from the pipeline needs to use the same query
- * clause object, e.g. the same boost and or edit distance. The
- * simplest way to do this is to re-use the clause object but mutate
- * its term property.
- */
- clause.term = term
-
- /*
- * From the term in the clause we create a token set which will then
- * be used to intersect the indexes token set to get a list of terms
- * to lookup in the inverted index
- */
- var termTokenSet = lunr.TokenSet.fromClause(clause),
- expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()
-
- /*
- * If a term marked as required does not exist in the tokenSet it is
- * impossible for the search to return any matches. We set all the field
- * scoped required matches set to empty and stop examining any further
- * clauses.
- */
- if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {
- for (var k = 0; k < clause.fields.length; k++) {
- var field = clause.fields[k]
- requiredMatches[field] = lunr.Set.empty
- }
-
- break
- }
-
- for (var j = 0; j < expandedTerms.length; j++) {
- /*
- * For each term get the posting and termIndex, this is required for
- * building the query vector.
- */
- var expandedTerm = expandedTerms[j],
- posting = this.invertedIndex[expandedTerm],
- termIndex = posting._index
-
- for (var k = 0; k < clause.fields.length; k++) {
- /*
- * For each field that this query term is scoped by (by default
- * all fields are in scope) we need to get all the document refs
- * that have this term in that field.
- *
- * The posting is the entry in the invertedIndex for the matching
- * term from above.
- */
- var field = clause.fields[k],
- fieldPosting = posting[field],
- matchingDocumentRefs = Object.keys(fieldPosting),
- termField = expandedTerm + "/" + field,
- matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)
-
- /*
- * if the presence of this term is required ensure that the matching
- * documents are added to the set of required matches for this clause.
- *
- */
- if (clause.presence == lunr.Query.presence.REQUIRED) {
- clauseMatches = clauseMatches.union(matchingDocumentsSet)
-
- if (requiredMatches[field] === undefined) {
- requiredMatches[field] = lunr.Set.complete
- }
- }
-
- /*
- * if the presence of this term is prohibited ensure that the matching
- * documents are added to the set of prohibited matches for this field,
- * creating that set if it does not yet exist.
- */
- if (clause.presence == lunr.Query.presence.PROHIBITED) {
- if (prohibitedMatches[field] === undefined) {
- prohibitedMatches[field] = lunr.Set.empty
- }
-
- prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)
-
- /*
- * Prohibited matches should not be part of the query vector used for
- * similarity scoring and no metadata should be extracted so we continue
- * to the next field
- */
- continue
- }
-
- /*
- * The query field vector is populated using the termIndex found for
- * the term and a unit value with the appropriate boost applied.
- * Using upsert because there could already be an entry in the vector
- * for the term we are working with. In that case we just add the scores
- * together.
- */
- queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })
-
- /**
- * If we've already seen this term, field combo then we've already collected
- * the matching documents and metadata, no need to go through all that again
- */
- if (termFieldCache[termField]) {
- continue
- }
-
- for (var l = 0; l < matchingDocumentRefs.length; l++) {
- /*
- * All metadata for this term/field/document triple
- * are then extracted and collected into an instance
- * of lunr.MatchData ready to be returned in the query
- * results
- */
- var matchingDocumentRef = matchingDocumentRefs[l],
- matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),
- metadata = fieldPosting[matchingDocumentRef],
- fieldMatch
-
- if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {
- matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)
- } else {
- fieldMatch.add(expandedTerm, field, metadata)
- }
-
- }
-
- termFieldCache[termField] = true
- }
- }
- }
-
- /**
- * If the presence was required we need to update the requiredMatches field sets.
- * We do this after all fields for the term have collected their matches because
- * the clause terms presence is required in _any_ of the fields not _all_ of the
- * fields.
- */
- if (clause.presence === lunr.Query.presence.REQUIRED) {
- for (var k = 0; k < clause.fields.length; k++) {
- var field = clause.fields[k]
- requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)
- }
- }
- }
-
- /**
- * Need to combine the field scoped required and prohibited
- * matching documents into a global set of required and prohibited
- * matches
- */
- var allRequiredMatches = lunr.Set.complete,
- allProhibitedMatches = lunr.Set.empty
-
- for (var i = 0; i < this.fields.length; i++) {
- var field = this.fields[i]
-
- if (requiredMatches[field]) {
- allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])
- }
-
- if (prohibitedMatches[field]) {
- allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])
- }
- }
-
- var matchingFieldRefs = Object.keys(matchingFields),
- results = [],
- matches = Object.create(null)
-
- /*
- * If the query is negated (contains only prohibited terms)
- * we need to get _all_ fieldRefs currently existing in the
- * index. This is only done when we know that the query is
- * entirely prohibited terms to avoid any cost of getting all
- * fieldRefs unnecessarily.
- *
- * Additionally, blank MatchData must be created to correctly
- * populate the results.
- */
- if (query.isNegated()) {
- matchingFieldRefs = Object.keys(this.fieldVectors)
-
- for (var i = 0; i < matchingFieldRefs.length; i++) {
- var matchingFieldRef = matchingFieldRefs[i]
- var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)
- matchingFields[matchingFieldRef] = new lunr.MatchData
- }
- }
-
- for (var i = 0; i < matchingFieldRefs.length; i++) {
- /*
- * Currently we have document fields that match the query, but we
- * need to return documents. The matchData and scores are combined
- * from multiple fields belonging to the same document.
- *
- * Scores are calculated by field, using the query vectors created
- * above, and combined into a final document score using addition.
- */
- var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),
- docRef = fieldRef.docRef
-
- if (!allRequiredMatches.contains(docRef)) {
- continue
- }
-
- if (allProhibitedMatches.contains(docRef)) {
- continue
- }
-
- var fieldVector = this.fieldVectors[fieldRef],
- score = queryVectors[fieldRef.fieldName].similarity(fieldVector),
- docMatch
-
- if ((docMatch = matches[docRef]) !== undefined) {
- docMatch.score += score
- docMatch.matchData.combine(matchingFields[fieldRef])
- } else {
- var match = {
- ref: docRef,
- score: score,
- matchData: matchingFields[fieldRef]
- }
- matches[docRef] = match
- results.push(match)
- }
- }
-
- /*
- * Sort the results objects by score, highest first.
- */
- return results.sort(function (a, b) {
- return b.score - a.score
- })
-}
-
-/**
- * Prepares the index for JSON serialization.
- *
- * The schema for this JSON blob will be described in a
- * separate JSON schema file.
- *
- * @returns {Object}
- */
-lunr.Index.prototype.toJSON = function () {
- var invertedIndex = Object.keys(this.invertedIndex)
- .sort()
- .map(function (term) {
- return [term, this.invertedIndex[term]]
- }, this)
-
- var fieldVectors = Object.keys(this.fieldVectors)
- .map(function (ref) {
- return [ref, this.fieldVectors[ref].toJSON()]
- }, this)
-
- return {
- version: lunr.version,
- fields: this.fields,
- fieldVectors: fieldVectors,
- invertedIndex: invertedIndex,
- pipeline: this.pipeline.toJSON()
- }
-}
-
-/**
- * Loads a previously serialized lunr.Index
- *
- * @param {Object} serializedIndex - A previously serialized lunr.Index
- * @returns {lunr.Index}
- */
-lunr.Index.load = function (serializedIndex) {
- var attrs = {},
- fieldVectors = {},
- serializedVectors = serializedIndex.fieldVectors,
- invertedIndex = Object.create(null),
- serializedInvertedIndex = serializedIndex.invertedIndex,
- tokenSetBuilder = new lunr.TokenSet.Builder,
- pipeline = lunr.Pipeline.load(serializedIndex.pipeline)
-
- if (serializedIndex.version != lunr.version) {
- lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'")
- }
-
- for (var i = 0; i < serializedVectors.length; i++) {
- var tuple = serializedVectors[i],
- ref = tuple[0],
- elements = tuple[1]
-
- fieldVectors[ref] = new lunr.Vector(elements)
- }
-
- for (var i = 0; i < serializedInvertedIndex.length; i++) {
- var tuple = serializedInvertedIndex[i],
- term = tuple[0],
- posting = tuple[1]
-
- tokenSetBuilder.insert(term)
- invertedIndex[term] = posting
- }
-
- tokenSetBuilder.finish()
-
- attrs.fields = serializedIndex.fields
-
- attrs.fieldVectors = fieldVectors
- attrs.invertedIndex = invertedIndex
- attrs.tokenSet = tokenSetBuilder.root
- attrs.pipeline = pipeline
-
- return new lunr.Index(attrs)
-}
-/*!
- * lunr.Builder
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.Builder performs indexing on a set of documents and
- * returns instances of lunr.Index ready for querying.
- *
- * All configuration of the index is done via the builder, the
- * fields to index, the document reference, the text processing
- * pipeline and document scoring parameters are all set on the
- * builder before indexing.
- *
- * @constructor
- * @property {string} _ref - Internal reference to the document reference field.
- * @property {string[]} _fields - Internal reference to the document fields to index.
- * @property {object} invertedIndex - The inverted index maps terms to document fields.
- * @property {object} documentTermFrequencies - Keeps track of document term frequencies.
- * @property {object} documentLengths - Keeps track of the length of documents added to the index.
- * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.
- * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.
- * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.
- * @property {number} documentCount - Keeps track of the total number of documents indexed.
- * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.
- * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.
- * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.
- * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.
- */
-lunr.Builder = function () {
- this._ref = "id"
- this._fields = Object.create(null)
- this._documents = Object.create(null)
- this.invertedIndex = Object.create(null)
- this.fieldTermFrequencies = {}
- this.fieldLengths = {}
- this.tokenizer = lunr.tokenizer
- this.pipeline = new lunr.Pipeline
- this.searchPipeline = new lunr.Pipeline
- this.documentCount = 0
- this._b = 0.75
- this._k1 = 1.2
- this.termIndex = 0
- this.metadataWhitelist = []
-}
-
-/**
- * Sets the document field used as the document reference. Every document must have this field.
- * The type of this field in the document should be a string, if it is not a string it will be
- * coerced into a string by calling toString.
- *
- * The default ref is 'id'.
- *
- * The ref should _not_ be changed during indexing, it should be set before any documents are
- * added to the index. Changing it during indexing can lead to inconsistent results.
- *
- * @param {string} ref - The name of the reference field in the document.
- */
-lunr.Builder.prototype.ref = function (ref) {
- this._ref = ref
-}
-
-/**
- * A function that is used to extract a field from a document.
- *
- * Lunr expects a field to be at the top level of a document, if however the field
- * is deeply nested within a document an extractor function can be used to extract
- * the right field for indexing.
- *
- * @callback fieldExtractor
- * @param {object} doc - The document being added to the index.
- * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.
- * @example
Extracting a nested field
- * function (doc) { return doc.nested.field }
- */
-
-/**
- * Adds a field to the list of document fields that will be indexed. Every document being
- * indexed should have this field. Null values for this field in indexed documents will
- * not cause errors but will limit the chance of that document being retrieved by searches.
- *
- * All fields should be added before adding documents to the index. Adding fields after
- * a document has been indexed will have no effect on already indexed documents.
- *
- * Fields can be boosted at build time. This allows terms within that field to have more
- * importance when ranking search results. Use a field boost to specify that matches within
- * one field are more important than other fields.
- *
- * @param {string} fieldName - The name of a field to index in all documents.
- * @param {object} attributes - Optional attributes associated with this field.
- * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.
- * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.
- * @throws {RangeError} fieldName cannot contain unsupported characters '/'
- */
-lunr.Builder.prototype.field = function (fieldName, attributes) {
- if (/\//.test(fieldName)) {
- throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'")
- }
-
- this._fields[fieldName] = attributes || {}
-}
-
-/**
- * A parameter to tune the amount of field length normalisation that is applied when
- * calculating relevance scores. A value of 0 will completely disable any normalisation
- * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b
- * will be clamped to the range 0 - 1.
- *
- * @param {number} number - The value to set for this tuning parameter.
- */
-lunr.Builder.prototype.b = function (number) {
- if (number < 0) {
- this._b = 0
- } else if (number > 1) {
- this._b = 1
- } else {
- this._b = number
- }
-}
-
-/**
- * A parameter that controls the speed at which a rise in term frequency results in term
- * frequency saturation. The default value is 1.2. Setting this to a higher value will give
- * slower saturation levels, a lower value will result in quicker saturation.
- *
- * @param {number} number - The value to set for this tuning parameter.
- */
-lunr.Builder.prototype.k1 = function (number) {
- this._k1 = number
-}
-
-/**
- * Adds a document to the index.
- *
- * Before adding fields to the index the index should have been fully setup, with the document
- * ref and all fields to index already having been specified.
- *
- * The document must have a field name as specified by the ref (by default this is 'id') and
- * it should have all fields defined for indexing, though null or undefined values will not
- * cause errors.
- *
- * Entire documents can be boosted at build time. Applying a boost to a document indicates that
- * this document should rank higher in search results than other documents.
- *
- * @param {object} doc - The document to add to the index.
- * @param {object} attributes - Optional attributes associated with this document.
- * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.
- */
-lunr.Builder.prototype.add = function (doc, attributes) {
- var docRef = doc[this._ref],
- fields = Object.keys(this._fields)
-
- this._documents[docRef] = attributes || {}
- this.documentCount += 1
-
- for (var i = 0; i < fields.length; i++) {
- var fieldName = fields[i],
- extractor = this._fields[fieldName].extractor,
- field = extractor ? extractor(doc) : doc[fieldName],
- tokens = this.tokenizer(field, {
- fields: [fieldName]
- }),
- terms = this.pipeline.run(tokens),
- fieldRef = new lunr.FieldRef (docRef, fieldName),
- fieldTerms = Object.create(null)
-
- this.fieldTermFrequencies[fieldRef] = fieldTerms
- this.fieldLengths[fieldRef] = 0
-
- // store the length of this field for this document
- this.fieldLengths[fieldRef] += terms.length
-
- // calculate term frequencies for this field
- for (var j = 0; j < terms.length; j++) {
- var term = terms[j]
-
- if (fieldTerms[term] == undefined) {
- fieldTerms[term] = 0
- }
-
- fieldTerms[term] += 1
-
- // add to inverted index
- // create an initial posting if one doesn't exist
- if (this.invertedIndex[term] == undefined) {
- var posting = Object.create(null)
- posting["_index"] = this.termIndex
- this.termIndex += 1
-
- for (var k = 0; k < fields.length; k++) {
- posting[fields[k]] = Object.create(null)
- }
-
- this.invertedIndex[term] = posting
- }
-
- // add an entry for this term/fieldName/docRef to the invertedIndex
- if (this.invertedIndex[term][fieldName][docRef] == undefined) {
- this.invertedIndex[term][fieldName][docRef] = Object.create(null)
- }
-
- // store all whitelisted metadata about this token in the
- // inverted index
- for (var l = 0; l < this.metadataWhitelist.length; l++) {
- var metadataKey = this.metadataWhitelist[l],
- metadata = term.metadata[metadataKey]
-
- if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {
- this.invertedIndex[term][fieldName][docRef][metadataKey] = []
- }
-
- this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)
- }
- }
-
- }
-}
-
-/**
- * Calculates the average document length for this index
- *
- * @private
- */
-lunr.Builder.prototype.calculateAverageFieldLengths = function () {
-
- var fieldRefs = Object.keys(this.fieldLengths),
- numberOfFields = fieldRefs.length,
- accumulator = {},
- documentsWithField = {}
-
- for (var i = 0; i < numberOfFields; i++) {
- var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
- field = fieldRef.fieldName
-
- documentsWithField[field] || (documentsWithField[field] = 0)
- documentsWithField[field] += 1
-
- accumulator[field] || (accumulator[field] = 0)
- accumulator[field] += this.fieldLengths[fieldRef]
- }
-
- var fields = Object.keys(this._fields)
-
- for (var i = 0; i < fields.length; i++) {
- var fieldName = fields[i]
- accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]
- }
-
- this.averageFieldLength = accumulator
-}
-
-/**
- * Builds a vector space model of every document using lunr.Vector
- *
- * @private
- */
-lunr.Builder.prototype.createFieldVectors = function () {
- var fieldVectors = {},
- fieldRefs = Object.keys(this.fieldTermFrequencies),
- fieldRefsLength = fieldRefs.length,
- termIdfCache = Object.create(null)
-
- for (var i = 0; i < fieldRefsLength; i++) {
- var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
- fieldName = fieldRef.fieldName,
- fieldLength = this.fieldLengths[fieldRef],
- fieldVector = new lunr.Vector,
- termFrequencies = this.fieldTermFrequencies[fieldRef],
- terms = Object.keys(termFrequencies),
- termsLength = terms.length
-
-
- var fieldBoost = this._fields[fieldName].boost || 1,
- docBoost = this._documents[fieldRef.docRef].boost || 1
-
- for (var j = 0; j < termsLength; j++) {
- var term = terms[j],
- tf = termFrequencies[term],
- termIndex = this.invertedIndex[term]._index,
- idf, score, scoreWithPrecision
-
- if (termIdfCache[term] === undefined) {
- idf = lunr.idf(this.invertedIndex[term], this.documentCount)
- termIdfCache[term] = idf
- } else {
- idf = termIdfCache[term]
- }
-
- score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)
- score *= fieldBoost
- score *= docBoost
- scoreWithPrecision = Math.round(score * 1000) / 1000
- // Converts 1.23456789 to 1.234.
- // Reducing the precision so that the vectors take up less
- // space when serialised. Doing it now so that they behave
- // the same before and after serialisation. Also, this is
- // the fastest approach to reducing a number's precision in
- // JavaScript.
-
- fieldVector.insert(termIndex, scoreWithPrecision)
- }
-
- fieldVectors[fieldRef] = fieldVector
- }
-
- this.fieldVectors = fieldVectors
-}
-
-/**
- * Creates a token set of all tokens in the index using lunr.TokenSet
- *
- * @private
- */
-lunr.Builder.prototype.createTokenSet = function () {
- this.tokenSet = lunr.TokenSet.fromArray(
- Object.keys(this.invertedIndex).sort()
- )
-}
-
-/**
- * Builds the index, creating an instance of lunr.Index.
- *
- * This completes the indexing process and should only be called
- * once all documents have been added to the index.
- *
- * @returns {lunr.Index}
- */
-lunr.Builder.prototype.build = function () {
- this.calculateAverageFieldLengths()
- this.createFieldVectors()
- this.createTokenSet()
-
- return new lunr.Index({
- invertedIndex: this.invertedIndex,
- fieldVectors: this.fieldVectors,
- tokenSet: this.tokenSet,
- fields: Object.keys(this._fields),
- pipeline: this.searchPipeline
- })
-}
-
-/**
- * Applies a plugin to the index builder.
- *
- * A plugin is a function that is called with the index builder as its context.
- * Plugins can be used to customise or extend the behaviour of the index
- * in some way. A plugin is just a function, that encapsulated the custom
- * behaviour that should be applied when building the index.
- *
- * The plugin function will be called with the index builder as its argument, additional
- * arguments can also be passed when calling use. The function will be called
- * with the index builder as its context.
- *
- * @param {Function} plugin The plugin to apply.
- */
-lunr.Builder.prototype.use = function (fn) {
- var args = Array.prototype.slice.call(arguments, 1)
- args.unshift(this)
- fn.apply(this, args)
-}
-/**
- * Contains and collects metadata about a matching document.
- * A single instance of lunr.MatchData is returned as part of every
- * lunr.Index~Result.
- *
- * @constructor
- * @param {string} term - The term this match data is associated with
- * @param {string} field - The field in which the term was found
- * @param {object} metadata - The metadata recorded about this term in this field
- * @property {object} metadata - A cloned collection of metadata associated with this document.
- * @see {@link lunr.Index~Result}
- */
-lunr.MatchData = function (term, field, metadata) {
- var clonedMetadata = Object.create(null),
- metadataKeys = Object.keys(metadata || {})
-
- // Cloning the metadata to prevent the original
- // being mutated during match data combination.
- // Metadata is kept in an array within the inverted
- // index so cloning the data can be done with
- // Array#slice
- for (var i = 0; i < metadataKeys.length; i++) {
- var key = metadataKeys[i]
- clonedMetadata[key] = metadata[key].slice()
- }
-
- this.metadata = Object.create(null)
-
- if (term !== undefined) {
- this.metadata[term] = Object.create(null)
- this.metadata[term][field] = clonedMetadata
- }
-}
-
-/**
- * An instance of lunr.MatchData will be created for every term that matches a
- * document. However only one instance is required in a lunr.Index~Result. This
- * method combines metadata from another instance of lunr.MatchData with this
- * objects metadata.
- *
- * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.
- * @see {@link lunr.Index~Result}
- */
-lunr.MatchData.prototype.combine = function (otherMatchData) {
- var terms = Object.keys(otherMatchData.metadata)
-
- for (var i = 0; i < terms.length; i++) {
- var term = terms[i],
- fields = Object.keys(otherMatchData.metadata[term])
-
- if (this.metadata[term] == undefined) {
- this.metadata[term] = Object.create(null)
- }
-
- for (var j = 0; j < fields.length; j++) {
- var field = fields[j],
- keys = Object.keys(otherMatchData.metadata[term][field])
-
- if (this.metadata[term][field] == undefined) {
- this.metadata[term][field] = Object.create(null)
- }
-
- for (var k = 0; k < keys.length; k++) {
- var key = keys[k]
-
- if (this.metadata[term][field][key] == undefined) {
- this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]
- } else {
- this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])
- }
-
- }
- }
- }
-}
-
-/**
- * Add metadata for a term/field pair to this instance of match data.
- *
- * @param {string} term - The term this match data is associated with
- * @param {string} field - The field in which the term was found
- * @param {object} metadata - The metadata recorded about this term in this field
- */
-lunr.MatchData.prototype.add = function (term, field, metadata) {
- if (!(term in this.metadata)) {
- this.metadata[term] = Object.create(null)
- this.metadata[term][field] = metadata
- return
- }
-
- if (!(field in this.metadata[term])) {
- this.metadata[term][field] = metadata
- return
- }
-
- var metadataKeys = Object.keys(metadata)
-
- for (var i = 0; i < metadataKeys.length; i++) {
- var key = metadataKeys[i]
-
- if (key in this.metadata[term][field]) {
- this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])
- } else {
- this.metadata[term][field][key] = metadata[key]
- }
- }
-}
-/**
- * A lunr.Query provides a programmatic way of defining queries to be performed
- * against a {@link lunr.Index}.
- *
- * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method
- * so the query object is pre-initialized with the right index fields.
- *
- * @constructor
- * @property {lunr.Query~Clause[]} clauses - An array of query clauses.
- * @property {string[]} allFields - An array of all available fields in a lunr.Index.
- */
-lunr.Query = function (allFields) {
- this.clauses = []
- this.allFields = allFields
-}
-
-/**
- * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.
- *
- * This allows wildcards to be added to the beginning and end of a term without having to manually do any string
- * concatenation.
- *
- * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.
- *
- * @constant
- * @default
- * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour
- * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists
- * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists
- * @see lunr.Query~Clause
- * @see lunr.Query#clause
- * @see lunr.Query#term
- * @example
- * query.term('foo', {
- * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING
- * })
- */
-
-lunr.Query.wildcard = new String ("*")
-lunr.Query.wildcard.NONE = 0
-lunr.Query.wildcard.LEADING = 1
-lunr.Query.wildcard.TRAILING = 2
-
-/**
- * Constants for indicating what kind of presence a term must have in matching documents.
- *
- * @constant
- * @enum {number}
- * @see lunr.Query~Clause
- * @see lunr.Query#clause
- * @see lunr.Query#term
- * @example
query term with required presence
- * query.term('foo', { presence: lunr.Query.presence.REQUIRED })
- */
-lunr.Query.presence = {
- /**
- * Term's presence in a document is optional, this is the default value.
- */
- OPTIONAL: 1,
-
- /**
- * Term's presence in a document is required, documents that do not contain
- * this term will not be returned.
- */
- REQUIRED: 2,
-
- /**
- * Term's presence in a document is prohibited, documents that do contain
- * this term will not be returned.
- */
- PROHIBITED: 3
-}
-
-/**
- * A single clause in a {@link lunr.Query} contains a term and details on how to
- * match that term against a {@link lunr.Index}.
- *
- * @typedef {Object} lunr.Query~Clause
- * @property {string[]} fields - The fields in an index this clause should be matched against.
- * @property {number} [boost=1] - Any boost that should be applied when matching this clause.
- * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.
- * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.
- * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.
- * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.
- */
-
-/**
- * Adds a {@link lunr.Query~Clause} to this query.
- *
- * Unless the clause contains the fields to be matched all fields will be matched. In addition
- * a default boost of 1 is applied to the clause.
- *
- * @param {lunr.Query~Clause} clause - The clause to add to this query.
- * @see lunr.Query~Clause
- * @returns {lunr.Query}
- */
-lunr.Query.prototype.clause = function (clause) {
- if (!('fields' in clause)) {
- clause.fields = this.allFields
- }
-
- if (!('boost' in clause)) {
- clause.boost = 1
- }
-
- if (!('usePipeline' in clause)) {
- clause.usePipeline = true
- }
-
- if (!('wildcard' in clause)) {
- clause.wildcard = lunr.Query.wildcard.NONE
- }
-
- if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {
- clause.term = "*" + clause.term
- }
-
- if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {
- clause.term = "" + clause.term + "*"
- }
-
- if (!('presence' in clause)) {
- clause.presence = lunr.Query.presence.OPTIONAL
- }
-
- this.clauses.push(clause)
-
- return this
-}
-
-/**
- * A negated query is one in which every clause has a presence of
- * prohibited. These queries require some special processing to return
- * the expected results.
- *
- * @returns boolean
- */
-lunr.Query.prototype.isNegated = function () {
- for (var i = 0; i < this.clauses.length; i++) {
- if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {
- return false
- }
- }
-
- return true
-}
-
-/**
- * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}
- * to the list of clauses that make up this query.
- *
- * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion
- * to a token or token-like string should be done before calling this method.
- *
- * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an
- * array, each term in the array will share the same options.
- *
- * @param {object|object[]} term - The term(s) to add to the query.
- * @param {object} [options] - Any additional properties to add to the query clause.
- * @returns {lunr.Query}
- * @see lunr.Query#clause
- * @see lunr.Query~Clause
- * @example
adding a single term to a query
- * query.term("foo")
- * @example
adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard
")),e.inlineElement=r):(h.updateStatus("ready"),h._parseMarkup(t,{},e),t)}}}),"ajax");u.magnificPopup.registerModule(j,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){h.types.push(j),b=h.st.ajax.cursor,c(x+"."+j,t),c("BeforeChange."+j,t)},getAjax:function(r){b&&u(document.body).addClass(b),h.updateStatus("loading");var e=u.extend({url:r.src,success:function(e,t,n){e={data:e,xhr:n};f("ParseAjax",e),h.appendContent(u(e.data),j),r.finished=!0,o(),h._setFocus(),setTimeout(function(){h.wrap.addClass(E)},16),h.updateStatus("ready"),f("AjaxContentAdded")},error:function(){o(),r.finished=r.loadError=!0,h.updateStatus("error",h.st.ajax.tError.replace("%url%",r.src))}},h.st.ajax.settings);return h.req=u.ajax(e),""}}});var I;u.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var e=h.st.image,t=".image";h.types.push("image"),c(C+t,function(){"image"===h.currItem.type&&e.cursor&&u(document.body).addClass(e.cursor)}),c(x+t,function(){e.cursor&&u(document.body).removeClass(e.cursor),A.off("resize"+T)}),c("Resize"+t,h.resizeImage),h.isLowIE&&c("AfterChange",h.resizeImage)},resizeImage:function(){var e,t=h.currItem;t&&t.img&&h.st.image.verticalFit&&(e=0,h.isLowIE&&(e=parseInt(t.img.css("padding-top"),10)+parseInt(t.img.css("padding-bottom"),10)),t.img.css("max-height",h.wH-e))},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,I&&clearInterval(I),e.isCheckingImgSize=!1,f("ImageHasSize",e),e.imgHidden)&&(h.content&&h.content.removeClass("mfp-loading"),e.imgHidden=!1)},findImageSize:function(t){function n(e){I&&clearInterval(I),I=setInterval(function(){0
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){h.types.push(P),c("BeforeChange",function(e,t,n){t!==n&&(t===P?L():n===P&&L(!0))}),c(x+"."+P,function(){L()})},getIframe:function(e,t){var n=e.src,r=h.st.iframe,o=(u.each(r.patterns,function(){if(-1',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=h.st.gallery,e=".mfp-gallery";if(h.direction=!0,!i||!i.enabled)return!1;g+=" mfp-gallery",c(C+e,function(){i.navigateByImgClick&&h.wrap.on("click"+e,".mfp-img",function(){if(1=h.index,h.index=e,h.updateItemHTML()},preloadNearbyImages:function(){for(var e=h.st.gallery.preload,t=Math.min(e[0],h.items.length),n=Math.min(e[1],h.items.length),r=1;r<=(h.direction?n:t);r++)h._preloadItem(h.index+r);for(r=1;r<=(h.direction?t:n);r++)h._preloadItem(h.index-r)},_preloadItem:function(e){var t;e=D(e),h.items[e].preloaded||((t=h.items[e]).parsed||(t=h.parseEl(e)),f("LazyLoad",t),"image"===t.type&&(t.img=u('').on("load.mfploader",function(){t.hasSize=!0}).on("error.mfploader",function(){t.hasSize=!0,t.loadError=!0,f("LazyLoadError",t)}).attr("src",t.src)),t.preloaded=!0)}}}),"retina");u.magnificPopup.registerModule(H,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){var n,r;1t.durationMax?t.durationMax:t.durationMin&&e=l)return x.cancelScroll(!0),e=t,n=g,0===(t=r)&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),w.scrollTo(0,e)),T("scrollStop",m,r,o),!(b=d=null)},h=function(e){var t,n,r;u+=e-(d=d||e),f=i+s*(n=1<(f=0===c?0:u/c)?1:f,"easeInQuad"===(t=m).easing&&(r=n*n),"easeOutQuad"===t.easing&&(r=n*(2-n)),"easeInOutQuad"===t.easing&&(r=n<.5?2*n*n:(4-2*n)*n-1),"easeInCubic"===t.easing&&(r=n*n*n),"easeOutCubic"===t.easing&&(r=--n*n*n+1),"easeInOutCubic"===t.easing&&(r=n<.5?4*n*n*n:(n-1)*(2*n-2)*(2*n-2)+1),"easeInQuart"===t.easing&&(r=n*n*n*n),"easeOutQuart"===t.easing&&(r=1- --n*n*n*n),"easeInOutQuart"===t.easing&&(r=n<.5?8*n*n*n*n:1-8*--n*n*n*n),"easeInQuint"===t.easing&&(r=n*n*n*n*n),"easeOutQuint"===t.easing&&(r=1+--n*n*n*n*n),"easeInOutQuint"===t.easing&&(r=n<.5?16*n*n*n*n*n:1+16*--n*n*n*n*n),(r=t.customEasing?t.customEasing(n):r)||n),w.scrollTo(0,Math.floor(f)),p(f,a)||(b=w.requestAnimationFrame(h),d=e)},0===w.pageYOffset&&w.scrollTo(0,0),e=r,t=m,g||history.pushState&&t.updateURL&&history.pushState({smoothScroll:JSON.stringify(t),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id),"matchMedia"in w&&w.matchMedia("(prefers-reduced-motion)").matches?w.scrollTo(0,Math.floor(a)):(T("scrollStart",m,r,o),x.cancelScroll(!0),w.requestAnimationFrame(h)))},x.destroy=function(){v&&(document.removeEventListener("click",t,!1),w.removeEventListener("popstate",n,!1),x.cancelScroll(),b=y=o=v=null)};if("querySelector"in document&&"addEventListener"in w&&"requestAnimationFrame"in w&&"closest"in w.Element.prototype)return x.destroy(),v=C(E,e||{}),y=v.header?document.querySelector(v.header):null,document.addEventListener("click",t,!1),v.updateURL&&v.popstate&&w.addEventListener("popstate",n,!1),x;throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs."}}),function(e,t){"function"==typeof define&&define.amd?define([],function(){return t(e)}):"object"==typeof exports?module.exports=t(e):e.Gumshoe=t(e)}("undefined"!=typeof global?global:"undefined"!=typeof window?window:this,function(c){"use strict";function d(e){e&&e.sort(function(e,t){return r(e.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)}function f(e,t){var n;e&&(n=e.nav.closest("li"))&&(n.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),o(n,t),h("gumshoeDeactivate",n,{link:e.nav,content:e.content,settings:t}))}var p={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},h=function(e,t,n){n.settings.events&&(e=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n}),t.dispatchEvent(e))},r=function(e){var t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return 0<=t?t:0},m=function(e,t,n){e=e.getBoundingClientRect(),t="function"==typeof(t=t).offset?parseFloat(t.offset()):parseFloat(t.offset);return n?parseInt(e.bottom,10)<(c.innerHeight||document.documentElement.clientHeight):parseInt(e.top,10)<=t},g=function(e,t){return!(!n()||!m(e.content,t,!0))},o=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.remove(t.nestedClass),o(e,t))},v=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.add(t.nestedClass),v(e,t))};return function(e,t){function n(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(u.detect)}function r(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(function(){d(i),u.detect()})}var o,i,a,s,l,u={setup:function(){o=document.querySelectorAll(e),i=[],Array.prototype.forEach.call(o,function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&i.push({nav:e,content:t})}),d(i)}};u.detect=function(){var e,t,n,r=function(e,t){var n=e[e.length-1];if(g(n,t))return n;for(var r=e.length-1;0<=r;r--)if(m(e[r].content,t))return e[r]}(i,l);r?a&&r.content===a.content||(f(a,l),t=l,(e=r)&&(n=e.nav.closest("li"))&&(n.classList.add(t.navClass),e.content.classList.add(t.contentClass),v(n,t),h("gumshoeActivate",n,{link:e.nav,content:e.content,settings:t})),a=r):a&&(f(a,l),a=null)},u.destroy=function(){a&&f(a,l),c.removeEventListener("scroll",n,!1),l.reflow&&c.removeEventListener("resize",r,!1),l=s=a=o=i=null};return l=function(){var n={};return Array.prototype.forEach.call(arguments,function(e){for(var t in e){if(!e.hasOwnProperty(t))return;n[t]=e[t]}}),n}(p,t||{}),u.setup(),u.detect(),c.addEventListener("scroll",n,!1),l.reflow&&c.addEventListener("resize",r,!1),u}}),$(document).ready(function(){for(var e=location.hostname,t=document.querySelectorAll("a"),n=0;nImage #%curr% could not be loaded.'},removalDelay:500,mainClass:"mfp-zoom-in",callbacks:{beforeOpen:function(){this.st.image.markup=this.st.image.markup.replace("mfp-figure","mfp-figure mfp-with-anim")}},closeOnContentClick:!0,midClick:!0}),$(".page__content").find("h1, h2, h3, h4, h5, h6").each(function(){var e,t=$(this).attr("id");t&&((e=document.createElement("a")).className="header-link",e.href="#"+t,e.innerHTML='Permalink',e.title="Permalink",$(this).append(e))})});
\ No newline at end of file
diff --git a/assets/js/plugins/gumshoe.js b/assets/js/plugins/gumshoe.js
deleted file mode 100644
index 713b6eb..0000000
--- a/assets/js/plugins/gumshoe.js
+++ /dev/null
@@ -1,484 +0,0 @@
-/*!
- * gumshoejs v5.1.1
- * A simple, framework-agnostic scrollspy script.
- * (c) 2019 Chris Ferdinandi
- * MIT License
- * http://github.com/cferdinandi/gumshoe
- */
-
-(function (root, factory) {
- if ( typeof define === 'function' && define.amd ) {
- define([], (function () {
- return factory(root);
- }));
- } else if ( typeof exports === 'object' ) {
- module.exports = factory(root);
- } else {
- root.Gumshoe = factory(root);
- }
-})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) {
-
- 'use strict';
-
- //
- // Defaults
- //
-
- var defaults = {
-
- // Active classes
- navClass: 'active',
- contentClass: 'active',
-
- // Nested navigation
- nested: false,
- nestedClass: 'active',
-
- // Offset & reflow
- offset: 0,
- reflow: false,
-
- // Event support
- events: true
-
- };
-
-
- //
- // Methods
- //
-
- /**
- * Merge two or more objects together.
- * @param {Object} objects The objects to merge together
- * @returns {Object} Merged values of defaults and options
- */
- var extend = function () {
- var merged = {};
- Array.prototype.forEach.call(arguments, (function (obj) {
- for (var key in obj) {
- if (!obj.hasOwnProperty(key)) return;
- merged[key] = obj[key];
- }
- }));
- return merged;
- };
-
- /**
- * Emit a custom event
- * @param {String} type The event type
- * @param {Node} elem The element to attach the event to
- * @param {Object} detail Any details to pass along with the event
- */
- var emitEvent = function (type, elem, detail) {
-
- // Make sure events are enabled
- if (!detail.settings.events) return;
-
- // Create a new event
- var event = new CustomEvent(type, {
- bubbles: true,
- cancelable: true,
- detail: detail
- });
-
- // Dispatch the event
- elem.dispatchEvent(event);
-
- };
-
- /**
- * Get an element's distance from the top of the Document.
- * @param {Node} elem The element
- * @return {Number} Distance from the top in pixels
- */
- var getOffsetTop = function (elem) {
- var location = 0;
- if (elem.offsetParent) {
- while (elem) {
- location += elem.offsetTop;
- elem = elem.offsetParent;
- }
- }
- return location >= 0 ? location : 0;
- };
-
- /**
- * Sort content from first to last in the DOM
- * @param {Array} contents The content areas
- */
- var sortContents = function (contents) {
- if(contents) {
- contents.sort((function (item1, item2) {
- var offset1 = getOffsetTop(item1.content);
- var offset2 = getOffsetTop(item2.content);
- if (offset1 < offset2) return -1;
- return 1;
- }));
- }
- };
-
- /**
- * Get the offset to use for calculating position
- * @param {Object} settings The settings for this instantiation
- * @return {Float} The number of pixels to offset the calculations
- */
- var getOffset = function (settings) {
-
- // if the offset is a function run it
- if (typeof settings.offset === 'function') {
- return parseFloat(settings.offset());
- }
-
- // Otherwise, return it as-is
- return parseFloat(settings.offset);
-
- };
-
- /**
- * Get the document element's height
- * @private
- * @returns {Number}
- */
- var getDocumentHeight = function () {
- return Math.max(
- document.body.scrollHeight, document.documentElement.scrollHeight,
- document.body.offsetHeight, document.documentElement.offsetHeight,
- document.body.clientHeight, document.documentElement.clientHeight
- );
- };
-
- /**
- * Determine if an element is in view
- * @param {Node} elem The element
- * @param {Object} settings The settings for this instantiation
- * @param {Boolean} bottom If true, check if element is above bottom of viewport instead
- * @return {Boolean} Returns true if element is in the viewport
- */
- var isInView = function (elem, settings, bottom) {
- var bounds = elem.getBoundingClientRect();
- var offset = getOffset(settings);
- if (bottom) {
- return parseInt(bounds.bottom, 10) < (window.innerHeight || document.documentElement.clientHeight);
- }
- return parseInt(bounds.top, 10) <= offset;
- };
-
- /**
- * Check if at the bottom of the viewport
- * @return {Boolean} If true, page is at the bottom of the viewport
- */
- var isAtBottom = function () {
- if (window.innerHeight + window.pageYOffset >= getDocumentHeight()) return true;
- return false;
- };
-
- /**
- * Check if the last item should be used (even if not at the top of the page)
- * @param {Object} item The last item
- * @param {Object} settings The settings for this instantiation
- * @return {Boolean} If true, use the last item
- */
- var useLastItem = function (item, settings) {
- if (isAtBottom() && isInView(item.content, settings, true)) return true;
- return false;
- };
-
- /**
- * Get the active content
- * @param {Array} contents The content areas
- * @param {Object} settings The settings for this instantiation
- * @return {Object} The content area and matching navigation link
- */
- var getActive = function (contents, settings) {
- var last = contents[contents.length-1];
- if (useLastItem(last, settings)) return last;
- for (var i = contents.length - 1; i >= 0; i--) {
- if (isInView(contents[i].content, settings)) return contents[i];
- }
- };
-
- /**
- * Deactivate parent navs in a nested navigation
- * @param {Node} nav The starting navigation element
- * @param {Object} settings The settings for this instantiation
- */
- var deactivateNested = function (nav, settings) {
-
- // If nesting isn't activated, bail
- if (!settings.nested) return;
-
- // Get the parent navigation
- var li = nav.parentNode.closest('li');
- if (!li) return;
-
- // Remove the active class
- li.classList.remove(settings.nestedClass);
-
- // Apply recursively to any parent navigation elements
- deactivateNested(li, settings);
-
- };
-
- /**
- * Deactivate a nav and content area
- * @param {Object} items The nav item and content to deactivate
- * @param {Object} settings The settings for this instantiation
- */
- var deactivate = function (items, settings) {
-
- // Make sure their are items to deactivate
- if (!items) return;
-
- // Get the parent list item
- var li = items.nav.closest('li');
- if (!li) return;
-
- // Remove the active class from the nav and content
- li.classList.remove(settings.navClass);
- items.content.classList.remove(settings.contentClass);
-
- // Deactivate any parent navs in a nested navigation
- deactivateNested(li, settings);
-
- // Emit a custom event
- emitEvent('gumshoeDeactivate', li, {
- link: items.nav,
- content: items.content,
- settings: settings
- });
-
- };
-
-
- /**
- * Activate parent navs in a nested navigation
- * @param {Node} nav The starting navigation element
- * @param {Object} settings The settings for this instantiation
- */
- var activateNested = function (nav, settings) {
-
- // If nesting isn't activated, bail
- if (!settings.nested) return;
-
- // Get the parent navigation
- var li = nav.parentNode.closest('li');
- if (!li) return;
-
- // Add the active class
- li.classList.add(settings.nestedClass);
-
- // Apply recursively to any parent navigation elements
- activateNested(li, settings);
-
- };
-
- /**
- * Activate a nav and content area
- * @param {Object} items The nav item and content to activate
- * @param {Object} settings The settings for this instantiation
- */
- var activate = function (items, settings) {
-
- // Make sure their are items to activate
- if (!items) return;
-
- // Get the parent list item
- var li = items.nav.closest('li');
- if (!li) return;
-
- // Add the active class to the nav and content
- li.classList.add(settings.navClass);
- items.content.classList.add(settings.contentClass);
-
- // Activate any parent navs in a nested navigation
- activateNested(li, settings);
-
- // Emit a custom event
- emitEvent('gumshoeActivate', li, {
- link: items.nav,
- content: items.content,
- settings: settings
- });
-
- };
-
- /**
- * Create the Constructor object
- * @param {String} selector The selector to use for navigation items
- * @param {Object} options User options and settings
- */
- var Constructor = function (selector, options) {
-
- //
- // Variables
- //
-
- var publicAPIs = {};
- var navItems, contents, current, timeout, settings;
-
-
- //
- // Methods
- //
-
- /**
- * Set variables from DOM elements
- */
- publicAPIs.setup = function () {
-
- // Get all nav items
- navItems = document.querySelectorAll(selector);
-
- // Create contents array
- contents = [];
-
- // Loop through each item, get it's matching content, and push to the array
- Array.prototype.forEach.call(navItems, (function (item) {
-
- // Get the content for the nav item
- var content = document.getElementById(decodeURIComponent(item.hash.substr(1)));
- if (!content) return;
-
- // Push to the contents array
- contents.push({
- nav: item,
- content: content
- });
-
- }));
-
- // Sort contents by the order they appear in the DOM
- sortContents(contents);
-
- };
-
- /**
- * Detect which content is currently active
- */
- publicAPIs.detect = function () {
-
- // Get the active content
- var active = getActive(contents, settings);
-
- // if there's no active content, deactivate and bail
- if (!active) {
- if (current) {
- deactivate(current, settings);
- current = null;
- }
- return;
- }
-
- // If the active content is the one currently active, do nothing
- if (current && active.content === current.content) return;
-
- // Deactivate the current content and activate the new content
- deactivate(current, settings);
- activate(active, settings);
-
- // Update the currently active content
- current = active;
-
- };
-
- /**
- * Detect the active content on scroll
- * Debounced for performance
- */
- var scrollHandler = function (event) {
-
- // If there's a timer, cancel it
- if (timeout) {
- window.cancelAnimationFrame(timeout);
- }
-
- // Setup debounce callback
- timeout = window.requestAnimationFrame(publicAPIs.detect);
-
- };
-
- /**
- * Update content sorting on resize
- * Debounced for performance
- */
- var resizeHandler = function (event) {
-
- // If there's a timer, cancel it
- if (timeout) {
- window.cancelAnimationFrame(timeout);
- }
-
- // Setup debounce callback
- timeout = window.requestAnimationFrame((function () {
- sortContents(contents);
- publicAPIs.detect();
- }));
-
- };
-
- /**
- * Destroy the current instantiation
- */
- publicAPIs.destroy = function () {
-
- // Undo DOM changes
- if (current) {
- deactivate(current, settings);
- }
-
- // Remove event listeners
- window.removeEventListener('scroll', scrollHandler, false);
- if (settings.reflow) {
- window.removeEventListener('resize', resizeHandler, false);
- }
-
- // Reset variables
- contents = null;
- navItems = null;
- current = null;
- timeout = null;
- settings = null;
-
- };
-
- /**
- * Initialize the current instantiation
- */
- var init = function () {
-
- // Merge user options into defaults
- settings = extend(defaults, options || {});
-
- // Setup variables based on the current DOM
- publicAPIs.setup();
-
- // Find the currently active content
- publicAPIs.detect();
-
- // Setup event listeners
- window.addEventListener('scroll', scrollHandler, false);
- if (settings.reflow) {
- window.addEventListener('resize', resizeHandler, false);
- }
-
- };
-
-
- //
- // Initialize and return the public APIs
- //
-
- init();
- return publicAPIs;
-
- };
-
-
- //
- // Return the Constructor
- //
-
- return Constructor;
-
-}));
\ No newline at end of file
diff --git a/assets/js/plugins/jquery.ba-throttle-debounce.js b/assets/js/plugins/jquery.ba-throttle-debounce.js
deleted file mode 100644
index fa30bdf..0000000
--- a/assets/js/plugins/jquery.ba-throttle-debounce.js
+++ /dev/null
@@ -1,252 +0,0 @@
-/*!
- * jQuery throttle / debounce - v1.1 - 3/7/2010
- * http://benalman.com/projects/jquery-throttle-debounce-plugin/
- *
- * Copyright (c) 2010 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-
-// Script: jQuery throttle / debounce: Sometimes, less is more!
-//
-// *Version: 1.1, Last updated: 3/7/2010*
-//
-// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/
-// GitHub - http://github.com/cowboy/jquery-throttle-debounce/
-// Source - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js
-// (Minified) - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb)
-//
-// About: License
-//
-// Copyright (c) 2010 "Cowboy" Ben Alman,
-// Dual licensed under the MIT and GPL licenses.
-// http://benalman.com/about/license/
-//
-// About: Examples
-//
-// These working examples, complete with fully commented code, illustrate a few
-// ways in which this plugin can be used.
-//
-// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/
-// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/
-//
-// About: Support and Testing
-//
-// Information about what version or versions of jQuery this plugin has been
-// tested with, what browsers it has been tested in, and where the unit tests
-// reside (so you can test it yourself).
-//
-// jQuery Versions - none, 1.3.2, 1.4.2
-// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1.
-// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/
-//
-// About: Release History
-//
-// 1.1 - (3/7/2010) Fixed a bug in where trailing callbacks
-// executed later than they should. Reworked a fair amount of internal
-// logic as well.
-// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over
-// from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the
-// no_trailing throttle parameter and debounce functionality.
-//
-// Topic: Note for non-jQuery users
-//
-// jQuery isn't actually required for this plugin, because nothing internal
-// uses any jQuery methods or properties. jQuery is just used as a namespace
-// under which these methods can exist.
-//
-// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist
-// when this plugin is loaded, the method described below will be created in
-// the `Cowboy` namespace. Usage will be exactly the same, but instead of
-// $.method() or jQuery.method(), you'll need to use Cowboy.method().
-
-(function(window,undefined){
- '$:nomunge'; // Used by YUI compressor.
-
- // Since jQuery really isn't required for this plugin, use `jQuery` as the
- // namespace only if it already exists, otherwise use the `Cowboy` namespace,
- // creating it if necessary.
- var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ),
-
- // Internal method reference.
- jq_throttle;
-
- // Method: jQuery.throttle
- //
- // Throttle execution of a function. Especially useful for rate limiting
- // execution of handlers on events like resize and scroll. If you want to
- // rate-limit execution of a function to a single time, see the
- // method.
- //
- // In this visualization, | is a throttled-function call and X is the actual
- // callback execution:
- //
- // > Throttled with `no_trailing` specified as false or unspecified:
- // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
- // > X X X X X X X X X X X X
- // >
- // > Throttled with `no_trailing` specified as true:
- // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
- // > X X X X X X X X X X
- //
- // Usage:
- //
- // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback );
- // >
- // > jQuery('selector').bind( 'someevent', throttled );
- // > jQuery('selector').unbind( 'someevent', throttled );
- //
- // This also works in jQuery 1.4+:
- //
- // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) );
- // > jQuery('selector').unbind( 'someevent', callback );
- //
- // Arguments:
- //
- // delay - (Number) A zero-or-greater delay in milliseconds. For event
- // callbacks, values around 100 or 250 (or even higher) are most useful.
- // no_trailing - (Boolean) Optional, defaults to false. If no_trailing is
- // true, callback will only execute every `delay` milliseconds while the
- // throttled-function is being called. If no_trailing is false or
- // unspecified, callback will be executed one final time after the last
- // throttled-function call. (After the throttled-function has not been
- // called for `delay` milliseconds, the internal counter is reset)
- // callback - (Function) A function to be executed after delay milliseconds.
- // The `this` context and all arguments are passed through, as-is, to
- // `callback` when the throttled-function is executed.
- //
- // Returns:
- //
- // (Function) A new, throttled, function.
-
- $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) {
- // After wrapper has stopped being called, this timeout ensures that
- // `callback` is executed at the proper times in `throttle` and `end`
- // debounce modes.
- var timeout_id,
-
- // Keep track of the last time `callback` was executed.
- last_exec = 0;
-
- // `no_trailing` defaults to falsy.
- if ( typeof no_trailing !== 'boolean' ) {
- debounce_mode = callback;
- callback = no_trailing;
- no_trailing = undefined;
- }
-
- // The `wrapper` function encapsulates all of the throttling / debouncing
- // functionality and when executed will limit the rate at which `callback`
- // is executed.
- function wrapper() {
- var that = this,
- elapsed = +new Date() - last_exec,
- args = arguments;
-
- // Execute `callback` and update the `last_exec` timestamp.
- function exec() {
- last_exec = +new Date();
- callback.apply( that, args );
- };
-
- // If `debounce_mode` is true (at_begin) this is used to clear the flag
- // to allow future `callback` executions.
- function clear() {
- timeout_id = undefined;
- };
-
- if ( debounce_mode && !timeout_id ) {
- // Since `wrapper` is being called for the first time and
- // `debounce_mode` is true (at_begin), execute `callback`.
- exec();
- }
-
- // Clear any existing timeout.
- timeout_id && clearTimeout( timeout_id );
-
- if ( debounce_mode === undefined && elapsed > delay ) {
- // In throttle mode, if `delay` time has been exceeded, execute
- // `callback`.
- exec();
-
- } else if ( no_trailing !== true ) {
- // In trailing throttle mode, since `delay` time has not been
- // exceeded, schedule `callback` to execute `delay` ms after most
- // recent execution.
- //
- // If `debounce_mode` is true (at_begin), schedule `clear` to execute
- // after `delay` ms.
- //
- // If `debounce_mode` is false (at end), schedule `callback` to
- // execute after `delay` ms.
- timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay );
- }
- };
-
- // Set the guid of `wrapper` function to the same of original callback, so
- // it can be removed in jQuery 1.4+ .unbind or .die by using the original
- // callback as a reference.
- if ( $.guid ) {
- wrapper.guid = callback.guid = callback.guid || $.guid++;
- }
-
- // Return the wrapper function.
- return wrapper;
- };
-
- // Method: jQuery.debounce
- //
- // Debounce execution of a function. Debouncing, unlike throttling,
- // guarantees that a function is only executed a single time, either at the
- // very beginning of a series of calls, or at the very end. If you want to
- // simply rate-limit execution of a function, see the
- // method.
- //
- // In this visualization, | is a debounced-function call and X is the actual
- // callback execution:
- //
- // > Debounced with `at_begin` specified as false or unspecified:
- // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
- // > X X
- // >
- // > Debounced with `at_begin` specified as true:
- // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
- // > X X
- //
- // Usage:
- //
- // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback );
- // >
- // > jQuery('selector').bind( 'someevent', debounced );
- // > jQuery('selector').unbind( 'someevent', debounced );
- //
- // This also works in jQuery 1.4+:
- //
- // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) );
- // > jQuery('selector').unbind( 'someevent', callback );
- //
- // Arguments:
- //
- // delay - (Number) A zero-or-greater delay in milliseconds. For event
- // callbacks, values around 100 or 250 (or even higher) are most useful.
- // at_begin - (Boolean) Optional, defaults to false. If at_begin is false or
- // unspecified, callback will only be executed `delay` milliseconds after
- // the last debounced-function call. If at_begin is true, callback will be
- // executed only at the first debounced-function call. (After the
- // throttled-function has not been called for `delay` milliseconds, the
- // internal counter is reset)
- // callback - (Function) A function to be executed after delay milliseconds.
- // The `this` context and all arguments are passed through, as-is, to
- // `callback` when the debounced-function is executed.
- //
- // Returns:
- //
- // (Function) A new, debounced, function.
-
- $.debounce = function( delay, at_begin, callback ) {
- return callback === undefined
- ? jq_throttle( delay, at_begin, false )
- : jq_throttle( delay, callback, at_begin !== false );
- };
-
-})(this);
diff --git a/assets/js/plugins/jquery.fitvids.js b/assets/js/plugins/jquery.fitvids.js
deleted file mode 100644
index 5c2f85c..0000000
--- a/assets/js/plugins/jquery.fitvids.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/*jshint browser:true */
-/*!
-* FitVids 1.1
-*
-* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
-* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
-* Released under the WTFPL license - http://sam.zoy.org/wtfpl/
-*
-*/
-
-;(function( $ ){
-
- 'use strict';
-
- $.fn.fitVids = function( options ) {
- var settings = {
- customSelector: null,
- ignore: null
- };
-
- if(!document.getElementById('fit-vids-style')) {
- // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
- var head = document.head || document.getElementsByTagName('head')[0];
- var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
- var div = document.createElement("div");
- div.innerHTML = '
x
';
- head.appendChild(div.childNodes[1]);
- }
-
- if ( options ) {
- $.extend( settings, options );
- }
-
- return this.each(function(){
- var selectors = [
- 'iframe[src*="player.vimeo.com"]',
- 'iframe[src*="youtube.com"]',
- 'iframe[src*="youtube-nocookie.com"]',
- 'iframe[src*="kickstarter.com"][src*="video.html"]',
- 'object',
- 'embed'
- ];
-
- if (settings.customSelector) {
- selectors.push(settings.customSelector);
- }
-
- var ignoreList = '.fitvidsignore';
-
- if(settings.ignore) {
- ignoreList = ignoreList + ', ' + settings.ignore;
- }
-
- var $allVideos = $(this).find(selectors.join(','));
- $allVideos = $allVideos.not('object object'); // SwfObj conflict patch
- $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
-
- $allVideos.each(function(count){
- var $this = $(this);
- if($this.parents(ignoreList).length > 0) {
- return; // Disable FitVids on this video.
- }
- if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
- if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
- {
- $this.attr('height', 9);
- $this.attr('width', 16);
- }
- var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
- width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
- aspectRatio = height / width;
- if(!$this.attr('id')){
- var videoID = 'fitvid' + count;
- $this.attr('id', videoID);
- }
- $this.wrap('').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
- $this.removeAttr('height').removeAttr('width');
- });
- });
- };
-// Works with either jQuery or Zepto
-})( window.jQuery || window.Zepto );
\ No newline at end of file
diff --git a/assets/js/plugins/jquery.greedy-navigation.js b/assets/js/plugins/jquery.greedy-navigation.js
deleted file mode 100644
index 22afa4d..0000000
--- a/assets/js/plugins/jquery.greedy-navigation.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-GreedyNav.js - http://lukejacksonn.com/actuate
-Licensed under the MIT license - http://opensource.org/licenses/MIT
-Copyright (c) 2015 Luke Jackson
-*/
-
-$(function() {
-
- var $btn = $("nav.greedy-nav .greedy-nav__toggle");
- var $btn2 = $("nav.greedy-nav .greedy-nav__toggle_lang");
- var $vlinks = $("nav.greedy-nav .visible-links");
- var $hlinks = $("nav.greedy-nav .hidden-links.links-menu");
- var $hlinks2 = $("nav.greedy-nav .hidden-links.lang-menu");
- var $nav = $("nav.greedy-nav");
- // var $logo = $('nav.greedy-nav .site-logo');
- var $logoImg = $('nav.greedy-nav .site-logo img');
- // var $title = $("nav.greedy-nav .site-title");
- var $search = $('nav.greedy-nav button.search__toggle');
-
- var numOfItems, totalSpace, closingTime, breakWidths;
-
- // This function measures both hidden and visible links and sets the navbar breakpoints
- // This is called the first time the script runs and everytime the "check()" function detects a change of window width that reached a different CSS width breakpoint, which affects the size of navbar Items
- // Please note that "CSS width breakpoints" (which are only 4) !== "navbar breakpoints" (which are as many as the number of items on the navbar)
- function measureLinks(){
- numOfItems = 0;
- totalSpace = 0;
- closingTime = 1000;
- breakWidths = [];
-
- // Adds the width of a navItem in order to create breakpoints for the navbar
- function addWidth(i, w) {
- totalSpace += w;
- numOfItems += 1;
- breakWidths.push(totalSpace);
- }
-
- // Measures the width of hidden links by making a temporary clone of them and positioning under visible links
- function hiddenWidth(obj){
- var clone = obj.clone();
- clone.css("visibility","hidden");
- $vlinks.append(clone);
- addWidth(0, clone.outerWidth());
- clone.remove();
- }
- // Measure both visible and hidden links widths
- $vlinks.children().outerWidth(addWidth);
- $hlinks.children().each(function(){hiddenWidth($(this))});
- }
- // Get initial state
- measureLinks();
-
- var winWidth = $( window ).width();
- // Set the last measured CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px.
- var lastBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3;
-
- var availableSpace, numOfVisibleItems, requiredSpace, timer, timer2;
-
- function check() {
-
- winWidth = $( window ).width();
- // Set the current CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px.
- var curBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3;
- // If current breakpoint is different from last measured breakpoint, measureLinks again
- if(curBreakpoint !== lastBreakpoint) measureLinks();
- // Set the last measured CSS width breakpoint with the current breakpoint
- lastBreakpoint = curBreakpoint;
-
- // Get instant state
- numOfVisibleItems = $vlinks.children().length;
- // Decrease the width of visible elements from the nav innerWidth to find out the available space for navItems
- availableSpace = /* nav */ $nav.innerWidth()
- - /* logo */ // ($logo.length !== 0 ? $logo.outerWidth(true) : 0)
- - /* title */ // $title.outerWidth(true)
- - /* search */ ($search.length !== 0 ? $search.outerWidth(true) : 0)
- - /* toggle */ (numOfVisibleItems !== breakWidths.length ? $btn.outerWidth(true) : 0)
- - /* toggle-lang */ ($btn2.outerWidth(true));
- requiredSpace = breakWidths[numOfVisibleItems - 1];
-
- // There is not enought space
- if (requiredSpace > availableSpace) {
- $vlinks.children().last().prependTo($hlinks);
- numOfVisibleItems -= 1;
- check();
- // There is more than enough space. If only one element is hidden, add the toggle width to the available space
- } else if (availableSpace + (numOfVisibleItems === breakWidths.length - 1?$btn.outerWidth(true):0) > breakWidths[numOfVisibleItems]) {
- $hlinks.children().first().appendTo($vlinks);
- numOfVisibleItems += 1;
- check();
- }
- // Update the button accordingly
- $btn.attr("count", numOfItems - numOfVisibleItems);
- if (numOfVisibleItems === numOfItems) {
- $btn.addClass('hidden');
- } else $btn.removeClass('hidden');
- }
-
- // Window listeners
- $(window).resize(function() {
- check();
- });
-
- $btn.on('click', function() {
- if($hlinks.is(":visible")){
- $hlinks.addClass('hidden');
- $(this).removeClass('close');
- clearTimeout(timer);
- } else {
- $hlinks.removeClass('hidden');
- $(this).addClass('close');
- $hlinks2.addClass('hidden');
- $btn2.removeClass('close');
- clearTimeout(timer);
- }
- });
-
- $hlinks.on('mouseleave', function() {
- // Mouse has left, start the timer
- timer = setTimeout(function() {
- $hlinks.addClass('hidden');
- }, closingTime);
- }).on('mouseenter', function() {
- // Mouse is back, cancel the timer
- clearTimeout(timer);
- })
-
- $btn2.on('click', function() {
- if($hlinks2.is(":visible")){
- $hlinks2.addClass('hidden');
- $(this).removeClass('close');
- clearTimeout(timer2);
- } else {
- $hlinks2.removeClass('hidden');
- $(this).addClass('close');
- $hlinks.addClass('hidden');
- $btn.removeClass('close');
- clearTimeout(timer2);
- }
- });
-
- $hlinks2.on('mouseleave', function() {
- // Mouse has left, start the timer
- timer2 = setTimeout(function() {
- $hlinks2.addClass('hidden');
- }, closingTime);
- }).on('mouseenter', function() {
- // Mouse is back, cancel the timer
- clearTimeout(timer2);
- })
-
- // check if page has a logo
- if($logoImg.length !== 0){
- // check if logo is not loaded
- if(!($logoImg[0].complete || $logoImg[0].naturalWidth !== 0)){
- // if logo is not loaded wait for logo to load or fail to check
- $logoImg.one("load error", check);
- // if logo is already loaded just check
- } else check();
- // if page does not have a logo just check
- } else check();
-
-});
diff --git a/assets/js/plugins/jquery.magnific-popup.js b/assets/js/plugins/jquery.magnific-popup.js
deleted file mode 100644
index 7d1d197..0000000
--- a/assets/js/plugins/jquery.magnific-popup.js
+++ /dev/null
@@ -1,1860 +0,0 @@
-/*! Magnific Popup - v1.1.0 - 2016-02-20
-* http://dimsemenov.com/plugins/magnific-popup/
-* Copyright (c) 2016 Dmitry Semenov; */
-;(function (factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS
- factory(require('jquery'));
- } else {
- // Browser globals
- factory(window.jQuery || window.Zepto);
- }
- }(function($) {
-
- /*>>core*/
- /**
- *
- * Magnific Popup Core JS file
- *
- */
-
-
- /**
- * Private static constants
- */
- var CLOSE_EVENT = 'Close',
- BEFORE_CLOSE_EVENT = 'BeforeClose',
- AFTER_CLOSE_EVENT = 'AfterClose',
- BEFORE_APPEND_EVENT = 'BeforeAppend',
- MARKUP_PARSE_EVENT = 'MarkupParse',
- OPEN_EVENT = 'Open',
- CHANGE_EVENT = 'Change',
- NS = 'mfp',
- EVENT_NS = '.' + NS,
- READY_CLASS = 'mfp-ready',
- REMOVING_CLASS = 'mfp-removing',
- PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
-
-
- /**
- * Private vars
- */
- /*jshint -W079 */
- var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
- MagnificPopup = function(){},
- _isJQ = !!(window.jQuery),
- _prevStatus,
- _window = $(window),
- _document,
- _prevContentType,
- _wrapClasses,
- _currPopupType;
-
-
- /**
- * Private functions
- */
- var _mfpOn = function(name, f) {
- mfp.ev.on(NS + name + EVENT_NS, f);
- },
- _getEl = function(className, appendTo, html, raw) {
- var el = document.createElement('div');
- el.className = 'mfp-'+className;
- if(html) {
- el.innerHTML = html;
- }
- if(!raw) {
- el = $(el);
- if(appendTo) {
- el.appendTo(appendTo);
- }
- } else if(appendTo) {
- appendTo.appendChild(el);
- }
- return el;
- },
- _mfpTrigger = function(e, data) {
- mfp.ev.triggerHandler(NS + e, data);
-
- if(mfp.st.callbacks) {
- // converts "mfpEventName" to "eventName" callback and triggers it if it's present
- e = e.charAt(0).toLowerCase() + e.slice(1);
- if(mfp.st.callbacks[e]) {
- mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
- }
- }
- },
- _getCloseBtn = function(type) {
- if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
- mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
- _currPopupType = type;
- }
- return mfp.currTemplate.closeBtn;
- },
- // Initialize Magnific Popup only when called at least once
- _checkInstance = function() {
- if(!$.magnificPopup.instance) {
- /*jshint -W020 */
- mfp = new MagnificPopup();
- mfp.init();
- $.magnificPopup.instance = mfp;
- }
- },
- // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
- supportsTransitions = function() {
- var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
- v = ['ms','O','Moz','Webkit']; // 'v' for vendor
-
- if( s['transition'] !== undefined ) {
- return true;
- }
-
- while( v.length ) {
- if( v.pop() + 'Transition' in s ) {
- return true;
- }
- }
-
- return false;
- };
-
-
-
- /**
- * Public functions
- */
- MagnificPopup.prototype = {
-
- constructor: MagnificPopup,
-
- /**
- * Initializes Magnific Popup plugin.
- * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
- */
- init: function() {
- var appVersion = navigator.appVersion;
- mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
- mfp.isAndroid = (/android/gi).test(appVersion);
- mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
- mfp.supportsTransition = supportsTransitions();
-
- // We disable fixed positioned lightbox on devices that don't handle it nicely.
- // If you know a better way of detecting this - let me know.
- mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
- _document = $(document);
-
- mfp.popupsCache = {};
- },
-
- /**
- * Opens popup
- * @param data [description]
- */
- open: function(data) {
-
- var i;
-
- if(data.isObj === false) {
- // convert jQuery collection to array to avoid conflicts later
- mfp.items = data.items.toArray();
-
- mfp.index = 0;
- var items = data.items,
- item;
- for(i = 0; i < items.length; i++) {
- item = items[i];
- if(item.parsed) {
- item = item.el[0];
- }
- if(item === data.el[0]) {
- mfp.index = i;
- break;
- }
- }
- } else {
- mfp.items = $.isArray(data.items) ? data.items : [data.items];
- mfp.index = data.index || 0;
- }
-
- // if popup is already opened - we just update the content
- if(mfp.isOpen) {
- mfp.updateItemHTML();
- return;
- }
-
- mfp.types = [];
- _wrapClasses = '';
- if(data.mainEl && data.mainEl.length) {
- mfp.ev = data.mainEl.eq(0);
- } else {
- mfp.ev = _document;
- }
-
- if(data.key) {
- if(!mfp.popupsCache[data.key]) {
- mfp.popupsCache[data.key] = {};
- }
- mfp.currTemplate = mfp.popupsCache[data.key];
- } else {
- mfp.currTemplate = {};
- }
-
-
-
- mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data );
- mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
-
- if(mfp.st.modal) {
- mfp.st.closeOnContentClick = false;
- mfp.st.closeOnBgClick = false;
- mfp.st.showCloseBtn = false;
- mfp.st.enableEscapeKey = false;
- }
-
-
- // Building markup
- // main containers are created only once
- if(!mfp.bgOverlay) {
-
- // Dark overlay
- mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
- mfp.close();
- });
-
- mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
- if(mfp._checkIfClose(e.target)) {
- mfp.close();
- }
- });
-
- mfp.container = _getEl('container', mfp.wrap);
- }
-
- mfp.contentContainer = _getEl('content');
- if(mfp.st.preloader) {
- mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
- }
-
-
- // Initializing modules
- var modules = $.magnificPopup.modules;
- for(i = 0; i < modules.length; i++) {
- var n = modules[i];
- n = n.charAt(0).toUpperCase() + n.slice(1);
- mfp['init'+n].call(mfp);
- }
- _mfpTrigger('BeforeOpen');
-
-
- if(mfp.st.showCloseBtn) {
- // Close button
- if(!mfp.st.closeBtnInside) {
- mfp.wrap.append( _getCloseBtn() );
- } else {
- _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
- values.close_replaceWith = _getCloseBtn(item.type);
- });
- _wrapClasses += ' mfp-close-btn-in';
- }
- }
-
- if(mfp.st.alignTop) {
- _wrapClasses += ' mfp-align-top';
- }
-
-
-
- if(mfp.fixedContentPos) {
- mfp.wrap.css({
- overflow: mfp.st.overflowY,
- overflowX: 'hidden',
- overflowY: mfp.st.overflowY
- });
- } else {
- mfp.wrap.css({
- top: _window.scrollTop(),
- position: 'absolute'
- });
- }
- if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
- mfp.bgOverlay.css({
- height: _document.height(),
- position: 'absolute'
- });
- }
-
-
-
- if(mfp.st.enableEscapeKey) {
- // Close on ESC key
- _document.on('keyup' + EVENT_NS, function(e) {
- if(e.keyCode === 27) {
- mfp.close();
- }
- });
- }
-
- _window.on('resize' + EVENT_NS, function() {
- mfp.updateSize();
- });
-
-
- if(!mfp.st.closeOnContentClick) {
- _wrapClasses += ' mfp-auto-cursor';
- }
-
- if(_wrapClasses)
- mfp.wrap.addClass(_wrapClasses);
-
-
- // this triggers recalculation of layout, so we get it once to not to trigger twice
- var windowHeight = mfp.wH = _window.height();
-
-
- var windowStyles = {};
-
- if( mfp.fixedContentPos ) {
- if(mfp._hasScrollBar(windowHeight)){
- var s = mfp._getScrollbarSize();
- if(s) {
- windowStyles.marginRight = s;
- }
- }
- }
-
- if(mfp.fixedContentPos) {
- if(!mfp.isIE7) {
- windowStyles.overflow = 'hidden';
- } else {
- // ie7 double-scroll bug
- $('body, html').css('overflow', 'hidden');
- }
- }
-
-
-
- var classesToadd = mfp.st.mainClass;
- if(mfp.isIE7) {
- classesToadd += ' mfp-ie7';
- }
- if(classesToadd) {
- mfp._addClassToMFP( classesToadd );
- }
-
- // add content
- mfp.updateItemHTML();
-
- _mfpTrigger('BuildControls');
-
- // remove scrollbar, add margin e.t.c
- $('html').css(windowStyles);
-
- // add everything to DOM
- mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
-
- // Save last focused element
- mfp._lastFocusedEl = document.activeElement;
-
- // Wait for next cycle to allow CSS transition
- setTimeout(function() {
-
- if(mfp.content) {
- mfp._addClassToMFP(READY_CLASS);
- mfp._setFocus();
- } else {
- // if content is not defined (not loaded e.t.c) we add class only for BG
- mfp.bgOverlay.addClass(READY_CLASS);
- }
-
- // Trap the focus in popup
- _document.on('focusin' + EVENT_NS, mfp._onFocusIn);
-
- }, 16);
-
- mfp.isOpen = true;
- mfp.updateSize(windowHeight);
- _mfpTrigger(OPEN_EVENT);
-
- return data;
- },
-
- /**
- * Closes the popup
- */
- close: function() {
- if(!mfp.isOpen) return;
- _mfpTrigger(BEFORE_CLOSE_EVENT);
-
- mfp.isOpen = false;
- // for CSS3 animation
- if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {
- mfp._addClassToMFP(REMOVING_CLASS);
- setTimeout(function() {
- mfp._close();
- }, mfp.st.removalDelay);
- } else {
- mfp._close();
- }
- },
-
- /**
- * Helper for close() function
- */
- _close: function() {
- _mfpTrigger(CLOSE_EVENT);
-
- var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
-
- mfp.bgOverlay.detach();
- mfp.wrap.detach();
- mfp.container.empty();
-
- if(mfp.st.mainClass) {
- classesToRemove += mfp.st.mainClass + ' ';
- }
-
- mfp._removeClassFromMFP(classesToRemove);
-
- if(mfp.fixedContentPos) {
- var windowStyles = {marginRight: ''};
- if(mfp.isIE7) {
- $('body, html').css('overflow', '');
- } else {
- windowStyles.overflow = '';
- }
- $('html').css(windowStyles);
- }
-
- _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
- mfp.ev.off(EVENT_NS);
-
- // clean up DOM elements that aren't removed
- mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
- mfp.bgOverlay.attr('class', 'mfp-bg');
- mfp.container.attr('class', 'mfp-container');
-
- // remove close button from target element
- if(mfp.st.showCloseBtn &&
- (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
- if(mfp.currTemplate.closeBtn)
- mfp.currTemplate.closeBtn.detach();
- }
-
-
- if(mfp.st.autoFocusLast && mfp._lastFocusedEl) {
- $(mfp._lastFocusedEl).focus(); // put tab focus back
- }
- mfp.currItem = null;
- mfp.content = null;
- mfp.currTemplate = null;
- mfp.prevHeight = 0;
-
- _mfpTrigger(AFTER_CLOSE_EVENT);
- },
-
- updateSize: function(winHeight) {
-
- if(mfp.isIOS) {
- // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
- var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
- var height = window.innerHeight * zoomLevel;
- mfp.wrap.css('height', height);
- mfp.wH = height;
- } else {
- mfp.wH = winHeight || _window.height();
- }
- // Fixes #84: popup incorrectly positioned with position:relative on body
- if(!mfp.fixedContentPos) {
- mfp.wrap.css('height', mfp.wH);
- }
-
- _mfpTrigger('Resize');
-
- },
-
- /**
- * Set content of popup based on current index
- */
- updateItemHTML: function() {
- var item = mfp.items[mfp.index];
-
- // Detach and perform modifications
- mfp.contentContainer.detach();
-
- if(mfp.content)
- mfp.content.detach();
-
- if(!item.parsed) {
- item = mfp.parseEl( mfp.index );
- }
-
- var type = item.type;
-
- _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
- // BeforeChange event works like so:
- // _mfpOn('BeforeChange', function(e, prevType, newType) { });
-
- mfp.currItem = item;
-
- if(!mfp.currTemplate[type]) {
- var markup = mfp.st[type] ? mfp.st[type].markup : false;
-
- // allows to modify markup
- _mfpTrigger('FirstMarkupParse', markup);
-
- if(markup) {
- mfp.currTemplate[type] = $(markup);
- } else {
- // if there is no markup found we just define that template is parsed
- mfp.currTemplate[type] = true;
- }
- }
-
- if(_prevContentType && _prevContentType !== item.type) {
- mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
- }
-
- var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
- mfp.appendContent(newContent, type);
-
- item.preloaded = true;
-
- _mfpTrigger(CHANGE_EVENT, item);
- _prevContentType = item.type;
-
- // Append container back after its content changed
- mfp.container.prepend(mfp.contentContainer);
-
- _mfpTrigger('AfterChange');
- },
-
-
- /**
- * Set HTML content of popup
- */
- appendContent: function(newContent, type) {
- mfp.content = newContent;
-
- if(newContent) {
- if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
- mfp.currTemplate[type] === true) {
- // if there is no markup, we just append close button element inside
- if(!mfp.content.find('.mfp-close').length) {
- mfp.content.append(_getCloseBtn());
- }
- } else {
- mfp.content = newContent;
- }
- } else {
- mfp.content = '';
- }
-
- _mfpTrigger(BEFORE_APPEND_EVENT);
- mfp.container.addClass('mfp-'+type+'-holder');
-
- mfp.contentContainer.append(mfp.content);
- },
-
-
- /**
- * Creates Magnific Popup data object based on given data
- * @param {int} index Index of item to parse
- */
- parseEl: function(index) {
- var item = mfp.items[index],
- type;
-
- if(item.tagName) {
- item = { el: $(item) };
- } else {
- type = item.type;
- item = { data: item, src: item.src };
- }
-
- if(item.el) {
- var types = mfp.types;
-
- // check for 'mfp-TYPE' class
- for(var i = 0; i < types.length; i++) {
- if( item.el.hasClass('mfp-'+types[i]) ) {
- type = types[i];
- break;
- }
- }
-
- item.src = item.el.attr('data-mfp-src');
- if(!item.src) {
- item.src = item.el.attr('href');
- }
- }
-
- item.type = type || mfp.st.type || 'inline';
- item.index = index;
- item.parsed = true;
- mfp.items[index] = item;
- _mfpTrigger('ElementParse', item);
-
- return mfp.items[index];
- },
-
-
- /**
- * Initializes single popup or a group of popups
- */
- addGroup: function(el, options) {
- var eHandler = function(e) {
- e.mfpEl = this;
- mfp._openClick(e, el, options);
- };
-
- if(!options) {
- options = {};
- }
-
- var eName = 'click.magnificPopup';
- options.mainEl = el;
-
- if(options.items) {
- options.isObj = true;
- el.off(eName).on(eName, eHandler);
- } else {
- options.isObj = false;
- if(options.delegate) {
- el.off(eName).on(eName, options.delegate , eHandler);
- } else {
- options.items = el;
- el.off(eName).on(eName, eHandler);
- }
- }
- },
- _openClick: function(e, el, options) {
- var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
-
-
- if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {
- return;
- }
-
- var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
-
- if(disableOn) {
- if($.isFunction(disableOn)) {
- if( !disableOn.call(mfp) ) {
- return true;
- }
- } else { // else it's number
- if( _window.width() < disableOn ) {
- return true;
- }
- }
- }
-
- if(e.type) {
- e.preventDefault();
-
- // This will prevent popup from closing if element is inside and popup is already opened
- if(mfp.isOpen) {
- e.stopPropagation();
- }
- }
-
- options.el = $(e.mfpEl);
- if(options.delegate) {
- options.items = el.find(options.delegate);
- }
- mfp.open(options);
- },
-
-
- /**
- * Updates text on preloader
- */
- updateStatus: function(status, text) {
-
- if(mfp.preloader) {
- if(_prevStatus !== status) {
- mfp.container.removeClass('mfp-s-'+_prevStatus);
- }
-
- if(!text && status === 'loading') {
- text = mfp.st.tLoading;
- }
-
- var data = {
- status: status,
- text: text
- };
- // allows to modify status
- _mfpTrigger('UpdateStatus', data);
-
- status = data.status;
- text = data.text;
-
- mfp.preloader.html(text);
-
- mfp.preloader.find('a').on('click', function(e) {
- e.stopImmediatePropagation();
- });
-
- mfp.container.addClass('mfp-s-'+status);
- _prevStatus = status;
- }
- },
-
-
- /*
- "Private" helpers that aren't private at all
- */
- // Check to close popup or not
- // "target" is an element that was clicked
- _checkIfClose: function(target) {
-
- if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
- return;
- }
-
- var closeOnContent = mfp.st.closeOnContentClick;
- var closeOnBg = mfp.st.closeOnBgClick;
-
- if(closeOnContent && closeOnBg) {
- return true;
- } else {
-
- // We close the popup if click is on close button or on preloader. Or if there is no content.
- if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
- return true;
- }
-
- // if click is outside the content
- if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {
- if(closeOnBg) {
- // last check, if the clicked element is in DOM, (in case it's removed onclick)
- if( $.contains(document, target) ) {
- return true;
- }
- }
- } else if(closeOnContent) {
- return true;
- }
-
- }
- return false;
- },
- _addClassToMFP: function(cName) {
- mfp.bgOverlay.addClass(cName);
- mfp.wrap.addClass(cName);
- },
- _removeClassFromMFP: function(cName) {
- this.bgOverlay.removeClass(cName);
- mfp.wrap.removeClass(cName);
- },
- _hasScrollBar: function(winHeight) {
- return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
- },
- _setFocus: function() {
- (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
- },
- _onFocusIn: function(e) {
- if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
- mfp._setFocus();
- return false;
- }
- },
- _parseMarkup: function(template, values, item) {
- var arr;
- if(item.data) {
- values = $.extend(item.data, values);
- }
- _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
-
- $.each(values, function(key, value) {
- if(value === undefined || value === false) {
- return true;
- }
- arr = key.split('_');
- if(arr.length > 1) {
- var el = template.find(EVENT_NS + '-'+arr[0]);
-
- if(el.length > 0) {
- var attr = arr[1];
- if(attr === 'replaceWith') {
- if(el[0] !== value[0]) {
- el.replaceWith(value);
- }
- } else if(attr === 'img') {
- if(el.is('img')) {
- el.attr('src', value);
- } else {
- el.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) );
- }
- } else {
- el.attr(arr[1], value);
- }
- }
-
- } else {
- template.find(EVENT_NS + '-'+key).html(value);
- }
- });
- },
-
- _getScrollbarSize: function() {
- // thx David
- if(mfp.scrollbarSize === undefined) {
- var scrollDiv = document.createElement("div");
- scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
- document.body.appendChild(scrollDiv);
- mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
- document.body.removeChild(scrollDiv);
- }
- return mfp.scrollbarSize;
- }
-
- }; /* MagnificPopup core prototype end */
-
-
-
-
- /**
- * Public static functions
- */
- $.magnificPopup = {
- instance: null,
- proto: MagnificPopup.prototype,
- modules: [],
-
- open: function(options, index) {
- _checkInstance();
-
- if(!options) {
- options = {};
- } else {
- options = $.extend(true, {}, options);
- }
-
- options.isObj = true;
- options.index = index || 0;
- return this.instance.open(options);
- },
-
- close: function() {
- return $.magnificPopup.instance && $.magnificPopup.instance.close();
- },
-
- registerModule: function(name, module) {
- if(module.options) {
- $.magnificPopup.defaults[name] = module.options;
- }
- $.extend(this.proto, module.proto);
- this.modules.push(name);
- },
-
- defaults: {
-
- // Info about options is in docs:
- // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
-
- disableOn: 0,
-
- key: null,
-
- midClick: false,
-
- mainClass: '',
-
- preloader: true,
-
- focus: '', // CSS selector of input to focus after popup is opened
-
- closeOnContentClick: false,
-
- closeOnBgClick: true,
-
- closeBtnInside: true,
-
- showCloseBtn: true,
-
- enableEscapeKey: true,
-
- modal: false,
-
- alignTop: false,
-
- removalDelay: 0,
-
- prependTo: null,
-
- fixedContentPos: 'auto',
-
- fixedBgPos: 'auto',
-
- overflowY: 'auto',
-
- closeMarkup: '',
-
- tClose: 'Close (Esc)',
-
- tLoading: 'Loading...',
-
- autoFocusLast: true
-
- }
- };
-
-
-
- $.fn.magnificPopup = function(options) {
- _checkInstance();
-
- var jqEl = $(this);
-
- // We call some API method of first param is a string
- if (typeof options === "string" ) {
-
- if(options === 'open') {
- var items,
- itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
- index = parseInt(arguments[1], 10) || 0;
-
- if(itemOpts.items) {
- items = itemOpts.items[index];
- } else {
- items = jqEl;
- if(itemOpts.delegate) {
- items = items.find(itemOpts.delegate);
- }
- items = items.eq( index );
- }
- mfp._openClick({mfpEl:items}, jqEl, itemOpts);
- } else {
- if(mfp.isOpen)
- mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
- }
-
- } else {
- // clone options obj
- options = $.extend(true, {}, options);
-
- /*
- * As Zepto doesn't support .data() method for objects
- * and it works only in normal browsers
- * we assign "options" object directly to the DOM element. FTW!
- */
- if(_isJQ) {
- jqEl.data('magnificPopup', options);
- } else {
- jqEl[0].magnificPopup = options;
- }
-
- mfp.addGroup(jqEl, options);
-
- }
- return jqEl;
- };
-
- /*>>core*/
-
- /*>>inline*/
-
- var INLINE_NS = 'inline',
- _hiddenClass,
- _inlinePlaceholder,
- _lastInlineElement,
- _putInlineElementsBack = function() {
- if(_lastInlineElement) {
- _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
- _lastInlineElement = null;
- }
- };
-
- $.magnificPopup.registerModule(INLINE_NS, {
- options: {
- hiddenClass: 'hide', // will be appended with `mfp-` prefix
- markup: '',
- tNotFound: 'Content not found'
- },
- proto: {
-
- initInline: function() {
- mfp.types.push(INLINE_NS);
-
- _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
- _putInlineElementsBack();
- });
- },
-
- getInline: function(item, template) {
-
- _putInlineElementsBack();
-
- if(item.src) {
- var inlineSt = mfp.st.inline,
- el = $(item.src);
-
- if(el.length) {
-
- // If target element has parent - we replace it with placeholder and put it back after popup is closed
- var parent = el[0].parentNode;
- if(parent && parent.tagName) {
- if(!_inlinePlaceholder) {
- _hiddenClass = inlineSt.hiddenClass;
- _inlinePlaceholder = _getEl(_hiddenClass);
- _hiddenClass = 'mfp-'+_hiddenClass;
- }
- // replace target inline element with placeholder
- _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
- }
-
- mfp.updateStatus('ready');
- } else {
- mfp.updateStatus('error', inlineSt.tNotFound);
- el = $('