guider 0.0.7 → 0.0.8
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/bin/guider +23 -1
- data/guider.gemspec +1 -1
- data/lib/guider/analytics.rb +27 -0
- data/lib/guider/default_template.rb +24 -0
- data/lib/guider/font.rb +15 -0
- data/lib/guider/guide.rb +0 -2
- data/lib/guider/guide_factory.rb +2 -2
- data/lib/guider/index.rb +2 -4
- data/lib/guider/prettify.rb +19 -0
- data/lib/guider/search.rb +27 -0
- data/lib/guider/social.rb +49 -0
- data/lib/guider/template.rb +7 -1
- data/template/guide.html +7 -18
- data/template/index.html +6 -6
- data/template/styles.css +7 -0
- metadata +48 -62
data/bin/guider
CHANGED
@@ -6,8 +6,9 @@ $:.unshift File.dirname(File.dirname(__FILE__)) + "/lib"
|
|
6
6
|
require "rubygems"
|
7
7
|
require "optparse"
|
8
8
|
require "guider/app"
|
9
|
+
require "guider/social"
|
9
10
|
|
10
|
-
GUIDER_VERSION = '0.0.
|
11
|
+
GUIDER_VERSION = '0.0.8'
|
11
12
|
|
12
13
|
def format_footer(text)
|
13
14
|
guider = "<a href='https://github.com/nene/guider'>Guider</a>"
|
@@ -22,6 +23,9 @@ options = {
|
|
22
23
|
:link_url => "http://localhost/extjs/",
|
23
24
|
:tpl_dir => File.dirname(File.dirname(__FILE__)) + "/template",
|
24
25
|
:warnings => false,
|
26
|
+
:social => [],
|
27
|
+
:search => nil,
|
28
|
+
:analytics => nil,
|
25
29
|
}
|
26
30
|
|
27
31
|
input_files = OptionParser.new do |opts|
|
@@ -52,6 +56,24 @@ input_files = OptionParser.new do |opts|
|
|
52
56
|
options[:index] = path
|
53
57
|
end
|
54
58
|
|
59
|
+
opts.on("--social=google,twitter,facebook", Array, "Buttons to add to the page.") do |social|
|
60
|
+
social = social.map {|t| t.to_sym }
|
61
|
+
unsupported = social.find_all {|t| !Guider::Social.supported_types.include?(t) }
|
62
|
+
if unsupported.length > 0
|
63
|
+
$stderr.puts "ERROR: Unsupported social button type: " + unsupported.join(" ")
|
64
|
+
exit(1)
|
65
|
+
end
|
66
|
+
options[:social] = social
|
67
|
+
end
|
68
|
+
|
69
|
+
opts.on("--search=id", "ID of custom google search engine.") do |id|
|
70
|
+
options[:search] = id
|
71
|
+
end
|
72
|
+
|
73
|
+
opts.on("--analytics=id", "ID for Google Analytics tracking.") do |id|
|
74
|
+
options[:analytics] = id
|
75
|
+
end
|
76
|
+
|
55
77
|
opts.on("--warnings", "Enables warnings.") do
|
56
78
|
options[:warnings] = true
|
57
79
|
end
|
data/guider.gemspec
CHANGED
@@ -2,7 +2,7 @@ Gem::Specification.new do |s|
|
|
2
2
|
s.required_rubygems_version = ">= 1.3.5"
|
3
3
|
|
4
4
|
s.name = 'guider'
|
5
|
-
s.version = '0.0.
|
5
|
+
s.version = '0.0.8'
|
6
6
|
s.date = Time.new.strftime('%Y-%m-%d')
|
7
7
|
s.summary = "Sencha guide generator"
|
8
8
|
s.description = "JSDuck-compatible guides generator"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Guider
|
2
|
+
# Generates HTML for Google Analytics.
|
3
|
+
class Analytics
|
4
|
+
# Given the ID of Google analytics tracker, returns the tracker
|
5
|
+
# script. Returns empty string when no ID given.
|
6
|
+
def self.to_html(id)
|
7
|
+
return "" unless id
|
8
|
+
|
9
|
+
<<-EOHTML
|
10
|
+
<script type="text/javascript">
|
11
|
+
var _gaq = _gaq || [];
|
12
|
+
_gaq.push(['_setAccount', '#{id}']);
|
13
|
+
_gaq.push(['_trackPageview']);
|
14
|
+
(function() {
|
15
|
+
var ga = document.createElement('script');
|
16
|
+
ga.type = 'text/javascript';
|
17
|
+
ga.async = true;
|
18
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') +
|
19
|
+
'.google-analytics.com/ga.js';
|
20
|
+
var s = document.getElementsByTagName('script')[0];
|
21
|
+
s.parentNode.insertBefore(ga, s);
|
22
|
+
})();
|
23
|
+
</script>
|
24
|
+
EOHTML
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'guider/template'
|
2
|
+
require 'guider/social'
|
3
|
+
require 'guider/search'
|
4
|
+
require 'guider/analytics'
|
5
|
+
require 'guider/prettify'
|
6
|
+
require 'guider/font'
|
7
|
+
|
8
|
+
module Guider
|
9
|
+
# Initializes the common Guider template placeholders with default
|
10
|
+
# values generated from Guider options.
|
11
|
+
class DefaultTemplate < Template
|
12
|
+
def initialize(path, options)
|
13
|
+
super(path, {
|
14
|
+
:title => options[:title],
|
15
|
+
:footer => options[:footer],
|
16
|
+
:search => Social.to_html(options[:social]),
|
17
|
+
:search => Search.to_html(options[:search]),
|
18
|
+
:analytics => Analytics.to_html(options[:analytics]),
|
19
|
+
:prettify => Prettify.to_html,
|
20
|
+
:font => Font.to_html,
|
21
|
+
})
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/guider/font.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Guider
|
2
|
+
# Generates <script> tag for including google font.
|
3
|
+
class Font
|
4
|
+
def self.to_html
|
5
|
+
<<-EOHTML
|
6
|
+
<script type="text/javascript">
|
7
|
+
(function(){
|
8
|
+
var protocol = (document.location.protocol === "https:") ? "https:" : "http:";
|
9
|
+
document.write("<link href='"+protocol+"//fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css' />");
|
10
|
+
})();
|
11
|
+
</script>
|
12
|
+
EOHTML
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/guider/guide.rb
CHANGED
data/lib/guider/guide_factory.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "guider/
|
1
|
+
require "guider/default_template"
|
2
2
|
require "guider/inline_tags"
|
3
3
|
require "guider/guide"
|
4
4
|
|
@@ -11,7 +11,7 @@ module Guider
|
|
11
11
|
@inline_tags.link_url = options[:link_url]
|
12
12
|
|
13
13
|
# Create guide rendering template
|
14
|
-
@tpl =
|
14
|
+
@tpl = DefaultTemplate.new(options[:tpl_dir] + "/guide.html", options)
|
15
15
|
|
16
16
|
@options = options
|
17
17
|
end
|
data/lib/guider/index.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'guider/
|
1
|
+
require 'guider/default_template'
|
2
2
|
require 'guider/config'
|
3
3
|
|
4
4
|
module Guider
|
@@ -6,13 +6,11 @@ module Guider
|
|
6
6
|
def initialize(options)
|
7
7
|
@options = options
|
8
8
|
@config = Config.new(@options[:index])
|
9
|
-
@tpl =
|
9
|
+
@tpl = DefaultTemplate.new(@options[:tpl_dir] + "/index.html", @options)
|
10
10
|
end
|
11
11
|
|
12
12
|
def write
|
13
13
|
html = @tpl.apply({
|
14
|
-
:title => @options[:title],
|
15
|
-
:footer => @options[:footer],
|
16
14
|
:content => @config.to_html,
|
17
15
|
})
|
18
16
|
File.open(@options[:output] + "/index.html", 'w') {|f| f.write(html) }
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Guider
|
2
|
+
# Generates <script> tag for syntax-highlighting code blocks.
|
3
|
+
class Prettify
|
4
|
+
def self.to_html
|
5
|
+
<<-EOHTML
|
6
|
+
<script type="text/javascript">
|
7
|
+
(function(){
|
8
|
+
var pres = document.getElementsByTagName("pre");
|
9
|
+
for (var len=pres.length, i=0; i < len; i++) {
|
10
|
+
var code = pres[i].getElementsByTagName("code")[0];
|
11
|
+
if (code) code.className = "prettyprint";
|
12
|
+
}
|
13
|
+
prettyPrint();
|
14
|
+
})();
|
15
|
+
</script>
|
16
|
+
EOHTML
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Guider
|
2
|
+
# Generates HTML for Google search.
|
3
|
+
class Search
|
4
|
+
# Given the ID of custom google search engine, returns the script
|
5
|
+
# for generating the search box. Returns empty string when no ID
|
6
|
+
# given.
|
7
|
+
def self.to_html(id)
|
8
|
+
return "" unless id
|
9
|
+
|
10
|
+
<<-EOHTML
|
11
|
+
<script>
|
12
|
+
(function() {
|
13
|
+
var cx = '#{id}';
|
14
|
+
var gcse = document.createElement('script');
|
15
|
+
gcse.type = 'text/javascript';
|
16
|
+
gcse.async = true;
|
17
|
+
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
|
18
|
+
'//www.google.com/cse/cse.js?cx=' + cx;
|
19
|
+
var s = document.getElementsByTagName('script')[0];
|
20
|
+
s.parentNode.insertBefore(gcse, s);
|
21
|
+
})();
|
22
|
+
</script>
|
23
|
+
<gcse:searchbox-only></gcse:searchbox-only>
|
24
|
+
EOHTML
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Guider
|
2
|
+
# Generates HTML for Like-buttons of various social services.
|
3
|
+
class Social
|
4
|
+
# Given array of social button type names, returns HTML for
|
5
|
+
# rendering all these buttons.
|
6
|
+
def self.to_html(types)
|
7
|
+
types.map {|t| send(t) }.compact.join("\n")
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns array of supported social button types
|
11
|
+
def self.supported_types
|
12
|
+
[:google, :twitter, :facebook]
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.google
|
16
|
+
<<-EOHTML
|
17
|
+
<div class="g-plusone" data-annotation="none"></div>
|
18
|
+
<script type="text/javascript">
|
19
|
+
(function() {
|
20
|
+
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
21
|
+
po.src = 'https://apis.google.com/js/plusone.js';
|
22
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
23
|
+
})();
|
24
|
+
</script>
|
25
|
+
EOHTML
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.twitter
|
29
|
+
<<-EOHTML
|
30
|
+
<a href="https://twitter.com/share" class="twitter-share-button">Tweet</a>
|
31
|
+
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
32
|
+
EOHTML
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.facebook
|
36
|
+
<<-EOHTML
|
37
|
+
<div id="fb-root"></div>
|
38
|
+
<script>(function(d, s, id) {
|
39
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
40
|
+
if (d.getElementById(id)) return;
|
41
|
+
js = d.createElement(s); js.id = id;
|
42
|
+
js.src = "//connect.facebook.net/et_EE/all.js#xfbml=1";
|
43
|
+
fjs.parentNode.insertBefore(js, fjs);
|
44
|
+
}(document, 'script', 'facebook-jssdk'));</script>
|
45
|
+
<div class="fb-like" data-send="false" data-layout="button_count" data-width="450" data-show-faces="true"></div>
|
46
|
+
EOHTML
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/guider/template.rb
CHANGED
@@ -2,13 +2,19 @@ module Guider
|
|
2
2
|
# Reads a template from file.
|
3
3
|
# Allows replacing {placeholders} inside it.
|
4
4
|
class Template
|
5
|
-
|
5
|
+
# Takes path to the template and an optional defaults hash mapping
|
6
|
+
# placeholders to values. These are the default values for
|
7
|
+
# placeholders for which no value is given in the hash passed to
|
8
|
+
# #apply method.
|
9
|
+
def initialize(path, defaults={})
|
6
10
|
@template = IO.read(path)
|
11
|
+
@defaults = defaults
|
7
12
|
end
|
8
13
|
|
9
14
|
# Sets the values for placeholders inside template.
|
10
15
|
# Returns the template text with placeholders replaced.
|
11
16
|
def apply(hash)
|
17
|
+
hash = @defaults.merge(hash)
|
12
18
|
@template.gsub(/\{\w+\}/) do |placeholder|
|
13
19
|
placeholder =~ /\{(.*)\}/
|
14
20
|
hash[$1.to_sym]
|
data/template/guide.html
CHANGED
@@ -12,11 +12,14 @@
|
|
12
12
|
|
13
13
|
<div id="container">
|
14
14
|
<div id="header">
|
15
|
+
<div class="google-search">{search}</div>
|
15
16
|
<h1><a href="{path}">{title}</a></h1>
|
16
17
|
</div>
|
17
18
|
|
18
19
|
<div id="content">
|
19
|
-
{content}
|
20
|
+
{content}
|
21
|
+
|
22
|
+
{social}
|
20
23
|
</div>
|
21
24
|
</div>
|
22
25
|
|
@@ -24,23 +27,9 @@
|
|
24
27
|
<p>{footer}</p>
|
25
28
|
</div>
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
document.write("<link href='"+protocol+"//fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css' />");
|
31
|
-
})();
|
32
|
-
</script>
|
33
|
-
|
34
|
-
<script type="text/javascript">
|
35
|
-
(function(){
|
36
|
-
var pres = document.getElementsByTagName("pre");
|
37
|
-
for (var len=pres.length, i=0; i < len; i++) {
|
38
|
-
var code = pres[i].getElementsByTagName("code")[0];
|
39
|
-
if (code) code.className = "prettyprint";
|
40
|
-
}
|
41
|
-
prettyPrint();
|
42
|
-
})();
|
43
|
-
</script>
|
30
|
+
{font}
|
31
|
+
{prettify}
|
32
|
+
{analytics}
|
44
33
|
|
45
34
|
</body>
|
46
35
|
</html>
|
data/template/index.html
CHANGED
@@ -5,11 +5,14 @@
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6
6
|
<link rel="shortcut icon" type="image/ico" href="favicon.ico" />
|
7
7
|
<link rel="stylesheet" type="text/css" href="styles.css" />
|
8
|
+
<link rel="stylesheet" type="text/css" href="prettify.css" />
|
9
|
+
<script type="text/javascript" src="prettify.js"></script>
|
8
10
|
</head>
|
9
11
|
<body id="index-page">
|
10
12
|
|
11
13
|
<div id="container">
|
12
14
|
<div id="header">
|
15
|
+
<div class="google-search">{search}</div>
|
13
16
|
<h1><a href="{path}">{title}</a></h1>
|
14
17
|
</div>
|
15
18
|
|
@@ -22,12 +25,9 @@
|
|
22
25
|
<p>{footer}</p>
|
23
26
|
</div>
|
24
27
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
document.write("<link href='"+protocol+"//fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css' />");
|
29
|
-
})();
|
30
|
-
</script>
|
28
|
+
{font}
|
29
|
+
{prettify}
|
30
|
+
{analytics}
|
31
31
|
|
32
32
|
</body>
|
33
33
|
</html>
|
data/template/styles.css
CHANGED
metadata
CHANGED
@@ -1,76 +1,74 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: guider
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 7
|
10
|
-
version: 0.0.7
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Rene Saarsoo
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-04-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: kramdown
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 35
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 14
|
32
|
-
- 2
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.14.2
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: json
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.14.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: json
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
40
33
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 1
|
45
|
-
segments:
|
46
|
-
- 1
|
47
|
-
- 7
|
48
|
-
- 5
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
49
37
|
version: 1.7.5
|
50
38
|
type: :runtime
|
51
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.7.5
|
52
46
|
description: JSDuck-compatible guides generator
|
53
47
|
email: rene.saarsoo@sencha.com
|
54
|
-
executables:
|
48
|
+
executables:
|
55
49
|
- guider
|
56
50
|
extensions: []
|
57
|
-
|
58
51
|
extra_rdoc_files: []
|
59
|
-
|
60
|
-
files:
|
52
|
+
files:
|
61
53
|
- .gitignore
|
62
54
|
- COPYING
|
63
55
|
- README.md
|
64
56
|
- Rakefile
|
65
57
|
- bin/guider
|
66
58
|
- guider.gemspec
|
59
|
+
- lib/guider/analytics.rb
|
67
60
|
- lib/guider/app.rb
|
68
61
|
- lib/guider/config.rb
|
62
|
+
- lib/guider/default_template.rb
|
63
|
+
- lib/guider/font.rb
|
69
64
|
- lib/guider/guide.rb
|
70
65
|
- lib/guider/guide_factory.rb
|
71
66
|
- lib/guider/index.rb
|
72
67
|
- lib/guider/inline_tags.rb
|
73
68
|
- lib/guider/logger.rb
|
69
|
+
- lib/guider/prettify.rb
|
70
|
+
- lib/guider/search.rb
|
71
|
+
- lib/guider/social.rb
|
74
72
|
- lib/guider/template.rb
|
75
73
|
- template/favicon.ico
|
76
74
|
- template/guide.html
|
@@ -81,38 +79,26 @@ files:
|
|
81
79
|
- template/styles.css
|
82
80
|
homepage: https://github.com/nene/guider
|
83
81
|
licenses: []
|
84
|
-
|
85
82
|
post_install_message:
|
86
83
|
rdoc_options: []
|
87
|
-
|
88
|
-
require_paths:
|
84
|
+
require_paths:
|
89
85
|
- lib
|
90
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
87
|
none: false
|
92
|
-
requirements:
|
93
|
-
- -
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
|
96
|
-
|
97
|
-
- 0
|
98
|
-
version: "0"
|
99
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
93
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
hash: 17
|
105
|
-
segments:
|
106
|
-
- 1
|
107
|
-
- 3
|
108
|
-
- 5
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
109
97
|
version: 1.3.5
|
110
98
|
requirements: []
|
111
|
-
|
112
99
|
rubyforge_project: guider
|
113
100
|
rubygems_version: 1.8.24
|
114
101
|
signing_key:
|
115
102
|
specification_version: 3
|
116
103
|
summary: Sencha guide generator
|
117
104
|
test_files: []
|
118
|
-
|