75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| require "bundler/gem_tasks"
 | |
| require "jekyll"
 | |
| require "listen"
 | |
| 
 | |
| def listen_ignore_paths(base, options)
 | |
|   [
 | |
|     /_config\.ya?ml/,
 | |
|     /_site/,
 | |
|     /\.jekyll-metadata/
 | |
|   ]
 | |
| end
 | |
| 
 | |
| def listen_handler(base, options)
 | |
|   site = Jekyll::Site.new(options)
 | |
|   Jekyll::Command.process_site(site)
 | |
|   proc do |modified, added, removed|
 | |
|     t = Time.now
 | |
|     c = modified + added + removed
 | |
|     n = c.length
 | |
|     relative_paths = c.map{ |p| Pathname.new(p).relative_path_from(base).to_s }
 | |
|     print Jekyll.logger.message("Regenerating:", "#{relative_paths.join(", ")} changed... ")
 | |
|     begin
 | |
|       Jekyll::Command.process_site(site)
 | |
|       puts "regenerated in #{Time.now - t} seconds."
 | |
|     rescue => e
 | |
|       puts "error:"
 | |
|       Jekyll.logger.warn "Error:", e.message
 | |
|       Jekyll.logger.warn "Error:", "Run jekyll build --trace for more information."
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| task :preview do
 | |
|   base = Pathname.new('.').expand_path
 | |
|   options = {
 | |
|     "source"        => base.join('example').to_s,
 | |
|     "destination"   => base.join('example/_site').to_s,
 | |
|     "force_polling" => false,
 | |
|     "serving"       => true,
 | |
|     "theme"         => "jekyll-theme-basically-basic"
 | |
|   }
 | |
| 
 | |
|   options = Jekyll.configuration(options)
 | |
| 
 | |
|   ENV["LISTEN_GEM_DEBUGGING"] = "1"
 | |
|   listener = Listen.to(
 | |
|     base.join("_includes"),
 | |
|     base.join("_layouts"),
 | |
|     base.join("_sass"),
 | |
|     base.join("assets"),
 | |
|     options["source"],
 | |
|     :ignore => listen_ignore_paths(base, options),
 | |
|     :force_polling => options['force_polling'],
 | |
|     &(listen_handler(base, options))
 | |
|   )
 | |
| 
 | |
|   begin
 | |
|     listener.start
 | |
|     Jekyll.logger.info "Auto-regeneration:", "enabled for '#{options["source"]}'"
 | |
| 
 | |
|     unless options['serving']
 | |
|       trap("INT") do
 | |
|         listener.stop
 | |
|         puts "     Halting auto-regeneration."
 | |
|         exit 0
 | |
|       end
 | |
| 
 | |
|       loop { sleep 1000 }
 | |
|     end
 | |
|   rescue ThreadError
 | |
|     # You pressed Ctrl-C, oh my!
 | |
|   end
 | |
| 
 | |
|   Jekyll::Commands::Serve.process(options)
 | |
| end |