jekyll-layouts 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/jekyll-cleaner.rb +26 -0
- data/lib/jekyll-layouts.rb +92 -0
- data/lib/jekyll-writer.rb +41 -0
- metadata +117 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6a3633e3dd994b2b1814738fef1841e11defa43d
|
4
|
+
data.tar.gz: 16a4844b7748cfa11a17a4374323382e7fa222dc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3d0414ce774d26d1b5339707407956ea2ccd84d2042c70036a5dbd31388d5ea5cb52f51fda2144296da18af72aa6db53e8a781a725a608bbf312788c7bb6e83f
|
7
|
+
data.tar.gz: 001d8728ac0878505e9cea29eda7f825fb0ddf2676b05b4c2f1d0d01ff633adf48e783e8ebcb6578369545fcb5d8af8acdaa08e3d92546f4355ec12336fef9e4
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module LayoutsExtensionCleaner
|
5
|
+
# Private: Override the list of files to be created when site is built to include additional layouts.
|
6
|
+
#
|
7
|
+
# Returns a Set with the file paths
|
8
|
+
def new_files
|
9
|
+
files = Set.new
|
10
|
+
site.each_site_file do |item|
|
11
|
+
files << item.destination(site.dest)
|
12
|
+
# Keep additional extension files
|
13
|
+
if item.respond_to? :data and item.data.has_key? "layouts"
|
14
|
+
item.data["layouts"].each do |extension, options|
|
15
|
+
files << item.destination(site.dest, "index#{options['suffix']}")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
files
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Jekyll::Cleaner
|
25
|
+
prepend Jekyll::LayoutsExtensionCleaner
|
26
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
require 'jekyll-writer'
|
3
|
+
require 'jekyll-cleaner'
|
4
|
+
|
5
|
+
module Jekyll
|
6
|
+
class LayoutsGenerator < Generator
|
7
|
+
safe true
|
8
|
+
priority :low
|
9
|
+
|
10
|
+
DEFAULT_CONVERTER = "Default"
|
11
|
+
|
12
|
+
def initialize(config = Hash.new)
|
13
|
+
@static = config_static(config['jekyll-layouts'])
|
14
|
+
end
|
15
|
+
|
16
|
+
def config_static(configs)
|
17
|
+
case configs
|
18
|
+
when nil, NilClass
|
19
|
+
false
|
20
|
+
when String
|
21
|
+
configs == "static"
|
22
|
+
when Hash
|
23
|
+
configs.fetch('static', false)
|
24
|
+
else
|
25
|
+
raise ArgumentError.new("Your jekyll-layouts config has to either be a string or a hash! It's a #{configs.class} right now.")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def generate(site)
|
30
|
+
@site = site
|
31
|
+
site.docs_to_write.each { |doc| process_options doc }
|
32
|
+
site.posts.each { |post| process_options post }
|
33
|
+
site.pages.each { |page| process_options page }
|
34
|
+
|
35
|
+
site.docs_to_write.each { |doc| render_layouts doc }
|
36
|
+
site.posts.each { |post| render_layouts post }
|
37
|
+
site.pages.each { |page| render_layouts page }
|
38
|
+
end
|
39
|
+
|
40
|
+
def process_options(page)
|
41
|
+
return unless page.data.has_key? "layouts"
|
42
|
+
# Make sure we are using a clone of the hash to avoid overwriting defaults
|
43
|
+
page.data["layouts"] = page.data["layouts"].clone
|
44
|
+
page.data["layouts"].each do |extension, options|
|
45
|
+
case options
|
46
|
+
when nil
|
47
|
+
options = { "converter" => "", "suffix" => ".#{extension}" }
|
48
|
+
when String
|
49
|
+
options = { "layout" => options, "converter" => DEFAULT_CONVERTER, "suffix" => ".#{extension}" }
|
50
|
+
end
|
51
|
+
|
52
|
+
if options.is_a? Hash
|
53
|
+
options = options.clone
|
54
|
+
options['converter'] ||= DEFAULT_CONVERTER
|
55
|
+
options['suffix'] ||= ".#{extension}"
|
56
|
+
options['url'] ||= page.destination(@site.dest, "index#{options['suffix']}")[@site.dest.length..-1]
|
57
|
+
end
|
58
|
+
page.data["layouts"][extension] = options
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def render_layouts(page)
|
63
|
+
(page.data['layouts'] || []).each do |extension, options|
|
64
|
+
pagename = "index#{options['suffix']}"
|
65
|
+
case options['converter']
|
66
|
+
when DEFAULT_CONVERTER
|
67
|
+
render_page(@site, page, options["layout"])
|
68
|
+
write_page(page, @site.dest, pagename)
|
69
|
+
write_page(page, @site.source, pagename) if @static
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def write_page(page, dest, pagename)
|
75
|
+
page.write(dest, pagename)
|
76
|
+
end
|
77
|
+
|
78
|
+
def render_page(site, page, layout)
|
79
|
+
original_layout = page.data['layout']
|
80
|
+
page.data['layout'] = layout
|
81
|
+
case page
|
82
|
+
when Jekyll::Document
|
83
|
+
page.output = Jekyll::Renderer.new(site, page, site.site_payload).run
|
84
|
+
when Jekyll::Post, Jekyll::Page
|
85
|
+
page.render(site.layouts, site.site_payload)
|
86
|
+
end
|
87
|
+
ensure
|
88
|
+
page.data['layout'] = original_layout
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module LayoutsExtensionWriter
|
5
|
+
def destination(dest, pagename = "index.html")
|
6
|
+
#self.is_a? Document
|
7
|
+
dest = self.site.in_dest_dir(dest)
|
8
|
+
# The url needs to be unescaped in order to preserve the correct filename
|
9
|
+
path = self.site.in_dest_dir(dest, URL.unescape_path(self.url))
|
10
|
+
ext = File.extname(pagename)
|
11
|
+
if ext == ".html"
|
12
|
+
path = File.join(path, pagename) if self.url.end_with?("/")
|
13
|
+
path << self.output_ext unless path.end_with?(self.output_ext)
|
14
|
+
else
|
15
|
+
path = path + ext # if self.url.end_with?("/")
|
16
|
+
end
|
17
|
+
path
|
18
|
+
end
|
19
|
+
|
20
|
+
def write(dest, pagename = "index.html")
|
21
|
+
path = destination(dest, pagename)
|
22
|
+
FileUtils.mkdir_p(File.dirname(path))
|
23
|
+
File.open(path, 'wb') do |f|
|
24
|
+
f.write(self.output)
|
25
|
+
end
|
26
|
+
Jekyll::Hooks.trigger self, :post_write
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Jekyll::Post
|
32
|
+
prepend Jekyll::LayoutsExtensionWriter
|
33
|
+
end
|
34
|
+
|
35
|
+
class Jekyll::Document
|
36
|
+
prepend Jekyll::LayoutsExtensionWriter
|
37
|
+
end
|
38
|
+
|
39
|
+
class Jekyll::Page
|
40
|
+
prepend Jekyll::LayoutsExtensionWriter
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-layouts
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brant Wedel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
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: rdoc
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: shoulda
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: |2
|
84
|
+
Jekyll plugin, that allows you to output multiple format files with individual layouts for each page, post, or collection.
|
85
|
+
email: brant@bitbased.net
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- lib/jekyll-cleaner.rb
|
91
|
+
- lib/jekyll-layouts.rb
|
92
|
+
- lib/jekyll-writer.rb
|
93
|
+
homepage: https://github.com/bitbased/jekyll-layouts
|
94
|
+
licenses:
|
95
|
+
- MIT
|
96
|
+
metadata: {}
|
97
|
+
post_install_message:
|
98
|
+
rdoc_options: []
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.4.5
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: Multiple layouts support for your Jekyll site
|
117
|
+
test_files: []
|