Starting work on a Markdown cell.

pull/37/head
Brian E. Granger 15 years ago
parent b62857f151
commit 81a1099f87

@ -6,11 +6,17 @@
import json
import logging
import os
import urllib
from tornado import web
from tornado import websocket
try:
from docutils.core import publish_string
except ImportError:
publish_string = None
#-----------------------------------------------------------------------------
# Top-level handlers
@ -156,3 +162,51 @@ class NotebookHandler(web.RequestHandler):
self.set_status(204)
self.finish()
#-----------------------------------------------------------------------------
# RST web service handlers
#-----------------------------------------------------------------------------
_rst_header = """========
Heading1
========
Heading2
========
Heading3
--------
Heading4
^^^^^^^^
"""
class RSTHandler(web.RequestHandler):
def post(self):
if publish_string is None:
raise web.HTTPError(503)
body = self.request.body.strip()
source = _rst_header + body
template_path=os.path.join(os.path.dirname(__file__), u'templates', u'rst_template.html')
print template_path
defaults = {'file_insertion_enabled': 0,
'raw_enabled': 0,
'_disable_config': 1,
'stylesheet_path': 0,
'initial_header_level': 3,
'template': template_path
}
try:
html = publish_string(source, writer_name='html',
settings_overrides=defaults
)
except:
raise web.HTTPError(400)
print html
# html = '\n'.join(html.split('\n')[7:-3])
# print html
self.set_header('Content-Type', 'text/html')
self.finish(html)

@ -32,7 +32,7 @@ from .sessionmanager import SessionManager
from .handlers import (
NBBrowserHandler, NewHandler, NamedNotebookHandler,
MainKernelHandler, KernelHandler, KernelActionHandler, ZMQStreamHandler,
NotebookRootHandler, NotebookHandler
NotebookRootHandler, NotebookHandler, RSTHandler
)
from .notebookmanager import NotebookManager
@ -75,7 +75,8 @@ class NotebookWebApplication(web.Application):
(r"/kernels/%s/iopub" % _kernel_id_regex, ZMQStreamHandler, dict(stream_name='iopub')),
(r"/kernels/%s/shell" % _kernel_id_regex, ZMQStreamHandler, dict(stream_name='shell')),
(r"/notebooks", NotebookRootHandler),
(r"/notebooks/%s" % _notebook_id_regex, NotebookHandler)
(r"/notebooks/%s" % _notebook_id_regex, NotebookHandler),
(r"/rstservice/render", RSTHandler)
]
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),

