distorted-jekyll 0.5.2 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +661 -0
- data/README.md +6 -10
- data/lib/distorted-jekyll.rb +79 -0
- data/lib/distorted-jekyll/13th-style.rb +58 -0
- data/lib/distorted-jekyll/_config_default.yml +79 -0
- data/lib/distorted-jekyll/blocks.rb +16 -0
- data/lib/distorted-jekyll/error_code.rb +24 -0
- data/lib/distorted-jekyll/floor.rb +148 -0
- data/lib/distorted-jekyll/injection_of_love.rb +305 -0
- data/lib/distorted-jekyll/invoker.rb +400 -0
- data/lib/distorted-jekyll/molecule/abstract.rb +238 -0
- data/lib/distorted-jekyll/molecule/font.rb +29 -0
- data/lib/distorted-jekyll/molecule/image.rb +105 -0
- data/lib/distorted-jekyll/molecule/last-resort.rb +54 -0
- data/lib/distorted-jekyll/molecule/pdf.rb +88 -0
- data/lib/distorted-jekyll/molecule/svg.rb +59 -0
- data/lib/distorted-jekyll/molecule/text.rb +74 -0
- data/lib/distorted-jekyll/molecule/video.rb +43 -0
- data/lib/distorted-jekyll/monkey_business/jekyll/cleaner.rb +54 -0
- data/lib/distorted-jekyll/static/font.rb +42 -0
- data/lib/distorted-jekyll/static/image.rb +55 -0
- data/lib/distorted-jekyll/static/lastresort.rb +28 -0
- data/lib/distorted-jekyll/static/pdf.rb +53 -0
- data/lib/distorted-jekyll/static/state.rb +141 -0
- data/lib/distorted-jekyll/static/svg.rb +52 -0
- data/lib/distorted-jekyll/static/text.rb +57 -0
- data/lib/distorted-jekyll/static/video.rb +90 -0
- data/lib/distorted-jekyll/template/13th-style.css +78 -0
- data/lib/distorted-jekyll/template/error_code.liquid +3 -0
- data/lib/distorted-jekyll/template/font.liquid +32 -0
- data/lib/distorted-jekyll/template/image.liquid +32 -0
- data/lib/distorted-jekyll/template/lastresort.liquid +20 -0
- data/lib/distorted-jekyll/template/pdf.liquid +14 -0
- data/lib/distorted-jekyll/template/svg.liquid +32 -0
- data/lib/distorted-jekyll/template/text.liquid +32 -0
- data/lib/distorted-jekyll/template/video.liquid +11 -0
- metadata +41 -6
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
|
5
|
+
require 'distorted-jekyll/static/image'
|
6
|
+
|
7
|
+
module Jekyll
|
8
|
+
module DistorteD
|
9
|
+
module Static
|
10
|
+
class SVG < Jekyll::DistorteD::Static::Image
|
11
|
+
|
12
|
+
DRIVER = Cooltrainer::DistorteD::SVG
|
13
|
+
|
14
|
+
MEDIA_TYPE = DRIVER::MEDIA_TYPE
|
15
|
+
SUB_TYPE = DRIVER::SUB_TYPE
|
16
|
+
MIME_TYPES = DRIVER::MIME_TYPES
|
17
|
+
|
18
|
+
ATTRS = DRIVER::ATTRS
|
19
|
+
ATTRS_DEFAULT = DRIVER::ATTRS_DEFAULT
|
20
|
+
ATTRS_VALUES = DRIVER::ATTRS_VALUES
|
21
|
+
|
22
|
+
|
23
|
+
# dest: string realpath to `_site_` directory
|
24
|
+
def write(dest)
|
25
|
+
return false if File.exist?(path) && !modified?
|
26
|
+
self.class.mtimes[path] = mtime
|
27
|
+
|
28
|
+
# Create any directories to the depth of the intended destination.
|
29
|
+
FileUtils.mkdir_p(dd_dest(dest))
|
30
|
+
|
31
|
+
for variation in files
|
32
|
+
if DRIVER::MIME_TYPES.include?(variation[:type])
|
33
|
+
svg_dest_path = File.join(dd_dest(dest), variation[:name])
|
34
|
+
|
35
|
+
if true # TODO: Make this configurable
|
36
|
+
Jekyll.logger.debug(@tag_name, "Optimizing #{@name} and copying to #{dd_dest(dest)}")
|
37
|
+
DRIVER::optimize(path, svg_dest_path)
|
38
|
+
else
|
39
|
+
Jekyll.logger.debug(@tag_name, "Copying #{@name} to #{dd_dest(dest)}")
|
40
|
+
FileUtils.cp(path, svg_dest_path)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
super # Generate raster Image variations
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
require 'distorted/text'
|
5
|
+
require 'distorted-jekyll/static/image'
|
6
|
+
|
7
|
+
module Jekyll
|
8
|
+
module DistorteD
|
9
|
+
module Static
|
10
|
+
class Text < Image
|
11
|
+
|
12
|
+
DRIVER = Cooltrainer::DistorteD::Text
|
13
|
+
|
14
|
+
MEDIA_TYPE = DRIVER::MEDIA_TYPE
|
15
|
+
MIME_TYPES = DRIVER::MIME_TYPES
|
16
|
+
|
17
|
+
ATTRS = DRIVER::ATTRS
|
18
|
+
ATTRS_DEFAULT = DRIVER::ATTRS_DEFAULT
|
19
|
+
ATTRS_VALUES = DRIVER::ATTRS_VALUES
|
20
|
+
|
21
|
+
|
22
|
+
# dest: String realpath to `_site` directory
|
23
|
+
def write(dest)
|
24
|
+
orig_dest = destination(dest)
|
25
|
+
|
26
|
+
return false if !modified?
|
27
|
+
self.class.mtimes[path] = mtime
|
28
|
+
|
29
|
+
unless defined? @distorted
|
30
|
+
@distorted = DRIVER.new(
|
31
|
+
path,
|
32
|
+
encoding: attr_value(:encoding),
|
33
|
+
font: attr_value(:font),
|
34
|
+
spacing: attr_value(:spacing),
|
35
|
+
dpi: attr_value(:dpi),
|
36
|
+
)
|
37
|
+
end
|
38
|
+
# Write any actual-text output variations.
|
39
|
+
# Images will be written by `super`.
|
40
|
+
for variation in files
|
41
|
+
if DRIVER::MIME_TYPES.include?(variation&.dig(:type))
|
42
|
+
filename = File.join(dd_dest(dest), variation&.dig(:name) || @name)
|
43
|
+
Jekyll.logger.debug('DistorteD Writing:', filename)
|
44
|
+
# TODO: For now this is just copying the file, but we should
|
45
|
+
# probably support some sort of UTF conversion or something here.
|
46
|
+
FileUtils.cp(path, filename)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
super
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end # Text
|
55
|
+
end # Static
|
56
|
+
end # DistorteD
|
57
|
+
end # Jekyll
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
require 'distorted/video'
|
4
|
+
require 'distorted-jekyll/static/state'
|
5
|
+
|
6
|
+
module Jekyll
|
7
|
+
module DistorteD
|
8
|
+
module Static
|
9
|
+
class Video < Jekyll::DistorteD::Static::State
|
10
|
+
|
11
|
+
DRIVER = Cooltrainer::DistorteD::Video
|
12
|
+
|
13
|
+
MEDIA_TYPE = DRIVER::MEDIA_TYPE
|
14
|
+
MIME_TYPES = DRIVER::MIME_TYPES
|
15
|
+
|
16
|
+
ATTRS = DRIVER::ATTRS
|
17
|
+
ATTRS_DEFAULT = DRIVER::ATTRS_DEFAULT
|
18
|
+
ATTRS_VALUES = DRIVER::ATTRS_VALUES
|
19
|
+
|
20
|
+
|
21
|
+
# dest: string realpath to `_site_` directory
|
22
|
+
def write(dest)
|
23
|
+
orig_dest = destination(dest)
|
24
|
+
|
25
|
+
# TODO: Make this smarter. Need to see if there's an easy way to
|
26
|
+
# get a list of would-be-generated filenames from GStreamer.
|
27
|
+
return false if File.exist?(path) && !modified?
|
28
|
+
self.class.mtimes[path] = mtime
|
29
|
+
|
30
|
+
distorted = DRIVER.new(path, orig_dest, basename)
|
31
|
+
|
32
|
+
distorted.generate
|
33
|
+
end
|
34
|
+
|
35
|
+
# Return a Set of extant video variations due to inability/unwillingness
|
36
|
+
# to exactly predict GStreamer's HLS/DASH segment output naming
|
37
|
+
# even if we are controlling all variables like segment length etc.
|
38
|
+
# This implementation may give stale segments but will at least speed
|
39
|
+
# up site generation by not having to regenerate the video every time.
|
40
|
+
def destinations(dest)
|
41
|
+
wanted = Set[]
|
42
|
+
if Dir.exist?(dd_dest(dest))
|
43
|
+
hls_dir = File.join(dd_dest(dest), "#{basename}.hls")
|
44
|
+
if Dir.exist?(hls_dir)
|
45
|
+
wanted.merge(Dir.entries(hls_dir).to_set.map{|f| File.join(hls_dir, f)})
|
46
|
+
end
|
47
|
+
end
|
48
|
+
wanted
|
49
|
+
end
|
50
|
+
|
51
|
+
def modified?
|
52
|
+
# We can't use the standard Static::State#modified? here until
|
53
|
+
# I figure out how to cleanly get a duplicate of what would be
|
54
|
+
# the generated filenames from GStreamer's sink.
|
55
|
+
#
|
56
|
+
# For now for the sake of speeding up my site generation
|
57
|
+
# I'll assume not-modified that if the output variant (e.g. DASH/HLS)
|
58
|
+
# container dir exists and contains at least two files:
|
59
|
+
# the playlist and at least one segment.
|
60
|
+
#
|
61
|
+
# Hacky HLS-only right now until dashsink2 lands in upstream Gst.
|
62
|
+
#
|
63
|
+
# Assume modified for the sake of freshness :)
|
64
|
+
modified = true
|
65
|
+
|
66
|
+
site_dest = Jekyll::DistorteD::Floor::config(:destination).to_s
|
67
|
+
if Dir.exist?(site_dest)
|
68
|
+
|
69
|
+
dd_dest = dd_dest(site_dest)
|
70
|
+
if Dir.exist?(dd_dest)
|
71
|
+
|
72
|
+
hls_dir = File.join(dd_dest, "#{basename}.hls")
|
73
|
+
if Dir.exist?(hls_dir)
|
74
|
+
need_filez = Set["#{basename}.m3u8"]
|
75
|
+
var_filez = Dir.entries(hls_dir).to_set
|
76
|
+
if need_filez.subset?(var_filez) and var_filez.count > 2
|
77
|
+
modified = false
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
Jekyll.logger.debug("#{@name} modified?", modified)
|
84
|
+
modified
|
85
|
+
end
|
86
|
+
|
87
|
+
end # Video
|
88
|
+
end # Static
|
89
|
+
end # DistorteD
|
90
|
+
end # Jekyll
|
@@ -0,0 +1,78 @@
|
|
1
|
+
div.distorted {text-align: center;}
|
2
|
+
div.distorted::after {
|
3
|
+
content: '';
|
4
|
+
display: block;
|
5
|
+
clear: left;
|
6
|
+
}
|
7
|
+
div.distorted.svg {background-color: #fbfbf8;}
|
8
|
+
div.distorted.pdf > object {min-height: 76vh;}
|
9
|
+
div.distorted-caption {
|
10
|
+
color: #8888888;
|
11
|
+
margin-top: 0.5em;
|
12
|
+
}
|
13
|
+
div.distorted-block {
|
14
|
+
width: 100%;
|
15
|
+
clear: both;
|
16
|
+
}
|
17
|
+
div.distorted-block > div.distorted {
|
18
|
+
display: block;
|
19
|
+
box-sizing: border-box;
|
20
|
+
float: left;
|
21
|
+
border: 4px solid transparent;
|
22
|
+
margin: 0px;
|
23
|
+
text-align: center;
|
24
|
+
width: 100%;
|
25
|
+
}
|
26
|
+
@media screen and (min-width: 40em) {
|
27
|
+
div.distorted-block > div.distorted {
|
28
|
+
width: 50%;
|
29
|
+
}
|
30
|
+
div.distorted-block > div.distorted:only-child {
|
31
|
+
width: 100%;
|
32
|
+
}
|
33
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(3),
|
34
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(3) ~ div.distorted,
|
35
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(6),
|
36
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(6) ~ div.distorted,
|
37
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(9),
|
38
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(9) ~ div.distorted {
|
39
|
+
width: 33.3333%;
|
40
|
+
}
|
41
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(5),
|
42
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(5) ~ div.distorted:nth-child(2) {
|
43
|
+
width: 50%;
|
44
|
+
}
|
45
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(5) ~ div.distorted {
|
46
|
+
width: 33.3333%;
|
47
|
+
}
|
48
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted:nth-child(3),
|
49
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted:nth-child(4),
|
50
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted:nth-child(5) {
|
51
|
+
width: 33.3333%;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
@media screen and (min-width: 76em) {
|
55
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(4),
|
56
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(4) ~ div.distorted,
|
57
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(8),
|
58
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(8) ~ div.distorted {
|
59
|
+
width: 25%;
|
60
|
+
}
|
61
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(5),
|
62
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(5) ~ div.distorted:nth-child(2),
|
63
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(5) ~ div.distorted,
|
64
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(10),
|
65
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(10) ~ div.distorted {
|
66
|
+
width: 20%;
|
67
|
+
}
|
68
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7),
|
69
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted:nth-child(2),
|
70
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted:nth-child(3) {
|
71
|
+
width: 33.3333%;
|
72
|
+
}
|
73
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted,
|
74
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted:nth-child(4),
|
75
|
+
div.distorted-block > div.distorted:first-child:nth-last-child(7) ~ div.distorted:nth-child(5) {
|
76
|
+
width: 25%;
|
77
|
+
}
|
78
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="distorted font">
|
2
|
+
{%- if href != true %}
|
3
|
+
{%- capture href %}{{ path }}{{ name }}{%- endcapture -%}
|
4
|
+
{%- endif %}
|
5
|
+
{%- if alt != nil and alt != "" %}
|
6
|
+
{%- capture attr_alt %} alt="{{ alt }}"{%- endcapture -%}
|
7
|
+
{%- endif %}
|
8
|
+
{%- if title != nil and title != "" %}
|
9
|
+
{%- capture attr_title %} title="{{ title }}"{%- endcapture -%}
|
10
|
+
{%- endif %}
|
11
|
+
{%- if loading != nil and loading != "" %}
|
12
|
+
{%- capture attr_loading %} loading="{{ loading }}"{%- endcapture -%}
|
13
|
+
{%- endif %}
|
14
|
+
<a href="{{ href }}"{{ attr_title }} target="_blank">
|
15
|
+
<picture>
|
16
|
+
{%- if sources %}
|
17
|
+
{%- for source in sources %}
|
18
|
+
{%- if source.media != nil and source.media != "" %}
|
19
|
+
{%- capture attr_media %} media="{{ source.media }}"{%- endcapture -%}
|
20
|
+
{%- else %}
|
21
|
+
{%- capture attr_media %}{%- endcapture -%}
|
22
|
+
{%- endif %}
|
23
|
+
<source srcset="{{ path }}{{ source.name }}" type="{{ source.type }}"{{ attr_media }}/>
|
24
|
+
{%- endfor %}
|
25
|
+
{%- endif %}
|
26
|
+
<img src="{{ path }}{{ fallback_img }}"{{ attr_alt }}{{ attr_title }}{{ attr_loading }}/>
|
27
|
+
</picture>
|
28
|
+
</a>
|
29
|
+
{%- if caption != nil and caption != "" %}
|
30
|
+
<p class="distorted-caption">{{ caption }}</p>
|
31
|
+
{%- endif %}
|
32
|
+
</div>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="distorted image">
|
2
|
+
{%- if href != true %}
|
3
|
+
{%- capture href %}{{ path }}{{ name }}{%- endcapture -%}
|
4
|
+
{%- endif %}
|
5
|
+
{%- if alt != nil and alt != "" %}
|
6
|
+
{%- capture attr_alt %} alt="{{ alt }}"{%- endcapture -%}
|
7
|
+
{%- endif %}
|
8
|
+
{%- if title != nil and title != "" %}
|
9
|
+
{%- capture attr_title %} title="{{ title }}"{%- endcapture -%}
|
10
|
+
{%- endif %}
|
11
|
+
{%- if loading != nil and loading != "" %}
|
12
|
+
{%- capture attr_loading %} loading="{{ loading }}"{%- endcapture -%}
|
13
|
+
{%- endif %}
|
14
|
+
<a href="{{ href }}"{{ attr_title }} target="_blank">
|
15
|
+
<picture>
|
16
|
+
{%- if sources %}
|
17
|
+
{%- for source in sources %}
|
18
|
+
{%- if source.media != nil and source.media != "" %}
|
19
|
+
{%- capture attr_media %} media="{{ source.media }}"{%- endcapture -%}
|
20
|
+
{%- else %}
|
21
|
+
{%- capture attr_media %}{%- endcapture -%}
|
22
|
+
{%- endif %}
|
23
|
+
<source srcset="{{ path }}{{ source.name }}" type="{{ source.type }}"{{ attr_media }}/>
|
24
|
+
{%- endfor %}
|
25
|
+
{%- endif %}
|
26
|
+
<img src="{{ path }}{{ fallback_img }}"{{ attr_alt }}{{ attr_title }}{{ attr_loading }}/>
|
27
|
+
</picture>
|
28
|
+
</a>
|
29
|
+
{%- if caption != nil and caption != "" %}
|
30
|
+
<p class="distorted-caption">{{ caption }}</p>
|
31
|
+
{%- endif %}
|
32
|
+
</div>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<div class="distorted lastresort">
|
2
|
+
{%- if href != true %}
|
3
|
+
{%- capture href %}{{ path }}{{ name }}{%- endcapture -%}
|
4
|
+
{%- endif %}
|
5
|
+
{%- if alt != nil and alt != "" %}
|
6
|
+
{%- capture attr_alt %} alt="{{ alt }}"{%- endcapture -%}
|
7
|
+
{%- endif %}
|
8
|
+
{%- if title != nil and title != "" %}
|
9
|
+
{%- capture attr_title %} title="{{ title }}"{%- endcapture -%}
|
10
|
+
{%- endif %}
|
11
|
+
{%- if loading != nil and loading != "" %}
|
12
|
+
{%- capture attr_loading %} loading="{{ loading }}"{%- endcapture -%}
|
13
|
+
{%- endif %}
|
14
|
+
<a href="{{ href }}"{{ attr_title }} target="_blank">
|
15
|
+
<img src="{{ path }}{{ name }}"{{ attr_alt }}{{ attr_title }}{{ attr_loading }}/>
|
16
|
+
</a>
|
17
|
+
{%- if caption != nil and caption != "" %}
|
18
|
+
<p class="distorted-caption">{{ caption }}</p>
|
19
|
+
{%- endif %}
|
20
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="distorted pdf">
|
2
|
+
{%- if title != nil and title != "" %}
|
3
|
+
{%- capture pdf_link %}{{ title }}{%- endcapture -%}
|
4
|
+
{%- elsif alt != nil and alt != "" %}
|
5
|
+
{%- capture pdf_link %}{{ alt }}{%- endcapture -%}
|
6
|
+
{%- endif %}
|
7
|
+
<object data="{{ path }}{{ name }}#{{ pdf_open_params }}" type="application/pdf" width="{{ width }}" height="{{ height }}">
|
8
|
+
<embed src="{{ path }}{{ name }}#{{ pdf_open_params }}" type="application/pdf" width="{{ width }}" height="{{ height }}"/>
|
9
|
+
<a href="{{ path }}{{ name }}#{{ pdf_open_params }}">{{ pdf_link }} [PDF]</a>
|
10
|
+
</object>
|
11
|
+
{%- if caption != nil and caption != "" %}
|
12
|
+
<p class="distorted-caption">{{ caption }}</p>
|
13
|
+
{%- endif %}
|
14
|
+
</div>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="distorted svg">
|
2
|
+
{%- if href != true %}
|
3
|
+
{%- capture href %}{{ path }}{{ name }}{%- endcapture -%}
|
4
|
+
{%- endif %}
|
5
|
+
{%- if alt != nil and alt != "" %}
|
6
|
+
{%- capture attr_alt %} alt="{{ alt }}"{%- endcapture -%}
|
7
|
+
{%- endif %}
|
8
|
+
{%- if title != nil and title != "" %}
|
9
|
+
{%- capture attr_title %} title="{{ title }}"{%- endcapture -%}
|
10
|
+
{%- endif %}
|
11
|
+
{%- if loading != nil and loading != "" %}
|
12
|
+
{%- capture attr_loading %} loading="{{ loading }}"{%- endcapture -%}
|
13
|
+
{%- endif %}
|
14
|
+
<a href="{{ href }}"{{ attr_title }} target="_blank">
|
15
|
+
<picture>
|
16
|
+
{%- if sources %}
|
17
|
+
{%- for source in sources %}
|
18
|
+
{%- if source.media != nil and source.media != "" %}
|
19
|
+
{%- capture attr_media %} media="{{ source.media }}"{%- endcapture -%}
|
20
|
+
{%- else %}
|
21
|
+
{%- capture attr_media %}{%- endcapture -%}
|
22
|
+
{%- endif %}
|
23
|
+
<source srcset="{{ path }}{{ source.name }}" type="{{ source.type }}"{{ attr_media }}/>
|
24
|
+
{%- endfor %}
|
25
|
+
{%- endif %}
|
26
|
+
<img src="{{ path }}{{ fallback_img }}"{{ attr_alt }}{{ attr_title }}{{ attr_loading }}/>
|
27
|
+
</picture>
|
28
|
+
</a>
|
29
|
+
{%- if caption != nil and caption != "" %}
|
30
|
+
<p class="distorted-caption">{{ caption }}</p>
|
31
|
+
{%- endif %}
|
32
|
+
</div>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="distorted text">
|
2
|
+
{%- if href != true %}
|
3
|
+
{%- capture href %}{{ path }}{{ name }}{%- endcapture -%}
|
4
|
+
{%- endif %}
|
5
|
+
{%- if alt != nil and alt != "" %}
|
6
|
+
{%- capture attr_alt %} alt="{{ alt }}"{%- endcapture -%}
|
7
|
+
{%- endif %}
|
8
|
+
{%- if title != nil and title != "" %}
|
9
|
+
{%- capture attr_title %} title="{{ title }}"{%- endcapture -%}
|
10
|
+
{%- endif %}
|
11
|
+
{%- if loading != nil and loading != "" %}
|
12
|
+
{%- capture attr_loading %} loading="{{ loading }}"{%- endcapture -%}
|
13
|
+
{%- endif %}
|
14
|
+
<a href="{{ href }}"{{ attr_title }} target="_blank">
|
15
|
+
<picture>
|
16
|
+
{%- if sources %}
|
17
|
+
{%- for source in sources %}
|
18
|
+
{%- if source.media != nil and source.media != "" %}
|
19
|
+
{%- capture attr_media %} media="{{ source.media }}"{%- endcapture -%}
|
20
|
+
{%- else %}
|
21
|
+
{%- capture attr_media %}{%- endcapture -%}
|
22
|
+
{%- endif %}
|
23
|
+
<source srcset="{{ path }}{{ source.name }}" type="{{ source.type }}"{{ attr_media }}/>
|
24
|
+
{%- endfor %}
|
25
|
+
{%- endif %}
|
26
|
+
<img src="{{ path }}{{ fallback_img }}"{{ attr_alt }}{{ attr_title }}{{ attr_loading }}/>
|
27
|
+
</picture>
|
28
|
+
</a>
|
29
|
+
{%- if caption != nil and caption != "" %}
|
30
|
+
<p class="distorted-caption">{{ caption }}</p>
|
31
|
+
{%- endif %}
|
32
|
+
</div>
|