diff --git a/shared/naturalcrit/codeEditor/codeEditor.jsx b/shared/naturalcrit/codeEditor/codeEditor.jsx
index da1390511..a06587082 100644
--- a/shared/naturalcrit/codeEditor/codeEditor.jsx
+++ b/shared/naturalcrit/codeEditor/codeEditor.jsx
@@ -142,6 +142,20 @@ const CodeEditor = createClass({
'Shift-Cmd-Enter' : this.newColumn,
'Ctrl-Enter' : this.newPage,
'Cmd-Enter' : this.newPage,
+ 'Ctrl-Alt-Enter' : ()=>this.newPageWithFooter(),
+ 'Cmd-Alt-Enter' : ()=>this.newPageWithFooter(),
+ 'Ctrl-Alt-1' : ()=>this.newPageWithFooter(1),
+ 'Cmd-Alt-1' : ()=>this.newPageWithFooter(1),
+ 'Ctrl-Alt-2' : ()=>this.newPageWithFooter(2),
+ 'Cmd-Alt-2' : ()=>this.newPageWithFooter(2),
+ 'Ctrl-Alt-3' : ()=>this.newPageWithFooter(3),
+ 'Cmd-Alt-3' : ()=>this.newPageWithFooter(3),
+ 'Ctrl-Alt-4' : ()=>this.newPageWithFooter(4),
+ 'Cmd-Alt-4' : ()=>this.newPageWithFooter(4),
+ 'Ctrl-Alt-5' : ()=>this.newPageWithFooter(5),
+ 'Cmd-Alt-5' : ()=>this.newPageWithFooter(5),
+ 'Ctrl-Alt-6' : ()=>this.newPageWithFooter(6),
+ 'Cmd-Alt-6' : ()=>this.newPageWithFooter(6),
'Ctrl-F' : 'findPersistent',
'Cmd-F' : 'findPersistent',
'Shift-Enter' : 'findPersistentPrevious',
@@ -229,6 +243,20 @@ const CodeEditor = createClass({
this.codeMirror.replaceSelection('\n\\page\n\n', 'end');
},
+ newPageWithFooter : function(headerSize=1) {
+ let header='';
+ while (header.length < headerSize) {
+ header = header.concat('#');
+ }
+ header = header.concat(' ');
+
+ const cursorPos = this.codeMirror.getCursor();
+
+ const text = this.codeMirror.getValue().split('\n').slice(0, cursorPos.line).reverse().filter((line)=>{return line.slice(0, header.length) == header && line; })[0] || 'CHAPTER TITLE';
+
+ this.codeMirror.replaceSelection(`\n{{footnote ${text}}}\n{{pageNumber,auto}}\n\n\\page\n\n`, 'end');
+ },
+
makeUnderline : function() {
const selection = this.codeMirror.getSelection(), t = selection.slice(0, 3) === '' && selection.slice(-4) === '';
this.codeMirror.replaceSelection(t ? selection.slice(3, -4) : `${selection}`, 'around');