├── .gitignore ├── README.md ├── demo.gif ├── demo2.gif ├── package.json ├── src ├── css │ ├── dialog.css │ ├── dialog.less │ └── mathquill.css └── js │ ├── main.js │ └── mathquill.min.js ├── test ├── UEditor │ ├── mathEditor │ │ ├── addMathEditorDialog.js │ │ ├── mathEdit.min.js │ │ ├── mathEditor.html │ │ └── mathEditor.png │ └── readme.md ├── simple.html └── wangEditor │ ├── wangEditor.html │ └── wangEditor.js └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## 初体验 3 | 1. 在html中引入dist文件内打包后的js和css: 4 | ````javascript 5 | // 依赖jq 6 | 7 | ```` 8 | 2. 在html中使用(可以参考test/simple.html) 9 | ````javascript 10 |
11 | 12 | 13 | 28 | ```` 29 | ## API 30 | |名称|功能|使用| 31 | |--|--|--| 32 | |getValue|获取用户输入值(返回html)|mathEdit.getValue()| 33 | |getLatex|获取用户输入值(返回latex格式)|mathEdit.getLatex()| 34 | |isEmpty|判断输入框是否为空|mathEdit.isEmpty()| 35 | ## options配置 36 | |属性|描述|类型|默认值|必输| 37 | |--|--|--|--|--| 38 | |elId|容器id|字符串|无|是| 39 | |config|配置更多|对象|{defaultFontSize: '18px',viewFontSize: '14px'}|否| 40 | |config.defaultFontSize|输入时显示的字体大小|字符串|'18px'|否| 41 | |config.viewFontSize|输出的html显示的字体大小|字符串|'14px'|否| 42 | 43 | ## 演示(参考test/simple.html) 44 | ![](https://img-blog.csdnimg.cn/20201221141743788.gif#pic_center) 45 | 46 | ## 嵌入演示 47 | ### wangEditor(参考test/wangEditor/wangEditor.html) 48 | ![嵌入演示](https://img-blog.csdnimg.cn/2020122114180335.gif#pic_center) 49 | ### UEditor(参考test/UEditor/readme.md) 50 | ![嵌入演示](https://img-blog.csdnimg.cn/ad8c0511d5b8483fbbcbe82c341ac290.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARGVtb0p4,size_20,color_FFFFFF,t_70,g_se,x_16) 51 | 52 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DemoJj/mathEditor/84ac2066494fa8fad1f8205773a96b647c32d120/demo.gif -------------------------------------------------------------------------------- /demo2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DemoJj/mathEditor/84ac2066494fa8fad1f8205773a96b647c32d120/demo2.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mathEditor", 3 | "version": "1.2.0", 4 | "description": "基于jq的数学公式编辑器插件", 5 | "main": "index.js", 6 | "scripts": { 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "less": "^3.10.3", 13 | "less-loader": "^5.0.0", 14 | "style-loader": "^2.0.0", 15 | "css-loader": "^2.0.2" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/css/dialog.css: -------------------------------------------------------------------------------- 1 | #mathEdit1601362544188 { 2 | overflow: hidden; 3 | } 4 | #mathEdit1601362544188 div { 5 | float: left; 6 | width: 100%; 7 | } 8 | #mathEdit1601362544188 li { 9 | float: left; 10 | list-style: none; 11 | } 12 | #mathEdit1601362544188 .tabMenu { 13 | border: solid #E1E6E6 1px; 14 | width: 320px; 15 | background-color: #fff; 16 | box-sizing: border-box; 17 | } 18 | #mathEdit1601362544188 .tabTitle li { 19 | cursor: pointer; 20 | } 21 | #mathEdit1601362544188 .tabTitle li.current { 22 | background-color: white; 23 | border-top: solid #E1E6E6 1px; 24 | border-left: solid #E1E6E6 1px; 25 | border-right: solid #E1E6E6 1px; 26 | } 27 | #mathEdit1601362544188 .tabTitle { 28 | padding-left: 5px; 29 | width: 100%; 30 | box-sizing: border-box; 31 | background: #f5f7fa; 32 | } 33 | #mathEdit1601362544188 .tabTitle li { 34 | padding: 2px; 35 | padding-bottom: 7px; 36 | width: 80px; 37 | text-align: center; 38 | line-height: 16px; 39 | } 40 | #mathEdit1601362544188 .tabContent li { 41 | width: 30px; 42 | height: 30px; 43 | margin: 5px; 44 | background-image: url(data:image/png;base64,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); 45 | background-repeat: no-repeat; 46 | } 47 | #mathEdit1601362544188 .help { 48 | float: right; 49 | width: 150px; 50 | text-align: right; 51 | } 52 | #mathEdit1601362544188 .tabContent div.mathBox div.mathIcon { 53 | overflow: hidden; 54 | height: 80px; 55 | } 56 | #mathEdit1601362544188 .tabContent div.mathBox div.more { 57 | width: 95%; 58 | text-align: right; 59 | padding: 5px; 60 | cursor: pointer; 61 | } 62 | #mathEdit1601362544188 #mathDiv p { 63 | display: inline-block; 64 | } 65 | -------------------------------------------------------------------------------- /src/css/dialog.less: -------------------------------------------------------------------------------- 1 | @import './mathquill.css'; 2 | #mathEdit1601362544188 { 3 | overflow: hidden; 4 | 5 | div { 6 | float: left; 7 | width: 100%; 8 | } 9 | 10 | li { 11 | float: left; 12 | list-style: none; 13 | } 14 | 15 | .tabMenu { 16 | border: solid #E1E6E6 1px; 17 | // width: 100%; 18 | width:320px; 19 | background-color: #fff; 20 | box-sizing: border-box; 21 | } 22 | 23 | .tabTitle li { 24 | cursor: pointer; 25 | } 26 | 27 | .tabTitle li.current { 28 | background-color: white; 29 | border-top: solid #E1E6E6 1px; 30 | border-left: solid #E1E6E6 1px; 31 | border-right: solid #E1E6E6 1px; 32 | } 33 | 34 | .tabTitle { 35 | padding-left: 5px; 36 | width: 100%; 37 | box-sizing: border-box; 38 | background: #f5f7fa; 39 | } 40 | 41 | .tabTitle li { 42 | padding: 2px; 43 | padding-bottom: 7px; 44 | width: 80px; 45 | text-align: center; 46 | line-height: 16px; 47 | } 48 | 49 | .tabContent li { 50 | width: 30px; 51 | height: 30px; 52 | margin: 5px; 53 | background-image: url(data:image/png;base64,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); 54 | background-repeat: no-repeat; 55 | } 56 | 57 | .help { 58 | float: right; 59 | width: 150px; 60 | text-align: right; 61 | } 62 | 63 | .tabContent div.mathBox div.mathIcon { 64 | overflow: hidden; 65 | height: 80px; 66 | } 67 | 68 | .tabContent div.mathBox div.more { 69 | width: 95%; 70 | text-align: right; 71 | padding: 5px; 72 | cursor: pointer; 73 | } 74 | 75 | #mathDiv { 76 | p { 77 | display: inline-block; 78 | } 79 | } 80 | } -------------------------------------------------------------------------------- /src/css/mathquill.css: -------------------------------------------------------------------------------- 1 | .mathquill-editable { 2 | display: -moz-inline-box; 3 | display: inline-block; 4 | } 5 | .mathquill-editable .cursor { 6 | border-left: 1px solid black; 7 | margin-right: -1px; 8 | position: relative; 9 | z-index: 1; 10 | padding: 0; 11 | display: -moz-inline-box; 12 | display: inline-block; 13 | } 14 | .mathquill-editable .cursor.blink { 15 | visibility: hidden; 16 | } 17 | .mathquill-editable, 18 | .mathquill-embedded-latex .mathquill-editable { 19 | border: 1px solid gray; 20 | padding: 2px; 21 | } 22 | .mathquill-embedded-latex .mathquill-editable { 23 | margin: 1px; 24 | } 25 | .mathquill-editable.hasCursor, 26 | .mathquill-editable .hasCursor { 27 | -webkit-box-shadow: #68b4df 0 0 3px 2px; 28 | -moz-box-shadow: #68b4df 0 0 3px 2px; 29 | box-shadow: #68b4df 0 0 3px 2px; 30 | } 31 | .mathquill-editable .latex-command-input { 32 | color: inherit; 33 | font-family: "Courier New", monospace; 34 | border: 1px solid gray; 35 | padding-right: 1px; 36 | margin-right: 1px; 37 | margin-left: 2px; 38 | } 39 | .mathquill-editable .latex-command-input.empty { 40 | background: transparent; 41 | } 42 | .mathquill-editable .latex-command-input.hasCursor { 43 | border-color: ActiveBorder; 44 | } 45 | .mathquill-editable.empty:after, 46 | .mathquill-textbox:after, 47 | .mathquill-rendered-math .empty:after { 48 | visibility: hidden; 49 | content: 'c'; 50 | } 51 | .mathquill-editable .cursor:only-child:after, 52 | .mathquill-editable .textarea + .cursor:last-child:after { 53 | visibility: hidden; 54 | content: 'c'; 55 | } 56 | .mathquill-textbox { 57 | overflow-x: auto; 58 | overflow-y: hidden; 59 | } 60 | .mathquill-rendered-math { 61 | font-variant: normal; 62 | font-weight: normal; 63 | font-style: normal; 64 | font-size: 115%; 65 | line-height: 1; 66 | display: -moz-inline-box; 67 | display: inline-block; 68 | } 69 | .mathquill-rendered-math .non-leaf, 70 | .mathquill-rendered-math .scaled { 71 | display: -moz-inline-box; 72 | display: inline-block; 73 | } 74 | .mathquill-rendered-math var, 75 | .mathquill-rendered-math .text, 76 | .mathquill-rendered-math .nonSymbola { 77 | font-family: "Times New Roman", Symbola, serif; 78 | line-height: .9; 79 | } 80 | .mathquill-rendered-math * { 81 | font-size: inherit; 82 | line-height: inherit; 83 | margin: 0; 84 | padding: 0; 85 | border-color: black; 86 | -webkit-user-select: none; 87 | -moz-user-select: none; 88 | user-select: none; 89 | white-space: pre-wrap; 90 | } 91 | .mathquill-rendered-math .empty { 92 | background: #ccc; 93 | } 94 | .mathquill-rendered-math.empty { 95 | background: transparent; 96 | } 97 | .mathquill-rendered-math .text { 98 | font-size: 87%; 99 | } 100 | .mathquill-rendered-math .font { 101 | font: 1em "Times New Roman", Symbola, serif; 102 | } 103 | .mathquill-rendered-math .font * { 104 | font-family: inherit; 105 | font-style: inherit; 106 | } 107 | .mathquill-rendered-math b, 108 | .mathquill-rendered-math b.font { 109 | font-weight: bolder; 110 | } 111 | .mathquill-rendered-math var, 112 | .mathquill-rendered-math i, 113 | .mathquill-rendered-math i.font { 114 | font-syle: italic; 115 | } 116 | .mathquill-rendered-math var.florin { 117 | margin: 0 -0.1em; 118 | } 119 | .mathquill-rendered-math big { 120 | font-size: 125%; 121 | } 122 | .mathquill-rendered-math .roman { 123 | font-style: normal; 124 | } 125 | .mathquill-rendered-math .sans-serif { 126 | font-family: sans-serif, Symbola, serif; 127 | } 128 | .mathquill-rendered-math .monospace { 129 | font-family: monospace, Symbola, serif; 130 | } 131 | .mathquill-rendered-math .overline { 132 | border-top: 1px solid black; 133 | margin-top: 1px; 134 | } 135 | .mathquill-rendered-math .underline { 136 | border-bottom: 1px solid black; 137 | margin-bottom: 1px; 138 | } 139 | .mathquill-rendered-math .binary-operator { 140 | padding: 0 0.2em; 141 | display: -moz-inline-box; 142 | display: inline-block; 143 | } 144 | .mathquill-rendered-math .unary-operator { 145 | padding-left: 0.2em; 146 | } 147 | .mathquill-rendered-math sup, 148 | .mathquill-rendered-math sub { 149 | position: relative; 150 | font-size: 90%; 151 | } 152 | .mathquill-rendered-math sup .binary-operator, 153 | .mathquill-rendered-math sub .binary-operator { 154 | padding: 0 .1em; 155 | } 156 | .mathquill-rendered-math sup .unary-operator, 157 | .mathquill-rendered-math sub .unary-operator { 158 | padding-left: .1em; 159 | } 160 | .mathquill-rendered-math sup.limit, 161 | .mathquill-rendered-math sub.limit, 162 | .mathquill-rendered-math sup.nthroot, 163 | .mathquill-rendered-math sub.nthroot { 164 | font-size: 80%; 165 | } 166 | .mathquill-rendered-math sup .fraction, 167 | .mathquill-rendered-math sub .fraction { 168 | font-size: 70%; 169 | vertical-align: -0.4em; 170 | } 171 | .mathquill-rendered-math sup .numerator, 172 | .mathquill-rendered-math sub .numerator { 173 | padding-bottom: 0; 174 | } 175 | .mathquill-rendered-math sup .denominator, 176 | .mathquill-rendered-math sub .denominator { 177 | padding-top: 0; 178 | } 179 | .mathquill-rendered-math sup { 180 | vertical-align: .5em; 181 | } 182 | .mathquill-rendered-math sup.limit, 183 | .mathquill-rendered-math sup.nthroot { 184 | vertical-align: 0.8em; 185 | } 186 | .mathquill-rendered-math sup.nthroot { 187 | margin-right: -0.6em; 188 | margin-left: .2em; 189 | min-width: .5em; 190 | } 191 | .mathquill-rendered-math sub { 192 | vertical-align: -0.4em; 193 | } 194 | .mathquill-rendered-math sub.limit { 195 | vertical-align: -0.6em; 196 | } 197 | .mathquill-rendered-math .paren { 198 | padding: 0 .1em; 199 | vertical-align: bottom; 200 | -webkit-transform-origin: bottom center; 201 | -moz-transform-origin: bottom center; 202 | -ms-transform-origin: bottom center; 203 | -o-transform-origin: bottom center; 204 | transform-origin: bottom center; 205 | } 206 | .mathquill-rendered-math .array { 207 | vertical-align: middle; 208 | text-align: center; 209 | } 210 | .mathquill-rendered-math .array > span { 211 | display: block; 212 | } 213 | .mathquill-rendered-math .non-italicized-function { 214 | font-family: Symbola, "Times New Roman", serif; 215 | line-height: .9; 216 | font-style: normal; 217 | padding-right: .2em; 218 | } 219 | .mathquill-rendered-math .fraction { 220 | font-size: 90%; 221 | text-align: center; 222 | vertical-align: -0.5em; 223 | padding: 0 .2em; 224 | } 225 | .mathquill-rendered-math .fraction, 226 | .mathquill-rendered-math x:-moz-any-link { 227 | display: -moz-groupbox; 228 | } 229 | .mathquill-rendered-math .fraction, 230 | .mathquill-rendered-math x:-moz-any-link, 231 | .mathquill-rendered-math x:default { 232 | display: inline-block; 233 | } 234 | .mathquill-rendered-math .numerator, 235 | .mathquill-rendered-math .denominator { 236 | display: block; 237 | } 238 | .mathquill-rendered-math .numerator { 239 | padding: 0 0.1em; 240 | margin-bottom: -0.1em; 241 | } 242 | .mathquill-rendered-math .denominator { 243 | border-top: 1px solid; 244 | float: right; 245 | width: 100%; 246 | padding: .1em .1em 0 .1em; 247 | margin-right: -0.1em; 248 | margin-left: -0.1em; 249 | } 250 | .mathquill-rendered-math .sqrt-prefix { 251 | padding-top: 0; 252 | position: relative; 253 | top: .1em; 254 | vertical-align: top; 255 | -webkit-transform-origin: top; 256 | -moz-transform-origin: top; 257 | -ms-transform-origin: top; 258 | -o-transform-origin: top; 259 | transform-origin: top; 260 | } 261 | .mathquill-rendered-math .sqrt-stem { 262 | border-top: 1px solid; 263 | margin-top: 1px; 264 | padding-left: .15em; 265 | padding-right: .2em; 266 | margin-right: .1em; 267 | } 268 | .mathquill-rendered-math, 269 | .mathquill-rendered-math .mathquill-editable { 270 | cursor: text; 271 | font-family: Symbola, "Times New Roman", serif; 272 | } 273 | .mathquill-rendered-math .selection, 274 | .mathquill-editable .selection, 275 | .mathquill-rendered-math .selection .non-leaf, 276 | .mathquill-editable .selection .non-leaf, 277 | .mathquill-rendered-math .selection .scaled, 278 | .mathquill-editable .selection .scaled { 279 | background: #B4D5FE !important; 280 | background: Highlight !important; 281 | color: HighlightText; 282 | border-color: HighlightText; 283 | } 284 | .mathquill-rendered-math .selection .matrixed, 285 | .mathquill-editable .selection .matrixed { 286 | background: #39F !important; 287 | } 288 | .mathquill-rendered-math .selection .matrixed-container, 289 | .mathquill-editable .selection .matrixed-container { 290 | filter: progid:DXImageTransform.Microsoft.Chroma(color='#3399FF') !important; 291 | } 292 | .mathquill-rendered-math .selection.blur, 293 | .mathquill-editable .selection.blur, 294 | .mathquill-rendered-math .selection.blur .non-leaf, 295 | .mathquill-editable .selection.blur .non-leaf, 296 | .mathquill-rendered-math .selection.blur .matrixed, 297 | .mathquill-editable .selection.blur .matrixed { 298 | background: #D4D4D4 !important; 299 | color: black; 300 | border-color: black; 301 | } 302 | .mathquill-rendered-math .selection.blur .matrixed-container, 303 | .mathquill-editable .selection.blur .matrixed-container { 304 | filter: progid:DXImageTransform.Microsoft.Chroma(color='#D4D4D4') !important; 305 | } 306 | .mathquill-editable .textarea, 307 | .mathquill-rendered-math .textarea { 308 | position: relative; 309 | -webkit-user-select: text; 310 | -moz-user-select: text; 311 | user-select: text; 312 | } 313 | .mathquill-editable .textarea textarea, 314 | .mathquill-rendered-math .textarea textarea, 315 | .mathquill-editable .selectable, 316 | .mathquill-rendered-math .selectable { 317 | -webkit-user-select: text; 318 | -moz-user-select: text; 319 | user-select: text; 320 | position: absolute; 321 | clip: rect(1em 1em 1em 1em); 322 | } 323 | .mathquill-rendered-math .matrixed { 324 | background: white; 325 | display: -moz-inline-box; 326 | display: inline-block; 327 | } 328 | .mathquill-rendered-math .matrixed-container { 329 | filter: progid:DXImageTransform.Microsoft.Chroma(color='white'); 330 | margin-top: -0.1em; 331 | } 332 | -------------------------------------------------------------------------------- /src/js/main.js: -------------------------------------------------------------------------------- 1 | import '../css/dialog.less' 2 | import './mathquill.min.js' 3 | // 遵循UMD规范 4 | (function (global, factory) { 5 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 6 | typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.MathEdit = factory()); 7 | })(this, function () { 8 | 'use strict'; 9 | // ---公用 10 | function warn(context) { 11 | console.warn(context) 12 | } 13 | 14 | // ---功能 15 | function renderDom(elemId) { 16 | var instanceBox = document.getElementById(elemId) 17 | // console.log('获取到dom', instanceBox) 18 | var innerHTML = `
  • 常用公式
  • 字母
  • 符号
  •  

    ` 19 | instanceBox.innerHTML = innerHTML 20 | } 21 | 22 | function domInit(config) { 23 | var jmeMath = [ 24 | [ 25 | "{/}frac{}{}", "^{}/_{}", "x^{}", "x_{}", "x^{}_{}", "{/}bar{}", "{/}sqrt{}", "{/}nthroot{}{}", 26 | "{/}sum^{}_{n=}", "{/}sum", "{/}log_{}", "{/}ln", "{/}int_{}^{}", "{/}oint_{}^{}" 27 | ], 28 | [ 29 | "{/}alpha", "{/}beta", "{/}gamma", "{/}delta", "{/}varepsilon", "{/}varphi", "{/}lambda", "{/}mu", 30 | "{/}rho", "{/}sigma", "{/}omega", "{/}Gamma", "{/}Delta", "{/}Theta", "{/}Lambda", "{/}Xi", 31 | "{/}Pi", "{/}Sigma", "{/}Upsilon", "{/}Phi", "{/}Psi", "{/}Omega" 32 | ], 33 | [ 34 | "+", "-", "{/}pm", "{/}times", "{/}ast", "{/}div", "/", "{/}bigtriangleup", 35 | "=", "{/}ne", "{/}approx", ">", "<", "{/}ge", "{/}le", "{/}infty", 36 | "{/}cap", "{/}cup", "{/}because", "{/}therefore", "{/}subset", "{/}supset", "{/}subseteq", "{/}supseteq", 37 | "{/}nsubseteq", "{/}nsupseteq", "{/}in", "{/}ni", "{/}notin", "{/}mapsto", "{/}leftarrow", "{/}rightarrow", 38 | "{/}Leftarrow", "{/}Rightarrow", "{/}leftrightarrow", "{/}Leftrightarrow" 39 | ] 40 | ]; 41 | 42 | function mathHtml(obj) { 43 | var cols = 8; //一行放几个 44 | var slidLen = 34; //每个图标的宽或高 45 | var html = "
    "; 46 | for (var i = 0; i < obj.count; i++) { 47 | html += "
  • "; 48 | } 49 | html += "
    "; 50 | if (obj.count > cols * 2) { 51 | html += "
    更多
    " 52 | } 53 | return html; 54 | } 55 | 56 | function insert(q) { 57 | $(getTagSign("#jme-math")).focus().mathquill("write", q.replace("{/}", "\\")); 58 | } 59 | 60 | function jmeInit() { 61 | // 挂载insert 62 | window && (window.insertMath = insert) 63 | //隐藏内容div 64 | $(getTagSign(".tabContent div.mathBox")).hide(); 65 | //菜单点击事件 66 | $(getTagSign(".tabTitle li")).click(function () { 67 | $(".tabContent div.mathBox").hide(); 68 | var n = 0; 69 | var obj = this; 70 | $(".tabTitle li").each(function (i, o) { 71 | if (obj == o) { 72 | n = i; 73 | } 74 | }); 75 | $(".tabTitle li").removeClass("current"); 76 | $(obj).addClass("current"); 77 | $(".tabContent div.mathBox:eq(" + n + ")").show(); 78 | }); 79 | //缺省显示第一个 80 | $(getTagSign(".tabTitle li:eq(0)")).click(); 81 | //公式定义 82 | $(getTagSign(".tabContent div.mathBox:eq(0)")).html(mathHtml({ 83 | groupid: 0, 84 | x: 0, 85 | y: 272, 86 | count: 14 87 | })); 88 | $(getTagSign(".tabContent div.mathBox:eq(2)")).html(mathHtml({ 89 | groupid: 2, 90 | x: 0, 91 | y: 0, 92 | count: 36 93 | })); 94 | $(getTagSign(".tabContent div.mathBox:eq(1)")).html(mathHtml({ 95 | groupid: 1, 96 | x: 0, 97 | y: 170, 98 | count: 22 99 | })); 100 | //常用公式,更多按钮绑定的事件 101 | $(getTagSign(".tabContent div.mathBox div.more")).click(function () { 102 | var rowHei = 40; 103 | var mi = $(this).parent().find(".mathIcon"); 104 | if ($(this).attr("isOpen") == '0') { 105 | mi.animate({ 106 | "height": (rowHei * Number($(this).attr("mrows"))) + "px" 107 | }); 108 | $(this).html("↑ 收起"); 109 | $(this).attr("isOpen", '1'); 110 | } else { 111 | mi.animate({ 112 | "height": (rowHei * 2) + "px" 113 | }); 114 | $(this).html("更多"); 115 | $(this).attr("isOpen", '0'); 116 | } 117 | 118 | }); 119 | //公式编辑框 120 | $(getTagSign("#jme-math")).html("").css("font-size", config.defaultFontSize).mathquill('editable').mathquill('write', ""); 121 | } 122 | jmeInit() 123 | } 124 | 125 | var parentSign = ''; 126 | // 初始化标签标识 127 | function initParentSign(sign) { 128 | parentSign = '#'+sign 129 | } 130 | 131 | // 获取标签标识 132 | function getTagSign(childSign) { 133 | return `${parentSign} ${childSign}` 134 | } 135 | 136 | // ---实例 137 | function MathEdit(options) { 138 | if (!(this instanceof MathEdit)) { 139 | return warn('MathEdit is a constructor and should be called with the `new` keyword'); 140 | } 141 | this._initData(options) 142 | this._initRender() 143 | } 144 | MathEdit.prototype._initData = function (options) { 145 | if (!(options && typeof options === 'object')) return warn('Please introduce a options of object to new !') 146 | if (options.elId === void 0) return warn('Please introduce a options with `elemId`!') 147 | this.options = options 148 | this.config = { 149 | defaultFontSize: '18px', 150 | viewFontSize: '14px' 151 | }; 152 | Object.keys(this.options).forEach(key => { 153 | if(typeof this.options[key] === 'object' && this[key]){ 154 | this[key] = Object.assign({},this[key],this.options[key]) 155 | }else { 156 | this[key] = this.options[key] 157 | } 158 | }) 159 | initParentSign(this.elId) 160 | } 161 | MathEdit.prototype._initRender = function () { 162 | var elemId = this.elId 163 | renderDom(elemId) 164 | domInit(this.config) 165 | } 166 | MathEdit.prototype.getValue = function () { 167 | var mathHTML = '' + $(getTagSign("#jme-math")).html() + ' '; 168 | return mathHTML 169 | } 170 | MathEdit.prototype.getLatex = function() { 171 | return $(getTagSign("#jme-math")).mathquill('latex') 172 | } 173 | MathEdit.prototype.isEmpty = function () { 174 | return ($(getTagSign("#jme-math")).html()+"").replace(/(<[^>]*>|\s| )/ig,"").length < 1 175 | } 176 | return MathEdit 177 | }) -------------------------------------------------------------------------------- /src/js/mathquill.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyleft 2010-2011 Jay and Han (laughinghan@gmail.com) 3 | * under the GNU Lesser General Public License 4 | * http://www.gnu.org/licenses/lgpl.html 5 | * Project Website: http://mathquill.com 6 | */ 7 | (function () { 8 | function st() {} 9 | 10 | function ot(e) { 11 | var t = it.call(arguments, 1); 12 | return function () { 13 | return e.apply(this, t) 14 | } 15 | } 16 | 17 | function ut(e, t) { 18 | if (!t) throw new Error("prayer failed: " + e) 19 | } 20 | 21 | function at(t, r, i, s) { 22 | function d() { 23 | var t; 24 | f = e, t = o.selection ? "$" + o.selection.latex() + "$" : "", h.select(t) 25 | } 26 | var o, u, a, f, l, c, h, p = t.contents().detach(); 27 | i || t.addClass("mathquill-rendered-math"), r.jQ = t.attr(tt, r.id), r.revert = function () { 28 | t.empty().unbind(".mathquill").removeClass("mathquill-rendered-math mathquill-editable mathquill-textbox").append(p) 29 | }, o = r.cursor = G(r), r.renderLatex(p.text()), u = r.textarea = Z(''), a = u.children(), r.selectionChanged = function () { 30 | f === e && (f = setTimeout(d)), y(t[0]) 31 | }, t.bind("selectstart.mathquill", function (e) { 32 | e.target !== a[0] && e.preventDefault(), e.stopPropagation() 33 | }), c = o.blink, t.bind("mousedown.mathquill", function (n) { 34 | function r(e) { 35 | return o.seek(Z(e.target), e.pageX, e.pageY), (o.prev !== l.prev || o.parent !== l.parent) && o.selectFrom(l), !1 36 | } 37 | 38 | function i(e) { 39 | return delete e.target, r(e) 40 | } 41 | 42 | function f(n) { 43 | l = e, o.blink = c, o.selection || (s ? o.show() : u.detach()), t.unbind("mousemove", r), Z(n.target.ownerDocument).unbind("mousemove", i).unbind("mouseup", f) 44 | } 45 | return setTimeout(function () { 46 | a.focus() 47 | }), o.blink = st, o.seek(Z(n.target), n.pageX, n.pageY), l = { 48 | parent: o.parent, 49 | prev: o.prev, 50 | next: o.next 51 | }, s || t.prepend(u), t.mousemove(r), Z(n.target.ownerDocument).mousemove(i).mouseup(f), !1 52 | }); 53 | if (!s) { 54 | h = n(a, { 55 | container: t 56 | }), t.bind("cut paste", !1).bind("copy", d).prepend('$' + r.latex() + "$"), a.blur(function () { 57 | o.clearSelection(), setTimeout(v) 58 | }); 59 | 60 | function v() { 61 | u.detach() 62 | } 63 | return 64 | } 65 | h = n(a, { 66 | container: t, 67 | key: function (e, t) { 68 | o.parent.bubble("onKey", e, t) 69 | }, 70 | text: function (e) { 71 | o.parent.bubble("onText", e) 72 | }, 73 | cut: function (e) { 74 | o.selection && setTimeout(function () { 75 | o.prepareEdit(), o.parent.bubble("redraw") 76 | }), e.stopPropagation() 77 | }, 78 | paste: function (e) { 79 | e.slice(0, 1) === "$" && e.slice(-1) === "$" ? e = e.slice(1, -1) : e = "\\text{" + e + "}", o.writeLatex(e).show() 80 | } 81 | }), t.prepend(u), t.addClass("mathquill-editable"), i && t.addClass("mathquill-textbox"), a.focus(function (e) { 82 | o.parent || o.appendTo(r), o.parent.jQ.addClass("hasCursor"), o.selection ? (o.selection.jQ.removeClass("blur"), setTimeout(r.selectionChanged)) : o.show(), e.stopPropagation() 83 | }).blur(function (e) { 84 | o.hide().parent.blur(), o.selection && o.selection.jQ.addClass("blur"), e.stopPropagation() 85 | }), t.bind("focus.mathquill blur.mathquill", function (e) { 86 | a.trigger(e) 87 | }).blur() 88 | } 89 | 90 | function ft(e, n, r) { 91 | return t(B, { 92 | ctrlSeq: e, 93 | htmlTemplate: "<" + n + " " + r + ">&0" 94 | }) 95 | } 96 | var e, t, n, r, i, s, o, u, a, f, l, c, h, p, d, v, m, g, y, b, w, E, S, x, T, N, C, k, L, A, O, M, _, D, P, H, B, j, F, I, q, R, U, z, W, X, V, $, J, K, Q, G, Y, Z = jQuery, 97 | et = "mathquill-command-id", 98 | tt = "mathquill-block-id", 99 | nt = Math.min, 100 | rt = Math.max, 101 | it = [].slice; 102 | t = function (e, t, n) { 103 | function r(e) { 104 | return typeof e == "object" 105 | } 106 | 107 | function i(e) { 108 | return typeof e == "function" 109 | } 110 | 111 | function s(s, o) { 112 | function u(e) { 113 | var t = this; 114 | if (!(t instanceof u)) return new u(arguments); 115 | e && i(t.init) && t.init.apply(t, e) 116 | } 117 | o === n && (o = s, s = Object); 118 | var a = u[e] = new s, 119 | f = s[e], 120 | l, c = u.mixin = function (e) { 121 | l = {}, i(e) ? l = e.call(u, a, f, u, s) : r(e) && (l = e); 122 | if (r(l)) 123 | for (var n in l) t.call(l, n) && (a[n] = l[n]); 124 | return i(a.init) || (a.init = function () { 125 | s.apply(this, arguments) 126 | }), u 127 | }; 128 | return a.constructor = u, c(o) 129 | } 130 | return s 131 | }("prototype", {}.hasOwnProperty), n = function () { 132 | function t(t) { 133 | var n = t.which || t.keyCode, 134 | r = e[n], 135 | i, s = []; 136 | return t.ctrlKey && s.push("Ctrl"), t.originalEvent && t.originalEvent.metaKey && s.push("Meta"), t.altKey && s.push("Alt"), t.shiftKey && s.push("Shift"), i = r || String.fromCharCode(n), !s.length && !r ? i : (s.push(i), s.join("-")) 137 | } 138 | var e = { 139 | 8: "Backspace", 140 | 9: "Tab", 141 | 10: "Enter", 142 | 13: "Enter", 143 | 16: "Shift", 144 | 17: "Control", 145 | 18: "Alt", 146 | 20: "CapsLock", 147 | 27: "Esc", 148 | 32: "Spacebar", 149 | 33: "PageUp", 150 | 34: "PageDown", 151 | 35: "End", 152 | 36: "Home", 153 | 37: "Left", 154 | 38: "Up", 155 | 39: "Right", 156 | 40: "Down", 157 | 45: "Insert", 158 | 46: "Del", 159 | 144: "NumLock" 160 | }; 161 | return function (n, r) { 162 | function p(e) { 163 | h = e, setTimeout(e) 164 | } 165 | 166 | function d(e) { 167 | h(), l.val(e), e && l[0].select() 168 | } 169 | 170 | function v() { 171 | var e = l[0]; 172 | return "selectionStart" in e ? e.selectionStart !== e.selectionEnd : !1 173 | } 174 | 175 | function m(e) { 176 | var t = l.val(); 177 | l.val(""), t && e(t) 178 | } 179 | 180 | function g() { 181 | u(t(i), i) 182 | } 183 | 184 | function y(e) { 185 | i = e, s = null, g() 186 | } 187 | 188 | function b(e) { 189 | i && s && g(), s = e, p(w) 190 | } 191 | 192 | function w() { 193 | if (v()) return; 194 | m(o) 195 | } 196 | 197 | function E() { 198 | i = s = null 199 | } 200 | 201 | function S(e) { 202 | l.focus(), p(x) 203 | } 204 | 205 | function x() { 206 | m(a) 207 | } 208 | var i = null, 209 | s = null; 210 | r || (r = {}); 211 | var o = r.text || st, 212 | u = r.key || st, 213 | a = r.paste || st, 214 | f = r.cut || st, 215 | l = Z(n), 216 | c = Z(r.container || l), 217 | h = st; 218 | return c.bind("keydown keypress input keyup focusout paste", function () { 219 | h() 220 | }), c.bind({ 221 | keydown: y, 222 | keypress: b, 223 | focusout: E, 224 | cut: f, 225 | paste: S 226 | }), { 227 | select: d 228 | } 229 | } 230 | }(), r = t(function (e, t, n) { 231 | function r(e, t) { 232 | throw e ? e = "'" + e + "'" : e = "EOF", "Parse Error: " + t + " at " + e 233 | } 234 | e.init = function (e) { 235 | this._ = e 236 | }, e.parse = function (e) { 237 | function t(e, t) { 238 | return t 239 | } 240 | return this.skip(m)._(e, t, r) 241 | }, e.or = function (e) { 242 | ut("or is passed a parser", e instanceof n); 243 | var t = this; 244 | return n(function (n, r, i) { 245 | function s(t) { 246 | return e._(n, r, i) 247 | } 248 | return t._(n, r, s) 249 | }) 250 | }, e.then = function (e) { 251 | var t = this; 252 | return n(function (r, i, s) { 253 | function o(t, r) { 254 | var o = e instanceof n ? e : e(r); 255 | return ut("a parser is returned", o instanceof n), o._(t, i, s) 256 | } 257 | return t._(r, o, s) 258 | }) 259 | }, e.many = function () { 260 | var e = this; 261 | return n(function (t, n, r) { 262 | function s(e, n) { 263 | return t = e, i.push(n), !0 264 | } 265 | 266 | function o() { 267 | return !1 268 | } 269 | var i = []; 270 | while (e._(t, s, o)); 271 | return n(t, i) 272 | }) 273 | }, e.times = function (e, t) { 274 | arguments.length < 2 && (t = e); 275 | var r = this; 276 | return n(function (n, i, s) { 277 | function l(e, t) { 278 | return o.push(t), n = e, !0 279 | } 280 | 281 | function c(e, t) { 282 | return a = t, n = e, !1 283 | } 284 | 285 | function h(e, t) { 286 | return !1 287 | } 288 | var o = [], 289 | u = !0, 290 | a; 291 | for (var f = 0; f < e; f += 1) { 292 | u = r._(n, l, c); 293 | if (!u) return s(n, a) 294 | } 295 | for (; f < t && u; f += 1) u = r._(n, l, h); 296 | return i(n, o) 297 | }) 298 | }, e.result = function (e) { 299 | return this.then(o(e)) 300 | }, e.atMost = function (e) { 301 | return this.times(0, e) 302 | }, e.atLeast = function (e) { 303 | var t = this; 304 | return t.times(e).then(function (e) { 305 | return t.many().map(function (t) { 306 | return e.concat(t) 307 | }) 308 | }) 309 | }, e.map = function (e) { 310 | return this.then(function (t) { 311 | return o(e(t)) 312 | }) 313 | }, e.skip = function (e) { 314 | return this.then(function (t) { 315 | return e.result(t) 316 | }) 317 | }; 318 | var i = this.string = function (e) { 319 | var t = e.length, 320 | r = "expected '" + e + "'"; 321 | return n(function (n, i, s) { 322 | var o = n.slice(0, t); 323 | return o === e ? i(n.slice(t), o) : s(n, r) 324 | }) 325 | }, 326 | s = this.regex = function (e) { 327 | ut("regexp parser is anchored", e.toString().charAt(1) === "^"); 328 | var t = "expected " + e; 329 | return n(function (n, r, i) { 330 | var s = e.exec(n); 331 | if (s) { 332 | var o = s[0]; 333 | return r(n.slice(o.length), o) 334 | } 335 | return i(n, t) 336 | }) 337 | }, 338 | o = n.succeed = function (e) { 339 | return n(function (t, n) { 340 | return n(t, e) 341 | }) 342 | }, 343 | u = n.fail = function (e) { 344 | return n(function (t, n, r) { 345 | return r(t, e) 346 | }) 347 | }, 348 | a = n.letter = s(/^[a-z]/i), 349 | f = n.letters = s(/^[a-z]*/i), 350 | l = n.digit = s(/^[0-9]/), 351 | c = n.digits = s(/^[0-9]*/), 352 | h = n.whitespace = s(/^\s+/), 353 | p = n.optWhitespace = s(/^\s*/), 354 | d = n.any = n(function (e, t, n) { 355 | return e ? t(e.slice(1), e.charAt(0)) : n(e, "expected any character") 356 | }), 357 | v = n.all = n(function (e, t, n) { 358 | return t("", e) 359 | }), 360 | m = n.eof = n(function (e, t, n) { 361 | return e ? n(e, "expected EOF") : t(e, e) 362 | }) 363 | }), i = t(function (e) { 364 | e.prev = 0, e.next = 0, e.parent = 0, e.firstChild = 0, e.lastChild = 0, e.children = function () { 365 | return s(this.firstChild, this.lastChild) 366 | }, e.eachChild = function (e) { 367 | return this.children().each(e) 368 | }, e.foldChildren = function (e, t) { 369 | return this.children().fold(e, t) 370 | }, e.adopt = function (e, t, n) { 371 | return s(this, this).adopt(e, t, n), this 372 | }, e.disown = function () { 373 | return s(this, this).disown(), this 374 | } 375 | }), s = t(function (e) { 376 | function t(e, t, n) { 377 | ut("a parent is always present", e), ut("prev is properly set up", function () { 378 | return t ? t.next === n && t.parent === e : e.firstChild === n 379 | }()), ut("next is properly set up", function () { 380 | return n ? n.prev === t && n.parent === e : e.lastChild === t 381 | }()) 382 | } 383 | e.first = 0, e.last = 0, e.init = function (e, t) { 384 | ut("no half-empty fragments", !e == !t); 385 | if (!e) return; 386 | ut("first node is passed to Fragment", e instanceof i), ut("last node is passed to Fragment", t instanceof i), ut("first and last have the same parent", e.parent === t.parent), this.first = e, this.last = t 387 | }, e.adopt = function (e, n, r) { 388 | t(e, n, r); 389 | var i = this; 390 | i.disowned = !1; 391 | var s = i.first; 392 | if (!s) return this; 393 | var o = i.last; 394 | return n || (e.firstChild = s), r ? r.prev = o : e.lastChild = o, i.last.next = r, i.each(function (t) { 395 | t.prev = n, t.parent = e, n && (n.next = t), n = t 396 | }), i 397 | }, e.disown = function () { 398 | var e = this, 399 | n = e.first; 400 | if (!n || e.disowned) return e; 401 | e.disowned = !0; 402 | var r = e.last, 403 | i = n.parent; 404 | return t(i, n.prev, n), t(i, r, r.next), n.prev ? n.prev.next = r.next : i.firstChild = r.next, r.next ? r.next.prev = n.prev : i.lastChild = n.prev, e 405 | }, e.each = function (e) { 406 | var t = this, 407 | n = t.first; 408 | if (!n) return t; 409 | for (; n !== t.last.next; n = n.next) 410 | if (e.call(t, n) === !1) break; 411 | return t 412 | }, e.fold = function (e, t) { 413 | return this.each(function (n) { 414 | e = t.call(this, e, n) 415 | }), e 416 | } 417 | }), o = function () { 418 | var e = 0; 419 | return function () { 420 | return e += 1 421 | } 422 | }(), u = t(i, function (e) { 423 | e.init = function (e) { 424 | this.id = o(), u[this.id] = this 425 | }, e.toString = function () { 426 | return "[MathElement " + this.id + "]" 427 | }, e.bubble = function (e) { 428 | var t = it.call(arguments, 1); 429 | for (var n = this; n; n = n.parent) { 430 | var r = n[e] && n[e].apply(n, t); 431 | if (r === !1) break 432 | } 433 | return this 434 | }, e.postOrder = function (e) { 435 | var t = it.call(arguments, 1); 436 | if (typeof e == "string") { 437 | var n = e; 438 | e = function (e) { 439 | n in e && e[n].apply(e, arguments) 440 | } 441 | }(function r(t) { 442 | t.eachChild(r), e(t) 443 | })(this) 444 | }, e.jQ = Z(), e.jQadd = function (e) { 445 | this.jQ = this.jQ.add(e) 446 | }, this.jQize = function (e) { 447 | var t = Z(e); 448 | if(t.find("*").andSelf !== void 0){ 449 | return t.find("*").andSelf().each(function () { 450 | var e = Z(this), 451 | t = e.attr("mathquill-command-id"), 452 | n = e.attr("mathquill-block-id"); 453 | t && u[t].jQadd(e), n && u[n].jQadd(e) 454 | }), t 455 | }else { 456 | return t.find("*").addBack().each(function () { 457 | var e = Z(this), 458 | t = e.attr("mathquill-command-id"), 459 | n = e.attr("mathquill-block-id"); 460 | t && u[t].jQadd(e), n && u[n].jQadd(e) 461 | }), t 462 | } 463 | }, e.finalizeInsert = function () { 464 | var e = this; 465 | e.postOrder("finalizeTree"), e.postOrder("blur"), e.postOrder("respace"), e.next.respace && e.next.respace(), e.prev.respace && e.prev.respace(), e.postOrder("redraw"), e.bubble("redraw") 466 | } 467 | }), a = t(u, function (e, t) { 468 | e.init = function (e, n, r) { 469 | var i = this; 470 | t.init.call(i), i.ctrlSeq || (i.ctrlSeq = e), n && (i.htmlTemplate = n), r && (i.textTemplate = r) 471 | }, e.replaces = function (e) { 472 | e.disown(), this.replacedFragment = e 473 | }, e.isEmpty = function () { 474 | return this.foldChildren(!0, function (e, t) { 475 | return e && t.isEmpty() 476 | }) 477 | }, e.parser = function () { 478 | var e = Q.block, 479 | t = this; 480 | return e.times(t.numBlocks()).map(function (e) { 481 | t.blocks = e; 482 | for (var n = 0; n < e.length; n += 1) e[n].adopt(t, t.lastChild, 0); 483 | return t 484 | }) 485 | }, e.createBefore = function (e) { 486 | var t = this, 487 | n = t.replacedFragment; 488 | t.createBlocks(), u.jQize(t.html()), n && (n.adopt(t.firstChild, 0, 0), n.jQ.appendTo(t.firstChild.jQ)), e.jQ.before(t.jQ), e.prev = t.adopt(e.parent, e.prev, e.next), t.finalizeInsert(e), t.placeCursor(e) 489 | }, e.createBlocks = function () { 490 | var e = this, 491 | t = e.numBlocks(), 492 | n = e.blocks = Array(t); 493 | for (var r = 0; r < t; r += 1) { 494 | var i = n[r] = l(); 495 | i.adopt(e, e.lastChild, 0) 496 | } 497 | }, e.respace = st, e.placeCursor = function (e) { 498 | e.appendTo(this.foldChildren(this.firstChild, function (e, t) { 499 | return e.isEmpty() ? e : t 500 | })) 501 | }, e.remove = function () { 502 | return this.disown(), this.jQ.remove(), this.postOrder(function (e) { 503 | delete u[e.id] 504 | }), this 505 | }, e.numBlocks = function () { 506 | var e = this.htmlTemplate.match(/&\d+/g); 507 | return e ? e.length : 0 508 | }, e.html = function () { 509 | var e = this, 510 | t = e.blocks, 511 | n = " mathquill-command-id=" + e.id, 512 | r = e.htmlTemplate.match(/<[^<>]+>|[^<>]+/g); 513 | ut("no unmatched angle brackets", r.join("") === this.htmlTemplate); 514 | for (var i = 0, s = r[0]; s; i += 1, s = r[i]) 515 | if (s.slice(-2) === "/>") r[i] = s.slice(0, -2) + n + "/>"; 516 | else if (s.charAt(0) === "<") { 517 | ut("not an unmatched top-level close tag", s.charAt(1) !== "/"), r[i] = s.slice(0, -1) + n + ">"; 518 | var o = 1; 519 | do i += 1, s = r[i], ut("no missing close tags", s), s.slice(0, 2) === "" && (o += 1); while (o > 0) 520 | } 521 | return r.join("").replace(/>&(\d+)/g, function (e, n) { 522 | return " mathquill-block-id=" + t[n].id + ">" + t[n].join("html") 523 | }) 524 | }, e.latex = function () { 525 | return this.foldChildren(this.ctrlSeq, function (e, t) { 526 | return e + "{" + (t.latex() || " ") + "}" 527 | }) 528 | }, e.textTemplate = [""], e.text = function () { 529 | var e = 0; 530 | return this.foldChildren(this.textTemplate[e], function (t, n) { 531 | e += 1; 532 | var r = n.text(); 533 | return t && this.textTemplate[e] === "(" && r[0] === "(" && r.slice(-1) === ")" ? t + r.slice(1, -1) + this.textTemplate[e] : t + n.text() + (this.textTemplate[e] || "") 534 | }) 535 | } 536 | }), f = t(a, function (e, t) { 537 | e.init = function (e, n, r) { 538 | r || (r = e && e.length > 1 ? e.slice(1) : e), t.init.call(this, e, n, [r]) 539 | }, e.parser = function () { 540 | return r.succeed(this) 541 | }, e.numBlocks = function () { 542 | return 0 543 | }, e.replaces = function (e) { 544 | e.remove() 545 | }, e.createBlocks = st, e.latex = function () { 546 | return this.ctrlSeq 547 | }, e.text = function () { 548 | return this.textTemplate 549 | }, e.placeCursor = st, e.isEmpty = function () { 550 | return !0 551 | } 552 | }), l = t(u, function (e) { 553 | e.join = function (e) { 554 | return this.foldChildren("", function (t, n) { 555 | return t + n[e]() 556 | }) 557 | }, e.latex = function () { 558 | return this.join("latex") 559 | }, e.text = function () { 560 | return this.firstChild === this.lastChild ? this.firstChild.text() : "(" + this.join("text") + ")" 561 | }, e.isEmpty = function () { 562 | return this.firstChild === 0 && this.lastChild === 0 563 | }, e.focus = function () { 564 | return this.jQ.addClass("hasCursor"), this.jQ.removeClass("empty"), this 565 | }, e.blur = function () { 566 | return this.jQ.removeClass("hasCursor"), this.isEmpty() && this.jQ.addClass("empty"), this 567 | } 568 | }), c = t(s, function (e, t) { 569 | e.init = function (e, n) { 570 | t.init.call(this, e, n || e), this.jQ = this.fold(Z(), function (e, t) { 571 | return t.jQ.add(e) 572 | }) 573 | }, e.latex = function () { 574 | return this.fold("", function (e, t) { 575 | return e + t.latex() 576 | }) 577 | }, e.remove = function () { 578 | return this.jQ.remove(), this.each(function (e) { 579 | e.postOrder(function (e) { 580 | delete u[e.id] 581 | }) 582 | }), this.disown() 583 | } 584 | }), h = t(l, function (e, t) { 585 | e.latex = function () { 586 | return t.latex.call(this).replace(/(\\[a-z]+) (?![a-z])/ig, "$1") 587 | }, e.text = function () { 588 | return this.foldChildren("", function (e, t) { 589 | return e + t.text() 590 | }) 591 | }, e.renderLatex = function (e) { 592 | var t = this.jQ; 593 | t.children().slice(1).remove(), this.firstChild = this.lastChild = 0, this.cursor.appendTo(this).writeLatex(e) 594 | }, e.onKey = function (e, t) { 595 | switch (e) { 596 | case "Ctrl-Shift-Backspace": 597 | case "Ctrl-Backspace": 598 | while (this.cursor.prev || this.cursor.selection) this.cursor.backspace(); 599 | break; 600 | case "Shift-Backspace": 601 | case "Backspace": 602 | this.cursor.backspace(); 603 | break; 604 | case "Esc": 605 | case "Tab": 606 | case "Spacebar": 607 | var n = this.cursor.parent; 608 | if (n === this.cursor.root) { 609 | e === "Spacebar" && t.preventDefault(); 610 | return 611 | } 612 | this.cursor.prepareMove(), n.next ? this.cursor.prependTo(n.next) : this.cursor.insertAfter(n.parent); 613 | break; 614 | case "Shift-Tab": 615 | case "Shift-Esc": 616 | case "Shift-Spacebar": 617 | var n = this.cursor.parent; 618 | if (n === this.cursor.root) { 619 | e === "Shift-Spacebar" && t.preventDefault(); 620 | return 621 | } 622 | this.cursor.prepareMove(), n.prev ? this.cursor.appendTo(n.prev) : this.cursor.insertBefore(n.parent); 623 | break; 624 | case "Enter": 625 | break; 626 | case "End": 627 | this.cursor.prepareMove().appendTo(this.cursor.parent); 628 | break; 629 | case "Ctrl-End": 630 | this.cursor.prepareMove().appendTo(this); 631 | break; 632 | case "Shift-End": 633 | while (this.cursor.next) this.cursor.selectRight(); 634 | break; 635 | case "Ctrl-Shift-End": 636 | while (this.cursor.next || this.cursor.parent !== this) this.cursor.selectRight(); 637 | break; 638 | case "Home": 639 | this.cursor.prepareMove().prependTo(this.cursor.parent); 640 | break; 641 | case "Ctrl-Home": 642 | this.cursor.prepareMove().prependTo(this); 643 | break; 644 | case "Shift-Home": 645 | while (this.cursor.prev) this.cursor.selectLeft(); 646 | break; 647 | case "Ctrl-Shift-Home": 648 | while (this.cursor.prev || this.cursor.parent !== this) this.cursor.selectLeft(); 649 | break; 650 | case "Left": 651 | this.cursor.moveLeft(); 652 | break; 653 | case "Shift-Left": 654 | this.cursor.selectLeft(); 655 | break; 656 | case "Ctrl-Left": 657 | break; 658 | case "Right": 659 | this.cursor.moveRight(); 660 | break; 661 | case "Shift-Right": 662 | this.cursor.selectRight(); 663 | break; 664 | case "Ctrl-Right": 665 | break; 666 | case "Up": 667 | this.cursor.moveUp(); 668 | break; 669 | case "Down": 670 | this.cursor.moveDown(); 671 | break; 672 | case "Shift-Up": 673 | if (this.cursor.prev) 674 | while (this.cursor.prev) this.cursor.selectLeft(); 675 | else this.cursor.selectLeft(); 676 | case "Shift-Down": 677 | if (this.cursor.next) 678 | while (this.cursor.next) this.cursor.selectRight(); 679 | else this.cursor.selectRight(); 680 | case "Ctrl-Up": 681 | break; 682 | case "Ctrl-Down": 683 | break; 684 | case "Ctrl-Shift-Del": 685 | case "Ctrl-Del": 686 | while (this.cursor.next || this.cursor.selection) this.cursor.deleteForward(); 687 | break; 688 | case "Shift-Del": 689 | case "Del": 690 | this.cursor.deleteForward(); 691 | break; 692 | case "Meta-A": 693 | case "Ctrl-A": 694 | if (this !== this.cursor.root) return; 695 | this.cursor.prepareMove().appendTo(this); 696 | while (this.cursor.prev) this.cursor.selectLeft(); 697 | break; 698 | default: 699 | return !1 700 | } 701 | return t.preventDefault(), !1 702 | }, e.onText = function (e) { 703 | return this.cursor.write(e), !1 704 | } 705 | }), p = t(a, function (e, t) { 706 | e.init = function (e) { 707 | t.init.call(this, "$"), this.cursor = e 708 | }, e.htmlTemplate = '&0', e.createBlocks = function () { 709 | this.firstChild = this.lastChild = h(), this.blocks = [this.firstChild], this.firstChild.parent = this; 710 | var e = this.firstChild.cursor = this.cursor; 711 | this.firstChild.onText = function (t) { 712 | return t !== "$" || e.parent !== this ? e.write(t) : this.isEmpty() ? e.insertAfter(this.parent).backspace().insertNew(z("\\$", "$")).show() : e.next ? e.prev ? e.write(t) : e.insertBefore(this.parent) : e.insertAfter(this.parent), !1 713 | } 714 | }, e.latex = function () { 715 | return "$" + this.firstChild.latex() + "$" 716 | } 717 | }), d = t(l, function (e) { 718 | e.renderLatex = function (e) { 719 | var t = this, 720 | n = t.cursor; 721 | t.jQ.children().slice(1).remove(), t.firstChild = t.lastChild = 0, n.show().appendTo(t); 722 | var i = r.regex, 723 | s = r.string, 724 | o = r.eof, 725 | a = r.all, 726 | f = s("$").then(Q).skip(s("$").or(o)).map(function (e) { 727 | var t = p(n); 728 | t.createBlocks(); 729 | var r = t.firstChild; 730 | return e.children().adopt(r, 0, 0), t 731 | }), 732 | l = s("\\$").result("$"), 733 | c = l.or(i(/^[^$]/)).map(z), 734 | h = f.or(c).many(), 735 | d = h.skip(o).or(a.result(!1)).parse(e); 736 | if (d) { 737 | for (var v = 0; v < d.length; v += 1) d[v].adopt(t, t.lastChild, 0); 738 | var m = t.join("html"); 739 | u.jQize(m).appendTo(t.jQ), this.finalizeInsert() 740 | } 741 | }, e.onKey = h.prototype.onKey, e.onText = function (e) { 742 | return this.cursor.prepareEdit(), e === "$" ? this.cursor.insertNew(p(this.cursor)) : this.cursor.insertNew(z(e)), !1 743 | } 744 | }), v = {}, m = {}, y = st, b = document.createElement("div"), w = b.style, E = { 745 | transform: 1, 746 | WebkitTransform: 1, 747 | MozTransform: 1, 748 | OTransform: 1, 749 | msTransform: 1 750 | }; 751 | for (x in E) 752 | if (x in w) { 753 | S = x; 754 | break 755 | } S ? g = function (e, t, n) { 756 | e.css(S, "scale(" + t + "," + n + ")") 757 | } : "filter" in w ? (y = function (e) { 758 | e.className = e.className 759 | }, g = function (e, t, n) { 760 | function s() { 761 | e.css("marginRight", (r.width() - 1) * (t - 1) / t + "px") 762 | } 763 | var r, i; 764 | t /= 1 + (n - 1) / 2, e.css("fontSize", n + "em"), e.hasClass("matrixed-container") || e.addClass("matrixed-container").wrapInner(''), r = e.children().css("filter", "progid:DXImageTransform.Microsoft.Matrix(M11=" + t + ",SizingMethod='auto expand')"), s(), i = setInterval(s), Z(window).load(function () { 765 | clearTimeout(i), s() 766 | }) 767 | }) : g = function (e, t, n) { 768 | e.css("fontSize", n + "em") 769 | }, T = t(a, function (e, t) { 770 | e.init = function (e, n, r) { 771 | t.init.call(this, e, "<" + n + " " + r + ">&0") 772 | } 773 | }), m.mathrm = ot(T, "\\mathrm", "span", 'class="roman font"'), m.mathit = ot(T, "\\mathit", "i", 'class="font"'), m.mathbf = ot(T, "\\mathbf", "b", 'class="font"'), m.mathsf = ot(T, "\\mathsf", "span", 'class="sans-serif font"'), m.mathtt = ot(T, "\\mathtt", "span", 'class="monospace font"'), m.underline = ot(T, "\\underline", "span", 'class="non-leaf underline"'), m.overline = m.bar = ot(T, "\\overline", "span", 'class="non-leaf overline"'), N = t(a, function (e, t) { 774 | e.init = function (e, n, r) { 775 | t.init.call(this, e, "<" + n + ' class="non-leaf">&0", [r]) 776 | }, e.finalizeTree = function () { 777 | function e(e) { 778 | var t = this.parent, 779 | n = e; 780 | do { 781 | if (n.next) return e.insertBefore(t), !1; 782 | n = n.parent.parent 783 | } while (n !== t); 784 | return e.insertAfter(t), !1 785 | } 786 | ut("SupSub is only _ and ^", this.ctrlSeq === "^" || this.ctrlSeq === "_"), this.ctrlSeq === "_" ? (this.down = this.firstChild, this.firstChild.up = e) : (this.up = this.firstChild, this.firstChild.down = e) 787 | }, e.latex = function () { 788 | var e = this.firstChild.latex(); 789 | return e.length === 1 ? this.ctrlSeq + e : this.ctrlSeq + "{" + (e || " ") + "}" 790 | }, e.redraw = function () { 791 | this.prev && this.prev.respace(), this.prev instanceof N || (this.respace(), this.next && !(this.next instanceof N) && this.next.respace()) 792 | }, e.respace = function () { 793 | this.prev.ctrlSeq === "\\int " || this.prev instanceof N && this.prev.ctrlSeq != this.ctrlSeq && this.prev.prev && this.prev.prev.ctrlSeq === "\\int " ? this.limit || (this.limit = !0, this.jQ.addClass("limit")) : this.limit && (this.limit = !1, this.jQ.removeClass("limit")), this.respaced = this.prev instanceof N && this.prev.ctrlSeq != this.ctrlSeq && !this.prev.respaced; 794 | if (this.respaced) { 795 | var e = +this.jQ.css("fontSize").slice(0, -2), 796 | t = this.prev.jQ.outerWidth(), 797 | n = this.jQ.outerWidth(); 798 | this.jQ.css({ 799 | left: (this.limit && this.ctrlSeq === "_" ? -0.25 : 0) - t / e + "em", 800 | marginRight: .1 - nt(n, t) / e + "em" 801 | }) 802 | } else this.limit && this.ctrlSeq === "_" ? this.jQ.css({ 803 | left: "-.25em", 804 | marginRight: "" 805 | }) : this.jQ.css({ 806 | left: "", 807 | marginRight: "" 808 | }); 809 | return this.next instanceof N && this.next.respace(), this 810 | } 811 | }), m.subscript = m._ = ot(N, "_", "sub", "_"), m.superscript = m.supscript = m["^"] = ot(N, "^", "sup", "**"), C = m.frac = m.dfrac = m.cfrac = m.fraction = t(a, function (e, t) { 812 | e.ctrlSeq = "\\frac", e.htmlTemplate = '&0&1 ', e.textTemplate = ["(", "/", ")"], e.finalizeTree = function () { 813 | this.up = this.lastChild.up = this.firstChild, this.down = this.firstChild.down = this.lastChild 814 | } 815 | }), k = m.over = v["/"] = t(C, function (e, t) { 816 | e.createBefore = function (e) { 817 | if (!this.replacedFragment) { 818 | var n = e.prev; 819 | while (n && !(n instanceof V || n instanceof B || n instanceof J)) n = n.prev; 820 | n instanceof J && n.next instanceof N && (n = n.next, n.next instanceof N && n.next.ctrlSeq != n.ctrlSeq && (n = n.next)), n !== e.prev && (this.replaces(c(n.next || e.parent.firstChild, e.prev)), e.prev = n) 821 | } 822 | t.createBefore.call(this, e) 823 | } 824 | }), L = m.sqrt = m["√"] = t(a, function (e, t) { 825 | e.ctrlSeq = "\\sqrt", e.htmlTemplate = '&0', e.textTemplate = ["sqrt(", ")"], e.parser = function () { 826 | return Q.optBlock.then(function (e) { 827 | return Q.block.map(function (t) { 828 | var n = A(); 829 | return n.blocks = [e, t], e.adopt(n, 0, 0), t.adopt(n, e, 0), n 830 | }) 831 | }).or(t.parser.call(this)) 832 | }, e.redraw = function () { 833 | var e = this.lastChild.jQ; 834 | g(e.prev(), 1, e.innerHeight() / +e.css("fontSize").slice(0, -2) - .1) 835 | } 836 | }), A = m.nthroot = t(L, function (e, t) { 837 | e.htmlTemplate = '&0&1', e.textTemplate = ["sqrt[", "](", ")"], e.latex = function () { 838 | return "\\sqrt[" + this.firstChild.latex() + "]{" + this.lastChild.latex() + "}" 839 | } 840 | }), O = t(a, function (e, t) { 841 | e.init = function (e, n, r, i) { 842 | t.init.call(this, "\\left" + r, '' + e + "" + '&0' + '' + n + "" + "", [e, n]), this.end = "\\right" + i 843 | }, e.jQadd = function () { 844 | t.jQadd.apply(this, arguments); 845 | var e = this.jQ; 846 | this.bracketjQs = e.children(":first").add(e.children(":last")) 847 | }, e.latex = function () { 848 | return this.ctrlSeq + this.firstChild.latex() + this.end 849 | }, e.redraw = function () { 850 | var e = this.firstChild.jQ, 851 | t = e.outerHeight() / +e.css("fontSize").slice(0, -2); 852 | g(this.bracketjQs, nt(1 + .2 * (t - 1), 1.2), 1.05 * t) 853 | } 854 | }), m.left = t(a, function (e) { 855 | e.parser = function () { 856 | var e, t, n, i = r.regex, 857 | s = r.string; 858 | return i = r.regex, e = r.succeed, t = Q.block, n = r.optWhitespace, n.then(i(/^(?:[([|]|\\\{)/)).then(function (t) { 859 | var o; 860 | return t.charAt(0) === "\\" && (t = t.slice(1)), o = v[t](), Q.map(function (e) { 861 | o.blocks = [e], e.adopt(o, 0, 0) 862 | }).then(s("\\right")).skip(n).then(i(/^(?:[\])|]|\\\})/)).then(function (t) { 863 | return t.slice(-1) !== o.end.slice(-1) ? r.fail("open doesn't match close") : e(o) 864 | }) 865 | }) 866 | } 867 | }), m.right = t(a, function (e) { 868 | e.parser = function () { 869 | return r.fail("unmatched \\right") 870 | } 871 | }), m.lbrace = v["{"] = ot(O, "{", "}", "\\{", "\\}"), m.langle = m.lang = ot(O, "⟨", "⟩", "\\langle ", "\\rangle "), M = t(O, function (e, t) { 872 | e.createBefore = function (e) { 873 | !e.next && e.parent.parent && e.parent.parent.end === this.end && !this.replacedFragment ? e.insertAfter(e.parent.parent) : t.createBefore.call(this, e) 874 | }, e.placeCursor = function (e) { 875 | this.firstChild.blur(), e.insertAfter(this) 876 | } 877 | }), m.rbrace = v["}"] = ot(M, "{", "}", "\\{", "\\}"), m.rangle = m.rang = ot(M, "⟨", "⟩", "\\langle ", "\\rangle "), _ = function (e, t) { 878 | e.init = function (e, n) { 879 | t.init.call(this, e, n, e, n) 880 | } 881 | }, D = t(O, _), m.lparen = v["("] = ot(D, "(", ")"), m.lbrack = m.lbracket = v["["] = ot(D, "[", "]"), P = t(M, _), m.rparen = v[")"] = ot(P, "(", ")"), m.rbrack = m.rbracket = v["]"] = ot(P, "[", "]"), H = m.lpipe = m.rpipe = v["|"] = t(D, function (e, t) { 882 | e.init = function () { 883 | t.init.call(this, "|", "|") 884 | }, e.createBefore = M.prototype.createBefore 885 | }), B = v.$ = m.text = m.textnormal = m.textrm = m.textup = m.textmd = t(a, function (e, t) { 886 | e.ctrlSeq = "\\text", e.htmlTemplate = '&0', e.replaces = function (e) { 887 | e instanceof c ? this.replacedText = e.remove().jQ.text() : typeof e == "string" && (this.replacedText = e) 888 | }, e.textTemplate = ['"', '"'], e.parser = function () { 889 | var e = r.string, 890 | t = r.regex, 891 | n = r.optWhitespace; 892 | return n.then(e("{")).then(t(/^[^}]*/)).skip(e("}")).map(function (e) { 893 | var t = B(); 894 | t.createBlocks(); 895 | var n = t.firstChild; 896 | for (var r = 0; r < e.length; r += 1) { 897 | var i = z(e.charAt(r)); 898 | i.adopt(n, n.lastChild, 0) 899 | } 900 | return t 901 | }) 902 | }, e.createBlocks = function () { 903 | this.firstChild = this.lastChild = j(), this.blocks = [this.firstChild], this.firstChild.parent = this 904 | }, e.finalizeInsert = function () { 905 | this.firstChild.blur = function () { 906 | return delete this.blur, this 907 | }, t.finalizeInsert.call(this) 908 | }, e.createBefore = function (e) { 909 | t.createBefore.call(this, this.cursor = e); 910 | if (this.replacedText) 911 | for (var n = 0; n < this.replacedText.length; n += 1) this.write(this.replacedText.charAt(n)) 912 | }, e.write = function (e) { 913 | this.cursor.insertNew(z(e)) 914 | }, e.onKey = function (e, t) { 915 | if (!this.cursor.selection && (e === "Backspace" && !this.cursor.prev || e === "Del" && !this.cursor.next)) return this.isEmpty() && this.cursor.insertAfter(this), !1 916 | }, e.onText = function (e) { 917 | this.cursor.prepareEdit(); 918 | if (e !== "$") this.write(e); 919 | else if (this.isEmpty()) this.cursor.insertAfter(this).backspace().insertNew(z("\\$", "$")); 920 | else if (!this.cursor.next) this.cursor.insertAfter(this); 921 | else if (!this.cursor.prev) this.cursor.insertBefore(this); 922 | else { 923 | var t = B(c(this.cursor.next, this.firstChild.lastChild)); 924 | t.placeCursor = function (e) { 925 | this.prev = 0, delete this.placeCursor, this.placeCursor(e) 926 | }, t.firstChild.focus = function () { 927 | return this 928 | }, this.cursor.insertAfter(this).insertNew(t), t.prev = this, this.cursor.insertBefore(t), delete t.firstChild.focus 929 | } 930 | return !1 931 | } 932 | }), j = t(l, function (e, t) { 933 | e.blur = function () { 934 | this.jQ.removeClass("hasCursor"); 935 | if (this.isEmpty()) { 936 | var e = this.parent, 937 | t = e.cursor; 938 | t.parent === this ? this.jQ.addClass("empty") : (t.hide(), e.remove(), t.next === e ? t.next = e.next : t.prev === e && (t.prev = e.prev), t.show().parent.bubble("redraw")) 939 | } 940 | return this 941 | }, e.focus = function () { 942 | t.focus.call(this); 943 | var e = this.parent; 944 | if (e.next.ctrlSeq === e.ctrlSeq) { 945 | var n = this, 946 | r = e.cursor, 947 | i = e.next.firstChild; 948 | i.eachChild(function (e) { 949 | e.parent = n, e.jQ.appendTo(n.jQ) 950 | }), this.lastChild ? this.lastChild.next = i.firstChild : this.firstChild = i.firstChild, i.firstChild.prev = this.lastChild, this.lastChild = i.lastChild, i.parent.remove(), r.prev ? r.insertAfter(r.prev) : r.prependTo(this), r.parent.bubble("redraw") 951 | } else if (e.prev.ctrlSeq === e.ctrlSeq) { 952 | var r = e.cursor; 953 | r.prev ? e.prev.firstChild.focus() : r.appendTo(e.prev.firstChild) 954 | } 955 | return this 956 | } 957 | }), m.em = m.italic = m.italics = m.emph = m.textit = m.textsl = ft("\\textit", "i", 'class="text"'), m.strong = m.bold = m.textbf = ft("\\textbf", "b", 'class="text"'), m.sf = m.textsf = ft("\\textsf", "span", 'class="sans-serif text"'), m.tt = m.texttt = ft("\\texttt", "span", 'class="monospace text"'), m.textsc = ft("\\textsc", "span", 'style="font-variant:small-caps" class="text"'), m.uppercase = ft("\\uppercase", "span", 'style="text-transform:uppercase" class="text"'), m.lowercase = ft("\\lowercase", "span", 'style="text-transform:lowercase" class="text"'), F = v["\\"] = t(a, function (e, t) { 958 | e.ctrlSeq = "\\", e.replaces = function (e) { 959 | this._replacedFragment = e.disown(), this.isEmpty = function () { 960 | return !1 961 | } 962 | }, e.htmlTemplate = '\\&0', e.textTemplate = ["\\"], e.createBlocks = function () { 963 | t.createBlocks.call(this), this.firstChild.focus = function () { 964 | return this.parent.jQ.addClass("hasCursor"), this.isEmpty() && this.parent.jQ.removeClass("empty"), this 965 | }, this.firstChild.blur = function () { 966 | return this.parent.jQ.removeClass("hasCursor"), this.isEmpty() && this.parent.jQ.addClass("empty"), this 967 | } 968 | }, e.createBefore = function (e) { 969 | t.createBefore.call(this, e), this.cursor = e.appendTo(this.firstChild); 970 | if (this._replacedFragment) { 971 | var n = this.jQ[0]; 972 | this.jQ = this._replacedFragment.jQ.addClass("blur").bind("mousedown mousemove", function (e) { 973 | return Z(e.target = n).trigger(e), !1 974 | }).insertBefore(this.jQ).add(this.jQ) 975 | } 976 | }, e.latex = function () { 977 | return "\\" + this.firstChild.latex() + " " 978 | }, e.onKey = function (e, t) { 979 | if (e === "Tab" || e === "Enter" || e === "Spacebar") return this.renderCommand(), t.preventDefault(), !1 980 | }, e.onText = function (e) { 981 | if (e.match(/[a-z]/i)) return this.cursor.prepareEdit(), this.cursor.insertNew(z(e)), !1; 982 | this.renderCommand(); 983 | if (e === "\\" && this.firstChild.isEmpty()) return !1 984 | }, e.renderCommand = function () { 985 | this.jQ = this.jQ.last(), this.remove(), this.next ? this.cursor.insertBefore(this.next) : this.cursor.appendTo(this.parent); 986 | var e = this.firstChild.latex(), 987 | t; 988 | e || (e = "backslash"), this.cursor.insertCmd(e, this._replacedFragment) 989 | } 990 | }), I = m.binom = m.binomial = t(a, function (e, t) { 991 | e.ctrlSeq = "\\binom", e.htmlTemplate = '(&0&1)', e.textTemplate = ["choose(", ",", ")"], e.redraw = function () { 992 | var e = this.jQ.eq(1), 993 | t = e.outerHeight() / +e.css("fontSize").slice(0, -2), 994 | n = this.jQ.filter(".paren"); 995 | g(n, nt(1 + .2 * (t - 1), 1.2), 1.05 * t) 996 | } 997 | }), q = m.choose = t(I, function (e) { 998 | e.createBefore = k.prototype.createBefore 999 | }), R = m.vector = t(a, function (e, t) { 1000 | e.ctrlSeq = "\\vector", e.htmlTemplate = '&0', e.latex = function () { 1001 | return "\\begin{matrix}" + this.foldChildren([], function (e, t) { 1002 | return e.push(t.latex()), e 1003 | }).join("\\\\") + "\\end{matrix}" 1004 | }, e.text = function () { 1005 | return "[" + this.foldChildren([], function (e, t) { 1006 | return e.push(t.text()), e 1007 | }).join() + "]" 1008 | }, e.createBefore = function (e) { 1009 | t.createBefore.call(this, this.cursor = e) 1010 | }, e.onKey = function (e, t) { 1011 | var n = this.cursor.parent; 1012 | if (n.parent === this) { 1013 | if (e === "Enter") { 1014 | var r = l(); 1015 | return r.parent = this, r.jQ = Z("").attr(tt, r.id).insertAfter(n.jQ), n.next ? n.next.prev = r : this.lastChild = r, r.next = n.next, n.next = r, r.prev = n, this.bubble("redraw").cursor.appendTo(r), t.preventDefault(), !1 1016 | } 1017 | if (e === "Tab" && !n.next) { 1018 | if (n.isEmpty()) { 1019 | if (n.prev) return this.cursor.insertAfter(this), delete n.prev.next, this.lastChild = n.prev, n.jQ.remove(), this.bubble("redraw"), t.preventDefault(), !1; 1020 | return 1021 | } 1022 | var r = l(); 1023 | return r.parent = this, r.jQ = Z("").attr(tt, r.id).appendTo(this.jQ), this.lastChild = r, n.next = r, r.prev = n, this.bubble("redraw").cursor.appendTo(r), t.preventDefault(), !1 1024 | } 1025 | if (t.which === 8) { 1026 | if (n.isEmpty()) return n.prev ? (this.cursor.appendTo(n.prev), n.prev.next = n.next) : (this.cursor.insertBefore(this), this.firstChild = n.next), n.next ? n.next.prev = n.prev : this.lastChild = n.prev, n.jQ.remove(), this.isEmpty() ? this.cursor.deleteForward() : this.bubble("redraw"), t.preventDefault(), !1; 1027 | if (!this.cursor.prev) return t.preventDefault(), !1 1028 | } 1029 | } 1030 | } 1031 | }), m.editable = t(p, function (e, t) { 1032 | e.init = function () { 1033 | a.prototype.init.call(this, "\\editable") 1034 | }, e.jQadd = function () { 1035 | var e, n, r = this; 1036 | t.jQadd.apply(r, arguments), e = r.firstChild.disown(), n = r.jQ.children().detach(), r.firstChild = r.lastChild = h(), r.blocks = [r.firstChild], r.firstChild.parent = r, at(r.jQ, r.firstChild, !1, !0), r.cursor = r.firstChild.cursor, e.children().adopt(r.firstChild, 0, 0), n.appendTo(r.firstChild.jQ), r.firstChild.cursor.appendTo(r.firstChild) 1037 | }, e.latex = function () { 1038 | return this.firstChild.latex() 1039 | }, e.text = function () { 1040 | return this.firstChild.text() 1041 | } 1042 | }), m.f = ot(f, "f", 'ƒ '), U = t(f, function (e, t) { 1043 | e.init = function (e, n) { 1044 | t.init.call(this, e, "" + (n || e) + "") 1045 | }, e.text = function () { 1046 | var e = this.ctrlSeq; 1047 | return this.prev && !(this.prev instanceof U) && !(this.prev instanceof V) && (e = "*" + e), this.next && !(this.next instanceof V) && this.next.ctrlSeq !== "^" && (e += "*"), e 1048 | } 1049 | }), z = t(f, function (e, t) { 1050 | e.init = function (e, n) { 1051 | t.init.call(this, e, "" + (n || e) + "") 1052 | } 1053 | }), v[" "] = ot(z, "\\:", " "), m.prime = v["'"] = ot(z, "'", "′"), W = t(f, function (e, t) { 1054 | e.init = function (e, n) { 1055 | t.init.call(this, e, '' + (n || e) + "") 1056 | } 1057 | }), m["@"] = W, m["&"] = ot(W, "\\&", "&"), m["%"] = ot(W, "\\%", "%"), m.alpha = m.beta = m.gamma = m.delta = m.zeta = m.eta = m.theta = m.iota = m.kappa = m.mu = m.nu = m.xi = m.rho = m.sigma = m.tau = m.chi = m.psi = m.omega = t(U, function (e, t) { 1058 | e.init = function (e) { 1059 | t.init.call(this, "\\" + e + " ", "&" + e + ";") 1060 | } 1061 | }), m.phi = ot(U, "\\phi ", "ϕ"), m.phiv = m.varphi = ot(U, "\\varphi ", "φ"), m.epsilon = ot(U, "\\epsilon ", "ϵ"), m.epsiv = m.varepsilon = ot(U, "\\varepsilon ", "ε"), m.piv = m.varpi = ot(U, "\\varpi ", "ϖ"), m.sigmaf = m.sigmav = m.varsigma = ot(U, "\\varsigma ", "ς"), m.thetav = m.vartheta = m.thetasym = ot(U, "\\vartheta ", "ϑ"), m.upsilon = m.upsi = ot(U, "\\upsilon ", "υ"), m.gammad = m.Gammad = m.digamma = ot(U, "\\digamma ", "ϝ"), m.kappav = m.varkappa = ot(U, "\\varkappa ", "ϰ"), m.rhov = m.varrho = ot(U, "\\varrho ", "ϱ"), m.pi = m["π"] = ot(W, "\\pi ", "π"), m.lambda = ot(W, "\\lambda ", "λ"), m.Upsilon = m.Upsi = m.upsih = m.Upsih = ot(f, "\\Upsilon ", 'ϒ'), m.Gamma = m.Delta = m.Theta = m.Lambda = m.Xi = m.Pi = m.Sigma = m.Phi = m.Psi = m.Omega = m.forall = t(z, function (e, t) { 1062 | e.init = function (e) { 1063 | t.init.call(this, "\\" + e + " ", "&" + e + ";") 1064 | } 1065 | }), X = t(a, function (e) { 1066 | e.init = function (e) { 1067 | this.latex = e 1068 | }, e.createBefore = function (e) { 1069 | e.writeLatex(this.latex) 1070 | }, e.parser = function () { 1071 | var e = Q.parse(this.latex).children(); 1072 | return r.succeed(e) 1073 | } 1074 | }), m["¹"] = ot(X, "^1"), m["²"] = ot(X, "^2"), m["³"] = ot(X, "^3"), m["¼"] = ot(X, "\\frac14"), m["½"] = ot(X, "\\frac12"), m["¾"] = ot(X, "\\frac34"), V = t(f, function (e, t) { 1075 | e.init = function (e, n, r) { 1076 | t.init.call(this, e, '' + n + "", r) 1077 | } 1078 | }), $ = t(V, function (e) { 1079 | e.init = z.prototype.init, e.respace = function () { 1080 | return this.prev ? this.prev instanceof V && this.next && !(this.next instanceof V) ? this.jQ[0].className = "unary-operator" : this.jQ[0].className = "binary-operator" : this.jQ[0].className = "", this 1081 | } 1082 | }), m["+"] = ot($, "+", "+"), m["–"] = m["-"] = ot($, "-", "−"), m["±"] = m.pm = m.plusmn = m.plusminus = ot($, "\\pm ", "±"), m.mp = m.mnplus = m.minusplus = ot($, "\\mp ", "∓"), v["*"] = m.sdot = m.cdot = ot(V, "\\cdot ", "·"), m["="] = ot(V, "=", "="), m["<"] = ot(V, "<", "<"), m[">"] = ot(V, ">", ">"), m.notin = m.sim = m.cong = m.equiv = m.oplus = m.otimes = t(V, function (e, t) { 1083 | e.init = function (e) { 1084 | t.init.call(this, "\\" + e + " ", "&" + e + ";") 1085 | } 1086 | }), m.times = ot(V, "\\times ", "×", "[x]"), m["÷"] = m.div = m.divide = m.divides = ot(V, "\\div ", "÷", "[/]"), m["≠"] = m.ne = m.neq = ot(V, "\\ne ", "≠"), m.ast = m.star = m.loast = m.lowast = ot(V, "\\ast ", "∗"), m.therefor = m.therefore = ot(V, "\\therefore ", "∴"), m.cuz = m.because = ot(V, "\\because ", "∵"), m.prop = m.propto = ot(V, "\\propto ", "∝"), m["≈"] = m.asymp = m.approx = ot(V, "\\approx ", "≈"), m.lt = ot(V, "<", "<"), m.gt = ot(V, ">", ">"), m["≤"] = m.le = m.leq = ot(V, "\\le ", "≤"), m["≥"] = m.ge = m.geq = ot(V, "\\ge ", "≥"), m.isin = m["in"] = ot(V, "\\in ", "∈"), m.ni = m.contains = ot(V, "\\ni ", "∋"), m.notni = m.niton = m.notcontains = m.doesnotcontain = ot(V, "\\not\\ni ", "∌"), m.sub = m.subset = ot(V, "\\subset ", "⊂"), m.sup = m.supset = m.superset = ot(V, "\\supset ", "⊃"), m.nsub = m.notsub = m.nsubset = m.notsubset = ot(V, "\\not\\subset ", "⊄"), m.nsup = m.notsup = m.nsupset = m.notsupset = m.nsuperset = m.notsuperset = ot(V, "\\not\\supset ", "⊅"), m.sube = m.subeq = m.subsete = m.subseteq = ot(V, "\\subseteq ", "⊆"), m.supe = m.supeq = m.supsete = m.supseteq = m.supersete = m.superseteq = ot(V, "\\supseteq ", "⊇"), m.nsube = m.nsubeq = m.notsube = m.notsubeq = m.nsubsete = m.nsubseteq = m.notsubsete = m.notsubseteq = ot(V, "\\not\\subseteq ", "⊈"), m.nsupe = m.nsupeq = m.notsupe = m.notsupeq = m.nsupsete = m.nsupseteq = m.notsupsete = m.notsupseteq = m.nsupersete = m.nsuperseteq = m.notsupersete = m.notsuperseteq = ot(V, "\\not\\supseteq ", "⊉"), J = t(f, function (e, t) { 1087 | e.init = function (e, n) { 1088 | t.init.call(this, e, "" + n + "") 1089 | } 1090 | }), m["∑"] = m.sum = m.summation = ot(J, "\\sum ", "∑"), m["∏"] = m.prod = m.product = ot(J, "\\prod ", "∏"), m.coprod = m.coproduct = ot(J, "\\coprod ", "∐"), m["∫"] = m["int"] = m.integral = ot(J, "\\int ", "∫"), m.N = m.naturals = m.Naturals = ot(z, "\\mathbb{N}", "ℕ"), m.P = m.primes = m.Primes = m.projective = m.Projective = m.probability = m.Probability = ot(z, "\\mathbb{P}", "ℙ"), m.Z = m.integers = m.Integers = ot(z, "\\mathbb{Z}", "ℤ"), m.Q = m.rationals = m.Rationals = ot(z, "\\mathbb{Q}", "ℚ"), m.R = m.reals = m.Reals = ot(z, "\\mathbb{R}", "ℝ"), m.C = m.complex = m.Complex = m.complexes = m.Complexes = m.complexplane = m.Complexplane = m.ComplexPlane = ot(z, "\\mathbb{C}", "ℂ"), m.H = m.Hamiltonian = m.quaternions = m.Quaternions = ot(z, "\\mathbb{H}", "ℍ"), m.quad = m.emsp = ot(z, "\\quad ", " "), m.qquad = ot(z, "\\qquad ", " "), m.diamond = ot(z, "\\diamond ", "◇"), m.bigtriangleup = ot(z, "\\bigtriangleup ", "△"), m.ominus = ot(z, "\\ominus ", "⊖"), m.uplus = ot(z, "\\uplus ", "⊎"), m.bigtriangledown = ot(z, "\\bigtriangledown ", "▽"), m.sqcap = ot(z, "\\sqcap ", "⊓"), m.triangleleft = ot(z, "\\triangleleft ", "⊲"), m.sqcup = ot(z, "\\sqcup ", "⊔"), m.triangleright = ot(z, "\\triangleright ", "⊳"), m.odot = ot(z, "\\odot ", "⊙"), m.bigcirc = ot(z, "\\bigcirc ", "◯"), m.dagger = ot(z, "\\dagger ", "†"), m.ddagger = ot(z, "\\ddagger ", "‡"), m.wr = ot(z, "\\wr ", "≀"), m.amalg = ot(z, "\\amalg ", "∐"), m.models = ot(z, "\\models ", "⊨"), m.prec = ot(z, "\\prec ", "≺"), m.succ = ot(z, "\\succ ", "≻"), m.preceq = ot(z, "\\preceq ", "≼"), m.succeq = ot(z, "\\succeq ", "≽"), m.simeq = ot(z, "\\simeq ", "≃"), m.mid = ot(z, "\\mid ", "∣"), m.ll = ot(z, "\\ll ", "≪"), m.gg = ot(z, "\\gg ", "≫"), m.parallel = ot(z, "\\parallel ", "∥"), m.bowtie = ot(z, "\\bowtie ", "⋈"), m.sqsubset = ot(z, "\\sqsubset ", "⊏"), m.sqsupset = ot(z, "\\sqsupset ", "⊐"), m.smile = ot(z, "\\smile ", "⌣"), m.sqsubseteq = ot(z, "\\sqsubseteq ", "⊑"), m.sqsupseteq = ot(z, "\\sqsupseteq ", "⊒"), m.doteq = ot(z, "\\doteq ", "≐"), m.frown = ot(z, "\\frown ", "⌢"), m.vdash = ot(z, "\\vdash ", "⊦"), m.dashv = ot(z, "\\dashv ", "⊣"), m.longleftarrow = ot(z, "\\longleftarrow ", "←"), m.longrightarrow = ot(z, "\\longrightarrow ", "→"), m.Longleftarrow = ot(z, "\\Longleftarrow ", "⇐"), m.Longrightarrow = ot(z, "\\Longrightarrow ", "⇒"), m.longleftrightarrow = ot(z, "\\longleftrightarrow ", "↔"), m.updownarrow = ot(z, "\\updownarrow ", "↕"), m.Longleftrightarrow = ot(z, "\\Longleftrightarrow ", "⇔"), m.Updownarrow = ot(z, "\\Updownarrow ", "⇕"), m.mapsto = ot(z, "\\mapsto ", "↦"), m.nearrow = ot(z, "\\nearrow ", "↗"), m.hookleftarrow = ot(z, "\\hookleftarrow ", "↩"), m.hookrightarrow = ot(z, "\\hookrightarrow ", "↪"), m.searrow = ot(z, "\\searrow ", "↘"), m.leftharpoonup = ot(z, "\\leftharpoonup ", "↼"), m.rightharpoonup = ot(z, "\\rightharpoonup ", "⇀"), m.swarrow = ot(z, "\\swarrow ", "↙"), m.leftharpoondown = ot(z, "\\leftharpoondown ", "↽"), m.rightharpoondown = ot(z, "\\rightharpoondown ", "⇁"), m.nwarrow = ot(z, "\\nwarrow ", "↖"), m.ldots = ot(z, "\\ldots ", "…"), m.cdots = ot(z, "\\cdots ", "⋯"), m.vdots = ot(z, "\\vdots ", "⋮"), m.ddots = ot(z, "\\ddots ", "⋰"), m.surd = ot(z, "\\surd ", "√"), m.triangle = ot(z, "\\triangle ", "▵"), m.ell = ot(z, "\\ell ", "ℓ"), m.top = ot(z, "\\top ", "⊤"), m.flat = ot(z, "\\flat ", "♭"), m.natural = ot(z, "\\natural ", "♮"), m.sharp = ot(z, "\\sharp ", "♯"), m.wp = ot(z, "\\wp ", "℘"), m.bot = ot(z, "\\bot ", "⊥"), m.clubsuit = ot(z, "\\clubsuit ", "♣"), m.diamondsuit = ot(z, "\\diamondsuit ", "♢"), m.heartsuit = ot(z, "\\heartsuit ", "♡"), m.spadesuit = ot(z, "\\spadesuit ", "♠"), m.oint = ot(z, "\\oint ", "∮"), m.bigcap = ot(z, "\\bigcap ", "∩"), m.bigcup = ot(z, "\\bigcup ", "∪"), m.bigsqcup = ot(z, "\\bigsqcup ", "⊔"), m.bigvee = ot(z, "\\bigvee ", "∨"), m.bigwedge = ot(z, "\\bigwedge ", "∧"), m.bigodot = ot(z, "\\bigodot ", "⊙"), m.bigotimes = ot(z, "\\bigotimes ", "⊗"), m.bigoplus = ot(z, "\\bigoplus ", "⊕"), m.biguplus = ot(z, "\\biguplus ", "⊎"), m.lfloor = ot(z, "\\lfloor ", "⌊"), m.rfloor = ot(z, "\\rfloor ", "⌋"), m.lceil = ot(z, "\\lceil ", "⌈"), m.rceil = ot(z, "\\rceil ", "⌉"), m.slash = ot(z, "\\slash ", "/"), m.opencurlybrace = ot(z, "\\opencurlybrace ", "{"), m.closecurlybrace = ot(z, "\\closecurlybrace ", "}"), m.caret = ot(z, "\\caret ", "^"), m.underscore = ot(z, "\\underscore ", "_"), m.backslash = ot(z, "\\backslash ", "\\"), m.vert = ot(z, "|"), m.perp = m.perpendicular = ot(z, "\\perp ", "⊥"), m.nabla = m.del = ot(z, "\\nabla ", "∇"), m.hbar = ot(z, "\\hbar ", "ℏ"), m.AA = m.Angstrom = m.angstrom = ot(z, "\\text\\AA ", "Å"), m.ring = m.circ = m.circle = ot(z, "\\circ ", "∘"), m.bull = m.bullet = ot(z, "\\bullet ", "•"), m.setminus = m.smallsetminus = ot(z, "\\setminus ", "∖"), m.not = m["¬"] = m.neg = ot(z, "\\neg ", "¬"), m["…"] = m.dots = m.ellip = m.hellip = m.ellipsis = m.hellipsis = ot(z, "\\dots ", "…"), m.converges = m.darr = m.dnarr = m.dnarrow = m.downarrow = ot(z, "\\downarrow ", "↓"), m.dArr = m.dnArr = m.dnArrow = m.Downarrow = ot(z, "\\Downarrow ", "⇓"), m.diverges = m.uarr = m.uparrow = ot(z, "\\uparrow ", "↑"), m.uArr = m.Uparrow = ot(z, "\\Uparrow ", "⇑"), m.to = ot(V, "\\to ", "→"), m.rarr = m.rightarrow = ot(z, "\\rightarrow ", "→"), m.implies = ot(V, "\\Rightarrow ", "⇒"), m.rArr = m.Rightarrow = ot(z, "\\Rightarrow ", "⇒"), m.gets = ot(V, "\\gets ", "←"), m.larr = m.leftarrow = ot(z, "\\leftarrow ", "←"), m.impliedby = ot(V, "\\Leftarrow ", "⇐"), m.lArr = m.Leftarrow = ot(z, "\\Leftarrow ", "⇐"), m.harr = m.lrarr = m.leftrightarrow = ot(z, "\\leftrightarrow ", "↔"), m.iff = ot(V, "\\Leftrightarrow ", "⇔"), m.hArr = m.lrArr = m.Leftrightarrow = ot(z, "\\Leftrightarrow ", "⇔"), m.Re = m.Real = m.real = ot(z, "\\Re ", "ℜ"), m.Im = m.imag = m.image = m.imagin = m.imaginary = m.Imaginary = ot(z, "\\Im ", "ℑ"), m.part = m.partial = ot(z, "\\partial ", "∂"), m.inf = m.infin = m.infty = m.infinity = ot(z, "\\infty ", "∞"), m.alef = m.alefsym = m.aleph = m.alephsym = ot(z, "\\aleph ", "ℵ"), m.xist = m.xists = m.exist = m.exists = ot(z, "\\exists ", "∃"), m.and = m.land = m.wedge = ot(z, "\\wedge ", "∧"), m.or = m.lor = m.vee = ot(z, "\\vee ", "∨"), m.o = m.O = m.empty = m.emptyset = m.oslash = m.Oslash = m.nothing = m.varnothing = ot(V, "\\varnothing ", "∅"), m.cup = m.union = ot(V, "\\cup ", "∪"), m.cap = m.intersect = m.intersection = ot(V, "\\cap ", "∩"), m.deg = m.degree = ot(z, "^\\circ ", "°"), m.ang = m.angle = ot(z, "\\angle ", "∠"), K = t(f, function (e, t) { 1091 | e.init = function (e) { 1092 | t.init.call(this, "\\" + e + " ", "" + e + "") 1093 | }, e.respace = function () { 1094 | this.jQ[0].className = this.next instanceof N || this.next instanceof O ? "" : "non-italicized-function" 1095 | } 1096 | }), m.ln = m.lg = m.log = m.span = m.proj = m.det = m.dim = m.min = m.max = m.mod = m.lcm = m.gcd = m.gcf = m.hcf = m.lim = K, 1097 | function () { 1098 | var e, t = ["sin", "cos", "tan", "sec", "cosec", "csc", "cotan", "cot"]; 1099 | for (e in t) m[t[e]] = m[t[e] + "h"] = m["a" + t[e]] = m["arc" + t[e]] = m["a" + t[e] + "h"] = m["arc" + t[e] + "h"] = K 1100 | }(), Q = function () { 1101 | function e(e) { 1102 | var t = l(); 1103 | return e.adopt(t, 0, 0), t 1104 | } 1105 | 1106 | function t(e) { 1107 | var t = e[0] || l(); 1108 | for (var n = 1; n < e.length; n += 1) e[n].children().adopt(t, t.lastChild, 0); 1109 | return t 1110 | } 1111 | var n = r.string, 1112 | i = r.regex, 1113 | s = r.letter, 1114 | o = r.any, 1115 | u = r.optWhitespace, 1116 | a = r.succeed, 1117 | f = r.fail, 1118 | c = s.map(U), 1119 | h = i(/^[^${}\\_^]/).map(z), 1120 | p = i(/^[^\\]/).or(n("\\").then(i(/^[a-z]+/i).or(i(/^\s+/).result(" ")).or(o))).then(function (e) { 1121 | var t = m[e]; 1122 | return t ? t(e).parser() : f("unknown command: \\" + e) 1123 | }), 1124 | d = p.or(c).or(h), 1125 | v = n("{").then(function () { 1126 | return y 1127 | }).skip(n("}")), 1128 | g = u.then(v.or(d.map(e))), 1129 | y = g.many().map(t).skip(u), 1130 | b = n("[").then(g.then(function (e) { 1131 | return e.join("latex") !== "]" ? a(e) : f() 1132 | }).many().map(t).skip(u)).skip(n("]")), 1133 | w = y; 1134 | return w.block = g, w.optBlock = b, w 1135 | }(), G = t(function (e) { 1136 | function t(e, t) { 1137 | if (e.next[t]) e.prependTo(e.next[t]); 1138 | else if (e.prev[t]) e.appendTo(e.prev[t]); 1139 | else { 1140 | var r = e.parent; 1141 | do { 1142 | var i = r[t]; 1143 | if (i) { 1144 | typeof i == "function" && (i = r[t](e)); 1145 | if (i === !1 || i instanceof l) { 1146 | e.upDownCache[r.id] = { 1147 | parent: e.parent, 1148 | prev: e.prev, 1149 | next: e.next 1150 | }; 1151 | if (i instanceof l) { 1152 | var s = e.upDownCache[i.id]; 1153 | if (s) s.next ? e.insertBefore(s.next) : e.appendTo(s.parent); 1154 | else { 1155 | var o = n(e).left; 1156 | e.appendTo(i), e.seekHoriz(o, i) 1157 | } 1158 | } 1159 | break 1160 | } 1161 | } 1162 | r = r.parent.parent 1163 | } while (r) 1164 | } 1165 | return e.clearSelection().show() 1166 | } 1167 | 1168 | function n(e) { 1169 | var t = e.jQ.removeClass("cursor").offset(); 1170 | return e.jQ.addClass("cursor"), t 1171 | } 1172 | 1173 | function i(e) { 1174 | e.upDownCache = {} 1175 | } 1176 | e.init = function (e) { 1177 | this.parent = this.root = e; 1178 | var t = this.jQ = this._jQ = Z(''); 1179 | this.blink = function () { 1180 | t.toggleClass("blink") 1181 | }, this.upDownCache = {} 1182 | }, e.prev = 0, e.next = 0, e.parent = 0, e.show = function () { 1183 | return this.jQ = this._jQ.removeClass("blink"), "intervalId" in this ? clearInterval(this.intervalId) : (this.next ? this.selection && this.selection.first.prev === this.prev ? this.jQ.insertBefore(this.selection.jQ) : this.jQ.insertBefore(this.next.jQ.first()) : this.jQ.appendTo(this.parent.jQ), this.parent.focus()), this.intervalId = setInterval(this.blink, 500), this 1184 | }, e.hide = function () { 1185 | return "intervalId" in this && clearInterval(this.intervalId), delete this.intervalId, this.jQ.detach(), this.jQ = Z(), this 1186 | }, e.insertAt = function (e, t, n) { 1187 | var r = this.parent; 1188 | this.parent = e, this.prev = t, this.next = n, r.blur() 1189 | }, e.insertBefore = function (e) { 1190 | return this.insertAt(e.parent, e.prev, e), this.parent.jQ.addClass("hasCursor"), this.jQ.insertBefore(e.jQ.first()), this 1191 | }, e.insertAfter = function (e) { 1192 | return this.insertAt(e.parent, e, e.next), this.parent.jQ.addClass("hasCursor"), this.jQ.insertAfter(e.jQ.last()), this 1193 | }, e.prependTo = function (e) { 1194 | return this.insertAt(e, 0, e.firstChild), e.textarea ? this.jQ.insertAfter(e.textarea) : this.jQ.prependTo(e.jQ), e.focus(), this 1195 | }, e.appendTo = function (e) { 1196 | return this.insertAt(e, e.lastChild, 0), this.jQ.appendTo(e.jQ), e.focus(), this 1197 | }, e.hopLeft = function () { 1198 | return this.jQ.insertBefore(this.prev.jQ.first()), this.next = this.prev, this.prev = this.prev.prev, this 1199 | }, e.hopRight = function () { 1200 | return this.jQ.insertAfter(this.next.jQ.last()), this.prev = this.next, this.next = this.next.next, this 1201 | }, e.moveLeftWithin = function (e) { 1202 | if (this.prev) this.prev.lastChild ? this.appendTo(this.prev.lastChild) : this.hopLeft(); 1203 | else { 1204 | if (this.parent === e) return; 1205 | this.parent.prev ? this.appendTo(this.parent.prev) : this.insertBefore(this.parent.parent) 1206 | } 1207 | }, e.moveRightWithin = function (e) { 1208 | if (this.next) this.next.firstChild ? this.prependTo(this.next.firstChild) : this.hopRight(); 1209 | else { 1210 | if (this.parent === e) return; 1211 | this.parent.next ? this.prependTo(this.parent.next) : this.insertAfter(this.parent.parent) 1212 | } 1213 | }, e.moveLeft = function () { 1214 | return i(this), this.selection ? this.insertBefore(this.selection.first).clearSelection() : this.moveLeftWithin(this.root), this.show() 1215 | }, e.moveRight = function () { 1216 | return i(this), this.selection ? this.insertAfter(this.selection.last).clearSelection() : this.moveRightWithin(this.root), this.show() 1217 | }, e.moveUp = function () { 1218 | return t(this, "up") 1219 | }, e.moveDown = function () { 1220 | return t(this, "down") 1221 | }, e.seek = function (e, t, n) { 1222 | i(this); 1223 | var r, s, o = this.clearSelection().show(); 1224 | return e.hasClass("empty") ? (o.prependTo(u[e.attr(tt)]), o) : (r = u[e.attr(et)], r instanceof f ? (e.outerWidth() > 2 * (t - e.offset().left) ? o.insertBefore(r) : o.insertAfter(r), o) : (r || (s = u[e.attr(tt)], s || (e = e.parent(), r = u[e.attr(et)], r || (s = u[e.attr(tt)], s || (s = o.root)))), r ? o.insertAfter(r) : o.appendTo(s), o.seekHoriz(t, o.root))) 1225 | }, e.seekHoriz = function (e, t) { 1226 | var r = this, 1227 | i = n(r).left - e, 1228 | s; 1229 | do r.moveLeftWithin(t), s = i, i = n(r).left - e; while (i > 0 && (r.prev || r.parent !== t)); 1230 | return -i > s && r.moveRightWithin(t), r 1231 | }, e.writeLatex = function (e) { 1232 | var t = this; 1233 | i(t), t.show().deleteSelection(); 1234 | var n = r.all, 1235 | s = r.eof, 1236 | o = Q.skip(s).or(n.result(!1)).parse(e); 1237 | return o && (o.children().adopt(t.parent, t.prev, t.next), u.jQize(o.join("html")).insertBefore(t.jQ), t.prev = o.lastChild, o.finalizeInsert(), t.parent.bubble("redraw")), this.hide() 1238 | }, e.write = function (e) { 1239 | return i(this), this.show().insertCh(e) 1240 | }, e.insertCh = function (e) { 1241 | var t; 1242 | return e.match(/^[a-eg-zA-Z]$/) ? t = U(e) : (t = v[e] || m[e]) ? t = t(e) : t = z(e), this.selection && (this.prev = this.selection.first.prev, this.next = this.selection.last.next, t.replaces(this.selection), delete this.selection), this.insertNew(t) 1243 | }, e.insertNew = function (e) { 1244 | return e.createBefore(this), this 1245 | }, e.insertCmd = function (e, t) { 1246 | var n = m[e]; 1247 | return n ? (n = n(e), t && n.replaces(t), this.insertNew(n)) : (n = B(), n.replaces(e), n.firstChild.focus = function () { 1248 | return delete this.focus, this 1249 | }, this.insertNew(n).insertAfter(n), t && t.remove()), this 1250 | }, e.unwrapGramp = function () { 1251 | var e = this.parent.parent, 1252 | t = e.parent, 1253 | n = e.next, 1254 | r = this, 1255 | i = e.prev; 1256 | e.disown().eachChild(function (r) { 1257 | if (r.isEmpty()) return; 1258 | r.children().adopt(t, i, n).each(function (t) { 1259 | t.jQ.insertBefore(e.jQ.first()) 1260 | }), i = r.lastChild 1261 | }); 1262 | if (!this.next) 1263 | if (this.prev) this.next = this.prev.next; 1264 | else 1265 | while (!this.next) { 1266 | this.parent = this.parent.next; 1267 | if (!this.parent) { 1268 | this.next = e.next, this.parent = t; 1269 | break 1270 | } 1271 | this.next = this.parent.firstChild 1272 | } 1273 | this.next ? this.insertBefore(this.next) : this.appendTo(t), e.jQ.remove(), e.prev && e.prev.respace(), e.next && e.next.respace() 1274 | }, e.backspace = function () { 1275 | i(this), this.show(); 1276 | if (!this.deleteSelection()) 1277 | if (this.prev) this.prev.isEmpty() ? this.prev = this.prev.remove().prev : this.selectLeft(); 1278 | else if (this.parent !== this.root) { 1279 | if (this.parent.parent.isEmpty()) return this.insertAfter(this.parent.parent).backspace(); 1280 | this.unwrapGramp() 1281 | } 1282 | return this.prev && this.prev.respace(), this.next && this.next.respace(), this.parent.bubble("redraw"), this 1283 | }, e.deleteForward = function () { 1284 | i(this), this.show(); 1285 | if (!this.deleteSelection()) 1286 | if (this.next) this.next.isEmpty() ? this.next = this.next.remove().next : this.selectRight(); 1287 | else if (this.parent !== this.root) { 1288 | if (this.parent.parent.isEmpty()) return this.insertBefore(this.parent.parent).deleteForward(); 1289 | this.unwrapGramp() 1290 | } 1291 | return this.prev && this.prev.respace(), this.next && this.next.respace(), this.parent.bubble("redraw"), this 1292 | }, e.selectFrom = function (e) { 1293 | var t = this, 1294 | n = e; 1295 | e: for (;;) { 1296 | for (var r = this; r !== t.parent.parent; r = r.parent.parent) 1297 | if (r.parent === n.parent) { 1298 | s = r, o = n; 1299 | break e 1300 | } for (var i = e; i !== n.parent.parent; i = i.parent.parent) 1301 | if (t.parent === i.parent) { 1302 | s = t, o = i; 1303 | break e 1304 | } t.parent.parent && (t = t.parent.parent), n.parent.parent && (n = n.parent.parent) 1305 | } 1306 | var s, o, u; 1307 | if (s.next !== o) { 1308 | for (var a = s; a; a = a.next) 1309 | if (a === o.prev) { 1310 | u = !0; 1311 | break 1312 | } u || (u = o, o = s, s = u) 1313 | } 1314 | this.hide().selection = Y(s.prev.next || s.parent.firstChild, o.next.prev || o.parent.lastChild), this.insertAfter(o.next.prev || o.parent.lastChild), this.root.selectionChanged() 1315 | }, e.selectLeft = function () { 1316 | i(this); 1317 | if (this.selection) 1318 | if (this.selection.first === this.next) this.prev ? this.hopLeft().selection.extendLeft() : this.parent !== this.root && this.insertBefore(this.parent.parent).selection.levelUp(); 1319 | else { 1320 | this.hopLeft(); 1321 | if (this.selection.first === this.selection.last) { 1322 | this.clearSelection().show(); 1323 | return 1324 | } 1325 | this.selection.retractLeft() 1326 | } 1327 | else { 1328 | if (this.prev) this.hopLeft(); 1329 | else { 1330 | if (this.parent === this.root) return; 1331 | this.insertBefore(this.parent.parent) 1332 | } 1333 | this.hide().selection = Y(this.next) 1334 | } 1335 | this.root.selectionChanged() 1336 | }, e.selectRight = function () { 1337 | i(this); 1338 | if (this.selection) 1339 | if (this.selection.last === this.prev) this.next ? this.hopRight().selection.extendRight() : this.parent !== this.root && this.insertAfter(this.parent.parent).selection.levelUp(); 1340 | else { 1341 | this.hopRight(); 1342 | if (this.selection.first === this.selection.last) { 1343 | this.clearSelection().show(); 1344 | return 1345 | } 1346 | this.selection.retractRight() 1347 | } 1348 | else { 1349 | if (this.next) this.hopRight(); 1350 | else { 1351 | if (this.parent === this.root) return; 1352 | this.insertAfter(this.parent.parent) 1353 | } 1354 | this.hide().selection = Y(this.prev) 1355 | } 1356 | this.root.selectionChanged() 1357 | }, e.prepareMove = function () { 1358 | return i(this), this.show().clearSelection() 1359 | }, e.prepareEdit = function () { 1360 | return i(this), this.show().deleteSelection() 1361 | }, e.clearSelection = function () { 1362 | return this.selection && (this.selection.clear(), delete this.selection, this.root.selectionChanged()), this 1363 | }, e.deleteSelection = function () { 1364 | return this.selection ? (this.prev = this.selection.first.prev, this.next = this.selection.last.next, this.selection.remove(), this.root.selectionChanged(), delete this.selection) : !1 1365 | } 1366 | }), Y = t(c, function (e, t) { 1367 | e.init = function () { 1368 | var e = this; 1369 | t.init.apply(e, arguments), e.jQwrap(e.jQ) 1370 | }, e.jQwrap = function (e) { 1371 | this.jQ = e.wrapAll('').parent() 1372 | }, e.adopt = function () { 1373 | return this.jQ.replaceWith(this.jQ = this.jQ.children()), t.adopt.apply(this, arguments) 1374 | }, e.clear = function () { 1375 | return this.jQ.replaceWith(this.jQ.children()), this 1376 | }, e.levelUp = function () { 1377 | var e = this, 1378 | t = e.first = e.last = e.last.parent.parent; 1379 | return e.clear().jQwrap(t.jQ), e 1380 | }, e.extendLeft = function () { 1381 | this.first = this.first.prev, this.first.jQ.prependTo(this.jQ) 1382 | }, e.extendRight = function () { 1383 | this.last = this.last.next, this.last.jQ.appendTo(this.jQ) 1384 | }, e.retractRight = function () { 1385 | this.first.jQ.insertBefore(this.jQ), this.first = this.first.next 1386 | }, e.retractLeft = function () { 1387 | this.last.jQ.insertAfter(this.jQ), this.last = this.last.prev 1388 | } 1389 | }), Z.fn.mathquill = function (e, t) { 1390 | var n, r, i, s, o; 1391 | switch (e) { 1392 | case "redraw": 1393 | return this.each(function () { 1394 | var e = Z(this).attr(tt), 1395 | t = e && u[e]; 1396 | t && function n(e) { 1397 | e.eachChild(n), e.redraw && e.redraw() 1398 | }(t) 1399 | }); 1400 | case "revert": 1401 | return this.each(function () { 1402 | var e = Z(this).attr(tt), 1403 | t = e && u[e]; 1404 | t && t.revert && t.revert() 1405 | }); 1406 | case "latex": 1407 | if (arguments.length > 1) return this.each(function () { 1408 | var e = Z(this).attr(tt), 1409 | n = e && u[e]; 1410 | n && n.renderLatex(t) 1411 | }); 1412 | return n = Z(this).attr(tt), r = n && u[n], r && r.latex(); 1413 | case "text": 1414 | return n = Z(this).attr(tt), r = n && u[n], r && r.text(); 1415 | case "html": 1416 | return this.html().replace(/ ?hasCursor|hasCursor /, "").replace(/ class=(""|(?= |>))/g, "").replace(/<\/span>/i, "").replace(/