jekyll-terminal 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/jekyll-terminal.rb +108 -0
  3. metadata +58 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cf94b10a2097403fc5fb1026492b0e2622cbe8d0
4
+ data.tar.gz: c013d395fe3d2d059e5ae5b828ab96ee0a47018e
5
+ SHA512:
6
+ metadata.gz: ef247b61ace1ec2b88aea6053fdf30ff542c3eb46e8124a20ff34f50622a17070d89156f766a7c7b7839fe8579261cd1df267a72efad92c5bc465fc85b873fe1
7
+ data.tar.gz: 01e252ac9cbc104f93453269105bb0f0b25572e197cc4933642d722037492ea0d7416d977c1c1a13c1ae26f0e4842630ba17605b54894fd0ad438d2faf4ab672
@@ -0,0 +1,108 @@
1
+ require 'jekyll'
2
+
3
+ module Jekyll
4
+ module Terminal
5
+ # TODO: make this customizable in options.
6
+ def Terminal.dir(site)
7
+ 'css'
8
+ end
9
+
10
+ def Terminal.basename(site)
11
+ 'terminal'
12
+ end
13
+
14
+ # Page that reads its contents from the Gem `terminal.sass` file.
15
+ class StylesheetPage < Page
16
+ def initialize(site, base, dir)
17
+ @site = site
18
+ @base = base
19
+ @dir = dir
20
+ @name = Jekyll::Terminal::basename(site)+ '.scss'
21
+
22
+ self.process(@name)
23
+
24
+ filepath = File.join(File.dirname(File.expand_path(__FILE__)), @name)
25
+ self.content = File.read(filepath, merged_file_read_opts({}))
26
+ self.data ||= {}
27
+ end
28
+ end
29
+
30
+ # Generator that adds the stylesheet page to the generated site.
31
+ class StylesheetGenerator < Generator
32
+ safe true
33
+
34
+ def generate(site)
35
+ site.pages << StylesheetPage.new(site, site.source, Jekyll::Terminal::dir(site))
36
+ end
37
+ end
38
+
39
+ class StylesheetTag < Liquid::Tag
40
+ def initialize(tag_name, text, tokens)
41
+ super
42
+ @text = text
43
+ end
44
+
45
+ def render(context)
46
+ site = context.registers[:site]
47
+ url = Jekyll::Terminal::dir(site) + '/' + Jekyll::Terminal::basename(site)
48
+ "<link rel='stylesheet' href='#{site.baseurl}/#{url}.css'>"
49
+ end
50
+ end
51
+
52
+ class CommandsBlock < Liquid::Block
53
+
54
+ def initialize(tag_name, text, tokens)
55
+ super
56
+ @text = text
57
+ end
58
+
59
+ def render(context)
60
+ output = super(context)
61
+ # TODO: make title customizable.
62
+ %{<div class="window">
63
+ <nav class="control-window">
64
+ <a href="#finder" class="close" data-rel="close">close</a>
65
+ <a href="#" class="minimize">minimize</a>
66
+ <a href="#" class="deactivate">deactivate</a>
67
+ </nav>
68
+ <h1 class="titleInside">Terminal</h1>
69
+ <div class="container"><div class="terminal">#{promptize(output)}</div></div>
70
+ </div>}
71
+ end
72
+
73
+ def promptize(content)
74
+ content = content.strip
75
+ gutters = content.lines.map { |line| gutter(line) }
76
+ lines_of_code = content.lines.map { |line| line_of_code(line) }
77
+
78
+ table = "<table><tr>"
79
+ table += "<td class='gutter'><pre class='line-numbers'>#{gutters.join("\n")}</pre></td>"
80
+ table += "<td class='code'><pre><code>#{lines_of_code.join("")}</code></pre></td>"
81
+ table += "</tr></table>"
82
+ end
83
+
84
+ def gutter(line)
85
+ gutter_value = line.start_with?(command_character) ? command_character : "&nbsp;"
86
+ "<span class='line-number'>#{gutter_value}</span>"
87
+ end
88
+
89
+ def line_of_code(line)
90
+ if line.start_with?(command_character)
91
+ line_class = "command"
92
+ line = line.sub(command_character,'').strip
93
+ else
94
+ line_class = "output"
95
+ end
96
+ "<span class='line #{line_class}'>#{line}</span>"
97
+ end
98
+
99
+ def command_character
100
+ "$"
101
+ end
102
+
103
+ end
104
+ end
105
+ end
106
+
107
+ Liquid::Template.register_tag('terminal', Jekyll::Terminal::CommandsBlock)
108
+ Liquid::Template.register_tag('terminal_stylesheet', Jekyll::Terminal::StylesheetTag)
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-terminal
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Xavier Decoret
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ description: 'Displays nice '
28
+ email: xavier.decoret+jekyll@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/jekyll-terminal.rb
34
+ homepage: http://rubygems.org/gems/jekyll-terminal
35
+ licenses:
36
+ - MIT
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 2.0.3
55
+ signing_key:
56
+ specification_version: 4
57
+ summary: Gem to show terminals in Jekyll sites
58
+ test_files: []