Permalink
Browse files

Starting work on a Markdown cell.

  • Loading branch information...
1 parent 3896ff1 commit f5f61980867c90e4bad32125a2fb763b82946317 @ellisonbg ellisonbg committed Aug 9, 2011
@@ -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 @@ def delete(self, notebook_id):
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 .handlers import (
NBBrowserHandler, NewHandler, NamedNotebookHandler,
MainKernelHandler, KernelHandler, KernelActionHandler, ZMQStreamHandler,
- NotebookRootHandler, NotebookHandler
+ NotebookRootHandler, NotebookHandler, RSTHandler
)
from .notebookmanager import NotebookManager
@@ -75,7 +75,8 @@ def __init__(self, routing_kernel_manager, notebook_manager, log):
(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 */
@@ -28,7 +28,8 @@ var IPython = (function (IPython) {
value: this.placeholder
});
// The tabindex=-1 makes this div focusable.
- var render_area = $('<div/>').addClass('html_cell_render').attr('tabindex','-1');
+ var render_area = $('<div/>').addClass('html_cell_render').
+ addClass('rendered_html').attr('tabindex','-1');
cell.append(input_area).append(render_area);
this.element = cell;
};
@@ -74,7 +75,7 @@ var IPython = (function (IPython) {
var output = html_cell.find("div.html_cell_render");
var text = this.get_source();
if (text === "") {text = this.placeholder;};
- this.set_render(text);
+ this.set_rendered(text);
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
html_cell.find('div.html_cell_input').hide();
output.show();
@@ -107,7 +108,7 @@ var IPython = (function (IPython) {
};
- HTMLCell.prototype.set_render = function(text) {
+ HTMLCell.prototype.set_rendered = function(text) {
this.element.find('div.html_cell_render').html(text);
};
@@ -134,7 +135,7 @@ var IPython = (function (IPython) {
if (data.cell_type === 'html') {
if (data.source !== undefined) {
this.set_source(data.source);
- this.set_render(data.source);
+ this.set_rendered(data.source);
};
};
}
@@ -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');
@@ -153,10 +153,13 @@ var IPython = (function (IPython) {
IPython.notebook.move_cell_down();
});
this.content.find('#to_code').click(function () {
- IPython.notebook.html_to_code();
+ IPython.notebook.to_code();
});
this.content.find('#to_html').click(function () {
- IPython.notebook.code_to_html();
+ IPython.notebook.to_html();
+ });
+ this.content.find('#to_rst').click(function () {
+ IPython.notebook.to_rst();
});
this.content.find('#run_selected_cell').click(function () {
IPython.notebook.execute_selected_cell();
Oops, something went wrong.

0 comments on commit f5f6198

Please sign in to comment.