diff --git a/bower.json b/bower.json
index f2e439e90..5203f9ad2 100644
--- a/bower.json
+++ b/bower.json
@@ -6,6 +6,7 @@
"bootstrap": "bootstrap#~3.4",
"bootstrap-tour": "0.9.0",
"codemirror": "components/codemirror#~5.37",
+ "create-react-class": "https://cdn.jsdelivr.net/npm/create-react-class@15.6.3/create-react-class.min.js",
"es6-promise": "~1.0",
"font-awesome": "components/font-awesome#~4.7.0",
"google-caja": "5669",
@@ -16,9 +17,7 @@
"marked": "~0.5",
"MathJax": "^2.7.4",
"moment": "~2.19.3",
- "preact": "https://unpkg.com/preact@~7.2.0/dist/preact.min.js",
- "preact-compat": "https://unpkg.com/preact-compat@~3.14.3/dist/preact-compat.min.js",
- "proptypes": "https://unpkg.com/proptypes@~0.14.4/index.js",
+ "react": "~16.0.0",
"requirejs": "~2.2",
"requirejs-text": "~2.0.15",
"requirejs-plugins": "~1.0.3",
diff --git a/notebook/static/notebook/js/shortcuteditor.js b/notebook/static/notebook/js/shortcuteditor.js
index d404d8dc0..e47cab7b6 100644
--- a/notebook/static/notebook/js/shortcuteditor.js
+++ b/notebook/static/notebook/js/shortcuteditor.js
@@ -12,9 +12,6 @@ define([
dialog,
marked
) {
- var render = preact.render;
- var createClass = preactCompat.createClass;
- var createElement = preactCompat.createElement;
/**
@@ -33,7 +30,7 @@ var humanize_action_id = function(str) {
* Wether an action have a keybinding or not.
**/
-var KeyBinding = createClass({
+var KeyBinding = createReactClass({
displayName: 'KeyBindings',
getInitialState: function() {
return {shrt:''};
@@ -53,13 +50,13 @@ var KeyBinding = createClass({
event.preventDefault();
return false;
};
- return createElement('form', {className:'jupyter-keybindings',
+ return React.createElement('form', {className:'jupyter-keybindings',
onSubmit: binding_setter
},
- createElement('i', {className: "pull-right fa fa-plus", alt: 'add-keyboard-shortcut',
+ React.createElement('i', {className: "pull-right fa fa-plus", alt: 'add-keyboard-shortcut',
onClick: binding_setter
}),
- createElement('input', {
+ React.createElement('input', {
type:'text',
placeholder:'add shortcut',
className:'pull-right'+((available||empty)?'':' alert alert-danger'),
@@ -67,10 +64,10 @@ var KeyBinding = createClass({
onChange:that.handleShrtChange
}),
that.props.shortcuts ? that.props.shortcuts.map(function (item, index) {
- return createElement('span', {className: 'pull-right'},
- createElement('kbd', {}, [
+ return React.createElement('span', {className: 'pull-right'},
+ React.createElement('kbd', {}, [
item.h,
- createElement('i', {className: "fa fa-times", alt: 'remove '+item.h,
+ React.createElement('i', {className: "fa fa-times", alt: 'remove '+item.h,
onClick:function () {
that.props.unbind(item.raw);
}
@@ -78,13 +75,13 @@ var KeyBinding = createClass({
])
);
}): null,
- createElement('div', {title: '(' + that.props.ckey + ')' ,
+ React.createElement('div', {title: '(' + that.props.ckey + ')' ,
className:'jupyter-keybindings-text'}, that.props.display )
);
}
});
-var KeyBindingList = createClass({
+var KeyBindingList = createReactClass({
displayName: 'KeyBindingList',
getInitialState: function(){
return {data:[]};
@@ -95,7 +92,7 @@ var KeyBindingList = createClass({
render: function() {
var that = this;
var children = this.state.data.map(function (binding) {
- return createElement(KeyBinding, Object.assign({}, binding, {
+ return React.createElement(KeyBinding, Object.assign({}, binding, {
onAddBindings: function (shortcut, action) {
that.props.bind(shortcut, action);
that.setState({data:that.props.callback()});
@@ -107,7 +104,7 @@ var KeyBindingList = createClass({
}
}));
});
- children.unshift(createElement('div', {className:'well', key:'disclamer', id:'short-key-binding-intro', dangerouslySetInnerHTML:
+ children.unshift(React.createElement('div', {className:'well', key:'disclamer', id:'short-key-binding-intro', dangerouslySetInnerHTML:
{__html:
marked(
@@ -116,7 +113,7 @@ var KeyBindingList = createClass({
"See more [**details of defining keyboard shortcuts**](#long-key-binding-intro) below."
)}
}));
- children.push(createElement('div', {className:'well', key:'disclamer', id:'long-key-binding-intro', dangerouslySetInnerHTML:
+ children.push(React.createElement('div', {className:'well', key:'disclamer', id:'long-key-binding-intro', dangerouslySetInnerHTML:
{__html:
marked(
@@ -165,7 +162,7 @@ var KeyBindingList = createClass({
"Changing the keybindings of edit mode is not currently available."
)}
}));
- return createElement('div',{}, children);
+ return React.createElement('div',{}, children);
}
});
@@ -217,8 +214,8 @@ var ShortcutEditor = function(notebook) {
mod.addClass("modal_stretch");
mod.modal('show');
- render(
- createElement(KeyBindingList, {
+ ReactDOM.render(
+ React.createElement(KeyBindingList, {
callback: function () { return get_shortcuts_data(notebook);},
bind: function (shortcut, command) {
return notebook.keyboard_manager.command_shortcuts._persist_shortcut(shortcut, command);
diff --git a/notebook/templates/page.html b/notebook/templates/page.html
index 9e68da1b2..af405fdfc 100644
--- a/notebook/templates/page.html
+++ b/notebook/templates/page.html
@@ -16,9 +16,9 @@
{% endblock %}
-
-
-
+
+
+