From d16584366c5e4d3d3d8aacda6e1ccd413d5cf086 Mon Sep 17 00:00:00 2001 From: Menci Date: Mon, 5 Nov 2018 21:38:36 +0800 Subject: [PATCH] Upgraded some dependencies --- libs/highlight.js | 44 ++++++++++ libs/markdown.js | 131 +++++++++++++++++++++++++++++ package.json | 26 +++--- static/mathjax.css | 205 +++++++++++++++++++++++++++++++++++++-------- static/style.css | 8 -- utility.js | 36 +------- views/header.ejs | 6 +- 7 files changed, 364 insertions(+), 92 deletions(-) create mode 100644 libs/highlight.js create mode 100644 libs/markdown.js diff --git a/libs/highlight.js b/libs/highlight.js new file mode 100644 index 0000000..43a8760 --- /dev/null +++ b/libs/highlight.js @@ -0,0 +1,44 @@ +/* + * This file is part of moemark-renderer. + * + * Copyright (c) 2016 Menci + * + * moemark-renderer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * moemark-renderer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with moemark-renderer. If not, see . + */ + +const pygmentize = require('pygmentize-bundled-cached'); + +function escapeHTML(s) { + // Code from http://stackoverflow.com/questions/5251520/how-do-i-escape-some-html-in-javascript/5251551 + return s.replace(/[^0-9A-Za-z ]/g, (c) => { + return "&#" + c.charCodeAt(0) + ";"; + }); +} + +module.exports = (code, lang, cb) => { + pygmentize({ + lang: lang, + format: 'html', + options: { + nowrap: true, + classprefix: 'pl-' + } + }, code, (err, res) => { + if (err || res.toString() === 'undefined') { + cb(escapeHTML(code)); + } else { + cb(res); + } + }); +} diff --git a/libs/markdown.js b/libs/markdown.js new file mode 100644 index 0000000..19b3519 --- /dev/null +++ b/libs/markdown.js @@ -0,0 +1,131 @@ +/* + * This file is part of moemark-renderer. + * + * Copyright (c) 2016 Menci + * + * moemark-renderer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * moemark-renderer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with moemark-renderer. If not, see . + */ + +const MoeMark = require('moemark'); +const katex = require('katex'); +const mj = require('mathjax-node'); + +let defaultCache = { + data: {}, + get(key) { + return this.data[key]; + }, + set(key, val) { + this.data[key] = val; + } +}; + +let config = { + highlight: require('./highlight') +}; + +function render(s, cb) { + if (!s.trim()) return cb(''); + + let mathCnt = 0, mathPending = 0, maths = new Array(), hlCnt = 0, hlPending = 0, hls = new Array(), res, callback, ss, cache = render.cache, cacheOption = render.cacheOption, finished = false; + if (cacheOption.result) { + let x = cache.get('RES_' + s); + if (x !== undefined) return cb(x); + } + + MoeMark.setOptions({ + lineNumber: false, + math: true, + highlight: function(code, lang) { + if (cacheOption.highlight) { + let x = cache.get('H_' + lang + '_' + code); + if (x !== undefined) return x; + } + let id = hlCnt; + hlCnt++, hlPending++; + config.highlight(code, lang, res => { + hls[id] = res; + if (cacheOption.highlight) cache.set('H_' + lang + '_' + code, res); + if (!--hlPending) finish(); + }); + return ''; + }, + mathRenderer: function(str, display) { + if (cacheOption.math) { + let x = cache.get('M_' + display + '_' + str); + if (x !== undefined) return x; + } + try { + let res = katex.renderToString(str, { displayMode: display }); + if (cacheOption.math) cache.set('M_' + display + '_' + str, res); + return res; + } catch (e) { + const id = mathCnt; + mathCnt++, mathPending++; + mj.typeset({ + math: str, + format: display ? 'TeX' : 'inline-TeX', + html: true, css: true, + width: 0 + }, function (data) { + if (data.errors) maths[id] = '

' + data.errors.toString() + '

'; + else if (display) maths[id] = '

' + data.html + '

'; + else maths[id] = data.html; + if (cacheOption.math) cache.set('M_' + display + '_' + str, maths[id]); + if (!--mathPending) finish(); + }); + + return ''; + } + } + }); + + function finish() { + if (finished || !res || mathPending || hlPending) return; + finished = true; + if (maths.length || hls.length) { + let x = new (require('jsdom').JSDOM)().window.document.createElement('div'); + x.innerHTML = res; + for (let i = 0; i < maths.length; i++) { + x.querySelector('#math-' + i).outerHTML = maths[i]; + } + for (let i = 0; i < hls.length; i++) { + x.querySelector('#hl-' + i).outerHTML = hls[i]; + } + res = x.innerHTML; + } + if (cacheOption.result) cache.set('RES_' + s, res); + cb(res); + } + + try { + res = MoeMark(s); + if (mathPending == 0 && hlPending == 0) { + finish(); + } + } catch(e) { + cb(e); + } +}; + +render.moemark = MoeMark; +render.cache = defaultCache; +render.cacheOption = { + highlight: true, + math: true, + result: false +}; +render.config = config; + +module.exports = render; diff --git a/package.json b/package.json index bc9614f..35c8ef1 100644 --- a/package.json +++ b/package.json @@ -24,25 +24,27 @@ "homepage": "https://github.com/syzoj/syzoj#readme", "dependencies": { "amqplib": "^0.5.2", - "ansi-to-html": "^0.4.2", - "async-lock": "^0.3.9", + "ansi-to-html": "^0.6.8", + "async-lock": "^1.1.3", "body-parser": "^1.15.2", "cheerio": "^1.0.0-rc.1", - "command-line-args": "^4.0.7", + "command-line-args": "^5.0.2", "cookie-parser": "^1.4.3", "cssfilter": "0.0.10", - "download": "^5.0.3", + "download": "^7.1.0", "ejs": "^2.5.2", "express": "^4.14.0", "express-session": "^1.14.1", "file-size": "^1.0.0", - "fs-extra": "^4.0.1", + "fs-extra": "^7.0.0", "gravatar": "^1.5.2", "js-yaml": "^3.9.0", - "jsondiffpatch": "0.2.4", - "jsonwebtoken": "^7.4.3", - "katex": "^0.10.0-rc.1", - "moemark-renderer": "^1.2.6", + "jsdom": "^13.0.0", + "jsondiffpatch": "0.3.11", + "jsonwebtoken": "^8.3.0", + "katex": "^0.10.0", + "mathjax-node": "^2.1.1", + "moemark": "^0.3.10", "moment": "^2.15.0", "msgpack-lite": "^0.1.26", "multer": "^1.2.0", @@ -57,11 +59,11 @@ "sequelize": "^4.41.0", "session-file-store": "^1.0.0", "socket.io": "^2.0.3", - "sqlite3": "^3.1.4", + "sqlite3": "^4.0.3", "syzoj-divine": "^1.0.2", "tmp-promise": "^1.0.3", "waliyun": "^3.1.1", - "winston": "^2.3.1", - "xss": "^0.3.3" + "winston": "^3.1.0", + "xss": "^1.0.3" } } diff --git a/static/mathjax.css b/static/mathjax.css index c19242f..b87be21 100644 --- a/static/mathjax.css +++ b/static/mathjax.css @@ -1,7 +1,6 @@ -.MJX_Assistive_MathML {position: absolute!important; top: 0; left: 0; clip: rect(1px, 1px, 1px, 1px); padding: 1px 0 0 0!important; border: 0!important; height: 1px!important; width: 1px!important; overflow: hidden!important; display: block!important; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none} -.MJX_Assistive_MathML.MJX_Assistive_MathML_Block {width: 100%!important} -.mjx-chtml {display: inline-block; line-height: 0; text-indent: 0; text-align: left; text-transform: none; font-style: normal; font-weight: normal; font-size: 1.19em; font-size-adjust: none; letter-spacing: normal; word-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; margin: 0; padding: 1px 0} -.MJXc-display {display: block; text-align: center; margin: 1em 0; padding: 0; font-size: 1em !important; } +.mjx-chtml {display: inline-block; line-height: 0; text-indent: 0; text-align: left; text-transform: none; font-style: normal; font-weight: normal; font-size: 1.19em !important; font-size-adjust: +none; letter-spacing: normal; word-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; margin: 0; padding: 1px 0} +.MJXc-display {display: block; text-align: center; margin: 1em 0; padding: 0} .mjx-chtml[tabindex]:focus, body :focus .mjx-chtml[tabindex] {display: inline-table} .mjx-full-width {text-align: center; display: table-cell!important; width: 10000em} .mjx-math {display: inline-block; border-collapse: separate; border-spacing: 0} @@ -45,20 +44,17 @@ .MJXc-space1 {margin-left: .167em} .MJXc-space2 {margin-left: .222em} .MJXc-space3 {margin-left: .278em} -.mjx-chartest {display: block; visibility: hidden; position: absolute; top: 0; line-height: normal; font-size: 500%} -.mjx-chartest .mjx-char {display: inline} -.mjx-chartest .mjx-box {padding-top: 1000px} -.MJXc-processed {display: none} -.mjx-test {display: block; font-style: normal; font-weight: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow: hidden; height: 1px} -.mjx-ex-box-test {position: absolute; width: 1px; height: 60ex} -.mjx-line-box-test {display: table!important} -.mjx-line-box-test span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} -#MathJax_CHTML_Tooltip {background-color: InfoBackground; color: InfoText; border: 1px solid black; box-shadow: 2px 2px 5px #AAAAAA; -webkit-box-shadow: 2px 2px 5px #AAAAAA; -moz-box-shadow: 2px 2px 5px #AAAAAA; -khtml-box-shadow: 2px 2px 5px #AAAAAA; padding: 3px 4px; z-index: 401; position: absolute; left: 0; top: 0; width: auto; height: auto; display: none} -.mjx-chtml .mjx-noError {line-height: 1.2; vertical-align: ; font-size: 90%; text-align: left; color: black; padding: 1px 3px; border: 1px solid} -.MJXc-TeX-unknown-R {font-family: STIXGeneral,'Cambria Math','Arial Unicode MS',serif; font-style: normal; font-weight: normal} -.MJXc-TeX-unknown-I {font-family: STIXGeneral,'Cambria Math','Arial Unicode MS',serif; font-style: italic; font-weight: normal} -.MJXc-TeX-unknown-B {font-family: STIXGeneral,'Cambria Math','Arial Unicode MS',serif; font-style: normal; font-weight: bold} -.MJXc-TeX-unknown-BI {font-family: STIXGeneral,'Cambria Math','Arial Unicode MS',serif; font-style: italic; font-weight: bold} +.mjx-test.mjx-test-display {display: table!important} +.mjx-test.mjx-test-inline {display: inline!important; margin-right: -1px} +.mjx-test.mjx-test-default {display: block!important; clear: both} +.mjx-ex-box {display: inline-block!important; position: absolute; overflow: hidden; min-height: 0; max-height: none; padding: 0; border: 0; margin: 0; width: 1px; height: 60ex} +.mjx-test-inline .mjx-left-box {display: inline-block; width: 0; float: left} +.mjx-test-inline .mjx-right-box {display: inline-block; width: 0; float: right} +.mjx-test-display .mjx-right-box {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} +.MJXc-TeX-unknown-R {font-family: monospace; font-style: normal; font-weight: normal} +.MJXc-TeX-unknown-I {font-family: monospace; font-style: italic; font-weight: normal} +.MJXc-TeX-unknown-B {font-family: monospace; font-style: normal; font-weight: bold} +.MJXc-TeX-unknown-BI {font-family: monospace; font-style: italic; font-weight: bold} .MJXc-TeX-ams-R {font-family: MJXc-TeX-ams-R,MJXc-TeX-ams-Rw} .MJXc-TeX-cal-B {font-family: MJXc-TeX-cal-B,MJXc-TeX-cal-Bx,MJXc-TeX-cal-Bw} .MJXc-TeX-frak-R {font-family: MJXc-TeX-frak-R,MJXc-TeX-frak-Rw} @@ -78,49 +74,184 @@ .MJXc-TeX-size2-R {font-family: MJXc-TeX-size2-R,MJXc-TeX-size2-Rw} .MJXc-TeX-size3-R {font-family: MJXc-TeX-size3-R,MJXc-TeX-size3-Rw} .MJXc-TeX-size4-R {font-family: MJXc-TeX-size4-R,MJXc-TeX-size4-Rw} +.MJXc-TeX-vec-R {font-family: MJXc-TeX-vec-R,MJXc-TeX-vec-Rw} +.MJXc-TeX-vec-B {font-family: MJXc-TeX-vec-B,MJXc-TeX-vec-Bx,MJXc-TeX-vec-Bw} @font-face {font-family: MJXc-TeX-ams-R; src: local('MathJax_AMS'), local('MathJax_AMS-Regular')} -@font-face {font-family: MJXc-TeX-ams-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_AMS-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_AMS-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-ams-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_AMS-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_AMS-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-cal-B; src: local('MathJax_Caligraphic Bold'), local('MathJax_Caligraphic-Bold')} @font-face {font-family: MJXc-TeX-cal-Bx; src: local('MathJax_Caligraphic'); font-weight: bold} -@font-face {font-family: MJXc-TeX-cal-Bw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Bold.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Bold.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-cal-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Bold.otf') format('opentype')} @font-face {font-family: MJXc-TeX-frak-R; src: local('MathJax_Fraktur'), local('MathJax_Fraktur-Regular')} -@font-face {font-family: MJXc-TeX-frak-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-frak-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-frak-B; src: local('MathJax_Fraktur Bold'), local('MathJax_Fraktur-Bold')} @font-face {font-family: MJXc-TeX-frak-Bx; src: local('MathJax_Fraktur'); font-weight: bold} -@font-face {font-family: MJXc-TeX-frak-Bw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Bold.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Bold.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-frak-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Bold.otf') format('opentype')} @font-face {font-family: MJXc-TeX-math-BI; src: local('MathJax_Math BoldItalic'), local('MathJax_Math-BoldItalic')} @font-face {font-family: MJXc-TeX-math-BIx; src: local('MathJax_Math'); font-weight: bold; font-style: italic} -@font-face {font-family: MJXc-TeX-math-BIw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Math-BoldItalic.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Math-BoldItalic.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Math-BoldItalic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-math-BIw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Math-BoldItalic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Math-BoldItalic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Math-BoldItalic.otf') format('opentype')} @font-face {font-family: MJXc-TeX-sans-R; src: local('MathJax_SansSerif'), local('MathJax_SansSerif-Regular')} -@font-face {font-family: MJXc-TeX-sans-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-sans-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-sans-B; src: local('MathJax_SansSerif Bold'), local('MathJax_SansSerif-Bold')} @font-face {font-family: MJXc-TeX-sans-Bx; src: local('MathJax_SansSerif'); font-weight: bold} -@font-face {font-family: MJXc-TeX-sans-Bw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Bold.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Bold.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-sans-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Bold.otf') format('opentype')} @font-face {font-family: MJXc-TeX-sans-I; src: local('MathJax_SansSerif Italic'), local('MathJax_SansSerif-Italic')} @font-face {font-family: MJXc-TeX-sans-Ix; src: local('MathJax_SansSerif'); font-style: italic} -@font-face {font-family: MJXc-TeX-sans-Iw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Italic.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Italic.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Italic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-sans-Iw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Italic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Italic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Italic.otf') format('opentype')} @font-face {font-family: MJXc-TeX-script-R; src: local('MathJax_Script'), local('MathJax_Script-Regular')} -@font-face {font-family: MJXc-TeX-script-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Script-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Script-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Script-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-script-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Script-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Script-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Script-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-type-R; src: local('MathJax_Typewriter'), local('MathJax_Typewriter-Regular')} -@font-face {font-family: MJXc-TeX-type-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Typewriter-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Typewriter-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Typewriter-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-type-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Typewriter-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Typewriter-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Typewriter-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-cal-R; src: local('MathJax_Caligraphic'), local('MathJax_Caligraphic-Regular')} -@font-face {font-family: MJXc-TeX-cal-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-cal-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-main-B; src: local('MathJax_Main Bold'), local('MathJax_Main-Bold')} @font-face {font-family: MJXc-TeX-main-Bx; src: local('MathJax_Main'); font-weight: bold} -@font-face {font-family: MJXc-TeX-main-Bw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Main-Bold.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Main-Bold.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Main-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-main-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Main-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Main-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Main-Bold.otf') format('opentype')} @font-face {font-family: MJXc-TeX-main-I; src: local('MathJax_Main Italic'), local('MathJax_Main-Italic')} @font-face {font-family: MJXc-TeX-main-Ix; src: local('MathJax_Main'); font-style: italic} -@font-face {font-family: MJXc-TeX-main-Iw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Main-Italic.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Main-Italic.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Main-Italic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-main-Iw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Main-Italic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Main-Italic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Main-Italic.otf') format('opentype')} @font-face {font-family: MJXc-TeX-main-R; src: local('MathJax_Main'), local('MathJax_Main-Regular')} -@font-face {font-family: MJXc-TeX-main-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Main-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Main-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-main-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Main-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Main-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-math-I; src: local('MathJax_Math Italic'), local('MathJax_Math-Italic')} @font-face {font-family: MJXc-TeX-math-Ix; src: local('MathJax_Math'); font-style: italic} -@font-face {font-family: MJXc-TeX-math-Iw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Math-Italic.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Math-Italic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-math-Iw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Math-Italic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Math-Italic.otf') format('opentype')} @font-face {font-family: MJXc-TeX-size1-R; src: local('MathJax_Size1'), local('MathJax_Size1-Regular')} -@font-face {font-family: MJXc-TeX-size1-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Size1-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Size1-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size1-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size1-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size1-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-size2-R; src: local('MathJax_Size2'), local('MathJax_Size2-Regular')} -@font-face {font-family: MJXc-TeX-size2-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Size2-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Size2-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size2-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size2-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size2-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-size3-R; src: local('MathJax_Size3'), local('MathJax_Size3-Regular')} -@font-face {font-family: MJXc-TeX-size3-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Size3-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Size3-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size3-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size3-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size3-Regular.otf') format('opentype')} @font-face {font-family: MJXc-TeX-size4-R; src: local('MathJax_Size4'), local('MathJax_Size4-Regular')} -@font-face {font-family: MJXc-TeX-size4-Rw; src /*1*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/eot/MathJax_Size4-Regular.eot'); src /*2*/: url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff') format('woff'), url('https://cdn.loli.net/ajax/libs/mathjax/2.7.0/fonts/HTML-CSS/TeX/otf/MathJax_Size4-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size4-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size4-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size4-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-vec-R; src: local('MathJax_Vector'), local('MathJax_Vector-Regular')} +@font-face {font-family: MJXc-TeX-vec-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Vector-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Vector-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Vector-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-vec-B; src: local('MathJax_Vector Bold'), local('MathJax_Vector-Bold')} +@font-face {font-family: MJXc-TeX-vec-Bx; src: local('MathJax_Vector'); font-weight: bold} +@font-face {font-family: MJXc-TeX-vec-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Vector-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Vector-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Vector-Bold.otf') format('opentype')}.mjx-chtml {display: inline-block; line-height: 0; text-indent: 0; text-align: left; text-transform: none; font-style: normal; font-weight: normal; font-size: 100%; font-size-adjust: +none; letter-spacing: normal; word-wrap: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; margin: 0; padding: 1px 0} +.MJXc-display {display: block; text-align: center; margin: 1em 0; padding: 0} +.mjx-chtml[tabindex]:focus, body :focus .mjx-chtml[tabindex] {display: inline-table} +.mjx-full-width {text-align: center; display: table-cell!important; width: 10000em} +.mjx-math {display: inline-block; border-collapse: separate; border-spacing: 0} +.mjx-math * {display: inline-block; -webkit-box-sizing: content-box!important; -moz-box-sizing: content-box!important; box-sizing: content-box!important; text-align: left} +.mjx-numerator {display: block; text-align: center} +.mjx-denominator {display: block; text-align: center} +.MJXc-stacked {height: 0; position: relative} +.MJXc-stacked > * {position: absolute} +.MJXc-bevelled > * {display: inline-block} +.mjx-stack {display: inline-block} +.mjx-op {display: block} +.mjx-under {display: table-cell} +.mjx-over {display: block} +.mjx-over > * {padding-left: 0px!important; padding-right: 0px!important} +.mjx-under > * {padding-left: 0px!important; padding-right: 0px!important} +.mjx-stack > .mjx-sup {display: block} +.mjx-stack > .mjx-sub {display: block} +.mjx-prestack > .mjx-presup {display: block} +.mjx-prestack > .mjx-presub {display: block} +.mjx-delim-h > .mjx-char {display: inline-block} +.mjx-surd {vertical-align: top} +.mjx-mphantom * {visibility: hidden} +.mjx-merror {background-color: #FFFF88; color: #CC0000; border: 1px solid #CC0000; padding: 2px 3px; font-style: normal; font-size: 90%} +.mjx-annotation-xml {line-height: normal} +.mjx-menclose > svg {fill: none; stroke: currentColor} +.mjx-mtr {display: table-row} +.mjx-mlabeledtr {display: table-row} +.mjx-mtd {display: table-cell; text-align: center} +.mjx-label {display: table-row} +.mjx-box {display: inline-block} +.mjx-block {display: block} +.mjx-span {display: inline} +.mjx-char {display: block; white-space: pre} +.mjx-itable {display: inline-table; width: auto} +.mjx-row {display: table-row} +.mjx-cell {display: table-cell} +.mjx-table {display: table; width: 100%} +.mjx-line {display: block; height: 0} +.mjx-strut {width: 0; padding-top: 1em} +.mjx-vsize {width: 0} +.MJXc-space1 {margin-left: .167em} +.MJXc-space2 {margin-left: .222em} +.MJXc-space3 {margin-left: .278em} +.mjx-test.mjx-test-display {display: table!important} +.mjx-test.mjx-test-inline {display: inline!important; margin-right: -1px} +.mjx-test.mjx-test-default {display: block!important; clear: both} +.mjx-ex-box {display: inline-block!important; position: absolute; overflow: hidden; min-height: 0; max-height: none; padding: 0; border: 0; margin: 0; width: 1px; height: 60ex} +.mjx-test-inline .mjx-left-box {display: inline-block; width: 0; float: left} +.mjx-test-inline .mjx-right-box {display: inline-block; width: 0; float: right} +.mjx-test-display .mjx-right-box {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} +.MJXc-TeX-unknown-R {font-family: monospace; font-style: normal; font-weight: normal} +.MJXc-TeX-unknown-I {font-family: monospace; font-style: italic; font-weight: normal} +.MJXc-TeX-unknown-B {font-family: monospace; font-style: normal; font-weight: bold} +.MJXc-TeX-unknown-BI {font-family: monospace; font-style: italic; font-weight: bold} +.MJXc-TeX-ams-R {font-family: MJXc-TeX-ams-R,MJXc-TeX-ams-Rw} +.MJXc-TeX-cal-B {font-family: MJXc-TeX-cal-B,MJXc-TeX-cal-Bx,MJXc-TeX-cal-Bw} +.MJXc-TeX-frak-R {font-family: MJXc-TeX-frak-R,MJXc-TeX-frak-Rw} +.MJXc-TeX-frak-B {font-family: MJXc-TeX-frak-B,MJXc-TeX-frak-Bx,MJXc-TeX-frak-Bw} +.MJXc-TeX-math-BI {font-family: MJXc-TeX-math-BI,MJXc-TeX-math-BIx,MJXc-TeX-math-BIw} +.MJXc-TeX-sans-R {font-family: MJXc-TeX-sans-R,MJXc-TeX-sans-Rw} +.MJXc-TeX-sans-B {font-family: MJXc-TeX-sans-B,MJXc-TeX-sans-Bx,MJXc-TeX-sans-Bw} +.MJXc-TeX-sans-I {font-family: MJXc-TeX-sans-I,MJXc-TeX-sans-Ix,MJXc-TeX-sans-Iw} +.MJXc-TeX-script-R {font-family: MJXc-TeX-script-R,MJXc-TeX-script-Rw} +.MJXc-TeX-type-R {font-family: MJXc-TeX-type-R,MJXc-TeX-type-Rw} +.MJXc-TeX-cal-R {font-family: MJXc-TeX-cal-R,MJXc-TeX-cal-Rw} +.MJXc-TeX-main-B {font-family: MJXc-TeX-main-B,MJXc-TeX-main-Bx,MJXc-TeX-main-Bw} +.MJXc-TeX-main-I {font-family: MJXc-TeX-main-I,MJXc-TeX-main-Ix,MJXc-TeX-main-Iw} +.MJXc-TeX-main-R {font-family: MJXc-TeX-main-R,MJXc-TeX-main-Rw} +.MJXc-TeX-math-I {font-family: MJXc-TeX-math-I,MJXc-TeX-math-Ix,MJXc-TeX-math-Iw} +.MJXc-TeX-size1-R {font-family: MJXc-TeX-size1-R,MJXc-TeX-size1-Rw} +.MJXc-TeX-size2-R {font-family: MJXc-TeX-size2-R,MJXc-TeX-size2-Rw} +.MJXc-TeX-size3-R {font-family: MJXc-TeX-size3-R,MJXc-TeX-size3-Rw} +.MJXc-TeX-size4-R {font-family: MJXc-TeX-size4-R,MJXc-TeX-size4-Rw} +.MJXc-TeX-vec-R {font-family: MJXc-TeX-vec-R,MJXc-TeX-vec-Rw} +.MJXc-TeX-vec-B {font-family: MJXc-TeX-vec-B,MJXc-TeX-vec-Bx,MJXc-TeX-vec-Bw} +@font-face {font-family: MJXc-TeX-ams-R; src: local('MathJax_AMS'), local('MathJax_AMS-Regular')} +@font-face {font-family: MJXc-TeX-ams-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_AMS-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_AMS-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-cal-B; src: local('MathJax_Caligraphic Bold'), local('MathJax_Caligraphic-Bold')} +@font-face {font-family: MJXc-TeX-cal-Bx; src: local('MathJax_Caligraphic'); font-weight: bold} +@font-face {font-family: MJXc-TeX-cal-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-frak-R; src: local('MathJax_Fraktur'), local('MathJax_Fraktur-Regular')} +@font-face {font-family: MJXc-TeX-frak-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-frak-B; src: local('MathJax_Fraktur Bold'), local('MathJax_Fraktur-Bold')} +@font-face {font-family: MJXc-TeX-frak-Bx; src: local('MathJax_Fraktur'); font-weight: bold} +@font-face {font-family: MJXc-TeX-frak-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Fraktur-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Fraktur-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-math-BI; src: local('MathJax_Math BoldItalic'), local('MathJax_Math-BoldItalic')} +@font-face {font-family: MJXc-TeX-math-BIx; src: local('MathJax_Math'); font-weight: bold; font-style: italic} +@font-face {font-family: MJXc-TeX-math-BIw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Math-BoldItalic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Math-BoldItalic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Math-BoldItalic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-sans-R; src: local('MathJax_SansSerif'), local('MathJax_SansSerif-Regular')} +@font-face {font-family: MJXc-TeX-sans-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-sans-B; src: local('MathJax_SansSerif Bold'), local('MathJax_SansSerif-Bold')} +@font-face {font-family: MJXc-TeX-sans-Bx; src: local('MathJax_SansSerif'); font-weight: bold} +@font-face {font-family: MJXc-TeX-sans-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-sans-I; src: local('MathJax_SansSerif Italic'), local('MathJax_SansSerif-Italic')} +@font-face {font-family: MJXc-TeX-sans-Ix; src: local('MathJax_SansSerif'); font-style: italic} +@font-face {font-family: MJXc-TeX-sans-Iw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_SansSerif-Italic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Italic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_SansSerif-Italic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-script-R; src: local('MathJax_Script'), local('MathJax_Script-Regular')} +@font-face {font-family: MJXc-TeX-script-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Script-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Script-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Script-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-type-R; src: local('MathJax_Typewriter'), local('MathJax_Typewriter-Regular')} +@font-face {font-family: MJXc-TeX-type-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Typewriter-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Typewriter-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Typewriter-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-cal-R; src: local('MathJax_Caligraphic'), local('MathJax_Caligraphic-Regular')} +@font-face {font-family: MJXc-TeX-cal-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Caligraphic-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-main-B; src: local('MathJax_Main Bold'), local('MathJax_Main-Bold')} +@font-face {font-family: MJXc-TeX-main-Bx; src: local('MathJax_Main'); font-weight: bold} +@font-face {font-family: MJXc-TeX-main-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Main-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Main-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Main-Bold.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-main-I; src: local('MathJax_Main Italic'), local('MathJax_Main-Italic')} +@font-face {font-family: MJXc-TeX-main-Ix; src: local('MathJax_Main'); font-style: italic} +@font-face {font-family: MJXc-TeX-main-Iw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Main-Italic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Main-Italic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Main-Italic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-main-R; src: local('MathJax_Main'), local('MathJax_Main-Regular')} +@font-face {font-family: MJXc-TeX-main-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Main-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Main-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-math-I; src: local('MathJax_Math Italic'), local('MathJax_Math-Italic')} +@font-face {font-family: MJXc-TeX-math-Ix; src: local('MathJax_Math'); font-style: italic} +@font-face {font-family: MJXc-TeX-math-Iw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Math-Italic.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Math-Italic.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size1-R; src: local('MathJax_Size1'), local('MathJax_Size1-Regular')} +@font-face {font-family: MJXc-TeX-size1-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size1-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size1-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size2-R; src: local('MathJax_Size2'), local('MathJax_Size2-Regular')} +@font-face {font-family: MJXc-TeX-size2-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size2-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size2-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size3-R; src: local('MathJax_Size3'), local('MathJax_Size3-Regular')} +@font-face {font-family: MJXc-TeX-size3-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size3-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size3-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-size4-R; src: local('MathJax_Size4'), local('MathJax_Size4-Regular')} +@font-face {font-family: MJXc-TeX-size4-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Size4-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Size4-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-vec-R; src: local('MathJax_Vector'), local('MathJax_Vector-Regular')} +@font-face {font-family: MJXc-TeX-vec-Rw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Vector-Regular.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Vector-Regular.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Vector-Regular.otf') format('opentype')} +@font-face {font-family: MJXc-TeX-vec-B; src: local('MathJax_Vector Bold'), local('MathJax_Vector-Bold')} +@font-face {font-family: MJXc-TeX-vec-Bx; src: local('MathJax_Vector'); font-weight: bold} +@font-face {font-family: MJXc-TeX-vec-Bw; src /*1*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/eot/MathJax_Vector-Bold.eot'); src /*2*/: url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/woff/MathJax_Vector-Bold.woff') format('woff'), url('https://cdnjs.loli.net/ajax/libs/mathjax/2.7.5/fonts/HTML-CSS/TeX/otf/MathJax_Vector-Bold.otf') format('opentype') diff --git a/static/style.css b/static/style.css index 2be8bea..f894d95 100644 --- a/static/style.css +++ b/static/style.css @@ -100,14 +100,6 @@ body > .ui.page.dimmer { position: fixed !important; } -/* status color */ - -/* -.accordion .status_detail { - transition: color .1s ease; -} -*/ - :not(.status_detail).status.success, .title:hover .status_detail.status.success, .title.active .status_detail.status.success, diff --git a/utility.js b/utility.js index a01c2d8..e3a43ed 100644 --- a/utility.js +++ b/utility.js @@ -40,41 +40,14 @@ let Promise = require('bluebird'); let path = require('path'); let fs = Promise.promisifyAll(require('fs-extra')); let util = require('util'); -let renderer = require('moemark-renderer'); +let markdownRenderer = require('./libs/markdown'); let moment = require('moment'); let url = require('url'); let querystring = require('querystring'); -let pygmentize = require('pygmentize-bundled-cached'); let gravatar = require('gravatar'); let filesize = require('file-size'); let AsyncLock = require('async-lock'); -function escapeHTML(s) { - // Code from http://stackoverflow.com/questions/5251520/how-do-i-escape-some-html-in-javascript/5251551 - return s.replace(/[^0-9A-Za-z ]/g, (c) => { - return "&#" + c.charCodeAt(0) + ";"; - }); -} - -function highlightPygmentize(code, lang, cb) { - pygmentize({ - lang: lang, - format: 'html', - options: { - nowrap: true, - classprefix: 'pl-' - } - }, code, (err, res) => { - if (err || res.toString() === 'undefined') { - cb(escapeHTML(code)); - } else { - cb(res); - } - }); -} - -renderer.config.highlight = highlightPygmentize; - module.exports = { resolvePath(s) { let a = Array.from(arguments); @@ -137,13 +110,13 @@ module.exports = { return new Promise((resolve, reject) => { if (!keys) { if (!obj || !obj.trim()) resolve(""); - else renderer(obj, { mathjaxUseHtml: true }, s => { + else markdownRenderer(obj, s => { resolve(replaceUI(replaceXSS(s))); }); } else { let res = obj, cnt = keys.length; for (let key of keys) { - renderer(res[key], { mathjaxUseHtml: true }, (s) => { + markdownRenderer(res[key], (s) => { res[key] = replaceUI(replaceXSS(s)); if (!--cnt) resolve(res); }); @@ -206,10 +179,9 @@ module.exports = { if (encoded) res += '?' + encoded; return res; }, - escapeHTML: escapeHTML, highlight(code, lang) { return new Promise((resolve, reject) => { - highlightPygmentize(code, lang, res => { + require('./libs/highlight')(code, lang, res => { resolve(res); }); }); diff --git a/views/header.ejs b/views/header.ejs index de22f27..09c6f07 100644 --- a/views/header.ejs +++ b/views/header.ejs @@ -8,10 +8,10 @@ <%= title %> - <%= syzoj.config.title %> - - + + - +