diff --git a/.gitignore b/.gitignore index b455e33..45370ce 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ _build docs/man/*.gz docs/source/api/generated docs/gh-pages +IPython/frontend/html/notebook/static/mathjax *.py[co] build *.egg-info diff --git a/IPython/external/mathjax.py b/IPython/external/mathjax.py new file mode 100644 index 0000000..0cdf132 --- /dev/null +++ b/IPython/external/mathjax.py @@ -0,0 +1,82 @@ +"""Utility function for installing MathJax javascript library into +the notebook's 'static' directory, for offline use. + +Authors: + +* Min RK +""" + +#----------------------------------------------------------------------------- +# Copyright (C) 2008-2011 The IPython Development Team +# +# Distributed under the terms of the BSD License. The full license is in +# the file COPYING, distributed as part of this software. +#----------------------------------------------------------------------------- + +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- + +import os +import shutil +import urllib2 +import tempfile +import tarfile + +from IPython.frontend.html import notebook as nbmod + +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- + +def install_mathjax(tag='v1.1', replace=False): + """Download and install MathJax for offline use. + + This will install mathjax to the 'static' dir in the IPython notebook + package, so it will fail if the caller does not have write access + to that location. + + MathJax is a ~15MB download, and ~150MB installed. + + Parameters + ---------- + + replace : bool [False] + Whether to remove and replace an existing install. + tag : str ['v1.1'] + Which tag to download. Default is 'v1.1', the current stable release, + but alternatives include 'v1.1a' and 'master'. + """ + mathjax_url = "https://github.com/mathjax/MathJax/tarball/%s"%tag + + nbdir = os.path.dirname(os.path.abspath(nbmod.__file__)) + static = os.path.join(nbdir, 'static') + dest = os.path.join(static, 'mathjax') + + # check for existence and permissions + if not os.access(static, os.W_OK): + raise IOError("Need have write access to %s"%static) + if os.path.exists(dest): + if replace: + if not os.access(dest, os.W_OK): + raise IOError("Need have write access to %s"%dest) + print "removing previous MathJax install" + shutil.rmtree(dest) + else: + print "offline MathJax apparently already installed" + return + + # download mathjax + print "Downloading mathjax source..." + response = urllib2.urlopen(mathjax_url) + print "done" + # use 'r|gz' stream mode, because socket file-like objects can't seek: + tar = tarfile.open(fileobj=response.fp, mode='r|gz') + topdir = tar.firstmember.path + print "Extracting to %s"%dest + tar.extractall(static) + # it will be mathjax-MathJax-<sha>, rename to just mathjax + os.rename(os.path.join(static, topdir), dest) + + +__all__ = ['install_mathjax'] diff --git a/IPython/frontend/html/notebook/templates/notebook.html b/IPython/frontend/html/notebook/templates/notebook.html index 92154ba..e82cf7b 100644 --- a/IPython/frontend/html/notebook/templates/notebook.html +++ b/IPython/frontend/html/notebook/templates/notebook.html @@ -10,12 +10,14 @@ <!-- <link rel="stylesheet" href="static/jquery/css/themes/rocket/jquery-wijmo.css" type="text/css" /> --> <!-- <link rel="stylesheet" href="static/jquery/css/themes/smoothness/jquery-ui-1.8.14.custom.css" type="text/css" />--> - <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML" charset="utf-8"></script> - <!-- <script type='text/javascript' src='static/mathjax/MathJax.js?config=TeX-AMS_HTML' charset='utf-8'></script> --> + <!-- <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML" charset="utf-8"></script> --> + <script type='text/javascript' src='static/mathjax/MathJax.js?config=TeX-AMS_HTML' charset='utf-8'></script> <script type="text/javascript"> if (typeof MathJax == 'undefined') { - console.log("Trying to load local copy of MathJax"); - document.write(unescape("%3Cscript type='text/javascript' src='static/mathjax/MathJax.js%3Fconfig=TeX-AMS_HTML' charset='utf-8'%3E%3C/script%3E")); + console.log("No local MathJax, loading from CDN"); + document.write(unescape("%3Cscript type='text/javascript' src='http://cdn.mathjax.org/mathjax/latest/MathJax.js%3Fconfig=TeX-AMS_HTML' charset='utf-8'%3E%3C/script%3E")); + }else{ + console.log("Using local MathJax"); } </script>