erbook 8.0.0 → 9.0.0
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/erbook +1 -1
- data/doc/api/classes/ERBook/Document.html +26 -19
- data/doc/api/classes/ERBook/Document/Node.html +52 -45
- data/doc/api/classes/ERBook/Template.html +20 -20
- data/doc/api/classes/ERBook/Template/Sandbox.html +5 -5
- data/doc/api/classes/RDoc/AnyMethod.html +20 -20
- data/doc/api/classes/RDoc/TopLevel.html +20 -20
- data/doc/api/classes/String.html +10 -54
- data/doc/api/created.rid +1 -1
- data/doc/api/files/lib/erbook/document_rb.html +1 -1
- data/doc/api/files/lib/erbook/rdoc_rb.html +1 -1
- data/doc/api/files/lib/erbook/to_xhtml_rb.html +3 -4
- data/doc/api/files/lib/erbook_rb.html +1 -1
- data/doc/api/panel/search_index.js +1 -1
- data/doc/formats.erb +54 -45
- data/doc/history.erb +51 -0
- data/doc/index.html +931 -825
- data/doc/intro.erb +5 -3
- data/doc/setup.erb +16 -10
- data/doc/theory.erb +4 -3
- data/doc/usage.erb +11 -4
- data/fmt/xhtml.yaml +162 -116
- data/fmt/xhtml/jquery/jquery-ui-1.7.2.custom.css +2 -2
- data/lib/erbook.rb +3 -2
- data/lib/erbook/document.rb +18 -8
- data/lib/erbook/to_xhtml.rb +21 -30
- data/test/erbook.rb +17 -0
- metadata +15 -5
data/doc/intro.erb
CHANGED
@@ -23,12 +23,13 @@
|
|
23
23
|
* [Project home](<%= $website %>) --- the <%= $project %> project home page.
|
24
24
|
|
25
25
|
To get help or provide feedback, simply
|
26
|
-
|
26
|
+
%= xref "License", "contact the author(s)."
|
27
27
|
|
28
28
|
|
29
29
|
%|section "Features"
|
30
30
|
|
31
31
|
<%= $project %> is exciting because:
|
32
|
+
|
32
33
|
* Its documents are scriptable [eRuby templates](<%= eruby_url %>).
|
33
34
|
* It lets you <%= xref "HelloWorld", "define your own document formats" %>.
|
34
35
|
* It emits beautiful <%= xref "xhtml", "XHTML (web page)" %> documents.
|
@@ -47,11 +48,12 @@
|
|
47
48
|
|
48
49
|
%|section "Credits" |n|
|
49
50
|
|
50
|
-
%= $logo = n.xref_link("".
|
51
|
+
%= $logo = n.xref_link("".to_xhtml)
|
51
52
|
|
52
53
|
%< "README"
|
53
54
|
|
54
|
-
|
55
|
+
%= $project
|
56
|
+
is made possible by
|
55
57
|
%= xref "History", "contributions"
|
56
58
|
from users like you:
|
57
59
|
|
data/doc/setup.erb
CHANGED
@@ -26,14 +26,14 @@
|
|
26
26
|
%|td
|
27
27
|
Ruby language interpreter
|
28
28
|
%|td
|
29
|
-
Version 1.8.7
|
29
|
+
Version 1.8.7 and 1.9.1 have been tested successfully.
|
30
30
|
%|tr
|
31
31
|
%|td
|
32
32
|
[RubyGems](http://rubygems.org)
|
33
33
|
%|td
|
34
34
|
Ruby packaging system
|
35
35
|
%|td
|
36
|
-
Version 1.
|
36
|
+
Version 1.3.5 or newer is required.
|
37
37
|
|
38
38
|
|
39
39
|
%|section "Installation"
|
@@ -44,20 +44,24 @@
|
|
44
44
|
|
45
45
|
To check whether the installation was sucessful, run this command:
|
46
46
|
|
47
|
-
<%= $program %>
|
47
|
+
<%= $program %> --version
|
48
48
|
|
49
49
|
If the installation was successful, you will see output like this:
|
50
50
|
|
51
|
-
|
51
|
+
%|text
|
52
|
+
%= verbatim `ruby bin/#{$program} --version`
|
52
53
|
|
53
|
-
|
54
|
+
If you do not see such output, you may
|
55
|
+
%= xref "License", "ask the author(s)"
|
56
|
+
for help.
|
54
57
|
|
55
58
|
|
56
59
|
%|section "Package contents"
|
57
60
|
|
58
|
-
You will see the following items inside <%= $project %>'s installation
|
61
|
+
You will see the following items inside <%= $project %>'s installation
|
62
|
+
directory, whose path you can determine by running this command:
|
59
63
|
|
60
|
-
<%= $program %>
|
64
|
+
<%= $program %> --version
|
61
65
|
|
62
66
|
* <tt>bin/</tt>
|
63
67
|
|
@@ -78,15 +82,17 @@
|
|
78
82
|
|
79
83
|
* <tt>rdoc.rb</tt> --- provides RDoc parse trees to Ruby code.
|
80
84
|
|
81
|
-
* <tt>doc/</tt>
|
85
|
+
* <tt>doc/</tt>
|
86
|
+
|
87
|
+
* <tt>api/</tt> --- API reference documentation.
|
82
88
|
|
83
89
|
* <tt><%= $program %>.svg</tt> --- source file of the <%= $project %> logo.
|
84
90
|
|
85
91
|
* <tt>index.erb</tt> --- source file of this manual.
|
86
92
|
|
87
|
-
|
93
|
+
* <tt>LICENSE</tt> --- copyright notice and legal conditions.
|
88
94
|
|
89
|
-
* <tt>
|
95
|
+
* <tt>CREDITS</tt> --- attribution of project contributors.
|
90
96
|
|
91
97
|
|
92
98
|
%|section "Version numbers"
|
data/doc/theory.erb
CHANGED
@@ -367,7 +367,6 @@
|
|
367
367
|
`String`
|
368
368
|
%|td
|
369
369
|
Path of the current format specification file.
|
370
|
-
%|tr
|
371
370
|
|
372
371
|
% output_template_table_builder.call lambda {
|
373
372
|
%|tr
|
@@ -419,14 +418,16 @@
|
|
419
418
|
|
420
419
|
%|example! "HelloWorld format specification file", "HelloWorld.spec"
|
421
420
|
|
422
|
-
|
421
|
+
%|code :rhtml
|
422
|
+
%= verbatim File.read('doc/HelloWorld.spec')
|
423
423
|
|
424
424
|
|
425
425
|
%|example! "Input document for HelloWorld format", "HelloWorld.input"
|
426
426
|
|
427
427
|
Note that this input document uses the [*shorthand* eRuby directive syntax](<%= Ember::WEBSITE %>#Directives) and the [implicit <tt><%% end %></tt> inference](<%= Ember::WEBSITE %>#Infer-block-endings) features of the [<%= Ember::PROJECT %>](<%= Ember::WEBSITE %>) <%= Ember::TAGLINE %>.
|
428
428
|
|
429
|
-
|
429
|
+
%|code :rhtml
|
430
|
+
%= verbatim File.read('doc/HelloWorld.input')
|
430
431
|
|
431
432
|
|
432
433
|
%|example! "Output of HelloWorld format", "HelloWorld.output"
|
data/doc/usage.erb
CHANGED
@@ -8,7 +8,14 @@
|
|
8
8
|
|
9
9
|
%|section "Command-line interface"
|
10
10
|
|
11
|
-
|
11
|
+
When you run this command:
|
12
|
+
|
13
|
+
<%= $program %> --help
|
14
|
+
|
15
|
+
You will see this output:
|
16
|
+
|
17
|
+
%|text
|
18
|
+
%= verbatim `ruby bin/#{$program} --help`
|
12
19
|
|
13
20
|
The first command-line argument to <%= $project %> is either the name of a predefined format (FormatName) or the path to a <%= xref "SpecFile", "format specification file" %> (FormatFile).
|
14
21
|
|
@@ -33,9 +40,9 @@
|
|
33
40
|
Otherwise, Microsoft web browsers _will not display_ your XHTML document and will instead prompt the reader to save your XHTML document as a file on their computer. See [this detailed explanation](http://www.howtocreate.co.uk/wrongWithIE/?chapter=XHTML) for details.
|
34
41
|
|
35
42
|
|
36
|
-
|
43
|
+
%|section "Unindenting nodes hierarchically"
|
37
44
|
|
38
|
-
|
45
|
+
When writing <%= $project %> documents, I prefer to indent the content of nodes according to their depth because my [text editor of choice](http://jedit.org) automatically folds blocks of text based on indentation.
|
39
46
|
|
40
|
-
|
47
|
+
If you also prefer to write documents in this way, be sure to pass the <tt>--unindent</tt> option to <%= $project %> so that the indentation will not affect the resulting output.
|
41
48
|
|
data/fmt/xhtml.yaml
CHANGED
@@ -9,7 +9,7 @@ code: |
|
|
9
9
|
ICONS_DIR = File.join(ERBook::FORMATS_DIR, 'xhtml', 'icons')
|
10
10
|
JQUERY_DIR = File.join(ERBook::FORMATS_DIR, 'xhtml', 'jquery')
|
11
11
|
|
12
|
-
# load the String#to_xhtml
|
12
|
+
# load the String#to_xhtml methods
|
13
13
|
require 'erbook/to_xhtml'
|
14
14
|
|
15
15
|
class String
|
@@ -93,7 +93,7 @@ code: |
|
|
93
93
|
data = base_64_encode_file(path)
|
94
94
|
|
95
95
|
require 'mime/types'
|
96
|
-
mime = MIME::Types.of(path)
|
96
|
+
mime = MIME::Types.of(path).to_a.join(',')
|
97
97
|
|
98
98
|
base_64_embed data, mime
|
99
99
|
end
|
@@ -124,15 +124,21 @@ code: |
|
|
124
124
|
# Returns a CSS url() containing embedded image data.
|
125
125
|
#
|
126
126
|
def data_css
|
127
|
-
%{url(
|
127
|
+
%{url(#{embed_uri})}
|
128
128
|
end
|
129
129
|
|
130
130
|
##
|
131
|
-
# Returns
|
131
|
+
# Returns a temporary data URI that will be replaced
|
132
|
+
# with the actual data URI at runtime by javascript.
|
133
|
+
#
|
134
|
+
alias embed_uri object_id
|
135
|
+
|
136
|
+
##
|
137
|
+
# Returns an image tag that renders an embedded data URI.
|
132
138
|
#
|
133
139
|
def to_xhtml atts = {}
|
134
140
|
atts[:alt] ||= name
|
135
|
-
atts[:src] =
|
141
|
+
atts[:src] = embed_uri
|
136
142
|
atts[:class] = :icon
|
137
143
|
"<img#{atts.to_xml_atts}/>"
|
138
144
|
end
|
@@ -169,7 +175,7 @@ code: |
|
|
169
175
|
end
|
170
176
|
|
171
177
|
##
|
172
|
-
# Returns an
|
178
|
+
# Returns an image tag that embeds the given image file.
|
173
179
|
#
|
174
180
|
# [path]
|
175
181
|
# path to the image file
|
@@ -178,7 +184,7 @@ code: |
|
|
178
184
|
# format of the image file (e.g. PNG, JPEG, GIF, etc.)
|
179
185
|
#
|
180
186
|
# [atts]
|
181
|
-
# additional attributes for the
|
187
|
+
# additional attributes for the image tag
|
182
188
|
#
|
183
189
|
def embed_image_file path, format = path[/\w+/], atts = {}
|
184
190
|
data = ERBook.base_64_encode File.read(path)
|
@@ -186,7 +192,7 @@ code: |
|
|
186
192
|
end
|
187
193
|
|
188
194
|
##
|
189
|
-
# Returns an
|
195
|
+
# Returns an image tag that embeds the given raw image data.
|
190
196
|
#
|
191
197
|
# [data]
|
192
198
|
# raw image data
|
@@ -195,7 +201,7 @@ code: |
|
|
195
201
|
# format of the image file (e.g. PNG, JPEG, GIF, etc.)
|
196
202
|
#
|
197
203
|
# [atts]
|
198
|
-
# additional attributes for the
|
204
|
+
# additional attributes for the image tag
|
199
205
|
#
|
200
206
|
def embed_image_data data, format, atts = {}
|
201
207
|
atts[:src] = ERBook.base_64_embed_image_data(data, format)
|
@@ -242,7 +248,7 @@ code: |
|
|
242
248
|
# Returns the title of this node as XHTML.
|
243
249
|
#
|
244
250
|
def title_xhtml
|
245
|
-
title.to_s.
|
251
|
+
title.to_s.to_xhtml
|
246
252
|
end
|
247
253
|
|
248
254
|
##
|
@@ -253,10 +259,12 @@ code: |
|
|
253
259
|
end
|
254
260
|
|
255
261
|
##
|
256
|
-
# Returns the
|
262
|
+
# Returns the result of wrapping
|
263
|
+
# this node's content in the given
|
264
|
+
# tag and converting it into XHTML.
|
257
265
|
#
|
258
|
-
def
|
259
|
-
content.join.
|
266
|
+
def wrap_content_xhtml tag, atts = {}
|
267
|
+
%{<#{tag}#{atts.to_xml_atts}>#{content.join}</#{tag}>}.to_xhtml
|
260
268
|
end
|
261
269
|
|
262
270
|
##
|
@@ -321,7 +329,7 @@ code: |
|
|
321
329
|
%{<div class="tabs"><ul>} +
|
322
330
|
|
323
331
|
pc.map do |c|
|
324
|
-
%{<li><a href="##{c.here_frag}">#{c.title.to_s.
|
332
|
+
%{<li><a href="##{c.here_frag}">#{c.title.to_s.to_xhtml}</a></li>}
|
325
333
|
end.join +
|
326
334
|
|
327
335
|
%{</ul>}
|
@@ -385,7 +393,7 @@ code: |
|
|
385
393
|
[prefix, (%{"#{title}"} if label && title)].compact.join('. ')
|
386
394
|
end
|
387
395
|
|
388
|
-
label_xhtml = (label || title).to_s.
|
396
|
+
label_xhtml = (label || title).to_s.to_xhtml
|
389
397
|
|
390
398
|
%{<a class="xref" href="##{here_frag}" title="#{::ERB::Util.h caption}">#{label_xhtml}</a>}
|
391
399
|
end
|
@@ -429,17 +437,28 @@ code: |
|
|
429
437
|
nodes:
|
430
438
|
# theory
|
431
439
|
|
432
|
-
node: &
|
440
|
+
node: &node
|
433
441
|
index: false
|
442
|
+
chain: false
|
434
443
|
number: false
|
435
|
-
inline: true
|
436
444
|
silent: false
|
445
|
+
inline: true
|
437
446
|
output: <%= @node.content_xhtml %>
|
438
447
|
|
448
|
+
text: &text
|
449
|
+
<<: *node
|
450
|
+
inline: false
|
451
|
+
output: <%= @node.wrap_content_xhtml :pre %>
|
452
|
+
|
453
|
+
code:
|
454
|
+
<<: *text
|
455
|
+
params: language
|
456
|
+
output: <%= @node.wrap_content_xhtml :code, :lang => @node.language %>
|
457
|
+
|
439
458
|
# structure
|
440
459
|
|
441
460
|
header: &header
|
442
|
-
<<: *
|
461
|
+
<<: *node
|
443
462
|
silent: true
|
444
463
|
|
445
464
|
header_outside_above: &header_insert
|
@@ -460,7 +479,7 @@ nodes:
|
|
460
479
|
footer_outside_below: *header_insert
|
461
480
|
|
462
481
|
abstract:
|
463
|
-
<<: *
|
482
|
+
<<: *node
|
464
483
|
output: |
|
465
484
|
<div id="<%= @node.type_frag %>">
|
466
485
|
<h1 class="title"><%= @node.type_label %></h1>
|
@@ -471,9 +490,10 @@ nodes:
|
|
471
490
|
|
472
491
|
part: &latex
|
473
492
|
index: tree
|
493
|
+
chain: true
|
474
494
|
number: section
|
475
|
-
inline: false
|
476
495
|
silent: false
|
496
|
+
inline: false
|
477
497
|
params: [title, id]
|
478
498
|
output: |
|
479
499
|
<%= @node.parent_tabs_begin %>
|
@@ -521,11 +541,17 @@ nodes:
|
|
521
541
|
|
522
542
|
float:
|
523
543
|
index: list
|
544
|
+
chain: true
|
524
545
|
number: ordinal
|
525
|
-
inline: false
|
526
546
|
silent: false
|
547
|
+
inline: false
|
527
548
|
params: [title, id, type]
|
528
549
|
output: |
|
550
|
+
<%
|
551
|
+
if @node.type == 'command' and @node.title
|
552
|
+
@node.title = "<tt>#{verbatim @node.title}</tt>"
|
553
|
+
end
|
554
|
+
%>
|
529
555
|
<%= @node.parent_tabs_begin %>
|
530
556
|
<div class="<%= @node.type %>" id="<%= @node.here_frag %>">
|
531
557
|
<%= @node.navigation %>
|
@@ -544,22 +570,20 @@ nodes:
|
|
544
570
|
# tables
|
545
571
|
|
546
572
|
table: &table
|
547
|
-
|
548
|
-
|
549
|
-
inline: true
|
550
|
-
silent: false
|
573
|
+
<<: *node
|
574
|
+
inline: false
|
551
575
|
params: [xml_atts]
|
552
576
|
output: |
|
553
|
-
<table border="1"<%=
|
577
|
+
<ins><table border="1"<%=
|
554
578
|
(@node.xml_atts || {}).to_xml_atts
|
555
|
-
%>><%= @node.content_xhtml %></table>
|
579
|
+
%>><%= @node.content_xhtml %></table></ins>
|
556
580
|
|
557
581
|
thead: &table_child
|
558
582
|
<<: *table
|
559
583
|
output: |
|
560
584
|
<<%= @node.type %><%=
|
561
585
|
(@node.xml_atts || {}).to_xml_atts
|
562
|
-
%>><%= @node.
|
586
|
+
%>><%= @node.content_xhtml %></<%= @node.type %>>
|
563
587
|
|
564
588
|
tbody: *table_child
|
565
589
|
tfoot: *table_child
|
@@ -569,10 +593,7 @@ nodes:
|
|
569
593
|
|
570
594
|
# cross-references
|
571
595
|
xref:
|
572
|
-
|
573
|
-
number: false
|
574
|
-
inline: true
|
575
|
-
silent: false
|
596
|
+
<<: *node
|
576
597
|
params: [query, label]
|
577
598
|
output: |
|
578
599
|
<%=
|
@@ -591,16 +612,14 @@ nodes:
|
|
591
612
|
|
592
613
|
reference: &reference
|
593
614
|
index: false
|
615
|
+
chain: false
|
594
616
|
number: ordinal
|
595
|
-
inline: false
|
596
617
|
silent: true
|
618
|
+
inline: false
|
597
619
|
params: [title, id]
|
598
620
|
|
599
621
|
cite:
|
600
|
-
|
601
|
-
number: false
|
602
|
-
inline: true
|
603
|
-
silent: false
|
622
|
+
<<: *node
|
604
623
|
params: [target]
|
605
624
|
output: |
|
606
625
|
<%=
|
@@ -644,7 +663,7 @@ output: |
|
|
644
663
|
(n.section_number.to_s + ' ' if n.section_number),
|
645
664
|
n.list_frag,
|
646
665
|
n.here_frag,
|
647
|
-
n.title.to_s.
|
666
|
+
n.title.to_s.to_xhtml
|
648
667
|
]
|
649
668
|
|
650
669
|
%{<li>#{entry}#{"<ul>#{nested}</ul>" if nested}</li>}
|
@@ -671,7 +690,7 @@ output: |
|
|
671
690
|
lof_sections_frag_and_label = []
|
672
691
|
lof = lof_enums.sort.map do |type, nodes|
|
673
692
|
nested = nodes.map do |n|
|
674
|
-
%{<li><a id="#{n.list_frag}" href="##{n.here_frag}">#{n.title.to_s.
|
693
|
+
%{<li><a id="#{n.list_frag}" href="##{n.here_frag}">#{n.title.to_s.to_xhtml}</a></li>}
|
675
694
|
end.join
|
676
695
|
|
677
696
|
label = ERBook::PHRASES[type.capitalize << 's']
|
@@ -681,8 +700,8 @@ output: |
|
|
681
700
|
%{<div id="#{frag}"><h2 class="title">#{label}</h2> <ol>#{nested}</ol></div>}
|
682
701
|
end
|
683
702
|
%><?xml version="1.0" encoding="utf-8"?>
|
684
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
|
685
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
|
703
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
704
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
686
705
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
687
706
|
<head>
|
688
707
|
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
|
@@ -694,7 +713,7 @@ output: |
|
|
694
713
|
% if $title || $subtitle
|
695
714
|
<title><%=
|
696
715
|
[$title, $subtitle].compact.map do |t|
|
697
|
-
t.to_s.
|
716
|
+
t.to_s.to_xhtml
|
698
717
|
end.join(' — ')
|
699
718
|
%></title>
|
700
719
|
|
@@ -722,36 +741,6 @@ output: |
|
|
722
741
|
|
723
742
|
css
|
724
743
|
%>
|
725
|
-
|
726
|
-
.ui-widget
|
727
|
-
{
|
728
|
-
/* prevent nested widgets from having larger fonts */
|
729
|
-
font-size: 1em;
|
730
|
-
}
|
731
|
-
|
732
|
-
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a
|
733
|
-
{
|
734
|
-
cursor: pointer;
|
735
|
-
}
|
736
|
-
|
737
|
-
/* decorate external hyperlinks with a visual indicator */
|
738
|
-
a[href]:not([href^="#"])
|
739
|
-
{
|
740
|
-
background : <%= ICON_BY_NAME['hyperlink'].data_css %>;
|
741
|
-
background-position : center right;
|
742
|
-
background-repeat : no-repeat;
|
743
|
-
padding-right : 13px;
|
744
|
-
}
|
745
|
-
|
746
|
-
/* display icon for blockquote elements */
|
747
|
-
blockquote
|
748
|
-
{
|
749
|
-
background-image : <%= ICON_BY_NAME['quote'].data_css %>;
|
750
|
-
background-repeat : no-repeat;
|
751
|
-
margin-left : 0;
|
752
|
-
padding-left : 65px;
|
753
|
-
min-height : 50px;
|
754
|
-
}
|
755
744
|
/*]]>*/
|
756
745
|
</style>
|
757
746
|
|
@@ -789,11 +778,13 @@ output: |
|
|
789
778
|
%>
|
790
779
|
|
791
780
|
<div id="__loading__">
|
792
|
-
<%= ERBook::PHRASES['Loading...'] %> <noscript><%=
|
793
|
-
<p
|
794
|
-
|
795
|
-
|
796
|
-
|
781
|
+
<%= ERBook::PHRASES['Loading...'] %> <noscript><%=
|
782
|
+
"<ins>%s</ins> <p>%s</p> %s" % [
|
783
|
+
ERBook::PHRASES['Failed!'],
|
784
|
+
ERBook::PHRASES['Please enable JavaScript in your Web browser.'],
|
785
|
+
text_only_browser_divider
|
786
|
+
]
|
787
|
+
%></noscript>
|
797
788
|
</div>
|
798
789
|
|
799
790
|
<div id="__body__">
|
@@ -810,10 +801,10 @@ output: |
|
|
810
801
|
|
811
802
|
<div class="title_and_subtitle">
|
812
803
|
% if $title
|
813
|
-
<h1 class="title"><%= $title.to_s.
|
804
|
+
<h1 class="title"><%= $title.to_s.to_xhtml %></h1>
|
814
805
|
|
815
806
|
% if $subtitle
|
816
|
-
<h2 class="subtitle"><%= $subtitle.to_s.
|
807
|
+
<h2 class="subtitle"><%= $subtitle.to_s.to_xhtml %></h2>
|
817
808
|
</div>
|
818
809
|
|
819
810
|
<div class="authors_and_date">
|
@@ -868,7 +859,7 @@ output: |
|
|
868
859
|
<h1 style="display: none"><%= ERBook::PHRASES['Document'] %></h1>
|
869
860
|
<ul>
|
870
861
|
% @roots.select {|n| n.index_toc? }.each do |n|
|
871
|
-
<li><a href="#<%= n.here_frag %>"><%= n.title.to_s.
|
862
|
+
<li><a href="#<%= n.here_frag %>"><%= n.title.to_s.to_xhtml %></a></li>
|
872
863
|
</ul>
|
873
864
|
|
874
865
|
%= @content
|
@@ -938,7 +929,7 @@ output: |
|
|
938
929
|
<p class="validations">
|
939
930
|
<a href="http://validator.w3.org/check?uri=referer"><img
|
940
931
|
src="http://www.w3.org/Icons/valid-xhtml10-blue"
|
941
|
-
alt="Valid XHTML 1.0
|
932
|
+
alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a>
|
942
933
|
|
943
934
|
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"><img
|
944
935
|
src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
|
@@ -1110,12 +1101,10 @@ javascript: |
|
|
1110
1101
|
var target_is_panel = target.is('div') &&
|
1111
1102
|
target.parent('.ui-tabs').length;
|
1112
1103
|
|
1113
|
-
var target_initially_hidden = target.is(':hidden');
|
1114
|
-
|
1115
1104
|
//
|
1116
1105
|
// reveal all tabs which contain the target
|
1117
1106
|
//
|
1118
|
-
if (
|
1107
|
+
if (target.is(':hidden')) {
|
1119
1108
|
var panels = target.parents('.ui-tabs > div:hidden').get().reverse();
|
1120
1109
|
|
1121
1110
|
if (target_is_panel) {
|
@@ -1154,26 +1143,21 @@ javascript: |
|
|
1154
1143
|
}
|
1155
1144
|
}
|
1156
1145
|
|
1157
|
-
var
|
1146
|
+
var scroll_offset = scroll_target.offset().top;
|
1158
1147
|
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1148
|
+
//
|
1149
|
+
// set body height so that any element can be
|
1150
|
+
// brought to the top of the screen via scrolling
|
1151
|
+
//
|
1152
|
+
var document_height = $(document).height();
|
1153
|
+
var window_height = $(window).height();
|
1154
|
+
if (document_height - scroll_offset <= window_height) {
|
1155
|
+
$('body').css('min-height', document_height + window_height);
|
1156
|
+
}
|
1163
1157
|
|
1158
|
+
$('html, body').animate(
|
1159
|
+
{ scrollTop: scroll_offset }, 'slow', 'swing', function() {
|
1164
1160
|
set_hash(hash, target_is_panel);
|
1165
|
-
|
1166
|
-
if (
|
1167
|
-
!target_initially_hidden &&
|
1168
|
-
screen_after_scroll == screen_before_scroll
|
1169
|
-
) {
|
1170
|
-
//
|
1171
|
-
// nothing changed on the screen.
|
1172
|
-
// the target was already visible.
|
1173
|
-
// highlight it to notify the user.
|
1174
|
-
//
|
1175
|
-
target.effect('highlight', 'slow');
|
1176
|
-
}
|
1177
1161
|
}
|
1178
1162
|
);
|
1179
1163
|
}
|
@@ -1251,6 +1235,44 @@ javascript: |
|
|
1251
1235
|
).append(" <%= ERBook::PHRASES['Printer friendly'] %>")
|
1252
1236
|
);
|
1253
1237
|
|
1238
|
+
//
|
1239
|
+
// activate embedded data URIs
|
1240
|
+
//
|
1241
|
+
var data_uri_by_embed_uri = <%=
|
1242
|
+
result = {}
|
1243
|
+
ICONS.each do |icon|
|
1244
|
+
result[icon.embed_uri] = icon.data_uri
|
1245
|
+
end
|
1246
|
+
|
1247
|
+
require 'json'
|
1248
|
+
result.to_json
|
1249
|
+
%>;
|
1250
|
+
|
1251
|
+
$('img[src]').each(function() {
|
1252
|
+
var image = $(this);
|
1253
|
+
var data_uri = data_uri_by_embed_uri[image.attr('src')];
|
1254
|
+
|
1255
|
+
if (data_uri) {
|
1256
|
+
image.attr('src', data_uri);
|
1257
|
+
}
|
1258
|
+
});
|
1259
|
+
|
1260
|
+
$('style').each(function() {
|
1261
|
+
var style = $(this);
|
1262
|
+
var css = style.text();
|
1263
|
+
|
1264
|
+
if (css) {
|
1265
|
+
for (var embed_uri in data_uri_by_embed_uri) {
|
1266
|
+
var src = new RegExp('\\burl\\(' + embed_uri + '\\)', 'g');
|
1267
|
+
var dst = 'url("' + data_uri_by_embed_uri[embed_uri] + '")';
|
1268
|
+
|
1269
|
+
css = css.replace(src, dst);
|
1270
|
+
}
|
1271
|
+
|
1272
|
+
style.text(css);
|
1273
|
+
}
|
1274
|
+
});
|
1275
|
+
|
1254
1276
|
//
|
1255
1277
|
// ready for action!
|
1256
1278
|
//
|
@@ -1283,6 +1305,11 @@ styles: # these are SASS templates
|
|
1283
1305
|
blockquote
|
1284
1306
|
color: #333
|
1285
1307
|
font-style: italic
|
1308
|
+
background-image: <%= ICON_BY_NAME['quote'].data_css %>
|
1309
|
+
background-repeat: no-repeat
|
1310
|
+
margin-left: 0
|
1311
|
+
padding-left: 65px
|
1312
|
+
min-height: 50px
|
1286
1313
|
|
1287
1314
|
|
1288
1315
|
hr
|
@@ -1301,12 +1328,11 @@ styles: # these are SASS templates
|
|
1301
1328
|
code.para
|
1302
1329
|
white-space: pre
|
1303
1330
|
|
1304
|
-
ins > pre
|
1305
|
-
text-decoration: none
|
1306
1331
|
|
1332
|
+
// proper container (according to XHTML validation) for
|
1333
|
+
// inserting block-level elements in arbitrary locations
|
1307
1334
|
ins
|
1308
|
-
|
1309
|
-
.text-decoration: none
|
1335
|
+
text-decoration: none
|
1310
1336
|
|
1311
1337
|
|
1312
1338
|
a > img
|
@@ -1468,6 +1494,15 @@ styles: # these are SASS templates
|
|
1468
1494
|
clear: both
|
1469
1495
|
|
1470
1496
|
|
1497
|
+
.ui-widget
|
1498
|
+
// prevent nested widgets from having larger fonts
|
1499
|
+
font-size: 1em
|
1500
|
+
|
1501
|
+
|
1502
|
+
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a
|
1503
|
+
cursor: pointer
|
1504
|
+
|
1505
|
+
|
1471
1506
|
tt
|
1472
1507
|
background-color: #F0F8FF
|
1473
1508
|
|
@@ -1517,16 +1552,17 @@ styles: # these are SASS templates
|
|
1517
1552
|
&:visited
|
1518
1553
|
color: #800080
|
1519
1554
|
|
1555
|
+
// decorate external hyperlinks with a visual indicator
|
1556
|
+
&[href]:not([href^="#"])
|
1557
|
+
background: <%= ICON_BY_NAME['hyperlink'].data_css %>
|
1558
|
+
background-position: center right
|
1559
|
+
background-repeat: no-repeat
|
1560
|
+
padding-right: 13px
|
1561
|
+
|
1520
1562
|
|
1521
1563
|
#__header__ >
|
1522
1564
|
.logo
|
1523
|
-
|
1524
|
-
margin-right: 1em
|
1525
|
-
margin-top: 0.25em
|
1526
|
-
|
1527
|
-
img
|
1528
|
-
max-height: 4em
|
1529
|
-
max-width: 4em
|
1565
|
+
text-align: center
|
1530
1566
|
|
1531
1567
|
.title_and_subtitle
|
1532
1568
|
float: left
|
@@ -1565,12 +1601,22 @@ styles: # these are SASS templates
|
|
1565
1601
|
|
1566
1602
|
.nav
|
1567
1603
|
float: right
|
1604
|
+
clear: right
|
1568
1605
|
|
1569
|
-
> a > img
|
1570
|
-
|
1606
|
+
> a > img:hover
|
1607
|
+
background-color: yellow
|
1571
1608
|
|
1572
|
-
|
1573
|
-
|
1609
|
+
|
1610
|
+
// make navigation menu appear on the tab bar
|
1611
|
+
.ui-tabs > .ui-tabs-panel > .nav
|
1612
|
+
position: relative
|
1613
|
+
margin-top: -3.375em
|
1614
|
+
margin-right: -1em
|
1615
|
+
|
1616
|
+
|
1617
|
+
// prevent tabs on tab bar from ovelapping with the above navigation menu
|
1618
|
+
.ui-tabs > .ui-tabs-nav > li:last-child
|
1619
|
+
margin-right: 9em
|
1574
1620
|
|
1575
1621
|
|
1576
1622
|
#__nfo__ > table td:first-child, #__nfo__ > .validations
|