jekyll-design-tag-framework 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c354297b5c8831d0e67c5e38d9965d19dda353c454060b3cce5656e5b14f4eb6
4
- data.tar.gz: ad18b193eee0b77b2b1c89885ecf9acca98666ca6b79da818d5815a5ad6dcc0f
3
+ metadata.gz: 4a94ceabf63164baded5ff7f0dc09e440ff0fb38dd54fbadb33652e521559212
4
+ data.tar.gz: 33775eeb613c688a55716404fed1b7f05712622df9e21ff03289621eae08d1ff
5
5
  SHA512:
6
- metadata.gz: 58b32d723da4a965656649018db1afc07e54e648c424635cdd9dd1317d065b8e6a0ca32027ea0b3d9fcd6c1355ea015745becbdba9f60c06403c3978cd2d942e
7
- data.tar.gz: d52d2950e4c50fc9af27975f130f4ee8cdc9540554171be7b2609d58fb25878919976591b71cc4c38bf91e3e6399bc402ef232b0863ad9eb4d691eedf2947c76
6
+ metadata.gz: 3ebf0026601255e2ff7fd700879b0cb72bd2c9a9056570d77e41ef273ebbbbbd712bb36e30043fc4686e8c58419d408f24de8e9b8cb0ec36d4571ba97b930da9
7
+ data.tar.gz: 62be3350b8bb8762a9d8b448e30dc1b11c4f768f42942f641b72d7c70fe29c660b8565aecaaaa5d26818bb2ef5bb910430ff51b9717af9dfef685ab15bad8e5d
@@ -0,0 +1,105 @@
1
+ require "jekyll-design-tag-framework/design_group"
2
+ require "jekyll-design-tag-framework/design_element"
3
+ require "jekyll-design-tag-framework/utils"
4
+
5
+ module Jekyll
6
+ module DesignTagFramework
7
+ class PostGroup < DesignTagFramework::DesignGroup
8
+ def initialize(tag_name, text, tokens)
9
+ super(tag_name, text, tokens, "post_group")
10
+ end
11
+ end
12
+
13
+ class PostElement < DesignElement
14
+ def initialize(tag_name, text, tokens)
15
+ super(tag_name, text, tokens, "post_element")
16
+ @required_params = [ "title", "author", "url", "date" ]
17
+ @optional_params = [ "description", "image"]
18
+ end
19
+
20
+ def validate_params(params)
21
+ super
22
+ DesignTagFramework.validate_author(params["author"])
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+
29
+ Liquid::Template.register_tag("post_group", Jekyll::DesignTagFramework::PostGroup)
30
+ Liquid::Template.register_tag("post_element", Jekyll::DesignTagFramework::PostElement)
31
+
32
+
33
+ module Jekyll
34
+ module DesignTagFramework
35
+ class ProjectGroup < DesignTagFramework::DesignGroup
36
+ def initialize(tag_name, text, tokens)
37
+ super(tag_name, text, tokens, "project_group")
38
+ end
39
+ end
40
+
41
+ class ProjectElement < DesignElement
42
+ def initialize(tag_name, text, tokens)
43
+ super(tag_name, text, tokens, "project_element")
44
+ @required_params = [ "title" ]
45
+ @optional_params = %w(url author image description)
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ Liquid::Template.register_tag("project_group", Jekyll::DesignTagFramework::ProjectGroup)
52
+ Liquid::Template.register_tag("project_element", Jekyll::DesignTagFramework::ProjectElement)
53
+
54
+ module Jekyll
55
+ module DesignTagFramework
56
+ class FeatureGroup < DesignTagFramework::DesignGroup
57
+ def initialize(tag_name, text, tokens)
58
+ super(tag_name, text, tokens, "feature_group")
59
+ end
60
+ end
61
+
62
+ class FeatureElement < DesignElement
63
+ def initialize(tag_name, text, tokens)
64
+ super(tag_name, text, tokens, "feature_element")
65
+ @required_params = [ "title" ]
66
+ @optional_params = [ "description", "url", "icon-path", "icon-class" ]
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ Liquid::Template.register_tag("feature_group", Jekyll::DesignTagFramework::FeatureGroup)
73
+ Liquid::Template.register_tag("feature_element", Jekyll::DesignTagFramework::FeatureElement)
74
+
75
+ module Jekyll
76
+ module DesignTagFramework
77
+ class AuthorElement < DesignElement
78
+ def initialize(tag_name, text, tokens)
79
+ super(tag_name, text, tokens, "author_element")
80
+ @required_params = [ "author" ]
81
+ @optional_params = [ "class" ]
82
+ end
83
+
84
+ def validate_params(params)
85
+ super
86
+ DesignTagFramework.validate_author(params["author"])
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ Liquid::Template.register_tag("author_element", Jekyll::DesignTagFramework::AuthorElement)
93
+
94
+ module Jekyll
95
+ module DesignTagFramework
96
+ class AlertElement < DesignGroup
97
+ def initialize(tag_name, text, tokens)
98
+ super(tag_name, text, tokens, "alert_element")
99
+ @optional_params = [ "variant" ]
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ Liquid::Template.register_tag("alert_element", Jekyll::DesignTagFramework::AlertElement)
@@ -0,0 +1,97 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ class DesignElement < Liquid::Tag
4
+ include TemplateLoader
5
+ include DesignTag
6
+
7
+ VARIABLE_SYNTAX = %r!\A\s*(?:[\w.-]+)\s*\z!x.freeze
8
+
9
+ def initialize(tag_name, text, tokens, type = nil)
10
+ super(tag_name, text, tokens)
11
+ @tag_name = tag_name
12
+ @type = type
13
+ @required_params = []
14
+ @optional_params = []
15
+ if text.match(VARIABLE_SYNTAX)
16
+ @variable = text.strip
17
+ else
18
+ @jdt_params = ParameterParser.new(tag_name, text)
19
+ end
20
+ end
21
+
22
+ def expand_variable(context)
23
+ unless context[@variable]
24
+ raise ArgumentError, <<~MSG
25
+ Invalid syntax for #{@tag_name} tag:
26
+
27
+ #{@variable}
28
+
29
+ #{valid_syntax}
30
+
31
+ MSG
32
+ end
33
+
34
+ context[@variable]
35
+ end
36
+
37
+ def valid_syntax
38
+ example_params = @required_params
39
+ example_params = ["param1", "param2"] if @required_params.empty?
40
+ i = 1
41
+ example = example_params.map { |param| i += 1; "#{param}=\"#{i}\"" }.join(" ")
42
+ examplepst = ""
43
+ examplepst = " where #{example_params.map { |param| "post.#{param}"}.join(", ") } exists" unless @required_params.empty?
44
+ optional = "\n\nOptional parameters: #{@optional_params.join(", ")}" unless @optional_params.empty?
45
+ <<~MSG
46
+ Valid syntax:
47
+
48
+ "{% #{@tag_name} post %}" #{examplepst}
49
+
50
+ or
51
+
52
+ "{% #{@tag_name} #{example} %}"#{optional}
53
+ MSG
54
+ end
55
+
56
+ def parse(tokens); end
57
+
58
+ def render(context)
59
+ site = context.registers[:site]
60
+
61
+ if @jdt_params
62
+ params = @jdt_params.parse_params(context)
63
+ else
64
+ params = expand_variable(context)
65
+ end
66
+
67
+ @type ||= @jdt_params.type
68
+
69
+ expand_author(params, site)
70
+ validate_params(params)
71
+
72
+ context.stack do
73
+ params["classes"] = class_names
74
+ context["element"] = params
75
+
76
+ return Liquid::Template.parse(get_template(site).strip).render(context)
77
+ end
78
+ end
79
+
80
+ def template_name
81
+ return "#{@type}.html" unless @type.nil?
82
+
83
+ "design_element.html"
84
+ end
85
+
86
+ def template
87
+ "<div class=\"{{ element.classes }}\">{{ element.title }}</div>"
88
+ end
89
+
90
+ def class_names
91
+ ["design_element", @type].compact.join(" ")
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ Liquid::Template.register_tag("design_element", Jekyll::DesignTagFramework::DesignElement)
@@ -0,0 +1,87 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ class DesignGroup < Liquid::Block
4
+ include TemplateLoader
5
+ include DesignTag
6
+
7
+ def initialize(tag_name, text, tokens, type = nil)
8
+ super(tag_name, text, tokens)
9
+ @jdt_params = ParameterParser.new(tag_name, text)
10
+ @type = type
11
+ @tag_name = tag_name
12
+ @parity = nil
13
+ @required_params = []
14
+ @optional_params = []
15
+ end
16
+
17
+ def render(context)
18
+ text = super
19
+ site = context.registers[:site]
20
+ page = context.registers[:page]
21
+ @parity = get_parity(page)
22
+ params = @jdt_params.parse_params(context)
23
+ validate_params(params)
24
+ @type ||= @jdt_params.type
25
+
26
+ context.stack do
27
+ params["classes"] = class_names
28
+ context["group"] = params
29
+ text = Liquid::Template.parse(text).render(context)
30
+
31
+ markdown_converter = site.find_converter_instance(::Jekyll::Converters::Markdown)
32
+
33
+ text = markdown_converter.convert(text)
34
+
35
+ context["content"] = text
36
+
37
+ text = Liquid::Template.parse(get_template(site).strip).render(context)
38
+ end
39
+ text
40
+ end
41
+
42
+ def get_parity(page)
43
+ if page["design_group_number"].nil?
44
+ page["design_group_number"] = 1
45
+ else
46
+ page["design_group_number"] += 1
47
+ end
48
+ if page["design_group_number"].even?
49
+ "design_group_even"
50
+ else
51
+ "design_group_odd"
52
+ end
53
+ end
54
+
55
+ def template_name
56
+ return "#{@type}.html" unless @type.nil?
57
+
58
+ "design_group.html"
59
+ end
60
+
61
+ def template
62
+ "<div class=\"{{ group.classes }}\">{{ content }}</div>"
63
+ end
64
+
65
+ def class_names
66
+ ["design_group", @type, @parity].compact.join(" ")
67
+ end
68
+
69
+ def valid_syntax
70
+ example_params = @required_params
71
+ example_params = ["param1", "param2"] if @required_params.empty?
72
+ i = 1
73
+ example = example_params.map { |param| i += 1; "#{param}=\"#{i}\"" }.join(" ")
74
+ optional = "\n\nOptional parameters: #{@optional_params.join(", ")}" unless @optional_params.empty?
75
+ <<~MSG
76
+ Valid syntax:
77
+
78
+ "{% #{@tag_name} #{example} %}"
79
+ content..
80
+ {% end#{@tag_name} %}#{optional}
81
+ MSG
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ Liquid::Template.register_tag("design_group", Jekyll::DesignTagFramework::DesignGroup)
@@ -0,0 +1,27 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ module DesignTag
4
+ def expand_author(params, site)
5
+ author = params["author"]
6
+ author = site.config["author"] if author.nil?
7
+ if site.data["authors"].is_a?(Hash) && !params["author"].is_a?(Hash)
8
+ params["author"] = site.data["authors"][author]
9
+ end
10
+ end
11
+
12
+ def validate_params(params)
13
+ return if params.nil?
14
+
15
+ @required_params.each do |param|
16
+ next if params.key?(param)
17
+
18
+ raise ArgumentError, <<~MSG
19
+ #{param} is not defined in #{@tag_name} tag
20
+
21
+ #{valid_syntax}
22
+ MSG
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,58 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ class ParameterParser
4
+ VALID_SYNTAX = %r!
5
+ ([\w-]+)\s*=\s*
6
+ (?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w.-]+))
7
+ !x.freeze
8
+
9
+ FULL_VALID_SYNTAX = %r!\A\s*(?:#{VALID_SYNTAX}(?=\s|\z)\s*)*\z!.freeze
10
+
11
+ def initialize(tag_name, raw_params)
12
+ @tag_name = tag_name
13
+ @raw_params = raw_params.strip
14
+
15
+ validate_params
16
+ end
17
+
18
+ def validate_params
19
+ unless FULL_VALID_SYNTAX.match?(@raw_params)
20
+ raise ArgumentError, <<~MSG
21
+ Invalid syntax for #{@tag_name} tag:
22
+
23
+ #{@raw_params}
24
+
25
+ Valid syntax:
26
+
27
+ #{syntax_example}
28
+
29
+ MSG
30
+ end
31
+ end
32
+
33
+ def syntax_example
34
+ "{% #{@tag_name} param='value' param2='value' %}"
35
+ end
36
+
37
+ def parse_params(context)
38
+ @params = {}
39
+ @raw_params.scan(VALID_SYNTAX) do |key, d_quoted, s_quoted, variable|
40
+ value = if d_quoted
41
+ d_quoted.include?('\\"') ? d_quoted.gsub('\\"', '"') : d_quoted
42
+ elsif s_quoted
43
+ s_quoted.include?("\\'") ? s_quoted.gsub("\\'", "'") : s_quoted
44
+ elsif variable
45
+ context[variable]
46
+ end
47
+ @params[key] = value
48
+ end
49
+ @params
50
+ end
51
+
52
+ def type
53
+ @params["type"] if @params.key? "type"
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,17 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ class PictureElement < DesignElement
4
+ def initialize(tag_name, text, tokens)
5
+ super(tag_name, text, tokens, "picture_element")
6
+ @required_params = [ "src", "alt" ]
7
+ @optional_params = [ "class", "height", "size-hint" ]
8
+ end
9
+
10
+ def template
11
+ "<div class=\"{{ element.classes }}\"><img src=\"{{ element.src }}\"></div>"
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ Liquid::Template.register_tag("picture_element", Jekyll::DesignTagFramework::PictureElement)
@@ -0,0 +1,19 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ module TemplateLoader
4
+ def load_template(site)
5
+ site.includes_load_paths.each do |dir|
6
+ path = PathManager.join(dir, "dtf")
7
+ file = PathManager.join(path, template_name)
8
+ return File.read(file, **site.file_read_opts) if File.file?(file)
9
+ end
10
+ nil
11
+ end
12
+
13
+ def get_template(site)
14
+ t = load_template(site)
15
+ t || template
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ def validate_author(author)
4
+ keys = ["name"]
5
+ keys.each do |key|
6
+ next if author.key?(key)
7
+ raise ArgumentError, <<~MSG
8
+ Author #{author} has no parameter #{key}
9
+ MSG
10
+ end
11
+ end
12
+ module_function :validate_author
13
+
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module Jekyll
2
+ module DesignTagFramework
3
+ VERSION = "0.0.2".freeze
4
+ end
5
+ end
@@ -0,0 +1,53 @@
1
+ require "jekyll"
2
+ require "shellwords"
3
+ require "jekyll-design-tag-framework/version"
4
+ require "jekyll-design-tag-framework/template_loader"
5
+ require "jekyll-design-tag-framework/design_tag"
6
+ require "jekyll-design-tag-framework/parameter_parser"
7
+ require "jekyll-design-tag-framework/design_group"
8
+ require "jekyll-design-tag-framework/design_element"
9
+ require "jekyll-design-tag-framework/convenience_types"
10
+ require "jekyll-design-tag-framework/picture_element"
11
+
12
+ module Jekyll
13
+ module DesignTagFramework
14
+ module ImageAssetFilter
15
+ def asset_expand(input, arg, alt_extension = nil)
16
+ dirname = File.dirname(input)
17
+ extension = File.extname(input)
18
+ basename = File.basename(input, extension)
19
+ extension = alt_extension unless alt_extension.nil?
20
+
21
+ "#{dirname}/#{basename}-#{arg}#{extension}"
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ Liquid::Template.register_filter(Jekyll::DesignTagFramework::ImageAssetFilter)
28
+
29
+
30
+ Jekyll::Hooks.register :site, :post_write do |site|
31
+ # code to call after Jekyll renders a page
32
+ brand_config = site.config["brand"]
33
+ if brand_config && brand_config["image"] && site.config["generate_favicon"]
34
+ src_file = File.join(site.source, site.config["brand"]["image"])
35
+ extension = File.extname(src_file)
36
+ # basename = File.basename(src_file, extension)
37
+ unless File.exist?(src_file)
38
+ throw "Could not find file #{src_file}"
39
+ end
40
+
41
+ dst_file = File.join(site.dest, "favicon.ico")
42
+
43
+ cmd = "magick #{src_file.shellescape} -alpha off -resize 48x48 #{dst_file.shellescape}"
44
+ system(cmd)
45
+
46
+ dst_file = File.join(site.dest, "favicon512x512.png")
47
+
48
+ cmd = "magick #{src_file.shellescape} -resize 512x512 #{dst_file.shellescape}"
49
+ system(cmd)
50
+
51
+ end
52
+
53
+ end
metadata CHANGED
@@ -1,10 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-design-tag-framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Sosnowski
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
11
  date: 2025-02-03 00:00:00.000000000 Z
@@ -71,16 +72,29 @@ dependencies:
71
72
  - - "~>"
72
73
  - !ruby/object:Gem::Version
73
74
  version: 0.14.0
75
+ description:
76
+ email:
74
77
  executables: []
75
78
  extensions: []
76
79
  extra_rdoc_files: []
77
80
  files:
78
81
  - LICENSE
79
82
  - README.md
83
+ - lib/jekyll-design-tag-framework.rb
84
+ - lib/jekyll-design-tag-framework/convenience_types.rb
85
+ - lib/jekyll-design-tag-framework/design_element.rb
86
+ - lib/jekyll-design-tag-framework/design_group.rb
87
+ - lib/jekyll-design-tag-framework/design_tag.rb
88
+ - lib/jekyll-design-tag-framework/parameter_parser.rb
89
+ - lib/jekyll-design-tag-framework/picture_element.rb
90
+ - lib/jekyll-design-tag-framework/template_loader.rb
91
+ - lib/jekyll-design-tag-framework/utils.rb
92
+ - lib/jekyll-design-tag-framework/version.rb
80
93
  homepage: https://design-tag-framework.github.io/jekyll-design-tag-framework/
81
94
  licenses:
82
95
  - AGPL-3.0-only
83
96
  metadata: {}
97
+ post_install_message:
84
98
  rdoc_options: []
85
99
  require_paths:
86
100
  - lib
@@ -95,7 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  requirements: []
98
- rubygems_version: 3.6.1
112
+ rubygems_version: 3.5.22
113
+ signing_key:
99
114
  specification_version: 4
100
115
  summary: A collection of Liquid tags for Jekyll themes and sites, to help separating
101
116
  design and content.