jekyll-layouts 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: 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: []