Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

[MRG+2] DOC show referring examples on API reference pages #3327

Merged
merged 4 commits into from

5 participants

@jnothman
Owner

This places an example gallery on each API reference (class, function) page. Currently this is at the end of the page. It might be nicer for this to appear under the "examples" section, but that is much harder to implement (except perhaps by Javascript/DOM games). The intention is that this should provide a manual of examples for a particular class in many cases, such that, for example, the use of PCA.components_ should be more obvious (cf. #3322).

The CSS/Javascript/Python that makes the example galleries work is a bit of a mess, but I'm only cleaning it up minimally in this PR.

@coveralls

Coverage Status

Coverage remained the same when pulling 5631559 on jnothman:examples_in_apiref into 777123d on scikit-learn:master.

@jnothman jnothman changed the title from [WIP?] DOC show referring examples on API reference pages to [MRG?] DOC show referring examples on API reference pages
@jnothman
Owner

I think this works, so I'm not sure why I labelled it WIP. It's untested though; despite now being able to test, there is no clean API to test.

doc/sphinxext/gen_rst.py
((42 lines not shown))
.. toctree::
:hidden:
%s/%s
-""" % (link_name, fdocstring, dir, fname[:-3]))
+""" % (dir, fname[:-3]))
+ for backref in backrefs:
+ include_path = os.path.join(root_dir, '../modules/generated/%s.examples' % backref)
+ seen = backref in seen_backrefs
+ with open(include_path, 'a' if seen else 'w') as ex_file:
+ if not seen:
+ ex_file.write(dedent('''
+
+ Examples using ``%s``
+ -----------
@GaelVaroquaux Owner

It seems to me that the underline is not long enough.

@jnothman Owner

Does the underline need to match exactly in length?

@GaelVaroquaux Owner
@jnothman Owner

I've made it exact anyway, as I think it makes the code easier to read.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@GaelVaroquaux GaelVaroquaux commented on the diff
doc/sphinxext/gen_rst.py
@@ -969,13 +882,13 @@ def generate_file_rst(fname, target_dir, src_dir, root_dir, plot_gallery):
# incrementally: 1, 2, 3 and not 1, 2, 5)
# * iterate over [fig_mngr.num for fig_mngr in
# matplotlib._pylab_helpers.Gcf.get_all_fig_managers()]
- for fig_num in (fig_mngr.num for fig_mngr in
- matplotlib._pylab_helpers.Gcf.get_all_fig_managers()):
+ fig_managers = matplotlib._pylab_helpers.Gcf.get_all_fig_managers()
@GaelVaroquaux Owner

Why do we need all the figure managers, and why is this related to referring examples?

I am sorry, I am being dumb.

@jnothman Owner

I can't now remember why I changed this, but it looks merely cosmetic.

@GaelVaroquaux Owner
@jnothman Owner

as in you'd rather

for fig_num in (fig_mngr.num for fig_mngr in
    matplotlib._pylab_helpers.Gcf.get_all_fig_managers()):

I think I mostly intended to fix PEP8, but the long name made this hard.

@GaelVaroquaux Owner

No, sorry forget the whole comment. It was a brain fart.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@GaelVaroquaux

Overall, I like the idea. I tried rendering the docs, and I like the result.

I made minor comments, but in general, I am :+1: for finishing this up and merging it. Thanks a lot!

@jnothman
Owner

Rebased. Perhaps we should merge this and trial it in the dev documentation, see whether people like it...

@GaelVaroquaux GaelVaroquaux changed the title from [MRG?] DOC show referring examples on API reference pages to [MRG+1] DOC show referring examples on API reference pages
@GaelVaroquaux
@jnothman
Owner

I am :+1: for that, but I would like to get another core dev's +1.

Who has an opinion on documentation aesthetics? @ogrisel? @arjoly?

@amueller
Owner

I like it :)

@jnothman jnothman changed the title from [MRG+1] DOC show referring examples on API reference pages to [MRG+2] DOC show referring examples on API reference pages
@jnothman
Owner

So I will merge and see how this goes. We may want to port it back to 0.15 so it appears at /stable (@ogrisel). Perhaps only once there is a bit more comment on it in practice.

@jnothman jnothman merged commit 0d57c23 into scikit-learn:master
@GaelVaroquaux
@jnothman
Owner
@arjoly
Owner

Thanks joel !

@jnothman
Owner

This hasn't shown up on the documentation site yet: http://scikit-learn.org/dev/_sources/modules/generated/sklearn.decomposition.PCA.txt should look like https://raw.githubusercontent.com/scikit-learn/scikit-learn/master/doc/templates/class.rst

Does something special need to be done to refresh the templating of generated pages? Locally, rm doc/modules/generated/* works for me, so perhaps the documentation server isn't calling make clean in the doc/ directory.

@jnothman
Owner

I'm not sure whether someone actively regenerated these, but it appears to be fixed, and looking good.

@amueller
Owner

Awesome, thanks :)

@arjoly
Owner

Awesome !

@amueller
Owner

Hmmm... I made these changes a bit hackily at first, so this is not altogether surprising. It's still disappointing :(

However: Which part of the layout are you claiming this breaks? Are you referring to the headers being tight-fitting (not 100% width)? This must be combined with some of the sphinx upgrade changes, as it doesn't happen on my local build.

Owner

Yes, that and that the header is a little bit below the box on the right. And building with the same sphinx version (1.2.3) this change clearly caused the issue.

Owner

Right. So there seem to be multiple interactants. I'll try to get a patch in soon. I guess I should update sphinx locally.

Owner

I'm failing to locally reproduce either of the current issues present in scikit-learn.org/dev. Makes it very hard to fix...

Owner

which version of sphinx do you have? I tried 1.2.3 and 1.3b and both have this issue.

Owner
Owner

Ahh.. I was mistaken. Didn't realise the problem was only with BallTree and KDTree which lack content. Still don't see <code> on 1.2.3. But I'll work on a fix.

@amueller
Owner

Currently, when building the docs, I get

/home/andy/checkout/scikit-learn/doc/modules/generated/sklearn.dummy.DummyRegressor.rst:12: SEVERE: Problems with "include" directive path:
InputError: [Errno 2] No such file or directory: 'modules/generated/sklearn.dummy.DummyRegressor.examples'.

Do you know what could be causing this?

@amueller
Owner

Should we just generate empty files for classes / functions without examples?

@jnothman
Owner

Perhaps I wasn't sure that there's any time it's safe to generate those files.

Or I just hoped @Titan-C would work out how to do this the right way.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
View
8 doc/conf.py
@@ -123,7 +123,7 @@
# documentation.
html_theme_options = {'oldversion': False, 'collapsiblesidebar': True,
'google_analytics': True, 'surveybanner': False,
- 'sprintbanner' : True}
+ 'sprintbanner': True}
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = ['themes']
@@ -225,7 +225,9 @@
trim_doctests_flags = True
-# Add the 'copybutton' javascript, to hide/show the prompt in code
-# examples
+
def setup(app):
+ # to hide/show the prompt in code examples:
app.add_javascript('js/copybutton.js')
+ # to format example galleries:
+ app.add_javascript('js/examples.js')
View
244 doc/sphinxext/gen_rst.py
@@ -19,6 +19,7 @@
import gzip
import posixpath
import subprocess
+from textwrap import dedent
# Try Python 2 first, otherwise load from Python 3
@@ -489,130 +490,14 @@ def generate_example_rst(app):
<style type="text/css">
-
div#sidebarbutton {
- display: none;
- }
-
- .figure {
- float: left;
- margin: 10px;
- -webkit-border-radius: 10px; /* Saf3-4, iOS 1-3.2, Android <1.6 */
- -moz-border-radius: 10px; /* FF1-3.6 */
- border-radius: 10px; /* Opera 10.5, IE9, Saf5, Chrome, FF4, iOS 4, Android 2.1+ */
- border: 2px solid #fff;
- background-color: white;
- /* --> Thumbnail image size */
- width: 150px;
- height: 100px;
- -webkit-background-size: 150px 100px; /* Saf3-4 */
- -moz-background-size: 150px 100px; /* FF3.6 */
- }
-
- .figure img {
- display: inline;
- }
-
- div.docstringWrapper p.caption {
- display: block;
- -webkit-box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.0);
- -moz-box-shadow: 0px 0px 20px rgba(0, 0, 0, .0); /* FF3.5 - 3.6 */
- box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.0); /* Opera 10.5, IE9, FF4+, Chrome 10+ */
- padding: 0px;
- border: white;
- }
-
- div.docstringWrapper p {
- display: none;
- background-color: white;
- -webkit-box-shadow: 0px 0px 20px rgba(0, 0, 0, 1.00);
- -moz-box-shadow: 0px 0px 20px rgba(0, 0, 0, 1.00); /* FF3.5 - 3.6 */
- box-shadow: 0px 0px 20px rgba(0, 0, 0, 1.00); /* Opera 10.5, IE9, FF4+, Chrome 10+ */
- padding: 13px;
- margin-top: 0px;
- border-style: solid;
- border-width: 1px;
+ /* hide the sidebar collapser, while ensuring vertical arrangement */
+ width: 0px;
+ overflow: hidden;
}
-
-
</style>
-.. raw:: html
-
-
- <script type="text/javascript">
-
- function animateClone(e){
- var position;
- position = $(this).position();
- var clone = $(this).closest('.thumbnailContainer').find('.clonedItem');
- var clone_fig = clone.find('.figure');
- clone.css("left", position.left - 70).css("top", position.top - 70).css("position", "absolute").css("z-index", 1000).css("background-color", "white");
-
- var cloneImg = clone_fig.find('img');
-
- clone.show();
- clone.animate({
- height: "270px",
- width: "320px"
- }, 0
- );
- cloneImg.css({
- 'max-height': "200px",
- 'max-width': "280px"
- });
- cloneImg.animate({
- height: "200px",
- width: "280px"
- }, 0
- );
- clone_fig.css({
- 'margin-top': '20px',
- });
- clone_fig.show();
- clone.find('p').css("display", "block");
- clone_fig.css({
- height: "240",
- width: "305px"
- });
- cloneP_height = clone.find('p.caption').height();
- clone_fig.animate({
- height: (200 + cloneP_height)
- }, 0
- );
-
- clone.bind("mouseleave", function(e){
- clone.animate({
- height: "100px",
- width: "150px"
- }, 10, function(){$(this).hide();});
- clone_fig.animate({
- height: "100px",
- width: "150px"
- }, 10, function(){$(this).hide();});
- });
- } //end animateClone()
-
-
- $(window).load(function () {
- $(".figure").css("z-index", 1);
-
- $(".docstringWrapper").each(function(i, obj){
- var clone;
- var $obj = $(obj);
- clone = $obj.clone();
- clone.addClass("clonedItem");
- clone.appendTo($obj.closest(".thumbnailContainer"));
- clone.hide();
- $obj.bind("mouseenter", animateClone);
- }); // end each
- }); // end
-
- </script>
-
-
-
Examples
========
@@ -620,10 +505,11 @@ def generate_example_rst(app):
""")
# Here we don't use an os.walk, but we recurse only twice: flat is
# better than nested.
- generate_dir_rst('.', fhindex, example_dir, root_dir, plot_gallery)
+ seen_backrefs = set()
+ generate_dir_rst('.', fhindex, example_dir, root_dir, plot_gallery, seen_backrefs)
for dir in sorted(os.listdir(example_dir)):
if os.path.isdir(os.path.join(example_dir, dir)):
- generate_dir_rst(dir, fhindex, example_dir, root_dir, plot_gallery)
+ generate_dir_rst(dir, fhindex, example_dir, root_dir, plot_gallery, seen_backrefs)
fhindex.flush()
@@ -665,7 +551,47 @@ def line_count_sort(file_list, target_dir):
return np.array(unsorted[index][:, 0]).tolist()
-def generate_dir_rst(dir, fhindex, example_dir, root_dir, plot_gallery):
+def _thumbnail_div(subdir, full_dir, fname, snippet):
+ """Generates RST to place a thumbnail in a gallery"""
+ thumb = os.path.join(full_dir, 'images', 'thumb', fname[:-3] + '.png')
+ link_name = os.path.join(full_dir, fname).replace(os.path.sep, '_')
+ ref_name = os.path.join(subdir, fname).replace(os.path.sep, '_')
+ if ref_name.startswith('._'):
+ ref_name = ref_name[2:]
+ out = []
+ out.append("""
+
+.. raw:: html
+
+
+ <div class="thumbnailContainer">
+ <div class="docstringWrapper">
+
+
+""")
+
+ out.append('.. figure:: %s\n' % thumb)
+ if link_name.startswith('._'):
+ link_name = link_name[2:]
+ if full_dir != '.':
+ out.append(' :target: ./%s/%s.html\n\n' % (full_dir, fname[:-3]))
+ else:
+ out.append(' :target: ./%s.html\n\n' % link_name[:-3])
+ out.append(""" :ref:`example_%s`
+
+
+.. raw:: html
+
+
+ <p>%s
+ </p></div>
+ </div>
+
+""" % (ref_name, snippet))
+ return ''.join(out)
+
+
+def generate_dir_rst(dir, fhindex, example_dir, root_dir, plot_gallery, seen_backrefs):
""" Generate the rst file for an example directory.
"""
if not dir == '.':
@@ -677,7 +603,7 @@ def generate_dir_rst(dir, fhindex, example_dir, root_dir, plot_gallery):
if not os.path.exists(os.path.join(src_dir, 'README.txt')):
print(80 * '_')
print('Example directory %s does not have a README.txt file' %
- src_dir)
+ src_dir)
print('Skipping this directory')
print(80 * '_')
return
@@ -697,51 +623,36 @@ def generate_dir_rst(dir, fhindex, example_dir, root_dir, plot_gallery):
os.makedirs(os.path.join(dir, 'images', 'thumb'))
for fname in sorted_listdir:
if fname.endswith('py'):
- generate_file_rst(fname, target_dir, src_dir, root_dir, plot_gallery)
+ backrefs = generate_file_rst(fname, target_dir, src_dir, root_dir, plot_gallery)
new_fname = os.path.join(src_dir, fname)
- _, fdocstring, _ = extract_docstring(new_fname, True)
- thumb = os.path.join(dir, 'images', 'thumb', fname[:-3] + '.png')
- link_name = os.path.join(dir, fname).replace(os.path.sep, '_')
+ _, snippet, _ = extract_docstring(new_fname, True)
+ fhindex.write(_thumbnail_div(dir, dir, fname, snippet))
fhindex.write("""
-.. raw:: html
-
-
- <div class="thumbnailContainer">
- <div class="docstringWrapper">
-
-
-""")
-
- fhindex.write('.. figure:: %s\n' % thumb)
- if link_name.startswith('._'):
- link_name = link_name[2:]
- if dir != '.':
- fhindex.write(' :target: ./%s/%s.html\n\n' % (dir,
- fname[:-3]))
- else:
- fhindex.write(' :target: ./%s.html\n\n' % link_name[:-3])
- fhindex.write(""" :ref:`example_%s`
-
-
-.. raw:: html
-
-
- <p>%s
- </p></div>
- </div>
-
-
.. toctree::
:hidden:
%s/%s
-""" % (link_name, fdocstring, dir, fname[:-3]))
+""" % (dir, fname[:-3]))
+ for backref in backrefs:
+ include_path = os.path.join(root_dir, '../modules/generated/%s.examples' % backref)
+ seen = backref in seen_backrefs
+ with open(include_path, 'a' if seen else 'w') as ex_file:
+ if not seen:
+ # heading
+ print(file=ex_file)
+ print('Examples using ``%s``' % backref, file=ex_file)
+ print('-----------------%s--' % ('-' * len(backref)),
+ file=ex_file)
+ print(file=ex_file)
+ rel_dir = os.path.join('../../auto_examples', dir)
+ ex_file.write(_thumbnail_div(dir, rel_dir, fname, snippet))
+ seen_backrefs.add(backref)
fhindex.write("""
.. raw:: html
- <div style="clear: both"></div>
+ <div class="clearer"></div>
""") # clear at the end of the section
# modules for which we embed links into example code
@@ -881,6 +792,8 @@ def identify_names(code):
def generate_file_rst(fname, target_dir, src_dir, root_dir, plot_gallery):
""" Generate the rst file for a given example.
+
+ Returns the set of sklearn functions/classes imported in the example.
"""
base_image_name = os.path.splitext(fname)[0]
image_fname = '%s_%%03d.png' % base_image_name
@@ -969,13 +882,13 @@ def generate_file_rst(fname, target_dir, src_dir, root_dir, plot_gallery):
# incrementally: 1, 2, 3 and not 1, 2, 5)
# * iterate over [fig_mngr.num for fig_mngr in
# matplotlib._pylab_helpers.Gcf.get_all_fig_managers()]
- for fig_num in (fig_mngr.num for fig_mngr in
- matplotlib._pylab_helpers.Gcf.get_all_fig_managers()):
+ fig_managers = matplotlib._pylab_helpers.Gcf.get_all_fig_managers()
@GaelVaroquaux Owner

Why do we need all the figure managers, and why is this related to referring examples?

I am sorry, I am being dumb.

@jnothman Owner

I can't now remember why I changed this, but it looks merely cosmetic.

@GaelVaroquaux Owner
@jnothman Owner

as in you'd rather

for fig_num in (fig_mngr.num for fig_mngr in
    matplotlib._pylab_helpers.Gcf.get_all_fig_managers()):

I think I mostly intended to fix PEP8, but the long name made this hard.

@GaelVaroquaux Owner

No, sorry forget the whole comment. It was a brain fart.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ for fig_mngr in fig_managers:
# Set the fig_num figure as the current figure as we can't
# save a figure that's not the current figure.
- plt.figure(fig_num)
- plt.savefig(image_path % fig_num)
- figure_list.append(image_fname % fig_num)
+ plt.figure(fig_mngr.num)
+ plt.savefig(image_path % fig_mngr.num)
+ figure_list.append(image_fname % fig_mngr.num)
except:
print(80 * '_')
print('%s is not compiling:' % fname)
@@ -994,7 +907,7 @@ def generate_file_rst(fname, target_dir, src_dir, root_dir, plot_gallery):
# generate thumb file
this_template = plot_rst_template
- car_thumb_path = os.path.join(os.path.split(root_dir)[0], '_build/html/stable/_images/')
+ car_thumb_path = os.path.join(os.path.split(root_dir)[0], '_build/html/stable/_images/')
# Note: normaly, make_thumbnail is used to write to the path contained in `thumb_file`
# which is within `auto_examples/../images/thumbs` depending on the example.
# Because the carousel has different dimensions than those of the examples gallery,
@@ -1045,6 +958,11 @@ def generate_file_rst(fname, target_dir, src_dir, root_dir, plot_gallery):
with open(codeobj_fname, 'wb') as fid:
pickle.dump(example_code_obj, fid, pickle.HIGHEST_PROTOCOL)
+ backrefs = set('{module_short}.{name}'.format(**entry)
+ for entry in example_code_obj.values()
+ if entry['module'].startswith('sklearn'))
+ return backrefs
+
def embed_code_links(app, exception):
"""Embed hyperlinks to documentation into example code"""
View
4 doc/templates/class.rst
@@ -9,4 +9,8 @@
.. automethod:: __init__
{% endblock %}
+.. include:: {{module}}.{{objname}}.examples
+.. raw:: html
+
+ <div class="clearer"></div>
View
4 doc/templates/class_with_call.rst
@@ -10,4 +10,8 @@
.. automethod:: __call__
{% endblock %}
+.. include:: {{module}}.{{objname}}.examples
+.. raw:: html
+
+ <div class="clearer"></div>
View
4 doc/templates/function.rst
@@ -5,4 +5,8 @@
.. autofunction:: {{ objname }}
+.. include:: {{module}}.{{objname}}.examples
+.. raw:: html
+
+ <div class="clearer"></div>
View
0  doc/themes/scikit-learn/static/css/examples.css
No changes.
View
68 doc/themes/scikit-learn/static/js/examples.js
@@ -0,0 +1,68 @@
+/* Interactive component of example galleries */
+
+function animateClone(e){
+ var position;
+ position = $(this).position();
+ var clone = $(this).closest('.thumbnailContainer').find('.clonedItem');
+ var clone_fig = clone.find('.figure');
+ clone.css("left", position.left - 70).css("top", position.top - 70).css("position", "absolute").css("z-index", 1000).css("background-color", "white");
+
+ var cloneImg = clone_fig.find('img');
+
+ clone.show();
+ clone.animate({
+ height: "270px",
+ width: "320px"
+ }, 0
+ );
+ cloneImg.css({
+ 'max-height': "200px",
+ 'max-width': "280px"
+ });
+ cloneImg.animate({
+ height: "200px",
+ width: "280px"
+ }, 0
+ );
+ clone_fig.css({
+ 'margin-top': '20px',
+ });
+ clone_fig.show();
+ clone.find('p').css("display", "block");
+ clone_fig.css({
+ height: "240",
+ width: "305px"
+ });
+ cloneP_height = clone.find('p.caption').height();
+ clone_fig.animate({
+ height: (200 + cloneP_height)
+ }, 0
+ );
+
+ clone.bind("mouseleave", function(e){
+ clone.animate({
+ height: "100px",
+ width: "150px"
+ }, 10, function(){$(this).hide();});
+ clone_fig.animate({
+ height: "100px",
+ width: "150px"
+ }, 10, function(){$(this).hide();});
+ });
+} //end animateClone()
+
+
+$(window).load(function () {
+ $(".thumbnailContainer .figure").css("z-index", 1);
+
+ $(".docstringWrapper").each(function(i, obj){
+ var clone;
+ var $obj = $(obj);
+ clone = $obj.clone();
+ clone.addClass("clonedItem");
+ clone.appendTo($obj.closest(".thumbnailContainer"));
+ clone.hide();
+ $obj.bind("mouseenter", animateClone);
+ }); // end each
+}); // end
+
View
67 doc/themes/scikit-learn/static/nature.css_t
@@ -630,14 +630,14 @@ div.sprint-wrapper:hover {
/*-----------------------The Examples Gallery-------------------------------*/
/* ------- Fix maximum size of thumbnails in example gallery -------------- */
-div#examples.section .figure img {
+.thumbnailContainer .figure img {
max-width: 160px;
max-height: 160px;
display: block;
margin: auto;
}
-div#examples.section .thumbnailContainer {
+.thumbnailContainer {
float: left;
width: 182px;
height: 242px;
@@ -646,9 +646,9 @@ div#examples.section .thumbnailContainer {
/* Standard browsers hover */
-div#examples.section .figure:hover img ,
-div#examples.section .figure:focus img,
-div#examples.section .figure:active img{
+.thumbnailContainer .figure:hover img ,
+.thumbnailContainer .figure:focus img,
+.thumbnailContainer .figure:active img{
z-index: 100;
/* --> Full image size */
/*width: 240px;*/
@@ -665,6 +665,7 @@ div#examples.section .figure:active img{
*height: 145px;
*margin-top: 0;
*margin-left: 0;
+ background: transparent;
}
/* IE hover */
@@ -683,6 +684,62 @@ div#examples.section .figure:active img{
*height: 145px;
}
+/* Styling for example galleries */
+
+.thumbnailContainer .figure {
+ float: left;
+ margin: 10px;
+ -webkit-border-radius: 10px; /* Saf3-4, iOS 1-3.2, Android <1.6 */
+ -moz-border-radius: 10px; /* FF1-3.6 */
+ border-radius: 10px; /* Opera 10.5, IE9, Saf5, Chrome, FF4, iOS 4, Android 2.1+ */
+ border: 2px solid #fff;
+ background-color: white;
+ /* --> Thumbnail image size */
+ width: 150px;
+ height: 100px;
+ -webkit-background-size: 150px 100px; /* Saf3-4 */
+ -moz-background-size: 150px 100px; /* FF3.6 */
+}
+
+.thumbnailContainer .figure img {
+ display: inline;
+}
+
+div.docstringWrapper p.caption {
+ display: block;
+ -webkit-box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.0);
+ -moz-box-shadow: 0px 0px 20px rgba(0, 0, 0, .0); /* FF3.5 - 3.6 */
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.0); /* Opera 10.5, IE9, FF4+, Chrome 10+ */
+ padding: 0px;
+ border: white;
+}
+
+div.docstringWrapper p {
+ display: none;
+ background-color: white;
+ -webkit-box-shadow: 0px 0px 20px rgba(0, 0, 0, 1.00);
+ -moz-box-shadow: 0px 0px 20px rgba(0, 0, 0, 1.00); /* FF3.5 - 3.6 */
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 1.00); /* Opera 10.5, IE9, FF4+, Chrome 10+ */
+ padding: 13px;
+ margin-top: 0px;
+ border-style: solid;
+ border-width: 1px;
+}
+
+.class,
+.function {
+ clear: both
+}
+
+.documentwrapper {
+ position: absolute; /* Internal floats are separate to external */
+}
+
+.section:after {
+ clear: both;
+}
+
+
/* The hover-effect for the examples gallery was adapted from Martin Michálek's
/* example: http://www.vzhurudolu.cz/test/image-gallery-enlarge-on-hover/
Something went wrong with that request. Please try again.