hj7 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|