##// END OF EJS Templates
Merge branch 'mathjax' of https://github.com/minrk/ipython into minrk-mathjax
Brian E. Granger -
r4664:2213211c merge
parent child Browse files
Show More
@@ -0,0 +1,82
1 """Utility function for installing MathJax javascript library into
2 the notebook's 'static' directory, for offline use.
3
4 Authors:
5
6 * Min RK
7 """
8
9 #-----------------------------------------------------------------------------
10 # Copyright (C) 2008-2011 The IPython Development Team
11 #
12 # Distributed under the terms of the BSD License. The full license is in
13 # the file COPYING, distributed as part of this software.
14 #-----------------------------------------------------------------------------
15
16 #-----------------------------------------------------------------------------
17 # Imports
18 #-----------------------------------------------------------------------------
19
20 import os
21 import shutil
22 import urllib2
23 import tempfile
24 import tarfile
25
26 from IPython.frontend.html import notebook as nbmod
27
28 #-----------------------------------------------------------------------------
29 # Imports
30 #-----------------------------------------------------------------------------
31
32 def install_mathjax(tag='v1.1', replace=False):
33 """Download and install MathJax for offline use.
34
35 This will install mathjax to the 'static' dir in the IPython notebook
36 package, so it will fail if the caller does not have write access
37 to that location.
38
39 MathJax is a ~15MB download, and ~150MB installed.
40
41 Parameters
42 ----------
43
44 replace : bool [False]
45 Whether to remove and replace an existing install.
46 tag : str ['v1.1']
47 Which tag to download. Default is 'v1.1', the current stable release,
48 but alternatives include 'v1.1a' and 'master'.
49 """
50 mathjax_url = "https://github.com/mathjax/MathJax/tarball/%s"%tag
51
52 nbdir = os.path.dirname(os.path.abspath(nbmod.__file__))
53 static = os.path.join(nbdir, 'static')
54 dest = os.path.join(static, 'mathjax')
55
56 # check for existence and permissions
57 if not os.access(static, os.W_OK):
58 raise IOError("Need have write access to %s"%static)
59 if os.path.exists(dest):
60 if replace:
61 if not os.access(dest, os.W_OK):
62 raise IOError("Need have write access to %s"%dest)
63 print "removing previous MathJax install"
64 shutil.rmtree(dest)
65 else:
66 print "offline MathJax apparently already installed"
67 return
68
69 # download mathjax
70 print "Downloading mathjax source..."
71 response = urllib2.urlopen(mathjax_url)
72 print "done"
73 # use 'r|gz' stream mode, because socket file-like objects can't seek:
74 tar = tarfile.open(fileobj=response.fp, mode='r|gz')
75 topdir = tar.firstmember.path
76 print "Extracting to %s"%dest
77 tar.extractall(static)
78 # it will be mathjax-MathJax-<sha>, rename to just mathjax
79 os.rename(os.path.join(static, topdir), dest)
80
81
82 __all__ = ['install_mathjax']
@@ -1,11 +1,12
1 build
1 build
2 dist
2 dist
3 _build
3 _build
4 docs/man/*.gz
4 docs/man/*.gz
5 docs/source/api/generated
5 docs/source/api/generated
6 docs/gh-pages
6 docs/gh-pages
7 IPython/frontend/html/notebook/static/mathjax
7 *.py[co]
8 *.py[co]
8 build
9 build
9 *.egg-info
10 *.egg-info
10 *~
11 *~
11 *.bak
12 *.bak
@@ -1,242 +1,244
1 <!DOCTYPE HTML>
1 <!DOCTYPE HTML>
2 <html>
2 <html>
3
3
4 <head>
4 <head>
5 <meta charset="utf-8">
5 <meta charset="utf-8">
6
6
7 <title>IPython Notebook</title>
7 <title>IPython Notebook</title>
8
8
9 <link rel="stylesheet" href="static/jquery/css/themes/aristo/jquery-wijmo.css" type="text/css" />
9 <link rel="stylesheet" href="static/jquery/css/themes/aristo/jquery-wijmo.css" type="text/css" />
10 <!-- <link rel="stylesheet" href="static/jquery/css/themes/rocket/jquery-wijmo.css" type="text/css" /> -->
10 <!-- <link rel="stylesheet" href="static/jquery/css/themes/rocket/jquery-wijmo.css" type="text/css" /> -->
11 <!-- <link rel="stylesheet" href="static/jquery/css/themes/smoothness/jquery-ui-1.8.14.custom.css" type="text/css" />-->
11 <!-- <link rel="stylesheet" href="static/jquery/css/themes/smoothness/jquery-ui-1.8.14.custom.css" type="text/css" />-->
12
12
13 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML" charset="utf-8"></script>
13 <!-- <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML" charset="utf-8"></script> -->
14 <!-- <script type='text/javascript' src='static/mathjax/MathJax.js?config=TeX-AMS_HTML' charset='utf-8'></script> -->
14 <script type='text/javascript' src='static/mathjax/MathJax.js?config=TeX-AMS_HTML' charset='utf-8'></script>
15 <script type="text/javascript">
15 <script type="text/javascript">
16 if (typeof MathJax == 'undefined') {
16 if (typeof MathJax == 'undefined') {
17 console.log("Trying to load local copy of MathJax");
17 console.log("No local MathJax, loading from CDN");
18 document.write(unescape("%3Cscript type='text/javascript' src='static/mathjax/MathJax.js%3Fconfig=TeX-AMS_HTML' charset='utf-8'%3E%3C/script%3E"));
18 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"));
19 }else{
20 console.log("Using local MathJax");
19 }
21 }
20 </script>
22 </script>
21
23
22 <link rel="stylesheet" href="static/codemirror-2.12/lib/codemirror.css">
24 <link rel="stylesheet" href="static/codemirror-2.12/lib/codemirror.css">
23 <link rel="stylesheet" href="static/codemirror-2.12/mode/rst/rst.css">
25 <link rel="stylesheet" href="static/codemirror-2.12/mode/rst/rst.css">
24 <link rel="stylesheet" href="static/codemirror-2.12/theme/ipython.css">
26 <link rel="stylesheet" href="static/codemirror-2.12/theme/ipython.css">
25 <link rel="stylesheet" href="static/codemirror-2.12/theme/default.css">
27 <link rel="stylesheet" href="static/codemirror-2.12/theme/default.css">
26
28
27 <link rel="stylesheet" href="static/prettify/prettify.css"/>
29 <link rel="stylesheet" href="static/prettify/prettify.css"/>
28
30
29 <link rel="stylesheet" href="static/css/boilerplate.css" type="text/css" />
31 <link rel="stylesheet" href="static/css/boilerplate.css" type="text/css" />
30 <link rel="stylesheet" href="static/css/layout.css" type="text/css" />
32 <link rel="stylesheet" href="static/css/layout.css" type="text/css" />
31 <link rel="stylesheet" href="static/css/base.css" type="text/css" />
33 <link rel="stylesheet" href="static/css/base.css" type="text/css" />
32 <link rel="stylesheet" href="static/css/notebook.css" type="text/css" />
34 <link rel="stylesheet" href="static/css/notebook.css" type="text/css" />
33 <link rel="stylesheet" href="static/css/renderedhtml.css" type="text/css" />
35 <link rel="stylesheet" href="static/css/renderedhtml.css" type="text/css" />
34
36
35
37
36 </head>
38 </head>
37
39
38 <body>
40 <body>
39
41
40 <div id="header">
42 <div id="header">
41 <span id="ipython_notebook"><h1>IPython Notebook</h1></span>
43 <span id="ipython_notebook"><h1>IPython Notebook</h1></span>
42 <span id="save_widget">
44 <span id="save_widget">
43 <input type="text" id="notebook_name" size="20"></textarea>
45 <input type="text" id="notebook_name" size="20"></textarea>
44 <span id="notebook_id" style="display:none">{{notebook_id}}</span>
46 <span id="notebook_id" style="display:none">{{notebook_id}}</span>
45 <button id="save_notebook"><u>S</u>ave</button>
47 <button id="save_notebook"><u>S</u>ave</button>
46 </span>
48 </span>
47 <span id="kernel_status">Idle</span>
49 <span id="kernel_status">Idle</span>
48 </div>
50 </div>
49
51
50 <div id="main_app">
52 <div id="main_app">
51
53
52 <div id="left_panel">
54 <div id="left_panel">
53
55
54 <div id="notebook_section">
56 <div id="notebook_section">
55 <h3 class="section_header">Notebook</h3>
57 <h3 class="section_header">Notebook</h3>
56 <div class="section_content">
58 <div class="section_content">
57 <div class="section_row">
59 <div class="section_row">
58 <span id="new_open" class="section_row_buttons">
60 <span id="new_open" class="section_row_buttons">
59 <button id="new_notebook">New</button>
61 <button id="new_notebook">New</button>
60 <button id="open_notebook">Open</button>
62 <button id="open_notebook">Open</button>
61 </span>
63 </span>
62 <span class="section_row_header">Actions</span>
64 <span class="section_row_header">Actions</span>
63 </div>
65 </div>
64 <div class="section_row">
66 <div class="section_row">
65 <span>
67 <span>
66 <select id="download_format">
68 <select id="download_format">
67 <option value="json">ipynb</option>
69 <option value="json">ipynb</option>
68 <option value="py">py</option>
70 <option value="py">py</option>
69 </select>
71 </select>
70 </span>
72 </span>
71 <span class="section_row_buttons">
73 <span class="section_row_buttons">
72 <button id="download_notebook">Download</button>
74 <button id="download_notebook">Download</button>
73 </span>
75 </span>
74 </div>
76 </div>
75 <div class="section_row">
77 <div class="section_row">
76 <span class="section_row_buttons">
78 <span class="section_row_buttons">
77 <span id="print_widget">
79 <span id="print_widget">
78 <button id="print_notebook">Print</button>
80 <button id="print_notebook">Print</button>
79 </span>
81 </span>
80 </span>
82 </span>
81 </div>
83 </div>
82 </div>
84 </div>
83 </div>
85 </div>
84
86
85 <div id="cell_section">
87 <div id="cell_section">
86 <h3 class="section_header">Cell</h3>
88 <h3 class="section_header">Cell</h3>
87 <div class="section_content">
89 <div class="section_content">
88 <div class="section_row">
90 <div class="section_row">
89 <span class="section_row_buttons">
91 <span class="section_row_buttons">
90 <button id="delete_cell"><u>D</u>elete</button>
92 <button id="delete_cell"><u>D</u>elete</button>
91 </span>
93 </span>
92 <span class="section_row_header">Actions</span>
94 <span class="section_row_header">Actions</span>
93 </div>
95 </div>
94 <div class="section_row">
96 <div class="section_row">
95 <span id="cell_type" class="section_row_buttons">
97 <span id="cell_type" class="section_row_buttons">
96 <button id="to_code"><u>C</u>ode</button>
98 <button id="to_code"><u>C</u>ode</button>
97 <!-- <button id="to_html">HTML</button>-->
99 <!-- <button id="to_html">HTML</button>-->
98 <button id="to_markdown"><u>M</u>arkdown</button>
100 <button id="to_markdown"><u>M</u>arkdown</button>
99 </span>
101 </span>
100 <span class="button_label">Format</span>
102 <span class="button_label">Format</span>
101 </div>
103 </div>
102 <div class="section_row">
104 <div class="section_row">
103 <span id="cell_output" class="section_row_buttons">
105 <span id="cell_output" class="section_row_buttons">
104 <button id="toggle_output"><u>T</u>oggle</button>
106 <button id="toggle_output"><u>T</u>oggle</button>
105 <button id="clear_all_output">ClearAll</button>
107 <button id="clear_all_output">ClearAll</button>
106 </span>
108 </span>
107 <span class="button_label">Output</span>
109 <span class="button_label">Output</span>
108 </div>
110 </div>
109 <div class="section_row">
111 <div class="section_row">
110 <span id="insert" class="section_row_buttons">
112 <span id="insert" class="section_row_buttons">
111 <button id="insert_cell_above"><u>A</u>bove</button>
113 <button id="insert_cell_above"><u>A</u>bove</button>
112 <button id="insert_cell_below"><u>B</u>elow</button>
114 <button id="insert_cell_below"><u>B</u>elow</button>
113 </span>
115 </span>
114 <span class="button_label">Insert</span>
116 <span class="button_label">Insert</span>
115 </div>
117 </div>
116 <div class="section_row">
118 <div class="section_row">
117 <span id="move" class="section_row_buttons">
119 <span id="move" class="section_row_buttons">
118 <button id="move_cell_up">Up</button>
120 <button id="move_cell_up">Up</button>
119 <button id="move_cell_down">Down</button>
121 <button id="move_cell_down">Down</button>
120 </span>
122 </span>
121 <span class="button_label">Move</span>
123 <span class="button_label">Move</span>
122 </div>
124 </div>
123 <div class="section_row">
125 <div class="section_row">
124 <span id="run_cells" class="section_row_buttons">
126 <span id="run_cells" class="section_row_buttons">
125 <button id="run_selected_cell">Selected</button>
127 <button id="run_selected_cell">Selected</button>
126 <button id="run_all_cells">All</button>
128 <button id="run_all_cells">All</button>
127 </span>
129 </span>
128 <span class="button_label">Run</span>
130 <span class="button_label">Run</span>
129 </div>
131 </div>
130 <div class="section_row">
132 <div class="section_row">
131 <span id="autoindent_span">
133 <span id="autoindent_span">
132 <input type="checkbox" id="autoindent" checked="true"></input>
134 <input type="checkbox" id="autoindent" checked="true"></input>
133 </span>
135 </span>
134 <span class="checkbox_label">Autoindent:</span>
136 <span class="checkbox_label">Autoindent:</span>
135 </div>
137 </div>
136 </div>
138 </div>
137 </div>
139 </div>
138
140
139 <div id="kernel_section">
141 <div id="kernel_section">
140 <h3 class="section_header">Kernel</h3>
142 <h3 class="section_header">Kernel</h3>
141 <div class="section_content">
143 <div class="section_content">
142 <div class="section_row">
144 <div class="section_row">
143 <span id="int_restart" class="section_row_buttons">
145 <span id="int_restart" class="section_row_buttons">
144 <button id="int_kernel">Interrupt</button>
146 <button id="int_kernel">Interrupt</button>
145 <button id="restart_kernel">Restart</button>
147 <button id="restart_kernel">Restart</button>
146 </span>
148 </span>
147 <span class="section_row_header">Actions</span>
149 <span class="section_row_header">Actions</span>
148 </div>
150 </div>
149 <div class="section_row">
151 <div class="section_row">
150 <span id="kernel_persist">
152 <span id="kernel_persist">
151 <input type="checkbox" id="kill_kernel"></input>
153 <input type="checkbox" id="kill_kernel"></input>
152 </span>
154 </span>
153 <span class="checkbox_label">Kill kernel upon exit:</span>
155 <span class="checkbox_label">Kill kernel upon exit:</span>
154 </div>
156 </div>
155 </div>
157 </div>
156 </div>
158 </div>
157
159
158 <div id="help_section">
160 <div id="help_section">
159 <h3 class="section_header">Help</h3>
161 <h3 class="section_header">Help</h3>
160 <div class="section_content">
162 <div class="section_content">
161 <div class="section_row">
163 <div class="section_row">
162 <span id="help_buttons0" class="section_row_buttons">
164 <span id="help_buttons0" class="section_row_buttons">
163 <a id="python_help" href="http://docs.python.org" target="_blank">Python</a>
165 <a id="python_help" href="http://docs.python.org" target="_blank">Python</a>
164 <a id="ipython_help" href="http://ipython.org/documentation.html" target="_blank">IPython</a>
166 <a id="ipython_help" href="http://ipython.org/documentation.html" target="_blank">IPython</a>
165 </span>
167 </span>
166 <span class="section_row_header">Links</span>
168 <span class="section_row_header">Links</span>
167 </div>
169 </div>
168 <div class="section_row">
170 <div class="section_row">
169 <span id="help_buttons1" class="section_row_buttons">
171 <span id="help_buttons1" class="section_row_buttons">
170 <a id="numpy_help" href="http://docs.scipy.org/doc/numpy/reference/" target="_blank">NumPy</a>
172 <a id="numpy_help" href="http://docs.scipy.org/doc/numpy/reference/" target="_blank">NumPy</a>
171 <a id="scipy_help" href="http://docs.scipy.org/doc/scipy/reference/" target="_blank">SciPy</a>
173 <a id="scipy_help" href="http://docs.scipy.org/doc/scipy/reference/" target="_blank">SciPy</a>
172 </span>
174 </span>
173 </div>
175 </div>
174 <div class="section_row">
176 <div class="section_row">
175 <span id="help_buttons2" class="section_row_buttons">
177 <span id="help_buttons2" class="section_row_buttons">
176 <a id="matplotlib_help" href="http://matplotlib.sourceforge.net/" target="_blank">MPL</a>
178 <a id="matplotlib_help" href="http://matplotlib.sourceforge.net/" target="_blank">MPL</a>
177 <a id="sympy_help" href="http://docs.sympy.org/dev/index.html" target="_blank">SymPy</a>
179 <a id="sympy_help" href="http://docs.sympy.org/dev/index.html" target="_blank">SymPy</a>
178 </span>
180 </span>
179 </div>
181 </div>
180 <div class="section_row">
182 <div class="section_row">
181 <span class="help_string">run selected cell</span>
183 <span class="help_string">run selected cell</span>
182 <span class="help_string_label">Shift-Enter :</span>
184 <span class="help_string_label">Shift-Enter :</span>
183 </div>
185 </div>
184 <div class="section_row">
186 <div class="section_row">
185 <span class="help_string">run in terminal mode</span>
187 <span class="help_string">run in terminal mode</span>
186 <span class="help_string_label">Ctrl-Enter :</span>
188 <span class="help_string_label">Ctrl-Enter :</span>
187 </div>
189 </div>
188 <div class="section_row">
190 <div class="section_row">
189 <span class="help_string">show keyboard shortcuts</span>
191 <span class="help_string">show keyboard shortcuts</span>
190 <span class="help_string_label">Ctrl-m h :</span>
192 <span class="help_string_label">Ctrl-m h :</span>
191 </div>
193 </div>
192 </div>
194 </div>
193 </div>
195 </div>
194
196
195 </div>
197 </div>
196 <div id="left_panel_splitter"></div>
198 <div id="left_panel_splitter"></div>
197 <div id="notebook_panel">
199 <div id="notebook_panel">
198 <div id="notebook"></div>
200 <div id="notebook"></div>
199 <div id="pager_splitter"></div>
201 <div id="pager_splitter"></div>
200 <div id="pager"></div>
202 <div id="pager"></div>
201 </div>
203 </div>
202
204
203 </div>
205 </div>
204
206
205 <script src="static/jquery/js/jquery-1.6.2.min.js" type="text/javascript" charset="utf-8"></script>
207 <script src="static/jquery/js/jquery-1.6.2.min.js" type="text/javascript" charset="utf-8"></script>
206 <script src="static/jquery/js/jquery-ui-1.8.14.custom.min.js" type="text/javascript" charset="utf-8"></script>
208 <script src="static/jquery/js/jquery-ui-1.8.14.custom.min.js" type="text/javascript" charset="utf-8"></script>
207 <script src="static/jquery/js/jquery.autogrow.js" type="text/javascript" charset="utf-8"></script>
209 <script src="static/jquery/js/jquery.autogrow.js" type="text/javascript" charset="utf-8"></script>
208
210
209 <script src="static/codemirror-2.12/lib/codemirror.js" charset="utf-8"></script>
211 <script src="static/codemirror-2.12/lib/codemirror.js" charset="utf-8"></script>
210 <script src="static/codemirror-2.12/mode/python/python.js" charset="utf-8"></script>
212 <script src="static/codemirror-2.12/mode/python/python.js" charset="utf-8"></script>
211 <script src="static/codemirror-2.12/mode/htmlmixed/htmlmixed.js" charset="utf-8"></script>
213 <script src="static/codemirror-2.12/mode/htmlmixed/htmlmixed.js" charset="utf-8"></script>
212 <script src="static/codemirror-2.12/mode/xml/xml.js" charset="utf-8"></script>
214 <script src="static/codemirror-2.12/mode/xml/xml.js" charset="utf-8"></script>
213 <script src="static/codemirror-2.12/mode/javascript/javascript.js" charset="utf-8"></script>
215 <script src="static/codemirror-2.12/mode/javascript/javascript.js" charset="utf-8"></script>
214 <script src="static/codemirror-2.12/mode/css/css.js" charset="utf-8"></script>
216 <script src="static/codemirror-2.12/mode/css/css.js" charset="utf-8"></script>
215 <script src="static/codemirror-2.12/mode/rst/rst.js" charset="utf-8"></script>
217 <script src="static/codemirror-2.12/mode/rst/rst.js" charset="utf-8"></script>
216
218
217 <script src="static/pagedown/Markdown.Converter.js" charset="utf-8"></script>
219 <script src="static/pagedown/Markdown.Converter.js" charset="utf-8"></script>
218
220
219 <script src="static/prettify/prettify.js" charset="utf-8"></script>
221 <script src="static/prettify/prettify.js" charset="utf-8"></script>
220
222
221 <script src="static/js/namespace.js" type="text/javascript" charset="utf-8"></script>
223 <script src="static/js/namespace.js" type="text/javascript" charset="utf-8"></script>
222 <script src="static/js/utils.js" type="text/javascript" charset="utf-8"></script>
224 <script src="static/js/utils.js" type="text/javascript" charset="utf-8"></script>
223 <script src="static/js/cell.js" type="text/javascript" charset="utf-8"></script>
225 <script src="static/js/cell.js" type="text/javascript" charset="utf-8"></script>
224 <script src="static/js/codecell.js" type="text/javascript" charset="utf-8"></script>
226 <script src="static/js/codecell.js" type="text/javascript" charset="utf-8"></script>
225 <script src="static/js/textcell.js" type="text/javascript" charset="utf-8"></script>
227 <script src="static/js/textcell.js" type="text/javascript" charset="utf-8"></script>
226 <script src="static/js/kernel.js" type="text/javascript" charset="utf-8"></script>
228 <script src="static/js/kernel.js" type="text/javascript" charset="utf-8"></script>
227 <script src="static/js/kernelstatus.js" type="text/javascript" charset="utf-8"></script>
229 <script src="static/js/kernelstatus.js" type="text/javascript" charset="utf-8"></script>
228 <script src="static/js/layout.js" type="text/javascript" charset="utf-8"></script>
230 <script src="static/js/layout.js" type="text/javascript" charset="utf-8"></script>
229 <script src="static/js/savewidget.js" type="text/javascript" charset="utf-8"></script>
231 <script src="static/js/savewidget.js" type="text/javascript" charset="utf-8"></script>
230 <script src="static/js/pager.js" type="text/javascript" charset="utf-8"></script>
232 <script src="static/js/pager.js" type="text/javascript" charset="utf-8"></script>
231 <script src="static/js/panelsection.js" type="text/javascript" charset="utf-8"></script>
233 <script src="static/js/panelsection.js" type="text/javascript" charset="utf-8"></script>
232 <script src="static/js/printwidget.js" type="text/javascript" charset="utf-8"></script>
234 <script src="static/js/printwidget.js" type="text/javascript" charset="utf-8"></script>
233 <script src="static/js/leftpanel.js" type="text/javascript" charset="utf-8"></script>
235 <script src="static/js/leftpanel.js" type="text/javascript" charset="utf-8"></script>
234 <script src="static/js/notebook.js" type="text/javascript" charset="utf-8"></script>
236 <script src="static/js/notebook.js" type="text/javascript" charset="utf-8"></script>
235 <script src="static/js/notebook_main.js" type="text/javascript" charset="utf-8"></script>
237 <script src="static/js/notebook_main.js" type="text/javascript" charset="utf-8"></script>
236
238
237
239
238 </body>
240 </body>
239
241
240 </html>
242 </html>
241
243
242
244
General Comments 0
You need to be logged in to leave comments. Login now