erbook 8.0.0 → 9.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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("![#{$project} logo](#{$program}.png)".
|
51
|
+
%= $logo = n.xref_link("![#{$project} logo](#{$program}.png)".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
|