foreman_remote_execution 0.0.1 → 0.0.2

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.
Files changed (36) hide show
  1. checksums.yaml +5 -13
  2. data/doc/Gemfile +7 -0
  3. data/doc/Gemfile.lock +90 -0
  4. data/doc/Rakefile +41 -0
  5. data/doc/_config.yml +33 -0
  6. data/doc/plugins/alert_block.rb +27 -0
  7. data/doc/plugins/div_tag.rb +24 -0
  8. data/doc/plugins/graphviz.rb +121 -0
  9. data/doc/plugins/plantuml.rb +84 -0
  10. data/doc/plugins/play.rb +13 -0
  11. data/doc/plugins/tags.rb +138 -0
  12. data/doc/plugins/toc.rb +20 -0
  13. data/doc/source/404.md +6 -0
  14. data/doc/source/_includes/footer.html +21 -0
  15. data/doc/source/_includes/header.html +59 -0
  16. data/doc/source/_includes/tocify.html +6 -0
  17. data/doc/source/_layouts/default.html +9 -0
  18. data/doc/source/_layouts/page.html +25 -0
  19. data/doc/source/atom.xml +32 -0
  20. data/doc/source/design/index.md +1317 -0
  21. data/doc/source/index.md +18 -0
  22. data/doc/source/static/css/bootstrap-responsive.min.css +9 -0
  23. data/doc/source/static/css/bootstrap.min.css +866 -0
  24. data/doc/source/static/css/jquery.tocify.css +128 -0
  25. data/doc/source/static/css/style.css +285 -0
  26. data/doc/source/static/css/syntax.css +60 -0
  27. data/doc/source/static/images/foreman.png +0 -0
  28. data/doc/source/static/images/glyphicons-halflings-white.png +0 -0
  29. data/doc/source/static/images/glyphicons-halflings.png +0 -0
  30. data/doc/source/static/js/bootstrap.min.js +7 -0
  31. data/doc/source/static/js/jquery-ui-1.9.2.custom.min.js +6 -0
  32. data/doc/source/static/js/jquery.js +2 -0
  33. data/doc/source/static/js/jquery.tocify.min.js +3 -0
  34. data/doc/source/static/js/scroll.js +24 -0
  35. data/lib/foreman_remote_execution/version.rb +1 -1
  36. metadata +90 -23
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NWZhMzJhMTQ4MDZjODIyYTNhODE4NTQyZjY4MDQ2M2RkYTQ2YWRmNw==
5
- data.tar.gz: !binary |-
6
- YzFkYTZlMjZjOTNjMjg5MjRlZjA0YzhlODkxMjNiN2NkOTljMTgxMw==
2
+ SHA1:
3
+ metadata.gz: 14df7931599fdfff719c3c5c9fa6bccc8204bd74
4
+ data.tar.gz: 227732341a3e7cc85392236bf15728e7a1be9640
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NGMzOWIyMmZlMTU2MGM3NTBmYjFhM2I4MWRkOTZhMzg4NzUxMzBhNzM4ZmQ1
10
- MzE5N2Q5NDU5Nzc2MGMyMDc0ZTgwOTY2NWU3NTg0OGZjYTY0NWYwYTE0ZGNi
11
- NmViNTlhY2JkOWI1MWI2N2ZjYjYxNTE1NTgxY2Q4NTBkYTc2ZmY=
12
- data.tar.gz: !binary |-
13
- OGVlYzBhMDYyZjFlYTAzMDVmZjU2YjEyMDIwZDNiOGJhNjVmNjcyNGIzMTVi
14
- MjVkYzUyMTA3OTEzNDExNzRiZDUyZDczYmJkOGQyNDg4MTY4N2IwODYwZjU5
15
- MDY1N2UwMDAxNTQyODQ5MGQzZWQ2N2UwMWZlYmQ5YmYzMTc3Njg=
6
+ metadata.gz: df9b36dea0fc4332234f07614cb6cbd6cfd388e39fdf99dd473f1bd653dd6ad0e892d7e0da5020045a7df5cedca13eb9a5a866c03e58957ae3709a675e01443e
7
+ data.tar.gz: aab71ad163408fec86b470a3a4a07aa899c2bfeef99d5e239e5e0a8ea2107edc072ebb020f8f2aed06a384d4d528a4bcf07014590d253af976dbf27b55f7df45
data/doc/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+ gem 'jekyll'
5
+ gem 'pry'
6
+ gem 'ruby-nuggets' # require by tags plugin
7
+ gem 'therubyracer'
data/doc/Gemfile.lock ADDED
@@ -0,0 +1,90 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ blankslate (2.1.2.4)
5
+ celluloid (0.16.0)
6
+ timers (~> 4.0.0)
7
+ classifier-reborn (2.0.3)
8
+ fast-stemmer (~> 1.0)
9
+ coderay (1.1.0)
10
+ coffee-script (2.3.0)
11
+ coffee-script-source
12
+ execjs
13
+ coffee-script-source (1.9.1)
14
+ colorator (0.1)
15
+ execjs (2.3.0)
16
+ fast-stemmer (1.0.2)
17
+ ffi (1.9.6)
18
+ hitimes (1.2.2)
19
+ jekyll (2.5.3)
20
+ classifier-reborn (~> 2.0)
21
+ colorator (~> 0.1)
22
+ jekyll-coffeescript (~> 1.0)
23
+ jekyll-gist (~> 1.0)
24
+ jekyll-paginate (~> 1.0)
25
+ jekyll-sass-converter (~> 1.0)
26
+ jekyll-watch (~> 1.1)
27
+ kramdown (~> 1.3)
28
+ liquid (~> 2.6.1)
29
+ mercenary (~> 0.3.3)
30
+ pygments.rb (~> 0.6.0)
31
+ redcarpet (~> 3.1)
32
+ safe_yaml (~> 1.0)
33
+ toml (~> 0.1.0)
34
+ jekyll-coffeescript (1.0.1)
35
+ coffee-script (~> 2.2)
36
+ jekyll-gist (1.1.0)
37
+ jekyll-paginate (1.1.0)
38
+ jekyll-sass-converter (1.3.0)
39
+ sass (~> 3.2)
40
+ jekyll-watch (1.2.1)
41
+ listen (~> 2.7)
42
+ kramdown (1.6.0)
43
+ libv8 (3.16.14.7)
44
+ liquid (2.6.2)
45
+ listen (2.8.5)
46
+ celluloid (>= 0.15.2)
47
+ rb-fsevent (>= 0.9.3)
48
+ rb-inotify (>= 0.9)
49
+ mercenary (0.3.5)
50
+ method_source (0.8.2)
51
+ nuggets (1.0.0)
52
+ parslet (1.5.0)
53
+ blankslate (~> 2.0)
54
+ posix-spawn (0.3.10)
55
+ pry (0.10.1)
56
+ coderay (~> 1.1.0)
57
+ method_source (~> 0.8.1)
58
+ slop (~> 3.4)
59
+ pygments.rb (0.6.2)
60
+ posix-spawn (~> 0.3.6)
61
+ yajl-ruby (~> 1.2.0)
62
+ rake (10.4.2)
63
+ rb-fsevent (0.9.4)
64
+ rb-inotify (0.9.5)
65
+ ffi (>= 0.5.0)
66
+ redcarpet (3.2.2)
67
+ ref (1.0.5)
68
+ ruby-nuggets (1.0.0)
69
+ nuggets (= 1.0.0)
70
+ safe_yaml (1.0.4)
71
+ sass (3.4.13)
72
+ slop (3.6.0)
73
+ therubyracer (0.12.1)
74
+ libv8 (~> 3.16.14.0)
75
+ ref
76
+ timers (4.0.1)
77
+ hitimes
78
+ toml (0.1.2)
79
+ parslet (~> 1.5.0)
80
+ yajl-ruby (1.2.1)
81
+
82
+ PLATFORMS
83
+ ruby
84
+
85
+ DEPENDENCIES
86
+ jekyll
87
+ pry
88
+ rake
89
+ ruby-nuggets
90
+ therubyracer
data/doc/Rakefile ADDED
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ root = File.dirname __FILE__
5
+
6
+ task :default => :publish
7
+
8
+ def system(cmd)
9
+ puts ">> #{cmd}"
10
+ super cmd
11
+ end
12
+
13
+ task :plantuml_install do
14
+ unless File.exist?('.bin/plantuml.jar')
15
+ sh 'wget https://downloads.sourceforge.net/project/plantuml/plantuml.jar -O .bin/plantuml.jar'
16
+ end
17
+ end
18
+
19
+ task :fetch do
20
+ unless File.exist?('public/.git')
21
+ FileUtils.rm_rf('public')
22
+ sh 'git clone git@github.com:theforeman/foreman_remote_execution.git public'
23
+ end
24
+ Dir.chdir('public') do
25
+ sh 'git fetch --all'
26
+ sh 'git checkout gh-pages'
27
+ sh 'git reset --hard origin/gh-pages'
28
+ end
29
+ end
30
+
31
+ task :build => :plantuml_install do
32
+ sh 'jekyll build'
33
+ end
34
+
35
+ task :publish => [:fetch, :build] do
36
+ Dir.chdir('public') do
37
+ sh 'git add -A .'
38
+ sh 'git commit -m Update'
39
+ sh 'git push'
40
+ end
41
+ end
data/doc/_config.yml ADDED
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: Formean Remote Execution
3
+ title: Foreman Remote Execution
4
+ url: http://theforeman.github.io
5
+ baseurl: /foreman_remote_execution/
6
+ markdown: redcarpet
7
+ highlighter: pygments
8
+
9
+ source: ./source
10
+ destination: ./public
11
+ plugins: ./plugins
12
+ include:
13
+ - .nojekyll
14
+
15
+ tag_page_layout: tag_page
16
+ tag_page_dir: tag
17
+
18
+ permalink: /blog/:year/:month/:day/:title/
19
+
20
+ sass:
21
+ sass_dir: _sass
22
+
23
+ redcarpet:
24
+ extensions:
25
+ - with_toc_data
26
+ - html_toc
27
+ - strikethrough
28
+
29
+ plantuml:
30
+ plantuml_jar: .bin/plantuml.jar # path to plantuml jar
31
+ tmp_folder: tmp # tmp folder to put generated image files
32
+ background_color: transparent # [optional] UML image background color
33
+ # dot_exe: /usr/local/bin/dot # [optional] path to Graphviz dot execution
@@ -0,0 +1,27 @@
1
+ require_relative 'div_tag'
2
+
3
+ module Jekyll
4
+ class AlertBlock < DivTag
5
+ def initialize(tag_name, markup, tokens)
6
+ @alert_type = tag_name.split('_').first
7
+ super tag_name, markup + ' alert alert-' + @alert_type, tokens
8
+ end
9
+
10
+ def tag
11
+ 'div'
12
+ end
13
+
14
+ HEADER = { 'info' => 'Note',
15
+ 'warning' => 'Warning',
16
+ 'danger' => 'Danger' }
17
+
18
+ def render_content(context, content)
19
+ super context, "**#{HEADER[@alert_type]}** \n" + content
20
+ end
21
+ end
22
+ end
23
+
24
+ Liquid::Template.register_tag('info_block', Jekyll::AlertBlock)
25
+ Liquid::Template.register_tag('warning_block', Jekyll::AlertBlock)
26
+ Liquid::Template.register_tag('danger_block', Jekyll::AlertBlock)
27
+ # Liquid::Template.register_tag('success_block', Jekyll::AlertBlock)
@@ -0,0 +1,24 @@
1
+ module Jekyll
2
+ class DivTag < Liquid::Block
3
+ def render(context)
4
+ content = super
5
+
6
+ <<-HTML.gsub(/^ +\|/, '')
7
+ |<#{tag} class="#{@markup}">
8
+ | #{render_content context, content}
9
+ |</#{tag}>
10
+ HTML
11
+ end
12
+
13
+ def tag
14
+ @tag_name.split('_').first
15
+ end
16
+
17
+ def render_content(context, content)
18
+ context.registers[:site].converters.find { |c| c.is_a? Jekyll::Converters::Markdown }.convert(content)
19
+ end
20
+ end
21
+ end
22
+
23
+ Liquid::Template.register_tag('div_tag', Jekyll::DivTag)
24
+ Liquid::Template.register_tag('span_tag', Jekyll::DivTag)
@@ -0,0 +1,121 @@
1
+ # taken from https://raw.githubusercontent.com/kui/octopress-graphviz/master/graphviz_block.rb
2
+
3
+ require 'open3'
4
+
5
+ module Jekyll
6
+ class GraphvizBlock < Liquid::Block
7
+
8
+ DIV_CLASS_ATTR = 'graphviz-wrapper'
9
+ DEFAULT_GRAPH_NAME = 'Graphviz'
10
+ DOT_OPTS = '-Tsvg'
11
+ DOT_EXEC = 'dot'
12
+ DOT_EXTS = (ENV['PATHEXT'] || '.exe;.bat;.com').split(";")
13
+ DOT_EXTS.unshift ''
14
+ DOT_PATH = ENV['PATH'].split(File::PATH_SEPARATOR)
15
+ .map { |a| File.join a, DOT_EXEC }
16
+ .map { |a| DOT_EXTS.map { |ex| a+ex } }.flatten
17
+ .find { |c| File.executable_real? c }
18
+ raise "not found a executable file: #{DOT_EXEC}" if DOT_PATH.nil?
19
+ DOT_CMD = "#{DOT_PATH} #{DOT_OPTS}"
20
+
21
+ def initialize(tag_name, markup, tokens)
22
+ super
23
+ @tag_name = tag_name
24
+
25
+ @title = markup or ""
26
+ @title.strip!
27
+
28
+ @src = ""
29
+ end
30
+
31
+ def render(context)
32
+ code = super
33
+ title = if @title.empty? then
34
+ DEFAULT_GRAPH_NAME
35
+ else
36
+ @title
37
+ end
38
+
39
+ case @tag_name
40
+ when 'graphviz' then
41
+ render_graphviz code
42
+ when 'graph' then
43
+ render_graph 'graph', title, code
44
+ when 'digraph' then
45
+ render_graph 'digraph', title, code
46
+ else
47
+ raise "unknown liquid tag name: #{@tag_name}"
48
+ end
49
+ end
50
+
51
+ def render_graphviz(code)
52
+ @src = code
53
+ svg = generate_svg code
54
+ filter_for_inline_svg svg
55
+ end
56
+
57
+ def filter_for_inline_svg(code)
58
+ code = remove_declarations code
59
+ code = remove_xmlns_attrs code
60
+ code = add_desc_attrs code
61
+ code = insert_desc_elements code
62
+ code = wrap_with_div code
63
+ code = code.gsub /<polygon fill="white" stroke="none"/, '<polygon fill="transparent" stroke="none"'
64
+ code
65
+ end
66
+
67
+ def generate_svg code
68
+ Open3.popen3(DOT_CMD) do |stdin, stdout, stderr|
69
+ stdout.binmode
70
+ stdin.print code
71
+ stdin.close
72
+
73
+ err = stderr.read
74
+ if not (err.nil? || err.strip.empty?)
75
+ raise "Error from #{DOT_CMD}:\n#{err}"
76
+ end
77
+
78
+ svg = stdout.read
79
+ svg.force_encoding 'UTF-8'
80
+
81
+ return svg
82
+ end
83
+ end
84
+
85
+ def remove_declarations(svg)
86
+ svg.sub(/<!DOCTYPE .+?>/im, '').sub(/<\?xml .+?\?>/im, '')
87
+ end
88
+
89
+ def remove_xmlns_attrs(svg)
90
+ svg.sub(%[xmlns="http://www.w3.org/2000/svg"], '')
91
+ .sub(%[xmlns:xlink="http://www.w3.org/1999/xlink"], '')
92
+ end
93
+
94
+ def add_desc_attrs(svg)
95
+ svg.sub!("<svg", %[<svg aria-label="#{CGI::escapeHTML @title}"])
96
+ svg.sub!("<svg", %[<svg role="img"])
97
+
98
+ return svg
99
+ end
100
+
101
+ def insert_desc_elements(svg)
102
+ inserted_elements = %[<title>#{CGI::escapeHTML @title}</title>\n]
103
+ inserted_elements << %[<desc>#{CGI::escapeHTML @src}</desc>\n]
104
+ svg.sub!(/(<svg [^>]*>)/, "\\1\n#{inserted_elements}")
105
+
106
+ return svg
107
+ end
108
+
109
+ def wrap_with_div(svg)
110
+ %[<div class="#{DIV_CLASS_ATTR}">#{svg}</div>]
111
+ end
112
+
113
+ def render_graph(type, title, code)
114
+ render_graphviz %[#{type} "#{title}" { #{code} }]
115
+ end
116
+ end
117
+ end
118
+
119
+ Liquid::Template.register_tag('graphviz', Jekyll::GraphvizBlock)
120
+ Liquid::Template.register_tag('graph', Jekyll::GraphvizBlock)
121
+ Liquid::Template.register_tag('digraph', Jekyll::GraphvizBlock)
@@ -0,0 +1,84 @@
1
+ # Title: PlantUML Code Blocks for Jekyll
2
+ # Author: YJ Park (yjpark@gmail.com)
3
+ # https://github.com/yjpark/jekyll-plantuml
4
+ # Description: Integrate PlantUML into Jekyll and Octopress.
5
+ #
6
+ # Syntax:
7
+ # {% plantuml %}
8
+ # plantuml code
9
+ # {% endplantuml %}
10
+ #
11
+ require 'open3'
12
+ require 'fileutils'
13
+
14
+ module Jekyll
15
+
16
+ class PlantUMLBlock < Liquid::Block
17
+ attr_reader :config
18
+
19
+ def render(context)
20
+ site = context.registers[:site]
21
+ self.config = site.config['plantuml']
22
+
23
+ tmproot = File.expand_path(tmp_folder)
24
+ folder = "/images/plantuml/"
25
+ create_tmp_folder(tmproot, folder)
26
+
27
+ code = @nodelist.join + background_color
28
+ filename = Digest::MD5.hexdigest(code) + ".png"
29
+ filepath = tmproot + folder + filename
30
+ if !File.exist?(filepath)
31
+ plantuml_jar = File.expand_path(plantuml_jar_path)
32
+ cmd = "java -Djava.awt.headless=true -jar " + plantuml_jar + dot_cmd + " -pipe > " + filepath
33
+ result, status = Open3.capture2e(cmd, :stdin_data=>code)
34
+ Jekyll.logger.debug(filepath + " -->\t" + status.inspect() + "\t" + result)
35
+ end
36
+
37
+ site.static_files << Jekyll::StaticFile.new(site, tmproot, folder, filename)
38
+
39
+ "<img src='" + "#{ site.baseurl }/" + folder + filename + "'>"
40
+ end
41
+
42
+ private
43
+
44
+ def config=(cfg)
45
+ @config = cfg || Jekyll.logger.abort_with("Missing 'plantuml' configurations.")
46
+ end
47
+
48
+ def background_color
49
+ config['background_color'].nil? ? '' : " skinparam backgroundColor " + config['background_color']
50
+ end
51
+
52
+ def plantuml_jar_path
53
+ config['plantuml_jar'] || Jekyll.logger.abort_with("Missing configuration 'plantuml.plantuml_jar'.")
54
+ end
55
+
56
+ def tmp_folder
57
+ config['tmp_folder'] || Jekyll.logger.abort_with("Missing configuration 'plantuml.tmp_folder'.")
58
+ end
59
+
60
+ def dot_cmd
61
+ @dot_cmd ||= begin
62
+ dotpath = File.expand_path(config['dot_exe'] || '__NULL__')
63
+ if File.exist?(dotpath)
64
+ # Jekyll.logger.info("PlantUML: Use graphviz dot: " + dotpath)
65
+ " -graphvizdot " + dotpath
66
+ else
67
+ # Jekyll.logger.info("PlantUML: Assume graphviz dot is in PATH.")
68
+ ''
69
+ end
70
+ end
71
+ end
72
+
73
+ def create_tmp_folder(tmproot, folder)
74
+ folderpath = tmproot + folder
75
+ if !File.exist?(folderpath)
76
+ FileUtils::mkdir_p folderpath
77
+ Jekyll.logger.info("Create PlantUML image folder: " + folderpath)
78
+ end
79
+ end
80
+
81
+ end # PlantUMLBlock
82
+ end
83
+
84
+ Liquid::Template.register_tag('plantuml', Jekyll::PlantUMLBlock)
@@ -0,0 +1,13 @@
1
+ require 'pp'
2
+ require 'pry'
3
+
4
+ module Jekyll
5
+
6
+ class Play < Generator
7
+ def generate(site)
8
+ # pp site
9
+ # binding.pry
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,138 @@
1
+ require 'nuggets/range/quantile'
2
+ require 'erb'
3
+
4
+ module Jekyll
5
+
6
+ class Tagger < Generator
7
+
8
+ safe true
9
+
10
+ attr_accessor :site
11
+
12
+ @types = [:page, :feed]
13
+
14
+ class << self; attr_accessor :types, :site; end
15
+
16
+ def generate(site)
17
+ self.class.site = self.site = site
18
+
19
+ generate_tag_pages
20
+ add_tag_cloud
21
+ end
22
+
23
+ private
24
+
25
+ # Generates a page per tag and adds them to all the pages of +site+.
26
+ # A <tt>tag_page_layout</tt> have to be defined in your <tt>_config.yml</tt>
27
+ # to use this.
28
+ def generate_tag_pages
29
+ active_tags.each { |tag, posts| new_tag(tag, posts) }
30
+ end
31
+
32
+ def new_tag(tag, posts)
33
+ self.class.types.each { |type|
34
+ if layout = site.config["tag_#{type}_layout"]
35
+ data = { 'layout' => layout, 'posts' => posts.sort.reverse!, 'tag' => tag, 'title' => tag }
36
+
37
+ name = yield data if block_given?
38
+ name ||= tag
39
+
40
+ tag_dir = site.config["tag_#{type}_dir"]
41
+ tag_dir = File.join(tag_dir, (pretty? ? name : ''))
42
+
43
+ page_name = "#{pretty? ? 'index' : name}#{site.layouts[data['layout']].ext}"
44
+
45
+ site.pages << TagPage.new(
46
+ site, site.source, tag_dir, page_name, data
47
+ )
48
+ end
49
+ }
50
+ end
51
+
52
+ def add_tag_cloud(num = 5, name = 'tag_data')
53
+ s, t = site, { name => calculate_tag_cloud(num) }
54
+ s.respond_to?(:add_payload) ? s.add_payload(t) : s.config.update(t)
55
+ end
56
+
57
+ # Calculates the css class of every tag for a tag cloud. The possible
58
+ # classes are: set-1..set-5.
59
+ #
60
+ # [[<TAG>, <CLASS>], ...]
61
+ def calculate_tag_cloud(num = 5)
62
+ range = 0
63
+
64
+ tags = active_tags.map { |tag, posts|
65
+ [tag.to_s, range < (size = posts.size) ? range = size : size]
66
+ }
67
+
68
+
69
+ range = 1..range
70
+
71
+ tags.sort!.map! { |tag, size| [tag, range.quantile(size, num)] }
72
+ end
73
+
74
+ def active_tags
75
+ return site.tags unless site.config["ignored_tags"]
76
+ site.tags.reject { |t| site.config["ignored_tags"].include? t[0] }
77
+ end
78
+
79
+ def pretty?
80
+ @pretty ||= (site.permalink_style == :pretty || site.config['tag_permalink_style'] == 'pretty')
81
+ end
82
+
83
+ end
84
+
85
+ class TagPage < Page
86
+
87
+ def initialize(site, base, dir, name, data = {})
88
+ self.content = data.delete('content') || ''
89
+ self.data = data
90
+
91
+ super(site, base, dir[-1, 1] == '/' ? dir : '/' + dir, name)
92
+ end
93
+
94
+ def read_yaml(*)
95
+ # Do nothing
96
+ end
97
+
98
+ end
99
+
100
+ module Filters
101
+
102
+ def tag_cloud(site)
103
+ active_tag_data.map { |tag, set|
104
+ tag_link(tag, tag_url(tag), :class => "set-#{set} label label-default")
105
+ }.join(' ')
106
+ end
107
+
108
+ def tag_link(tag, url = tag_url(tag), html_opts = nil)
109
+ html_opts &&= ' ' << html_opts.map { |k, v| %Q{#{k}="#{v}"} }.join(' ')
110
+ %Q{<a href="#{url}"#{html_opts}>#{tag}</a>}
111
+ end
112
+
113
+ def tag_url(tag, type = :page, site = Tagger.site)
114
+ # FIXME generate full url for atom.xml page
115
+ url = File.join('', site.config["tag_#{type}_dir"], ERB::Util.u(tag))
116
+ site.permalink_style == :pretty || site.config['tag_permalink_style'] == 'pretty' ? url : url << '.html'
117
+ end
118
+
119
+ def tags(obj)
120
+ tags = obj['tags'].dup
121
+ tags.map! { |t| t.first } if tags.first.is_a?(Array)
122
+ tags.map! { |t| tag_link(t, tag_url(t), rel: 'tag', class: 'label label-default') if t.is_a?(String) }.compact!
123
+ tags.join(' ')
124
+ end
125
+
126
+ def keywords(obj)
127
+ return '' if not obj['tags']
128
+ tags = obj['tags'].dup
129
+ tags.join(',')
130
+ end
131
+
132
+ def active_tag_data(site = Tagger.site)
133
+ return site.config['tag_data'] unless site.config["ignored_tags"]
134
+ site.config["tag_data"].reject { |tag, set| site.config["ignored_tags"].include? tag }
135
+ end
136
+ end
137
+
138
+ end
@@ -0,0 +1,20 @@
1
+ module Jekyll
2
+ module FancyToCFilter
3
+ def fancytoc(input)
4
+
5
+ converter = @context.registers[:site].converters.find { |c| c.is_a? Jekyll::Converters::Markdown }
6
+ extensions = converter.instance_variable_get(:@parser).instance_variable_get(:@redcarpet_extensions)
7
+ toc_generator = Redcarpet::Markdown.new(Redcarpet::Render::HTML_TOC, extensions)
8
+ toc = toc_generator.render(input)
9
+
10
+ <<-HTML unless toc.empty?
11
+ <div class="toc well" data-spy="affix" data-offset-top="0" data-offset-bottom="0">
12
+ <h4>Table of content</h4>
13
+ #{toc}
14
+ </div>
15
+ HTML
16
+ end
17
+ end
18
+ end
19
+
20
+ Liquid::Template.register_filter(Jekyll::FancyToCFilter)
data/doc/source/404.md ADDED
@@ -0,0 +1,6 @@
1
+ ---
2
+ layout: page
3
+ title: "404"
4
+ ---
5
+
6
+ We are sorry, page You are looking for does not exist :'(
@@ -0,0 +1,21 @@
1
+ <div class="footer">
2
+ <div class="container">
3
+ <p>This web site is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_GB">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>. Source available: <a xmlns:dct="http://purl.org/dc/terms/" href="https://github.com/theforeman/theforeman.org" rel="dct:source">github/theforeman/theforeman.org</a>.</p>
4
+ <a href="https://plus.google.com/102496134326414788199" rel="publisher">Google+ community</a>
5
+ </div>
6
+ </div>
7
+
8
+ <script type="text/javascript">
9
+ var _gaq = _gaq || [];
10
+ _gaq.push(['_setAccount', 'UA-2134730-5']);
11
+ _gaq.push(['_trackPageview']);
12
+
13
+ (function() {
14
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
15
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
16
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
17
+ })();
18
+ </script>
19
+
20
+ </body>
21
+ </html>