webapidoc 0.1.0 → 0.1.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.
- data/README.md +13 -1
- data/lib/generators/webapidoc/install_generator.rb +2 -2
- data/lib/generators/webapidoc/templates/_partial.md.erb +1 -0
- data/lib/generators/webapidoc/templates/documentation.md.erb +166 -0
- data/lib/generators/webapidoc/templates/webapidoc.yml +1 -10
- data/lib/webapidoc/base.rb +83 -65
- data/lib/webapidoc/css/webapidoc.scss +80 -43
- data/lib/webapidoc/js/lodash.min.js +42 -0
- data/lib/webapidoc/template.html.erb +39 -46
- data/lib/webapidoc/version.rb +1 -1
- data/lib/webapidoc.rb +1 -0
- data/webapidoc.gemspec +1 -0
- metadata +73 -73
- data/lib/generators/webapidoc/templates/index.md.erb +0 -15
- data/lib/generators/webapidoc/templates/sample.md.erb +0 -72
data/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
## Rails Generator
|
8
8
|
|
9
|
-
To copy sample config/webapidoc.yml and
|
9
|
+
To copy sample config/webapidoc.yml and sample files in app/documentation simply run
|
10
10
|
|
11
11
|
rails g webapidoc:install
|
12
12
|
|
@@ -21,3 +21,15 @@ To copy sample config/webapidoc.yml and two sample files in app/documentation si
|
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
24
|
+
|
25
|
+
## Provide URL for live API Querys
|
26
|
+
|
27
|
+
set url option to a valid JSON API URL to use live querys
|
28
|
+
|
29
|
+
|
30
|
+
# Rendering Partials
|
31
|
+
|
32
|
+
like in rails:
|
33
|
+
|
34
|
+
<%= partial :welcome_message %>
|
35
|
+
|
@@ -14,8 +14,8 @@ module Webapidoc
|
|
14
14
|
FileUtils.mkdir_p "app/documentation"
|
15
15
|
|
16
16
|
# copy files
|
17
|
-
FileUtils.copy(source_root + "/
|
18
|
-
FileUtils.copy(source_root + "/
|
17
|
+
FileUtils.copy(source_root + "/documentation.md.erb", "app/documentation")
|
18
|
+
FileUtils.copy(source_root + "/_partial.md.erb", "app/documentation")
|
19
19
|
FileUtils.copy(source_root + "/webapidoc.yml", "config")
|
20
20
|
|
21
21
|
puts "done"
|
@@ -0,0 +1 @@
|
|
1
|
+
a shiny partial
|
@@ -0,0 +1,166 @@
|
|
1
|
+
Index
|
2
|
+
====================
|
3
|
+
|
4
|
+
Welcome
|
5
|
+
---------------------
|
6
|
+
|
7
|
+
Now is the time for all good men to come to
|
8
|
+
the aid of their country.
|
9
|
+
|
10
|
+
|
11
|
+
### Build with shiny partials!
|
12
|
+
|
13
|
+
<%= partial :partial %>
|
14
|
+
|
15
|
+
Formatting
|
16
|
+
---------------------
|
17
|
+
|
18
|
+
### Paragraphs
|
19
|
+
|
20
|
+
This is just a regular paragraph. Now is the time for all good men to come to
|
21
|
+
the aid of [their country](http://www.google.de). Look the link!
|
22
|
+
|
23
|
+
### Lists
|
24
|
+
|
25
|
+
This is just an ordered list
|
26
|
+
|
27
|
+
1. Bird
|
28
|
+
2. McHale
|
29
|
+
3. Parish
|
30
|
+
|
31
|
+
This is just a unordered list.
|
32
|
+
|
33
|
+
* Bird
|
34
|
+
* McHale
|
35
|
+
* Parish
|
36
|
+
|
37
|
+
### Quotes
|
38
|
+
|
39
|
+
> This is a blockquote.
|
40
|
+
>
|
41
|
+
> This is the second paragraph in the blockquote.
|
42
|
+
>
|
43
|
+
|
44
|
+
### Some Code
|
45
|
+
|
46
|
+
This is just some code.
|
47
|
+
|
48
|
+
[
|
49
|
+
{
|
50
|
+
"title": "apples",
|
51
|
+
"count": [12000, 20000],
|
52
|
+
"description": {"text": "...", "sensitive": false}
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"title": "oranges",
|
56
|
+
"count": [17500, null],
|
57
|
+
"description": {"text": "...", "sensitive": false}
|
58
|
+
}
|
59
|
+
]
|
60
|
+
|
61
|
+
This is some `code` within a paragraph. More to come!
|
62
|
+
This is just some more code.
|
63
|
+
|
64
|
+
[
|
65
|
+
{
|
66
|
+
"title": "apples",
|
67
|
+
"count": [12000, 20000],
|
68
|
+
"description": {"text": "...", "sensitive": false}
|
69
|
+
}
|
70
|
+
]
|
71
|
+
|
72
|
+
|
73
|
+
Options
|
74
|
+
====================
|
75
|
+
|
76
|
+
A new Chapter
|
77
|
+
---------------------
|
78
|
+
|
79
|
+
Now is the time for all good men to come to
|
80
|
+
the aid of their country.
|
81
|
+
|
82
|
+
|
83
|
+
### Samuel L. Ipsum
|
84
|
+
|
85
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
86
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
87
|
+
That's also clear. But for some reason, you and I react the exact same
|
88
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
89
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
90
|
+
We're on the same curve, just on opposite ends.
|
91
|
+
|
92
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
93
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
94
|
+
That's also clear. But for some reason, you and I react the exact same
|
95
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
96
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
97
|
+
We're on the same curve, just on opposite ends.
|
98
|
+
|
99
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
100
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
101
|
+
That's also clear. But for some reason, you and I react the exact same
|
102
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
103
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
104
|
+
We're on the same curve, just on opposite ends.
|
105
|
+
|
106
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
107
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
108
|
+
That's also clear. But for some reason, you and I react the exact same
|
109
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
110
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
111
|
+
We're on the same curve, just on opposite ends.
|
112
|
+
|
113
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
114
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
115
|
+
That's also clear. But for some reason, you and I react the exact same
|
116
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
117
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
118
|
+
We're on the same curve, just on opposite ends.
|
119
|
+
|
120
|
+
More Stuff
|
121
|
+
====================
|
122
|
+
|
123
|
+
Another Chapter
|
124
|
+
---------------------
|
125
|
+
|
126
|
+
Now is the time for all good men to come to
|
127
|
+
the aid of their country.
|
128
|
+
|
129
|
+
|
130
|
+
### More Ipsum
|
131
|
+
|
132
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
133
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
134
|
+
That's also clear. But for some reason, you and I react the exact same
|
135
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
136
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
137
|
+
We're on the same curve, just on opposite ends.
|
138
|
+
|
139
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
140
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
141
|
+
That's also clear. But for some reason, you and I react the exact same
|
142
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
143
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
144
|
+
We're on the same curve, just on opposite ends.
|
145
|
+
|
146
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
147
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
148
|
+
That's also clear. But for some reason, you and I react the exact same
|
149
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
150
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
151
|
+
We're on the same curve, just on opposite ends.
|
152
|
+
|
153
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
154
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
155
|
+
That's also clear. But for some reason, you and I react the exact same
|
156
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
157
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
158
|
+
We're on the same curve, just on opposite ends.
|
159
|
+
|
160
|
+
Your bones don't break, mine do. That's clear. Your cells react to
|
161
|
+
bacteria and viruses differently than mine. You don't get sick, I do.
|
162
|
+
That's also clear. But for some reason, you and I react the exact same
|
163
|
+
way to water. We swallow it too fast, we choke. We get some in our lungs,
|
164
|
+
we drown. However unreal it may seem, we are connected, you and I.
|
165
|
+
We're on the same curve, just on opposite ends.
|
166
|
+
|
@@ -1,11 +1,2 @@
|
|
1
1
|
title: "WebAPIDoc"
|
2
|
-
description: "Static HTML Documentation for JSON APIs"
|
3
|
-
url: "http://localhost:3000"
|
4
|
-
|
5
|
-
chapters:
|
6
|
-
-
|
7
|
-
file: "index"
|
8
|
-
name: "Index Page"
|
9
|
-
-
|
10
|
-
file: "sample"
|
11
|
-
name: "Sample Page"
|
2
|
+
description: "Static HTML Documentation for JSON APIs"
|
data/lib/webapidoc/base.rb
CHANGED
@@ -1,99 +1,117 @@
|
|
1
1
|
|
2
2
|
module Webapidoc
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
@@docDir = "app/documentation"
|
5
|
+
@@publicDir = "public/documentation"
|
6
|
+
@@configFile = 'config/webapidoc.yml'
|
7
|
+
|
8
|
+
def self.partial(template)
|
9
|
+
# rails like _ templates, simple injection
|
10
|
+
template = template.to_s.split('/')
|
11
|
+
template[ template.length - 1 ] = '_' + template[ template.length - 1 ]
|
12
|
+
template = template.join('/')
|
13
|
+
inFile = @@docDir + "/" + template + ".md"
|
14
|
+
|
15
|
+
if !File.exists?(inFile)
|
16
|
+
inFile = inFile + ".erb"
|
17
|
+
end
|
12
18
|
|
13
|
-
|
19
|
+
if !File.exists?(inFile)
|
20
|
+
puts "partial not found: #{inFile}"
|
21
|
+
return
|
22
|
+
end
|
23
|
+
|
24
|
+
# read partials contents and inject it
|
25
|
+
File.open(inFile, 'r').read
|
26
|
+
end
|
14
27
|
|
15
|
-
|
16
|
-
|
17
|
-
|
28
|
+
def self.libDir
|
29
|
+
File.dirname(__FILE__)
|
30
|
+
end
|
18
31
|
|
32
|
+
def self.build
|
19
33
|
# get config hash
|
20
|
-
|
21
|
-
@data = YAML.load_file(configFile).freeze
|
34
|
+
@data = YAML.load_file(@@configFile).freeze
|
22
35
|
|
23
36
|
puts "building webapidoc for " + @data["title"]
|
24
|
-
puts "api url: " + @data["url"]
|
37
|
+
puts "api url: " + @data["url"] if @data["url"]
|
25
38
|
|
26
39
|
# clean up
|
27
|
-
FileUtils.remove_dir publicDir if File.exists?(publicDir)
|
40
|
+
FileUtils.remove_dir @@publicDir if File.exists?(@@publicDir)
|
28
41
|
|
29
|
-
# create
|
30
|
-
FileUtils.mkdir_p publicDir
|
31
|
-
FileUtils.mkdir publicDir + "/css"
|
32
|
-
FileUtils.mkdir publicDir + "/js"
|
42
|
+
# create @s
|
43
|
+
FileUtils.mkdir_p @@publicDir
|
44
|
+
FileUtils.mkdir @@publicDir + "/css"
|
33
45
|
|
34
|
-
# copy
|
35
|
-
FileUtils.
|
36
|
-
|
37
|
-
# copy highlight
|
38
|
-
FileUtils.copy(libDir + "/js/highlight.js", publicDir + "/js/highlight.js")
|
46
|
+
# copy javascripts
|
47
|
+
FileUtils.cp_r(libDir + "/js", @@publicDir + "/js")
|
39
48
|
|
40
49
|
# compile webapidoc style
|
41
50
|
sass_filename = libDir + "/css/webapidoc.scss"
|
42
51
|
css = Sass::Engine.for_file(sass_filename, {:style => :compressed}).render
|
43
|
-
File.open(publicDir + "/css/webapidoc.css", "wb") {|f| f.write(css) }
|
44
|
-
|
45
|
-
# parse chapters and create html from md
|
46
|
-
@chapters = []
|
52
|
+
File.open(@@publicDir + "/css/webapidoc.css", "wb") {|f| f.write(css) }
|
47
53
|
|
48
|
-
#
|
49
|
-
|
54
|
+
# open index file
|
55
|
+
inFile = "#{@@docDir}/documentation.md"
|
56
|
+
# look for erb
|
57
|
+
if !File.exists?(inFile)
|
58
|
+
inFile = inFile + ".erb"
|
59
|
+
end
|
60
|
+
# not found?
|
61
|
+
if !File.exists?(inFile)
|
62
|
+
puts "documentation not found: #{inFile}"
|
63
|
+
exit 0
|
64
|
+
end
|
50
65
|
|
51
|
-
|
52
|
-
|
66
|
+
# open file
|
67
|
+
contents = ERB.new(File.open(inFile, 'r').read).result(binding)
|
68
|
+
maruku = Maruku.new(contents)
|
53
69
|
|
54
|
-
|
55
|
-
|
56
|
-
end
|
70
|
+
# build html
|
71
|
+
html = Nokogiri::HTML(maruku.to_html)
|
57
72
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
73
|
+
# build chapters
|
74
|
+
@chapters = []
|
75
|
+
@chapters = html.xpath('//body').children.inject([]) do |chapters_hash, child|
|
76
|
+
# build chapter
|
77
|
+
if child.name == 'h1'
|
78
|
+
title = child.inner_text
|
79
|
+
anchor = title.downcase.gsub(/[^\d\w\s]/, "").tr(" ", "_")
|
80
|
+
chapters_hash << { :title => title, :contents => '', :file => anchor}
|
63
81
|
end
|
64
82
|
|
65
|
-
|
83
|
+
next chapters_hash if chapters_hash.empty?
|
84
|
+
chapters_hash.last[:contents] << child.to_xhtml
|
85
|
+
chapters_hash
|
66
86
|
end
|
67
87
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
88
|
+
# build sections
|
89
|
+
@sections = []
|
90
|
+
cidx = -1
|
91
|
+
html.xpath('//body').children.inject([]) do |chapters_hash, child|
|
92
|
+
# store sections for navigation
|
93
|
+
if child.name == 'h1' or child.name == 'h2' or child.name == 'h3'
|
94
|
+
title = child.inner_text
|
95
|
+
anchor = title.downcase.gsub(/[^\d\w\s]/, "").tr(" ", "_")
|
96
|
+
level = child.name[-1, 1]
|
97
|
+
cidx = cidx + 1 if level == "1"
|
98
|
+
next unless @chapters[cidx].present?
|
99
|
+
file = @chapters[cidx][:file]
|
100
|
+
@sections << {:title => title, :file => file, :anchor => anchor, :level => level}
|
78
101
|
end
|
79
|
-
|
80
|
-
chapter[:html] = maruku.to_html
|
81
|
-
chapter[:sections] = sections
|
82
|
-
|
83
102
|
end
|
84
103
|
|
85
104
|
# open template
|
86
105
|
template = "#{libDir}/template.html.erb"
|
87
106
|
|
88
|
-
#
|
89
|
-
@chapters.
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
@
|
94
|
-
puts "building #{chapter[:name]}"
|
107
|
+
# write each chapter to file
|
108
|
+
@chapters.each_with_index do | chapter, idx |
|
109
|
+
outFile = "#{@@publicDir}/#{chapter[:file]}.html"
|
110
|
+
puts idx.to_s + ":" + chapter[:title] + " > " + outFile
|
111
|
+
# convert md to html
|
112
|
+
@html = chapter[:contents]
|
95
113
|
# write it
|
96
|
-
File.open(
|
114
|
+
File.open(outFile, 'w') { |file| file.write(ERB.new(File.open(template, 'r').read).result(binding)) }
|
97
115
|
end
|
98
116
|
end
|
99
|
-
end
|
117
|
+
end
|
@@ -49,9 +49,28 @@ blockquote, q {
|
|
49
49
|
quotes: none; }
|
50
50
|
|
51
51
|
blockquote {
|
52
|
+
|
53
|
+
font-family: serif;
|
54
|
+
font-style: italic;
|
55
|
+
margin: 0.25em 0;
|
56
|
+
padding: 0.25em 40px;
|
57
|
+
line-height: 1.45;
|
58
|
+
position: relative;
|
59
|
+
|
52
60
|
&:before, &:after {
|
53
61
|
content: '';
|
54
|
-
content: none; }
|
62
|
+
content: none; }
|
63
|
+
|
64
|
+
&:before {
|
65
|
+
display: block;
|
66
|
+
content: "\201C";
|
67
|
+
font-size: 56px;
|
68
|
+
position: absolute;
|
69
|
+
left: 0px;
|
70
|
+
top: 0px;
|
71
|
+
color: #7a7a7a;
|
72
|
+
}
|
73
|
+
}
|
55
74
|
|
56
75
|
q {
|
57
76
|
&:before, &:after {
|
@@ -131,7 +150,7 @@ pre {
|
|
131
150
|
|
132
151
|
body {
|
133
152
|
|
134
|
-
font-family:
|
153
|
+
font-family: sans-serif;
|
135
154
|
font-weight: 300;
|
136
155
|
color: $color-text;
|
137
156
|
|
@@ -323,13 +342,14 @@ h1
|
|
323
342
|
font-size: 21pt;
|
324
343
|
margin-top: 38px;
|
325
344
|
color: $color;
|
345
|
+
padding-bottom:4px;
|
346
|
+
border-bottom: 1px solid #ddd;
|
326
347
|
}
|
327
348
|
|
328
349
|
h2 {
|
329
350
|
font-size: 18pt;
|
330
351
|
margin-top: 28px;
|
331
|
-
|
332
|
-
border-bottom: 1px solid #ddd;
|
352
|
+
font-weight: 400;
|
333
353
|
}
|
334
354
|
|
335
355
|
h3 {
|
@@ -420,56 +440,63 @@ ul {
|
|
420
440
|
|
421
441
|
/* #Navigation Styles
|
422
442
|
================================================== */
|
443
|
+
#nav {
|
444
|
+
div.title {
|
445
|
+
text-align:right;
|
446
|
+
margin-top: 24px;
|
447
|
+
margin-bottom: 12px;
|
448
|
+
font-size:26px;
|
449
|
+
line-height:1.4;
|
450
|
+
opacity: 0.3;
|
451
|
+
font-weight: 300;
|
452
|
+
color: $color;
|
423
453
|
|
424
|
-
|
425
|
-
|
426
|
-
list-style-type: none;
|
427
|
-
|
428
|
-
margin: 0;
|
429
|
-
margin-top: 42px;
|
430
|
-
text-align: right;
|
431
|
-
|
432
|
-
> li {
|
454
|
+
}
|
455
|
+
ul.nav-list {
|
433
456
|
|
434
|
-
|
457
|
+
list-style-type: none;
|
435
458
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
&:hover {
|
440
|
-
color: $color-highlight;
|
441
|
-
}
|
442
|
-
}
|
459
|
+
margin: 0;
|
460
|
+
margin-top: 42px;
|
461
|
+
text-align: right;
|
443
462
|
|
444
|
-
|
463
|
+
> li {
|
445
464
|
|
446
|
-
|
447
|
-
margin-top: 12px;
|
448
|
-
border-bottom: 1px solid #ddd;
|
465
|
+
padding: 3px 0px;
|
449
466
|
|
450
467
|
> a {
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
468
|
+
text-decoration: none;
|
469
|
+
color: $color-text;
|
470
|
+
&:hover {
|
471
|
+
color: $color-highlight;
|
472
|
+
}
|
456
473
|
}
|
457
474
|
|
458
|
-
&.
|
475
|
+
&.nav-item {
|
459
476
|
|
460
|
-
|
461
|
-
|
477
|
+
&.level1 {
|
478
|
+
font-size: 20px;
|
479
|
+
font-weight: 400;
|
480
|
+
padding-top:16px;
|
481
|
+
border-bottom: 1px solid #ddd;
|
462
482
|
|
463
|
-
|
483
|
+
> a {color: $color;}
|
484
|
+
}
|
464
485
|
|
465
|
-
|
486
|
+
&.level2 {
|
487
|
+
font-size: 16px;
|
488
|
+
font-weight: 400;
|
489
|
+
padding-top:12px;
|
490
|
+
}
|
466
491
|
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
492
|
+
&.level3 {
|
493
|
+
font-size: 14px;
|
494
|
+
font-weight: 300;
|
495
|
+
padding-top:12px;
|
496
|
+
}
|
497
|
+
&:hover {
|
472
498
|
|
499
|
+
}
|
473
500
|
}
|
474
501
|
}
|
475
502
|
}
|
@@ -497,8 +524,11 @@ code {
|
|
497
524
|
padding: 2px;
|
498
525
|
padding-left:4px;
|
499
526
|
padding-right:4px;
|
500
|
-
}
|
501
527
|
|
528
|
+
}
|
529
|
+
pre > code {
|
530
|
+
display: block;
|
531
|
+
}
|
502
532
|
/* editor */
|
503
533
|
.ace_editor {
|
504
534
|
width: 100%;
|
@@ -600,9 +630,16 @@ pre.response {
|
|
600
630
|
text-shadow: none;
|
601
631
|
line-height: 20px;
|
602
632
|
|
603
|
-
font-family:
|
633
|
+
font-family: monospace;
|
604
634
|
font-size: 12px;
|
605
635
|
|
636
|
+
> a {
|
637
|
+
color: $color-text;
|
638
|
+
&:hover {
|
639
|
+
color: $color-highlight;
|
640
|
+
}
|
641
|
+
}
|
642
|
+
|
606
643
|
}
|
607
644
|
.coffeescript .javascript, .javascript .xml, .tex .formula {
|
608
645
|
opacity: 0.5;
|
@@ -668,4 +705,4 @@ only screen and ( min-device-pixel-ratio: 2),
|
|
668
705
|
only screen and ( min-resolution: 192dpi),
|
669
706
|
only screen and ( min-resolution: 2dppx) {
|
670
707
|
/* TODO */
|
671
|
-
}
|
708
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
/*!
|
2
|
+
Lo-Dash 0.10.0 lodash.com/license
|
3
|
+
Underscore.js 1.4.2 underscorejs.org/LICENSE
|
4
|
+
*/
|
5
|
+
;(function(e,t){function s(t,r){var i,s=e.onerror,o=e._,u=et.createElement("script"),a=et.scripts[0];e.onerror=function(e){return i=e,n},u.text="var _=function("+t+"){"+r+"\n}",a.parentNode.insertBefore(u,a).parentNode.removeChild(u),u=e._,e._=o,e.onerror=s;if(i)throw new SyntaxError(i);return u}function o(e){if(e&&"object"==typeof e&&e.__wrapped__)return e;if(!(this instanceof o))return new o(e);this.__wrapped__=e}function u(e,t,n){t||(t=0);var r=e.length,i=r-t>=(n||ot);if(i)for(var s={},n=t-1;++
|
6
|
+
n<r;){var o=e[n]+"";(Ct.call(s,o)?s[o]:s[o]=[]).push(e[n])}return function(n){if(i){var r=n+"";return Ct.call(s,r)&&-1<W(s[r],n)}return-1<W(e,n,t)}}function a(e){return e.charCodeAt(0)}function f(e,t){var n=e.b,r=t.b,e=e.a,t=t.a;if(e!==t){if(e>t||"undefined"==typeof e)return 1;if(e<t||"undefined"==typeof t)return-1}return n<r?-1:1}function l(e,t,n){function i(){var r=arguments,a=o?this:t;return s||(e=t[u]),n.length&&(r=r.length?n.concat(g(r)):n),this instanceof i?(r=e.apply(this,r),k(r)?r:this):e
|
7
|
+
.apply(a,r)}var s=C(e),o=!n,u=t;return o&&(n=t),s||(t=e),e&&e.prototype&&(m.prototype=e.prototype,i.prototype=new m,m.prototype=r),i}function c(e,t){return e?"function"!=typeof e?function(t){return t[e]}:"undefined"!=typeof t?function(n,r,i){return e.call(t,n,r,i)}:e:K}function h(){for(var e={b:"",c:"",e:Vt,f:tn,g:"",h:Kt,i:Gt,j:Et,k:"",l:n},t,r=0;t=arguments[r];r++)for(var i in t)e[i]=t[i];t=e.a,e.d=/^[^,]+/.exec(t)[0],r="var i,l="+e.d+",t="+e.d+";if(!"+e.d+")return t;"+e.k+";",e.b?(r+="var m=l.length;i=-1;if(typeof m=='number'){"
|
8
|
+
,e.i&&(r+="if(k(l)){l=l.split('')}"),r+="while(++i<m){"+e.b+"}}else {"):e.h&&(r+="var m=l.length;i=-1;if(m&&j(l)){while(++i<m){i+='';"+e.g+"}}else {"),e.e||(r+="var u=typeof l=='function'&&s.call(l,'prototype');");if(e.f&&e.l)r+="var q=-1,r=p[typeof l]?n(l):[],m=r.length;while(++q<m){i=r[q];",e.e||(r+="if(!(u&&i=='prototype')){"),r+=e.g+"",e.e||(r+="}");else{r+="for(i in l){";if(!e.e||e.l)r+="if(",e.e||(r+="!(u&&i=='prototype')"),!e.e&&e.l&&(r+="&&"),e.l&&(r+="h.call(l,i)"),r+="){";r+=e.g+";";if(!
|
9
|
+
e.e||e.l)r+="}"}r+="}";if(e.e){r+="var f=l.constructor;";for(i=0;7>i;i++)r+="i='"+e.j[i]+"';if(","constructor"==e.j[i]&&(r+="!(f&&f.prototype===l)&&"),r+="h.call(l,i)){"+e.g+"}"}if(e.b||e.h)r+="}";return r+=e.c+";return t",s("e,h,j,k,p,n,s","return function("+t+"){"+r+"}")(c,Ct,b,A,sn,Pt,Lt)}function p(e){return"\\"+on[e]}function d(e){return dn[e]}function v(e){return"function"!=typeof e.toString&&"string"==typeof (e+"")}function m(){}function g(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length
|
10
|
+
:0);for(var r=-1,n=n-t||0,i=Array(0>n?0:n);++r<n;)i[r]=e[t+r];return i}function y(e){return vn[e]}function b(e){return At.call(e)==Ft}function w(e){var t=i;if(!e||"object"!=typeof e||b(e))return t;var n=e.constructor;return!C(n)&&(!Yt||!v(e))||n instanceof n?$t?(hn(e,function(e,n,r){return t=!Ct.call(r,n),i}),t===i):(hn(e,function(e,n){t=n}),t===i||Ct.call(e,t)):t}function E(e){var t=[];return pn(e,function(e,n){t.push(n)}),t}function S(e,t,n,s,o){if(e==r)return e;n&&(t=i);if(n=k(e)){var u=At.call
|
11
|
+
(e);if(!nn[u]||Yt&&v(e))return e;var a=gn(e)}if(!n||!t)return n?a?g(e):cn({},e):e;n=rn[u];switch(u){case qt:case Rt:return new n(+e);case Ut:case Xt:return new n(e);case Wt:return n(e.source,pt.exec(e))}s||(s=[]),o||(o=[]);for(u=s.length;u--;)if(s[u]==e)return o[u];var f=a?n(e.length):{};return s.push(e),o.push(f),(a?wn:pn)(e,function(e,n){f[n]=S(e,t,r,s,o)}),a&&(Ct.call(e,"index")&&(f.index=e.index),Ct.call(e,"input")&&(f.input=e.input)),f}function x(e){var t=[];return hn(e,function(e,n){C(e)&&t
|
12
|
+
.push(n)}),t.sort()}function T(e){var t={};return pn(e,function(e,n){t[e]=n}),t}function N(e,t,s,o){if(e===t)return 0!==e||1/e==1/t;if(e==r||t==r)return e===t;var u=At.call(e),a=At.call(t);u==Ft&&(u=zt),a==Ft&&(a=zt);if(u!=a)return i;switch(u){case qt:case Rt:return+e==+t;case Ut:return e!=+e?t!=+t:0==e?1/e==1/t:e==+t;case Wt:case Xt:return e==t+""}a=u==It;if(!a){if(e.__wrapped__||t.__wrapped__)return N(e.__wrapped__||e,t.__wrapped__||t);if(u!=zt||Yt&&(v(e)||v(t)))return i;var u=e.constructor,f=t
|
13
|
+
.constructor;if(u!=f&&(!C(u)||!(u instanceof u&&C(f)&&f instanceof f)))return i}s||(s=[]),o||(o=[]);for(u=s.length;u--;)if(s[u]==e)return o[u]==t;var l=n,c=0;s.push(e),o.push(t);if(a){c=e.length;if(l=c==t.length)for(;c--&&(l=N(e[c],t[c],s,o)););return l}return hn(e,function(e,n,r){if(Ct.call(r,n))return c++,l=Ct.call(t,n)&&N(e,t[n],s,o)}),l&&hn(t,function(e,t,n){if(Ct.call(n,t))return l=-1<--c}),l}function C(e){return"function"==typeof e}function k(e){return e?sn[typeof e]:i}function L(e){return"number"==typeof
|
14
|
+
e||At.call(e)==Ut}function A(e){return"string"==typeof e||At.call(e)==Xt}function O(e,t,n){var i=arguments,s=0,o=2,u=i[3],a=i[4];n!==st&&(u=[],a=[],"number"!=typeof n&&(o=i.length));for(;++s<o;)pn(i[s],function(t,n){var i,s,o;if(t&&((s=gn(t))||yn(t))){for(var f=u.length;f--;)if(i=u[f]==t)break;i?e[n]=a[f]:(u.push(t),a.push(o=(o=e[n],s)?gn(o)?o:[]:yn(o)?o:{}),e[n]=O(o,t,st,u,a))}else t!=r&&(e[n]=t)});return e}function M(e){var t=[];return pn(e,function(e){t.push(e)}),t}function _(e,t,n){var r=-1,s=
|
15
|
+
e?e.length:0,o=i,n=(0>n?Ht(0,s+n):n)||0;return"number"==typeof s?o=-1<(A(e)?e.indexOf(t,n):W(e,t,n)):wn(e,function(e){if(++r>=n)return!(o=e===t)}),o}function D(e,t,r){var i=n,t=c(t,r);if(gn(e))for(var r=-1,s=e.length;++r<s&&(i=!!t(e[r],r,e)););else wn(e,function(e,n,r){return i=!!t(e,n,r)});return i}function P(e,t,n){var r=[],t=c(t,n);if(gn(e))for(var n=-1,i=e.length;++n<i;){var s=e[n];t(s,n,e)&&r.push(s)}else wn(e,function(e,n,i){t(e,n,i)&&r.push(e)});return r}function H(e,t,n){var r,t=c(t,n);return wn
|
16
|
+
(e,function(e,n,s){if(t(e,n,s))return r=e,i}),r}function B(e,t,n){var r=-1,i=e?e.length:0,s=Array("number"==typeof i?i:0),t=c(t,n);if(gn(e))for(;++r<i;)s[r]=t(e[r],r,e);else wn(e,function(e,n,i){s[++r]=t(e,n,i)});return s}function j(e,t,n){var r=-Infinity,i=-1,s=e?e.length:0,o=r;if(t||!gn(e))t=!t&&A(e)?a:c(t,n),wn(e,function(e,n,i){n=t(e,n,i),n>r&&(r=n,o=e)});else for(;++i<s;)e[i]>o&&(o=e[i]);return o}function F(e,t){return B(e,t+"")}function I(e,t,n,r){var s=3>arguments.length;return t||(t=K),wn
|
17
|
+
(e,function(e,o,u){n=s?(s=i,e):t.call(r,n,e,o,u)}),n}function q(e,t,n,r){var s=e,o=e?e.length:0,u=3>arguments.length;if("number"!=typeof o)var a=bn(e),o=a.length;else Gt&&A(e)&&(s=e.split(""));return t||(t=K),wn(e,function(e,f,l){f=a?a[--o]:--o,n=u?(u=i,s[f]):t.call(r,n,s[f],f,l)}),n}function R(e,t,n){var r,t=c(t,n);if(gn(e))for(var n=-1,i=e.length;++n<i&&!(r=t(e[n],n,e)););else wn(e,function(e,n,i){return!(r=t(e,n,i))});return!!r}function U(e,t,n){if(e){var i=e.length;return t==r||n?e[0]:g(e,0,Bt
|
18
|
+
(Ht(0,t),i))}}function z(e,t){for(var n=-1,r=e?e.length:0,i=[];++n<r;){var s=e[n];gn(s)?kt.apply(i,t?s:z(s)):i.push(s)}return i}function W(e,t,n){var r=-1,i=e?e.length:0;if("number"==typeof n)r=(0>n?Ht(0,i+n):n||0)-1;else if(n)return r=V(e,t),e[r]===t?r:-1;for(;++r<i;)if(e[r]===t)return r;return-1}function X(e,t,n){return g(e,t==r||n?1:Ht(0,t))}function V(e,t,n,r){for(var i=0,s=e?e.length:i,n=n?c(n,r):K,t=n(t);i<s;)r=i+s>>>1,n(e[r])<t?i=r+1:s=r;return i}function $(e,t,n,r){var s=-1,o=e?e.length:0
|
19
|
+
,u=[],a=u;"function"==typeof t&&(r=n,n=t,t=i);var f=!t&&74<o;if(f)var l={};n&&(a=[],n=c(n,r));for(;++s<o;){var r=e[s],h=n?n(r,s,e):r;f&&(a=Ct.call(l,h+"")?l[h]:l[h]=[]);if(t?!s||a[a.length-1]!==h:0>W(a,h))(n||f)&&a.push(h),u.push(r)}return u}function J(e,t){return en||Ot&&2<arguments.length?Ot.call.apply(Ot,arguments):l(e,t,g(arguments,2))}function K(e){return e}function Q(e){wn(x(e),function(t){var n=o[t]=e[t];o.prototype[t]=function(){var e=[this.__wrapped__];return kt.apply(e,arguments),e=n.apply
|
20
|
+
(o,e),new o(e)}})}function G(){return this.__wrapped__}var n=!0,r=null,i=!1,Y="object"==typeof exports&&exports,Z="object"==typeof global&&global;Z.global===Z&&(e=Z);try{var et=e.document}catch(tt){}var nt=[],rt=new function(){},it=0,st=rt,ot=30,ut=e._,at=/[-?+=!~*%&^<>|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/,ft=/&(?:amp|lt|gt|quot|#x27);/g,lt=/\b__p\+='';/g,ct=/\b(__p\+=)''\+/g,ht=/(__e\(.*?\)|\b__t\))\+'';/g,pt=/\w*$/,dt=/(?:__e|__t=)\(\s*(?![\d\s"']|this\.)/g,vt=RegExp("^"+(rt
|
21
|
+
.valueOf+"").replace(/[.*+?^=!:${}()|[\]\/\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),mt=/\$\{((?:(?=\\?)\\?[\s\S])*?)}/g,gt=/<%=([\s\S]+?)%>/g,yt=/($^)/,bt=/[&<>"']/g,wt=/['\n\r\t\u2028\u2029\\]/g,Et="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),St=Math.ceil,xt=nt.concat,Tt=Math.floor,Nt=vt.test(Nt=Object.getPrototypeOf)&&Nt,Ct=rt.hasOwnProperty,kt=nt.push,Lt=rt.propertyIsEnumerable,At=rt.toString,Ot=vt.test(Ot=g.bind)&&Ot,
|
22
|
+
Mt=vt.test(Mt=Array.isArray)&&Mt,_t=e.isFinite,Dt=e.isNaN,Pt=vt.test(Pt=Object.keys)&&Pt,Ht=Math.max,Bt=Math.min,jt=Math.random,Ft="[object Arguments]",It="[object Array]",qt="[object Boolean]",Rt="[object Date]",Ut="[object Number]",zt="[object Object]",Wt="[object RegExp]",Xt="[object String]",Vt,$t,Jt=(Jt={0:1,length:1},nt.splice.call(Jt,0,1),Jt[0]),Kt=n;(function(){function e(){this.x=1}var t=[];e.prototype={valueOf:1,y:1};for(var n in new e)t.push(n);for(n in arguments)Kt=!n;Vt=!/valueOf/.test
|
23
|
+
(t),$t="x"!=t[0]})(1);var Qt=!b(arguments),Gt="xx"!="x"[0]+Object("x")[0];try{var Yt=("[object Object]",At.call(et||0)==zt)}catch(Zt){}var en=Ot&&/\n|Opera/.test(Ot+At.call(e.opera)),tn=Pt&&/^.+$|true/.test(Pt+!!e.attachEvent),nn={"[object Function]":i};nn[Ft]=nn[It]=nn[qt]=nn[Rt]=nn[Ut]=nn[zt]=nn[Wt]=nn[Xt]=n;var rn={};rn[It]=Array,rn[qt]=Boolean,rn[Rt]=Date,rn[zt]=Object,rn[Ut]=Number,rn[Wt]=RegExp,rn[Xt]=String;var sn={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i},on={"\\"
|
24
|
+
:"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};o.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:gt,variable:""};try{(/1/.test(function(){1})||s)()}catch(un){s=Function}var an={a:"o,v,g",k:"for(var a=1,b=typeof g=='number'?2:arguments.length;a<b;a++){if((l=arguments[a])){",g:"t[i]=l[i]",c:"}}"},fn={a:"d,c,w",k:"c=c&&typeof w=='undefined'?c:e(c,w)",b:"if(c(l[i],i,d)===false)return t",g:"if(c(l[i],i,d)===false)return t"},ln={b:r},cn=h(an
|
25
|
+
);Qt&&(b=function(e){return e?Ct.call(e,"callee"):i});var hn=h(fn,ln,{l:i}),pn=h(fn,ln),dn={"&":"&","<":"<",">":">",'"':""","'":"'"},vn=T(dn),mn=h(an,{g:"if(t[i]==null)"+an.g}),gn=Mt||function(e){return At.call(e)==It};C(/x/)&&(C=function(e){return"[object Function]"==At.call(e)});var yn=Nt?function(e){if(!e||"object"!=typeof e)return i;var t=e.valueOf,n="function"==typeof t&&(n=Nt(t))&&Nt(n);return n?e==n||Nt(e)==n&&!b(e):w(e)}:w,bn=Pt?function(e){return"function"==typeof e&&
|
26
|
+
Lt.call(e,"prototype")?E(e):k(e)?Pt(e):[]}:E,wn=h(fn);o.VERSION="0.10.0",o.assign=cn,o.after=function(e,t){return 1>e?t():function(){if(1>--e)return t.apply(this,arguments)}},o.bind=J,o.bindAll=function(e){for(var t=arguments,n=1<t.length?0:(t=x(e),-1),r=t.length;++n<r;){var i=t[n];e[i]=J(e[i],e)}return e},o.bindKey=function(e,t){return l(e,t,g(arguments,2))},o.chain=function(e){return new o(e)},o.clone=S,o.compact=function(e){for(var t=-1,n=e?e.length:0,r=[];++t<n;){var i=e[t];i&&r.push(i)}return r
|
27
|
+
},o.compose=function(){var e=arguments;return function(){for(var t=arguments,n=e.length;n--;)t=[e[n].apply(this,t)];return t[0]}},o.contains=_,o.countBy=function(e,t,n){var r={},t=c(t,n);return wn(e,function(e,n,i){n=t(e,n,i),Ct.call(r,n)?r[n]++:r[n]=1}),r},o.debounce=function(e,t,n){function i(){a=r,n||(o=e.apply(u,s))}var s,o,u,a;return function(){var r=n&&!a;return s=arguments,u=this,clearTimeout(a),a=setTimeout(i,t),r&&(o=e.apply(u,s)),o}},o.defaults=mn,o.defer=function(e){var n=g(arguments,1
|
28
|
+
);return setTimeout(function(){e.apply(t,n)},1)},o.delay=function(e,n){var r=g(arguments,2);return setTimeout(function(){e.apply(t,r)},n)},o.difference=function(e){for(var t=-1,n=e?e.length:0,r=xt.apply(nt,arguments),r=u(r,n),i=[];++t<n;){var s=e[t];r(s)||i.push(s)}return i},o.escape=function(e){return e==r?"":(e+"").replace(bt,d)},o.every=D,o.filter=P,o.find=H,o.first=U,o.flatten=z,o.forEach=wn,o.forIn=hn,o.forOwn=pn,o.functions=x,o.groupBy=function(e,t,n){var r={},t=c(t,n);return wn(e,function(
|
29
|
+
e,n,i){n=t(e,n,i),(Ct.call(r,n)?r[n]:r[n]=[]).push(e)}),r},o.has=function(e,t){return e?Ct.call(e,t):i},o.identity=K,o.indexOf=W,o.initial=function(e,t,n){if(!e)return[];var i=e.length;return g(e,0,Bt(Ht(0,i-(t==r||n?1:t||0)),i))},o.intersection=function(e){var t=arguments,n=t.length,r={},i=[];return wn(e,function(e){if(0>W(i,e)){for(var s=n;--s;)if(!(r[s]||(r[s]=u(t[s])))(e))return;i.push(e)}}),i},o.invert=T,o.invoke=function(e,t){var n=g(arguments,2),r="function"==typeof t,i=[];return wn(e,function(
|
30
|
+
e){i.push((r?t:e[t]).apply(e,n))}),i},o.isArguments=b,o.isArray=gn,o.isBoolean=function(e){return e===n||e===i||At.call(e)==qt},o.isDate=function(e){return At.call(e)==Rt},o.isElement=function(e){return e?1===e.nodeType:i},o.isEmpty=function(e){var t=n;if(!e)return t;var r=At.call(e),s=e.length;return r==It||r==Xt||r==Ft||Qt&&b(e)||r==zt&&"number"==typeof s&&C(e.splice)?!s:(pn(e,function(){return t=i}),t)},o.isEqual=N,o.isFinite=function(e){return _t(e)&&!Dt(parseFloat(e))},o.isFunction=C,o.isNaN=
|
31
|
+
function(e){return L(e)&&e!=+e},o.isNull=function(e){return e===r},o.isNumber=L,o.isObject=k,o.isPlainObject=yn,o.isRegExp=function(e){return At.call(e)==Wt},o.isString=A,o.isUndefined=function(e){return"undefined"==typeof e},o.keys=bn,o.last=function(e,t,n){if(e){var i=e.length;return t==r||n?e[i-1]:g(e,Ht(0,i-t))}},o.lastIndexOf=function(e,t,n){var r=e?e.length:0;for("number"==typeof n&&(r=(0>n?Ht(0,r+n):Bt(n,r-1))+1);r--;)if(e[r]===t)return r;return-1},o.map=B,o.max=j,o.memoize=function(e,t){var n=
|
32
|
+
{};return function(){var r=t?t.apply(this,arguments):arguments[0];return Ct.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},o.merge=O,o.min=function(e,t,n){var r=Infinity,i=-1,s=e?e.length:0,o=r;if(t||!gn(e))t=!t&&A(e)?a:c(t,n),wn(e,function(e,n,i){n=t(e,n,i),n<r&&(r=n,o=e)});else for(;++i<s;)e[i]<o&&(o=e[i]);return o},o.mixin=Q,o.noConflict=function(){return e._=ut,this},o.object=function(e,t){for(var n=-1,r=e?e.length:0,i={};++n<r;){var s=e[n];t?i[s]=t[n]:i[s[0]]=s[1]}return i},o.omit=function(e,
|
33
|
+
t,n){var r="function"==typeof t,i={};if(r)t=c(t,n);else var s=xt.apply(nt,arguments);return hn(e,function(e,n,o){if(r?!t(e,n,o):0>W(s,n,1))i[n]=e}),i},o.once=function(e){var t,s=i;return function(){return s?t:(s=n,t=e.apply(this,arguments),e=r,t)}},o.pairs=function(e){var t=[];return pn(e,function(e,n){t.push([n,e])}),t},o.partial=function(e){return l(e,g(arguments,1))},o.pick=function(e,t,n){var r={};if("function"!=typeof t)for(var i=0,s=xt.apply(nt,arguments),o=s.length;++i<o;){var u=s[i];u in
|
34
|
+
e&&(r[u]=e[u])}else t=c(t,n),hn(e,function(e,n,i){t(e,n,i)&&(r[n]=e)});return r},o.pluck=F,o.random=function(e,t){return e==r&&t==r&&(t=1),e=+e||0,t==r&&(t=e,e=0),e+Tt(jt()*((+t||0)-e+1))},o.range=function(e,t,n){e=+e||0,n=+n||1,t==r&&(t=e,e=0);for(var i=-1,t=Ht(0,St((t-e)/n)),s=Array(t);++i<t;)s[i]=e,e+=n;return s},o.reduce=I,o.reduceRight=q,o.reject=function(e,t,n){return t=c(t,n),P(e,function(e,n,r){return!t(e,n,r)})},o.rest=X,o.result=function(e,t){var n=e?e[t]:r;return C(n)?e[t]():n},o.shuffle=
|
35
|
+
function(e){var t=-1,n=Array(e?e.length:0);return wn(e,function(e){var r=Tt(jt()*(++t+1));n[t]=n[r],n[r]=e}),n},o.size=function(e){var t=e?e.length:0;return"number"==typeof t?t:bn(e).length},o.some=R,o.sortBy=function(e,t,n){var r=[],t=c(t,n);wn(e,function(e,n,i){r.push({a:t(e,n,i),b:n,c:e})}),e=r.length;for(r.sort(f);e--;)r[e]=r[e].c;return r},o.sortedIndex=V,o.tap=function(e,t){return t(e),e},o.template=function(e,t,n){e||(e=""),n||(n={});var r,i,u=o.templateSettings,a=0,f=n.interpolate||u.interpolate||
|
36
|
+
yt,l="__p+='",c=n.variable||u.variable,h=c;e.replace(RegExp((n.escape||u.escape||yt).source+"|"+f.source+"|"+(f===gt?mt:yt).source+"|"+(n.evaluate||u.evaluate||yt).source+"|$","g"),function(t,n,i,s,o,u){return i||(i=s),l+=e.slice(a,u).replace(wt,p),n&&(l+="'+__e("+n+")+'"),o&&(l+="';"+o+";__p+='"),i&&(l+="'+((__t=("+i+"))==null?'':__t)+'"),r||(r=o||at.test(n||i)),a=u+t.length,t}),l+="';\n",h||(c="obj",r?l="with("+c+"){"+l+"}":(n=RegExp("(\\(\\s*)"+c+"\\."+c+"\\b","g"),l=l.replace(dt,"$&"+c+".").replace
|
37
|
+
(n,"$1__d"))),l=(r?l.replace(lt,""):l).replace(ct,"$1").replace(ht,"$1;"),l="function("+c+"){"+(h?"":c+"||("+c+"={});")+"var __t,__p='',__e=_.escape"+(r?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":(h?"":",__d="+c+"."+c+"||"+c)+";")+l+"return __p}";try{i=s("_","return "+l)(o)}catch(d){throw d.source=l,d}return t?i(t):(i.source=l,i)},o.throttle=function(e,t){function n(){a=new Date,u=r,s=e.apply(o,i)}var i,s,o,u,a=0;return function(){var r=new Date,f=t-(r-a);return i=arguments
|
38
|
+
,o=this,0>=f?(clearTimeout(u),a=r,s=e.apply(o,i)):u||(u=setTimeout(n,f)),s}},o.times=function(e,t,n){for(var e=+e||0,r=-1,i=Array(e);++r<e;)i[r]=t.call(n,r);return i},o.toArray=function(e){return"number"==typeof (e?e.length:0)?Gt&&A(e)?e.split(""):g(e):M(e)},o.unescape=function(e){return e==r?"":(e+"").replace(ft,y)},o.union=function(){return $(xt.apply(nt,arguments))},o.uniq=$,o.uniqueId=function(e){return(e==r?"":e+"")+ ++it},o.values=M,o.where=function(e,t){var n=bn(t);return P(e,function(e){for(
|
39
|
+
var r=n.length;r--;){var i=e[n[r]]===t[n[r]];if(!i)break}return!!i})},o.without=function(e){for(var t=-1,n=e?e.length:0,r=u(arguments,1,20),i=[];++t<n;){var s=e[t];r(s)||i.push(s)}return i},o.wrap=function(e,t){return function(){var n=[e];return kt.apply(n,arguments),t.apply(this,n)}},o.zip=function(e){for(var t=-1,n=e?j(F(arguments,"length")):0,r=Array(n);++t<n;)r[t]=F(arguments,t);return r},o.all=D,o.any=R,o.collect=B,o.detect=H,o.drop=X,o.each=wn,o.extend=cn,o.foldl=I,o.foldr=q,o.head=U,o.include=
|
40
|
+
_,o.inject=I,o.methods=x,o.select=P,o.tail=X,o.take=U,o.unique=$,Q(o),o.prototype.chain=function(){return this},o.prototype.toString=function(){return""+this.__wrapped__},o.prototype.value=G,o.prototype.valueOf=G,wn(["first","last"],function(e){var t=o[e];t&&(o.prototype[e]=function(e,n){var i=t(this.__wrapped__,e,n);return e==r||n?i:new o(i)})}),wn(P(x(o),function(e){return/^(?:contains|every|find|has|is[A-Z].+|reduce.*|some)$/.test(e)}),function(e){var t=o[e];o.prototype[e]=function(){var e=[this
|
41
|
+
.__wrapped__];return kt.apply(e,arguments),t.apply(o,e)}}),wn("pop push reverse shift sort splice unshift".split(" "),function(e){var t=nt[e];o.prototype[e]=function(){var e=this.__wrapped__;return t.apply(e,arguments),Jt&&e.length===0&&delete e[0],this}}),wn(["concat","join","slice"],function(e){var t=nt[e];o.prototype[e]=function(){var e=t.apply(this.__wrapped__,arguments);return new o(e)}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(e._=o,define(function(){return o})):
|
42
|
+
Y?"object"==typeof module&&module&&module.exports==Y?(module.exports=o)._=o:Y._=o:e._=o})(this);
|
@@ -17,9 +17,6 @@
|
|
17
17
|
</filter>
|
18
18
|
</svg>
|
19
19
|
|
20
|
-
<!-- Use a readable font -->
|
21
|
-
<link href='http://fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'>
|
22
|
-
|
23
20
|
<!-- Le styles -->
|
24
21
|
<link href="/documentation/css/webapidoc.css" rel="stylesheet">
|
25
22
|
|
@@ -31,9 +28,12 @@
|
|
31
28
|
<!-- Les javascripts -->
|
32
29
|
<script src="/documentation/js/jquery.js"></script>
|
33
30
|
<script src="/documentation/js/highlight.js"></script>
|
31
|
+
<script src="/documentation/js/lodash.min.js"></script>
|
34
32
|
|
35
33
|
<!-- Ace Code Editor -->
|
36
|
-
|
34
|
+
<% if @data["url"].present? %>
|
35
|
+
<script src="http://d1n0x3qji82z53.cloudfront.net/src-min-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
|
36
|
+
<% end %>
|
37
37
|
|
38
38
|
<!-- Fav and touch icons -->
|
39
39
|
<link rel="shortcut icon" href="favicon.ico">
|
@@ -44,20 +44,15 @@
|
|
44
44
|
<div class="container">
|
45
45
|
<div class="row">
|
46
46
|
<div class="four columns offset-by-one" id="nav">
|
47
|
+
<div class="title">
|
48
|
+
<%= @data["title"] %> Documentation
|
49
|
+
</div>
|
47
50
|
<ul class="nav-list">
|
48
51
|
|
49
|
-
<% @
|
50
|
-
|
51
|
-
<li class="nav-header <%= "active" if chapter[:name] == @current[:name] %>">
|
52
|
-
<a href="/documentation/<%= chapter[:out] %>"><%= chapter[:name] %></a></li>
|
53
|
-
|
54
|
-
<% chapter[:sections].each do |section| %>
|
52
|
+
<% @sections.each do |section| %>
|
55
53
|
<li class="nav-item level<%= section[:level] %>" >
|
56
|
-
<a href="
|
54
|
+
<a href="/documentation/<%= section[:file]%>.html/#<%= section[:anchor]%>"><%= section[:title] %></a>
|
57
55
|
</li>
|
58
|
-
|
59
|
-
<% end %>
|
60
|
-
|
61
56
|
<% end %>
|
62
57
|
|
63
58
|
</ul>
|
@@ -83,50 +78,48 @@
|
|
83
78
|
<script>
|
84
79
|
$(document).ready(function() {
|
85
80
|
|
86
|
-
$("#content > pre > code").each( function (idx) {
|
87
|
-
var $editor = $(this);
|
88
|
-
var id = "editor" + idx;
|
89
|
-
var height = $editor.height();
|
90
81
|
|
91
|
-
|
82
|
+
<% if @data["url"].present? %>
|
83
|
+
$("#content > pre > code").each( function (idx) {
|
84
|
+
var $editor = $(this);
|
85
|
+
var id = "editor" + idx;
|
86
|
+
var height = $editor.height();
|
92
87
|
|
93
|
-
|
94
|
-
var editor = ace.edit(id);
|
95
|
-
editor.setTheme("ace/theme/tomorrow");
|
96
|
-
editor.getSession().setMode("ace/mode/javascript");
|
88
|
+
$editor.attr("id", id)
|
97
89
|
|
98
|
-
|
90
|
+
/* build editor */
|
91
|
+
var editor = ace.edit(id);
|
92
|
+
editor.setTheme("ace/theme/tomorrow");
|
93
|
+
editor.getSession().setMode("ace/mode/javascript");
|
99
94
|
|
100
|
-
|
101
|
-
var rid = "response" + idx;
|
102
|
-
var $response = $('<pre><code>change code to see response...</code></pre>').attr("id", rid).addClass("response");
|
95
|
+
$editor.css("height", ((height+8) + "px"));
|
103
96
|
|
104
|
-
|
97
|
+
/* build response field */
|
98
|
+
var rid = "response" + idx;
|
99
|
+
var $response = $('<pre><code><a href="#">click here</a> or change code to see response... </code></pre>').attr("id", rid).addClass("response");
|
105
100
|
|
106
|
-
|
107
|
-
editor.on("change", function(e) {
|
108
|
-
console.log(e);
|
101
|
+
$editor.after($response);
|
109
102
|
|
110
|
-
|
111
|
-
|
103
|
+
var getResponse = _.throttle(function(e) {
|
104
|
+
console.log(e);
|
112
105
|
|
113
|
-
|
114
|
-
|
115
|
-
}
|
116
|
-
catch (err) {
|
117
|
-
return;
|
118
|
-
}
|
119
|
-
var url = "<%= @data['url'] %>";
|
120
|
-
$.getJSON(url + '&source=' + encodeURIComponent(query)).complete(function (data) {
|
106
|
+
var query = editor.getValue();
|
107
|
+
var url = "<%= @data['url'] %>";
|
121
108
|
|
109
|
+
$.getJSON(url + '&source=' + encodeURIComponent(query)).complete(function (data) {
|
110
|
+
$response.html("<code>" + data.responseText + "</code>");
|
111
|
+
hljs.highlightBlock($response[0]);
|
112
|
+
});
|
122
113
|
|
123
|
-
|
124
|
-
|
125
|
-
});
|
126
|
-
});
|
114
|
+
return false;
|
115
|
+
}, 500);
|
127
116
|
|
128
|
-
|
117
|
+
/* bind editor change function for api requests */
|
118
|
+
editor.on("change", getResponse);
|
129
119
|
|
120
|
+
$response.find("a").click(getResponse);
|
121
|
+
})
|
122
|
+
<% end %>
|
130
123
|
});
|
131
124
|
|
132
125
|
</script>
|
data/lib/webapidoc/version.rb
CHANGED
data/lib/webapidoc.rb
CHANGED
data/webapidoc.gemspec
CHANGED
metadata
CHANGED
@@ -1,83 +1,92 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: webapidoc
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
version: 0.1.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Adrian Fuhrmann
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-12-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: maruku
|
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: 5
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 6
|
32
|
-
- 1
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.6.1
|
34
22
|
type: :runtime
|
35
|
-
|
36
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.6.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
37
31
|
name: sass
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.1.19
|
38
|
+
type: :runtime
|
38
39
|
prerelease: false
|
39
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
41
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 37
|
45
|
-
segments:
|
46
|
-
- 3
|
47
|
-
- 1
|
48
|
-
- 19
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
49
45
|
version: 3.1.19
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: nokogiri
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.5.5
|
50
54
|
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: rake
|
54
55
|
prerelease: false
|
55
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.5.5
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
56
65
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
segments:
|
62
|
-
- 0
|
63
|
-
version: "0"
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
64
70
|
type: :development
|
65
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
66
78
|
description: Create a static HTML Documentation for your JSON Web API.
|
67
79
|
email: aliasng@gmail.com
|
68
80
|
executables: []
|
69
|
-
|
70
81
|
extensions: []
|
71
|
-
|
72
82
|
extra_rdoc_files: []
|
73
|
-
|
74
|
-
files:
|
83
|
+
files:
|
75
84
|
- .gitignore
|
76
85
|
- README.md
|
77
86
|
- Rakefile
|
78
87
|
- lib/generators/webapidoc/install_generator.rb
|
79
|
-
- lib/generators/webapidoc/templates/
|
80
|
-
- lib/generators/webapidoc/templates/
|
88
|
+
- lib/generators/webapidoc/templates/_partial.md.erb
|
89
|
+
- lib/generators/webapidoc/templates/documentation.md.erb
|
81
90
|
- lib/generators/webapidoc/templates/webapidoc.yml
|
82
91
|
- lib/webapidoc.rb
|
83
92
|
- lib/webapidoc/base.rb
|
@@ -85,41 +94,32 @@ files:
|
|
85
94
|
- lib/webapidoc/js/highlight.js
|
86
95
|
- lib/webapidoc/js/html5.js
|
87
96
|
- lib/webapidoc/js/jquery.js
|
97
|
+
- lib/webapidoc/js/lodash.min.js
|
88
98
|
- lib/webapidoc/template.html.erb
|
89
99
|
- lib/webapidoc/version.rb
|
90
100
|
- webapidoc.gemspec
|
91
101
|
homepage: https://github.com/otty/webapidoc
|
92
102
|
licenses: []
|
93
|
-
|
94
103
|
post_install_message:
|
95
104
|
rdoc_options: []
|
96
|
-
|
97
|
-
require_paths:
|
105
|
+
require_paths:
|
98
106
|
- lib
|
99
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
108
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
|
106
|
-
- 0
|
107
|
-
version: "0"
|
108
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
114
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
segments:
|
115
|
-
- 0
|
116
|
-
version: "0"
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
117
119
|
requirements: []
|
118
|
-
|
119
120
|
rubyforge_project:
|
120
121
|
rubygems_version: 1.8.24
|
121
122
|
signing_key:
|
122
123
|
specification_version: 3
|
123
124
|
summary: Static HTML Documentation for JSON Web APIs.
|
124
125
|
test_files: []
|
125
|
-
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<%= @data["title"] %> Documentation
|
2
|
-
====================
|
3
|
-
|
4
|
-
Welcome
|
5
|
-
---------------------
|
6
|
-
|
7
|
-
Now is the time for all good men to come to
|
8
|
-
the aid of their country.
|
9
|
-
|
10
|
-
|
11
|
-
### Table of contents
|
12
|
-
|
13
|
-
<% @chapters.each_with_index do |chapter, idx| %>
|
14
|
-
<%= idx %>. [<%= chapter[:name] %>](/documentation/<%= chapter[:out] %>)
|
15
|
-
<% end %>
|
@@ -1,72 +0,0 @@
|
|
1
|
-
<%= @data["title"] %> Sample Page
|
2
|
-
====================
|
3
|
-
|
4
|
-
Paragraphs
|
5
|
-
---------------------
|
6
|
-
|
7
|
-
This is just a regular paragraph. Now is the time for all good men to come to
|
8
|
-
the aid of [their country](http://www.google.de). Look the link!
|
9
|
-
|
10
|
-
Elements
|
11
|
-
---------------------
|
12
|
-
|
13
|
-
The quick brown fox jumped over the lazy
|
14
|
-
dog's back.
|
15
|
-
|
16
|
-
### Header 3
|
17
|
-
|
18
|
-
> This is a blockquote.
|
19
|
-
>
|
20
|
-
> This is the second paragraph in the blockquote.
|
21
|
-
>
|
22
|
-
|
23
|
-
This is just an ordered list
|
24
|
-
|
25
|
-
1. Bird
|
26
|
-
2. McHale
|
27
|
-
3. Parish
|
28
|
-
|
29
|
-
This is just a unordered list.
|
30
|
-
|
31
|
-
* Bird
|
32
|
-
* McHale
|
33
|
-
* Parish
|
34
|
-
|
35
|
-
|
36
|
-
Support for ERB
|
37
|
-
---------------------
|
38
|
-
|
39
|
-
Table of contents generated via ERB:
|
40
|
-
|
41
|
-
<% @chapters.each_with_index do |chapter, idx| %>
|
42
|
-
<%= idx %>. [<%= chapter[:name] %>](/documentation/<%= chapter[:out] %>)
|
43
|
-
<% end %>
|
44
|
-
|
45
|
-
Some code
|
46
|
-
---------------------
|
47
|
-
|
48
|
-
This is just some code.
|
49
|
-
|
50
|
-
[
|
51
|
-
{
|
52
|
-
"title": "apples",
|
53
|
-
"count": [12000, 20000],
|
54
|
-
"description": {"text": "...", "sensitive": false}
|
55
|
-
},
|
56
|
-
{
|
57
|
-
"title": "oranges",
|
58
|
-
"count": [17500, null],
|
59
|
-
"description": {"text": "...", "sensitive": false}
|
60
|
-
}
|
61
|
-
]
|
62
|
-
|
63
|
-
This is some `code` within a paragraph. More to come!
|
64
|
-
This is just some more code.
|
65
|
-
|
66
|
-
[
|
67
|
-
{
|
68
|
-
"title": "apples",
|
69
|
-
"count": [12000, 20000],
|
70
|
-
"description": {"text": "...", "sensitive": false}
|
71
|
-
}
|
72
|
-
]
|