hekyllはimpress.js用jekyllテンプレのようなものだけど、スライドの位置を個別に指定する必要があってめんどうだったので適当なグリッドに配置するプラグインを書いた。
https://github.com/mojombo/jekyll/wiki/Pluginsに必要なことは大体書いてある。
jekyllのディレクトリに_plugins
ディレクトリを作り、その中に*.rb
をおいておけば自動的にロードされる。
プラグインの種類はおおまかに以下の4通り。サンプルは本家wikiにあるのでメモもかねて概要だけ。
{{ your_tag }}
というタグをつかいたければ、Liquid::Tag
を継承したクラスをつくって、Liquid::Template.register_tag('your_tag', Jekyll::YourTag)
などとする
Liquid::Template.register_filter(Jekyll::YourModule)
とすると、{{ 'arg' | your_filter }}
のようにして呼びだせる
wikiで説明されているpluginの書き方を踏まえた上で、それを完全に無視する方法で実装した。 Postクラスを拡張してhekyllにあうようにliquidに渡すデータを上書きしてるだけ。
もっといい方法はあると思う。
def once(tag) unless (@__once_executed__ ||= []).include? tag yield @__once_executed__ << tag end end module Jekyll class Post def grid_position pos = @site.posts.index(self) siz = Math::sqrt(@site.posts.size).ceil { "x" => 1000 * (pos % siz), "y" => 1000 * (pos / siz), } end once(:redefine_to_liquid) do alias __old_to_liquid to_liquid def to_liquid dat = self.data["data"] if dat.nil? self.data["data"] = self.grid_position end __old_to_liquid end end end end
https://gist.github.com/taksatou/5244991
impress.jsをつかっておいて単なるグリッドというのもどうかとは思いますが、位置決めをする部分をかえればなんとでもなるのでひまなときにがんばればいいと思います
]]>