...
|
...
|
@@ -1,46 +1,47 @@
|
1
|
1
|
# Title: Simple Image tag for Jekyll
|
2
|
|
-# Author: Brandon Mathis http://brandonmathis.com
|
3
|
|
-# Description: Easily output images with optional class names and title/alt attributes
|
|
2
|
+# Authors: Brandon Mathis http://brandonmathis.com
|
|
3
|
+# Felix Schäfer, Frederic Hemberger
|
|
4
|
+# Description: Easily output images with optional class names, width, height, title and alt attributes
|
4
|
5
|
#
|
5
|
|
-# Syntax {% image [class name(s)] url [title text] %}
|
|
6
|
+# Syntax {% img [class name(s)] [http[s]:/]/path/to/image [width [height]] [title text | "title text" ["alt text"]] %}
|
6
|
7
|
#
|
7
|
|
-# Example:
|
8
|
|
-# {% ima left half http://site.com/images/ninja.png Ninja Attack! %}
|
|
8
|
+# Examples:
|
|
9
|
+# {% img /images/ninja.png Ninja Attack! %}
|
|
10
|
+# {% img left half http://site.com/images/ninja.png Ninja Attack! %}
|
|
11
|
+# {% img left half http://site.com/images/ninja.png 150 150 "Ninja Attack!" "Ninja in attack posture" %}
|
9
|
12
|
#
|
10
|
13
|
# Output:
|
11
|
|
-# <image class='left' src="http://site.com/images/ninja.png" title="Ninja Attack!" alt="Ninja Attack!">
|
|
14
|
+# <img src="/images/ninja.png">
|
|
15
|
+# <img class="left half" src="http://site.com/images/ninja.png" title="Ninja Attack!" alt="Ninja Attack!">
|
|
16
|
+# <img class="left half" src="http://site.com/images/ninja.png" width="150" height="150" title="Ninja Attack!" alt="Ninja in attack posture">
|
12
|
17
|
#
|
13
|
18
|
|
14
|
19
|
module Jekyll
|
15
|
20
|
|
16
|
21
|
class ImageTag < Liquid::Tag
|
17
|
22
|
@img = nil
|
18
|
|
- @title = nil
|
19
|
|
- @class = ''
|
20
|
|
- @width = ''
|
21
|
|
- @height = ''
|
22
|
23
|
|
23
|
24
|
def initialize(tag_name, markup, tokens)
|
24
|
|
- if markup =~ /(\S.*\s+)?(https?:\/\/|\/)(\S+)(\s+\d+\s+\d+)?(\s+.+)?/i
|
25
|
|
- @class = $1 || ''
|
26
|
|
- @img = $2 + $3
|
27
|
|
- if $5
|
28
|
|
- @title = $5.strip
|
29
|
|
- end
|
30
|
|
- if $4 =~ /\s*(\d+)\s+(\d+)/
|
31
|
|
- @width = $1
|
32
|
|
- @height = $2
|
|
25
|
+ attributes = ['class', 'src', 'width', 'height', 'title']
|
|
26
|
+
|
|
27
|
+ if markup =~ /(?<class>\S.*\s+)?(?<src>(?:https?:\/\/|\/|\S+\/)\S+)(?:\s+(?<width>\d+))?(?:\s+(?<height>\d+))?(?<title>\s+.+)?/i
|
|
28
|
+ @img = attributes.reduce({}) { |img, attr| img[attr] = $~[attr].strip if $~[attr]; img }
|
|
29
|
+ if @img['title'] =~ /(?:"|')([^"']+)?(?:"|')\s+(?:"|')([^"']+)?(?:"|')/
|
|
30
|
+ @img['title'] = $1
|
|
31
|
+ @img['alt'] = $2
|
|
32
|
+ else
|
|
33
|
+ @img['alt'] = @img['title'].gsub!(/"/, '')
|
33
|
34
|
end
|
|
35
|
+ @img['class'].gsub!(/"/, '')
|
34
|
36
|
end
|
35
|
37
|
super
|
36
|
38
|
end
|
37
|
39
|
|
38
|
40
|
def render(context)
|
39
|
|
- output = super
|
40
|
41
|
if @img
|
41
|
|
- "<img class='#{@class}' src='#{@img}' width='#{@width}' height='#{@height}' alt='#{@title}' title='#{@title}'>"
|
|
42
|
+ "<img #{@img.collect {|k,v| "#{k}=\"#{v}\"" if v}.join(" ")}>"
|
42
|
43
|
else
|
43
|
|
- "Error processing input, expected syntax: {% img [class name(s)] /url/to/image [width height] [title text] %}"
|
|
44
|
+ "Error processing input, expected syntax: {% img [class name(s)] [http[s]:/]/path/to/image [width [height]] [title text | \"title text\" [\"alt text\"]] %}"
|
44
|
45
|
end
|
45
|
46
|
end
|
46
|
47
|
end
|