You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.4 KiB
107 lines
2.4 KiB
#!/usr/bin/env ruby
|
|
|
|
require 'date'
|
|
require 'optparse'
|
|
|
|
options = {
|
|
# Expects to be in the bin/ sub-directory by default
|
|
:path => File.dirname(File.dirname(__FILE__))
|
|
}
|
|
|
|
parser = OptionParser.new do |opt|
|
|
opt.banner = 'usage: jekyll-page TITLE CATEGORY [FILENAME] [OPTIONS]'
|
|
opt.separator ''
|
|
opt.separator 'Options'
|
|
opt.on('-e', '--edit', 'Edit the page') do |edit|
|
|
options[:edit] = true
|
|
end
|
|
opt.on('-l', '--link', 'Relink pages') do |link|
|
|
options[:link] = true
|
|
end
|
|
opt.on('-p PATH', '--path PATH', String, 'Path to project root') do |path|
|
|
options[:path] = path
|
|
end
|
|
opt.separator ''
|
|
end
|
|
|
|
parser.parse!
|
|
|
|
title = ARGV[0]
|
|
category = ARGV[1]
|
|
filename = ARGV[2]
|
|
|
|
# Resolve any relative links
|
|
BASE_DIR = File.expand_path(options[:path])
|
|
POSTS_DIR = "#{BASE_DIR}/_posts"
|
|
PAGES_DIR = "#{BASE_DIR}/_pages"
|
|
|
|
# Ensure the _posts directory exists (we are in the correct directory)
|
|
if not Dir.exists?(POSTS_DIR)
|
|
puts "#{POSTS_DIR} directory does not exists"
|
|
exit
|
|
end
|
|
|
|
# Create _pages directory if it doesn't exist
|
|
if not Dir.exists?(PAGES_DIR)
|
|
Dir.mkdir(PAGES_DIR)
|
|
end
|
|
|
|
if options[:link]
|
|
Dir.foreach(POSTS_DIR) do |name|
|
|
next if name[0] == '.'
|
|
nodate = name[/\d{4}-\d{2}-\d{2}-(?<rest>.*)/, 'rest']
|
|
if File.symlink?("#{PAGES_DIR}/#{nodate}")
|
|
File.delete("#{PAGES_DIR}/#{nodate}")
|
|
end
|
|
abspath = File.absolute_path("#{POSTS_DIR}/#{name}")
|
|
File.symlink(abspath, "#{PAGES_DIR}/#{nodate}")
|
|
end
|
|
end
|
|
|
|
if not title or not category
|
|
# This flag can be used by itself, exit silently if no arguments
|
|
# are defined
|
|
if not options[:link]
|
|
puts parser
|
|
end
|
|
exit
|
|
end
|
|
|
|
if not filename
|
|
filename = title.downcase.gsub(/[^a-z0-9\s]/, '').gsub(/\s+/, '-')
|
|
end
|
|
|
|
today=Date.today().strftime('%F')
|
|
now=DateTime.now().strftime('%F %T')
|
|
|
|
filepath = "#{POSTS_DIR}/#{today}-#{filename}.md"
|
|
symlink = "#{PAGES_DIR}/#{filename}.md"
|
|
|
|
if File.exists?(filepath)
|
|
puts "File #{filepath} already exists"
|
|
exit
|
|
end
|
|
|
|
content = <<END
|
|
---
|
|
layout: page
|
|
title: \"#{title}\"
|
|
category: #{category}
|
|
date: #{now}
|
|
---
|
|
END
|
|
|
|
File.open(filepath, 'w') do |file|
|
|
file.puts content
|
|
end
|
|
|
|
File.symlink("../_posts/#{today}-#{filename}.md", symlink)
|
|
|
|
if options[:edit]
|
|
if not ENV['EDITOR']
|
|
puts 'No $EDITOR variable set'
|
|
exit
|
|
end
|
|
puts ENV['EDITOR']
|
|
exec("#{ENV['EDITOR']} #{filename}")
|
|
end
|
|
|