erbook 7.1.1 → 7.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|