├── .gitignore
├── _docs
├── _defaults.md
├── devices
│ ├── ios.md
│ └── android.md
├── media
│ ├── video.md
│ ├── documents.md
│ └── images.md
└── contact-syncing
│ ├── facebook.md
│ └── phone.md
├── siteicon.png
├── touch-icon.png
├── images
├── favicon.png
├── _screenshot.png
├── menu.svg
└── emblem.svg
├── apple-touch-icon.png
├── 404.md
├── robots.txt
├── _posts
├── _defaults.md
├── 2016-01-12-media-support.md
└── 2016-02-05-general-fixes-and-improvements.md
├── Gemfile
├── _plugins
└── replace-regex.rb
├── _sass
├── _tables.scss
├── _mixins.scss
├── _code.scss
├── _pygments.scss
├── _typography.scss
├── _layout.scss
└── _normalize.scss
├── changelog.html
├── css
└── main.scss
├── search.html
├── LICENSE
├── index.md
├── _config.yml
├── Gemfile.lock
├── README.md
├── _layouts
└── default.html
└── scripts
├── search.js
└── lunr.min.js
/.gitignore:
--------------------------------------------------------------------------------
1 | _site/
2 | .sass-cache/
3 | .jekyll-metadata
--------------------------------------------------------------------------------
/_docs/_defaults.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:
3 | category:
4 | order: 1
5 | ---
6 |
--------------------------------------------------------------------------------
/siteicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Welding-Torch/tsec/HEAD/siteicon.png
--------------------------------------------------------------------------------
/touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Welding-Torch/tsec/HEAD/touch-icon.png
--------------------------------------------------------------------------------
/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Welding-Torch/tsec/HEAD/images/favicon.png
--------------------------------------------------------------------------------
/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Welding-Torch/tsec/HEAD/apple-touch-icon.png
--------------------------------------------------------------------------------
/images/_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Welding-Torch/tsec/HEAD/images/_screenshot.png
--------------------------------------------------------------------------------
/404.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Not Found
3 | permalink: /404.html
4 | sitemap: false
5 | ---
6 |
7 | This page doesn't exist!
8 |
--------------------------------------------------------------------------------
/robots.txt:
--------------------------------------------------------------------------------
1 | ---
2 | layout: null
3 | sitemap: false
4 | ---
5 | User-agent: *
6 | Sitemap: {{ site.url }}/sitemap.xml
7 | Disallow: /search/
--------------------------------------------------------------------------------
/_posts/_defaults.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:
3 | type: major
4 | ---
5 |
6 | This release introduces
7 |
8 | **Features:**
9 |
10 | *
11 |
12 | **Fixes:**
13 |
14 | *
15 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | gem 'jekyll', '3.8.4'
4 |
5 | group :jekyll_plugins do
6 | gem 'jekyll-feed', '0.11.0'
7 | gem 'jekyll-seo-tag', '2.5.0'
8 | gem 'jekyll-sitemap', '1.2.0'
9 | end
10 |
--------------------------------------------------------------------------------
/images/menu.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/emblem.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_plugins/replace-regex.rb:
--------------------------------------------------------------------------------
1 | module Jekyll
2 | module RegexFilter
3 | def replace_regex(input, regex_string, replace_string)
4 | regex = Regexp.new regex_string
5 | input.gsub regex, replace_string
6 | end
7 | end
8 | end
9 |
10 | Liquid::Template.register_filter(Jekyll::RegexFilter)
11 |
--------------------------------------------------------------------------------
/_sass/_tables.scss:
--------------------------------------------------------------------------------
1 | table {
2 | width: 100%;
3 | margin-bottom: 1.75em;
4 | }
5 |
6 | tr {
7 | border-bottom: 1px solid #EEE;
8 | }
9 |
10 | tr:nth-child(even) {
11 | background: #fcfcfc;
12 | }
13 |
14 | td, th {
15 | padding: 8px;
16 | text-align: left;
17 | }
18 |
19 | th {
20 | padding-bottom: 4px;
21 | }
22 |
--------------------------------------------------------------------------------
/_docs/devices/ios.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: iOS
3 | category: Devices
4 | order: 1
5 | ---
6 |
7 | Use ChatApp on most of your Apple devices. Only the latest versions are supported.
8 |
9 | To install ChatApp on your device:
10 |
11 | 1. Open the App Store
12 | 2. Search for ChatApp
13 | 3. Select **Install**
14 |
15 | 
16 |
--------------------------------------------------------------------------------
/_docs/devices/android.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Android
3 | category: Devices
4 | order: 2
5 | ---
6 |
7 | Use ChatApp on all of your Android devices. Every version is supported.
8 |
9 | To install ChatApp on your device:
10 |
11 | 1. Open the Google Play Store
12 | 2. Search for ChatApp
13 | 3. Select **Install**
14 |
15 | 
16 |
--------------------------------------------------------------------------------
/_posts/2016-01-12-media-support.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Media support
3 | type: major
4 | ---
5 |
6 | ChatApp introduces media support! Send images, videos and documents to your contacts.
7 |
8 | **Features:**
9 |
10 | * Image support
11 | * Video support
12 | * Document support
13 |
14 | **Fixes:**
15 |
16 | * Edge case contact syncing issue
17 | * All memory leaks obliterated
18 |
--------------------------------------------------------------------------------
/_docs/media/video.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Video
3 | category: Media
4 | order: 2
5 | ---
6 |
7 | Share video to your friends! Send videos from your computer, phone, camera or YouTube.
8 |
9 | To share a video:
10 |
11 | 1. Open a message with someone
12 | 2. Select the **Send Media** button
13 | 3. Pick a video or paste a YouTube link
14 |
15 | > Videos can use up a lot of bandwidth so be aware of your mobile data.
16 |
17 | 
18 |
--------------------------------------------------------------------------------
/_posts/2016-02-05-general-fixes-and-improvements.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: General fixes and improvements
3 | type: minor
4 | ---
5 |
6 | This release fixes a few minor issues reported by users. We've also made a few quality of life improvements.
7 |
8 | **Features:**
9 |
10 | * Streamlined access to contact details
11 | * Better sort order for archived messages
12 |
13 | **Fixes:**
14 |
15 | * Input sometimes getting stuck
16 | * One more memory leak obliterated
17 |
--------------------------------------------------------------------------------
/_docs/media/documents.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Documents
3 | category: Media
4 | order: 3
5 | ---
6 |
7 | Share documents with your friends! Send work or school projects from your computer or phone.
8 |
9 | To share a document:
10 |
11 | 1. Open a message with someone
12 | 2. Select the **Send Media** button
13 | 3. Pick a document
14 |
15 | > Changes made to documents after sending are not saved back, you'll have to get contacts to send you updated versions.
16 |
17 | 
18 |
--------------------------------------------------------------------------------
/_docs/contact-syncing/facebook.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Facebook
3 | category: Contact Syncing
4 | order: 1
5 | ---
6 |
7 | Sync your Facebook contacts with ChatApp. Any of your Facebook friends with ChatApp accounts are automatically added to your contact list!
8 |
9 | > Signing up with Facebook automatically starts syncing contacts.
10 |
11 | To sync your contacts:
12 |
13 | 1. Open your *User Settings*
14 | 2. Select the **Connect Facebook** button
15 | 3. Authorise ChatApp
16 |
17 | 
--------------------------------------------------------------------------------
/_docs/media/images.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Images
3 | category: Media
4 | order: 1
5 | ---
6 |
7 | Share images with your friends! Send photos and pictures from your computer, phone or camera.
8 |
9 | > Images are stored until you choose to remove them.
10 |
11 | To share an image:
12 |
13 | 1. Open a message with someone
14 | 2. Select the **Send Media** button
15 | 3. Pick an image
16 |
17 | 
18 |
19 | Supported types:
20 |
21 | * JPEG
22 | * PNG
23 | * BMP
24 | * GIF
25 |
26 | Unsupported types:
27 |
28 | * SVG
29 | * WEBP
30 |
--------------------------------------------------------------------------------
/_docs/contact-syncing/phone.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Phone
3 | category: Contact Syncing
4 | order: 2
5 | ---
6 |
7 | Sync your phone contacts with ChatApp. ChatApp saves your phone contacts and adds anyone with an email address to your contact list!
8 |
9 | > Syncing contacts with your phone restores any previously synced contacts.
10 |
11 | To sync your contacts:
12 |
13 | 1. Open your *User Settings* on your phone app
14 | 2. Select the **Sync Contacts** button
15 | 3. Authorise ChatApp permissions
16 | 4. Select some or all of your contacts
17 |
18 | 
19 |
--------------------------------------------------------------------------------
/_sass/_mixins.scss:
--------------------------------------------------------------------------------
1 | @mixin flex-direction($values) {
2 | -webkit-flex-direction: $values;
3 | flex-direction: $values;
4 | }
5 |
6 | @mixin flex-flow($values) {
7 | -webkit-flex-flow: $values;
8 | flex-flow: $values;
9 | }
10 |
11 | @mixin align-items($values) {
12 | -webkit-align-items: $values;
13 | align-items: $values;
14 | }
15 |
16 | @mixin justify-content($values) {
17 | -webkit-justify-content: $values;
18 | justify-content: $values;
19 | }
20 |
21 | @mixin flex($values) {
22 | -webkit-flex: $values;
23 | flex: $values;
24 | }
25 |
26 | @mixin display-flex() {
27 | display: -webkit-flex;
28 | display: flex;
29 | }
30 |
31 | @mixin display-inline-flex() {
32 | display: -webkit-inline-flex;
33 | display: inline-flex;
34 | }
35 |
--------------------------------------------------------------------------------
/changelog.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Change Log
3 | ---
4 |
5 |
Subscribe with RSS to keep up with the latest changes.
6 |
7 | ✎ Update Change Log
8 |
9 |
10 | {% for change in site.posts %}
11 |
12 |
{{ change.title }}
13 |
{{ change.date | date: "%B %d, %Y" }} {{ change.type }}
14 |
15 | {{ change.content }}
16 |
17 |
✎ Update Entry
18 |
19 | {% endfor %}
20 |
21 |
--------------------------------------------------------------------------------
/css/main.scss:
--------------------------------------------------------------------------------
1 | ---
2 | layout: null
3 | sitemap: false
4 | ---
5 |
6 | $baseurl: "{{ site.baseurl }}";
7 | $body-background-color: #2B2E31;
8 |
9 | $content-max-width: 800px;
10 | $content-color: #222;
11 | $content-background-color: #fff;
12 |
13 | $brand-colour: #3583d6;
14 | $brand-colour-light: mix($brand-colour, $content-background-color, 10%);
15 |
16 | $nav-header-background-color: $brand-colour;
17 | $nav-header-height: 60px;
18 | $nav-background-color: #f5f5f5;
19 | $nav-width: 300px;
20 |
21 | $space: 20px;
22 |
23 | $mobile-break: 700px;
24 | $full-width-break: $nav-width + ($space * 4) + $content-max-width;
25 |
26 | @import "mixins";
27 | @import "normalize";
28 | @import "pygments";
29 | @import "typography";
30 | @import "code";
31 | @import "tables";
32 | @import "layout";
33 |
--------------------------------------------------------------------------------
/_sass/_code.scss:
--------------------------------------------------------------------------------
1 | pre, code, tt {
2 | font-family: Inconsolata, Consolas, Courier, "Courier New", "Liberation Mono", monospace;
3 | font-size: 0.85em;
4 | white-space: pre-wrap;
5 | border-radius: 2px;
6 | line-height: 1.4;
7 | font-weight: 400;
8 | background-color: #404145;
9 | color: #FAFAFA;
10 | border-radius: 2px;
11 | }
12 |
13 | pre {
14 | box-sizing: border-box;
15 | margin: 0 0 1.75em 0;
16 | width: 100%;
17 | padding: 10px;
18 | font-size: 0.9em;
19 | white-space: pre;
20 | overflow: auto;
21 | border-radius: 3px;
22 |
23 | code, tt {
24 | font-size: inherit;
25 | white-space: pre-wrap;
26 | background: transparent;
27 | border: none;
28 | padding: 0
29 | }
30 | }
31 |
32 | blockquote > code,
33 | li > code,
34 | p > code {
35 | padding: 4px 6px;
36 | white-space: nowrap;
37 | }
38 |
--------------------------------------------------------------------------------
/search.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Search
3 | sitemap: false
4 | ---
5 |
6 | Loading results for ""
7 |
8 |
9 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 CloudCannon
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Welcome
3 | ---
4 |
5 | This is the **Edition** template from [CloudCannon](http://cloudcannon.com/).
6 | **Edition** is perfect for documenting your product, application or service.
7 | It's populated with example content to give you some ideas.
8 |
9 | ChatApp is a fictional chat application for sending messages and media to others.
10 | Teams and friend groups would use ChatApp to stay up to date if it existed.
11 |
12 | > [Sign up](http://example.com/signup) or learn more about ChatApp at [example.com](http://example.com/).
13 |
14 | ### Getting Started
15 |
16 | Getting a message sent is quick and easy with ChatApp:
17 |
18 | 1. Sign up for an account
19 | 2. Add your friends from their email addresses
20 | 3. Type a message or send a photo
21 |
22 | > Feel free to send us a message at [feedback@example.com](mailto:feedback@example.com) with your feedback.
23 |
24 | ### Features
25 |
26 | Explore more of ChatApp by reading about our features:
27 |
28 | #### Media
29 |
30 | Send images, videos and other media to people. Sources include your computer, phone and Facebook.
31 |
32 | #### Contact Syncing
33 |
34 | Sync your contact list with your phone and/or Facebook contacts. Never lose your contacts between devices again!
35 |
36 | #### Devices
37 |
38 | ChatApp is available everywhere. Find out how to set it up on your all your devices.
39 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | # ----
2 | # Site
3 |
4 | title: TSEC Geeks website
5 | url: "https://welding-torch/tsec.github.io"
6 | baseurl:
7 | google_analytics_key:
8 | show_full_navigation: true
9 |
10 | # Values for the jekyll-seo-tag gem (https://github.com/jekyll/jekyll-seo-tag)
11 | logo: /siteicon.png
12 | description: A website for TSEC Geeks
13 | author:
14 | name:
15 | email:
16 | twitter: # twitter username without the @ symbol
17 | social:
18 | name: TSEC Geeks social
19 | links:
20 | - https://github.com/Welding-Torch
21 |
22 | # -----
23 | # Build
24 |
25 | timezone: IST
26 |
27 | permalink: pretty
28 |
29 | plugins:
30 | - jekyll-sitemap
31 | - jekyll-seo-tag
32 | - jekyll-feed
33 |
34 | exclude:
35 | - Gemfile
36 | - Gemfile.lock
37 | - README.md
38 | - LICENCE
39 |
40 | collections:
41 | docs:
42 | title: Documentation
43 | permalink: /:path/
44 | output: true
45 |
46 | defaults:
47 | -
48 | scope:
49 | path: ""
50 | values:
51 | layout: default
52 | -
53 | scope:
54 | path: ""
55 | type: "docs"
56 | values:
57 | seo:
58 | type: Article
59 | _comments:
60 | category: Group navigation links with this field
61 | order: Used to sort links in the navigation
62 | _options:
63 | content:
64 | width: 800
65 | height: 2000
66 | -
67 | scope:
68 | path: ""
69 | type: "posts"
70 | values:
71 | _comments:
72 | type: Marks the impact of this release
73 |
74 | # -----------
75 | # CloudCannon
76 |
77 | types:
78 | - minor
79 | - major
80 |
81 | theme: jekyll-theme-cayman
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | addressable (2.5.2)
5 | public_suffix (>= 2.0.2, < 4.0)
6 | colorator (1.1.0)
7 | concurrent-ruby (1.0.5)
8 | em-websocket (0.5.1)
9 | eventmachine (>= 0.12.9)
10 | http_parser.rb (~> 0.6.0)
11 | eventmachine (1.2.7)
12 | ffi (1.9.25)
13 | forwardable-extended (2.6.0)
14 | http_parser.rb (0.6.0)
15 | i18n (0.9.5)
16 | concurrent-ruby (~> 1.0)
17 | jekyll (3.8.4)
18 | addressable (~> 2.4)
19 | colorator (~> 1.0)
20 | em-websocket (~> 0.5)
21 | i18n (~> 0.7)
22 | jekyll-sass-converter (~> 1.0)
23 | jekyll-watch (~> 2.0)
24 | kramdown (~> 1.14)
25 | liquid (~> 4.0)
26 | mercenary (~> 0.3.3)
27 | pathutil (~> 0.9)
28 | rouge (>= 1.7, < 4)
29 | safe_yaml (~> 1.0)
30 | jekyll-feed (0.11.0)
31 | jekyll (~> 3.3)
32 | jekyll-sass-converter (1.5.2)
33 | sass (~> 3.4)
34 | jekyll-seo-tag (2.5.0)
35 | jekyll (~> 3.3)
36 | jekyll-sitemap (1.2.0)
37 | jekyll (~> 3.3)
38 | jekyll-watch (2.0.0)
39 | listen (~> 3.0)
40 | kramdown (1.17.0)
41 | liquid (4.0.0)
42 | listen (3.1.5)
43 | rb-fsevent (~> 0.9, >= 0.9.4)
44 | rb-inotify (~> 0.9, >= 0.9.7)
45 | ruby_dep (~> 1.2)
46 | mercenary (0.3.6)
47 | pathutil (0.16.1)
48 | forwardable-extended (~> 2.6)
49 | public_suffix (3.0.3)
50 | rb-fsevent (0.10.3)
51 | rb-inotify (0.9.10)
52 | ffi (>= 0.5.0, < 2)
53 | rouge (3.3.0)
54 | ruby_dep (1.5.0)
55 | safe_yaml (1.0.4)
56 | sass (3.6.0)
57 | sass-listen (~> 4.0.0)
58 | sass-listen (4.0.0)
59 | rb-fsevent (~> 0.9, >= 0.9.4)
60 | rb-inotify (~> 0.9, >= 0.9.7)
61 |
62 | PLATFORMS
63 | ruby
64 |
65 | DEPENDENCIES
66 | jekyll (= 3.8.4)
67 | jekyll-feed (= 0.11.0)
68 | jekyll-seo-tag (= 2.5.0)
69 | jekyll-sitemap (= 1.2.0)
70 |
71 | BUNDLED WITH
72 | 1.16.4
73 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Edition
2 |
3 | Product documentation template for Jekyll. Browse through a [live demo](https://long-pig.cloudvent.net/).
4 | Start documenting your product, application, service or website with this configurable theme.
5 |
6 | 
7 |
8 | Edition was made by [CloudCannon](http://cloudcannon.com/), the Cloud CMS for Jekyll.
9 |
10 | Find more templates, themes and step-by-step Jekyll tutorials at [CloudCannon Academy](https://learn.cloudcannon.com/).
11 |
12 | [](https://app.cloudcannon.com/register#sites/connect/github/CloudCannon/edition-jekyll-template)
13 |
14 | ## Features
15 |
16 | * Two column layout
17 | * Full text search
18 | * Pre-styled components
19 | * Auto-generated navigation based on category
20 | * Optimised for editing in [CloudCannon](http://cloudcannon.com/)
21 | * Change log
22 | * RSS/Atom feed
23 | * SEO tags
24 | * Google Analytics
25 |
26 | ## Setup
27 |
28 | 1. Add your site and author details in `_config.yml`.
29 | 2. Get a workflow going to see your site's output (with [CloudCannon](https://app.cloudcannon.com/) or Jekyll locally).
30 |
31 | ## Develop
32 |
33 | Edition was built with [Jekyll](http://jekyllrb.com/) version 3.3.1, but should support newer versions as well.
34 |
35 | Install the dependencies with [Bundler](http://bundler.io/):
36 |
37 | ~~~bash
38 | $ bundle install
39 | ~~~
40 |
41 | Run `jekyll` commands through Bundler to ensure you're using the right versions:
42 |
43 | ~~~bash
44 | $ bundle exec jekyll serve
45 | ~~~
46 |
47 | ## Editing
48 |
49 | Edition is already optimised for adding, updating and removing documentation pages in CloudCannon.
50 |
51 | ### Documentation pages
52 |
53 | * Add, update or remove a documentation page in the *Documentation* collection.
54 | * Change the category of a documentation page to move it to another section in the navigation.
55 | * Documentation pages are organised in the navigation by category, with URLs based on the path inside the `_docs` folder.
56 |
57 | ### Change log
58 |
59 | * Add, update or remove change log entries from your posts.
60 | * Tag entries as minor or major in the front matter.
61 |
62 | ### Search
63 |
64 | * Add `excluded_in_search: true` to any documentation page's front matter to exclude that page in the search results.
65 |
66 | ### Navigation
67 |
68 | * Change `site.show_full_navigation` to control all or only the current navigation group being open.
69 |
--------------------------------------------------------------------------------
/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {% seo %}
9 | {% feed_meta %}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | {% if jekyll.environment == 'production' and site.google_analytics_key != '' %}
18 |
23 |
24 | {% endif %}
25 |
26 |
27 |
28 |
29 |
30 |
31 | {{ site.title }}
32 |
33 |
34 |
35 |
39 |
40 |
70 |
71 |
72 |
73 |
77 |
78 | {{ content }}
79 |
80 |
81 |
82 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/scripts/search.js:
--------------------------------------------------------------------------------
1 | ---
2 | layout: null
3 | ---
4 | (function () {
5 | function getQueryVariable(variable) {
6 | var query = window.location.search.substring(1),
7 | vars = query.split("&");
8 |
9 | for (var i = 0; i < vars.length; i++) {
10 | var pair = vars[i].split("=");
11 |
12 | if (pair[0] === variable) {
13 | return decodeURIComponent(pair[1].replace(/\+/g, '%20')).trim();
14 | }
15 | }
16 | }
17 |
18 | function getPreview(query, content, previewLength) {
19 | previewLength = previewLength || (content.length * 2);
20 |
21 | var parts = query.split(" "),
22 | match = content.toLowerCase().indexOf(query.toLowerCase()),
23 | matchLength = query.length,
24 | preview;
25 |
26 | // Find a relevant location in content
27 | for (var i = 0; i < parts.length; i++) {
28 | if (match >= 0) {
29 | break;
30 | }
31 |
32 | match = content.toLowerCase().indexOf(parts[i].toLowerCase());
33 | matchLength = parts[i].length;
34 | }
35 |
36 | // Create preview
37 | if (match >= 0) {
38 | var start = match - (previewLength / 2),
39 | end = start > 0 ? match + matchLength + (previewLength / 2) : previewLength;
40 |
41 | preview = content.substring(start, end).trim();
42 |
43 | if (start > 0) {
44 | preview = "..." + preview;
45 | }
46 |
47 | if (end < content.length) {
48 | preview = preview + "...";
49 | }
50 |
51 | // Highlight query parts
52 | preview = preview.replace(new RegExp("(" + parts.join("|") + ")", "gi"), "$1");
53 | } else {
54 | // Use start of content if no match found
55 | preview = content.substring(0, previewLength).trim() + (content.length > previewLength ? "..." : "");
56 | }
57 |
58 | return preview;
59 | }
60 |
61 | function displaySearchResults(results, query) {
62 | var searchResultsEl = document.getElementById("search-results"),
63 | searchProcessEl = document.getElementById("search-process");
64 |
65 | if (results.length) {
66 | var resultsHTML = "";
67 | results.forEach(function (result) {
68 | var item = window.data[result.ref],
69 | contentPreview = getPreview(query, item.content, 170),
70 | titlePreview = getPreview(query, item.title);
71 |
72 | resultsHTML += "" + contentPreview + "
";
73 | });
74 |
75 | searchResultsEl.innerHTML = resultsHTML;
76 | searchProcessEl.innerText = "Showing";
77 | } else {
78 | searchResultsEl.style.display = "none";
79 | searchProcessEl.innerText = "No";
80 | }
81 | }
82 |
83 | window.index = lunr(function () {
84 | this.field("id");
85 | this.field("title", {boost: 10});
86 | this.field("category");
87 | this.field("url");
88 | this.field("content");
89 | });
90 |
91 | var query = decodeURIComponent((getQueryVariable("q") || "").replace(/\+/g, "%20")),
92 | searchQueryContainerEl = document.getElementById("search-query-container"),
93 | searchQueryEl = document.getElementById("search-query"),
94 | searchInputEl = document.getElementById("search-input");
95 |
96 | searchInputEl.value = query;
97 | searchQueryEl.innerText = query;
98 | searchQueryContainerEl.style.display = "inline";
99 |
100 | for (var key in window.data) {
101 | window.index.add(window.data[key]);
102 | }
103 |
104 | displaySearchResults(window.index.search(query), query); // Hand the results off to be displayed
105 | })();
--------------------------------------------------------------------------------
/_sass/_pygments.scss:
--------------------------------------------------------------------------------
1 | .highlight {
2 | .hll { background-color: #ffffcc }
3 | .c { color: #87ceeb} /* Comment */
4 | .err { color: #ffffff} /* Error */
5 | .g { color: #ffffff} /* Generic */
6 | .k { color: #f0e68c} /* Keyword */
7 | .l { color: #ffffff} /* Literal */
8 | .n { color: #ffffff} /* Name */
9 | .o { color: #ffffff} /* Operator */
10 | .x { color: #ffffff} /* Other */
11 | .p { color: #ffffff} /* Punctuation */
12 | .cm { color: #87ceeb} /* Comment.Multiline */
13 | .cp { color: #cd5c5c} /* Comment.Preproc */
14 | .c1 { color: #87ceeb} /* Comment.Single */
15 | .cs { color: #87ceeb} /* Comment.Special */
16 | .gd { color: #0000c0; font-weight: bold; background-color: #008080 } /* Generic.Deleted */
17 | .ge { color: #c000c0; text-decoration: underline} /* Generic.Emph */
18 | .gr { color: #c0c0c0; font-weight: bold; background-color: #c00000 } /* Generic.Error */
19 | .gh { color: #cd5c5c} /* Generic.Heading */
20 | .gi { color: #ffffff; background-color: #0000c0 } /* Generic.Inserted */
21 | span.go { color: #add8e6; font-weight: bold; background-color: #4d4d4d } /* Generic.Output, qualified with span to prevent applying this style to the Go language, see #1153. */
22 | .gp { color: #ffffff} /* Generic.Prompt */
23 | .gs { color: #ffffff} /* Generic.Strong */
24 | .gu { color: #cd5c5c} /* Generic.Subheading */
25 | .gt { color: #c0c0c0; font-weight: bold; background-color: #c00000 } /* Generic.Traceback */
26 | .kc { color: #f0e68c} /* Keyword.Constant */
27 | .kd { color: #f0e68c} /* Keyword.Declaration */
28 | .kn { color: #f0e68c} /* Keyword.Namespace */
29 | .kp { color: #f0e68c} /* Keyword.Pseudo */
30 | .kr { color: #f0e68c} /* Keyword.Reserved */
31 | .kt { color: #bdb76b} /* Keyword.Type */
32 | .ld { color: #ffffff} /* Literal.Date */
33 | .m { color: #EAB289} /* Literal.Number */
34 | .s { color: #EAB289} /* Literal.String */
35 | .na { color: #8CF0E8} /* Name.Attribute */
36 | .nb { color: #ffffff} /* Name.Builtin */
37 | .nc { color: #ffffff} /* Name.Class */
38 | .no { color: #ffa0a0} /* Name.Constant */
39 | .nd { color: #ffffff} /* Name.Decorator */
40 | .ni { color: #ffdead} /* Name.Entity */
41 | .ne { color: #ffffff} /* Name.Exception */
42 | .nf { color: #ffffff} /* Name.Function */
43 | .nl { color: #ffffff} /* Name.Label */
44 | .nn { color: #ffffff} /* Name.Namespace */
45 | .nx { color: #ffffff} /* Name.Other */
46 | .py { color: #ffffff} /* Name.Property */
47 | .nt { color: #f0e68c} /* Name.Tag */
48 | .nv { color: #98fb98} /* Name.Variable */
49 | .ow { color: #ffffff} /* Operator.Word */
50 | .w { color: #ffffff} /* Text.Whitespace */
51 | .mf { color: #ffffff} /* Literal.Number.Float */
52 | .mh { color: #ffffff} /* Literal.Number.Hex */
53 | .mi { color: #ffffff} /* Literal.Number.Integer */
54 | .mo { color: #ffffff} /* Literal.Number.Oct */
55 | .sb { color: #ffffff} /* Literal.String.Backtick */
56 | .sc { color: #ffffff} /* Literal.String.Char */
57 | .sd { color: #ffffff} /* Literal.String.Doc */
58 | .s2 { color: #ffffff} /* Literal.String.Double */
59 | .se { color: #ffffff} /* Literal.String.Escape */
60 | .sh { color: #ffffff} /* Literal.String.Heredoc */
61 | .si { color: #ffffff} /* Literal.String.Interpol */
62 | .sx { color: #ffffff} /* Literal.String.Other */
63 | .sr { color: #ffffff} /* Literal.String.Regex */
64 | .s1 { color: #ffffff} /* Literal.String.Single */
65 | .ss { color: #ffffff} /* Literal.String.Symbol */
66 | .bp { color: #ffffff} /* Name.Builtin.Pseudo */
67 | .vc { color: #98fb98} /* Name.Variable.Class */
68 | .vg { color: #98fb98} /* Name.Variable.Global */
69 | .vi { color: #98fb98} /* Name.Variable.Instance */
70 | .il { color: #ffffff} /* Literal.Number.Integer.Long */
71 | .bash .nv {
72 | -webkit-user-select: none;
73 | -moz-user-select: none;
74 | -ms-user-select: none;
75 | -o-user-select: none;
76 | user-select: none;
77 | }
78 | .language-bash & .nb {
79 | color: #99D4FF;
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/_sass/_typography.scss:
--------------------------------------------------------------------------------
1 | html {
2 | height: 100%;
3 | max-height: 100%;
4 | font-size: 10px;
5 | -webkit-tap-highlight-color: transparent;
6 | }
7 |
8 | body {
9 | height: 100%;
10 | max-height: 100%;
11 | font-family: "Merriweather", serif;
12 | letter-spacing: 0.01rem;
13 | font-size: 1.8em;
14 | line-height: 1.75em;
15 | color: #3A4145;
16 | font-weight: 400;
17 | -webkit-font-feature-settings: 'kern' 1;
18 | -moz-font-feature-settings: 'kern' 1;
19 | -o-font-feature-settings: 'kern' 1;
20 | text-rendering: geometricPrecision;
21 | }
22 |
23 | h1,
24 | h2,
25 | h3,
26 | h4,
27 | h5,
28 | h6,
29 | input,
30 | label,
31 | select,
32 | textarea,
33 | table {
34 | -webkit-font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1;
35 | -moz-font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1;
36 | -o-font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1;
37 | font-family: "Open Sans", sans-serif;
38 | text-rendering: geometricPrecision;
39 | }
40 |
41 | h1,
42 | h2,
43 | h3,
44 | h4,
45 | h5,
46 | h6 {
47 | color: #2E2E2E;
48 | line-height: 1.15em;
49 | margin: 0 0 0.4em 0;
50 | font-weight: 600;
51 | }
52 |
53 | h1 {
54 | font-size: 5rem;
55 | letter-spacing: -2px;
56 | text-indent: -3px;
57 | }
58 |
59 | h2 {
60 | font-size: 3.6rem;
61 | letter-spacing: -1px;
62 | }
63 |
64 | h3 {
65 | font-size: 3rem;
66 | }
67 |
68 | h4 {
69 | font-size: 2.3rem;
70 | }
71 |
72 | h5 {
73 | font-size: 2rem;
74 | }
75 |
76 | h6 {
77 | font-size: 2rem;
78 | }
79 |
80 | a {
81 | color: #4A4A4A;
82 | transition: color 0.2s ease;
83 | }
84 |
85 | a:hover {
86 | color: #111;
87 | }
88 |
89 | p,
90 | ul,
91 | ol,
92 | dl,
93 | figure {
94 | -webkit-font-feature-settings: 'liga' 1, 'onum' 1, 'kern' 1;
95 | -moz-font-feature-settings: 'liga' 1, 'onum' 1, 'kern' 1;
96 | -o-font-feature-settings: 'liga' 1, 'onum' 1, 'kern' 1;
97 | margin: 0 0 1.75em 0;
98 | text-rendering: geometricPrecision;
99 | }
100 |
101 | ol,
102 | ul {
103 | padding-left: 3rem;
104 | }
105 |
106 | ol ol,
107 | ul ul,
108 | ul ol,
109 | ol ul {
110 | margin: 0 0 0.4em 0;
111 | padding-left: 2em;
112 | }
113 |
114 | dl dt {
115 | float: left;
116 | width: 180px;
117 | overflow: hidden;
118 | clear: left;
119 | text-align: right;
120 | text-overflow: ellipsis;
121 | white-space: nowrap;
122 | font-weight: 700;
123 | margin-bottom: 1em;
124 | }
125 |
126 | dl dd {
127 | margin-left: 200px;
128 | margin-bottom: 1em;
129 | }
130 |
131 | li {
132 | margin: 0.4em 0;
133 | }
134 |
135 | li li {
136 | margin: 0;
137 | }
138 |
139 | hr {
140 | display: block;
141 | height: 1px;
142 | border: 0;
143 | border-top: #eee 1px solid;
144 | margin: 3.2em 0;
145 | padding: 0;
146 | }
147 |
148 | mark {
149 | background-color: #fdffb6
150 | }
151 |
152 | kbd {
153 | display: inline-block;
154 | margin-bottom: 0.4em;
155 | padding: 1px 8px;
156 | border: #CCC 1px solid;
157 | color: #666;
158 | text-shadow: #FFF 0 1px 0;
159 | font-size: 0.9em;
160 | font-weight: 700;
161 | background: #F4F4F4;
162 | border-radius: 4px;
163 | box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 1px 0 0 #fff inset;
164 | }
165 |
166 | @media only screen and (max-width: 900px) {
167 | blockquote {
168 | margin-left: 0;
169 | }
170 |
171 | hr {
172 | margin: 2.4em 0;
173 | }
174 |
175 | ol,
176 | ul {
177 | padding-left: 2em;
178 | }
179 |
180 | h1 {
181 | font-size: 4.5rem;
182 | text-indent: -2px;
183 | }
184 |
185 | h2 {
186 | font-size: 3.6rem;
187 | }
188 |
189 | h3 {
190 | font-size: 3.1rem;
191 | }
192 |
193 | h4 {
194 | font-size: 2.5rem;
195 | }
196 |
197 | h5 {
198 | font-size: 2.2rem;
199 | }
200 |
201 | h6 {
202 | font-size: 1.8rem;
203 | }
204 | }
205 |
206 | @media only screen and (max-width: 500px) {
207 | hr {
208 | margin: 1.75em 0;
209 | }
210 |
211 | p,
212 | ul,
213 | ol,
214 | dl {
215 | font-size: 0.95em;
216 | margin: 0 0 2.5rem 0;
217 | }
218 |
219 | h1,
220 | h2,
221 | h3,
222 | h4,
223 | h5,
224 | h6 {
225 | margin: 0 0 0.3em 0;
226 | }
227 |
228 | h1 {
229 | font-size: 2.8rem;
230 | letter-spacing: -1px;
231 | }
232 |
233 | h2 {
234 | font-size: 2.4rem;
235 | letter-spacing: 0;
236 | }
237 |
238 | h3 {
239 | font-size: 2.1rem;
240 | }
241 |
242 | h4 {
243 | font-size: 1.9rem;
244 | }
245 |
246 | h5 {
247 | font-size: 1.8rem;
248 | }
249 |
250 | h6 {
251 | font-size: 1.8rem;
252 | }
253 | }
254 |
--------------------------------------------------------------------------------
/_sass/_layout.scss:
--------------------------------------------------------------------------------
1 | input::-ms-clear,
2 | input::-ms-reveal {
3 | display: none !important;
4 | }
5 |
6 | body {
7 | height: auto;
8 | overflow-x: hidden;
9 | background-color: $body-background-color;
10 |
11 | &.nav-open {
12 | overflow: hidden;
13 |
14 | nav,
15 | header > form {
16 | display: block;
17 | }
18 |
19 | header {
20 | bottom: 0;
21 | }
22 | }
23 |
24 | &::before {
25 | content: "";
26 | background-color: $content-background-color;
27 | position: fixed;
28 | top: 0;
29 | right: 0;
30 | bottom: 0;
31 | left: 0;
32 | z-index: -1;
33 | }
34 |
35 | @media (min-width: $mobile-break) {
36 | padding: 0 0 0 $nav-width;
37 |
38 | &.nav-open {
39 | overflow: auto;
40 | }
41 |
42 | &::after,
43 | &::before {
44 | content: "";
45 | position: fixed;
46 | top: 0;
47 | bottom: 0;
48 | z-index: -1;
49 | }
50 |
51 | &::after {
52 | left: 0;
53 | width: $nav-width;
54 | background-color: $nav-background-color;
55 | }
56 |
57 | #search-input,
58 | &::after {
59 | box-shadow: inset -10px 0 10px -10px rgba(0, 0, 0, 0.1);
60 | }
61 |
62 | &::before {
63 | left: $nav-width;
64 | right: 0;
65 | background-color: $content-background-color;
66 | }
67 | }
68 | }
69 |
70 | .main {
71 | margin-top: $space + $nav-header-height;
72 |
73 | @media (min-width: $mobile-break) {
74 | margin-top: 0;
75 | }
76 | }
77 |
78 | header {
79 | $emblem-size: 35px;
80 | $emblem-vertical-padding: ($nav-header-height - $emblem-size) / 2;
81 | $emblem-horizontal-padding: $space;
82 |
83 | position: absolute;
84 | top: 0;
85 | left: 0;
86 | right: 0;
87 | overflow-x: hidden;
88 | z-index: 1;
89 | background-color: $nav-background-color;
90 |
91 | ul {
92 | padding: 0;
93 | margin: 0;
94 | }
95 |
96 | h1 {
97 | padding: $emblem-vertical-padding $emblem-horizontal-padding;
98 | height: $nav-header-height;
99 | box-sizing: border-box;
100 | background-color: $brand-colour;
101 | color: #fff;
102 | margin: 0;
103 | font-size: 1.7rem;
104 | line-height: 0.8;
105 | letter-spacing: 0;
106 | font-weight: 600;
107 | text-indent: 0;
108 | @include display-flex();
109 | @include flex-direction(row);
110 | @include align-items(center);
111 | border-bottom: 1px solid rgba(0, 0, 0, 0.075);
112 |
113 | img {
114 | height: $emblem-size;
115 | width: $emblem-size;
116 | margin-right: $space - 5;
117 | }
118 | }
119 |
120 | $nav-image: $baseurl + "/images/menu.svg";
121 | .open-nav {
122 | background-image: url($nav-image);
123 | background-color: transparent;
124 | background-repeat: no-repeat;
125 | background-size: 100%;
126 | width: $emblem-size;
127 | height: $emblem-size;
128 | border: 0;
129 | position: absolute;
130 | top: $emblem-vertical-padding;
131 | right: $emblem-horizontal-padding;
132 | border-radius: 2px;
133 |
134 | &:focus {
135 | outline: none;
136 | background-color: rgba(0, 0, 0, 0.05);
137 | }
138 |
139 | &:hover {
140 | background-color: rgba(0, 0, 0, 0.1);
141 | }
142 | }
143 |
144 | @media (min-width: $mobile-break) {
145 | background-color: transparent;
146 | width: $nav-width;
147 | right: auto;
148 | bottom: auto;
149 |
150 | .open-nav {
151 | display: none;
152 | }
153 |
154 | h1 {
155 | box-shadow: inset -10px 0 10px -10px rgba(0, 0, 0, 0.1);
156 | }
157 | }
158 | }
159 |
160 | .content {
161 | position: relative;
162 | background-color: $content-background-color;
163 | color: $content-color;
164 |
165 | h3::before {
166 | content: "";
167 | @extend hr;
168 | margin: 60px 0;
169 | }
170 | }
171 |
172 | .content,
173 | .page-header {
174 | max-width: $content-max-width;
175 | padding: 0 ($space + 5) $space;
176 | margin: $space auto 0 auto;
177 | }
178 |
179 | .page-header {
180 | h2,
181 | h3 {
182 | margin: 0;
183 | line-height: 1.2;
184 | letter-spacing: -1px;
185 | }
186 |
187 | h2 {
188 | font-size: 2rem;
189 | margin-left: -1px;
190 | color: #888;
191 | letter-spacing: 0;
192 | }
193 |
194 | h3 {
195 | font-size: 4rem;
196 | margin-left: -4px;
197 | }
198 |
199 | @media (min-width: $mobile-break) {
200 | h2 {
201 | font-size: 2.65rem;
202 | }
203 |
204 | h3 {
205 | font-size: 5.4rem;
206 | }
207 | }
208 |
209 | @media (min-width: $full-width-break) {
210 | margin-top: 55px;
211 | }
212 | }
213 |
214 | nav,
215 | header > form {
216 | display: none;
217 |
218 | @media (min-width: $mobile-break) {
219 | display: block;
220 | }
221 | }
222 |
223 | nav > ul {
224 | padding: $space / 2 0;
225 |
226 | & + ul {
227 | border-top: 1px solid rgba(0, 0, 0, 0.075);
228 | }
229 | }
230 |
231 | .nav-item {
232 | display: block;
233 | font-family: "Open Sans", sans-serif;
234 | line-height: 1;
235 | margin: 0;
236 |
237 | nav:not(.full-navigation) & > ul {
238 | display: none;
239 | }
240 |
241 | nav:not(.full-navigation) &.current > ul {
242 | display: block;
243 | }
244 |
245 | > a {
246 | color: #666;
247 | text-decoration: none;
248 | font-size: 1.4rem;
249 | padding: $space / 2 0 $space / 2 $space * 2;
250 | display: block;
251 | }
252 |
253 | &.current > a,
254 | > a:active,
255 | > a:hover {
256 | color: #111;
257 | }
258 |
259 | &.top-level > a {
260 | line-height: 1.5;
261 | font-weight: 600;
262 | padding-left: $space;
263 | }
264 | }
265 |
266 | .settings-panel-example {
267 | @extend p;
268 | @include display-flex();
269 | @include flex-direction(column);
270 |
271 | .example {
272 | max-width: 300px;
273 | background-color: #fafafa;
274 | margin: 0;
275 | padding: 0;
276 | font-size: 0;
277 | line-height: 1;
278 | border-radius: 2px;
279 | overflow: hidden;
280 | }
281 |
282 | @media (min-width: 960px) {
283 | @include flex-direction(row);
284 |
285 | .details {
286 | @include flex(1);
287 | margin-right: 20px;
288 | }
289 |
290 | p + .highlight > pre {
291 | margin-bottom: 0;
292 | }
293 |
294 | .example {
295 | @include flex(0 0 300px);
296 | max-width: 100%;
297 | }
298 | }
299 | }
300 |
301 | .highlight {
302 | margin-left: 0;
303 | margin-right: 0;
304 | }
305 |
306 | h3 + .warning {
307 | margin-top: 1.75em;
308 | }
309 |
310 |
311 | h4 code {
312 | background: $nav-background-color;
313 | color: $content-color;
314 | background-color: transparent;
315 | font-weight: 700;
316 | padding: 0;
317 | font-size: 1.1em;
318 | line-height: 1;
319 | }
320 |
321 | h4 svg {
322 | vertical-align: middle;
323 | margin-right: 6px;
324 | position: relative;
325 | top: -2px;
326 | fill: #2E2E2E;
327 | height: 23px;
328 | }
329 |
330 | .required {
331 | position: relative;
332 | }
333 |
334 | .required::after {
335 | content: "REQUIRED";
336 | font-size: 12px;
337 | position: absolute;
338 | top: 5px;
339 | line-height: 1;
340 | color: $brand-colour;
341 | padding-left: 5px;
342 | }
343 |
344 | #search-results {
345 | margin: 0;
346 | padding: 0;
347 |
348 | li {
349 | list-style: none;
350 | margin: 0;
351 | padding: 0;
352 |
353 | h4 {
354 | font-size: 2rem;
355 | }
356 |
357 | p {
358 | line-height: 1.5;
359 | }
360 | }
361 | }
362 |
363 |
364 | #search-input {
365 | -webkit-appearance: none;
366 | display: block;
367 | margin: 0;
368 | padding: 10px 20px 10px 15px;
369 | width: 100%;
370 | box-sizing: border-box;
371 | border: 0;
372 | border-bottom: 1px solid rgba(0, 0, 0, 0.075);
373 | border-left: 5px solid transparent;
374 | font-size: 1.5rem;
375 | font-weight: 600;
376 | line-height: 1.8;
377 |
378 | &:focus {
379 | outline: none;
380 | border-left-color: $brand-colour;
381 | }
382 | }
383 |
384 | .changelog {
385 | &,
386 | > div {
387 | margin: 0;
388 | padding: 0;
389 | list-style: none;
390 | }
391 |
392 | .date {
393 | color: #888;
394 | font-style: italic;
395 | }
396 | }
397 |
398 | .badge {
399 | font-family: "Open Sans", sans-serif;
400 | padding: 2px 5px;
401 | text-transform: uppercase;
402 | font-size: 0.8rem;
403 | border-radius: 2px;
404 | background: #eee;
405 | font-weight: bold;
406 |
407 | &.major {
408 | background: $brand-colour;
409 | color: #fff;
410 | }
411 | }
412 |
413 | blockquote {
414 | border-left: 5px solid #FD0;
415 | padding: 10px 15px;
416 | margin-left: -15px;
417 | margin-right: -10px;
418 | background-color: $brand-colour-light;
419 | border-color: $brand-colour;
420 |
421 | p:last-child {
422 | margin-bottom: 0;
423 | }
424 |
425 | @media (max-width: $full-width-break) {
426 | margin-left: 0;
427 | margin-right: 0;
428 | }
429 | }
430 |
431 | img {
432 | max-width: 100%;
433 | height: auto;
434 | }
435 |
436 | .editor-link {
437 | display: none;
438 | margin-top: 0;
439 |
440 | .btn {
441 | border: 0;
442 | border-radius: 2px;
443 | width: 100%;
444 | max-width: 500px;
445 | box-sizing: border-box;
446 | font-size: 2rem;
447 | text-decoration: none;
448 | padding: 10px 15px;
449 | margin: 0;
450 | font-size: 18px;
451 | cursor: pointer;
452 | background-color: #f7e064;
453 | color: #333;
454 | box-shadow: 1px 1px 5px 0 rgba(0, 0, 0, 0.2);
455 |
456 | &:hover {
457 | background-color: #f4d525;
458 | color: #333;
459 | }
460 | }
461 |
462 | }
463 |
464 | .cms-editor-active .editor-link {
465 | display: block;
466 | }
467 |
--------------------------------------------------------------------------------
/_sass/_normalize.scss:
--------------------------------------------------------------------------------
1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
2 |
3 | /**
4 | * 1. Set default font family to sans-serif.
5 | * 2. Prevent iOS text size adjust after orientation change, without disabling
6 | * user zoom.
7 | */
8 |
9 | html {
10 | font-family: sans-serif; /* 1 */
11 | -ms-text-size-adjust: 100%; /* 2 */
12 | -webkit-text-size-adjust: 100%; /* 2 */
13 | }
14 |
15 | /**
16 | * Remove default margin.
17 | */
18 |
19 | body {
20 | margin: 0;
21 | }
22 |
23 | /* HTML5 display definitions
24 | ========================================================================== */
25 |
26 | /**
27 | * Correct `block` display not defined for any HTML5 element in IE 8/9.
28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11
29 | * and Firefox.
30 | * Correct `block` display not defined for `main` in IE 11.
31 | */
32 |
33 | article,
34 | aside,
35 | details,
36 | figcaption,
37 | figure,
38 | footer,
39 | header,
40 | hgroup,
41 | main,
42 | menu,
43 | nav,
44 | section,
45 | summary {
46 | display: block;
47 | }
48 |
49 | /**
50 | * 1. Correct `inline-block` display not defined in IE 8/9.
51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
52 | */
53 |
54 | audio,
55 | canvas,
56 | progress,
57 | video {
58 | display: inline-block; /* 1 */
59 | vertical-align: baseline; /* 2 */
60 | }
61 |
62 | /**
63 | * Prevent modern browsers from displaying `audio` without controls.
64 | * Remove excess height in iOS 5 devices.
65 | */
66 |
67 | audio:not([controls]) {
68 | display: none;
69 | height: 0;
70 | }
71 |
72 | /**
73 | * Address `[hidden]` styling not present in IE 8/9/10.
74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
75 | */
76 |
77 | [hidden],
78 | template {
79 | display: none;
80 | }
81 |
82 | /* Links
83 | ========================================================================== */
84 |
85 | /**
86 | * Remove the gray background color from active links in IE 10.
87 | */
88 |
89 | a {
90 | background-color: transparent;
91 | }
92 |
93 | /**
94 | * Improve readability when focused and also mouse hovered in all browsers.
95 | */
96 |
97 | a:active,
98 | a:hover {
99 | outline: 0;
100 | }
101 |
102 | /* Text-level semantics
103 | ========================================================================== */
104 |
105 | /**
106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
107 | */
108 |
109 | abbr[title] {
110 | border-bottom: 1px dotted;
111 | }
112 |
113 | /**
114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
115 | */
116 |
117 | b,
118 | strong {
119 | font-weight: bold;
120 | }
121 |
122 | /**
123 | * Address styling not present in Safari and Chrome.
124 | */
125 |
126 | dfn {
127 | font-style: italic;
128 | }
129 |
130 | /**
131 | * Address variable `h1` font-size and margin within `section` and `article`
132 | * contexts in Firefox 4+, Safari, and Chrome.
133 | */
134 |
135 | h1 {
136 | font-size: 2em;
137 | margin: 0.67em 0;
138 | }
139 |
140 | /**
141 | * Address styling not present in IE 8/9.
142 | */
143 |
144 | mark {
145 | background: #ff0;
146 | color: #000;
147 | }
148 |
149 | /**
150 | * Address inconsistent and variable font size in all browsers.
151 | */
152 |
153 | small {
154 | font-size: 80%;
155 | }
156 |
157 | /**
158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers.
159 | */
160 |
161 | sub,
162 | sup {
163 | font-size: 75%;
164 | line-height: 0;
165 | position: relative;
166 | vertical-align: baseline;
167 | }
168 |
169 | sup {
170 | top: -0.5em;
171 | }
172 |
173 | sub {
174 | bottom: -0.25em;
175 | }
176 |
177 | /* Embedded content
178 | ========================================================================== */
179 |
180 | /**
181 | * Remove border when inside `a` element in IE 8/9/10.
182 | */
183 |
184 | img {
185 | border: 0;
186 | }
187 |
188 | /**
189 | * Correct overflow not hidden in IE 9/10/11.
190 | */
191 |
192 | svg:not(:root) {
193 | overflow: hidden;
194 | }
195 |
196 | /* Grouping content
197 | ========================================================================== */
198 |
199 | /**
200 | * Address margin not present in IE 8/9 and Safari.
201 | */
202 |
203 | figure {
204 | margin: 1em 40px;
205 | }
206 |
207 | /**
208 | * Address differences between Firefox and other browsers.
209 | */
210 |
211 | hr {
212 | -moz-box-sizing: content-box;
213 | box-sizing: content-box;
214 | height: 0;
215 | }
216 |
217 | /**
218 | * Contain overflow in all browsers.
219 | */
220 |
221 | pre {
222 | overflow: auto;
223 | }
224 |
225 | /**
226 | * Address odd `em`-unit font size rendering in all browsers.
227 | */
228 |
229 | code,
230 | kbd,
231 | pre,
232 | samp {
233 | font-family: monospace, monospace;
234 | font-size: 1em;
235 | }
236 |
237 | /* Forms
238 | ========================================================================== */
239 |
240 | /**
241 | * Known limitation: by default, Chrome and Safari on OS X allow very limited
242 | * styling of `select`, unless a `border` property is set.
243 | */
244 |
245 | /**
246 | * 1. Correct color not being inherited.
247 | * Known issue: affects color of disabled elements.
248 | * 2. Correct font properties not being inherited.
249 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
250 | */
251 |
252 | button,
253 | input,
254 | optgroup,
255 | select,
256 | textarea {
257 | color: inherit; /* 1 */
258 | font: inherit; /* 2 */
259 | margin: 0; /* 3 */
260 | }
261 |
262 | /**
263 | * Address `overflow` set to `hidden` in IE 8/9/10/11.
264 | */
265 |
266 | button {
267 | overflow: visible;
268 | }
269 |
270 | /**
271 | * Address inconsistent `text-transform` inheritance for `button` and `select`.
272 | * All other form control elements do not inherit `text-transform` values.
273 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
274 | * Correct `select` style inheritance in Firefox.
275 | */
276 |
277 | button,
278 | select {
279 | text-transform: none;
280 | }
281 |
282 | /**
283 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
284 | * and `video` controls.
285 | * 2. Correct inability to style clickable `input` types in iOS.
286 | * 3. Improve usability and consistency of cursor style between image-type
287 | * `input` and others.
288 | */
289 |
290 | button,
291 | html input[type="button"], /* 1 */
292 | input[type="reset"],
293 | input[type="submit"] {
294 | -webkit-appearance: button; /* 2 */
295 | cursor: pointer; /* 3 */
296 | }
297 |
298 | /**
299 | * Re-set default cursor for disabled elements.
300 | */
301 |
302 | button[disabled],
303 | html input[disabled] {
304 | cursor: default;
305 | }
306 |
307 | /**
308 | * Remove inner padding and border in Firefox 4+.
309 | */
310 |
311 | button::-moz-focus-inner,
312 | input::-moz-focus-inner {
313 | border: 0;
314 | padding: 0;
315 | }
316 |
317 | /**
318 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in
319 | * the UA stylesheet.
320 | */
321 |
322 | input {
323 | line-height: normal;
324 | }
325 |
326 | /**
327 | * It's recommended that you don't attempt to style these elements.
328 | * Firefox's implementation doesn't respect box-sizing, padding, or width.
329 | *
330 | * 1. Address box sizing set to `content-box` in IE 8/9/10.
331 | * 2. Remove excess padding in IE 8/9/10.
332 | */
333 |
334 | input[type="checkbox"],
335 | input[type="radio"] {
336 | box-sizing: border-box; /* 1 */
337 | padding: 0; /* 2 */
338 | }
339 |
340 | /**
341 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain
342 | * `font-size` values of the `input`, it causes the cursor style of the
343 | * decrement button to change from `default` to `text`.
344 | */
345 |
346 | input[type="number"]::-webkit-inner-spin-button,
347 | input[type="number"]::-webkit-outer-spin-button {
348 | height: auto;
349 | }
350 |
351 | /**
352 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
353 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
354 | * (include `-moz` to future-proof).
355 | */
356 |
357 | input[type="search"] {
358 | -webkit-appearance: textfield; /* 1 */
359 | -moz-box-sizing: content-box;
360 | -webkit-box-sizing: content-box; /* 2 */
361 | box-sizing: content-box;
362 | }
363 |
364 | /**
365 | * Remove inner padding and search cancel button in Safari and Chrome on OS X.
366 | * Safari (but not Chrome) clips the cancel button when the search input has
367 | * padding (and `textfield` appearance).
368 | */
369 |
370 | input[type="search"]::-webkit-search-cancel-button,
371 | input[type="search"]::-webkit-search-decoration {
372 | -webkit-appearance: none;
373 | }
374 |
375 | /**
376 | * Define consistent border, margin, and padding.
377 | */
378 |
379 | fieldset {
380 | border: 1px solid #c0c0c0;
381 | margin: 0 2px;
382 | padding: 0.35em 0.625em 0.75em;
383 | }
384 |
385 | /**
386 | * 1. Correct `color` not being inherited in IE 8/9/10/11.
387 | * 2. Remove padding so people aren't caught out if they zero out fieldsets.
388 | */
389 |
390 | legend {
391 | border: 0; /* 1 */
392 | padding: 0; /* 2 */
393 | }
394 |
395 | /**
396 | * Remove default vertical scrollbar in IE 8/9/10/11.
397 | */
398 |
399 | textarea {
400 | overflow: auto;
401 | }
402 |
403 | /**
404 | * Don't inherit the `font-weight` (applied by a rule above).
405 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
406 | */
407 |
408 | optgroup {
409 | font-weight: bold;
410 | }
411 |
412 | /* Tables
413 | ========================================================================== */
414 |
415 | /**
416 | * Remove most spacing between table cells.
417 | */
418 |
419 | table {
420 | border-collapse: collapse;
421 | border-spacing: 0;
422 | }
423 |
424 | td,
425 | th {
426 | padding: 0;
427 | }
428 |
--------------------------------------------------------------------------------
/scripts/lunr.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.0
3 | * Copyright (C) 2016 Oliver Nightingale
4 | * MIT Licensed
5 | * @license
6 | */
7 | !function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={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"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.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"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n