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.
@@ -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: []