hyde-page-css 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6b19628b2044bbd6587c2c36f3b0af88a08e740d55ca4592b0a0accf893dc41d
4
+ data.tar.gz: f2c251830627641c2f5968d72a0f6af564ce075f699d44f8bbf7eb7265cc80b3
5
+ SHA512:
6
+ metadata.gz: 3d8558ead6ba03564fc316d7a85a399ca540bab485870c6f6ce68d665d4205b49660ff756cb4a0463bd655cadafe591fcf6f5c0b8ec881b76cc14576f6d292f5
7
+ data.tar.gz: 562b82f82f0ea3d6ab29492738cd3b8b44de66fcf1e2598d4015ff2a5ffaabd68fd911c40692330963b90a41a7358bc3439aa4572ab030bd9c161fae40d264f5
@@ -0,0 +1,35 @@
1
+ module Hyde
2
+ module Page
3
+ # Alternative class for jekyll's static files
4
+ # this allows the creation of files without a source file
5
+
6
+ class GeneratedPageCssFile < Jekyll::StaticFile
7
+ attr_accessor :file_contents
8
+ attr_reader :generator
9
+
10
+ def initialize(site, dir, name)
11
+ @site = site
12
+ @dir = dir
13
+ @name = name
14
+ @relative_path = File.join(*[@dir, @name].compact)
15
+ @extname = File.extname(@name)
16
+ @type = @collection&.label&.to_sym
17
+ @generator = 'hyde_page_css'
18
+ end
19
+
20
+ def write(dest)
21
+ dest_path = destination(dest)
22
+ return false if File.exist?(dest_path)
23
+
24
+ FileUtils.mkdir_p(File.dirname(dest_path))
25
+ FileUtils.rm(dest_path) if File.exist?(dest_path)
26
+
27
+ File.open(dest_path, 'w') do |output_file|
28
+ output_file << file_contents
29
+ end
30
+
31
+ true
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,130 @@
1
+ require 'jekyll'
2
+ require_relative 'generated_page_css_file.rb'
3
+
4
+ module Jekyll
5
+ class Renderer
6
+ def render_layout(output, layout, info)
7
+ Hyde::Page::Css.new(layout, info).generate
8
+
9
+ # TODO Would be nice to call super here instead of cloned logic from Jekyll internals
10
+ payload["content"] = output
11
+ payload["layout"] = Utils.deep_merge_hashes(layout.data, payload["layout"] || {})
12
+
13
+ render_liquid(
14
+ layout.content,
15
+ payload,
16
+ info,
17
+ layout.path
18
+ )
19
+ end
20
+ end
21
+ end
22
+
23
+ module Hyde
24
+ module Page
25
+ class Css
26
+ @@config = {
27
+ "asset_path" => 'assets/css',
28
+ "file_output_path" => 'assets/css',
29
+ "css_minify" => true,
30
+ "enable" => true,
31
+ "keep_files" => true
32
+ }
33
+
34
+ def initialize(layout, info)
35
+ @site = info[:registers][:site]
36
+ @page = info[:registers][:page]
37
+ @data = layout.data
38
+ @config = @site.config.dig('hyde_page_css') || @@config
39
+
40
+ @qualified_asset_path = File.join(*[@site.source, @config['asset_path']].compact)
41
+
42
+ if config('keep_files') == true
43
+ @site.config['keep_files'].push(config('file_output_path'))
44
+ end
45
+
46
+ if @page["css"].nil?
47
+ @page["css"] = []
48
+ else
49
+ @page["css"] = [@page["css"]]
50
+ end
51
+ end
52
+
53
+ def generate
54
+ return unless config('enable') == true
55
+ @page["css"].unshift(@data['css'])
56
+
57
+ file_groups = flatten_group(@page["css"])
58
+
59
+ css_files = []
60
+
61
+ for files in file_groups do
62
+ break if !files&.length
63
+
64
+ data = concatenate_files(files.compact)
65
+
66
+ next if data == ""
67
+
68
+ data = minify(data)
69
+ file = generate_file(data)
70
+ css_files << file.url
71
+
72
+ # file already exists, so skip writing out the data to disk
73
+ next if @site.static_files.find { |x| x.name == file.name }
74
+
75
+ # place file data into the new file
76
+ file.file_contents = data
77
+
78
+ # assign static file to list for jekyll to render
79
+ @site.static_files << file
80
+ end
81
+
82
+ # the recursive nature of this will sometimes have duplicate css files
83
+ @page['css_files'] = css_files.uniq
84
+ end
85
+
86
+ private
87
+
88
+ def config(*keys)
89
+ @config.dig(*keys)
90
+ end
91
+
92
+ def flatten_group(arr, acc = [])
93
+ return [arr] if !arr.last.is_a?(Array)
94
+
95
+ acc += [arr.first]
96
+ acc += flatten_group(arr.last)
97
+ end
98
+
99
+ def concatenate_files(files, data = '')
100
+ for file in files do
101
+ # tmp page required to handle anything with frontmatter/yaml header
102
+ tmp_page = Jekyll::PageWithoutAFile.new(@site, nil, config('asset_path'), file)
103
+ path = File.join([@qualified_asset_path, file])
104
+
105
+ begin
106
+ file_contents = File.read(path)
107
+ tmp_page.content = file_contents
108
+ data << Jekyll::Renderer.new(@site, tmp_page).run()
109
+ rescue
110
+ Jekyll.logger.warn('Page CSS Warning:', "Unable to find #{path}")
111
+ end
112
+ end
113
+
114
+ data
115
+ end
116
+
117
+ def minify(data)
118
+ return data if !config('minify') == true
119
+
120
+ converter_config = { 'sass' => { 'style' => 'compressed' } }
121
+ Jekyll::Converters::Scss.new(converter_config).convert(data)
122
+ end
123
+
124
+ def generate_file(data)
125
+ hashed_file_name = Digest::MD5.hexdigest(data) + '.css'
126
+ Hyde::Page::GeneratedPageCssFile.new(@site, config('asset_path'), hashed_file_name)
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,10 @@
1
+ module Hyde
2
+ module Page
3
+ class Css
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
8
+
9
+ require_relative './hyde_page_css/hyde_page_css.rb'
10
+
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hyde-page-css
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Gregory Daynes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-12-05 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: '4.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '4.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ description: Hyde Page CSS is a plugin for Jekyll that enables concatenating, processing
34
+ and caching css files for separate pages.
35
+ email: email@gregdaynes.com
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - lib/hyde_page_css.rb
41
+ - lib/hyde_page_css/generated_page_css_file.rb
42
+ - lib/hyde_page_css/hyde_page_css.rb
43
+ homepage: https://github.com/gregdaynes/hyde-page-css
44
+ licenses:
45
+ - MIT
46
+ metadata: {}
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubygems_version: 3.4.6
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: Plugin for jekyll to enable per page css files
66
+ test_files: []