Commit 5b82eb97 authored by RawKStar77's avatar RawKStar77

Add KaTex math rendering

Add KaTex javascript, CSS, and fonts to vendor folder.

Create a renderMath() function that parses sanitized markdown for math as denoted by '$$'

Modify ctrl.$render to first sanitize the markdown and then renderMath. Newly rendered
math is then trusted as HTML becuase otherwise ngSanatize removes crucial style attributes
that leave the math unreadable.
parent 18d062f8
......@@ -7,7 +7,7 @@
# the markdown editor.
###
markdown = ['$filter', '$timeout', ($filter, $timeout) ->
markdown = ['$filter', '$sanitize', '$sce', '$timeout', ($filter, $sanitize, $sce, $timeout) ->
link: (scope, elem, attr, ctrl) ->
return unless ctrl?
......@@ -251,10 +251,39 @@ markdown = ['$filter', '$timeout', ($filter, $timeout) ->
input.style.height = output.style.height
$timeout -> inputEl.focus()
scope.renderMath = (textToCheck) ->
# Parses text for math as denoted by '$$'
i = 0
startMath = null
endMath = null
for char in textToCheck
if char == "$" and textToCheck[i + 1] == "$"
if startMath == null
startMath = i + 2
else
endMath = i
i++
if startMath != null and endMath != null
try
math = katex.renderToString(textToCheck.substring(startMath, endMath))
catch error
# Show error on the frontend so users have some insight of which Tex Commands
# caused the error. KaTex does not yet support all Tex Commands.
math = error
textToCheck = textToCheck.substring(0, (startMath - 2)) + math + textToCheck.substring((endMath + 2))
startMath = null
endMath = null
scope.renderMath(textToCheck)
return textToCheck
# Re-render the markdown when the view needs updating.
ctrl.$render = ->
inputEl.val (ctrl.$viewValue or '')
scope.rendered = ($filter 'converter') (ctrl.$viewValue or '')
if !scope.readonly and !scope.preview
inputEl.val (ctrl.$viewValue or '')
value = ctrl.$viewValue or ''
markdown = $sanitize $filter('converter') value
rendered = scope.renderMath markdown
scope.rendered = $sce.trustAsHtml rendered
# React to the changes to the input
inputEl.bind 'blur change keyup', ->
......
# [<img src="https://khan.github.io/KaTeX/katex-logo.svg" width="130" alt="KaTeX">](http://khan.github.io/KaTeX/) [![Build Status](https://travis-ci.org/Khan/KaTeX.svg?branch=master)](https://travis-ci.org/Khan/KaTeX)
KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.
* **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://jsperf.com/katex-vs-mathjax/).
* **Print quality:** KaTeX’s layout is based on Donald Knuth’s TeX, the gold standard for math typesetting.
* **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources.
* **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.
KaTeX supports all major browsers, including Chrome, Safari, Firefox, Opera, and IE 8 - IE 11.
## Usage
Download the built files from [the releases page](https://github.com/khan/katex/releases). Include the `katex.min.js` and `katex.min.css` files on your page:
```html
<link rel="stylesheet" type="text/css" href="/path/to/katex.min.css">
<script src="/path/to/katex.min.js" type="text/javascript"></script>
```
Call `katex.render` with a TeX expression and a DOM element to render into:
```js
katex.render("c = \\pm\\sqrt{a^2 + b^2}", element);
```
To generate HTML on the server, you can use `katex.renderToString`:
```js
var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}");
// '<span class="katex">...</span>'
```
Make sure to include the CSS and font files, but there is no need to include the JavaScript.
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md)
## License
KaTeX is licenced under the [MIT License](http://opensource.org/licenses/MIT).
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment