blob: abfb6500237d45a70db2295740fae0e704c4d9ff [file] [log] [blame]
# Jekyll Ideal Image Slider v1.2
# Description: Add image sliders to Jekyll with Ideal Image Slider
# Documentation: https://github.com/jekylltools/jekyll-ideal-image-slider#readme
# Source: https://github.com/jekylltools/jekyll-ideal-image-slider
#
# Syntax:
#
# {% slider height [bullets] [captions] %}
# {% endslider %}
#
# Example Input:
#
# {% slider 700 captions %}
# ![alt text 1](image1.jpg)
# [![alt text 2](image2.jpg)](/page/url)
# [![alt text 3](image3.jpg)](http://example.com)
# {% endslider %}
#
# Example Output:
#
# <div id="slider">
# <img src="image1.jpg" alt="alt text 1">
# <a href="/page/url"><img src="image2.jpg" alt="alt text 2"></a>
# <a href="http://example.com"><img src="image3.jpg" alt="alt text 3"></a>
# </div>
module Jekyll
class SliderTag < Liquid::Block
alias_method :render_block, :render
@slider_bullets = nil
@slider_captions = nil
@slider_height = nil
Bullets = /bullets/i
Captions = /captions/i
Height = /(auto|\d+:\d+)/i
Height_Numeric = /(\d+)/i
def initialize(name, markup, tokens)
if markup =~ Height
@slider_height = "\'#{$1}\'"
elsif markup =~ Height_Numeric
@slider_height = "#{$1}"
else
@slider_height = "\'auto\'"
end
if markup =~ Bullets
@slider_bullets = "true"
end
if markup =~ Captions
@slider_captions = "true"
end
super
end
def render(context)
page = context.environments.first['page']
page['iis_slider_active'] = true
if @slider_height
# generate slider id
slider_id = "slider_" + ("a".."z").to_a.shuffle[0,5].join
# call the default markdown renderer
site = context.registers[:site]
converter =
if site.respond_to?(:find_converter_instance)
site.find_converter_instance(Jekyll::Converters::Markdown)
else
site.getConverterImpl(Jekyll::Converters::Markdown)
end
# render the slider script
slider_script = "<script>"
slider_script += "var #{slider_id} = new IdealImageSlider.Slider({"
slider_script += "selector:\'\##{slider_id}\',"
slider_script += "height:#{@slider_height}"
slider_script += "});"
slider_script += "#{slider_id}.addBulletNav();" if @slider_bullets
slider_script += "#{slider_id}.addCaptions();" if @slider_captions
slider_script += "#{slider_id}.start();"
slider_script += "</script>"
slider_array = context.environments.first['site']['iis_slider_array']
slider_array << slider_script
context.environments.first['page']['iis_slider_scripts'] = slider_array
# render the markdown, then remove all <p></p> tags from the html
output = converter.convert(render_block(context)).gsub(/<\/?p>/, '')
# render the slider
slider = "<div class=\"iis-slider\" id=\"#{slider_id}\">#{output}</div>"
slider
else
"Error processing input, expected syntax: {% slider height [captions] %}"
puts "Error: incorrect slider syntax in " + page['path']
end
end
end
end
Liquid::Template.register_tag('slider', Jekyll::SliderTag)