');
if(window.viewerMode || settings.layoutOrientation == "horizontal") {
- $('.ui-layout-resizer-north').append($resizerDecorator).append($previewButtonsElt);
- $('.ui-layout-resizer-east').append($northTogglerElt).append($editorButtonsElt);
+ $('.ui-layout-resizer-north').append($previewButtonsElt);
+ $('.ui-layout-resizer-east').append($resizerDecorator).append($northTogglerElt).append($editorButtonsElt);
}
else {
- $('.ui-layout-resizer-north').append($resizerDecorator);
- $('.ui-layout-resizer-south').append($previewButtonsElt).append($editorButtonsElt).append($northTogglerElt);
+ $('.ui-layout-resizer-south').append($resizerDecorator).append($previewButtonsElt).append($editorButtonsElt).append($northTogglerElt);
}
setPanelVisibility();
diff --git a/public/res/extensions/userCustom.js b/public/res/extensions/userCustom.js
index 5334810b..eae7f319 100644
--- a/public/res/extensions/userCustom.js
+++ b/public/res/extensions/userCustom.js
@@ -60,6 +60,113 @@ define([
console.error(e);
}
};
-
+
+ userCustom.onPagedownConfigure = function (editor) {
+ var thmCounter = { num: 0 };
+ var excsCounter = { num: 0 };
+ var environmentMap = {
+ thm: { title: "Theorem" ,counter: thmCounter },
+ lem: { title: "Lemma" ,counter: thmCounter },
+ cor: { title: "Corollary" ,counter: thmCounter },
+ prop: { title: "Property" ,counter: thmCounter },
+ defn: { title: "Definition" ,counter: thmCounter },
+ rem: { title: "Remark" ,counter: thmCounter },
+ prob: { title: "Problem" ,counter: excsCounter },
+ excs: { title: "Exercise" ,counter: excsCounter },
+ examp: { title: "Example" ,counter: excsCounter },
+ proof: { title: "Proof" }
+ };
+ var converter = editor.getConverter();
+ // Save the preConversion callbacks stack
+ var preConversion = converter.hooks.preConversion;
+ converter.hooks.preConversion = function (text) {
+ // Change \begin...\end to /begin.../end to avoid MathJax processing
+ text = text.replace(/\\begin{(\w+)}([\s\S]*?)\\end{\1}/g, function (wholeMatch, m1, m2) {
+ if(!environmentMap[m1]) return wholeMatch;
+ // At this stage we need to keep the same number of characters for accurate section parsing
+ return '/begin{' + m1 + '}' + m2 + '/end{' + m1 + '}';
+ });
+ // Transform \title and \section into markdown title to take benefit of partial rendering
+ text = text.replace(/\\(\w+){([^\r\n}]+)}/g, function (wholeMatch, m1, m2) {
+ // At this stage we need to keep the same number of characters for accurate section parsing
+ if (m1 == 'section') {
+ // \section{} has to be replaced by 10 chars
+ return '\n### ' + m2 + '\n';
+ }
+ if (m1 == 'subsection') {
+ // \subsection{} has to be replaced by 13 chars
+ return '\n#### ' + m2 + '\n';
+ }
+ if (m1 == 'subsubsection') {
+ // \subsubsection{} has to be replaced by 16 chars
+ return '\n##### ' + m2 + '\n';
+ }
+ if (m1 == 'title') {
+ // \title{} has to be replaced by 8 chars
+ return '\n## ' + m2 + '\n';
+ }
+ return wholeMatch;
+ });
+ // We are replacing the preConversion stack, call the other preConversion callbacks from the old stack
+ return preConversion(text);
+ };
+ converter.hooks.chain("preBlockGamut", function (text, blockGamutHookCallback) {
+ text = text.replace(/\\ref{(\w+):(\d+)}/g, function (wholeMatch, m1, m2) {
+ if(!environmentMap[m1]) return wholeMatch;
+ return '
' + environmentMap[m1].title + ' ' + m2 + '';
+ });
+ text = text.replace(/\\(author|date){([\s\S]*?)}/g, '
$2
');
+ return text.replace(/\/begin{(\w+)}([\s\S]*?)\/end{\1}/g, function (wholeMatch, m1, m2) {
+ if(!environmentMap[m1]) return wholeMatch;
+ var result = '
' + blockGamutHookCallback(m2);
+ if (m1 == "proof") {
+ result += '$■$';
+ }
+ return result + '
';
+ });
+ });
+ var previewContentsElt = document.getElementById('preview-contents');
+ editor.hooks.chain('onPreviewRefresh', function() {
+ thmCounter.num = 0;
+ excsCounter.num = 0;
+ _.each(previewContentsElt.querySelectorAll('[class^="latex_"]'), function(elt) {
+ var key = elt.className.match(/^latex_(\S+)/)[1];
+ var environment = environmentMap[key];
+ if(!environment) return;
+ var title = environment.title;
+ if(environment.counter) {
+ environment.counter.num++;
+ title += ' ' + environment.counter.num;
+ elt.id = key + ':' + environment.counter.num;
+ }
+ elt.querySelector('.latex_title').innerHTML = title + '.';
+ });
+ });
+ };
+
+ userCustom.onReady = function () {
+ var style = [
+ '.latex_thm, .latex_lem, .latex_cor, .latex_defn, .latex_prop, .latex_rem {',
+ ' font-style:italic;',
+ ' display: block;',
+ ' margin:15px 0;',
+ '}',
+ '.latex_prob, .latex_examp, .latex_excs, .latex_proof {',
+ ' font-style:normal;',
+ ' margin: 10px 0;',
+ ' display: block;',
+ '}',
+ '.latex_title {',
+ ' float:left;',
+ ' font-weight:bold;',
+ ' padding-right: 10px;',
+ '}',
+ '.latex_proofend {',
+ ' float:right;',
+ '}',
+ ].join('\n');
+ $("head").append($('