hj7 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +75 -0
- data/README.md +3 -0
- data/Rakefile +2 -0
- data/hj7.gemspec +28 -0
- data/lib/hj7/all.rb +10 -0
- data/lib/hj7/archive.rb +101 -0
- data/lib/hj7/coffee_converter.rb +25 -0
- data/lib/hj7/compass_converter.rb +38 -0
- data/lib/hj7/jammit.rb +99 -0
- data/lib/hj7/notifier.rb +123 -0
- data/lib/hj7/redcarpet_converter.rb +27 -0
- data/lib/hj7/slim_converter.rb +25 -0
- data/lib/hj7/tagging.rb +36 -0
- data/lib/hj7/tasks.rb +108 -0
- data/lib/hj7/tidy.rb +16 -0
- data/lib/hj7/version.rb +3 -0
- data/lib/hj7.rb +5 -0
- metadata +169 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
hj7 (0.8.0)
|
5
|
+
albino
|
6
|
+
coffee-script
|
7
|
+
compass
|
8
|
+
jammit
|
9
|
+
jekyll
|
10
|
+
jekyll-tagging
|
11
|
+
rake
|
12
|
+
redcarpet (~> 2.0.0b3)
|
13
|
+
slim
|
14
|
+
|
15
|
+
GEM
|
16
|
+
remote: http://rubygems.org/
|
17
|
+
specs:
|
18
|
+
POpen4 (0.1.4)
|
19
|
+
Platform (>= 0.4.0)
|
20
|
+
open4
|
21
|
+
Platform (0.4.0)
|
22
|
+
albino (1.3.3)
|
23
|
+
posix-spawn (>= 0.3.6)
|
24
|
+
chunky_png (1.2.5)
|
25
|
+
classifier (1.3.3)
|
26
|
+
fast-stemmer (>= 1.0.0)
|
27
|
+
coffee-script (2.2.0)
|
28
|
+
coffee-script-source
|
29
|
+
execjs
|
30
|
+
coffee-script-source (1.2.0)
|
31
|
+
compass (0.11.6)
|
32
|
+
chunky_png (~> 1.2)
|
33
|
+
fssm (>= 0.2.7)
|
34
|
+
sass (~> 3.1)
|
35
|
+
directory_watcher (1.4.1)
|
36
|
+
execjs (1.2.13)
|
37
|
+
multi_json (~> 1.0)
|
38
|
+
fast-stemmer (1.0.0)
|
39
|
+
fssm (0.2.7)
|
40
|
+
jammit (0.6.5)
|
41
|
+
yui-compressor (>= 0.9.3)
|
42
|
+
jekyll (0.11.2)
|
43
|
+
albino (~> 1.3)
|
44
|
+
classifier (~> 1.3)
|
45
|
+
directory_watcher (~> 1.1)
|
46
|
+
kramdown (~> 0.13)
|
47
|
+
liquid (~> 2.3)
|
48
|
+
maruku (~> 0.5)
|
49
|
+
jekyll-tagging (0.2.0)
|
50
|
+
ruby-nuggets
|
51
|
+
kramdown (0.13.4)
|
52
|
+
liquid (2.3.0)
|
53
|
+
maruku (0.6.0)
|
54
|
+
syntax (>= 1.0.0)
|
55
|
+
multi_json (1.0.4)
|
56
|
+
open4 (1.3.0)
|
57
|
+
posix-spawn (0.3.6)
|
58
|
+
rake (0.9.2.2)
|
59
|
+
redcarpet (2.0.1)
|
60
|
+
ruby-nuggets (0.8.2)
|
61
|
+
sass (3.1.12)
|
62
|
+
slim (1.0.4)
|
63
|
+
temple (~> 0.3.4)
|
64
|
+
tilt (~> 1.3.2)
|
65
|
+
syntax (1.0.0)
|
66
|
+
temple (0.3.4)
|
67
|
+
tilt (1.3.3)
|
68
|
+
yui-compressor (0.9.6)
|
69
|
+
POpen4 (>= 0.1.4)
|
70
|
+
|
71
|
+
PLATFORMS
|
72
|
+
ruby
|
73
|
+
|
74
|
+
DEPENDENCIES
|
75
|
+
hj7!
|
data/README.md
ADDED
data/Rakefile
ADDED
data/hj7.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/hj7/version", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.authors = ["Louis T."]
|
6
|
+
s.email = ["negonicrac@gmail.com"]
|
7
|
+
s.summary = %q{Jekyll plugins and hacks}
|
8
|
+
s.description = %q{Jekyll plugins and hacks}
|
9
|
+
s.homepage = ""
|
10
|
+
|
11
|
+
s.add_dependency "rake"
|
12
|
+
s.add_dependency "jekyll"
|
13
|
+
s.add_dependency "compass"
|
14
|
+
s.add_dependency "jammit"
|
15
|
+
s.add_dependency "coffee-script"
|
16
|
+
s.add_dependency "jekyll-tagging"
|
17
|
+
s.add_dependency "redcarpet", "~> 2.0.0b3"
|
18
|
+
s.add_dependency "slim"
|
19
|
+
s.add_dependency "albino"
|
20
|
+
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
|
+
|
25
|
+
s.name = "hj7"
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
s.version = HJ7::VERSION
|
28
|
+
end
|
data/lib/hj7/all.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require "hj7"
|
2
|
+
require "hj7/coffee_converter"
|
3
|
+
require "hj7/slim_converter"
|
4
|
+
require "hj7/compass_converter"
|
5
|
+
require "hj7/jammit"
|
6
|
+
require "hj7/redcarpet_converter"
|
7
|
+
require "hj7/notifier"
|
8
|
+
require "hj7/archive"
|
9
|
+
require "hj7/tagging"
|
10
|
+
require "hj7/tidy"
|
data/lib/hj7/archive.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
module HJ7::Archive
|
2
|
+
class ArchivePage < Jekyll::Page
|
3
|
+
def initialize(site, base, dir, name, data = {})
|
4
|
+
self.content = data.delete("content") || ""
|
5
|
+
self.data = data
|
6
|
+
|
7
|
+
super(site, base, dir, name)
|
8
|
+
end
|
9
|
+
|
10
|
+
def read_yaml(_, __)
|
11
|
+
# Do nothing
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class ArchiveGenerator < Jekyll::Generator
|
16
|
+
safe true
|
17
|
+
|
18
|
+
def generate(site)
|
19
|
+
if site.config["archive"]
|
20
|
+
@layouts = {}
|
21
|
+
|
22
|
+
@layouts[:yearly] = site.config["archive"]["yearly_page_layout"]
|
23
|
+
@layouts[:monthly] = site.config["archive"]["monthly_page_layout"]
|
24
|
+
@layouts[:daily] = site.config["archive"]["daily_page_layout"]
|
25
|
+
|
26
|
+
generate_yearly_archive_pages(site) if @layouts[:yearly]
|
27
|
+
generate_monthly_archive_pages(site) if @layouts[:monthly]
|
28
|
+
generate_daily_archive_pages(site) if @layouts[:daily]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def generate_yearly_archive_pages(site)
|
35
|
+
collate_posts(site.posts, "%Y").each {|key, posts|
|
36
|
+
puts "Generating year archive for #{key}"
|
37
|
+
site.pages << new_yearly_page(site, key, posts.sort.reverse)
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def new_yearly_page(site, key, posts)
|
42
|
+
year = key
|
43
|
+
|
44
|
+
ArchivePage.new(site, site.source, "/", "#{year}.html", {
|
45
|
+
"layout" => @layouts[:yearly],
|
46
|
+
"year" => year,
|
47
|
+
"posts" => posts
|
48
|
+
})
|
49
|
+
end
|
50
|
+
|
51
|
+
def generate_monthly_archive_pages(site)
|
52
|
+
collate_posts(site.posts, "%Y/%m").each do |key, posts|
|
53
|
+
puts "Generating monthly archive for #{key}"
|
54
|
+
site.pages << new_monthly_page(site, key, posts.sort.reverse)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def new_monthly_page(site, key, posts)
|
59
|
+
year, month = key.split("/")
|
60
|
+
|
61
|
+
ArchivePage.new(site, site.source, "#{year}/", "#{month}.html", {
|
62
|
+
"layout" => @layouts[:monthly],
|
63
|
+
"year" => year,
|
64
|
+
"month" => month,
|
65
|
+
"posts" => posts
|
66
|
+
})
|
67
|
+
end
|
68
|
+
|
69
|
+
def generate_daily_archive_pages(site)
|
70
|
+
collate_posts(site.posts, "%Y/%m/%d").each {|key, posts|
|
71
|
+
puts "Generating daily archive for #{key}"
|
72
|
+
site.pages << new_daily_page(site, key, posts.sort.reverse)
|
73
|
+
}
|
74
|
+
end
|
75
|
+
|
76
|
+
def new_daily_page(site, key, posts)
|
77
|
+
year, month, day = key.split("/")
|
78
|
+
|
79
|
+
ArchivePage.new(site, site.source, "#{year}/#{month}", "#{day}.html", {
|
80
|
+
"layout" => @layouts[:daily],
|
81
|
+
"year" => year,
|
82
|
+
"month" => month,
|
83
|
+
"day" => day,
|
84
|
+
"posts" => posts
|
85
|
+
})
|
86
|
+
end
|
87
|
+
|
88
|
+
def collate_posts(posts, strftime)
|
89
|
+
collated = {}
|
90
|
+
posts.each do |post|
|
91
|
+
key = post.date.strftime(strftime)
|
92
|
+
if collated.has_key? key
|
93
|
+
collated[key] << post
|
94
|
+
else
|
95
|
+
collated[key] = [post]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
collated
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "jekyll"
|
2
|
+
require "coffee-script"
|
3
|
+
|
4
|
+
module HJ7::Coffee
|
5
|
+
class CoffeeConverter < Jekyll::Converter
|
6
|
+
safe true
|
7
|
+
priority :normal
|
8
|
+
|
9
|
+
def matches(ext)
|
10
|
+
ext =~ /coffee/i
|
11
|
+
end
|
12
|
+
|
13
|
+
def output_ext(ext)
|
14
|
+
".js"
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(content)
|
18
|
+
begin
|
19
|
+
CoffeeScript.compile content
|
20
|
+
rescue StandardError => e
|
21
|
+
puts "CoffeeScript error:" + e.message
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "jekyll"
|
2
|
+
require "compass"
|
3
|
+
|
4
|
+
module HJ7::Compass
|
5
|
+
class CompassConverter < Jekyll::Converter
|
6
|
+
safe true
|
7
|
+
priority :low
|
8
|
+
|
9
|
+
def matches(ext)
|
10
|
+
ext =~ /scss/i
|
11
|
+
end
|
12
|
+
|
13
|
+
def output_ext(ext)
|
14
|
+
".css"
|
15
|
+
end
|
16
|
+
|
17
|
+
def compass
|
18
|
+
if @config.has_key?("compass") and @config["compass"].has_key?("config_file")
|
19
|
+
config_file = File.expand_path(@config["compass"]["config_file"])
|
20
|
+
@_compass ||= ::Compass.add_project_configuration config_file
|
21
|
+
else
|
22
|
+
@_compass ||= ::Compass::Configuration::Data.new("jekyll", @config["compass"]).
|
23
|
+
extend(::Compass::Configuration::Defaults).
|
24
|
+
extend(::Compass::Configuration::Comments)
|
25
|
+
end
|
26
|
+
@_compass
|
27
|
+
end
|
28
|
+
|
29
|
+
def convert(scss)
|
30
|
+
begin
|
31
|
+
::Sass::Engine.new(scss, compass.to_sass_engine_options).render
|
32
|
+
rescue => e
|
33
|
+
puts "Sass Exception: #{e.message}"
|
34
|
+
puts "Scss: #{scss}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/hj7/jammit.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
require "jekyll"
|
2
|
+
require "jammit"
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
class Site
|
6
|
+
alias :process_without_jammit :process
|
7
|
+
|
8
|
+
def process
|
9
|
+
process_without_jammit
|
10
|
+
if Jekyll::ENV == "production"
|
11
|
+
if config.has_key?("jammit") and config["tidy"].has_key?("config_file")
|
12
|
+
config_file = config["jammit"]["config_file"]
|
13
|
+
|
14
|
+
if config["tidy"].has_key?("asset_dir")
|
15
|
+
asset_dir = config["jammit"]["asset_dir"]
|
16
|
+
else
|
17
|
+
asset_dir = "assets"
|
18
|
+
end
|
19
|
+
|
20
|
+
if File.exists?(config_file)
|
21
|
+
puts "jammit!!"
|
22
|
+
system "jammit -o _site/#{asset_dir} -c #{config_file}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module HJ7::Jammit
|
31
|
+
module Tags
|
32
|
+
class AssetTag < Liquid::Tag
|
33
|
+
def initialize(tag_name, name, kind, tokens)
|
34
|
+
super tag_name, name, tokens
|
35
|
+
@name = name.to_s.strip
|
36
|
+
@kind = kind.to_s
|
37
|
+
@config = File.exists?("_assets.yml") ? YAML.load_file("_assets.yml") : {}
|
38
|
+
end
|
39
|
+
|
40
|
+
def render(context)
|
41
|
+
if Jekyll::ENV == "production"
|
42
|
+
markup "/assets/#{name_with_ext}"
|
43
|
+
else
|
44
|
+
(assets_for_name.map do |asset|
|
45
|
+
markup "#{@path}/#{asset}"
|
46
|
+
end).join("\n")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
def name_with_ext
|
53
|
+
"#{@name}.#{@ext}"
|
54
|
+
end
|
55
|
+
|
56
|
+
def assets_for_name
|
57
|
+
if @config[@asset_type].include?(@name)
|
58
|
+
@config[@asset_type][@name].map do |asset|
|
59
|
+
asset.gsub(/_site\/assets\/(stylesheets|javascripts)\//, "")
|
60
|
+
end
|
61
|
+
else
|
62
|
+
name_with_ext
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class IncludeJsTag < AssetTag
|
68
|
+
def initialize(tag_name, name, tokens)
|
69
|
+
@path = "/assets/javascripts"
|
70
|
+
@ext = "js"
|
71
|
+
@asset_type = "javascripts"
|
72
|
+
super tag_name, name, "js", tokens
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
|
77
|
+
def markup(src)
|
78
|
+
%{<script src="#{src}" type="text/javascript"></script>}.to_s
|
79
|
+
end
|
80
|
+
end
|
81
|
+
Liquid::Template.register_tag("include_js", IncludeJsTag)
|
82
|
+
|
83
|
+
class IncludeCssTag < AssetTag
|
84
|
+
def initialize(tag_name, name, tokens)
|
85
|
+
@path = "/assets/stylesheets"
|
86
|
+
@ext = "css"
|
87
|
+
@asset_type = "stylesheets"
|
88
|
+
super tag_name, name, "css", tokens
|
89
|
+
end
|
90
|
+
|
91
|
+
protected
|
92
|
+
|
93
|
+
def markup(src)
|
94
|
+
%{<link href="#{src}" media="screen" rel="stylesheet" type="text/css" />}.to_s
|
95
|
+
end
|
96
|
+
end
|
97
|
+
Liquid::Template.register_tag("include_css", IncludeCssTag)
|
98
|
+
end
|
99
|
+
end
|
data/lib/hj7/notifier.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
require "jekyll"
|
2
|
+
|
3
|
+
module HJ7::Notifier
|
4
|
+
APPLICATION_NAME = "Jekyll"
|
5
|
+
|
6
|
+
def self.turn_off
|
7
|
+
ENV["JEKYLL_NOTIFY"] = "false"
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.turn_on
|
11
|
+
ENV["JEKYLL_NOTIFY"] = "true"
|
12
|
+
|
13
|
+
case RbConfig::CONFIG["target_os"]
|
14
|
+
when /darwin/i
|
15
|
+
require_growl
|
16
|
+
when /linux/i
|
17
|
+
require_libnotify
|
18
|
+
when /mswin|mingw/i
|
19
|
+
require_rbnotifu
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.notify(message, options = {})
|
24
|
+
if enabled?
|
25
|
+
image = options.delete(:image)
|
26
|
+
title = options.delete(:title) || "Jekyll"
|
27
|
+
|
28
|
+
case RbConfig::CONFIG["target_os"]
|
29
|
+
when /darwin/i
|
30
|
+
notify_mac(title, message, image, options)
|
31
|
+
when /linux/i
|
32
|
+
notify_linux(title, message, image, options)
|
33
|
+
when /mswin|mingw/i
|
34
|
+
notify_windows(title, message, image, options)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.enabled?
|
40
|
+
ENV["JEKYLL_NOTIFY"] == "true"
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def self.notify_mac(title, message, image, options)
|
46
|
+
default_options = { title: title, icon: image, name: APPLICATION_NAME }
|
47
|
+
default_options.merge!(options)
|
48
|
+
|
49
|
+
if defined?(GrowlNotify)
|
50
|
+
default_options[:description] = message
|
51
|
+
default_options[:application_name] = APPLICATION_NAME
|
52
|
+
default_options.delete(:name)
|
53
|
+
|
54
|
+
GrowlNotify.send_notification(default_options) if enabled?
|
55
|
+
else
|
56
|
+
Growl.notify message, default_options.merge(options) if enabled?
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.notify_linux(title, message, image, options)
|
61
|
+
default_options = { body: message, summary: title, icon_path: image, transient: true }
|
62
|
+
Libnotify.show default_options.merge(options) if enabled?
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.notify_windows(title, message, image, options)
|
66
|
+
default_options = { message: message, title: title, type: :info, time: 3 }
|
67
|
+
Notifu.show default_options.merge(options) if enabled?
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.require_growl
|
71
|
+
begin
|
72
|
+
require "growl_notify"
|
73
|
+
|
74
|
+
if GrowlNotify.application_name != APPLICATION_NAME
|
75
|
+
GrowlNotify.config do |c|
|
76
|
+
c.notifications = c.default_notifications = [ APPLICATION_NAME ]
|
77
|
+
c.application_name = c.notifications.first
|
78
|
+
end
|
79
|
+
end
|
80
|
+
rescue LoadError
|
81
|
+
require "growl"
|
82
|
+
end
|
83
|
+
rescue LoadError
|
84
|
+
turn_off
|
85
|
+
puts "Please install growl or growl_notify gem for Mac OS X notification support and add it to your Gemfile"
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.require_libnotify
|
89
|
+
require "libnotify"
|
90
|
+
rescue LoadError
|
91
|
+
turn_off
|
92
|
+
puts "Please install libnotify gem for Linux notification support and add it to your Gemfile"
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.require_rbnotifu
|
96
|
+
require "rb-notifu"
|
97
|
+
rescue LoadError
|
98
|
+
turn_off
|
99
|
+
puts "Please install rb-notifu gem for Windows notification support and add it to your Gemfile"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
HJ7::Notifier.turn_on
|
103
|
+
|
104
|
+
module Jekyll
|
105
|
+
class Site
|
106
|
+
alias :process_without_growl :process
|
107
|
+
|
108
|
+
def process
|
109
|
+
if config.has_key?("notifier") and config["notifier"].has_key?("image")
|
110
|
+
image_path = config["notifier"]["image"]
|
111
|
+
if File.exists?(image_path)
|
112
|
+
image = File.expand_path(image_path)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
options = {}
|
117
|
+
options[:icon] = image
|
118
|
+
HJ7::Notifier.notify "Building...", options
|
119
|
+
process_without_growl
|
120
|
+
HJ7::Notifier.notify "Build complete", options
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "jekyll"
|
2
|
+
require "redcarpet"
|
3
|
+
require "albino"
|
4
|
+
|
5
|
+
module HJ7::RedcarpetConverter
|
6
|
+
end
|
7
|
+
|
8
|
+
class HTMLwithPygments < Redcarpet::Render::HTML
|
9
|
+
def block_code(code, language)
|
10
|
+
Albino.colorize(code, language)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Jekyll
|
15
|
+
class MarkdownConverter < Converter
|
16
|
+
def markdown
|
17
|
+
@_markdown ||= ::Redcarpet::Markdown.new(
|
18
|
+
HTMLwithPygments, autolink: true, fenced_code_blocks: true,
|
19
|
+
strikethrough: true, superscript: true, no_intra_emphasis: true,
|
20
|
+
tables:true)
|
21
|
+
end
|
22
|
+
|
23
|
+
def convert(content)
|
24
|
+
markdown.render(content)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
require 'slim'
|
3
|
+
|
4
|
+
module HJ7::Slim
|
5
|
+
class SlimConverter < Jekyll::Converter
|
6
|
+
safe true
|
7
|
+
priority :normal
|
8
|
+
|
9
|
+
def matches(ext)
|
10
|
+
ext =~ /slim/i
|
11
|
+
end
|
12
|
+
|
13
|
+
def output_ext(ext)
|
14
|
+
'.html'
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(content)
|
18
|
+
begin
|
19
|
+
Slim::Template.new({}) { content }.render
|
20
|
+
rescue StandardError => e
|
21
|
+
puts 'Slim error:' + e.message
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/hj7/tagging.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module HJ7::Tagging
|
2
|
+
end
|
3
|
+
|
4
|
+
require "jekyll/tagging"
|
5
|
+
|
6
|
+
module Jekyll
|
7
|
+
module Filters
|
8
|
+
def tag_url(tag, dir = "tags")
|
9
|
+
"/#{dir}/#{ERB::Util.u(tag)}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def tags(obj)
|
13
|
+
tags = obj["tags"][0].is_a?(Array) ? obj["tags"].map{ |t| t[0]} : obj["tags"]
|
14
|
+
tags.map { |t| tag_link(t, tag_url(t)) if t.is_a?(String) }.compact.join(" ")
|
15
|
+
end
|
16
|
+
|
17
|
+
def ordinal(num)
|
18
|
+
num = num.to_i
|
19
|
+
case num % 100
|
20
|
+
when 11..13; "#{num}th"
|
21
|
+
else
|
22
|
+
case num % 10
|
23
|
+
when 1; "#{num}st"
|
24
|
+
when 2; "#{num}nd"
|
25
|
+
when 3; "#{num}rd"
|
26
|
+
else "#{num}th"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def month_name(month_number)
|
32
|
+
month_number = month_number.to_i
|
33
|
+
Date::MONTHNAMES[month_number]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/hj7/tasks.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
def ok_failed(condition)
|
2
|
+
if (condition)
|
3
|
+
puts "OK"
|
4
|
+
else
|
5
|
+
puts "FAILED"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "generate website in output directory"
|
10
|
+
task :default => :generate_site do
|
11
|
+
puts ">>> Site Generating Complete! <<<\n\n"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "remove files in output directory"
|
15
|
+
task :clean do
|
16
|
+
puts ">>> Removing output <<<"
|
17
|
+
Dir["_site/*"].each { |f| rm_rf(f) }
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Generate site files only"
|
21
|
+
task :generate_site => :clean do
|
22
|
+
puts "\n\n>>> Generating site files <<<"
|
23
|
+
ENV["JEKYLL_ENV"] = "production"
|
24
|
+
system "jekyll --no-server --no-auto --no-future"
|
25
|
+
end
|
26
|
+
|
27
|
+
# usage rake post[my-new-post] or rake post["my new post"] or rake post (defaults to "new-post")
|
28
|
+
desc "Begin a new post in _posts"
|
29
|
+
task :post, :filename do |t, args|
|
30
|
+
args.with_defaults(:filename => "new-post")
|
31
|
+
time = Time.now.strftime("%Y-%m-%d_%H-%M")
|
32
|
+
system "touch _posts/#{time}-#{args.filename}.md"
|
33
|
+
end
|
34
|
+
|
35
|
+
# usage rake post[my-new-post] or rake post["my new post"] or rake post (defaults to "new-post")
|
36
|
+
desc "Begin a new post in _drafts"
|
37
|
+
task :draft, :filename do |t, args|
|
38
|
+
args.with_defaults(:filename => "new-post")
|
39
|
+
time = Time.now.strftime("%Y-%m-%d_%H-%M")
|
40
|
+
system "touch _drafts/#{time}-#{args.filename}.md"
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "start development server"
|
44
|
+
task :server do
|
45
|
+
system "bundle exec jekyll --server"
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "watch the project for changes"
|
49
|
+
task :watch do
|
50
|
+
system "bundle exec jekyll"
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "generate and deploy website via fog"
|
54
|
+
task :deploy => :default do
|
55
|
+
puts ">>> DEPLOYING SITE <<<"
|
56
|
+
|
57
|
+
configs = YAML::load_file("_fog.yml")
|
58
|
+
|
59
|
+
src = File.expand_path("_site")
|
60
|
+
bucket = configs.delete(:bucket) || configs.delete(:bucket_name)
|
61
|
+
path = nil
|
62
|
+
|
63
|
+
puts "Connecting"
|
64
|
+
connection = ::Fog::Storage.new(configs)
|
65
|
+
|
66
|
+
# Get bucket
|
67
|
+
puts "Getting bucket"
|
68
|
+
begin
|
69
|
+
directory = connection.directories.get(bucket)
|
70
|
+
rescue ::Excon::Errors::NotFound
|
71
|
+
should_create_bucket = true
|
72
|
+
end
|
73
|
+
should_create_bucket = true if directory.nil?
|
74
|
+
|
75
|
+
# Create bucket if necessary
|
76
|
+
if should_create_bucket
|
77
|
+
directory = connection.directories.create(key: bucket)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Get list of remote files
|
81
|
+
files = directory.files
|
82
|
+
truncated = files.respond_to?(:is_truncated) && files.is_truncated
|
83
|
+
while truncated
|
84
|
+
set = directory.files.all(marker: files.last.key)
|
85
|
+
truncated = set.is_truncated
|
86
|
+
files = files + set
|
87
|
+
end
|
88
|
+
|
89
|
+
# Delete all the files in the bucket
|
90
|
+
puts "Removing remote files"
|
91
|
+
files.all.each do |file|
|
92
|
+
file.destroy
|
93
|
+
end
|
94
|
+
|
95
|
+
# Upload all the files in the output folder to the clouds
|
96
|
+
puts "Uploading local files"
|
97
|
+
FileUtils.cd(src) do
|
98
|
+
files = Dir["**/*"].select { |f| File.file?(f) }
|
99
|
+
files.each do |file_path|
|
100
|
+
directory.files.create(
|
101
|
+
key: "#{path}#{file_path}",
|
102
|
+
body: File.open(file_path),
|
103
|
+
public: true)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
puts "Done!"
|
108
|
+
end
|
data/lib/hj7/tidy.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Jekyll
|
2
|
+
class Site
|
3
|
+
alias :process_without_tidy :process
|
4
|
+
|
5
|
+
def process
|
6
|
+
process_without_tidy
|
7
|
+
if config.has_key?("tidy") and config["tidy"].has_key?("config_file")
|
8
|
+
config_file = config["tidy"]["config_file"]
|
9
|
+
if File.exists?(config_file)
|
10
|
+
puts "tidy!!"
|
11
|
+
system "find _site -name \"*.html\" -exec tidy -config #{config_file} {} \;"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/hj7/version.rb
ADDED
data/lib/hj7.rb
ADDED
metadata
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hj7
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Louis T.
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70129986242040 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70129986242040
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: jekyll
|
27
|
+
requirement: &70129986241620 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70129986241620
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: compass
|
38
|
+
requirement: &70129986241200 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70129986241200
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: jammit
|
49
|
+
requirement: &70129986240780 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70129986240780
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: coffee-script
|
60
|
+
requirement: &70129986290780 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70129986290780
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jekyll-tagging
|
71
|
+
requirement: &70129986290360 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70129986290360
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: redcarpet
|
82
|
+
requirement: &70129986289860 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 2.0.0b3
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70129986289860
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: slim
|
93
|
+
requirement: &70129986289440 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :runtime
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70129986289440
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: albino
|
104
|
+
requirement: &70129986288980 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70129986288980
|
113
|
+
description: Jekyll plugins and hacks
|
114
|
+
email:
|
115
|
+
- negonicrac@gmail.com
|
116
|
+
executables: []
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- .gitignore
|
121
|
+
- Gemfile
|
122
|
+
- Gemfile.lock
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- hj7.gemspec
|
126
|
+
- lib/hj7.rb
|
127
|
+
- lib/hj7/all.rb
|
128
|
+
- lib/hj7/archive.rb
|
129
|
+
- lib/hj7/coffee_converter.rb
|
130
|
+
- lib/hj7/compass_converter.rb
|
131
|
+
- lib/hj7/jammit.rb
|
132
|
+
- lib/hj7/notifier.rb
|
133
|
+
- lib/hj7/redcarpet_converter.rb
|
134
|
+
- lib/hj7/slim_converter.rb
|
135
|
+
- lib/hj7/tagging.rb
|
136
|
+
- lib/hj7/tasks.rb
|
137
|
+
- lib/hj7/tidy.rb
|
138
|
+
- lib/hj7/version.rb
|
139
|
+
homepage: ''
|
140
|
+
licenses: []
|
141
|
+
post_install_message:
|
142
|
+
rdoc_options: []
|
143
|
+
require_paths:
|
144
|
+
- lib
|
145
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
segments:
|
152
|
+
- 0
|
153
|
+
hash: -3446246673627346785
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
segments:
|
161
|
+
- 0
|
162
|
+
hash: -3446246673627346785
|
163
|
+
requirements: []
|
164
|
+
rubyforge_project:
|
165
|
+
rubygems_version: 1.8.11
|
166
|
+
signing_key:
|
167
|
+
specification_version: 3
|
168
|
+
summary: Jekyll plugins and hacks
|
169
|
+
test_files: []
|