jekyll-terminal 0.0.1

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 (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: []