@ -225,25 +225,42 @@ div.html_cell_render {
color: black;
}
div.html_cell_render em {font-style: italic;}
div.html_cell_render strong {font-weight: bold;}
div.html_cell_render u {text-decoration: underline;}
div.html_cell_render :link { text-decoration: underline }
div.html_cell_render :visited { text-decoration: underline }
div.html_cell_render h1 {font-size: 197%; margin: .67em 0; font-weight: bold;}
div.html_cell_render h2 {font-size: 153.9%; margin: .75em 0; font-weight: bold;}
div.html_cell_render h3 {font-size: 116%; margin: .83em 0; font-weight: bold;}
div.html_cell_render h4 {margin: 1.12em 0; font-weight: bold;}
div.html_cell_render h5 {font-size: 85%.; margin: 1.5em 0; font-weight: bold;}
div.html_cell_render h6 {font-size: 77%; margin: 1.67em 0; font-weight: bold;}
div.html_cell_render ul {list-style:disc; margin-left: 40px;}
div.html_cell_render ul ul {list-style:square; margin-left: 40px;}
div.html_cell_render ul ul ul {list-style:circle; margin-left: 40px;}
div.html_cell_render ol {list-style:upper-roman; margin-left: 40px;}
div.html_cell_render ol ol {list-style:upper-alpha;}
div.html_cell_render ol ol ol {list-style:decimal;}
div.html_cell_render ol ol ol ol {list-style:lower-alpha;}
div.html_cell_render ol ol ol ol ol {list-style:lower-roman;}
div.rst_cell_input {
color: black;
}
div.rst_cell_render {
font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
/* Slightly bigger than the rest of the notebook */
font-size: 116%;
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 5px;
color: black;
}
.rendered_html {color: black;}
.rendered_html em {font-style: italic;}
.rendered_html strong {font-weight: bold;}
.rendered_html u {text-decoration: underline;}
.rendered_html :link { text-decoration: underline }
.rendered_html :visited { text-decoration: underline }
.rendered_html h1 {font-size: 197%; margin: .67em 0; font-weight: bold;}
.rendered_html h2 {font-size: 153.9%; margin: .75em 0; font-weight: bold;}
.rendered_html h3 {font-size: 116%; margin: .83em 0; font-weight: bold;}
.rendered_html h4 {margin: 1.12em 0; font-weight: bold;}
.rendered_html h5 {font-size: 85%.; margin: 1.5em 0; font-weight: bold;}
.rendered_html h6 {font-size: 77%; margin: 1.67em 0; font-weight: bold;}
.rendered_html ul {list-style:disc; margin-left: 40px;}
.rendered_html ul ul {list-style:square; margin-left: 40px;}
.rendered_html ul ul ul {list-style:circle; margin-left: 40px;}
.rendered_html ol {list-style:upper-roman; margin-left: 40px;}
.rendered_html ol ol {list-style:upper-alpha;}
.rendered_html ol ol ol {list-style:decimal;}
.rendered_html ol ol ol ol {list-style:lower-alpha;}
.rendered_html ol ol ol ol ol {list-style:lower-roman;}
.CodeMirror {
line-height: 1.231; /* Changed from 1em to our global default */

@ -342,12 +342,34 @@ var IPython = (function (IPython) {
}
Notebook.prototype.html_to_code = function (index) {
Notebook.prototype.insert_rst_cell_before = function (index) {
// TODO: Bounds check for i
var i = this.index_or_selected(index);
var cell = new IPython.RSTCell(this);
cell.config_mathjax();
this.insert_cell_before(cell, i);
this.select(this.find_cell_index(cell));
return cell;
}
Notebook.prototype.insert_rst_cell_after = function (index) {
// TODO: Bounds check for i
var i = this.index_or_selected(index);
var cell = new IPython.RSTCell(this);
cell.config_mathjax();
this.insert_cell_after(cell, i);
this.select(this.find_cell_index(cell));
return cell;
}
Notebook.prototype.to_code = function (index) {
// TODO: Bounds check for i
var i = this.index_or_selected(index);
var source_element = this.cell_elements().eq(i);
var source_cell = source_element.data("cell");
if (source_cell instanceof IPython.HTMLCell) {
if (source_cell instanceof IPython.HTMLCell || source_cell instanceof IPython.RSTCell) {
this.insert_code_cell_after(i);
var target_cell = this.cells()[i+1];
target_cell.set_code(source_cell.get_source());
@ -356,21 +378,51 @@ var IPython = (function (IPython) {
};
Notebook.prototype.code_to_html = function (index) {
Notebook.prototype.to_rst = function (index) {
// TODO: Bounds check for i
var i = this.index_or_selected(index);
var source_element = this.cell_elements().eq(i);
var source_cell = source_element.data("cell");
var target_cell = null;
if (source_cell instanceof IPython.CodeCell) {
this.insert_rst_cell_after(i);
var target_cell = this.cells()[i+1];
var text = source_cell.get_code();
} else if (source_cell instanceof IPython.HTMLCell) {
this.insert_rst_cell_after(i);
var target_cell = this.cells()[i+1];
var text = source_cell.get_source();
}
if (target_cell !== null) {
if (text === "") {text = target_cell.placeholder;};
target_cell.set_source(text);
source_element.remove();
target_cell.edit();
}
};
Notebook.prototype.to_html = function (index) {
// TODO: Bounds check for i
var i = this.index_or_selected(index);
var source_element = this.cell_elements().eq(i);
var source_cell = source_element.data("cell");
var target_cell = null;
if (source_cell instanceof IPython.CodeCell) {
this.insert_html_cell_after(i);
var target_cell = this.cells()[i+1];
var text = source_cell.get_code();
} else if (source_cell instanceof IPython.RSTCell) {
this.insert_html_cell_after(i);
var target_cell = this.cells()[i+1];
var text = source_cell.get_source();
}
if (target_cell !== null) {
if (text === "") {text = target_cell.placeholder;};
target_cell.set_source(text);
target_cell.set_render(text);
source_element.remove();
target_cell.edit();
};
}
};

@ -16,6 +16,7 @@ $(document).ready(function () {
styles: {'.MathJax_Display': {"margin": 0}}
}
});
IPython.markdown_converter = new Markdown.Converter();
$('div#header').addClass('border-box-sizing');
$('div#main_app').addClass('border-box-sizing ui-widget ui-widget-content');

@ -99,8 +99,9 @@
<span id="cell_type" class="section_row_buttons">
<button id="to_code">Code</button>
<button id="to_html">HTML</button>
<button id="to_rst">RST</button>
</span>
<span class="button_label">Cell Type</span>
<span class="button_label">Format</span>
</div>
<div class="section_row">
<span id="toggle_output" class="section_row_buttons">
@ -177,6 +178,7 @@
<script src="static/js/cell.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/codecell.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/htmlcell.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/rstcell.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/kernel.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/kernelstatus.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/layout.js" type="text/javascript" charset="utf-8"></script>
@ -186,13 +188,14 @@
<script src="static/js/leftpanel.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/notebook.js" type="text/javascript" charset="utf-8"></script>
<script src="static/js/notebook_main.js" type="text/javascript" charset="utf-8"></script>
<script src="static/codemirror-2.12/lib/codemirror.js"></script>
<script src="static/codemirror-2.12/mode/python/python.js"></script>
<script src="static/codemirror-2.12/mode/htmlmixed/htmlmixed.js"></script>
<script src="static/codemirror-2.12/mode/xml/xml.js"></script>
<script src="static/codemirror-2.12/mode/javascript/javascript.js"></script>
<script src="static/codemirror-2.12/mode/css/css.js"></script>
<script src="static/codemirror-2.12/mode/rst/rst.js"></script>
<script src="static/codemirror-2.12/lib/codemirror.js" charset="utf-8"></script>
<script src="static/codemirror-2.12/mode/python/python.js" charset="utf-8"></script>
<script src="static/codemirror-2.12/mode/htmlmixed/htmlmixed.js" charset="utf-8"></script>
<script src="static/codemirror-2.12/mode/xml/xml.js" charset="utf-8"></script>
<script src="static/codemirror-2.12/mode/javascript/javascript.js" charset="utf-8"></script>
<script src="static/codemirror-2.12/mode/css/css.js" charset="utf-8"></script>
<script src="static/codemirror-2.12/mode/rst/rst.js" charset="utf-8"></script>
<script src="static/pagedown/Markdown.Converter.js" charset="utf-8"></script>
</body>

Loading…
Cancel
Save