├── package.json
├── assets
├── favicon.ico
├── fonts
│ ├── casper-icons.eot
│ ├── casper-icons.ttf
│ ├── casper-icons.woff
│ └── casper-icons.svg
├── css
│ ├── customizations.css
│ ├── prism.css
│ └── screen.css
└── js
│ ├── jquery.fitvids.js
│ ├── index.js
│ └── prism.js
├── .gitignore
├── page.hbs
├── tag.hbs
├── partials
└── loop.hbs
├── LICENSE
├── index.hbs
├── README.md
├── author.hbs
├── default.hbs
└── post.hbs
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Casper",
3 | "version": "1.1.0"
4 | }
5 |
--------------------------------------------------------------------------------
/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codegram/Casper/master/assets/favicon.ico
--------------------------------------------------------------------------------
/assets/fonts/casper-icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codegram/Casper/master/assets/fonts/casper-icons.eot
--------------------------------------------------------------------------------
/assets/fonts/casper-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codegram/Casper/master/assets/fonts/casper-icons.ttf
--------------------------------------------------------------------------------
/assets/fonts/casper-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codegram/Casper/master/assets/fonts/casper-icons.woff
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | b-cov
2 | *.seed
3 | *.log
4 | *.csv
5 | *.dat
6 | *.out
7 | *.pid
8 | *.gz
9 |
10 | pids
11 | logs
12 | results
13 |
14 | npm-debug.log
15 | node_modules
16 |
17 | .idea/*
18 | *.iml
19 | projectFilesBackup
20 |
21 | .DS_Store
--------------------------------------------------------------------------------
/assets/css/customizations.css:
--------------------------------------------------------------------------------
1 | .post-header h1,
2 | .home-template h1,
3 | a {
4 | color: #db2e34;
5 | }
6 |
7 | a:hover {
8 | color: #fd030c;
9 | }
10 |
11 | .page-title{
12 | color: #db2e34;
13 | }
14 |
15 | .page-description{
16 | color: rgba(255,255,255);
17 | text-shadow: rgba(0,0,0,0.15) 0px 0px 10px;
18 |
--------------------------------------------------------------------------------
/page.hbs:
--------------------------------------------------------------------------------
1 | {{!< default}}
2 |
3 | {{! This is a page template. A page outputs content just like any other post, and has all the same
4 | attributes by default, but you can also customise it to behave differently if you prefer. }}
5 |
6 |
7 | Home
8 | Subscribe
9 |
10 |
11 |
12 |
13 |
14 | {{! Everything inside the #post tags pulls data from the post }}
15 | {{#post}}
16 |
17 | {{title}}
18 |
19 |
22 |
23 | {{/post}}
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/tag.hbs:
--------------------------------------------------------------------------------
1 | {{!< default}}
2 | {{! The tag above means - insert everything in this file into the {body} of the default.hbs template }}
3 |
4 | {{! The big featured header }}
5 |
6 |
7 | Home
8 | {{tag.name}}
9 |
10 |
11 |
12 |
{{tag.name}}
13 | A {{pagination.total}}-post collection
14 |
15 |
16 |
17 |
18 | {{! The main content area on the homepage }}
19 |
20 |
21 | {{! The tag below includes the post loop - partials/loop.hbs }}
22 | {{> "loop"}}
23 |
24 |
--------------------------------------------------------------------------------
/partials/loop.hbs:
--------------------------------------------------------------------------------
1 | {{! Previous/next page links - only displayed on page 2+ }}
2 |
5 |
6 | {{! This is the post loop - each post will be output using this markup }}
7 | {{#foreach posts}}
8 |
9 |
12 |
13 | {{excerpt words="26"}} »
14 |
15 |
16 | {{#if author.image}} {{/if}}
17 | {{author}}
18 | {{tags prefix=" on "}}
19 | {{date format="DD MMMM YYYY"}}
20 |
21 |
22 | {{/foreach}}
23 |
24 | {{! Previous/next page links - displayed on every page }}
25 | {{pagination}}
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013-2014 Ghost Foundation - Released under The MIT License.
2 |
3 | Permission is hereby granted, free of charge, to any person
4 | obtaining a copy of this software and associated documentation
5 | files (the "Software"), to deal in the Software without
6 | restriction, including without limitation the rights to use,
7 | copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the
9 | Software is furnished to do so, subject to the following
10 | conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/index.hbs:
--------------------------------------------------------------------------------
1 | {{!< default}}
2 | {{! The tag above means - insert everything in this file into the {body} of the default.hbs template }}
3 |
4 | {{! The big featured header }}
5 |
6 |
7 | {{#if @blog.logo}} {{/if}}
8 | Subscribe
9 |
10 |
11 |
12 |
{{@blog.title}}
13 | {{@blog.description}}
14 |
15 |
16 | Scroll Down
17 |
18 |
19 | {{! The main content area on the homepage }}
20 |
21 |
22 | {{! The tag below includes the post loop - partials/loop.hbs }}
23 | {{> "loop"}}
24 |
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Casper
2 |
3 | The default theme for [Ghost](http://github.com/tryghost/ghost/).
4 |
5 | To download, visit the [releases](https://github.com/TryGhost/Casper/releases) page.
6 |
7 | ## Copyright & License
8 |
9 | Copyright (c) 2013-2014 Ghost Foundation - Released under the MIT License.
10 |
11 | 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:
12 |
13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
14 |
15 | 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
16 | 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.
17 |
--------------------------------------------------------------------------------
/author.hbs:
--------------------------------------------------------------------------------
1 | {{!< default}}
2 | {{! The tag above means - insert everything in this file into the {body} of the default.hbs template }}
3 |
4 | {{! The big featured header }}
5 |
6 | {{! Everything inside the #author tags pulls data from the author }}
7 | {{#author}}
8 |
9 |
10 | Home
11 | {{name}}
12 |
13 |
14 |
15 |
16 | {{#if image}}
17 |
18 | {{name}}'s Picture
19 |
20 | {{/if}}
21 | {{name}}
22 | {{bio}}
23 |
28 |
29 | {{/author}}
30 |
31 | {{! The main content area on the homepage }}
32 |
33 |
34 | {{! The tag below includes the post loop - partials/loop.hbs }}
35 | {{> "loop"}}
36 |
37 |
--------------------------------------------------------------------------------
/default.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{! Document Settings }}
5 |
6 |
7 |
8 | {{! Page Meta }}
9 | {{meta_title}}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | {{! Styles'n'Scripts }}
18 |
19 |
20 | {{! Ghost outputs important style and meta data with this tag }}
21 | {{ghost_head}}
22 |
23 |
24 |
25 | {{! Everything else gets inserted here }}
26 | {{{body}}}
27 |
28 |
32 |
33 | {{! Ghost outputs important scripts and data with this tag }}
34 | {{ghost_foot}}
35 |
36 | {{! The main JavaScript file for Casper }}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/assets/js/jquery.fitvids.js:
--------------------------------------------------------------------------------
1 | /*global jQuery */
2 | /*jshint browser:true */
3 | /*!
4 | * FitVids 1.1
5 | *
6 | * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
7 | * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
8 | * Released under the WTFPL license - http://sam.zoy.org/wtfpl/
9 | *
10 | */
11 |
12 | (function( $ ){
13 |
14 | "use strict";
15 |
16 | $.fn.fitVids = function( options ) {
17 | var settings = {
18 | customSelector: null
19 | };
20 |
21 | if(!document.getElementById('fit-vids-style')) {
22 | // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
23 | var head = document.head || document.getElementsByTagName('head')[0];
24 | 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%;}';
25 | var div = document.createElement('div');
26 | div.innerHTML = 'x
';
27 | head.appendChild(div.childNodes[1]);
28 | }
29 |
30 | if ( options ) {
31 | $.extend( settings, options );
32 | }
33 |
34 | return this.each(function(){
35 | var selectors = [
36 | "iframe[src*='player.vimeo.com']",
37 | "iframe[src*='youtube.com']",
38 | "iframe[src*='youtube-nocookie.com']",
39 | "iframe[src*='kickstarter.com'][src*='video.html']",
40 | "object",
41 | "embed"
42 | ];
43 |
44 | if (settings.customSelector) {
45 | selectors.push(settings.customSelector);
46 | }
47 |
48 | var $allVideos = $(this).find(selectors.join(','));
49 | $allVideos = $allVideos.not("object object"); // SwfObj conflict patch
50 |
51 | $allVideos.each(function(){
52 | var $this = $(this);
53 | if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
54 | var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
55 | width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
56 | aspectRatio = height / width;
57 | if(!$this.attr('id')){
58 | var videoID = 'fitvid' + Math.floor(Math.random()*999999);
59 | $this.attr('id', videoID);
60 | }
61 | $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%");
62 | $this.removeAttr('height').removeAttr('width');
63 | });
64 | });
65 | };
66 | // Works with either jQuery or Zepto
67 | })( window.jQuery || window.Zepto );
68 |
--------------------------------------------------------------------------------
/post.hbs:
--------------------------------------------------------------------------------
1 | {{!< default}}
2 |
3 | {{! The comment above "< default" means - insert everything in this file into
4 | the {body} of the default.hbs template, which contains our header/footer. }}
5 |
6 | {{! Everything inside the #post tags pulls data from the post }}
7 | {{#post}}
8 |
9 |
10 |
11 | Home
12 | Subscribe
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
26 |
27 |
30 |
31 |
75 |
76 |
77 |
78 |
79 |
80 | {{/post}}
81 |
--------------------------------------------------------------------------------
/assets/js/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Main JS file for Casper behaviours
3 | */
4 |
5 | /* globals jQuery, document */
6 | (function ($, sr, undefined) {
7 | "use strict";
8 |
9 | var $document = $(document),
10 |
11 | // debouncing function from John Hann
12 | // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
13 | debounce = function (func, threshold, execAsap) {
14 | var timeout;
15 |
16 | return function debounced () {
17 | var obj = this, args = arguments;
18 | function delayed () {
19 | if (!execAsap) {
20 | func.apply(obj, args);
21 | }
22 | timeout = null;
23 | }
24 |
25 | if (timeout) {
26 | clearTimeout(timeout);
27 | } else if (execAsap) {
28 | func.apply(obj, args);
29 | }
30 |
31 | timeout = setTimeout(delayed, threshold || 100);
32 | };
33 | };
34 |
35 | $document.ready(function () {
36 |
37 | var $postContent = $(".post-content");
38 | $postContent.fitVids();
39 |
40 | function updateImageWidth() {
41 | var $this = $(this),
42 | contentWidth = $postContent.outerWidth(), // Width of the content
43 | imageWidth = this.naturalWidth; // Original image resolution
44 |
45 | if (imageWidth >= contentWidth) {
46 | $this.addClass('full-img');
47 | } else {
48 | $this.removeClass('full-img');
49 | }
50 | }
51 |
52 | var $img = $("img").on('load', updateImageWidth);
53 | function casperFullImg() {
54 | $img.each(updateImageWidth);
55 | }
56 |
57 | casperFullImg();
58 | $(window).smartresize(casperFullImg);
59 |
60 | $(".scroll-down").arctic_scroll();
61 |
62 | });
63 |
64 | // smartresize
65 | jQuery.fn[sr] = function(fn) { return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
66 |
67 | // Arctic Scroll by Paul Adam Davis
68 | // https://github.com/PaulAdamDavis/Arctic-Scroll
69 | $.fn.arctic_scroll = function (options) {
70 |
71 | var defaults = {
72 | elem: $(this),
73 | speed: 500
74 | },
75 |
76 | allOptions = $.extend(defaults, options);
77 |
78 | allOptions.elem.click(function (event) {
79 | event.preventDefault();
80 | var $this = $(this),
81 | $htmlBody = $('html, body'),
82 | offset = ($this.attr('data-offset')) ? $this.attr('data-offset') : false,
83 | position = ($this.attr('data-position')) ? $this.attr('data-position') : false,
84 | toMove;
85 |
86 | if (offset) {
87 | toMove = parseInt(offset);
88 | $htmlBody.stop(true, false).animate({scrollTop: ($(this.hash).offset().top + toMove) }, allOptions.speed);
89 | } else if (position) {
90 | toMove = parseInt(position);
91 | $htmlBody.stop(true, false).animate({scrollTop: toMove }, allOptions.speed);
92 | } else {
93 | $htmlBody.stop(true, false).animate({scrollTop: ($(this.hash).offset().top) }, allOptions.speed);
94 | }
95 | });
96 |
97 | };
98 | })(jQuery, 'smartresize');
99 |
--------------------------------------------------------------------------------
/assets/fonts/casper-icons.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Generated by IcoMoon
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/assets/css/prism.css:
--------------------------------------------------------------------------------
1 | /* http://prismjs.com/download.html?themes=prism&languages=markup+css+css-extras+clike+javascript+java+coffeescript+scss+bash+sql+ruby+gherkin+scala+haskell+swift+latex+git&plugins=line-highlight+line-numbers+autolinker+show-language */
2 | /**
3 | * prism.js default theme for JavaScript, CSS and HTML
4 | * Based on dabblet (http://dabblet.com)
5 | * @author Lea Verou
6 | */
7 |
8 | code[class*="language-"],
9 | pre[class*="language-"] {
10 | color: black;
11 | text-shadow: 0 1px white;
12 | font-family: Consolas, Monaco, 'Andale Mono', monospace;
13 | direction: ltr;
14 | text-align: left;
15 | white-space: pre;
16 | word-spacing: normal;
17 | word-break: normal;
18 | line-height: 1.5;
19 |
20 | -moz-tab-size: 4;
21 | -o-tab-size: 4;
22 | tab-size: 4;
23 |
24 | -webkit-hyphens: none;
25 | -moz-hyphens: none;
26 | -ms-hyphens: none;
27 | hyphens: none;
28 | }
29 |
30 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
31 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
32 | text-shadow: none;
33 | background: #b3d4fc;
34 | }
35 |
36 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
37 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
38 | text-shadow: none;
39 | background: #b3d4fc;
40 | }
41 |
42 | @media print {
43 | code[class*="language-"],
44 | pre[class*="language-"] {
45 | text-shadow: none;
46 | }
47 | }
48 |
49 | /* Code blocks */
50 | pre[class*="language-"] {
51 | padding: 1em;
52 | margin: .5em 0;
53 | overflow: auto;
54 | }
55 |
56 | :not(pre) > code[class*="language-"],
57 | pre[class*="language-"] {
58 | background: #f5f2f0;
59 | }
60 |
61 | /* Inline code */
62 | :not(pre) > code[class*="language-"] {
63 | padding: .1em;
64 | border-radius: .3em;
65 | }
66 |
67 | .token.comment,
68 | .token.prolog,
69 | .token.doctype,
70 | .token.cdata {
71 | color: slategray;
72 | }
73 |
74 | .token.punctuation {
75 | color: #999;
76 | }
77 |
78 | .namespace {
79 | opacity: .7;
80 | }
81 |
82 | .token.property,
83 | .token.tag,
84 | .token.boolean,
85 | .token.number,
86 | .token.constant,
87 | .token.symbol,
88 | .token.deleted {
89 | color: #905;
90 | }
91 |
92 | .token.selector,
93 | .token.attr-name,
94 | .token.string,
95 | .token.char,
96 | .token.builtin,
97 | .token.inserted {
98 | color: #690;
99 | }
100 |
101 | .token.operator,
102 | .token.entity,
103 | .token.url,
104 | .language-css .token.string,
105 | .style .token.string {
106 | color: #a67f59;
107 | background: hsla(0, 0%, 100%, .5);
108 | }
109 |
110 | .token.atrule,
111 | .token.attr-value,
112 | .token.keyword {
113 | color: #07a;
114 | }
115 |
116 | .token.function {
117 | color: #DD4A68;
118 | }
119 |
120 | .token.regex,
121 | .token.important,
122 | .token.variable {
123 | color: #e90;
124 | }
125 |
126 | .token.important {
127 | font-weight: bold;
128 | }
129 |
130 | .token.entity {
131 | cursor: help;
132 | }
133 |
134 | pre[data-line] {
135 | position: relative;
136 | padding: 1em 0 1em 3em;
137 | }
138 |
139 | .line-highlight {
140 | position: absolute;
141 | left: 0;
142 | right: 0;
143 | padding: inherit 0;
144 | margin-top: 1em; /* Same as .prism’s padding-top */
145 |
146 | background: hsla(24, 20%, 50%,.08);
147 | background: -moz-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
148 | background: -webkit-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
149 | background: -o-linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
150 | background: linear-gradient(left, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
151 |
152 | pointer-events: none;
153 |
154 | line-height: inherit;
155 | white-space: pre;
156 | }
157 |
158 | .line-highlight:before,
159 | .line-highlight[data-end]:after {
160 | content: attr(data-start);
161 | position: absolute;
162 | top: .4em;
163 | left: .6em;
164 | min-width: 1em;
165 | padding: 0 .5em;
166 | background-color: hsla(24, 20%, 50%,.4);
167 | color: hsl(24, 20%, 95%);
168 | font: bold 65%/1.5 sans-serif;
169 | text-align: center;
170 | vertical-align: .3em;
171 | border-radius: 999px;
172 | text-shadow: none;
173 | box-shadow: 0 1px white;
174 | }
175 |
176 | .line-highlight[data-end]:after {
177 | content: attr(data-end);
178 | top: auto;
179 | bottom: .4em;
180 | }
181 | pre.line-numbers {
182 | position: relative;
183 | padding-left: 3.8em;
184 | counter-reset: linenumber;
185 | }
186 |
187 | pre.line-numbers > code {
188 | position: relative;
189 | }
190 |
191 | .line-numbers .line-numbers-rows {
192 | position: absolute;
193 | pointer-events: none;
194 | top: 0;
195 | font-size: 100%;
196 | left: -3.8em;
197 | width: 3em; /* works for line-numbers below 1000 lines */
198 | letter-spacing: -1px;
199 | border-right: 1px solid #999;
200 |
201 | -webkit-user-select: none;
202 | -moz-user-select: none;
203 | -ms-user-select: none;
204 | user-select: none;
205 |
206 | }
207 |
208 | .line-numbers-rows > span {
209 | pointer-events: none;
210 | display: block;
211 | counter-increment: linenumber;
212 | }
213 |
214 | .line-numbers-rows > span:before {
215 | content: counter(linenumber);
216 | color: #999;
217 | display: block;
218 | padding-right: 0.8em;
219 | text-align: right;
220 | }
221 | .token a {
222 | color: inherit;
223 | }
224 | pre[class*='language-'] {
225 | position: relative;
226 | }
227 | pre[class*='language-'] > code[data-language] {
228 | overflow: scroll;
229 | max-height: 28em;
230 | display: block;
231 | }
232 | pre[class*='language-'] > code[data-language]::before {
233 | content: attr(data-language);
234 | color: black;
235 | background-color: #CFCFCF;
236 | display: inline-block;
237 | position: absolute;
238 | top: 0;
239 | right: 0;
240 | font-size: 0.9em;
241 | border-radius: 0 0 0 5px;
242 | padding: 0 0.5em;
243 | text-shadow: none;
244 | }
245 |
--------------------------------------------------------------------------------
/assets/js/prism.js:
--------------------------------------------------------------------------------
1 | /* http://prismjs.com/download.html?themes=prism&languages=markup+css+css-extras+clike+javascript+java+coffeescript+scss+bash+sql+ruby+gherkin+scala+haskell+swift+latex+git&plugins=line-highlight+line-numbers+autolinker+show-language */
2 | self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{};var Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(d instanceof a)){c.lastIndex=0;var m=c.exec(d);if(m){u&&(f=m[1].length);var y=m.index-1+f,m=m[0].slice(f),v=m.length,k=y+v,b=d.slice(0,y+1),w=d.slice(k+1),N=[p,1];b&&N.push(b);var O=new a(l,g?t.tokenize(m,g):m,h);N.push(O),w&&N.push(w),Array.prototype.splice.apply(r,N)}}}}}return r},hooks:{all:{},add:function(e,n){var a=t.hooks.all;a[e]=a[e]||[],a[e].push(n)},run:function(e,n){var a=t.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(n)}}},n=t.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(n.stringify=function(e,a,r){if("string"==typeof e)return e;if("[object Array]"==Object.prototype.toString.call(e))return e.map(function(t){return n.stringify(t,a,e)}).join("");var i={type:e.type,content:n.stringify(e.content,a,r),tag:"span",classes:["token",e.type],attributes:{},language:a,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}t.hooks.run("wrap",i);var o="";for(var s in i.attributes)o+=s+'="'+(i.attributes[s]||"")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'" '+o+">"+i.content+""+i.tag+">"},!self.document)return self.addEventListener?(self.addEventListener("message",function(e){var n=JSON.parse(e.data),a=n.language,r=n.code;self.postMessage(JSON.stringify(t.util.encode(t.tokenize(r,t.languages[a])))),self.close()},!1),self.Prism):self.Prism;var a=document.getElementsByTagName("script");return a=a[a.length-1],a&&(t.filename=a.src,document.addEventListener&&!a.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)),self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism);;
3 | Prism.languages.markup={comment://g,prolog:/<\?.+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/\?[\da-z]{1,8};/gi},Prism.hooks.add("wrap",function(t){"entity"===t.type&&(t.attributes.title=t.content.replace(/&/,"&"))});;
4 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/gi,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,punctuation:/[\{\};:]/g,"function":/[-a-z0-9]+(?=\()/gi},Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/