diff --git a/IPython/frontend/html/notebook/static/css/notebook.css b/IPython/frontend/html/notebook/static/css/notebook.css
index b77a8e3..8957b77 100644
--- a/IPython/frontend/html/notebook/static/css/notebook.css
+++ b/IPython/frontend/html/notebook/static/css/notebook.css
@@ -184,6 +184,10 @@ div.prompt {
font-family: monospace;
}
+div.input {
+ page-break-inside: avoid;
+}
+
div.input_area {
color: black;
}
@@ -203,7 +207,8 @@ div.output_prompt {
/* This class is applied to all types of output (pyout, pyerr, stream, display_data) */
div.output_area {
- padding: 0px 0.4em
+ padding: 0px 0.4em;
+ page-break-inside: avoid;
}
/* This is the output area after the Out[] prompt of type pyout */
@@ -295,3 +300,8 @@ div.text_cell_render {
font-family: monospace;
}
+@media print {
+ body { overflow: visible !important; }
+ .ui-widget-content { border: 0px; }
+}
+
diff --git a/IPython/frontend/html/notebook/static/js/codecell.js b/IPython/frontend/html/notebook/static/js/codecell.js
index 79a8140..42bbb45 100644
--- a/IPython/frontend/html/notebook/static/js/codecell.js
+++ b/IPython/frontend/html/notebook/static/js/codecell.js
@@ -206,12 +206,12 @@ var IPython = (function (IPython) {
CodeCell.prototype.append_pyout = function (json) {
n = json.prompt_number || ' ';
- var toinsert = $("
").addClass("output_pyout hbox");
+ var toinsert = $("").addClass("output_pyout hbox output_area");
toinsert.append($('').
addClass('prompt output_prompt').
html('Out[' + n + ']:')
);
- this.append_mime_type(json, toinsert).addClass('output_area');
+ this.append_mime_type(json, toinsert);
toinsert.children().last().addClass("box_flex1 pyout_area");
this.element.find("div.output").append(toinsert);
// If we just output latex, typeset it.
@@ -252,19 +252,19 @@ var IPython = (function (IPython) {
CodeCell.prototype.append_mime_type = function (json, element) {
element = element || this.element.find("div.output");
if (json.html !== undefined) {
- this.append_html(json.html, element);
+ inserted = this.append_html(json.html, element);
} else if (json.latex !== undefined) {
- this.append_latex(json.latex, element);
+ inserted = this.append_latex(json.latex, element);
} else if (json.svg !== undefined) {
- this.append_svg(json.svg, element);
+ inserted = this.append_svg(json.svg, element);
} else if (json.png !== undefined) {
- this.append_png(json.png, element);
+ inserted = this.append_png(json.png, element);
} else if (json.jpeg !== undefined) {
- this.append_jpeg(json.jpeg, element);
+ inserted = this.append_jpeg(json.jpeg, element);
} else if (json.text !== undefined) {
- this.append_text(json.text, element);
+ inserted = this.append_text(json.text, element);
};
- return element;
+ return inserted;
};
@@ -273,7 +273,7 @@ var IPython = (function (IPython) {
var toinsert = $("").addClass("output_html rendered_html");
toinsert.append(html);
element.append(toinsert);
- return element;
+ return toinsert;
}
@@ -282,7 +282,7 @@ var IPython = (function (IPython) {
var toinsert = $("").addClass("output_stream");
toinsert.append($("").html(data));
element.append(toinsert);
- return element;
+ return toinsert;
};
@@ -291,7 +291,7 @@ var IPython = (function (IPython) {
var toinsert = $("").addClass("output_svg");
toinsert.append(svg);
element.append(toinsert);
- return element;
+ return toinsert;
};
@@ -300,7 +300,7 @@ var IPython = (function (IPython) {
var toinsert = $("").addClass("output_png");
toinsert.append($("
").attr('src','data:image/png;base64,'+png));
element.append(toinsert);
- return element;
+ return toinsert;
};
@@ -309,7 +309,7 @@ var IPython = (function (IPython) {
var toinsert = $("").addClass("output_jpeg");
toinsert.append($("
").attr('src','data:image/jpeg;base64,'+jpeg));
element.append(toinsert);
- return element;
+ return toinsert;
};
@@ -320,7 +320,7 @@ var IPython = (function (IPython) {
var toinsert = $("").addClass("output_latex");
toinsert.append(latex);
element.append(toinsert);
- return element;
+ return toinsert;
}
diff --git a/IPython/frontend/html/notebook/static/js/notebook_main.js b/IPython/frontend/html/notebook/static/js/notebook_main.js
index 760458c..d4e6ea6 100644
--- a/IPython/frontend/html/notebook/static/js/notebook_main.js
+++ b/IPython/frontend/html/notebook/static/js/notebook_main.js
@@ -32,6 +32,7 @@ $(document).ready(function () {
IPython.pager = new IPython.Pager('div#pager', 'div#pager_splitter');
IPython.left_panel = new IPython.LeftPanel('div#left_panel', 'div#left_panel_splitter');
IPython.save_widget = new IPython.SaveWidget('span#save_widget');
+ IPython.print_widget = new IPython.PrintWidget('span#print_widget');
IPython.notebook = new IPython.Notebook('div#notebook');
IPython.kernel_status_widget = new IPython.KernelStatusWidget('#kernel_status');
IPython.kernel_status_widget.status_idle();
diff --git a/IPython/frontend/html/notebook/static/js/printwidget.js b/IPython/frontend/html/notebook/static/js/printwidget.js
new file mode 100644
index 0000000..896740a
--- /dev/null
+++ b/IPython/frontend/html/notebook/static/js/printwidget.js
@@ -0,0 +1,54 @@
+var IPython = (function (IPython) {
+
+ var PrintWidget = function (selector) {
+ this.selector = selector;
+ if (this.selector !== undefined) {
+ this.element = $(selector);
+ this.style();
+ this.bind_events();
+ }
+ };
+
+ PrintWidget.prototype.style = function () {
+ this.element.find('button#print_notebook').button();
+ };
+
+ PrintWidget.prototype.bind_events = function () {
+ var that = this;
+ this.element.find('button#print_notebook').click(function () {
+ that.print_notebook();
+ });
+ };
+
+ PrintWidget.prototype.enable = function () {
+ this.element.find('button#print_notebook').button('enable');
+ };
+
+ PrintWidget.prototype.disable = function () {
+ this.element.find('button#print_notebook').button('disable');
+ };
+
+ PrintWidget.prototype.print_notebook = function () {
+ var w = window.open('', '_blank', 'scrollbars=1,menubar=1');
+ var html = '' +
+ $('head').clone().html() +
+ '' +
+ '' +
+ $('#notebook').clone().html() +
+ '';
+
+ w.document.open();
+ w.document.write(html);
+ w.document.close();
+
+ return false;
+ };
+
+ IPython.PrintWidget = PrintWidget;
+
+ return IPython;
+
+}(IPython));
diff --git a/IPython/frontend/html/notebook/static/js/savewidget.js b/IPython/frontend/html/notebook/static/js/savewidget.js
index 6650edd..7f54d87 100644
--- a/IPython/frontend/html/notebook/static/js/savewidget.js
+++ b/IPython/frontend/html/notebook/static/js/savewidget.js
@@ -90,20 +90,23 @@ var IPython = (function (IPython) {
SaveWidget.prototype.status_save = function () {
- this.element.find('span.ui-button-text').text('Save');
+ this.element.find('button#save_notebook').button('option', 'label', 'Save');
this.element.find('button#save_notebook').button('enable');
- };
+ IPython.print_widget.enable();
+ };
SaveWidget.prototype.status_saving = function () {
- this.element.find('span.ui-button-text').text('Saving');
+ this.element.find('button#save_notebook').button('option', 'label', 'Saving');
this.element.find('button#save_notebook').button('disable');
- };
+ IPython.print_widget.disable();
+ };
SaveWidget.prototype.status_loading = function () {
- this.element.find('span.ui-button-text').text('Loading');
+ this.element.find('button#save_notebook').button('option', 'label', 'Loading');
this.element.find('button#save_notebook').button('disable');
+ IPython.print_widget.disable();
};
diff --git a/IPython/frontend/html/notebook/templates/notebook.html b/IPython/frontend/html/notebook/templates/notebook.html
index 0bca8ed..9153858 100644
--- a/IPython/frontend/html/notebook/templates/notebook.html
+++ b/IPython/frontend/html/notebook/templates/notebook.html
@@ -68,6 +68,10 @@
+
+
+
+
@@ -212,6 +216,7 @@
+