require 'bonsai' require 'json' require 'liquid' require 'maruku' module ExtraFilters def markdownify(input) Maruku.new(input).to_html end def search_id(input) input.gsub(/`/, '') end def section_id(input) input.gsub(/[^a-zA-Z0-9_]/, '') end def entry_id(input) input.gsub(/[ `]/, '') end def no_paragraph(input) input.gsub('

', '').gsub('

', '') end def json(input) input.to_json end def unique(input) @n = (@n || 0) + 1 input + @n.to_s end end Liquid::Template.register_filter(ExtraFilters) task :build do Bonsai.root_dir = Dir.pwd Bonsai::Exporter.publish! end task :serve do begin Bonsai.log "Press Control+C to quit" require 'rack' require 'sinatra' require 'watch' require 'launchy' Bonsai.root_dir = Dir.pwd server = fork { app = Rack::Builder.app { map "/jq" do use Bonsai::StaticPassThrough, :root => Bonsai.root_dir + "/output", :urls => ["/"] end run Bonsai::DevelopmentServer } Rack::Handler.default.run(app, :Port => 5000) do Launchy.open("http://localhost:5000/jq/") end } Watch.new("{content,templates,public}/**/*") { Bonsai::Exporter.process! } rescue Interrupt Process.kill("QUIT", server) Process.wait(server) exit end end