nesta-theme-median 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ea13ebc8ba918e7ecf97ad4e1ddc73aa3ad85f70
4
+ data.tar.gz: a4a3ef2b982215a2e84e3f5289b51313a6933c11
5
+ SHA512:
6
+ metadata.gz: 28cc8203e16b418834112af8cd2a24edc22893877d4a83527a01680e07cc298b0217a5bb71807d7a44480def05952d1a506c82873151dff2368b0b80a7571c26
7
+ data.tar.gz: 9d57a8036287741ea5e356c88cc613711e366e2fc3d241f9001f59ea4ae526d3904b53a4675e2d818af81d8cbf87b9ba9c4ffc773f0d2d9a1341738dddd7ff28
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in nesta-theme-median.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Glenn Gillen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,7 @@
1
+ Median Nesta theme
2
+ ==================
3
+
4
+ median is a theme for Nesta, a [Ruby CMS](nesta), designed by
5
+ Glenn Gillen.
6
+
7
+ [nesta]: http://nestacms.com
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/app.rb ADDED
@@ -0,0 +1,79 @@
1
+ module Nesta
2
+ class Page < FileModel
3
+ def convert_to_html(format, scope, text)
4
+ markdown_options = {
5
+ autolink: true,
6
+ disable_indented_code_blocks: true,
7
+ fenced_code_blocks: true,
8
+ highlight: true,
9
+ no_intra_emphasis: true,
10
+ quote: true,
11
+ strikethrough: true,
12
+ superscript: true,
13
+ tables: true,
14
+ with_toc_data: true
15
+ }
16
+ text = add_p_tags_to_haml(text) if @format == :haml
17
+ template = Tilt[format].new(nil, 1, markdown_options) { text }
18
+ template.render(scope)
19
+ end
20
+
21
+ def intro_image
22
+ return metadata('Intro Image') if metadata('Intro Image')
23
+ if self.parent
24
+ images = %w[
25
+ https://dl.dropboxusercontent.com/u/2609971/cover001.jpg
26
+ https://dl.dropboxusercontent.com/u/2609971/cover002.jpg
27
+ https://dl.dropboxusercontent.com/u/2609971/cover003.jpg
28
+ https://dl.dropboxusercontent.com/u/2609971/cover004.jpg
29
+ https://dl.dropboxusercontent.com/u/2609971/cover005.jpg
30
+ https://dl.dropboxusercontent.com/u/2609971/cover006.jpg
31
+ https://dl.dropboxusercontent.com/u/2609971/cover007.jpg
32
+ ]
33
+ images.sample
34
+ end
35
+ end
36
+ end
37
+
38
+ class App
39
+ helpers do
40
+ def format_date(date)
41
+ date.strftime("%d %b %Y")
42
+ end
43
+
44
+ def reading_time(content)
45
+ words_per_minute = 270
46
+ words = content.split.size
47
+ minutes = words.to_f/words_per_minute.to_f
48
+ if minutes < 2
49
+ "1 min"
50
+ else
51
+ "#{minutes.to_i} min"
52
+ end
53
+ end
54
+
55
+ def strip_html(content)
56
+ content.gsub(/<.+?>/, " ")
57
+ end
58
+
59
+ def generate_summary(content)
60
+ summary = strip_html(content).match(/(.*?\.){,2}/)[0]
61
+ return summary if summary == content
62
+ summary.sub(/\.\z/,"&hellip;")
63
+ end
64
+
65
+ def author_biography(name = nil)
66
+ name ||= @page.metadata('author')
67
+ if name
68
+ template = name.downcase.gsub(/\W+/, '-')
69
+ page = Page.find_by_path("/#{template}")
70
+ page.body
71
+ end
72
+ end
73
+
74
+ def author_url(name)
75
+ "/#{name.downcase.gsub(/\W+/, '-')}"
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,9 @@
1
+ require "nesta-theme-median/version"
2
+ require "nesta-theme-median/path"
3
+
4
+ module Nesta
5
+ module Theme
6
+ module Median
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ require "nesta/path"
2
+ module Nesta
3
+ class Path
4
+ class << self
5
+ alias_method :pre_median_themes, :themes
6
+ end
7
+
8
+ def self.themes(*args)
9
+ if Nesta::Config.theme && args[0] == "median"
10
+ File.expand_path(File.join(*args[1..-1]), File.dirname(__FILE__) + "/../..")
11
+ else
12
+ pre_median_themes(*args)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ module Nesta
2
+ module Theme
3
+ module Median
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nesta-theme-median/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "nesta-theme-median"
8
+ spec.version = Nesta::Theme::Median::VERSION
9
+ spec.authors = ["Glenn Gillen"]
10
+ spec.email = ["me@glenngillen.com"]
11
+ spec.summary = %q{A typography focussed theme for NestaCMS.}
12
+ spec.homepage = "https://contentfocus.io"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "rake"
22
+
23
+ spec.add_runtime_dependency "nesta"
24
+ end
@@ -0,0 +1,16 @@
1
+ - if ENV["SEGMENT_WRITE_KEY"]
2
+ :javascript
3
+ !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","group","track","ready","alias","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="3.0.1";
4
+ analytics.load("#{ENV["SEGMENT_WRITE_KEY"]}");
5
+ analytics.page()
6
+ }}();
7
+ - if ENV["GOOGLE_ANALYTICS_PROFILE_ID"]
8
+ :javascript
9
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
10
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
11
+ :javascript
12
+ try {
13
+ var pageTracker = _gat._getTracker("#{ENV["GOOGLE_ANALYTICS_PROFILE_ID"]}");
14
+ pageTracker._trackPageview();
15
+ } catch(err) {}</script>
16
+
File without changes
@@ -0,0 +1,10 @@
1
+ #content
2
+ %section(role="main")
3
+ %h1 Sorry, something went wrong
4
+
5
+ %p
6
+ An error occurred whilst we were trying to serve your page. Please
7
+ bear with us, or try another page.
8
+
9
+ = haml :sidebar, layout: false
10
+ = haml :footer, layout: false
@@ -0,0 +1,7 @@
1
+ - if ENV["TYPEKIT_KIT_ID"]
2
+ %script{ :type => "text/javascript", :src => "http://use.typekit.com/#{ENV["TYPEKIT_KIT_ID"]}.js" }
3
+ :javascript
4
+ try{Typekit.load();}catch(e){}
5
+ - else
6
+ %link(href="http://fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet" type="text/css")
7
+ %link(href="http://fonts.googleapis.com/css?family=Merriweather:300,400,700,300italic,400italic" rel="stylesheet" type="text/css")
@@ -0,0 +1,23 @@
1
+ %footer.branding
2
+ - if @page
3
+ - if @page.metadata('author')
4
+ %span.author
5
+ %a(href="#{author_url(@page.metadata('author'))}")
6
+ = @page.metadata('author')
7
+ - if @page.date
8
+ %span.date
9
+ on
10
+ = format_date(@page.date)
11
+ %span.eta= reading_time(@page.body_markup)
12
+ .contentfocus
13
+ %a(href="https://contentfocus.io/?utm_source=#{site_domain}&utm_medium=footer")
14
+ %span.powered-by Powered by
15
+ %span.contentfocus ContentFocus.io
16
+ - if ENV["ADDTHIS_PUB_ID"]
17
+ .addthis_sharing_toolbox
18
+ - unless @page.nil? || @page.categories.empty?
19
+ %span.categories
20
+ %span.read-more Read more in&nbsp;
21
+ - @page.categories.each do |category|
22
+ %span.category>
23
+ %a{ :href => category.abspath }>= category.heading
@@ -0,0 +1,14 @@
1
+ :javascript
2
+ $(document).ready(function() {
3
+ var menuToggle = $('#js-centered-navigation-mobile-menu').unbind();
4
+ $('#js-centered-navigation-menu').removeClass("show");
5
+
6
+ menuToggle.on('click', function(e) {
7
+ e.preventDefault();
8
+ $('#js-centered-navigation-menu').slideToggle(function(){
9
+ if($('#js-centered-navigation-menu').is(':hidden')) {
10
+ $('#js-centered-navigation-menu').removeAttr('style');
11
+ }
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,3 @@
1
+ %section.header
2
+ %h1
3
+ %a(href="/")= Nesta::Config.title
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ %html(lang="en")
3
+ %head
4
+ %meta(charset="utf-8")
5
+ %title= @title
6
+ %link(rel="stylesheet" type="text/css" href="#{path_to("css/master.css")}")
7
+ = haml :analytics, layout: false
8
+ = haml :fonts, layout: false
9
+ = haml :default_head, layout: false
10
+ %body
11
+ .container
12
+ = yield
13
+ %script(type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js")
14
+ = haml :social_scripts, layout: false
15
+ = haml :footer_scripts, layout: false
@@ -0,0 +1,372 @@
1
+ $base-font-size: 22px;
2
+ $base-color: rgba(0, 0, 0, 0.8);
3
+ $heading-font-family: jaf-bernino-sans, 'Open Sans' 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Geneva, Verdana, sans-serif;
4
+ $body-font-family: freight-text-pro, Merriweather, Georgia, Cambria, 'Times New Roman', Times, serif;
5
+ $link-color: rgb(77, 204, 75);
6
+
7
+ // hidpi mixin courtesy of https://github.com/thoughtbot/bourbon/blob/cb6e72a72bb4925de1536c7f8adb5b7726d0cbd2/app/assets/stylesheets/css3/_hidpi-media-query.scss#L9
8
+ // MIT Licensed
9
+ @mixin hidpi($ratio: 1.3) {
10
+ @media only screen and (-webkit-min-device-pixel-ratio: $ratio),
11
+ only screen and (min--moz-device-pixel-ratio: $ratio),
12
+ only screen and (-o-min-device-pixel-ratio: #{$ratio}/1),
13
+ only screen and (min-resolution: round($ratio * 96dpi)),
14
+ only screen and (min-resolution: $ratio * 1dppx) {
15
+ @content;
16
+ }
17
+ }
18
+
19
+ body {
20
+ font-family: $body-font-family;
21
+ font-size: $base-font-size;
22
+ font-weight: 300;
23
+ color: $base-color;
24
+ letter-spacing: 0.16px;
25
+ padding: 0;
26
+ margin: 0;
27
+ -webkit-font-smoothing: antialiased;
28
+ -webkit-font-feature-settings: "kern", "liga", "pnum";
29
+ -moz-font-feature-settings: "kern", "liga", "pnum";
30
+ -ms-font-feature-settings: "kern", "liga", "pnum";
31
+ font-feature-settings: "kern", "liga", "pnum";
32
+ }
33
+
34
+ a {
35
+ color: $link-color;
36
+ text-decoration: none;
37
+ transition: color 0.5s;
38
+ }
39
+ a:hover {
40
+ color: darken($link-color, 20%);
41
+ text-decoration: underline;
42
+ }
43
+
44
+ h1, h2, h3, h4 {
45
+ font-family: $heading-font-family;
46
+ font-weight: 700;
47
+ margin: 1.66em 0 0.83em;
48
+ a {
49
+ text-decoration: none;
50
+ color: $base-color;
51
+ }
52
+ }
53
+
54
+ h1, h2 {
55
+ font-size: $base-font-size * 1.64;
56
+ line-height: $base-font-size * 1.64 * 1.15;
57
+ letter-spacing: (-1*(23/32))px;
58
+ }
59
+
60
+ h3, h4 {
61
+ font-size: $base-font-size * 1.46;
62
+ line-height: $base-font-size * 1.46 * 1.18;
63
+ letter-spacing: (-1*(22/32))px;
64
+ }
65
+
66
+ p, ul li, ol li {
67
+ line-height: $base-font-size * 1.5;
68
+ }
69
+
70
+ ul li, ol li {
71
+ margin: 0.5em 0;
72
+ }
73
+
74
+ code {
75
+ font-size: 85%;
76
+ background: rgba(0, 0, 0, 0.04);
77
+ padding: 0 0.2em;
78
+ border-radius: 3px;
79
+ }
80
+
81
+ pre > code {
82
+ display: block;
83
+ }
84
+
85
+ .container {
86
+ margin-bottom: 3em;
87
+ }
88
+
89
+ .articles {
90
+ ol {
91
+ padding: 0;
92
+ margin: 0;
93
+ li {
94
+ list-style: none;
95
+ }
96
+ }
97
+ }
98
+
99
+ section.header {
100
+ height: 65px;
101
+ border-bottom: 1px solid #ddd;
102
+ h1 {
103
+ padding: 0;
104
+ margin: 0;
105
+ text-align: center;
106
+ font-size: 25px;
107
+ line-height: 65px;
108
+ }
109
+ }
110
+
111
+ mark, blockquote {
112
+ background: transparent;
113
+ transition: background 0.5s;
114
+ &:hover {
115
+ background: #d3f7d2;
116
+ }
117
+ }
118
+ .twitter-share-button {
119
+ margin: 0 10px;
120
+ background-color: transparent;
121
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAUCAYAAADPym6aAAAFf0lEQVRIiaWWz29V1RbHP2vvc3+0VBMSwISopdTbUq4/eKV9PNKBaSCoExi8cBGqCB3oyISBfwCJcWA0mhgHTJQX+5R6Mf4ATGTggKTB9/KAF0lK27SFlkBinr8ClIZ7z9lrvcGloYXe2x+s0cna65zP97v3XvtsYZlRLJpvzo8/byL7gCdFOGJpfuxobr4xUzMwPPxIV2vrlIjYchi7i+YbmHxeHftQfVIkdeS2lX88XrjH6P1k+JFPe1unBODcyMgq1XT+r21NZxYD+PfwRJPXcATYcd/QJTN7y0x+8469JlzraGv+AGDvFyOrIly+b19uUYxXixNNTuyIiNshzmOmiDgsJJc0JG8Fwm9RVLfXkvjaZy83f+AAJPhtzvTEfwYv71wIcPHi5Eqv4at5TABsFJGTznHWoCvAqXMjI6sAUlF6W1S/4sRrxYUZ+z6/uNJZ+Mqnszs0JIS4hCYxIS6BcxsRdzKKsmdNky7g1N4vRlY5AEQ2AI+KWP/5S+OHikXz1SDlVHIQaK+hwwOJwE1v9nYEGQBMN3gfPYrz/QeOXzm0u1isyoj8ioNRtr49uTP9wJgmMSLi0ZCI8zcRezsV1WdchSFTd+vqDD5sfvryyQtDo1vnpRgv1DAxE1mDxyTo4U2trdcBxMmUhgRU68RHH9ZL58n9xYn5GU5e0BCqftxMwfmsGI+ZRYc/KzxxPQJw3s6oEqjMJgYvmblt5wfHflAn/ZbYQOfTzddFRIH6RRiZlhD2bH6mZWgmoWJnKJeCYT7EZXwq85Im8bbXild+wLTfZbIDjbvWXj8sopjVm1U/H0QETKdDiPf0vVxhyMzguaHLH2H2ZpV3/zQYd8akwRaExxcwcjOJNf+353LXZif394995NOZN0NcnlGEj9KAEZL4T2DczCZF2CLiHzedf1VEHKbhZkgs//krFUYEcH5wvAflFxMbAmmb592VAh0mdCxgYCZuZTSamp14pX+8x6VSv4Q4HhLn20wDmFUauCJupXjfIc53aFKmmomZCUC4lYrvMSo9IlJnYu+AtCxSaO0wJjZtWndjdsp5qUtl698Ba5lPpJlWTqbyHUy15ufFeUAmjh64x3AALhW+Aya52yMPGyZy9v6foLfwXen2jUkXpR+a4bwHszkMB9Cey/0q4t4A/nhYCKBiduL+5NFC7lczfQPTP3w6y6z2XHKEuKw4mcNwMw+b25pOY+y6K6K0bIrx063/Xf3XfEN9e3KntZzs0iQ5IU5KyNLN+FQa0/DT+tXr5zDcnCqxbhNpY/nTZeLk3e7u7qS6Eut23reZqrCMG5iZmUPePdwtcxhzjIhxDMgC6aUjQODL9g1Np2rVqHBMkzgbZeqXzIgydYS4/OU/Cg8y5hjZnH9qzJm+iNlpoLxEzmAc5NBCN91/Fp4aS0he1KR8WpxbNMOnMoS4NJipc4eYh1F1C10YGt2q6t5D6FoEZ9yZ7mzP5y4tVhjA/uLEVoH3xEmXhhq7MZ1FQzzuVHYeLTTOy4jMTGbP4s8/j62J07LdzF5H2LIIPQMeev+Sz43WqBG41xGvfj22RpJoO9jriGypZkKcu7sS8YCUQ+/RnuaqDLkwOrraYtdjRifQCOQQ1iysX343s4/rufN+Pp+fqlV5sDi62iTqQaRTQ2hEJOej1Boz0OS+3SWC8xHOR4Sk/LuYfXzbpt8/XqjNEIALw8NrVVO7BQoGzwINVepLwJAI36oPfZ0tLZcXNlyJ3mNX1yY+7EYogDzrnGtwPqJyyzWcjzANaBKXEBkS57510Pfp3xsXxXigR/47dGVdYroRkfVibDesAfge4aqpDq+gPJrP55d6EMyJA99cWUeQjQrrUd0uWAPmvsfLVYiHp7U8erywNMb/AWjzhn4ByoGeAAAAAElFTkSuQmCC);
122
+ background-size: 50px 20px;
123
+ @include hidpi {
124
+ background-image: url(data:image/png;base64,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);
125
+ }
126
+
127
+ background-position: 0px 0px;
128
+ background-repeat: no-repeat;
129
+ overflow: hidden;
130
+ display: inline-block;
131
+ text-indent: -999em;
132
+
133
+ width: 25px;
134
+ height: 20px;
135
+ line-height: 20px;
136
+ &:hover {
137
+ background-position: -25px 0px;
138
+ }
139
+ }
140
+
141
+ #content {
142
+ width: 100%;
143
+ max-width: 700px;
144
+ margin: 0 auto;
145
+
146
+ @media screen and (max-width: 730px) {
147
+ margin: 0;
148
+ padding: 0 15px;
149
+ box-sizing: border-box;
150
+ }
151
+
152
+ h1, h2, h3, h4 {
153
+ text-align: center;
154
+ }
155
+
156
+ h1, h2, h3, h4, p {
157
+ clear: both;
158
+ }
159
+
160
+ ul, ol {
161
+ margin: 1em 0;
162
+ }
163
+
164
+ img {
165
+ max-width: 100%;
166
+ }
167
+
168
+ section.articles {
169
+ header {
170
+ img.intro {
171
+ width: 100%;
172
+ max-height: 200px;
173
+ object-fit: cover;
174
+ overflow: hidden;
175
+ }
176
+ }
177
+ h1, h2, h3, h4 {
178
+ text-align: left;
179
+ margin: 0.2em 0;
180
+ }
181
+ p {
182
+ margin-top: 0.2em;
183
+ margin-bottom: 0;
184
+ font-size: 67%;
185
+ line-height: 1.7em;
186
+ }
187
+ footer {
188
+ margin: 0 0 3em;
189
+ font-size: 60%;
190
+ line-height: 1.6em;
191
+ color: rgba(120, 120, 120, 0.8);
192
+ .meta {
193
+ margin-top: 1em;
194
+ }
195
+
196
+ .more, .eta {
197
+ display: inline;
198
+ }
199
+ .more::after {
200
+ content: '·';
201
+ }
202
+ div.author {
203
+ float: left;
204
+ margin-right: 0.25em;
205
+ font-style: normal;
206
+ font-size: 100%;
207
+ margin-top: 0;
208
+ }
209
+
210
+ }
211
+ }
212
+ div.author {
213
+ margin-top: 2em;
214
+ color: rgba(120, 120, 120, 0.8);
215
+ font-size: 85%;
216
+ font-style: italic;
217
+ }
218
+ }
219
+
220
+ figure.intro {
221
+ position: relative;
222
+ margin: 0;
223
+ padding: 0;
224
+ width: 100%;
225
+
226
+ h1 {
227
+ font-size: 13vmin;
228
+ position: absolute;
229
+ top: 35%;
230
+ width: 100%;
231
+ margin: 0;
232
+ padding: 0;
233
+ text-align: center;
234
+ color: #fff;
235
+ text-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
236
+ line-height: 1.1em;
237
+
238
+ }
239
+ img {
240
+ width: 100%;
241
+ min-height: 85vh;
242
+ max-height: 85vh;
243
+ object-fit: cover;
244
+ overflow: hidden;
245
+ }
246
+ }
247
+
248
+ footer.branding {
249
+ position: fixed;
250
+ bottom: 0;
251
+ width: 100%;
252
+ background: #fff;
253
+ margin: 0;
254
+ border-top: 1px solid #ddd;
255
+ padding: 10px;
256
+ color: rgba(120, 120, 120, 0.8);
257
+ font-size: 15px;
258
+ line-height: 22px;
259
+
260
+
261
+ span.author {
262
+ @media screen and (max-width: 580px) {
263
+ display: none;
264
+ }
265
+ }
266
+ span.date::after {
267
+ content: '·';
268
+ }
269
+ .addthis_sharing_toolbox {
270
+ float: right;
271
+ margin-right: 15px;
272
+ margin-top: 2px;
273
+ }
274
+ span.categories {
275
+ float: right;
276
+ margin-right: 15px;
277
+
278
+ span.read-more {
279
+ @media screen and (max-width: 470px) {
280
+ display: none;
281
+ }
282
+ }
283
+
284
+ span.category {
285
+ &::after {
286
+ content: ', ';
287
+ text-decoration: none;
288
+ }
289
+ &:nth-last-child(2)::after {
290
+ content: ', or ';
291
+ text-decoration: none;
292
+ }
293
+ &:only-child::after, &:last-child::after {
294
+ content: '';
295
+ text-decoration: none;
296
+ }
297
+ }
298
+ }
299
+
300
+ div.contentfocus {
301
+ float: right;
302
+ margin: -10px 10px -10px 0;
303
+ padding: 0;
304
+ font-size: 10px;
305
+ line-height: 11px;
306
+ background-size: 55px 42px;
307
+ background-image: url(data:image/png;base64,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);
308
+
309
+ @include hidpi {
310
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABUCAYAAABjugIwAAAWk0lEQVR4AezQMQ0AMQwEsPz+a/kGT0heKVTdKtkQXLeSrOKcSwAAgK/exMz83Zt9cw2K6j7/+OT/T/qiuTSZ6Uw7aaftmzYzTfsiLzqZ1rbjZLzEXGIiiBpZYBF2YbkgARE1WO9gYkAucgGNGpMJ6URiBBFFuaDxomjQTlQQ8YIXFDDiRdTg8+vzPexDd477W88QkRnkN/PM2T27C3t+n/Pcn53369jY2D8lJCT83eWKMyQmJv4fcXFxf0lOTv5dQUHBz5VS/ze8W4NXXXiMIT0fFhbxSkRE9Lxp08K/DA4OPRQUFHzOZgu+HBQUcouP3RD342ssF4KD7c12+7RN4eHONKfT5c9AX6ivr39ieEcHeKWmJj8XHR39VliYszgoyH5q6lTb7cDAIPXuuzY1ZcpUQyZPftebyOv83kCFz/BnFYO8FBoats3hcEWzlv52eIcf8Fq9evWfGVgyw2rgDScWhtEHiSZNmkIBAZOVv3+AmjBhonrnHT/yED7nb7w2ceKkvs8IUAHJGnmWNTc7JibmpeEd/5GL/dJz4eHhibyh7YGBwZ4aZYDy8wOkCQBCrDnqvfcSacGChZSenkHZ2TkqJ2cFZWZm0ZIlqTRz5izldEYS/gaAMkz+G30gcV4Afh8SEpoTFRX1h2EC/VgRERFj2R99Gxho89QSt1b5UUiInRYuXEQlJSV06NAh1dbWRjdu3FB3795V3tbt27epo6NDHT9+nCorKykjY7mKjHQR4DNEaK38DwMg/GVkZNTMLVu2PDlMw8JaunTp06xhS3nzbkyZEiibSf7+E1kCaMaMJNq4sZTOnGlVRIq8MCIIL3kscs+6fPl7+uabXZSamiaa2AdQNJC/S3VUVPyLw2R8rKSkpBfs9rCaqVODRMvYDE42NCI5ebaxyd3d3X0QdFB00ASot/c3NjYZWghwrIUePtCm2Le2xscnBgwT8rKio6ePsNnsxzjwwOZh4wBMORwRis2V6u6+adYq7XOA0L1uhigi6/Dh/6g5c96HOZbvAd8K33eTtc81TMpjcZI8hkPzNo7wJEo0Nm7x4iXq7NmzOiAEMYEhESvgzADl3M2bN9W6dZ8a38UjEuUUIrCH/d784SSeFyfB/2RT1C7QAgJ6Q/vi4mL1ww8/9AETaAMKzvTZ/fvrKTzcgYBIIlpoHqLTWY80NITcHOY3CTQAw+Pt26tIs+kkooNi4b2k8Y/kzcyeONGi4uLiDb8n8Pg73na5XCGPJLTp06c/a7MF7YBPE2gwkbW1tUqWb23TP7e4zOB0AY46d+4854gJrHm98CDBwSFXOc8c9UhBq66ufpx92lo3NACDOUJ+pYNFJrFgKnXPzbB9v1++B3ytyxWNlMS40WAZOFE/mpQ07/lHKLmOsol5ZDHypy+++Pf9QMkiHUiNKOvAfZva7747opD4wzrguyPPCw0Nz0PRe8hDY9/wS86Nmt3JtVGy+uCDZdTT06MHo99Mi+D0WmnlnKfZrKmpgdbBSgi8O9HRcW8NeXB8oWni11BjdDojqK3totglvV/rv9/Sr/v/DzJ/HxyzsnJgJfpMJpfm9qelpf1sSEeRfKEdbgdvFHqrq2vIHBBYhOZLm6wk4FYIk7ccsr29nbgwIN0GdCsoMjLWMWTBcQU/CyUkXCzaL/PnLyTO1SSPsrafGlqWNc70fr1tNYEzJellZZsM3yxax7nofm7uPjXkoKWlpb+I7rRUIdjBU0NDgza/0vkZC7mYnoXF93uC1ZXJbty4SWgjsb8TX9fDUeekIQfO6XQmongsNcgFCxYRt2DofiG7TkxmVQ9WD5pI003QFKXJfK6iogLmXswlR5jTypDqDBloEydO/H++sAo2KQKO6up2kMXw3ryx2mUhRejH0v+ty5c7EVwhPZBCdCePQPzxYe3ryJEjn3399bciBzBvi3mJoXXh4nCRXKilq1evkrlCYWXDuVlKLS0tVF9/gKo4sKmuqaWDB79Vra1nocE++3IoHl+40IYoli5wJNt7bDOO8tjzOTdf5bM6UQUFhfT22359eZ3DERn1MIC9+uprTm6BHc7OXqEGMCgJnSFVEoTRubl5SpYVUynAyss30/vvpxBX6d2jCwHk7xdg+EuuYiiMKRz57qg2P2tsOk7Z2XmUm1ekIHn5K0nE/HxFbiEgys2lzesOHDiA6BIdDSNI4QCsdKDM5csvj3tm1KhxDq7vHl65chXfrK3q1q1bAwbuMR4DKBFwKNbu3PmNOcQmTbXeWE1NTZSSMo8YutEF5+YqfAvfBP6G2fXjCBXwcFPYeDblq682qDt37pAZ3LFjjfThsuVqeeYKQzKzcsn8GEdIxvIV6jxrp95si7m8jBEI3EioY6KycmbRokW/epAbOGLEiKdHjRobbrOFNBQWFil0/zGmwZaHOxj7Bwacw+H4Kc+NNIiZ5BolXbx4UR++m8A1NzejjQJAAh5/A/MmqrBwJeXnF6h58xbgbsdrNH78O5SWthQ9NbNWYy5FbdtWpaqra7kCUkdVfKzmI+eSxrkqt8jjK1e6yEtBgMzFgrS0D0i+H2tDNw/l/u0BmcSnRo9+1cmzoYd7gZ0BMO5YnDCA7d27d+DA8UX8nqF1YpwOoXNC4gyCet8HnPgzlZw8y4Alg0I8wQUNVEZE6l7IBWGy5s6dT0kzZ/GNcclzc60n9da65GSGV1z8Bfu5CW4/F6xmzZqT/GOBjR37WgRbqsOrVn1sFLivX7+Om9gTGGTgwKWkpASgsiBpQPpHGR676bvftmHDRremTYU/gw/DtJa2xAU/2NXVRV40w6Q5WtNHuvfcG/T8DxxMv5+fv3GNcAkcWeb15zcNY8aMeZJNYhBHpwdyc/PV6dNnxCSagQ08OE5SYxFt4aJwV2IkwFeFRE7zUJBKTExy+7RJKioqGv7Eqzn1fOwlUtWc1/4diM/WD14WwWpsbERwoiAAx+Wwz9wdA4hVkxjCwA7C9IsPM5tEnQxQ4u2KE3AIHsrKyrTmSzZNOs/8OZm6UmvWrPXVYCX9a/0vWmt7g6bF0R2xWTO+K3w5jzvU8OmfWAHGGmZn8/otpxVIaeCbNRr2kMGFhIQb4CTxlrEEX1UQFrVjxw5shGwG+7CDZAIuzy03Ujs6Omn3nr1q3z7eFJZ9PFPSKwdo7756hWOv1OM5/IrP/FKAcrBFPAEmoxdICQDucavA4MNgYfTABgEcR4CxUupizWEgO8lKV/vrrzfCTBr5EQZ0Tp06ba2uqX9NHTl6TH2UnkVZ2XkI+ZXnUR5DJC0wpwM6cO3tHcrdLXB3xu01ksuZ87DRo8eGcZQNkwhNNYCdPHnSDGzwwdntAs7QOA7Daz0DBS2I0tJS+DYBh7tRWxG53+ZC3HmcylieQzkrCig7J1+J4DmLx/k8nCdUWeS7+ipYX7p0ic2jsw+c3R7qoXEA9vIzr7wymoEFNRQUFCHoEA1j7d+nBzaY4MLCHLEeppKHW7fqNMRzg6CZ7i6zYSr54vZZGnKFmP2bvLWr6yrDa+J04rhbmkVMz4+jyoLN9TTP2v9x/vx5NFNVbxIeyGPrYZh4eoKBiYY1SNBhXcMGGVx0dGycR1RJ69eXWJqBbGk5aURoAryoaJW3HEsLzkN+TB4nn/eZx0FzoGm40Xo1Lqxi3Lg3wuHD8vIKWMNOI+h4YBr2kNKBGSEeUSWxM7YEDuFwfPx72nRA12rxEvh47LTvzrk+gvRdV+VfC/F3DJAIGF2CdgCDX/adh+kFadOmTZsGDRzmJ//K5uMWwEnXWwaD7tccxeQXIlH+rAEwJyeXK/Z3tAk4wnI2W15uDEm6vJlRfeNV/9gcSH1Nb7453ugO5OcXAhgi0n5HiTt37jRSoZKSrwYP3OzZs3/BJq8V4KA5Ec5IunbtmmycT+2BhsXExBnQ3J+n9PTlqNkRfAVKXVxM5priFaqo2AoTRQ6Hk44cOWrSpL4/zKMSPQo3zt2eHsKxx93MNUG0BA4+cNu27SoiwoUBIoCChsGH9UvDSkvLjMd1dXUAh5x38MAVFBQ8wVXtOmmiIkpEpcGsFRpRDWyGgkNCyV2vJLRyUGSeMyeFMNa3eHEqsR81oCI4eOON8ZSZmU2Aat701rPnaMOGUiotK6eNpeVqY+km2l5VCy22Ou4nfT3aurWSOxZzVXY2gJ20BKyychtPatfdc3737t0qNnY6u4MYtWvXLkxzAxx+pTRY4CSXC86QkTwEKDABvnI5szZyo5T4oqStwzKp75ekEJyb4OevWAim+IL3/Esd5bbOso8ypZVjpAZr1n4KzbE0+QxgvJm4aRRqiRaBQRjIbnQ1uAK0xv18F1IeHPHcgITIlDsbmN00wFVVVQ0qOMyb+LPGkSThc+f+C+aKLPyQw6Pq0UHr1n1GCQkzoHGc3/Vq7+QpU3HBxBV5mBbuPHSTzn82n2ihopWr6ePVnyjIqo8/oS/Xb0C3wic4wNm8uQ+YRIkGsPr6essmkb+74t+oq/Xr16O6AjhG4l5eXm68vnbtJ8Y5NElxRPVoUMHxsOhv8JtqgJOQme9W2WCfrRQRWTxdhTyLkOfV1tXhjiX8Leka+Coy9/rDLnWli4WPkGvXruveD2DEA0GKu+4AJomzBZNYyaA3m8+juwFQAIifkRk+zeWKUlyI73vPkiWpCt18gNuzZ8+ggpMKShHPVEo+x3fXOk3HW18wJmuTx6QpYPvM1cwaVlGxRXlqGGslR4unLAUdMTGx6sMPl91znnNYADEAyrnPPy/GOQO2mNS4uOlIKSxBQ144oODCwiJGsp+7456pRAWdOjs7yVelX6d51M8fNnqEl16j2F4fVkn/Le8OfuO6qjCAS6jUafdsWWWXDZLFIssm4wSDaMHUeGzXUf8BJBtQQaVyXbUVKq6LGwhGBFWotWtBjJQVCDVAi+0mYskiEchIkUKKxKZIlCAh5Mf5jXPM8Mzg914VJ/E86cqZ954nM/d755zvfOfc62eemdUXg9Y3UjrEKZNfPs+CWBNhOc+Fpgm4aLfYpf5cJVfa6/3zs3DTSj93Fri5uZ88GE0+v0BSUkVZXf1xyV1Wa1otAQfRnvdWEaW5xLfewhITsOvdgKXLqjyWl1eAgR3uuSYWz87O5Wvu0r2kwDyHqWKZPQFT7fcZxdn33vtzcQALPp54NHTHf2UnMxZ18+bNvVaTR/XG2KLJ+jhsknbKwiK5B5TJqOwSy2Np6fvyzsJmOMAA4N57llxzr5aHzmpXD0xeX1lZ6Vhl7Kb0fwFTr1xcfNW69N8dwCL9Lw1MTEz+CjkZH98prMYWFfohy0JzFeB6g73PcmHxikvEbk1gTsaHEX/1wkjE19Z+SvEx+VxmXi9bGHYJtPj+3+62aKSGYrLHJYqzYu/W1h/NGeH93Var9cXjx48/dCDdt9Ew+pkAjtVxmXo15CtlgPaNV00WNgKMhQGMlgiwRtJUacjFALW6urp77uWXF+ir//P+6ekZ7ev7xTAWlp1ddkQqqEbRf7Nx8uSpx6MYe6Q5Co1iXfGRyMPeEOtSxvKlPUmOO7HMSm6nBS+S8yJUFf+XyWjkEuVWrCUq3iyGBdlsoCxRkbCci2u/rPUQpIX5bGlhPnN4qt8ODX16CmB3c4uMj4ep7+62oB9yZuYr9tpK5HpRdaPiwkYs8R8mdXtu7jkBn2U1Bozwy6WR1+R1sbFp8dRTX1dA7QAXvY/Fa6/9Jy7pgwScpLoOYJncA2xx8SwLuxyNROMJ2F0/zpw504qn6G+5iwE5azaCtKS4Wv7Vm8T44ibz2WefS9IRgDWOYUhAgPS14vXX3yiiMAxAhd5YAj1P2EblA8xZMU4pxmvpAMsMgC9UBQyTDdIhhr2qgHwlXOJkxrB76giL+2om5XonY/HEtslWFSiDVgU4eVgIuSzMloeAaiRN5ZBvIR3AEr+8J3AAqbvaz0uXLgGLS6SKsDKa5L6WBvwSYN7PXFx+5JHWxODgZx8+MCDqx7u5B0Ih+G5Q2h3wdizP072tkcZRZZOZcInyMBaW4q/J4BLrA1ZKpMVf3cReo+iAQTxYnHPcpYQ5VY+LFy8qy1QGjEtkYWNj9zxg5fa9J4+E5Z2PAbxcGy52lPpMSlWDkoWdO7cUlnW9KWCKoUVsqdhR6L3f5uZm8eabq92qhoTa4kUPiBINQJEUFL5yDMMSdwDb2gWs1bqPACuDNzU19YNoqpHfJduM0TY52++//9fuPM8XN3ES1wDse92A1VI6EI4EjXvjCpeXl7lGDJTl0AzD0n7UrS26DlACMTdZGTBuWyNSusTo/BofHBx8+H7fd/lIuKVvjk888U9kBds0kBb5ENE3Kt1FFDABhiUmYE1YogmnBwLZ+1HlnVdisf0Todg1fS/FCy+8WHZ3YlotlgiwhYVXfK/1oaGh8SQdh+YIyxuJHpU/ZZ5nKJSqbMf+WQHYOTGskTQlLmWutba2xmqo63RB7pGGSLKSg3F/LI6ygYjUzcNS6bCyCGBc4galI2n9YTy0rX8i3ObP221kZVTcS5bYuKfDwAiBQOnIEksKv6yPm0zFnosEHIAt9UI8qrpEn1HzLRITD+F6Wek4tMfw8PBArHF+MqzuuhgGKNJUXcCoHN0lFHQdQOph9EBJc1aeAaWtgBQl/+Ii61hYAnbt2jX5nVj9Tqv1qRHf5dADdvTo8ED4/9FIDzapBhTwW7f+zu2YnNrlFeCwqvPnf+i13e+QGRRfMu3n7r0vvTQPPPeLeayyljRFS8QSkQ5KB8D6wMKODvD/AKPLpTTVMHE26V2AfIuVofLiFwYJGCA6X46B3GMtpQNgknS0HunoG5cIMCUKgHWTjqZKh614WQ09UdsbEMW2559/sQg9VKOONgH0Xw7m92q7RFUGgN3eNZ001U6WeKgPT2V82TGAiTdVlQ4gAGd6+stIhn//V9UYQAqRxF5uDyN07cKFNWDSFdXKnHOPxLoBYFu3WWJ7g4X1LWAmowJgCp7UFEPwt8wYGNbRsSygUDryd0wuMoLue21HdferOle2MPWwBGxrC2Adl7gRifNoX8Qw6kAChnSIYSZDnKjiElmTST979jtAzDZtrJC7ynpYtnAbAHIu1RE/6Yi1AOMF0sLa7XbQ+pOPI1CHHjD6Gx0uALtigrFEgNWVppIdpkUlENyh/A6YYlayR8Oacbpivq4IWFnp4BJ/E+LvyLFjxx489IDx+wkYl6hk4ek1KQ0S52xrwxBTrtJUiohIlp2jeiAb4hag7RfGUusChnRInJGOd06cOPH58BYf7YsYFhurTESB9DKXKC40ZYnl8fTT30A+UPlkjd299frtFS9dAzJLFN/2BezGDeIvaaoDmDzs7XCJn4vv8kBf0PpTp4YnQ965Ig4B7IMPKkpTNVrfgBJ/HKmIv2bVCwxUnzxVAbAbHqqO0sGSARYs8dG+Aez06dNfiCr2uqeVPidxFtgrWlgNNf9ngMvVLnVHAtYl/mbX1Ph6KB2jXGK/WJgVOBu5t5bJaChNVe6RF8Nsvla6VrMe9odwia9EQy7AhkaRjr6IYQHYGMW7DFh9C6s/lF5ixWktC8u9RFjY/PxChyX2TR6WgIVLlIeZBAH9oADrpviSbxbd0yrLgHm4AIYl9k15ZXR05qHHHhsJwCbfFQ8ko3oVDxSwGq7UZ0KIdkjH7wHmz5q93TeAOSYnJz8ZbQO/JsxiXnFYoFGDJR7cYIFXr17tABYbA2gcUjX/ix3p7jeXGNP8sbq/82+X9C1H9iJLtgAAAABJRU5ErkJggg==);
311
+ }
312
+ .powered-by, .contentfocus {
313
+ float: right;
314
+ clear: both;
315
+ display: none;
316
+ }
317
+ .powered-by {
318
+ font-style: italic;
319
+ font-size: 10px;
320
+ }
321
+ .contentfocus {
322
+ font-weight: 700;
323
+ }
324
+ a {
325
+ display: block;
326
+ width: 55px;
327
+ height: 42px;
328
+ }
329
+ }
330
+ }
331
+
332
+ ul.menu {
333
+ list-style: none;
334
+ }
335
+
336
+ blockquote {
337
+ position: relative;
338
+ font-weight: 400;
339
+ font-style: italic;
340
+ font-family: $body-font-family;
341
+ margin: 1.5em 0 1em;
342
+
343
+ &::before {
344
+ display: block;
345
+ content: "\201C";
346
+ font-size: 300%;
347
+ position: absolute;
348
+ font-family: Georgia, serif;
349
+ left: -30px;
350
+ top: -15px;
351
+ }
352
+
353
+ p {
354
+ margin-bottom: 0;
355
+ font-weight: 400;
356
+ font-style: italic;
357
+ font-family: $body-font-family;
358
+ }
359
+
360
+ em:last-of-type {
361
+ display: block;
362
+ float: right;
363
+ margin: 1em 0;
364
+
365
+ &::after {
366
+ display: block;
367
+ clear: both;
368
+ content: '';
369
+ }
370
+ }
371
+ }
372
+
@@ -0,0 +1,9 @@
1
+ #content
2
+ %section(role="main")
3
+ %h1 Page not found
4
+
5
+ %p
6
+ Please try another page or, if you think something is wrong with
7
+ our site get in touch and let us know.
8
+ = haml :sidebar, layout: false
9
+ = haml :footer, layout: false
@@ -0,0 +1,22 @@
1
+ = haml :header, layout: false
2
+ - if @page.intro_image
3
+ %figure.intro
4
+ %h1= @page.heading
5
+ %img(src="#{@page.intro_image}")
6
+ #content
7
+ ~ @page.to_html(self)
8
+ - if @page.metadata('author')
9
+ .author
10
+ = author_biography
11
+ = haml :summaries, :layout => false, :locals => { :pages => @page.pages, :heading => :h3 }
12
+
13
+ - if @page.articles.empty?
14
+ - if @page.filename =~ %r{/pages/index\.md}
15
+ %section.articles= article_summaries(latest_articles)
16
+ - else
17
+ %section.articles
18
+ %h2= "Articles on #{@page.heading}"
19
+ = haml :summaries, :layout => false, :locals => { :pages => @page.articles, :heading => :h3 }
20
+ - if ENV["FACEBOOK_APP_ID"]
21
+ .fb-comments(data-width="100%" data-numposts="5" data-colorscheme="light")
22
+ = haml :footer, layout: false
@@ -0,0 +1,26 @@
1
+ - if page.date
2
+ %footer
3
+ .meta
4
+ - if page.metadata('author')
5
+ .author
6
+ %a(href="#{author_url(page.metadata('author'))}")
7
+ = page.metadata('author')
8
+ - if page.date
9
+ .date
10
+ on
11
+ %time(datetime="#{page.date.to_s}" pubdate=true)= format_date(page.date)
12
+ - if (! page.categories.empty?)
13
+ .categories
14
+ In
15
+ - page.categories.each do |category|
16
+ - if category != page.categories[-1]
17
+ = succeed ',' do
18
+ %a(href="#{path_to(category.abspath)}")= category.link_text
19
+ - else
20
+ %a(href="#{path_to(category.abspath)}")= category.link_text
21
+ .more
22
+ %a(href="#{path_to(page.abspath)}")= page.read_more
23
+ .eta
24
+ = reading_time(page.body_markup)
25
+ read
26
+
@@ -0,0 +1,2 @@
1
+ #sidebar
2
+ = haml :categories, :layout => false
@@ -0,0 +1,42 @@
1
+ - if ENV["ADDTHIS_PUB_ID"]
2
+ %script(type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=#{ENV["ADDTHIS_PUB_ID"]}" async="async")
3
+ - if ENV["SNIPLY_PROFILE_ID"]
4
+ :javascript
5
+ var sniply_profile_id='#{ENV["SNIPLY_PROFILE_ID"]}'; var s, r, t; r=false; s=document.createElement('script'); s.type='text/javascript'; s.src='https://ffb2efd5105ff0aedbc9-9cdacdeebf0faa19b665bf427f0c8092.ssl.cf1.rackcdn.com/js-snippet/snip_external_links_library.js'; s.onload=s.onreadystatechange=function () { if (!r && (!this.readyState || this.readyState == 'complete')) { r=true; }}; t=document.getElementsByTagName('script')[0]; t.parentNode.insertBefore(s, t);
6
+ - if ENV["SUMOME_SITE_ID"]
7
+ %script(src="//load.sumome.com/" data-sumo-site-id="#{ENV["SUMOME_SITE_ID"]}" async="async")
8
+ - twitter_handle = ENV["TWITTER_HANDLE"] || "getglu"
9
+ :javascript
10
+ // Twitter tweet widget
11
+ var tweetClick = function(ev) {
12
+ ev.stopPropagation();
13
+ ev.preventDefault();
14
+ var el = $(ev.currentTarget);
15
+ var url = el.attr('href');
16
+ console.log(ev);
17
+ window.open(url, 'twitterwindow', 'height=450, width=550, top='+($(window).height()/2 - 225) +', left='+$(window).width()/2 +', toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');
18
+ }
19
+ $(document).ready(function() {
20
+ var tweetButton = $('<a href="https://twitter.com/share" class="twitter-share-button" target="_blank" data-via="#{twitter_handle}" data-related="getglu" data-count="none">Tweet</a>');
21
+ $('mark, blockquote p').each(function() {
22
+ var el = $(this);
23
+ var tweetText = el.text().trim().replace(/ +|\r?\n|\r/g, " ");
24
+ var thisTweetButton = tweetButton.clone();
25
+ thisTweetButton.attr('data-text', tweetText);
26
+ var queryString = $.param(thisTweetButton.data());
27
+ var url = thisTweetButton.attr('href') + '?' + queryString;
28
+ thisTweetButton.attr('href', url);
29
+ thisTweetButton.click(tweetClick);
30
+ el.append(thisTweetButton);
31
+ });
32
+ });
33
+ - if ENV["FACEBOOK_APP_ID"]
34
+ #fb-root
35
+ :javascript
36
+ (function(d, s, id) {
37
+ var js, fjs = d.getElementsByTagName(s)[0];
38
+ if (d.getElementById(id)) return;
39
+ js = d.createElement(s); js.id = id;
40
+ js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.3&appId=#{ENV["FACEBOOK_APP_ID"]}";
41
+ fjs.parentNode.insertBefore(js, fjs);
42
+ }(document, 'script', 'facebook-jssdk'));
@@ -0,0 +1,16 @@
1
+ - unless pages.empty?
2
+ %ol
3
+ - pages.each do |page|
4
+ %li
5
+ %article
6
+ %header
7
+ - if page.intro_image
8
+ %img.intro(src="#{page.intro_image}")
9
+ %h1
10
+ %a(href="#{path_to(page.abspath)}")= page.link_text
11
+ %p
12
+ - if page.summary.nil? || page.summary.empty?
13
+ = generate_summary(page.body(self))
14
+ - else
15
+ = generate_summary(page.summary)
16
+ = haml :page_meta, :layout => false, :locals => { :page => page }
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nesta-theme-median
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Glenn Gillen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: nesta
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - me@glenngillen.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - app.rb
68
+ - lib/nesta-theme-median.rb
69
+ - lib/nesta-theme-median/path.rb
70
+ - lib/nesta-theme-median/version.rb
71
+ - nesta-theme-median.gemspec
72
+ - views/analytics.haml
73
+ - views/default_head.haml
74
+ - views/error.haml
75
+ - views/fonts.haml
76
+ - views/footer.haml
77
+ - views/footer_scripts.haml
78
+ - views/header.haml
79
+ - views/layout.haml
80
+ - views/master.scss
81
+ - views/not_found.haml
82
+ - views/page.haml
83
+ - views/page_meta.haml
84
+ - views/sidebar.haml
85
+ - views/social_scripts.haml
86
+ - views/summaries.haml
87
+ homepage: https://contentfocus.io
88
+ licenses:
89
+ - MIT
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.2.2
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: A typography focussed theme for NestaCMS.
111
+ test_files: []