erbook 7.1.1 → 7.3.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/doc/HelloWorld.input +12 -19
- data/doc/HelloWorld.spec +1 -0
- data/doc/api/apple-touch-icon.png +0 -0
- data/doc/api/classes/ERBook/Document/Node.html +6 -6
- data/doc/api/classes/ERBook/Document.html +24 -24
- data/doc/api/classes/ERBook/Template/Sandbox.html +5 -5
- data/doc/api/classes/ERBook/Template.html +20 -20
- data/doc/api/classes/RDoc/AnyMethod.html +24 -24
- data/doc/api/classes/RDoc/TopLevel.html +36 -36
- data/doc/api/classes/String.html +17 -12
- data/doc/api/created.rid +1 -1
- data/doc/api/favicon.ico +0 -0
- data/doc/api/files/CREDITS.html +1 -1
- data/doc/api/files/LICENSE.html +1 -1
- data/doc/api/files/lib/erbook/document_rb.html +3 -1
- data/doc/api/files/lib/erbook/rdoc_rb.html +4 -2
- data/doc/api/files/lib/erbook/template_rb.html +1 -1
- data/doc/api/files/lib/erbook/to_xhtml_rb.html +3 -3
- data/doc/api/files/lib/erbook_rb.html +1 -3
- data/doc/api/js/searchdoc.js +38 -15
- data/doc/api/panel/index.html +13 -5
- data/doc/api/panel/search_index.js +1 -1
- data/doc/formats.erb +18 -18
- data/doc/history.erb +66 -1
- data/doc/index.html +1282 -1023
- data/doc/theory.erb +2 -0
- data/fmt/xhtml.yaml +356 -285
- data/lib/erbook/document.rb +11 -11
- data/lib/erbook/rdoc.rb +9 -4
- data/lib/erbook/to_xhtml.rb +5 -0
- data/lib/erbook.rb +2 -3
- metadata +13 -21
data/fmt/xhtml.yaml
CHANGED
@@ -45,6 +45,15 @@ code: |
|
|
45
45
|
end
|
46
46
|
end.pack('U*').strip.gsub(/[[:space:]-]+/, '-')
|
47
47
|
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Evaluates this string as an Ember
|
51
|
+
# template (created with the given
|
52
|
+
# options) inside the given binding.
|
53
|
+
#
|
54
|
+
def thru_ember binding, options = {}
|
55
|
+
::Ember::Template.new(self, options).render(binding)
|
56
|
+
end
|
48
57
|
end
|
49
58
|
|
50
59
|
class Hash
|
@@ -455,7 +464,6 @@ nodes:
|
|
455
464
|
bypass: false
|
456
465
|
output: |
|
457
466
|
<div id="<%= @node.type_frag %>">
|
458
|
-
<%= @node.navigation %>
|
459
467
|
<h1 class="title"><%= @node.type_label %></h1>
|
460
468
|
<%= @node.content_xhtml_div %>
|
461
469
|
</div>
|
@@ -675,7 +683,7 @@ output: |
|
|
675
683
|
lof = lof_enums.sort.map do |type, nodes|
|
676
684
|
nested = nodes.map do |n|
|
677
685
|
%{<li><a id="#{n.list_frag}" href="##{n.here_frag}">#{n.title.to_s.to_inline_xhtml}</a></li>}
|
678
|
-
end
|
686
|
+
end.join
|
679
687
|
|
680
688
|
label = ERBook::PHRASES[type.capitalize << 's']
|
681
689
|
frag = nodes.first.type_frag
|
@@ -758,22 +766,18 @@ output: |
|
|
758
766
|
/*]]>*/
|
759
767
|
</style>
|
760
768
|
|
761
|
-
% require 'rainpress'
|
762
769
|
% @format['styles'].each do |style|
|
763
770
|
% style.each_pair do |media, sass|
|
764
771
|
<style type="text/css" media="<%= media %>">
|
765
772
|
/*<![CDATA[*/<%=
|
766
773
|
|
767
774
|
# expand eRuby directives in SASS templates
|
768
|
-
sass =
|
775
|
+
sass = sass.to_s.thru_ember(binding)
|
769
776
|
|
770
777
|
# compile SASS into CSS
|
771
778
|
require 'sass'
|
772
779
|
css = ::Sass::Engine.new(sass).render
|
773
780
|
|
774
|
-
# minify the CSS
|
775
|
-
css = Rainpress.compress(css)
|
776
|
-
|
777
781
|
%>/*]]>*/
|
778
782
|
</style>
|
779
783
|
|
@@ -781,264 +785,10 @@ output: |
|
|
781
785
|
//<![CDATA[
|
782
786
|
%< File.join(JQUERY_DIR, 'jquery-1.3.2.min.js')
|
783
787
|
%< File.join(JQUERY_DIR, 'jquery-ui-1.7.2.custom.min.js')
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
*/
|
789
|
-
|
790
|
-
//
|
791
|
-
// respond to changes in window location
|
792
|
-
//
|
793
|
-
var $last_hash = null;
|
794
|
-
|
795
|
-
function on_hash_change() {
|
796
|
-
var curr_hash = window.location.hash;
|
797
|
-
|
798
|
-
if (curr_hash && curr_hash != $last_hash) {
|
799
|
-
$last_hash = curr_hash;
|
800
|
-
reveal_hash(curr_hash);
|
801
|
-
}
|
802
|
-
|
803
|
-
setTimeout(on_hash_change, 300);
|
804
|
-
}
|
805
|
-
|
806
|
-
//
|
807
|
-
// Sets the location bar hash to the given value.
|
808
|
-
//
|
809
|
-
// [prevent_jump]
|
810
|
-
// If true, prevents the browser from jumping to
|
811
|
-
// the element corresponding to the given hash.
|
812
|
-
//
|
813
|
-
function set_hash(hash, prevent_jump) {
|
814
|
-
if ($last_hash == hash) {
|
815
|
-
return;
|
816
|
-
}
|
817
|
-
|
818
|
-
var set_the_hash = function() {
|
819
|
-
//
|
820
|
-
// XXX: bypass on_hash_change() by setting $last_hash
|
821
|
-
//
|
822
|
-
window.location.hash = $last_hash = hash;
|
823
|
-
}
|
824
|
-
|
825
|
-
if (prevent_jump) {
|
826
|
-
var target = $(hash);
|
827
|
-
|
828
|
-
if (target.length) {
|
829
|
-
//
|
830
|
-
// This particular approach to solving the browser
|
831
|
-
// jumping problem comes from the jQuery.LocalScroll
|
832
|
-
// plugin, which is dual licensed under MIT and GPL:
|
833
|
-
//
|
834
|
-
// Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
835
|
-
//
|
836
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
837
|
-
// of this software and associated documentation files (the "Software"), to deal
|
838
|
-
// in the Software without restriction, including without limitation the rights
|
839
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
840
|
-
// copies of the Software, and to permit persons to whom the Software is
|
841
|
-
// furnished to do so, subject to the following conditions:
|
842
|
-
//
|
843
|
-
// The above copyright notice and this permission notice shall be included in
|
844
|
-
// all copies or substantial portions of the Software.
|
845
|
-
//
|
846
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
847
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
848
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
849
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
850
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
851
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
852
|
-
// THE SOFTWARE.
|
853
|
-
//
|
854
|
-
// This plugin is documented at:
|
855
|
-
//
|
856
|
-
// http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
|
857
|
-
//
|
858
|
-
// And its source is available at:
|
859
|
-
//
|
860
|
-
// http://flesler-plugins.googlecode.com/svn/trunk/jquery.localScroll/jquery.localScroll.js
|
861
|
-
//
|
862
|
-
var target_id = target.attr('id');
|
863
|
-
|
864
|
-
//
|
865
|
-
// temporarily place a dummy element at the current
|
866
|
-
// screen position and give it the ID of the target
|
867
|
-
//
|
868
|
-
var original_screen_position = $(window).scrollTop();
|
869
|
-
|
870
|
-
var dummy = $('<span/>').attr('id', target_id).css({
|
871
|
-
position: 'absolute',
|
872
|
-
top: original_screen_position
|
873
|
-
});
|
874
|
-
|
875
|
-
target.removeAttr('id').before(dummy);
|
876
|
-
|
877
|
-
//
|
878
|
-
// when we set the hash, the browser will jump to the
|
879
|
-
// dummy, which is where the browser screen currently
|
880
|
-
// is, and therefore the jump will not be visualized!
|
881
|
-
//
|
882
|
-
set_the_hash();
|
883
|
-
|
884
|
-
//
|
885
|
-
// undo the temporary changes
|
886
|
-
//
|
887
|
-
dummy.remove();
|
888
|
-
target.attr('id', target_id);
|
889
|
-
|
890
|
-
//
|
891
|
-
// the above approach does not work for Opera and IE.
|
892
|
-
// they ignore the dummy and jump to the actual target
|
893
|
-
//
|
894
|
-
$(window).scrollTop(original_screen_position);
|
895
|
-
|
896
|
-
return;
|
897
|
-
}
|
898
|
-
}
|
899
|
-
|
900
|
-
set_the_hash();
|
901
|
-
}
|
902
|
-
|
903
|
-
//
|
904
|
-
// Returns the tab corresponding to the
|
905
|
-
// given panel in the given tabs widget.
|
906
|
-
//
|
907
|
-
function tab_by_panel(panel, tabs_widget) {
|
908
|
-
if (!tabs_widget) {
|
909
|
-
tabs_widget = panel.parent('.ui-tabs');
|
910
|
-
}
|
911
|
-
|
912
|
-
return tabs_widget.find(
|
913
|
-
'.ui-tabs-nav > li > a[href=#'+ panel.attr('id') +']'
|
914
|
-
).parent('li');
|
915
|
-
}
|
916
|
-
|
917
|
-
//
|
918
|
-
// Reveals the element at the given hash by (1) activating all
|
919
|
-
// tabs that contain it, (2) smoothly scrolling to it, and (3)
|
920
|
-
// updating the hash in the browser's location bar accordingly.
|
921
|
-
//
|
922
|
-
function reveal_hash(hash) {
|
923
|
-
var target = $(hash);
|
924
|
-
|
925
|
-
if (target.length) {
|
926
|
-
var target_is_panel = target.is('div') &&
|
927
|
-
target.parent('.ui-tabs').length;
|
928
|
-
|
929
|
-
var target_initially_hidden = target.is(':hidden');
|
930
|
-
|
931
|
-
//
|
932
|
-
// reveal all tabs which contain the target
|
933
|
-
//
|
934
|
-
if (target_initially_hidden) {
|
935
|
-
var panels = target.parents('.ui-tabs > div:hidden').get().reverse();
|
936
|
-
|
937
|
-
if (target_is_panel) {
|
938
|
-
panels.push(target);
|
939
|
-
}
|
940
|
-
|
941
|
-
for (var i in panels) {
|
942
|
-
var panel = $(panels[i]);
|
943
|
-
var tabs_widget = panel.parent('.ui-tabs');
|
944
|
-
var selected_index = tabs_widget.tabs('option', 'selected');
|
945
|
-
|
946
|
-
//
|
947
|
-
// map the panel to its tab because tabs do not
|
948
|
-
// have to be in the same order as their panels
|
949
|
-
//
|
950
|
-
var tab = tab_by_panel(panel, tabs_widget);
|
951
|
-
var wanted_index = tab.prevAll('li').length;
|
952
|
-
|
953
|
-
if (wanted_index != selected_index) {
|
954
|
-
tabs_widget.tabs('select', wanted_index);
|
955
|
-
}
|
956
|
-
}
|
957
|
-
}
|
958
|
-
|
959
|
-
//
|
960
|
-
// scroll to the tab bar instead of the target
|
961
|
-
// because it contains the title for the target
|
962
|
-
//
|
963
|
-
var scroll_target = target_is_panel ?
|
964
|
-
target.parent('.ui-tabs') : target;
|
965
|
-
|
966
|
-
var screen_before_scroll = $(window).scrollTop();
|
967
|
-
|
968
|
-
$('html, body').animate(
|
969
|
-
{ scrollTop: Math.floor(scroll_target.offset().top) },
|
970
|
-
'slow', 'swing', function() {
|
971
|
-
var screen_after_scroll = $(window).scrollTop();
|
972
|
-
|
973
|
-
set_hash(hash, target_is_panel);
|
974
|
-
|
975
|
-
if (
|
976
|
-
!target_initially_hidden &&
|
977
|
-
screen_after_scroll == screen_before_scroll
|
978
|
-
) {
|
979
|
-
//
|
980
|
-
// nothing changed on the screen.
|
981
|
-
// the target was already visible.
|
982
|
-
// highlight it to notify the user.
|
983
|
-
//
|
984
|
-
target.effect('highlight', 'slow');
|
985
|
-
}
|
986
|
-
}
|
987
|
-
);
|
988
|
-
}
|
989
|
-
}
|
990
|
-
|
991
|
-
//
|
992
|
-
// create jQuery UI tabs
|
993
|
-
//
|
994
|
-
$('.tabs').tabs();
|
995
|
-
|
996
|
-
//
|
997
|
-
// make internal hyperlinks reveal their targets when clicked
|
998
|
-
//
|
999
|
-
$('a[href^=#]').click(function() {
|
1000
|
-
var link = $(this);
|
1001
|
-
var hash = link.attr('href');
|
1002
|
-
|
1003
|
-
if (link.parent('li').parent('.ui-tabs-nav').length) {
|
1004
|
-
// tab clicks should not cause the screen to scroll
|
1005
|
-
set_hash(hash, true);
|
1006
|
-
}
|
1007
|
-
else {
|
1008
|
-
reveal_hash(hash);
|
1009
|
-
}
|
1010
|
-
|
1011
|
-
return false;
|
1012
|
-
});
|
1013
|
-
|
1014
|
-
//
|
1015
|
-
// checkbox for printer friendly stylesheet
|
1016
|
-
//
|
1017
|
-
$('#__header__ > .authors_and_date').append(
|
1018
|
-
$('<span/>').append(
|
1019
|
-
$('<input/>').attr('type', 'checkbox').click(function() {
|
1020
|
-
if ($(this).is(':checked')) {
|
1021
|
-
$('style[media=screen]').attr('media', 'neercs');
|
1022
|
-
$('style[media=print]').attr('media', 'screen');
|
1023
|
-
}
|
1024
|
-
else {
|
1025
|
-
$('style[media=screen]').attr('media', 'print');
|
1026
|
-
$('style[media=neercs]').attr('media', 'screen');
|
1027
|
-
}
|
1028
|
-
return true;
|
1029
|
-
})
|
1030
|
-
).append(" <%= ERBook::PHRASES['Printer friendly'] %>")
|
1031
|
-
);
|
1032
|
-
|
1033
|
-
//
|
1034
|
-
// ready for action!
|
1035
|
-
//
|
1036
|
-
$('#__loading__').append("<%= ERBook::PHRASES['Ready!'] %>").
|
1037
|
-
fadeOut('slow', function() {
|
1038
|
-
$('#__body__').show();
|
1039
|
-
on_hash_change();
|
1040
|
-
});
|
1041
|
-
});
|
788
|
+
<%=
|
789
|
+
# expand eRuby directives in JavaScript template
|
790
|
+
js = @format['javascript'].to_s.thru_ember(binding)
|
791
|
+
%>
|
1042
792
|
//]]>
|
1043
793
|
</script>
|
1044
794
|
</head>
|
@@ -1226,6 +976,302 @@ output: |
|
|
1226
976
|
</body>
|
1227
977
|
</html>
|
1228
978
|
|
979
|
+
javascript: |
|
980
|
+
$(function() {
|
981
|
+
/*
|
982
|
+
%< File.join(ERBook::INSTALL, 'LICENSE')
|
983
|
+
*/
|
984
|
+
|
985
|
+
//
|
986
|
+
// respond to changes in window location
|
987
|
+
//
|
988
|
+
var $last_hash = null;
|
989
|
+
|
990
|
+
function on_hash_change() {
|
991
|
+
var curr_hash = window.location.hash;
|
992
|
+
|
993
|
+
if (curr_hash && curr_hash != $last_hash) {
|
994
|
+
$last_hash = curr_hash;
|
995
|
+
reveal_hash(curr_hash);
|
996
|
+
}
|
997
|
+
|
998
|
+
setTimeout(on_hash_change, 300);
|
999
|
+
}
|
1000
|
+
|
1001
|
+
//
|
1002
|
+
// Sets the location bar hash to the given value.
|
1003
|
+
//
|
1004
|
+
// [prevent_jump]
|
1005
|
+
// If true, prevents the browser from jumping to
|
1006
|
+
// the element corresponding to the given hash.
|
1007
|
+
//
|
1008
|
+
function set_hash(hash, prevent_jump) {
|
1009
|
+
if ($last_hash == hash) {
|
1010
|
+
return;
|
1011
|
+
}
|
1012
|
+
|
1013
|
+
var set_the_hash = function() {
|
1014
|
+
//
|
1015
|
+
// XXX: bypass on_hash_change() by setting $last_hash
|
1016
|
+
//
|
1017
|
+
window.location.hash = $last_hash = hash;
|
1018
|
+
}
|
1019
|
+
|
1020
|
+
if (prevent_jump) {
|
1021
|
+
var target = $(hash);
|
1022
|
+
|
1023
|
+
if (target.length) {
|
1024
|
+
//
|
1025
|
+
// This particular approach to solving the browser
|
1026
|
+
// jumping problem comes from the jQuery.LocalScroll
|
1027
|
+
// plugin, which is dual licensed under MIT and GPL:
|
1028
|
+
//
|
1029
|
+
// Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
1030
|
+
//
|
1031
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
1032
|
+
// of this software and associated documentation files (the "Software"), to deal
|
1033
|
+
// in the Software without restriction, including without limitation the rights
|
1034
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
1035
|
+
// copies of the Software, and to permit persons to whom the Software is
|
1036
|
+
// furnished to do so, subject to the following conditions:
|
1037
|
+
//
|
1038
|
+
// The above copyright notice and this permission notice shall be included in
|
1039
|
+
// all copies or substantial portions of the Software.
|
1040
|
+
//
|
1041
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1042
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1043
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1044
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
1045
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
1046
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
1047
|
+
// THE SOFTWARE.
|
1048
|
+
//
|
1049
|
+
// This plugin is documented at:
|
1050
|
+
//
|
1051
|
+
// http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
|
1052
|
+
//
|
1053
|
+
// And its source is available at:
|
1054
|
+
//
|
1055
|
+
// http://flesler-plugins.googlecode.com/svn/trunk/jquery.localScroll/jquery.localScroll.js
|
1056
|
+
//
|
1057
|
+
var target_id = target.attr('id');
|
1058
|
+
|
1059
|
+
//
|
1060
|
+
// temporarily place a dummy element at the current
|
1061
|
+
// screen position and give it the ID of the target
|
1062
|
+
//
|
1063
|
+
var original_screen_position = $(window).scrollTop();
|
1064
|
+
|
1065
|
+
var dummy = $('<span/>').attr('id', target_id).css({
|
1066
|
+
position: 'absolute',
|
1067
|
+
top: original_screen_position
|
1068
|
+
});
|
1069
|
+
|
1070
|
+
target.removeAttr('id').before(dummy);
|
1071
|
+
|
1072
|
+
//
|
1073
|
+
// when we set the hash, the browser will jump to the
|
1074
|
+
// dummy, which is where the browser screen currently
|
1075
|
+
// is, and therefore the jump will not be visualized!
|
1076
|
+
//
|
1077
|
+
set_the_hash();
|
1078
|
+
|
1079
|
+
//
|
1080
|
+
// undo the temporary changes
|
1081
|
+
//
|
1082
|
+
dummy.remove();
|
1083
|
+
target.attr('id', target_id);
|
1084
|
+
|
1085
|
+
//
|
1086
|
+
// the above approach does not work for Opera and IE.
|
1087
|
+
// they ignore the dummy and jump to the actual target
|
1088
|
+
//
|
1089
|
+
$(window).scrollTop(original_screen_position);
|
1090
|
+
|
1091
|
+
return;
|
1092
|
+
}
|
1093
|
+
}
|
1094
|
+
|
1095
|
+
set_the_hash();
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
//
|
1099
|
+
// Returns the tab corresponding to the
|
1100
|
+
// given panel in the given tabs widget.
|
1101
|
+
//
|
1102
|
+
function tab_by_panel(panel, tabs_widget) {
|
1103
|
+
if (!tabs_widget) {
|
1104
|
+
tabs_widget = panel.parent('.ui-tabs');
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
return tabs_widget.find(
|
1108
|
+
'.ui-tabs-nav > li > a[href=#'+ panel.attr('id') +']'
|
1109
|
+
).parent('li');
|
1110
|
+
}
|
1111
|
+
|
1112
|
+
//
|
1113
|
+
// Reveals the element at the given hash by (1) activating all
|
1114
|
+
// tabs that contain it, (2) smoothly scrolling to it, and (3)
|
1115
|
+
// updating the hash in the browser's location bar accordingly.
|
1116
|
+
//
|
1117
|
+
function reveal_hash(hash) {
|
1118
|
+
var target = $(hash);
|
1119
|
+
|
1120
|
+
if (target.length) {
|
1121
|
+
var target_is_panel = target.is('div') &&
|
1122
|
+
target.parent('.ui-tabs').length;
|
1123
|
+
|
1124
|
+
var target_initially_hidden = target.is(':hidden');
|
1125
|
+
|
1126
|
+
//
|
1127
|
+
// reveal all tabs which contain the target
|
1128
|
+
//
|
1129
|
+
if (target_initially_hidden) {
|
1130
|
+
var panels = target.parents('.ui-tabs > div:hidden').get().reverse();
|
1131
|
+
|
1132
|
+
if (target_is_panel) {
|
1133
|
+
panels.push(target);
|
1134
|
+
}
|
1135
|
+
|
1136
|
+
for (var i in panels) {
|
1137
|
+
var panel = $(panels[i]);
|
1138
|
+
var tabs_widget = panel.parent('.ui-tabs');
|
1139
|
+
var selected_index = tabs_widget.tabs('option', 'selected');
|
1140
|
+
|
1141
|
+
//
|
1142
|
+
// map the panel to its tab because tabs do not
|
1143
|
+
// have to be in the same order as their panels
|
1144
|
+
//
|
1145
|
+
var tab = tab_by_panel(panel, tabs_widget);
|
1146
|
+
var wanted_index = tab.prevAll('li').length;
|
1147
|
+
|
1148
|
+
if (wanted_index != selected_index) {
|
1149
|
+
tabs_widget.tabs('select', wanted_index);
|
1150
|
+
}
|
1151
|
+
}
|
1152
|
+
}
|
1153
|
+
|
1154
|
+
//
|
1155
|
+
// scroll to the tab bar instead of the target
|
1156
|
+
// because it contains the title for the target
|
1157
|
+
//
|
1158
|
+
var scroll_target = target;
|
1159
|
+
|
1160
|
+
if (target_is_panel) {
|
1161
|
+
var tabs_nav = target.parent('.ui-tabs').find('> .ui-tabs-nav');
|
1162
|
+
|
1163
|
+
if (!tabs_nav.is(':hidden')) {
|
1164
|
+
scroll_target = tabs_nav;
|
1165
|
+
}
|
1166
|
+
}
|
1167
|
+
|
1168
|
+
var screen_before_scroll = $(window).scrollTop();
|
1169
|
+
|
1170
|
+
$('html, body').animate(
|
1171
|
+
{ scrollTop: Math.floor(scroll_target.offset().top) },
|
1172
|
+
'slow', 'swing', function() {
|
1173
|
+
var screen_after_scroll = $(window).scrollTop();
|
1174
|
+
|
1175
|
+
set_hash(hash, target_is_panel);
|
1176
|
+
|
1177
|
+
if (
|
1178
|
+
!target_initially_hidden &&
|
1179
|
+
screen_after_scroll == screen_before_scroll
|
1180
|
+
) {
|
1181
|
+
//
|
1182
|
+
// nothing changed on the screen.
|
1183
|
+
// the target was already visible.
|
1184
|
+
// highlight it to notify the user.
|
1185
|
+
//
|
1186
|
+
target.effect('highlight', 'slow');
|
1187
|
+
}
|
1188
|
+
}
|
1189
|
+
);
|
1190
|
+
}
|
1191
|
+
}
|
1192
|
+
|
1193
|
+
//
|
1194
|
+
// create jQuery UI tabs
|
1195
|
+
//
|
1196
|
+
$('.tabs').tabs();
|
1197
|
+
|
1198
|
+
//
|
1199
|
+
// make internal hyperlinks reveal their targets when clicked
|
1200
|
+
//
|
1201
|
+
$('a[href^=#]').click(function() {
|
1202
|
+
var link = $(this);
|
1203
|
+
var hash = link.attr('href');
|
1204
|
+
|
1205
|
+
if (link.parent('li').parent('.ui-tabs-nav').length) {
|
1206
|
+
// tab clicks should not cause the screen to scroll
|
1207
|
+
set_hash(hash, true);
|
1208
|
+
}
|
1209
|
+
else {
|
1210
|
+
reveal_hash(hash);
|
1211
|
+
}
|
1212
|
+
|
1213
|
+
return false;
|
1214
|
+
});
|
1215
|
+
|
1216
|
+
//
|
1217
|
+
// checkbox for printer friendly stylesheet
|
1218
|
+
//
|
1219
|
+
$('#__header__ > .authors_and_date').append(
|
1220
|
+
$('<span/>').addClass('printer_friendly_toggle').append(
|
1221
|
+
$('<input/>').attr('type', 'checkbox').click(function() {
|
1222
|
+
var checkbox = $(this);
|
1223
|
+
|
1224
|
+
function change_media(src, dst) {
|
1225
|
+
var styles = $('style[media="'+ src +'"]');
|
1226
|
+
if (styles.length) {
|
1227
|
+
//
|
1228
|
+
// try changing the media in-place
|
1229
|
+
//
|
1230
|
+
var before = checkbox.offset();
|
1231
|
+
styles.attr('media', dst);
|
1232
|
+
var after = checkbox.offset();
|
1233
|
+
|
1234
|
+
if (after.top == before.top && after.left == before.left) {
|
1235
|
+
//
|
1236
|
+
// try reinserting the <style> into document.
|
1237
|
+
// this works in Webkit browsers, which ignore
|
1238
|
+
// the in-place changing approach tried above.
|
1239
|
+
//
|
1240
|
+
styles.each(function() {
|
1241
|
+
var style = $(this);
|
1242
|
+
var parent = style.parent();
|
1243
|
+
|
1244
|
+
style.remove();
|
1245
|
+
parent.append(style);
|
1246
|
+
});
|
1247
|
+
}
|
1248
|
+
}
|
1249
|
+
}
|
1250
|
+
|
1251
|
+
if (checkbox.is(':checked')) {
|
1252
|
+
change_media('screen', 'none');
|
1253
|
+
change_media('print', 'screen,print');
|
1254
|
+
}
|
1255
|
+
else {
|
1256
|
+
change_media('screen,print', 'print');
|
1257
|
+
change_media('none', 'screen');
|
1258
|
+
}
|
1259
|
+
|
1260
|
+
return true;
|
1261
|
+
})
|
1262
|
+
).append(" <%= ERBook::PHRASES['Printer friendly'] %>")
|
1263
|
+
);
|
1264
|
+
|
1265
|
+
//
|
1266
|
+
// ready for action!
|
1267
|
+
//
|
1268
|
+
$('#__loading__').append("<%= ERBook::PHRASES['Ready!'] %>").
|
1269
|
+
fadeOut('slow', function() {
|
1270
|
+
$('#__body__').show();
|
1271
|
+
on_hash_change();
|
1272
|
+
});
|
1273
|
+
});
|
1274
|
+
|
1229
1275
|
# definition of font families for use in the CSS styles
|
1230
1276
|
fonts:
|
1231
1277
|
serif: Constantia, "Book Antiqua", "URW Bookman L", serif
|
@@ -1241,15 +1287,15 @@ styles: # these are SASS templates
|
|
1241
1287
|
font-family: <%= @format['fonts']['sans-serif'] %>
|
1242
1288
|
|
1243
1289
|
|
1290
|
+
em, strong, dt
|
1291
|
+
font-family: <%= @format['fonts']['serif'] %>
|
1292
|
+
|
1293
|
+
|
1244
1294
|
blockquote
|
1245
1295
|
color: #333
|
1246
1296
|
font-style: italic
|
1247
1297
|
|
1248
1298
|
|
1249
|
-
em, strong, dt
|
1250
|
-
font-family: <%= @format['fonts']['serif'] %>
|
1251
|
-
|
1252
|
-
|
1253
1299
|
hr
|
1254
1300
|
height: 0
|
1255
1301
|
border: 0
|
@@ -1258,8 +1304,8 @@ styles: # these are SASS templates
|
|
1258
1304
|
|
1259
1305
|
tt, code, pre
|
1260
1306
|
font-family: <%= @format['fonts']['monospace'] %>
|
1261
|
-
|
1262
|
-
|
1307
|
+
font-size: 1em
|
1308
|
+
line-height: 1em
|
1263
1309
|
|
1264
1310
|
|
1265
1311
|
// output of the syntax coloring library
|
@@ -1341,6 +1387,16 @@ styles: # these are SASS templates
|
|
1341
1387
|
font-size: 2.25em
|
1342
1388
|
|
1343
1389
|
|
1390
|
+
@media print
|
1391
|
+
#__header__ .printer_friendly_toggle
|
1392
|
+
display: none
|
1393
|
+
|
1394
|
+
|
1395
|
+
@media screen
|
1396
|
+
#__header__ .printer_friendly_toggle
|
1397
|
+
display: inline
|
1398
|
+
|
1399
|
+
|
1344
1400
|
#__abstract__
|
1345
1401
|
margin-bottom: 5em
|
1346
1402
|
|
@@ -1351,10 +1407,6 @@ styles: # these are SASS templates
|
|
1351
1407
|
|
1352
1408
|
li ul
|
1353
1409
|
padding-bottom: 1em
|
1354
|
-
border-left: thick solid #F5F5F5
|
1355
|
-
|
1356
|
-
&:hover
|
1357
|
-
border-color: #DCDCDC
|
1358
1410
|
|
1359
1411
|
> ul
|
1360
1412
|
padding-left: 1em
|
@@ -1477,13 +1529,6 @@ styles: # these are SASS templates
|
|
1477
1529
|
color: #800080
|
1478
1530
|
|
1479
1531
|
|
1480
|
-
#__toc__ a:target, #__lof__ a:target
|
1481
|
-
background: <%= ICON_BY_NAME['here_frag'].data_css %>
|
1482
|
-
background-position: center right
|
1483
|
-
background-repeat: no-repeat
|
1484
|
-
padding-right: 20px
|
1485
|
-
|
1486
|
-
|
1487
1532
|
#__header__ >
|
1488
1533
|
.logo
|
1489
1534
|
float: left
|
@@ -1512,6 +1557,23 @@ styles: # these are SASS templates
|
|
1512
1557
|
font-weight: lighter
|
1513
1558
|
|
1514
1559
|
|
1560
|
+
// visually indicate the current location in
|
1561
|
+
// the hierarchy as the cursor hovers about
|
1562
|
+
#__toc__
|
1563
|
+
li ul
|
1564
|
+
border-left: thick solid #F5F5F5
|
1565
|
+
|
1566
|
+
&:hover
|
1567
|
+
border-color: #DCDCDC
|
1568
|
+
|
1569
|
+
|
1570
|
+
#__toc__ a:target, #__lof__ a:target
|
1571
|
+
background: <%= ICON_BY_NAME['here_frag'].data_css %>
|
1572
|
+
background-position: center right
|
1573
|
+
background-repeat: no-repeat
|
1574
|
+
padding-right: 20px
|
1575
|
+
|
1576
|
+
|
1515
1577
|
.nav
|
1516
1578
|
float: right
|
1517
1579
|
|
@@ -1527,6 +1589,14 @@ styles: # these are SASS templates
|
|
1527
1589
|
|
1528
1590
|
|
1529
1591
|
- print: |
|
1592
|
+
body
|
1593
|
+
font-family: <%= @format['fonts']['serif'] %>
|
1594
|
+
|
1595
|
+
|
1596
|
+
em, strong, dt
|
1597
|
+
font-family: <%= @format['fonts']['sans-serif'] %>
|
1598
|
+
|
1599
|
+
|
1530
1600
|
tt
|
1531
1601
|
font-weight: normal
|
1532
1602
|
|
@@ -1535,8 +1605,9 @@ styles: # these are SASS templates
|
|
1535
1605
|
border: none
|
1536
1606
|
|
1537
1607
|
|
1538
|
-
h1, h2, h3, h4, h5, h6
|
1608
|
+
h1, h2, h3, h4, h5, h6, .title
|
1539
1609
|
font-weight: normal
|
1610
|
+
font-family: <%= @format['fonts']['sans-serif'] %>
|
1540
1611
|
clear: both
|
1541
1612
|
|
1542
1613
|
|
@@ -1575,7 +1646,7 @@ styles: # these are SASS templates
|
|
1575
1646
|
font-size: smaller
|
1576
1647
|
|
1577
1648
|
|
1578
|
-
.tabs > ul, .nav, #__lof__, #__nfo__
|
1649
|
+
.tabs > ul, .nav, #__lof__, #__nfo__
|
1579
1650
|
display: none
|
1580
1651
|
|
1581
1652
|
|
@@ -1587,7 +1658,7 @@ styles: # these are SASS templates
|
|
1587
1658
|
text-align: center
|
1588
1659
|
|
1589
1660
|
|
1590
|
-
#__header__ > .authors
|
1661
|
+
#__header__ > .authors_and_date > .authors
|
1591
1662
|
margin-top: 1.625em
|
1592
1663
|
margin-bottom: -0.25em
|
1593
1664
|
|