From 0c740623bc1a0d02ecae98b0183fa205624878f5 Mon Sep 17 00:00:00 2001 From: bai <1643359946@qq.com> Date: Thu, 7 Nov 2024 01:49:26 +0800 Subject: [PATCH] =?UTF-8?q?2024=E5=B9=B411=E6=9C=887=E6=97=A5=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=85=AC=E5=BC=8F=EF=BC=8C=E6=89=93=E5=8C=85=E5=90=8E?= =?UTF-8?q?=E5=8F=AF=E4=BD=BF=E7=94=A8=EF=BC=8C=E5=BC=80=E6=94=BE=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E4=B8=8B=E6=97=A0=E6=B3=95=E8=AE=BF=E9=97=AEpublic?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/kityformula-editor/icon.svg | 3 + .../kityformula-editor/kityFormula.html | 111 + .../assets/images/scrollbar/custom/bar-bg.png | Bin 0 -> 925 bytes .../assets/images/scrollbar/custom/bar.png | Bin 0 -> 1067 bytes .../assets/images/scrollbar/custom/bg.png | Bin 0 -> 945 bytes .../assets/images/scrollbar/custom/bottom.png | Bin 0 -> 1003 bytes .../assets/images/scrollbar/custom/btn.png | Bin 0 -> 926 bytes .../assets/images/scrollbar/custom/down.png | Bin 0 -> 926 bytes .../assets/images/scrollbar/custom/top.png | Bin 0 -> 996 bytes .../assets/images/scrollbar/custom/up.png | Bin 0 -> 926 bytes .../assets/images/scrollbar/edit/bar-bg.png | Bin 0 -> 938 bytes .../assets/images/scrollbar/edit/bar-left.png | Bin 0 -> 982 bytes .../images/scrollbar/edit/bar-right.png | Bin 0 -> 994 bytes .../assets/images/scrollbar/edit/thumb-bg.png | Bin 0 -> 941 bytes .../images/scrollbar/edit/thumb-left.png | Bin 0 -> 983 bytes .../images/scrollbar/edit/thumb-right.png | Bin 0 -> 988 bytes .../images/toolbar/alphabetic/aleph.png | Bin 0 -> 559 bytes .../assets/images/toolbar/alphabetic/bbbk.png | Bin 0 -> 519 bytes .../assets/images/toolbar/alphabetic/beth.png | Bin 0 -> 317 bytes .../images/toolbar/alphabetic/circleds.png | Bin 0 -> 874 bytes .../images/toolbar/alphabetic/complement.png | Bin 0 -> 371 bytes .../images/toolbar/alphabetic/daleth.png | Bin 0 -> 305 bytes .../assets/images/toolbar/alphabetic/ell.png | Bin 0 -> 467 bytes .../assets/images/toolbar/alphabetic/eth.png | Bin 0 -> 552 bytes .../assets/images/toolbar/alphabetic/finv.png | Bin 0 -> 239 bytes .../assets/images/toolbar/alphabetic/game.png | Bin 0 -> 492 bytes .../images/toolbar/alphabetic/gimel.png | Bin 0 -> 364 bytes .../assets/images/toolbar/alphabetic/hbar.png | Bin 0 -> 516 bytes .../images/toolbar/alphabetic/hslash.png | Bin 0 -> 542 bytes .../assets/images/toolbar/alphabetic/im.png | Bin 0 -> 571 bytes .../assets/images/toolbar/alphabetic/mho.png | Bin 0 -> 573 bytes .../images/toolbar/alphabetic/partial.png | Bin 0 -> 546 bytes .../assets/images/toolbar/alphabetic/re.png | Bin 0 -> 702 bytes .../assets/images/toolbar/alphabetic/wp.png | Bin 0 -> 524 bytes .../images/toolbar/arrow/circlearrowleft.png | Bin 0 -> 337 bytes .../images/toolbar/arrow/circlearrowright.png | Bin 0 -> 351 bytes .../images/toolbar/arrow/curvearrowleft.png | Bin 0 -> 347 bytes .../images/toolbar/arrow/curvearrowright.png | Bin 0 -> 338 bytes .../assets/images/toolbar/arrow/downarrow.png | Bin 0 -> 255 bytes .../images/toolbar/arrow/downdownarrows.png | Bin 0 -> 268 bytes .../images/toolbar/arrow/downharpoonleft.png | Bin 0 -> 190 bytes .../images/toolbar/arrow/downharpoonright.png | Bin 0 -> 191 bytes .../assets/images/toolbar/arrow/gets.png | Bin 0 -> 252 bytes .../images/toolbar/arrow/leftarrowtail.png | Bin 0 -> 259 bytes .../images/toolbar/arrow/leftharpoondown.png | Bin 0 -> 186 bytes .../images/toolbar/arrow/leftharpoonup.png | Bin 0 -> 187 bytes .../images/toolbar/arrow/leftleftarrows.png | Bin 0 -> 269 bytes .../images/toolbar/arrow/leftrightarrow.png | Bin 0 -> 309 bytes .../images/toolbar/arrow/leftrightarrows.png | Bin 0 -> 294 bytes .../toolbar/arrow/leftrightharpoons.png | Bin 0 -> 268 bytes .../toolbar/arrow/leftrightsquigarrow.png | Bin 0 -> 346 bytes .../images/toolbar/arrow/longleftarrow.png | Bin 0 -> 269 bytes .../toolbar/arrow/longleftrightarrow.png | Bin 0 -> 297 bytes .../images/toolbar/arrow/longrightarrow.png | Bin 0 -> 285 bytes .../images/toolbar/arrow/looparrowleft.png | Bin 0 -> 332 bytes .../images/toolbar/arrow/looparrowright.png | Bin 0 -> 339 bytes .../assets/images/toolbar/arrow/multimap.png | Bin 0 -> 254 bytes .../assets/images/toolbar/arrow/nearrow.png | Bin 0 -> 319 bytes .../images/toolbar/arrow/nleftarrow.png | Bin 0 -> 276 bytes .../images/toolbar/arrow/nrightarrow.png | Bin 0 -> 286 bytes .../assets/images/toolbar/arrow/nwarrow.png | Bin 0 -> 324 bytes .../images/toolbar/arrow/rightarrowtail.png | Bin 0 -> 250 bytes .../images/toolbar/arrow/rightharpoondown.png | Bin 0 -> 194 bytes .../images/toolbar/arrow/rightharpoonup.png | Bin 0 -> 185 bytes .../images/toolbar/arrow/rightleftarrows.png | Bin 0 -> 278 bytes .../toolbar/arrow/rightleftharpoons.png | Bin 0 -> 277 bytes .../images/toolbar/arrow/rightrightarrows.png | Bin 0 -> 266 bytes .../images/toolbar/arrow/rightsquigarrow.png | Bin 0 -> 304 bytes .../assets/images/toolbar/arrow/searrow.png | Bin 0 -> 317 bytes .../assets/images/toolbar/arrow/swarrow.png | Bin 0 -> 292 bytes .../assets/images/toolbar/arrow/to.png | Bin 0 -> 279 bytes .../images/toolbar/arrow/twoheadleftarrow.png | Bin 0 -> 266 bytes .../toolbar/arrow/twoheadrightarrow.png | Bin 0 -> 262 bytes .../images/toolbar/arrow/u-downarrow.png | Bin 0 -> 285 bytes .../images/toolbar/arrow/u-leftarrow.png | Bin 0 -> 275 bytes .../images/toolbar/arrow/u-leftrightarrow.png | Bin 0 -> 341 bytes .../images/toolbar/arrow/u-lftarrow.png | Bin 0 -> 277 bytes .../images/toolbar/arrow/u-lleftarrow.png | Bin 0 -> 305 bytes .../images/toolbar/arrow/u-longleftarrow.png | Bin 0 -> 281 bytes .../toolbar/arrow/u-longleftrightarrow.png | Bin 0 -> 330 bytes .../images/toolbar/arrow/u-longrightarrow.png | Bin 0 -> 288 bytes .../assets/images/toolbar/arrow/u-lsh.png | Bin 0 -> 252 bytes .../images/toolbar/arrow/u-nleftarrow.png | Bin 0 -> 350 bytes .../toolbar/arrow/u-nleftrightarrow.png | Bin 0 -> 400 bytes .../images/toolbar/arrow/u-nrightarrow.png | Bin 0 -> 349 bytes .../images/toolbar/arrow/u-rightarrow.png | Bin 0 -> 292 bytes .../images/toolbar/arrow/u-rrightarrow.png | Bin 0 -> 314 bytes .../assets/images/toolbar/arrow/u-rsh.png | Bin 0 -> 255 bytes .../assets/images/toolbar/arrow/u-uparrow.png | Bin 0 -> 282 bytes .../images/toolbar/arrow/u-updownarrow.png | Bin 0 -> 338 bytes .../assets/images/toolbar/arrow/uparrow.png | Bin 0 -> 251 bytes .../images/toolbar/arrow/updownarrow.png | Bin 0 -> 302 bytes .../images/toolbar/arrow/upharpoonleft.png | Bin 0 -> 188 bytes .../images/toolbar/arrow/upharpoonright.png | Bin 0 -> 200 bytes .../images/toolbar/arrow/upuparrows.png | Bin 0 -> 281 bytes .../assets/images/toolbar/brackets/1.png | Bin 0 -> 748 bytes .../assets/images/toolbar/brackets/2.png | Bin 0 -> 634 bytes .../assets/images/toolbar/brackets/3.png | Bin 0 -> 813 bytes .../assets/images/toolbar/brackets/4.png | Bin 0 -> 635 bytes .../kityformula/assets/images/toolbar/btn.png | Bin 0 -> 6784 bytes .../assets/images/toolbar/button/brackets.png | Bin 0 -> 1284 bytes .../assets/images/toolbar/button/down.png | Bin 0 -> 979 bytes .../assets/images/toolbar/button/frac.png | Bin 0 -> 801 bytes .../assets/images/toolbar/button/fx.png | Bin 0 -> 1738 bytes .../assets/images/toolbar/button/int.png | Bin 0 -> 4273 bytes .../assets/images/toolbar/button/lim.png | Bin 0 -> 4273 bytes .../assets/images/toolbar/button/open.png | Bin 0 -> 983 bytes .../assets/images/toolbar/button/script.png | Bin 0 -> 1311 bytes .../assets/images/toolbar/button/sin.png | Bin 0 -> 1084 bytes .../assets/images/toolbar/button/sqrt.png | Bin 0 -> 1381 bytes .../assets/images/toolbar/button/sum.png | Bin 0 -> 4273 bytes .../assets/images/toolbar/button/tick.png | Bin 0 -> 2960 bytes .../assets/images/toolbar/button/up.png | Bin 0 -> 969 bytes .../assets/images/toolbar/char.png | Bin 0 -> 89633 bytes .../assets/images/toolbar/char/bb/a.png | Bin 0 -> 609 bytes .../assets/images/toolbar/char/bb/b.png | Bin 0 -> 617 bytes .../assets/images/toolbar/char/bb/c.png | Bin 0 -> 582 bytes .../assets/images/toolbar/char/bb/d.png | Bin 0 -> 525 bytes .../assets/images/toolbar/char/bb/e.png | Bin 0 -> 543 bytes .../assets/images/toolbar/char/bb/f.png | Bin 0 -> 500 bytes .../assets/images/toolbar/char/bb/g.png | Bin 0 -> 706 bytes .../assets/images/toolbar/char/bb/h.png | Bin 0 -> 537 bytes .../assets/images/toolbar/char/bb/i.png | Bin 0 -> 319 bytes .../assets/images/toolbar/char/bb/j.png | Bin 0 -> 388 bytes .../assets/images/toolbar/char/bb/k.png | Bin 0 -> 719 bytes .../assets/images/toolbar/char/bb/l.png | Bin 0 -> 376 bytes .../assets/images/toolbar/char/bb/m.png | Bin 0 -> 778 bytes .../assets/images/toolbar/char/bb/n.png | Bin 0 -> 644 bytes .../assets/images/toolbar/char/bb/o.png | Bin 0 -> 680 bytes .../assets/images/toolbar/char/bb/p.png | Bin 0 -> 483 bytes .../assets/images/toolbar/char/bb/q.png | Bin 0 -> 825 bytes .../assets/images/toolbar/char/bb/r.png | Bin 0 -> 579 bytes .../assets/images/toolbar/char/bb/s.png | Bin 0 -> 665 bytes .../assets/images/toolbar/char/bb/t.png | Bin 0 -> 448 bytes .../assets/images/toolbar/char/bb/u.png | Bin 0 -> 468 bytes .../assets/images/toolbar/char/bb/v.png | Bin 0 -> 580 bytes .../assets/images/toolbar/char/bb/w.png | Bin 0 -> 861 bytes .../assets/images/toolbar/char/bb/x.png | Bin 0 -> 709 bytes .../assets/images/toolbar/char/bb/y.png | Bin 0 -> 556 bytes .../assets/images/toolbar/char/bb/z.png | Bin 0 -> 565 bytes .../assets/images/toolbar/char/cal/a.png | Bin 0 -> 499 bytes .../assets/images/toolbar/char/cal/b.png | Bin 0 -> 599 bytes .../assets/images/toolbar/char/cal/c.png | Bin 0 -> 482 bytes .../assets/images/toolbar/char/cal/d.png | Bin 0 -> 581 bytes .../assets/images/toolbar/char/cal/e.png | Bin 0 -> 471 bytes .../assets/images/toolbar/char/cal/f.png | Bin 0 -> 483 bytes .../assets/images/toolbar/char/cal/g.png | Bin 0 -> 579 bytes .../assets/images/toolbar/char/cal/h.png | Bin 0 -> 599 bytes .../assets/images/toolbar/char/cal/i.png | Bin 0 -> 467 bytes .../assets/images/toolbar/char/cal/j.png | Bin 0 -> 531 bytes .../assets/images/toolbar/char/cal/k.png | Bin 0 -> 600 bytes .../assets/images/toolbar/char/cal/l.png | Bin 0 -> 493 bytes .../assets/images/toolbar/char/cal/m.png | Bin 0 -> 722 bytes .../assets/images/toolbar/char/cal/n.png | Bin 0 -> 623 bytes .../assets/images/toolbar/char/cal/o.png | Bin 0 -> 597 bytes .../assets/images/toolbar/char/cal/p.png | Bin 0 -> 581 bytes .../assets/images/toolbar/char/cal/q.png | Bin 0 -> 663 bytes .../assets/images/toolbar/char/cal/r.png | Bin 0 -> 641 bytes .../assets/images/toolbar/char/cal/s.png | Bin 0 -> 527 bytes .../assets/images/toolbar/char/cal/t.png | Bin 0 -> 431 bytes .../assets/images/toolbar/char/cal/u.png | Bin 0 -> 603 bytes .../assets/images/toolbar/char/cal/v.png | Bin 0 -> 518 bytes .../assets/images/toolbar/char/cal/w.png | Bin 0 -> 759 bytes .../assets/images/toolbar/char/cal/x.png | Bin 0 -> 546 bytes .../assets/images/toolbar/char/cal/y.png | Bin 0 -> 559 bytes .../assets/images/toolbar/char/cal/z.png | Bin 0 -> 559 bytes .../assets/images/toolbar/char/frak/a.png | Bin 0 -> 393 bytes .../assets/images/toolbar/char/frak/b.png | Bin 0 -> 438 bytes .../assets/images/toolbar/char/frak/c.png | Bin 0 -> 330 bytes .../assets/images/toolbar/char/frak/d.png | Bin 0 -> 445 bytes .../assets/images/toolbar/char/frak/e.png | Bin 0 -> 356 bytes .../assets/images/toolbar/char/frak/f.png | Bin 0 -> 392 bytes .../assets/images/toolbar/char/frak/g.png | Bin 0 -> 480 bytes .../assets/images/toolbar/char/frak/h.png | Bin 0 -> 476 bytes .../assets/images/toolbar/char/frak/i.png | Bin 0 -> 296 bytes .../assets/images/toolbar/char/frak/j.png | Bin 0 -> 320 bytes .../assets/images/toolbar/char/frak/k.png | Bin 0 -> 448 bytes .../assets/images/toolbar/char/frak/l.png | Bin 0 -> 312 bytes .../assets/images/toolbar/char/frak/m.png | Bin 0 -> 450 bytes .../assets/images/toolbar/char/frak/n.png | Bin 0 -> 382 bytes .../assets/images/toolbar/char/frak/o.png | Bin 0 -> 382 bytes .../assets/images/toolbar/char/frak/p.png | Bin 0 -> 462 bytes .../assets/images/toolbar/char/frak/q.png | Bin 0 -> 439 bytes .../assets/images/toolbar/char/frak/r.png | Bin 0 -> 328 bytes .../assets/images/toolbar/char/frak/s.png | Bin 0 -> 405 bytes .../assets/images/toolbar/char/frak/t.png | Bin 0 -> 296 bytes .../assets/images/toolbar/char/frak/u.png | Bin 0 -> 389 bytes .../assets/images/toolbar/char/frak/ua.png | Bin 0 -> 653 bytes .../assets/images/toolbar/char/frak/ub.png | Bin 0 -> 707 bytes .../assets/images/toolbar/char/frak/uc.png | Bin 0 -> 517 bytes .../assets/images/toolbar/char/frak/ud.png | Bin 0 -> 658 bytes .../assets/images/toolbar/char/frak/ue.png | Bin 0 -> 566 bytes .../assets/images/toolbar/char/frak/uf.png | Bin 0 -> 616 bytes .../assets/images/toolbar/char/frak/ug.png | Bin 0 -> 662 bytes .../assets/images/toolbar/char/frak/uh.png | Bin 0 -> 574 bytes .../assets/images/toolbar/char/frak/ui.png | Bin 0 -> 483 bytes .../assets/images/toolbar/char/frak/uj.png | Bin 0 -> 533 bytes .../assets/images/toolbar/char/frak/uk.png | Bin 0 -> 577 bytes .../assets/images/toolbar/char/frak/ul.png | Bin 0 -> 537 bytes .../assets/images/toolbar/char/frak/um.png | Bin 0 -> 827 bytes .../assets/images/toolbar/char/frak/un.png | Bin 0 -> 686 bytes .../assets/images/toolbar/char/frak/uo.png | Bin 0 -> 606 bytes .../assets/images/toolbar/char/frak/up.png | Bin 0 -> 685 bytes .../assets/images/toolbar/char/frak/uq.png | Bin 0 -> 606 bytes .../assets/images/toolbar/char/frak/ur.png | Bin 0 -> 690 bytes .../assets/images/toolbar/char/frak/us.png | Bin 0 -> 674 bytes .../assets/images/toolbar/char/frak/ut.png | Bin 0 -> 562 bytes .../assets/images/toolbar/char/frak/uu.png | Bin 0 -> 532 bytes .../assets/images/toolbar/char/frak/uv.png | Bin 0 -> 696 bytes .../assets/images/toolbar/char/frak/uw.png | Bin 0 -> 847 bytes .../assets/images/toolbar/char/frak/ux.png | Bin 0 -> 575 bytes .../assets/images/toolbar/char/frak/uy.png | Bin 0 -> 726 bytes .../assets/images/toolbar/char/frak/uz.png | Bin 0 -> 527 bytes .../assets/images/toolbar/char/frak/v.png | Bin 0 -> 423 bytes .../assets/images/toolbar/char/frak/w.png | Bin 0 -> 496 bytes .../assets/images/toolbar/char/frak/x.png | Bin 0 -> 405 bytes .../assets/images/toolbar/char/frak/y.png | Bin 0 -> 450 bytes .../assets/images/toolbar/char/frak/z.png | Bin 0 -> 435 bytes .../images/toolbar/char/greek/lower/alpha.png | Bin 0 -> 339 bytes .../images/toolbar/char/greek/lower/beta.png | Bin 0 -> 382 bytes .../images/toolbar/char/greek/lower/chi.png | Bin 0 -> 344 bytes .../images/toolbar/char/greek/lower/delta.png | Bin 0 -> 329 bytes .../toolbar/char/greek/lower/epsilon.png | Bin 0 -> 265 bytes .../images/toolbar/char/greek/lower/eta.png | Bin 0 -> 311 bytes .../images/toolbar/char/greek/lower/gamma.png | Bin 0 -> 303 bytes .../images/toolbar/char/greek/lower/iota.png | Bin 0 -> 250 bytes .../images/toolbar/char/greek/lower/kappa.png | Bin 0 -> 304 bytes .../toolbar/char/greek/lower/lambda.png | Bin 0 -> 309 bytes .../images/toolbar/char/greek/lower/mu.png | Bin 0 -> 309 bytes .../images/toolbar/char/greek/lower/nu.png | Bin 0 -> 287 bytes .../images/toolbar/char/greek/lower/omega.png | Bin 0 -> 307 bytes .../toolbar/char/greek/lower/omicron.png | Bin 0 -> 298 bytes .../images/toolbar/char/greek/lower/phi.png | Bin 0 -> 369 bytes .../images/toolbar/char/greek/lower/pi.png | Bin 0 -> 276 bytes .../images/toolbar/char/greek/lower/psi.png | Bin 0 -> 362 bytes .../images/toolbar/char/greek/lower/rho.png | Bin 0 -> 328 bytes .../images/toolbar/char/greek/lower/sigma.png | Bin 0 -> 288 bytes .../images/toolbar/char/greek/lower/tau.png | Bin 0 -> 255 bytes .../images/toolbar/char/greek/lower/theta.png | Bin 0 -> 370 bytes .../toolbar/char/greek/lower/upsilon.png | Bin 0 -> 312 bytes .../images/toolbar/char/greek/lower/xi.png | Bin 0 -> 358 bytes .../images/toolbar/char/greek/lower/zeta.png | Bin 0 -> 322 bytes .../toolbar/char/greek/misc/digamma.png | Bin 0 -> 336 bytes .../toolbar/char/greek/misc/varepsilon.png | Bin 0 -> 375 bytes .../toolbar/char/greek/misc/varkappa.png | Bin 0 -> 446 bytes .../images/toolbar/char/greek/misc/varphi.png | Bin 0 -> 520 bytes .../images/toolbar/char/greek/misc/varpi.png | Bin 0 -> 476 bytes .../images/toolbar/char/greek/misc/varrho.png | Bin 0 -> 503 bytes .../toolbar/char/greek/misc/varsigma.png | Bin 0 -> 360 bytes .../toolbar/char/greek/misc/vartheta.png | Bin 0 -> 532 bytes .../images/toolbar/char/greek/upper/alpha.png | Bin 0 -> 349 bytes .../images/toolbar/char/greek/upper/beta.png | Bin 0 -> 326 bytes .../images/toolbar/char/greek/upper/chi.png | Bin 0 -> 364 bytes .../images/toolbar/char/greek/upper/delta.png | Bin 0 -> 332 bytes .../toolbar/char/greek/upper/epsilon.png | Bin 0 -> 319 bytes .../images/toolbar/char/greek/upper/eta.png | Bin 0 -> 265 bytes .../images/toolbar/char/greek/upper/gamma.png | Bin 0 -> 255 bytes .../images/toolbar/char/greek/upper/iota.png | Bin 0 -> 223 bytes .../images/toolbar/char/greek/upper/kappa.png | Bin 0 -> 364 bytes .../toolbar/char/greek/upper/lambda.png | Bin 0 -> 324 bytes .../images/toolbar/char/greek/upper/mu.png | Bin 0 -> 372 bytes .../images/toolbar/char/greek/upper/nu.png | Bin 0 -> 353 bytes .../images/toolbar/char/greek/upper/omega.png | Bin 0 -> 409 bytes .../toolbar/char/greek/upper/omicron.png | Bin 0 -> 370 bytes .../images/toolbar/char/greek/upper/phi.png | Bin 0 -> 364 bytes .../images/toolbar/char/greek/upper/pi.png | Bin 0 -> 250 bytes .../images/toolbar/char/greek/upper/psi.png | Bin 0 -> 344 bytes .../images/toolbar/char/greek/upper/rho.png | Bin 0 -> 293 bytes .../images/toolbar/char/greek/upper/sigma.png | Bin 0 -> 342 bytes .../images/toolbar/char/greek/upper/tau.png | Bin 0 -> 285 bytes .../images/toolbar/char/greek/upper/theta.png | Bin 0 -> 392 bytes .../toolbar/char/greek/upper/upsilon.png | Bin 0 -> 297 bytes .../images/toolbar/char/greek/upper/xi.png | Bin 0 -> 258 bytes .../images/toolbar/char/greek/upper/zeta.png | Bin 0 -> 364 bytes .../assets/images/toolbar/char/math/aleph.png | Bin 0 -> 551 bytes .../images/toolbar/char/math/approx.png | Bin 0 -> 494 bytes .../assets/images/toolbar/char/math/ast.png | Bin 0 -> 363 bytes .../images/toolbar/char/math/baifenhao.png | Bin 0 -> 690 bytes .../images/toolbar/char/math/because.png | Bin 0 -> 262 bytes .../assets/images/toolbar/char/math/beth.png | Bin 0 -> 324 bytes .../images/toolbar/char/math/blacksquare.png | Bin 0 -> 194 bytes .../assets/images/toolbar/char/math/cap.png | Bin 0 -> 318 bytes .../assets/images/toolbar/char/math/cdot.png | Bin 0 -> 187 bytes .../assets/images/toolbar/char/math/circ.png | Bin 0 -> 362 bytes .../assets/images/toolbar/char/math/cong.png | Bin 0 -> 424 bytes .../assets/images/toolbar/char/math/cup.png | Bin 0 -> 313 bytes .../assets/images/toolbar/char/math/ddots.png | Bin 0 -> 275 bytes .../assets/images/toolbar/char/math/div.png | Bin 0 -> 227 bytes .../images/toolbar/char/math/downarrow.png | Bin 0 -> 320 bytes .../assets/images/toolbar/char/math/eq.png | Bin 0 -> 176 bytes .../assets/images/toolbar/char/math/equiv.png | Bin 0 -> 221 bytes .../images/toolbar/char/math/exists.png | Bin 0 -> 272 bytes .../images/toolbar/char/math/forall.png | Bin 0 -> 444 bytes .../assets/images/toolbar/char/math/geq.png | Bin 0 -> 310 bytes .../assets/images/toolbar/char/math/gets.png | Bin 0 -> 325 bytes .../assets/images/toolbar/char/math/gg.png | Bin 0 -> 334 bytes .../assets/images/toolbar/char/math/gt.png | Bin 0 -> 278 bytes .../assets/images/toolbar/char/math/in.png | Bin 0 -> 368 bytes .../assets/images/toolbar/char/math/infty.png | Bin 0 -> 399 bytes .../toolbar/char/math/leftrightarrow.png | Bin 0 -> 448 bytes .../assets/images/toolbar/char/math/leq.png | Bin 0 -> 288 bytes .../assets/images/toolbar/char/math/ll.png | Bin 0 -> 340 bytes .../assets/images/toolbar/char/math/lt.png | Bin 0 -> 278 bytes .../assets/images/toolbar/char/math/minus.png | Bin 0 -> 190 bytes .../assets/images/toolbar/char/math/mp.png | Bin 0 -> 225 bytes .../assets/images/toolbar/char/math/neg.png | Bin 0 -> 223 bytes .../images/toolbar/char/math/nexists.png | Bin 0 -> 508 bytes .../assets/images/toolbar/char/math/ni.png | Bin 0 -> 373 bytes .../images/toolbar/char/math/partial.png | Bin 0 -> 551 bytes .../assets/images/toolbar/char/math/plus.png | Bin 0 -> 265 bytes .../assets/images/toolbar/char/math/pm.png | Bin 0 -> 234 bytes .../images/toolbar/char/math/propto.png | Bin 0 -> 489 bytes .../assets/images/toolbar/char/math/sim.png | Bin 0 -> 261 bytes .../assets/images/toolbar/char/math/simeq.png | Bin 0 -> 307 bytes .../assets/images/toolbar/char/math/surd.png | Bin 0 -> 477 bytes .../images/toolbar/char/math/tanhao.png | Bin 0 -> 216 bytes .../images/toolbar/char/math/therefore.png | Bin 0 -> 253 bytes .../assets/images/toolbar/char/math/times.png | Bin 0 -> 245 bytes .../assets/images/toolbar/char/math/to.png | Bin 0 -> 333 bytes .../images/toolbar/char/math/uparrow.png | Bin 0 -> 320 bytes .../images/toolbar/char/math/varnothing.png | Bin 0 -> 584 bytes .../assets/images/toolbar/char/math/vdots.png | Bin 0 -> 266 bytes .../assets/images/toolbar/char/not/gneqq.png | Bin 0 -> 408 bytes .../assets/images/toolbar/char/not/gnsim.png | Bin 0 -> 443 bytes .../assets/images/toolbar/char/not/lneqq.png | Bin 0 -> 411 bytes .../assets/images/toolbar/char/not/lnsim.png | Bin 0 -> 447 bytes .../images/toolbar/char/not/nbdash-1.png | Bin 0 -> 289 bytes .../assets/images/toolbar/char/not/ncong.png | Bin 0 -> 658 bytes .../assets/images/toolbar/char/not/neq.png | Bin 0 -> 415 bytes .../assets/images/toolbar/char/not/nequiv.png | Bin 0 -> 463 bytes .../images/toolbar/char/not/nexists.png | Bin 0 -> 317 bytes .../assets/images/toolbar/char/not/ngeq.png | Bin 0 -> 526 bytes .../assets/images/toolbar/char/not/ngtr.png | Bin 0 -> 432 bytes .../assets/images/toolbar/char/not/nleq.png | Bin 0 -> 515 bytes .../assets/images/toolbar/char/not/nless.png | Bin 0 -> 518 bytes .../assets/images/toolbar/char/not/nmid.png | Bin 0 -> 245 bytes .../assets/images/toolbar/char/not/notin.png | Bin 0 -> 383 bytes .../images/toolbar/char/not/nparallel.png | Bin 0 -> 253 bytes .../assets/images/toolbar/char/not/nprec.png | Bin 0 -> 353 bytes .../assets/images/toolbar/char/not/nsim.png | Bin 0 -> 468 bytes .../images/toolbar/char/not/nsubseteq.png | Bin 0 -> 401 bytes .../assets/images/toolbar/char/not/nsucc.png | Bin 0 -> 367 bytes .../images/toolbar/char/not/nsupseteq.png | Bin 0 -> 400 bytes .../images/toolbar/char/not/ntriangleleft.png | Bin 0 -> 409 bytes .../toolbar/char/not/ntrianglelefteq.png | Bin 0 -> 455 bytes .../toolbar/char/not/ntriangleright.png | Bin 0 -> 406 bytes .../toolbar/char/not/ntrianglerighteq.png | Bin 0 -> 440 bytes .../images/toolbar/char/not/nvdash-1.png | Bin 0 -> 321 bytes .../images/toolbar/char/not/nvdash-2.png | Bin 0 -> 342 bytes .../images/toolbar/char/not/nvdash-3.png | Bin 0 -> 340 bytes .../assets/images/toolbar/char/not/nvdash.png | Bin 0 -> 289 bytes .../images/toolbar/char/not/precnsim.png | Bin 0 -> 426 bytes .../images/toolbar/char/not/subsetneq.png | Bin 0 -> 339 bytes .../images/toolbar/char/not/succnsim.png | Bin 0 -> 465 bytes .../images/toolbar/char/not/supsetneq.png | Bin 0 -> 330 bytes .../assets/images/toolbar/char/rm/a.png | Bin 0 -> 303 bytes .../assets/images/toolbar/char/rm/b.png | Bin 0 -> 291 bytes .../assets/images/toolbar/char/rm/c.png | Bin 0 -> 291 bytes .../assets/images/toolbar/char/rm/d.png | Bin 0 -> 308 bytes .../assets/images/toolbar/char/rm/e.png | Bin 0 -> 311 bytes .../assets/images/toolbar/char/rm/f.png | Bin 0 -> 246 bytes .../assets/images/toolbar/char/rm/g.png | Bin 0 -> 354 bytes .../assets/images/toolbar/char/rm/h.png | Bin 0 -> 245 bytes .../assets/images/toolbar/char/rm/i.png | Bin 0 -> 208 bytes .../assets/images/toolbar/char/rm/j.png | Bin 0 -> 226 bytes .../assets/images/toolbar/char/rm/k.png | Bin 0 -> 301 bytes .../assets/images/toolbar/char/rm/l.png | Bin 0 -> 183 bytes .../assets/images/toolbar/char/rm/m.png | Bin 0 -> 288 bytes .../assets/images/toolbar/char/rm/n.png | Bin 0 -> 239 bytes .../assets/images/toolbar/char/rm/o.png | Bin 0 -> 308 bytes .../assets/images/toolbar/char/rm/p.png | Bin 0 -> 298 bytes .../assets/images/toolbar/char/rm/q.png | Bin 0 -> 314 bytes .../assets/images/toolbar/char/rm/r.png | Bin 0 -> 227 bytes .../assets/images/toolbar/char/rm/s.png | Bin 0 -> 296 bytes .../assets/images/toolbar/char/rm/t.png | Bin 0 -> 242 bytes .../assets/images/toolbar/char/rm/u.png | Bin 0 -> 259 bytes .../assets/images/toolbar/char/rm/ua.png | Bin 0 -> 343 bytes .../assets/images/toolbar/char/rm/ub.png | Bin 0 -> 363 bytes .../assets/images/toolbar/char/rm/uc.png | Bin 0 -> 378 bytes .../assets/images/toolbar/char/rm/ud.png | Bin 0 -> 310 bytes .../assets/images/toolbar/char/rm/ue.png | Bin 0 -> 308 bytes .../assets/images/toolbar/char/rm/uf.png | Bin 0 -> 260 bytes .../assets/images/toolbar/char/rm/ug.png | Bin 0 -> 394 bytes .../assets/images/toolbar/char/rm/uh.png | Bin 0 -> 266 bytes .../assets/images/toolbar/char/rm/ui.png | Bin 0 -> 212 bytes .../assets/images/toolbar/char/rm/uj.png | Bin 0 -> 242 bytes .../assets/images/toolbar/char/rm/uk.png | Bin 0 -> 345 bytes .../assets/images/toolbar/char/rm/ul.png | Bin 0 -> 228 bytes .../assets/images/toolbar/char/rm/um.png | Bin 0 -> 368 bytes .../assets/images/toolbar/char/rm/un.png | Bin 0 -> 338 bytes .../assets/images/toolbar/char/rm/uo.png | Bin 0 -> 371 bytes .../assets/images/toolbar/char/rm/up.png | Bin 0 -> 280 bytes .../assets/images/toolbar/char/rm/uq.png | Bin 0 -> 425 bytes .../assets/images/toolbar/char/rm/ur.png | Bin 0 -> 336 bytes .../assets/images/toolbar/char/rm/us.png | Bin 0 -> 363 bytes .../assets/images/toolbar/char/rm/ut.png | Bin 0 -> 259 bytes .../assets/images/toolbar/char/rm/uu.png | Bin 0 -> 297 bytes .../assets/images/toolbar/char/rm/uv.png | Bin 0 -> 361 bytes .../assets/images/toolbar/char/rm/uw.png | Bin 0 -> 442 bytes .../assets/images/toolbar/char/rm/ux.png | Bin 0 -> 374 bytes .../assets/images/toolbar/char/rm/uy.png | Bin 0 -> 341 bytes .../assets/images/toolbar/char/rm/uz.png | Bin 0 -> 366 bytes .../assets/images/toolbar/char/rm/v.png | Bin 0 -> 301 bytes .../assets/images/toolbar/char/rm/w.png | Bin 0 -> 339 bytes .../assets/images/toolbar/char/rm/x.png | Bin 0 -> 303 bytes .../assets/images/toolbar/char/rm/y.png | Bin 0 -> 329 bytes .../assets/images/toolbar/char/rm/z.png | Bin 0 -> 292 bytes .../assets/images/toolbar/frac/1.png | Bin 0 -> 965 bytes .../assets/images/toolbar/frac/2.png | Bin 0 -> 669 bytes .../assets/images/toolbar/frac/3.png | Bin 0 -> 596 bytes .../assets/images/toolbar/frac/c1.png | Bin 0 -> 1115 bytes .../assets/images/toolbar/frac/c2.png | Bin 0 -> 1077 bytes .../assets/images/toolbar/frac/c4.png | Bin 0 -> 1124 bytes .../assets/images/toolbar/frac/c5.png | Bin 0 -> 651 bytes .../assets/images/toolbar/func/1.png | Bin 0 -> 918 bytes .../assets/images/toolbar/func/2.png | Bin 0 -> 952 bytes .../assets/images/toolbar/func/3.png | Bin 0 -> 931 bytes .../assets/images/toolbar/func/4.png | Bin 0 -> 880 bytes .../assets/images/toolbar/func/5.png | Bin 0 -> 904 bytes .../assets/images/toolbar/func/6.png | Bin 0 -> 893 bytes .../assets/images/toolbar/func/c1.png | Bin 0 -> 857 bytes .../assets/images/toolbar/func/c2.png | Bin 0 -> 1003 bytes .../assets/images/toolbar/func/c3.png | Bin 0 -> 2532 bytes .../assets/images/toolbar/int/1.png | Bin 0 -> 873 bytes .../assets/images/toolbar/int/2.png | Bin 0 -> 1148 bytes .../assets/images/toolbar/int/3.png | Bin 0 -> 1151 bytes .../assets/images/toolbar/int/4.png | Bin 0 -> 1406 bytes .../assets/images/toolbar/int/5.png | Bin 0 -> 1486 bytes .../assets/images/toolbar/int/6.png | Bin 0 -> 1376 bytes .../assets/images/toolbar/large/1.png | Bin 0 -> 889 bytes .../assets/images/toolbar/large/2.png | Bin 0 -> 1221 bytes .../assets/images/toolbar/large/3.png | Bin 0 -> 988 bytes .../assets/images/toolbar/other.png | Bin 0 -> 40838 bytes .../assets/images/toolbar/script/1.png | Bin 0 -> 445 bytes .../assets/images/toolbar/script/2.png | Bin 0 -> 464 bytes .../assets/images/toolbar/script/3.png | Bin 0 -> 507 bytes .../assets/images/toolbar/script/4.png | Bin 0 -> 596 bytes .../assets/images/toolbar/script/c1.png | Bin 0 -> 829 bytes .../assets/images/toolbar/script/c2.png | Bin 0 -> 626 bytes .../assets/images/toolbar/script/c3.png | Bin 0 -> 753 bytes .../assets/images/toolbar/sqrt/1.png | Bin 0 -> 800 bytes .../assets/images/toolbar/sqrt/2.png | Bin 0 -> 916 bytes .../assets/images/toolbar/sqrt/3.png | Bin 0 -> 894 bytes .../assets/images/toolbar/sqrt/4.png | Bin 0 -> 916 bytes .../assets/images/toolbar/sqrt/c1.png | Bin 0 -> 2614 bytes .../assets/images/toolbar/sqrt/c2.png | Bin 0 -> 1794 bytes .../assets/images/toolbar/ys/1.png | Bin 0 -> 1927 bytes .../assets/images/toolbar/ys/2.png | Bin 0 -> 2553 bytes .../assets/images/toolbar/ys/3.png | Bin 0 -> 1200 bytes .../kityformula/assets/styles/base.css | 40 + .../kityformula/assets/styles/page.css | 12 + .../kityformula/assets/styles/scrollbar.css | 78 + .../kityformula/assets/styles/ui.css | 536 ++ .../kityformula/assets/theme/default/fui.css | 540 ++ .../assets/theme/default/fui.min.css | 10 + .../assets/theme/default/images/close.png | Bin 0 -> 836 bytes .../assets/theme/default/images/down.png | Bin 0 -> 1089 bytes .../assets/theme/default/images/open.png | Bin 0 -> 859 bytes .../assets/theme/default/images/up.png | Bin 0 -> 1080 bytes .../kityformula/js/jquery-3.6.0.min.js | 2 + .../js/kity-formula-parser.all.min.js | 9 + .../kityformula/js/kity-formula-render.all.js | 5757 +++++++++++ .../js/kityformula-editor.all.min.js | 12 + .../kityformula/js/kitygraph.all.js | 8572 +++++++++++++++++ .../kityformula/loading.gif | Bin 0 -> 1787 bytes .../kityformula/resource/KF_AMS_BB.woff | Bin 0 -> 5764 bytes .../kityformula/resource/KF_AMS_CAL.woff | Bin 0 -> 5576 bytes .../kityformula/resource/KF_AMS_FRAK.woff | Bin 0 -> 9956 bytes .../kityformula/resource/KF_AMS_MAIN.woff | Bin 0 -> 52540 bytes .../kityformula/resource/KF_AMS_ROMAN.woff | Bin 0 -> 6560 bytes .../plugins/kityformula-editor/plugin.js | 73 + .../plugins/kityformula-editor/plugin.min.js | 73 + src/components/Tinymce/src/Editor.vue | 4 + src/components/Tinymce/src/Editor2.vue | 9 +- src/components/Tinymce/src/tinymce2.ts | 8 +- src/hooks/setting/index.ts | 3 + 476 files changed, 15846 insertions(+), 6 deletions(-) create mode 100644 public/resource/tinymce/plugins/kityformula-editor/icon.svg create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityFormula.html create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar-bg.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bg.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bottom.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/btn.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/down.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/top.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/up.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-bg.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-left.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-right.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-bg.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-left.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-right.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/aleph.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/bbbk.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/beth.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/circleds.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/complement.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/daleth.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/ell.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/eth.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/finv.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/game.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/gimel.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hbar.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hslash.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/im.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/mho.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/partial.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/re.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/wp.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowleft.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowright.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowleft.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowright.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downdownarrows.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonleft.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonright.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/gets.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftarrowtail.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoondown.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoonup.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftleftarrows.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrows.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightharpoons.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightsquigarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowleft.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowright.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/multimap.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nearrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nleftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nwarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightarrowtail.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoondown.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoonup.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftarrows.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftharpoons.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightrightarrows.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightsquigarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/searrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/swarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/to.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadleftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-downarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lleftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lsh.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rsh.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-uparrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-updownarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/uparrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/updownarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonleft.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonright.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upuparrows.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/4.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/btn.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/brackets.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/down.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/frac.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/fx.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/int.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/lim.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/open.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/script.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sin.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sqrt.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sum.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/tick.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/up.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/a.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/b.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/c.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/d.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/e.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/f.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/g.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/h.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/i.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/j.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/k.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/l.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/m.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/n.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/o.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/p.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/q.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/r.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/s.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/t.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/u.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/v.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/w.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/x.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/y.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/z.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/a.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/b.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/c.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/d.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/e.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/f.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/g.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/h.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/i.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/j.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/k.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/l.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/m.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/n.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/o.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/p.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/q.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/r.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/s.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/t.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/u.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/v.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/w.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/x.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/y.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/z.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/a.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/b.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/c.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/d.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/e.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/f.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/g.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/h.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/i.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/j.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/k.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/l.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/m.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/n.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/o.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/p.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/q.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/r.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/s.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/t.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/u.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ua.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ub.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uc.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ud.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ue.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uf.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ug.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uh.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ui.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uj.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uk.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ul.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/um.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/un.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uo.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/up.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ur.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/us.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ut.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uu.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uv.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uw.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ux.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uy.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uz.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/v.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/w.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/x.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/y.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/z.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/alpha.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/beta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/chi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/delta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/epsilon.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/eta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/gamma.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/iota.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/kappa.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/lambda.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/mu.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/nu.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omega.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omicron.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/phi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/pi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/psi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/rho.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/sigma.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/tau.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/theta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/upsilon.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/xi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/zeta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/digamma.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varepsilon.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varkappa.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varphi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varpi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varrho.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varsigma.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/vartheta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/alpha.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/beta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/chi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/delta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/epsilon.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/eta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/gamma.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/iota.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/kappa.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/lambda.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/mu.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/nu.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omega.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omicron.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/phi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/pi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/psi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/rho.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/sigma.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/tau.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/theta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/upsilon.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/xi.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/zeta.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/aleph.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/approx.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ast.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/baifenhao.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/because.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/beth.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/blacksquare.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cap.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cdot.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/circ.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cong.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cup.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ddots.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/div.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/downarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/eq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/equiv.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/exists.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/forall.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/geq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gets.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gg.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gt.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/in.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/infty.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leftrightarrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ll.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/lt.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/minus.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/mp.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/neg.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/nexists.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ni.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/partial.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/plus.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/pm.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/propto.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/sim.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/simeq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/surd.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/tanhao.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/therefore.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/times.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/to.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/uparrow.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/varnothing.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/vdots.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gneqq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gnsim.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lneqq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lnsim.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nbdash-1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ncong.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/neq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nequiv.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nexists.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngeq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngtr.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nleq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nless.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nmid.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/notin.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nparallel.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nprec.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsim.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsubseteq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsucc.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsupseteq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleleft.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglelefteq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleright.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglerighteq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/precnsim.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/subsetneq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/succnsim.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/supsetneq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/a.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/b.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/c.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/d.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/e.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/f.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/g.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/h.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/i.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/j.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/k.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/l.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/m.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/n.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/o.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/p.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/q.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/r.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/s.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/t.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/u.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ua.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ub.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uc.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ud.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ue.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uf.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ug.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uh.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ui.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uj.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uk.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ul.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/um.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/un.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uo.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/up.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uq.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ur.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/us.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ut.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uu.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uv.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uw.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ux.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uy.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uz.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/v.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/w.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/x.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/y.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/z.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c4.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c5.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/4.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/5.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/6.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/4.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/5.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/6.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/other.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/4.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/4.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/1.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/2.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/3.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/close.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/down.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/open.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/up.png create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-parser.all.min.js create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/loading.gif create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_BB.woff create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_CAL.woff create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_FRAK.woff create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_MAIN.woff create mode 100644 public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_ROMAN.woff create mode 100644 public/resource/tinymce/plugins/kityformula-editor/plugin.js create mode 100644 public/resource/tinymce/plugins/kityformula-editor/plugin.min.js diff --git a/public/resource/tinymce/plugins/kityformula-editor/icon.svg b/public/resource/tinymce/plugins/kityformula-editor/icon.svg new file mode 100644 index 0000000..d0103e7 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityFormula.html b/public/resource/tinymce/plugins/kityformula-editor/kityFormula.html new file mode 100644 index 0000000..f5f25b5 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityFormula.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + +
+
+ sorry! Beta版本仅支持IE9及以上版本的浏览器,正式版本将会支持低版本浏览器,谢谢您的关注! +
+
+ + + + + + + + + \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar-bg.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9dedcc678245832448f459c712e72039d36a2d03 GIT binary patch literal 925 zcmaJ=J#W)M7&fg0RizFrNHCo)3zdk!61&YQrfTejTEbCCA~hq9eMwHKedc_@PDU04 z{{SKW0y_c;Rwj1Df8Z~0PUDn;aI$@0&-1*We$(qdIXZlBC`rrkNt4@;yZ3i(mo`^5g&O^Q9vWvFEDZ*C4wzU z&9gl5gE{74jHe{F;P200At0dzFAY!i5*yFR#fssSg4a%sydJPA!@!Vh)j-uWV4AX4H%wD|1awu?6;(WDRjVVz zMEVKX3@EIzaDw_yXJbq3EI8vlL5h-PnVi*R%BG6eXfz59U9Sp6HC@Ks&#Q4-DHR-? z28<+}&=?eo{+KSf1%;>AAwi1cuC@rX6f-7?|I0LQ|`wB zb{z`}1(}c#)#|54-7y@eqlwY3weB&L~A;|0;BOB)X?qZrfIDwvCTt(d|sM u^^g4hYw=6mb)EBJ{&W263$gZZO9!fS{B7^vr)O`AOUZ3_osX^Oul@jSrWpJH literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar.png new file mode 100644 index 0000000000000000000000000000000000000000..f98ded737e1ec99b2daf3b72dd53012f84a6439d GIT binary patch literal 1067 zcmaJ=&ui0A9M2pM9h6mNuuafs=H}G3Y1%bw!@3_$nyp~U))m&9rpenHw&Z2W+nNoL zO++Vx>>qGmJc@eoq=$iQ2l3!R5%H$rS&QHhM1ASn>R~k`dEfW=d_Lcw@AhP7+}GOG zN>P+AJt1bvdW?KSM_R~#?ef%dvUK899#5lLTvBXEjcKR=LE2E}U=}Lc%Hm5nL{ZJO zp3CFBe2G_)5mY=(&^0W=CSoJ5rKs}|g94n>%>@1B`8Ex7EkVyj<&bO%u&7V0+HiU` zlT%mc)wo8F41*z;Cjth<3UG}D)8X9&UD4%4 zWX~~dJRbKn!r=fx1e_HUD{jDax@!s|bW~fnu#QaNDJliDgcCH0bUy{ds>_;AwM?X7 zjH_4-8w`0V)qt}6f2d*9(GJeSzwsU@?BrG~$Yh~|mTZ+YZnoQVW$}Uy6^!g0LJPGj zP8JbHP7zr^nC3v=jBaYE5xFS-Q3~1sSSF3a5p@v*<6by@a7NM;#Lrt=g0V*l;dgEBchI&=5 z)-aY>sv(yl!7yH9|7mpXh)j=X*2k7?>VpqWGVL}Q>xnJlGr1D?)8bgp{ZRP%`}asQ z_XK`x@%J?Cyjg#Lcw>)R?DcPdE&E2NUcFd5xj~iHvr%wwc(niM4%%!Fe`Fu{?(~3b z=bk06-V{Ii+q!rCrwY5}&g4KxRC~KQB}l%`gACyNk$e~%7T%q>c=z>Y0sOkv`@QW# s=INQo>-nyY!9(TKeSzlo@g}ONh0=C9ZtN{@@!s`Kr!wNB*X!WnmBXq@IQ>f`ZLQ(`N0^xMZ8u223e!VSCdwnYN)#CQha%ErOsI z_vS$a|A8kj-t^$vzp!Ty;>C+6L2=S;st0RGG9Nt8^S<-G&zyGJclY|SL5AH`T>!&PbyXb+EQ;t<5?9v&iK1f2MenNFd;Qju94(xl-#ev{t z7$FTJ#^$*CQ5re!6j3llV?WgRZy!GL!1px%q-slc)IbxzwIrywZ1>&e)UA2^(H&4v zArlA?bwC=-!WgC+ztV+lo^6XfSV8DiRwC8_ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bottom.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e3df3d1c4a4291c9f812ac4a35ad4592e1cc671e GIT binary patch literal 1003 zcmaJ=&ui0A98Vq0F&yHMvAGG4H`EC>Y0@@p!{XeU%mtb;y5f2ewlsNN!QQ9ijv~nZ0GTgc+j+2tB<}~G&*%Gn-|y#b&(7TJ z>Auj-Fiej&trX~Zj((k8r|AFHw}Xdt7$9ni%;5^D89rhrEL=uFbBrZaK!&xkx`)OX zrUTl=5-I6<$;1w8L>M-7Jj!O6vGLF|%wgv&{=Tiz0sw2nk-`67&`0d`e1-k}wJy52Vq2t0EPYsYWcil3|q)PvW>*t;W`p zEcTZ;KAX)(8iEj~hrHwp@-T!$pn#tI^FZ>YixYvMpV-jE`LEcAwgM|Kiif^hzvf%0w~zTE6r9$M*e~ zsgB<8@aN&t(a|Hde_-I!3+wys%bjO-_dY#fKW@V<^(^QFf6)77Xz1CE yD=`fWj%>ZYdoMP)Sg!P)??bz>C;ii>nOG;Yu-g6h^ZJKd(e=~R8RgC7;?^H97C9jR literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/btn.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/btn.png new file mode 100644 index 0000000000000000000000000000000000000000..31c0b52f0662a08b3265963960c222f5e72ddda5 GIT binary patch literal 926 zcmaJ=J#W)M7fW^I=Z$e3jw#X>V6BMj`wo8Uh7g2l6Q+z^E8FdVwfb)F!fM50$< z#5_tkTM!z@dE)sq%)kgw!q|X6KYxKB3=DW$cVs6q@iaVHQao68hyHTr>j6A|2pT!! z0ug2&$fL73MY#c2x`@wI1NTAdg0aG3r~Lbu7Lz;FPfhNm7<&VpbCgok)tV>xG7@Rym@YE@I~8 z)i~WR6)c?kG)!1XVo)f0BQj?O5DVsAc;Qmf2Lzw%#nc7V+m1j#~`1s(0cmn E57{#v_5c6? literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/down.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/down.png new file mode 100644 index 0000000000000000000000000000000000000000..31c0b52f0662a08b3265963960c222f5e72ddda5 GIT binary patch literal 926 zcmaJ=J#W)M7fW^I=Z$e3jw#X>V6BMj`wo8Uh7g2l6Q+z^E8FdVwfb)F!fM50$< z#5_tkTM!z@dE)sq%)kgw!q|X6KYxKB3=DW$cVs6q@iaVHQao68hyHTr>j6A|2pT!! z0ug2&$fL73MY#c2x`@wI1NTAdg0aG3r~Lbu7Lz;FPfhNm7<&VpbCgok)tV>xG7@Rym@YE@I~8 z)i~WR6)c?kG)!1XVo)f0BQj?O5DVsAc;Qmf2Lzw%#nc7V+m1j#~`1s(0cmn E57{#v_5c6? literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/top.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/top.png new file mode 100644 index 0000000000000000000000000000000000000000..ecda0704e84186b1f8088cc3a81f0050780b663f GIT binary patch literal 996 zcmaJ=PiWIn9L}7ZGTlKhGI#Ltc2TfNleTX*EE~0HU9lOXE3D#SrpfCXw&ca+&1OZY zI24AU;z1PAfkzMGT~Nf+@Zwp-!A>Gb^(vG3(zTrjYe@3`@O|I!_kO?ctkxmX{4;^LmKk1KVY6j+>YYT-{j06qNCz}xGg}?g3u)e?j=>yWG7$o>u#E6O_ zK!_LP353M6K#Gcz5M?ilh;ccAWN93)_pQec%*R~Cd?t;W}4Jn;%t>r z;#Y|a(sKx$p0^y6)ci9oyr#)H$EUhu;GC*Jroda4DN9k5kPwPxP)riVOe`7Crq7}A zR8~x+;_2~NhpQ4}#l{ZpaLs*gyeBubg6*=%D)y{v*vxvw2CXB@R_|QIo_cMr**h1h zCs$y}2w`LYYIJ9dxhI@2?X&BpP*BmL+{ zb8G9~sV}=bKi8hFt!*saUw=Gu>EXbW+YMo3>ej2q_1!^r`+=0t=iPz)qxxjy*NugP pcb+x3-fW+E_x#Y;i#w3(8|03TmOccd_V@7KfW^I=Z$e3jw#X>V6BMj`wo8Uh7g2l6Q+z^E8FdVwfb)F!fM50$< z#5_tkTM!z@dE)sq%)kgw!q|X6KYxKB3=DW$cVs6q@iaVHQao68hyHTr>j6A|2pT!! z0ug2&$fL73MY#c2x`@wI1NTAdg0aG3r~Lbu7Lz;FPfhNm7<&VpbCgok)tV>xG7@Rym@YE@I~8 z)i~WR6)c?kG)!1XVo)f0BQj?O5DVsAc;Qmf2Lzw%#nc7V+m1j#~`1s(0cmn E57{#v_5c6? literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-bg.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9db6bee66f6ae920fbb433cc772c840a723437 GIT binary patch literal 938 zcmaJ=yN=U96g8wET4^N^6hMJSvkgeZ&)6uVm?#@3tR);piKV2(u_uX@wa3^K?4+Pr zBqaWTf`Sgw@B+O}YzY zQIZ9by;?=8B2`23J+OHoixztm)HgbtSZt-k8Kn^tgfvb0RN+ZH6{K3NmTSmzg&``* zGNevc36q0D!N7?d`w{g?2y#VdOcqp!EYtHN1kqMDOg3d=1rstS5+q*Ck5m9H>;KRo z*rF5K$A9wur*L8~BP{fBLKd;h8aFw}Lq(_+V~3L1CgixNVsAz$NoFJht$_w^5B<<1 zX>wg$g-*$qFitd;w}Ol z(t_)4xth3>n_D4>SY!jo{uAtVViJJ$k&(YU7h|X1hU@LjMQ!io3M?5RZ|q-6yX6w^uFKu=uZka~Y&OVQSoSikUmP)0)r@y{md4Bzx^7`$ivd9fz Vl~2EZdb7xHkJ;`T?+zcG{07G#ARYh! literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-left.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2f8c46ee09d0ff24cf64b524f9ad08792278bfa1 GIT binary patch literal 982 zcmaJ=O=#0l91nKrm<+u6fv`vBLBZyuU9;uUY_>`3DrStXbG^AVd0j)7yqLV%Y$5|e zL=eQ2HxGUuMDgN94?BDC;7wE*vdeCjfr3M+FJ0Stu!bb>gWvD>|G)qL_ioS5oF5)K zF~l&;aA8_2((w@ejtm~4|M{(*XLLADa%D1ytE6H0h{;&Ef~Kbe;X=owY=%isg`Q#75djsnWV;I6e7nH{+fvwtlrHF=ifZ=snvdqz zW=iH--IOhMY7(SFNCg~33=lfYZU94tZR~LfuzN|B^;w`|AAuB?jGKZe z0!iY;v6Lis$y z#EY^lM;eJloFd}Es!NP8?gpb>1q}tJZ+pbXE{GJ33SJ=!OEcX&g5&jM-Jnw@S};B| zJYM94=ty0luKyqEI6ZVgifBLIe+mbsRS)q+6yO!#q>ZbNMxi{Y`p6*IFJZjgt>SDA z6CBjA2h=$UoL;b93pau@ZM?3-f*TOSHBmuRSgOF;wgoe4HZzeQ&*r3LQWSH^tUMuS zgp@cTnhYN`_OC{Fx2SufY0tKF(K9}BsoQ;O>sL>7-uMF|l0NeQ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-right.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-right.png new file mode 100644 index 0000000000000000000000000000000000000000..9772c54a68519446ef3c4a307c7c6477f390086c GIT binary patch literal 994 zcmaJ=KTOn69Ik?3NI(okBa1J+0Zq96z3bVAis!Y!B^L2G~n~S4^qfr(Y7Y7yw4GtzI8Vw-69(SjMXVdom$@hJ~-~0W(cYAtjqPJ(L zhoY$7;-pq0V>kKwj~*uft6N{6k>M29D|iOYdHIS4j;+$OS%WkD0<1ZcYXO{D zn<`stiX_<$=CiWS ziNZNCCrEN$Z*nzcExXXeO|ISIX1TW9#0suYB5N>kR-io|AQ#k+tT^p+(c0=YxOUrI zGJ0DsOOj!e#{Sjl<`!{JGHuzGELz5g9&vj>Z0+t0eI{4pT2afF;}6x{{r$0yuDPcV zKfM?}mLE)|hEL|$$JD^Uz`c#m`<>fAzJJ@;_;~r(-p-x=TQ~2X-n5SI{oLw4ab=~i qZ{*4D?)rrXN45vcxp!}0Q-`{!N7vc+(FD7h+`6JZr9HnmxBeS?8#|N$ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-bg.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..450faa2763dc0392583e797081f2ddb2be0c94c3 GIT binary patch literal 941 zcmaJ=O^ee&7|w2?E{h8*qM)ZS1yR`Mqitr}&{*0ebpxi9Ze@EkO{Q(=CKHpXNsA|M z{tEpC!k#>M@Fs|Q7W@-}KfpTaHeCpdOr5Pd*S@rcA$h?u5>hX@#+HAX#TIrHbAQJrCOtlJ-uf%!zXvBy~{ zhD*GFvKgk{NCL~AA_9hJ?D`7(^TS6LxQ@b}Nv2>1Dw?<_ix8bII(>UFwQCOBcm(Q+ zOa(kdERcBTek3OfyV8~EJl*D5u!4}O!d@mdFuOp-Ap#OtF4}@90th*=B0(q~fs!DW zc!9pKC{|<%%B5qlepnhUbVhPdYp-L`mBLO431ps+%P-KU0KwRvDRM8sZ8Bti8>E#i;U?b~C>oU=T@rf1iA}6Fr%7CW%f2ike z&=KjOt9<_{9QEe`;(I8~7Dcyj5?_b++eH*~;ZYvAH(0vWg~Ypclh?k*ZZIH%L@bS<&PFSyVsd` V_u9qNa^YoqfegK)y=y&t^#_8)AY1?d literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-left.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-left.png new file mode 100644 index 0000000000000000000000000000000000000000..01b9255a2b102faaf4f70ff8a54aad65b71bcfae GIT binary patch literal 983 zcmaJ=J8aWH7`FOSsZ>-61_}cwmjR^4j-A9IrG6 zctVndWgtcck&n_>iU@I-kf4|ZgNLQjJhKLiYJL!lu4J}BhzohX)9G-X7>B(&FQihb zP(u_W6cO>e4$*^%<1Y;rROB0;V0@svyud}n zBMpI?_J62tkI+6TqSJi;DeRZJF5-*G$8FD`jjJt%pe2CWdJ*1*jZY5^d>WXw|D-1sW)DTsnWHDS52t3M Y%>Cb2T6gx>FN9aEklRpStyX$}0Ls}k`2YX_ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-right.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f74673a3a57b3b421d8c0310a992e3f73e804980 GIT binary patch literal 988 zcmaJ=PiWIn9L_cz+hnkVhdB>EG8hwV{&k7#W3g+K&K1lkU12>gOe$ z5A)zjP{ErF@uVmy6Az+zk!>e$9z1yRCc6vsrE5D6){x}A-{bqf-`{tyuySL3Y-)^Q znDP9wUZm?e`b~@s)Bkt!=7=sANv=#*ag{X905KUGR}jd%<_0Pv({A1Rf)*HNh;>S3 zQZ{Zv3%i^dW4OrmDVt#y(vfdkbwoe~Z8)CF{(Ap`1&*zYOWw^mBl zR^3Y3Z2CG_h#(bk5ivpJZh9e%RJN@P={`Q@SD^1YXu3 z18r3SvuloL<7RlJjW-OK_d;TN7Ru`?OBFcBv0+A#<<$I=o>SzEDCUy$x~6MlR?jA> zDW;?@SI1VvMIPyL?K5t!FE<_q*QcI!6gan$y%b;DBu zoL&!24f z!VNxYd%kCU4&Rq^#!yP}o3i1T^#ObU&1Umkzgn%Ts`?gz{#%>PhGCd*Lw>)%(P+>& z^a^k~odDG9_2*C|5&^K^?^RVb51^Em%Vhx5>D1uwb~^x0r}KP1TLMr@jKQ@a{z)MXs?w@g%Hy3_uX!HEEfBLqvCeE0dP1Ry3_0R^7;H= zFi0koR*wow>2Np%FdB^vzPA16;V@HVZ6C5MKbnf71Ofp7m&?T}pw(&t2!%ohUzTON z-5w5ytpX%T(hF_~Efxy^+wIo;BrA%tUaz%hpU-EAX0zE~F!=00ih1#0bUYs0?Y7tJ x^>{pmLLrezJg-?Umzhk)B;a%De*k|3@CD!kB;@88S<(Oi002ovPDHLkV1m@;_M!j) literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/bbbk.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/bbbk.png new file mode 100644 index 0000000000000000000000000000000000000000..a793366065a08f1d8e1e50ff1f2a7b20e3e8d94f GIT binary patch literal 519 zcmV+i0{H!jP)6ov1^C~9FL z1cTTJ0l|oZNWfkTi(nyQD}vbC+4=x>mih#-5m7;`t!xAXX+#@;ili5fdbikRSy)_G z9oa2%%3+v~Ip@w{2qMBO#lVYY0sbDq-rS+RskaJgJKj=P(HKWekt0D#x)6-CkI zat((=yi+$U^85X&s!Ecis%ouPGYo@%20YKN*J}Vcolb-h`hX{&`ahVW?>Zij<#O3H zO+;i__Iy6K+ikboP3;B_ha(sa?)Q65(1N!pO2bFgpkAGplO;YigvqwI-LrF zKp_J{$k(`sfJyvcmW+jf>9`!(>JDx6%As)xyPBY|dQ4nx-&C%U@;c!F+N4~@JM2|hKovQ5y zA6euWwN0(WtZwI*MZ{b`EB0sF!~Oh?jBOqF=6>2c`zgbJUW>lPt5$V495A@HEjM!7 z>s@M|PFLUjp7*?R*0Lqsmo7y`AA7T_&&ZHbU}A9|vw%|oUt?w3{qI4i5+x*(^|>vc z`(D;L{pqAw}YeTu7O>WQx^yxs=GX`E!fhU7ppI@fAe!M>S7g7^PXe1?W!( MPgg&ebxsLQ0MLMa5C8xG literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/circleds.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/circleds.png new file mode 100644 index 0000000000000000000000000000000000000000..7f455e85c607d3634d43780d2c1ef6f6789364f9 GIT binary patch literal 874 zcmV-w1C{)VP) zI^D>~2!5gG=jVZefv&DDkH<4RJBtunU0ucVrcfwmW@d^4gu~(b`g&Zsxw%m)m5D^6 z@EVWDO(qin?C$P<`P|;#7Aj2`P*G8FaBzStYPEW6YYSJ>=`;ZB?d{=WZ*OlP5D);w z#cniwnY2uh$cR^Ye3xq6jy#lQ%avySuw_rO*Mx!^4E9&1S2tti%ceP zd3m|V<9T~~;{rN5Iu;fd_)>%r%IEWhD3wYxnatAClH2W8DwVlhZfxLmG$KL7olT(GmVv%$f^ zwzjsivNEYuT3uajG#Z1!Ab0w6jr#xV`0oQg0eA0$40-K#w68ju5&+~b%VHmoupUbvwB>=K41As6L z_kBN|Wmy7%<2Vukp63C;PeB9~ex77XDFATJe`%S1za2>_wQXA!01*X6ds8Ap$kmH3 zz~_LXD4M2`(5`*o2Y{~YRP`d|5*?Qne_1aBjtMgi!@YBwCIB!^Q$h|HW5>=Q2&$^8 z>pD%-!;|N^gn@&I5340f5|LOU__O1jGseboB!pO&700orX+mxB`a1r7zzt(gPYN&R RA>;r6002ovPDHLkV1fyKj{N`t literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/daleth.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/daleth.png new file mode 100644 index 0000000000000000000000000000000000000000..ac705c36d25fcf682b8c89de7e79535b0d49978b GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvcm7LGZJ;(0)!3!W~HAs)xyPP67~Q4nZj-@3tY<^K2kR~}qu zjug`@jlF)n@WHm1Hs^OV)ZQ;-jLQDvX?E-Z)3)5htR9;3|C*jJKVkX(hWy)erzW!` z^e{GT{if6MSFl~l&~xE?D4k)Ej z6d8sA0IgQ5kpC$vpzC@Z$9bHlX~`aJHk)3rC(AMbJRT24QA+jz0DRxi@YL$+81Ee3*PI5oL6^(lgAPi(BQh`vJ9QkxN2n?ucELCjYdz{F+=VP(h?RK;M2_D&0W4>V2VIIh?0$+9fVvSnF3&jT2ZMxnkUN7ZVz zQmK56G#ZV~W&= z03wk{D8O#F13;3b+lt5I0K6BGKftmqXUcAiAP4{q!-N8`EDOLiO}Awj27q?E9SR_d zA^=_2-PUTg0?_St!`_2ht>#X9y`sfJyvcmE~$^w-YbAYeV#6kAs)xyPBY|UR^V|J7Sz>Kk~`R4EtCIn-2*kN%;RO6 zT}KzH=Kp)B$r(7O_>iweOdE^69*5!@=g(87ObW`9wBFCC)MvQjqzc1>-xuc?C$DFo z8no?{+46hU=Pm2^C@$S{O^^HI58I5jlF3!?w^s#ZyShkS-Y=H1cK_XFhHig)1P)nl izxV2kz7iwn15Pd8Q<^XI3F@ArFe0(q%gt?qWa=lNEv1pt%D#C^Fpz(t&M0N89cq5wqH>2x$r z69^!pa5y{|3`c>Sj5+OtA8}Jev@A=KBvG9#%ktrH@YBiL?KYRo zS(fz}1_FWcc>J7pyC!77b1S0000l;a+3rssK|0sd0g zb@`t-j&)sUS@pyIwJ7;$6(0000< KMNUMnLSTYW{*!$G literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hbar.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hbar.png new file mode 100644 index 0000000000000000000000000000000000000000..8809ef3681740ad6cba9eaf95f4746247111061c GIT binary patch literal 516 zcmV+f0{i`mP)d?=6rY}-~2v_>_j_LgLKY1M14)ubqY;43W;379Iq$k|tyWVMC1?h!szxFa+qR3vVk(t# zU6=E>+btT6hL8afEtg9GyvFlg+%A27ygmZ|U*H?}=e;lWs))z{0000Z1Z@N>!PZyj1H?*EP_VH|{=h;-ajys*xfJIs z2M6a=yTk4d%{AcWvI@qu5)Ti_oEQ1>h9klZ079XV!mQWpLZQI({9>`t!6E>Y$pnDOWQxb*k|c?uSSpoRmVMQt z>-9LPiG&Ur5JDJ+ zp(skb6NtrPI`lx6<-_5S&1Ti)YPAC3^?G&4px^HU5ClO@b~+u!G#xTf0??2ym&<50 z>eB;;VKfbpWf?#&ms6&j&F1+GlmNb-AO+QG6+k|p2QVIwN2Ag67S-!@0Nrj^P5S+Q zmSvT(AP6rtx!3Cf2#3RJ(&O>aG_ABc8jZemi+ny`u~^iQ&1Tc#aAY!>%jJ?xCVxJ` g@cwwc1^&LkCl8Po`2kk;QUCw|07*qoM6N<$f*B(1djJ3c literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/im.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/im.png new file mode 100644 index 0000000000000000000000000000000000000000..201ec05e4bb3069cfc4cfb6853f389e5bb63bdbe GIT binary patch literal 571 zcmV-B0>u4^P)5et8S zR@x{jf~}Ph5MpD}CbfmyX<=n+C1Mf8Sc$!zwb~dE5fn_P1Vj*w5>WgWbZ#-Qg!LwO z&Go`A_;z#749_|9&J05!gy1Lj3w~H{!2bi#H0^%BzaF3{3d1nTWU^AJ@I3EyI<955@ zNW0zM@AuCENRqUuE1%B;0LO6%q2+SvcDv1HnwsqQ`xlFaSvHr;O{Y_z&nF0iD2l48 zn!agf-8ETG?`31 z9uELCo6VP9LEKN!E`#kTCKiZMZ7;=Z@|9~_yG6SF_sT%SX=-A002ov JPDHLkV1hqr{M-Nl literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/mho.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/mho.png new file mode 100644 index 0000000000000000000000000000000000000000..291f75054e0feea3b0bdb119589c534eca78aec0 GIT binary patch literal 573 zcmV-D0>b@?P);oVDL%dMx#-^US}8v!0mQxHk)R%S!GM5 z(sH>ZI1mWr^Lgzm%JWF4)A!2lc6-m-?e_1~p&ik5I#qS?c-&&K+_N0VscfN85Jgd6 z4>p@kI2A=6pUs(~xyisZ?H^gI22rAdyIDvSk18JpZFf9t;KmQmNF#{dT(zAeYP0(?7rb zBqftcMNz8Ns?Xx(^9g|EatR<7i{0q5ECVnM!zq9e zl1`^5lgWMG07#Pbgcf}V2JpB`?jOyZs;Y{jcs!nBvB2w0H-|wH`gVAUd3%;$4eRRQ>XKBqotG#caac)Q)YT<-<-dcAtR9tZ>gghC-lJ`hC_fUfH| z`fxb(`~3h`tJUuxd9&F7Xti4Rso88sQ=(0p=Xn5&#o|6S7z_YZDiue72Q}7ewd-8{ z9-wI&fJ`Ry^?U2>%9@f;czyarCcZWKFH;Ai9|wC6iw6m{XWaG-ENnDUokWvul0H@%kuGf3#n2ex8TtxtAjlLhzGP!4K;f@c#q8T|zlPp-?zJK8{AC)9G~C ze|>$;FpSx3rfHfWi0?~SDM1iou^2+A(P#ibybFwDjP%+PAJZ*OlRU@#a+ zat4C|4&B||t-M5TP1S1k)zy_C2%_ifQnuS|k|ZOMh}-R6eTn=MQxw(hc11Ij$?WXx zAcQm;&CAOR$8k=lv)OD?6t%X>b%AoZd~k5^{{FtZyDRxs^z_u@@#yvXuTia5`!^4fTnEx^0|0=2 zzmH9y&j$cJ&nxd>rHn@7@;a&2YUR)Ma5$8BtX8Xdw%Kd|@bK`U5P%;`p69Xo^z;M( zEX#@skB^T4V7J>90!WgqR4ScL2b;xW5dbbOF2n?f!vO%zW)t`7a=AV}J~kdQ%d**Q z79m8_bSjlv4!yp1wqa4u`#7ucWNSViAwW34%B~ kJCnJA`2Dl{1^lx<0meu{g?ijT^Z)<=07*qoM6N<$f{6`4UjP6A literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/wp.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/wp.png new file mode 100644 index 0000000000000000000000000000000000000000..23f6541296fc04941c3eb652a55349b9b7cd8a70 GIT binary patch literal 524 zcmV+n0`vWeP)f(q&E zM6j_4!6u+s36?&91Q9_jEW#ibO2Ed>#wYLrv=j?Ltn9oXsbgU}3$c)BVZ0DBTMP`# zdWlADmi*P3Gylm4;hdRqVT|FE`hpM30XTqv1W;8qolbAJ+h+l;M<#i>Tnd6PnM`PA zJRWyC9n&;5O{-KY;c)n7F@8XyP>9Bx%_fyf_4|FA@pwG5+3Z%WHK5z=7K=p^%d#wr z;vYk;R*OcX_5q1RVmh6grny)w3WdU@q0wmE`4iRvTAWNKuNn|SZvY^Kj>qFw1IKYJ z%ibz~s7;&AW*`u7yWN*tr_)JMlw2-nzl-AWH~<_D2eMQY#V`!ITd&vef5aNFTCD&e z7K@Q(Bofgyjl{aH1Hf=Nd9>`o7;k=kqxj43bz71cqUrJ?tz1vMh5PN8-U? z(ChWyd|Z3I-u-@0NG!|x{r)!tc%IjFT~*c5Xw+`EZCp4m=Vj*rUe*tN$eqU2O%6i< O0000`sfJyrpBE%uH`2RWe72TvEr5Rc<;rv>sJRuE{ruIa!eG@+sS(E=eqC)F6)0CrpU zD~^R1tQgq0vrn>J6Pb8+Rx0Or7e2lCe~;^&4xibs{kU$oh1LS5IyQ;6M497@7XR_I zc+TLU`E-u9&PnYL_oS0AMP;v@l6AXmUb@n+rl!=$U;FAknHY?tv)68oWOZ*4aJpXl z`;Uq5O4p7VZ?6h62s(2d|LS@6q;-cOmtvo_PD_Vj+zaNlTfhICKX*^=>?xmA6mH)a zIxy4l?)ldz4Sn65kCdN3wtFop00i_>zopr0K52ro&W#< literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowright.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowright.png new file mode 100644 index 0000000000000000000000000000000000000000..d29116286697f520bbbecf48c4710b0ef7a81164 GIT binary patch literal 351 zcmV-l0igbgP)`sfJyrpBO{oJ#^(;W4U!E?GAs)xyPCeM$rXbK-xVc=DQMz!2eJDza6liWM0GhK2@XdvBLW+?3J616qt<~CY*PFC-Hb& zZi~RVpJyjNdbUd9c%ekwCLKnFV;vo#p_)ru1jHvFpX$Wn#F6a7@$mW1@AHb+ZT0J) zeEK$H!mMS+%~OIjzgiuTxLg{0>$1sNoAc`#oH$Bj$hvv7)+X1{dQ^{;1Uo@yxm qw|W-mT*j_H>gf(_DF^HsY8Wql2sEs_&SeD*1qM%7KbLh*2~7a*^N4@| literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowright.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowright.png new file mode 100644 index 0000000000000000000000000000000000000000..265e1e018eba5388b2fce042a9b5ae1b271b7d9e GIT binary patch literal 338 zcmV-Y0j>UtP)HMzi5;sT*t|B~Ez&Y2pZ6e^6Xsl8y(Y*6K zhhYGKx~{FYSIRukxl@FQ+qMBf+M$$Uj9m^y?E5}`sfJyrpB0loK5Y}`Phd7dtgAs)xyPIKgCQRHz=>`h=~cV!YPV9;=25-V^BaFT6c zRw>~xzI``k2J=a|UwupL^;?#?3Qe>)=`GX7s`Epwr68=K;}4ro0wZ@_;@aG`wKC@{ zlY72TZZ?xhu6WOwu$GmWo8m66#^t#z~QMl-wQ^#we**3xg x6N6TL-xvRXNB5lKsMmk1PRi?x{n`J3*V0()xR;#7S)fZ9JYD@<);T3K0RUldQ}_S? literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downdownarrows.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downdownarrows.png new file mode 100644 index 0000000000000000000000000000000000000000..457598cdfa6d802453d64fe782bd0d52ec574524 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBWj4Jzrw;;!R(rZQhIkx*d+j3UVFdxUgv+ky1Z9p2-f?g*V7}{c_W*AR zi}}vm2kb<=JQi@8WX8X%|MT&Oz{7%>#a-5)1^&5V>m%Wx@!B#aTrJ{45np1=3 zuQTXRS}W?bWXe5WC7>S^9zFbF*wCTa;(IeHd+k}_$RFv)4_vQgdNc3oi`gOj8-dPd N@O1TaS?83{1OR1_W;Xx; literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonleft.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonleft.png new file mode 100644 index 0000000000000000000000000000000000000000..f1de8a25bcc216fa1f6ad507e3ec99e304071537 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB1>Q-?j$J^ZSWg$n5Rc<;uWjT!5WwLYST9yAB75-cKdrn4vu7x!&XN#t zs@Psvz$G0XdNGBam!08&t?_KuJF@0Ly$A9cL(iTuce2%1a!GlA_RQ7JsBFQRta^*L g##iiNsFAl|Ob=5u$~<_b9H^MV)78&qol`;+0F>i5VE_OC literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonright.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonright.png new file mode 100644 index 0000000000000000000000000000000000000000..b94a0b8643e221b70bf529188b36e5df8afd79be GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB1eFqBp>qSqV;+g&Y8qg*NPgg&ebxsLQ0J76UUH||9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/gets.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/gets.png new file mode 100644 index 0000000000000000000000000000000000000000..8d659f01a2c3ecc6e43c8a15337b137d15785a00 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBevv047uA76vproLLp+YZof63FtjObfKU$4}-6KO*gww)-+v@ChIvnmo8}lR<@qo$ ztlj#OCA{gLwNjfvMdRnYyZa2Q-cJp>cI%)~#|eqgMtl0VY%f`UT~zR5lB<2}r^!<$ w73VE(n7Q>@HS5wT@8_@FlP%cspr3_*!c~@k0R=wmfX-y_boFyt=akR{0KlMID*ylh literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftarrowtail.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftarrowtail.png new file mode 100644 index 0000000000000000000000000000000000000000..d36a75aaa41615c556991242053ac2fdcb60086f GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBRg0a=3*P{R7J0fjhIkx*J2jD$*^sAoeKM1ls*u)FJ}=QLPO2eJs&kr; zIBG5AGh#gL#%(R(e((H~iSHd13YCgtRvs_h$dkapd`H&c*o|3Bf7vr-t&MKDc8jf{ zHz3Ow8$9BlgpBbH<^?GHP>yz|)ClkdaP1k9y9h$0Jm%e9U z*z^5)rQR|Y28IiN`sfJyrpBS*748lU$%sq^FBxh{y4_R~>m73^`l^cePDuVNp?7IcY*eOC)p3WZ%Op zKd)E$+^54}bW{1Tpn^lg0nvs9-l6~B?WnfC%FJ*k=Y8+vCy&$8LQOeR(p+Siy7ebB dFfy4l=)YO(B`{0qaV*dh22WQ%mvv4FO#nCtI5PkM literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoonup.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoonup.png new file mode 100644 index 0000000000000000000000000000000000000000..d9fd9f2d0636c9af03a1c431494c0e13c2283411 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB8IyfeH`D@!qC8z3Lp+YZy&A}Sz<{IWVOiURCYB`)$~spWh4PrDnMQiZ zPrIYvpubaGt)XyJwoD%bBNNN715w&aQB2!bW`!=i$Y-$mjLZ6P2bX<)58s`)p3L74 dQu2@CPT1WK$tkV+H-WY=c)I$ztaD0e0syFuIq(1g literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftleftarrows.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftleftarrows.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cd7c07b31aee31c45fe8438fdcea03acb4c3ed GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBMJwZ@SC0UN)_A%&hIkx*JI$AuMUkg9ajF6%r-cUJ3YH}g7*u$;CNS|G zaQto%?ooEwY_e~~b+sDK_g~$GCO)|0ZSb0b@4P-T8OMsp4%i2N*vv-}|{OzMud6SqGrI O89ZJ6T-G@yGywp3EMf%! literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8d86b40de8628cb7e90267bc2d6a2c529edab7 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBK?T8wQocZ;E1oWnAs)xyP6-rjHsEPXG-tGMaC*d`@?e3`gbRlqWgD6w zEh%N-3u3={JMNlUPKYX{SZd+vV~TRz*QGI_Hx z1nw{P(^Or?E&JwoU&loOrK`)@bfQP;ZZCv>bC z1TN|_7=N#=f4=x6!}A!gC1<|0n67=ki%ILjeg^$pS6QQfP280Y^dEz#tDnm{r-UW| D1#5J~ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrows.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrows.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0717c7237f5b2bec9a988fbfb65d0e326b2586 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBWtq$WjCKQsj(WN{hIkx*JIzt>hysu6>2q8wTD&@#3xZ@y0s=T6FmQVu zV6<2e8X%LxU(I@I%F_+Tf3zEq`#Z5Ubp-qGU3N~Yf$>NEfkGKsMz5894DV}uCK_Jj zP&gTx(j(|paPBq#qA6qw9JznS@yrR!?eDG4w4<3BW<0+cb^G+eaK)CQ18Yyu zF5jTzZOOpUV|ZTnO2%!o=P`MvcbCoi{MqL9=Qn$&2Q9n3>u%$+h84jc<(o`)US nweEVUDAS1_+jtHzd||I)*fAqjKVn5W$U_XCu6{1-oD!MN literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightharpoons.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightharpoons.png new file mode 100644 index 0000000000000000000000000000000000000000..10a057fd01d2a79f6b691eabe4126aeeac1bd24a GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBMV>$P4zWO?)t)YnAs)xyUb)E2A}GN2;O=R$1{+qSIX1Hmjr$$EG8Gfne!X{IZs9$ZV<#-v zU$&e*fA06VY+eSAh39&cdN>vLe>F?!k=)DawNhY_c*W%zac8v{rUbP~CH71W+RLzX z%l=Z1gHf;NNK0Qn_hgP_GCy}3qh@MPq2h--f4?n!`@V`q)akFCu=vGXy%D N!PC{xWt~$(699`lW7Yrw literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightsquigarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightsquigarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..d515001e032b759a11508f71ca4c26085d3e2ac3 GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB9p;;P%8fvwpPnv`As)xyPCdA`MM0n~@$(_kb z3h=ti#&dYW$zzk}6xZHgF2TT|c<=Y)Yt{Z7j18Ng#%x=ceS6!-?Qy~q$snkidcE{o z6vKikZ2|&LiY#853=!E|ubo`9)$Y`iDVI&&{yrz+J#ESS@0kKlzLz-^FCEiZ8kMcs z64WIy=}}1ifhj@9W?Wgg?zR2e7Z+^KhlW}{Kj(SQ^7)^jnX!Vq<{U4KnWlR0lC=@D q2mem?6HFfZ%Y);RGNZFyiIFnGH9xvX`sfJyrpBQR9!s^QHrZ)_A%&hIkx*JJnW@MUlsC`dnclb`J+8j{}TC2N=a1IE5xK zXfUwvd^BtC{JYv>yY_TRc1_ox%;0<^SM~Qc384uMEaFW9hh&)N9k4tu`6m6T_R=ub z7ki7(Rlg4ws^Ka+=hQLB*sn=;e)ihZ9zh0%2Y%r#0_S#K|5>=F;9Rd^RQ9!7)=k@g z?Q^bt-)p!z>PxlH(kYrtTbqKqrW8GtV{lkodP>UR*B4I*CZRviIcMnmteo|B85_{u N44$rjF6*2UngGhGU!MQ~ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftrightarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftrightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3141daa36519f3ffeec6c0adb5b1e11997cc2e GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBF^zy~mK{K$6P_-PAs)xyUUL*}Q4nBDxVfD%BY`E?fmParS^0<00^Ti* zCI(Gr2iTmO>-pa?TE0m=viHON8Ha1~+4wjZTu<%kI&#v1&FBMr!u@i;-H$EyeBaNo z)|7q2wWw@;RTjfzTXMPG<`jFa+)%{0YE{v>#_8)`_ZS*FxRl18|IAa?;i0*8-Rnvb zhH0siZH`_yP0s4-AFsCeoqTQA``_gy!rK|r=jU%PSSO-g^=guQ)iQ=to1QQ{ws5QN qYs|epLs%d%Lh$G9NsT;9*zG>fVaZUfn5GT%6N9I#pUXO@geCwXa%=ej literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longrightarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longrightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..ec988e1dfdb85a9d4fbcd926301d305a6f431d43 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBF}|j}7A5^Z91Z`SV{b`i>Xg;mo>i<}&Ab<*a4XKQnr0 zDn6R47nwaZ==3HIMXvh|9c_sP=dNa5+_kRuzI1ZdRt|@KXa6st+iTfMEt_0 zuOsqD0RR!Dl+LL)T-0^l(kCkkA$IyL@z@*y+O|D=mHm8c?Nt@LTjj5ho$pll*fjhH e0T2N90z3iOGGMJo+Gmdd0000`sfJyrpBRi^sYE8>7cpFCY0Lp+YZop!PJumVq;=T*iNY&jEh4scYow5IeBcIqKC$$=welRy=t3BHrKkaDs z`YA@oJT&*uWK?2eFwS1<%)ua#{6~e=?}UW2OaD`w^N%e)6{<4&UbfNi^vM4EO+~O( zAn5xW(@4#!oqm@~ZZIzuQF@o2fBTzR)Y4<6J%S9ccIDmvw(aqp*Sqvu3(rMn|K4~1 z_Oc)^moNUiW>3qV#vJ=))s&NGYbP0l+XkKID&?5 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/multimap.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/multimap.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a0bb8acf9fd2ddd635b1fe25894f80cb369d41 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBZP^@!4ppGgTu&Fr5Rc<;ryk^GR^(yvonjZ$^pe4a&DX!MWVrq~Ec}C8D#nPbw_>UU$z!v-q6;w%@z&>|+WOKRJ;vOv!3t y%G#|{E=d#@oecggxLat?WXS^zY=0OZFfL}h%m3}P`sfJyrpB32QI6j2A$md!8!tIacdXdzcX`X}UCEY(`!X07Y;|*CkT|~a{qJqLy0(u}=RIGwYRQz#CXw806qy@> zvLxCRmS-$akKE>a=-%TuXLhao9psgn%Vk&V9XajvrV4?Gmo6zw_lwQBsISy?DW2ob z3xC#gU)-7a{>B|xa-ZYJ7wtyzUn>uY{|&id(kpHyxYOR^W4Ive|33^|3QlD*aXfxN PpE7v5`njxgN@xNA(oBCq literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nleftarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nleftarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..df714e174f027fa32dd9eefda881425fda6fc707 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBDU%oH#eV~ZHha1_hIkx*JJpewSy8}sdK&8k2F(WvItq;JEbJZ!7+*7R zMjT+YSkN9PwLs@~%4D^<`sfJyrpBX^wllqilgfdp%toLp+YZoqCb;hyqXB?Zw;{o`ubM4>dQ>16z?NE7o2(eCXiQdatB2?e%hRg1zoet}5l{2AXp~p1H^H^{!_-uFZO< z-D1#}%#rBNsc5P9mAAog*_2Z&i~EAAuG+-x_2GE9SO2x4o2IJMiKyA#x3?wsSU$gO zBKxa-SM}2p#UnQ7+ZW&6&St$}O5Lo@^kdIltG&JI$7DvJ djei&(@b0_wL-Z$$`(GfJ!PC{xWt~$(69AAHY)1e9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nwarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nwarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7b7d23d8897a32cec3900c15a438c4a85ced3b GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBNzDaMG#&zl9(%ethIkx*d+j1`vw{HIgUv4)@(x%s<~-8)8&3j%N+qq)h zYk{WXyvS*VGJ=NUD;D)W+nYbjE&Fb%EQ5fc;MA!a`UB5_IOy z_rE5-Iwuq_YIV!-Y*(UNMdk(`NvvZ7P%D4Vs{kv&5V__VFriJR0 TVx1R2?=pD0`njxgN@xNAIoEx5 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightarrowtail.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightarrowtail.png new file mode 100644 index 0000000000000000000000000000000000000000..27cdc5bf6850ee18e46d9717e72d5e82ba6d21b2 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBHGVDgb_Jl&Oivfb5Rc<;uWsaJR^(y5u=_<-Sc0fpBFkpR)fLQcmiZ0l z2GSO}Tn-9PgIxZpO3Y(8IcHUs&CKf`3wR6;H2i1n$jBB?yT>fBaqBidg+~`I#JQ*( zTXA~kmHCUyd|fn`3LJW**wHc5Tl3!U^B=SK<^0`VaPDjO{!&+l3v*vFGbkv%b~v~5 u+AhXB-`848zO}1P$rfdkNI1aXXs#|iJ5}t@ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoondown.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoondown.png new file mode 100644 index 0000000000000000000000000000000000000000..e384cf845a1a22e8d2297cc59074f3fd7091f31f GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBIc}??{|^C$5`Ysn7Q}h3f9G9Jy8Z(2Rk-2JhV4U z$j|p*W%={x&xqbbd5oS4_V)Gv{`}mLqRG36nVpY=gF{6{WrCQ?5$5{(|KH!=e;jzg kA}X~Hq<;mg@mdKI;Vst08G_DH~;_u literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoonup.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoonup.png new file mode 100644 index 0000000000000000000000000000000000000000..187e1eb24d08e9fdcf342cc78cd033850ce7741a GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBdB(%s>T`iY5uPrNAs)w*|NQ@N&#cQR%-nl$1?yt5o+yK?g9RHD6crmA zy8cgT{QLX+_3PIk2Rf|emywaNtNF1Z;ULqcnuPp(|5d&}fBuZVL dK<*U`4DIIASRXz6Dh9NJ!PC{xWt~$(696muJ)Qsn literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftarrows.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftarrows.png new file mode 100644 index 0000000000000000000000000000000000000000..cdec5d9e416f3e0e851b00cefcd52a767e51e9b8 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBWj$%lWNV<%R!o6Wyh*ymfW=y=fkkZoMYZv~^nXKigkUVP={?N`7tDjS`he4)XF~Jh*%FwMR@f-x?Ec+~pA$DmW&Q zobz$fm*iDbKHV!%{@x`sfJyrpBMdk2ywJboPEuJopAs)xyPI2UARuphuxRODohq;NVfI)*n)5GDA)d42I z1B@06+T~6MnWga0{;>YflhhyeY}>D0m|L}Q_Etve4UDfF=6sfSkDhF(w$#L64U?DV zoX?F9@5*W)>oA=6M|G`fvQ7&F!~XR=eM2r8h9(X9xxx2 Wo6oShW~nOB{S2P2elF{r5}E*SM`iK= literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightrightarrows.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightrightarrows.png new file mode 100644 index 0000000000000000000000000000000000000000..52a7f0f0f1769315be59ac067bd19238f51e4431 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBCDF~6yW@aDD?MEtLp+YZo#x2PqR8W#xY=n!facVO=0^-N3XI&3TdW+I z7Btwt5uJ3C*OvGHFXwo#Tk~HTwoSU?&H0*v?}224K$8vw!@Ac|x02gCG@jdR{i4+^ zuDXmD-X@e_sg%bIcTPa*77%WWUbW>ui^hzBPhsOme9k<@chn|+V%4k zld|6~H)Lg4Y4|t&;=9+gg*!B+x}MpyYTcAe&vPsrm?yB;Ff4u&wbdairV8k222WQ% Jmvv4FO#pe!UCICe literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightsquigarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightsquigarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..f471054f45716f22ed94250302c27b14d2c2f3f1 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBU6we(_GF;Yc~2L|5Rc<;uO8%WHsE0m*#3$kO-O=KO~J>(EP+Mhp!5U5 zO^i7Yau}pjSgIVHR%8W*Y6bECJFc&-U&OaF_cmMjGd^*5MplskhJ@Jb*^Fu5?k!i_ z=CNy?vx}hRbfu;amlD0(+jtd^oU7aux^`=ah3{m;W0v6}tPB>`sfJyrpBDURa{vTJ}scRXDjLp+YZz2?i?Vj#f!AhDTIq@nqsW1)lW0!G$|1DvH7 z7A&w}VDD*uS6Uyn&F6Gx<@L&$`o6Qa%-kxr?hLcuIo?0I3QJWMnKYFil~8WE@%^qF zdrfl)o6MO>5(PGW<`2@9FEvaE>S1iO-NyJZbROgKTRhC?G*Go_OeaPiGY~UN5^x$g7?Xc{(Z(R1Wm&W!#)>vxu;>nx0r#GGX?Bn7ZsIj!h z=UnvN@3oQBd@n035?~VCo?AT4_}KC8j*b`sfJyrpBDLLbkd%8fO!=5gVAs)xyUNaOts=(8bSiu*-AXFfr@_<1`fs=D>i&duT z5yxHoo2LogI5BJYe`$#h6(z&sx};A!35;)rllQF4786J=IVYLSWu4^Dq4+%JcGt>M zy$@08jJjXz7Hqu7x#fCwga6m_2d-C%TAVNT*vpl%_J7a5D$x^`%cuPKy4;+Bq3$o| zg{aT3^%?g2xooP~rm!gJRMhLe;!YON84{kf7t6SFC@y7TVAzm5du!SK?|cqsa&a9U l9Z&UBIX0~8V!iU5O+;MBaffaA7NB<+JYD@<);T3K0RSgMX`sfJyrpB0S4nK+(&>y+dN$yLp+YZo#M#LtSI1GKAY=q1~ z9t^BK%vBlrxe;ZYp8S7a|9O)7?EIOy?7L~NHu_#;(mBA?1GIdpiQt5wOHuQGziQA} zx^&96bdCpm!@aiJIxBK3G8~Ay{o#%M{jJ4%&+l{^9y2)B_xQn_`tbR^IaZAGBjaB! zh!65=nP8Z9YGJFuJ>^+jmq|RnY`XWpW6wmxHi4|$@6v%Tb>NuE8u7l0QS3oIgMQcM WutO#v`sfJyrpB9f@G>SGho;m7Xq+As)xyUcJb9M1hAb!8WfUFU9=@+pZ?z7i^_d@-7I@ z;yuHb)_kXVj?D3`{Fj^_ezIphQX}MOYP?$ebAY%z10%~1W(L7%M;CQw&82KdB-#@# zfR-vr9pC76Zs$J1m-Ekm-K2Bx_bm}Y#)MhR9=jczQ8jD5&37|{;;ldDo{N4qH|MsP z(~7S)=U?wC3cqsjR(gE)+n)@^&*wx3dc9=W^5-NIhr$8g2J!!X0Uv`tKLh!L!PC{x JWt~$(69AE2VnhG{ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadrightarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadrightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9242bc210394005cb0fe00eedc55db71bc428cbe GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB9gWgUw+;e@mU_B4hIkx*JM|(bv!Z~@^#axm^=%29VGHJFaF#8QjpfW@ zy>;-Jvjvln|;O? zkA|}_Bu@}%`aZAt-$^#h=gLLrD)Z95s0%kRu>4>=Aj><`Gx$f+e-@yF89ZJ6T-G@y GGywpu23%JF literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-downarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-downarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..b2264cbfb669bc614780abe35eb65829ba425b92 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBVZ9^yp(lVsdpunnLp+YZo#x1UL_xqckyn9HCWM)51&hiRN8J!6zX=Yq z3XO#yzF$b;pPeRosm%Yg-(*gEekV0aUI*Kg-nKm)E+4`VZqix)HMgnuzJK;lX2FgJ zyB>V^DOF#m@1c42vyV%Btza#S`$ zRQ9nML0sx5L}lJ{C^B#;7QCxl(0*;2#Ny(rr)@ps~ dX5oXW_b#k|&b(G`sfJyrpB6DyVi;|oBcO`a}}As)xyPP@y?A}HeaJde4=iG4)_pN3;PkWsRL<@bh@ zcD?gw%uLz*(Y9iu#mRDh#;w;LpWM^ezL`;a1LI_d_qFFLCkD7{E){Tkm355aSOiC+ zB*Wk1=OmaJj?Jj!)ZMyX0r$U4Eg*l5q6c9 SZHz$IGkCiCxvXtB=r literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftrightarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftrightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..288dcc11f9b080ae207cc642d315848fb0e14d9e GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB5tZ!UT7p2KFP<)rAs)xyPCJ;}YQWR>cvbZT-a~AO%?DUEFv=+^Z(vlO zz{?}Oq48!z&ICEFuK}MXUD{W^@{|1E)BmR2=wni3`RKK`Q+zc8*8+w*j)HTs&98UK z9iQmWXKA=O=#`YZ(%MopTYiIM0)bav{jQ6gR`RR*SIuP;Mh1qQ+hwJ@*Ezdrrp8|H z*K&AdD%*CjdcMcMEH`sfJyrpBAsNxdrkp^bEuJopAs)xyPCLlStSI1GeyO2sk?fAJ1+p2OWy|Jfu-|G_ zo#Cu7J?GBBRK=E`?EFSQ9{gX=k=*mv&vx5vR|X~l27V9Ct=Gahm>1sLEs&(c$r|AG zbk22#f?qc(-!mSlwwF)t@zk{cp574T#gTZwyyt3=SGKNMv&7=9*DS-cWv_qP>bkd_ zVMpBM;_fZiW;C}5w2Lits#`Byc#hxM?dlbY%`unn@5opmx7L*FMYtma(;vnMoZoaJ V?8;tsy$8CV!PC{xWt~$(69DhOW3m7M literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lleftarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lleftarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..6bed12114c738d03186804fb5a466c7e6d4ffb67 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB3!e1)m##pe3!W~HAs)xyPEF)JtRT>OJC$id0DC!~1Cz#r&;ZY)jHN*` zAxsuKI3-?hEYmrC=(p#I-;=73FIHc)ZdqPzs;L8W4Znbsh35jMx4-!qO1xYdvfpmf zdCp)PEvm?p+*ADShZF;c;=J>c4ql#`OSh)E+x9&+;CY`aknG~}-ZnO%{DI!mJum(l zHJ8RN&kXWXOnPW`?(>|p56-R2@2tKy>*RxAJzhVGt4rl!X>1aG>Qc74l>g_&z_ zwzqZsRLKfInmNmHh-(>jDU%`-fwJ}G*Y{L_v-xxey{an^LB{Ts5`sfJyrpBaY>1NriXz-J3L(+Lp+YZopzA-umX?kV?7762HphbNt}n+44llGeG{5f znEM_0C$5NUl}lRWCHg<1@X^8V$C--G9iCgoW4@Z%Y60^;W+#r{`+_-lD!EJvO53!G zVQp#8M81a0iO=USGd#az8ZMFSwKDlHr-$a+*H*s5N6QqCye@dEcdt6RXKUH*ZFl_g zHJw}-GNdmTcR#CKmUGHdUo3QX%q!O3#}Tt)dS7nR@lE=*yS?m5*F23E`@8sFG}trP ZFupkuVJDM))CK4V22WQ%mvv4FO#tpWX1o9Z literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftrightarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftrightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..def0c9ee946544160a53d1c1e7984b11d7f6fa3b GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB2`M)Hifurlm!2+;As)xyPCL!pq9D*V^Q_nc(FFFzq7hBH7aA`&mMxIY zV87A0klE@0-v;Jy8^j+gPc)4&`*WP}S#lgp!MTkSsx}_zYT)Q-&^}<|8y7b%b*IfE zKBHp_i#|`>I;}Wwt*zc%hE=O(J-=D$&1WfSg(AyWngFsI;HKMIZJElu|g52 zoVOcleOm=y?|N4Guh?_zHP=8B-_7d}8t`;zEG_B3T6*_d=n6C6Nl$EC878FOoGdam z)zjs`sfJyrpBajRW7T{Z%R_ItWGhIkx*JMExgivo}9*>hqEoMj5K0bSFk@NHoBZs1$c zQZgaJ@!JDe*{=!}Hy_G>POmVw=VVxQYtKsm&zrOsFljB|Xy^#?n!YWqd*<(b>Cb|< zGdP4kuas+hc%|uWs<;zFL%O44((P^Mb~@LxJGcl|-r*5cRC0N`sfJyrpBHKU^V(}qBy*`6+rAs)xyPI2UAQRH#8o-NqWVx_^ip@Bsvfsyk82dBjf zR+*A~;k?UdbgExj|C_MKWa)na!5b&p&61gf|M(j`f3r7V2)MLov3I=KTmP-w;flfM vb)4%g*J$~Ca6VXdHGlVsvIHjKJ`sfJyrpBX*sR@_c=hJzn(6RAs)xyPPyCLsvyvsxS91vV+li;f@}hNP?Ky1`!s{H z2PI0fJwWDW{@D^m;o&~t>~aoOK6p6c!$f2INi&aHe^tDz)=upI{QLL4-}AqQc*TnTbewJX>KuD<0Z-KZ?+hQl tGo;OXKC?s4)c@6jr=@clB|qph#9P>kEX&e$otxQ1&iQqBaHTBElu~=Rt}DiPyC;OWr9*xD z@sv`85JG60rY)njPSbP?8DoqwAw-fSXD6Vux2d(ZX&L~C41?Q5UDr}d&ycUzbl=5!p3Aa4EO~SdFvbu<0HCTWckD{3E&p2p u0Bq;BZR;kLQip5vBozKC0w4hX0pI~TeHrM5{#JPa0000l1z-ibl-`S4t%b);r<7FN$ItS5;+pu$8Hz~&UuvV zx{fhcmgP1@M6LCCDTe@SZ3tnXM8xPwLI^|z0H3y~X&SBdKHvAflu{|>oZGM7a1jv^ z(c2{eIO@b9z*@U3%WGzy=eBM4uJzuZwCL=RBX=sLBI6?>B3}6Qt~;NRXwxKsF(%r} vIVYt|(Wc(ys1KVpQ-nPKDl#Ag{sG_@p!K|`sfJyrpBA+vK5f9?Z?4tu&dhIkx*JMAp*VFjMn!mHJLJWsH!Im98Ss9e#K(`4>p zrl4#gd?7njbAr8|==)Q`^WUT^D=baPdX=iRno(*2<2weIl*nnD^kYMNHopJ8i1*zd z*E2aiii>)l&&_9INZ~nbARwqz_5QofPOce|q1~k`UhP_U*+lWtWXT%smIre_-#h>L zPw|%`sfJyrpB4N=c)!B>DnH$7b(Lp+YZoqABPMS;h)^f=QSl`;pb143_HtPNBHm}EWJ zFEoiZh;Cp{-!n6{^ro%O&Pg-b?SIaAIWB&9P0$v=6Yg4Q882OHE z(#b#Xpt*Hj_NiGd0#kwx8}vNBu`Tx%PuW+Y?-R1m=>~pNG(R)zv)zrqHs_14mxk9g zbnM~p@bLP1h$X(Gt2@!%rS^V0k9GFi@BhMXOx54a@Q>pI%Y{2PPgQ=2kOz8_!PC{x JWt~$(69BqDd>Q}% literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rsh.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rsh.png new file mode 100644 index 0000000000000000000000000000000000000000..05e8974d689ec6b008136cc9ad3d43c6309be6d0 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBb>6#5*L{IP^E_P~Lp+YZo#xHUqR7+MepbqX(Sw2Y0gLw30QLw6CZSgh zoKp|nJ2A&B)+j~)ufIv==dYqc#?SZoy(*QR#w7AV-r@aUi-wLR_lmujilj}e*wH|JVj_Wvo?vWYl@WQrxLxjjQI;uW8SMx(o`^PjqlF@bmwSJ1F72 ykI!1P;{Dgv0SDL~EI+&R^oyH|7+B}9*Dx@#8*|3({W%BdQU*^~KbLh*2~7Z#K3K;9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-uparrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-uparrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e539f6517c5518046effd7267c2912b3faf608fe GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBVe#2ncMkxCc6z!vhIkx*JMALxVFex+PjLn53A_o+>nHIZ;^;Y~mcqQL zadYF%1Am=ES7}{P3$m}7pFVe9$q6xL<^E*O0OiQM$*?MfoD~aSa zTQ!$*Go0SUz#z!zV7mJ8-v6Qjt1TG#F8f>6r#!!NJ$R=plYoQ%gVN=G-&bc%=%3E; cPyPeTQ?V<;tgX6BfSzFRboFyt=akR{0A(X*AOHXW literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-updownarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-updownarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa9faa2793f21f080054d1849dc7574deda8119 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBQK7w2eJ6oJA3a?hLp+YZopv$zr~;4c+*QpfEM^-vJDN54Oc4CQmeQQk z(sO_$SO4IaT-RrC&9rxw)7gsVQ-#dy*q2N>#S$f?#KfRf z6n9BvtEQk}pjT$>_1E4<&K#3S%e!3`Ij!6K$=-T99)`;%a|Qp^G)p93FJ)-x=vPsC z_uJ3K@Ywx(2coL?XerrEIv(Y+X6yQ=tg&B23w%5CR_|b}XLvB@v}OJ7sl{?_54ZmL z%X7f8e8*As_uYm@#k!lh73TA-JYv$ gb^lKM@&Eik7#8$$J^d;g4GJ{|Pgg&ebxsLQ06C+Bd;kCd literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/uparrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/uparrow.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8f571aed79db6f7609092ff43a3117d91d4f45 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB0jYD}KJ5bv&GK|{4DmSr_S!*C7DXP`fOP2%B5xmTPhihtotD7qr@l`sfJyrpBLDL$Wf6IVEXFXjULp+YZopzA7MM1!|PRKDVOxh0!?*2HjO|Mg z$5buLy?sw3G&JPEZU)5`>7^_O40vkqzqfYeNR)A3`&CoHvFz9k4eKe|P)r3vUU22WQ%mvv4FO#txcc-sH~ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonleft.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonleft.png new file mode 100644 index 0000000000000000000000000000000000000000..72d093d219db4183e4f06a8ac1ff25b5476f00a8 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBc`=6@i=u!+(Vi}jAs)xyUfalfz=6X#FkUUGS(-J!F6R-?1T_(l&L{E8 zwo)q7RD8-3EtuKnO_X8r2)oJ=5UR5KHFLwgsWYF;cvk0^Hq9z!yx+*k%vQ(g;*wqW f^P|y++6QdYf1PAyR&%KYTEpP!>gTe~DWM4fBD^=H literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonright.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonright.png new file mode 100644 index 0000000000000000000000000000000000000000..76c7335543e8cbc93d1e41d6c4ea90941c510d07 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBd1LN7WwJn_bWaz@5Rc<;uN~xMFyvryC>CAH9PO#Taq^TT?rD?wzWw{& z#qK1xyIwL(ActXzQNKt#L!mdKI;Vst01>%7PXGV_ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upuparrows.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upuparrows.png new file mode 100644 index 0000000000000000000000000000000000000000..129a3383587a640f46949c70667330b9abfc7c52 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBC5_jC-~E9?J3L(+Lp+YZo#x1S#DT~4aw=<2^Tq)7V9tpKd{XSm3;EQ7 zlokp-N;u~DZNmlU#M_60UMT+m;aTy=!HLbd+4^hK?57Ou3=Z#WBd5*PR8lJHOh}*g zT#_Mc?d;1@-G;{`qO+I3b>|Eb6)Zldxm35kLqJeTNl9?-GYcjIW8?nE91JcdzQRhY zw2a#YoH)*`S@n9?KT{=RZ_T%Jg1j`JdaZxo$Sm`qL7m}Vc-KDmuQz@!Jt(iwZX^GJ Zabe7p??p~V8-adc@O1TaS?83{1OWDqVSWGr literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/1.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1ed2604fd80a290eb50c70dd88ab817998ba27 GIT binary patch literal 748 zcmVMu2(fp|MWlg?c5H8rJ|7zc!MmDr9OoR0E%Hgj z`q)SC_NMuK-tHC(h1buk)rq?|r&eo$avb*-t^Y|=hRKSge<1ybNxR)HQ#^P{?RL9N zCW8=KEEenaT2YjAI-Seq%H=Xb=yJKFQYki4jtgGGUTuQs)bUm1aM|XR5VG6tsGPsv zuYcUj<>JXse9`H2nBo+$_kr}60ZR%`18^E@w#BDLG?HnY;zYDEo6lI(HIT`rei zwa-a4O*r4WUcO2z+ng!vcO2ZO<&Uaym|sMTt{UXQhkS?GK|7X-l(JfF{sq8Ns; z*=(#Ehs|bV7>1%K=kwXoUJ!)obQ-NtjPYF*=86dzkO{pqgd@$4L-;Fi~1gW94d^+Z@w;f^!K8!MR#H! z$VmKXlw4A0@;4;-cwx=``Wa7u|GWF^!W6Cbmp|JubS!#NV;8^v`qQGFaqBr1=RKG0 zKR$2SRu09M3FY51i@mS#RZqI78~Ijrjq%I8?XRcwowu9Cm(&%^<$F=Yx83~g=a^0G zg)-{rKdZ0*x=kW^YRDv}^Rwk$0|Q0AmIjIhitJtJ->h(XW*v9@tIJ1|6gllPKcz=ryW@E6;p%0ZZ~6$88DBLyyY20>ZCiF4Z_SOqY*O=n zvF5Brnssw|R_XsxcM4!}g`f);9VV+RoU$xa%lgTWhgVd5gS|2*sl;lB{@$8zH1o{! z&+E#4mtX#M&tAIfoMrMFozoV5j1Nkz7#(Der$!nbvv@w=$X(RckjFVR^s)(K!seR{ z4Vkl6t&(c{ID5aha-$qy`@Nluo8Eo@4Wi=orh}+;VXHw@)HKnyg#w34V;OGbZD)9} zYn^}+&*6C47Q4`^u|0-fD+QEJZ}Kxwi&Se_FvZUHRvx$gbU_hEINJR}`jsgE&%c)w Rp99kkgQu&X%Q~loCIF=@6Jh`W literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/3.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/3.png new file mode 100644 index 0000000000000000000000000000000000000000..8abe1967dd22b51f7d729b9bca875f27b29be623 GIT binary patch literal 813 zcmV+|1JeA7P)yIo5kJ+ML3>9leWI3H~HE0xOK+?7ft zOZ`7=vR$9;9gjyr5H6RC&*x(pCL9i{dXLBR%rq56F%Srt^^zp{{eGDH5cEw!;gy1* z5EOzsA9TH5H=9kIwO+3;mrLRuN-!9--$~dwV41qzZdK^@dV(ORvLFb(UeDn0Oim}0 z3Bxd|%rMMkGI>6yxm?cvfR)W=$#PmK6f~J-S-nYL%;)oDyFP6k^m|8rF%pU3>SBY^ zG_4A!(@C$_ikbt#=&(P&gG76*gDql^_oq*AGJxol7x?tkuD ztJP{Ml_F}Fm?+0_=IbZJ?blr^P1Cp!tj}L;Jp%h{$ww|Nzkf2_Za4iWSrxTfZL`@( zlEiTwMNzF*i=rrw<0MJiY&Nx8&AeC;|MDy3n9t|2Sgc;JFBS`;iqq+|(P$(RiPdUF r+9({CfhZ6KqCgag0#P6eL`m=ga(>!t>00000NkvXXu0mjfvKw{7 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/4.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/4.png new file mode 100644 index 0000000000000000000000000000000000000000..31ad7f74479356eabf76a76e8bb97454a87d3834 GIT binary patch literal 635 zcmV->0)+jEP)Q2HWC6$!x=aD*!)BrN$WEJap+oLvGe`)OWJzm4NqJy=7mc0CimSziR>^gl*ehTgxyL&p}k_9y4MLI-cGU2-Lu*3?jNg~ zyWI|bA4!KJ#Uq8JNQ$I`keb7gmZY!35IvV}b43F{6h*G<20^f1uOD;gmZYxh9u5aR zFCdEIP3MX0y?o^ZC33(#d4<81{_v@atiol(K1>4oIIyeeI9bW4vft zmWnU&-bYd-MN-U82EZ5m5ui{Mib7E+3PqtPbYP)`5XRW|$1}zVA-^EhvMiNH_B6g1 z(_bzZ0Lb%P2*DU*j0quB-CK2i4*PQoA%y370O0#RX!R=9^gPc{ejjv4Ips8N-5_&3_}1&l0nxd3hkrpqW4g`!Xtib7E+3Pqtm!9Q5k V#~#b6-emv)002ovPDHLkV1g$~6*B+; literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/btn.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/btn.png new file mode 100644 index 0000000000000000000000000000000000000000..77d7c10b296c249d3d557fc6a29a5221b4173d9a GIT binary patch literal 6784 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 i+iO?PToSNf0{;&Q$@k<}p6WUP0000b!J z!r;*0CzHuZ3L$_9P`Fp%=!H>FGd-6kn}j)Tk|f$TktFhW^Pa%6EX2p+O2M)$B&U)j z36R9hr!yppyT=P4VqM;9a^8xk|qGjt9erQj!F@JW80q?8htWidVP zxnFH2E+^Efx~}&HNX@1wrFWQRS&&k8d=QJq6rY?!M_XT84|zAcm}UNMUK2v#tT+n* z5JGfCp#``t7eWa2j!2i=yL4VTjITEjP8YyEayh;Ta|7w3bCP>^1R=BRHa(mVChNeEqy=_>jv{6zno`&Ij>G$`EG@55_{!6 zN+}_wgltHpW>c)zswzi%+Ng+#z7$rn7D734`fPk<3r@Wp{Pzs7Z5x*+E-`a8L)*4P zLr0tI+<3Ube)8>~I>S*g0}J;Hyl7rz=}D<~zngLC`80jr`}Kh&s?V!TP9;0?CVReh z9OupCR5HX9g*)frI)@H|J-5dL`hbquxmbuRmHi4cUuKY9%t8pE>Tb`sx?atFlSAfe zhUNV-gVjLSJ>2d}*<(PxUPo*=7Lu(#ScNfSAQp{je|NaQjPr&Ti^j0Ex#iXGw#$vT z4IlzIFP+WMbPaehs?}*#63>2qMj-^#^XbrR6d#K-{%%~&L*23OekMMcpfO^E z^ou)13L%)gm7{a$z;PUO`blttn@aY6{J2PC#Gqf8k2~D@!-6qlaOJ^@H!U{%;5Lp) z!hXd(aXF!_udO3JpYEY$_ey=9V*YL(lOIiLVxWT+!i^k5!{Sbn=D5lAjdcbs^*e9w zR*rk+J$BQq`n<~Aog8ID_Rv%|B+PM>OV^ir!q~qTw1E0i{SD`(^QZmNra5M6A*=lf uHF&E&vf4q-Yrw;u(OJ>>|7P@WG2kzFYjbyphIGjQ0000La=QK$f2$t>p(DOX+d++<)Xmew2Y2oq$!!S#= zb+b;#^T~Jm6#ZZQacI*aO{z_@h1+Cchmg@-+=8Iy*&SGiw!3%l9V{_SibahkXUOg zmT!SltWp6F5*x(ct{|eGmF%%5{&qmATx+3SK}Xn=nN8p}QJl4~&njqWQTfbM+=%cYZGVTrN+O;giPx z)#&LKbx$&#*_JM5#)m$2dq{14t+M`!UWv7usW;-!tzUK$q0OSHMQw1a2sU(SyV$>=rClU(D0Grup_00b zm%%~~EaX7~_rQbCA+3#AHScUJ^@F#(;rD*u_kQ2+`xGL=dB!E2b6iXUob%M?`X*Uf zi)LnL$UpF@FjXKcYfC|$KwiP3{d|J zqeiZs3M7+Bh_-mK`Q`1 z(pDnuw!`ycixeKifn*cHZ@ zC*>|O|J8k*Nr&_yof?e>Wpi2bK6(_i0ubx4UFf3GR6u40i(G+tEbfhFM!{6} f;8c2FViFh?3y^w370~qErUQl>DSr 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 U9@IYl`WRldVxgqH$~Er)0j{AjO8@`> literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/script.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/script.png new file mode 100644 index 0000000000000000000000000000000000000000..e29e594005eca1fc12b32117e9da1e6d277f8f7c GIT binary patch literal 1311 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 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sum.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sum.png new file mode 100644 index 0000000000000000000000000000000000000000..8c663e2bc0b315ae98a5892227b9bd27c4a393a9 GIT binary patch literal 4273 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 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char.png new file mode 100644 index 0000000000000000000000000000000000000000..4eef3c380b0f322363f83f032d27ff8367f54a71 GIT binary patch literal 89633 zcmeF3WmFu^+O7$KK!6~@10+a*;2JczyIXL#fnYNPcXuafa1TBNx8N3h1}6|)gZpXT z_uJpz`#bxrb^e~U&QGZ6?&|82=eh2?Doj~X>IK>>Gz0{M7c$b~st5>3x(EnQT2P+> z|9Jv0O+r8*N01R0QU7ePcZd9)spt3(iyO0Z(cjhq73n$Bi-XPp+=YN<6jvDsS69Th z+DAs6i=qy$4?aS7ZD1d-jnO>;kHaqqyqo3jStl7DV_5?FwM|V$wqT7jR-uP%o-k}| zL{VW>)F%|=NP)ip`iC$zDh5?e!Anvw?*CTyUqAeeBo6Jz{`brNc@Jd@L`q$HB(;W@ z|NewKWIwv1jETFuLmyX;VOB986&-i9$LC+a04}&z(2`O4_XjG!K;&Nbtetn6R9N(R zxLLNbFK+(3!oqJJYe4?*HRvE0GlIe`oIUpIQ*@n2-lM=1b{&Hr>*a`z4S$JZSx@=z zulmZbqZ>l_hS`U{BNJ$UEigH3 zy~yJKov5~Oe{-09|0LfJ+lm~h`70Qms?5K%WB{?B(EV|Y;EqY*7Yq6q-5JiK+xKUc zK8-3;Wc8=6?v2=+E~&=Bj{JL70Ui%`7p-~McNfdeXEVBE747%etqV=(hokRj_3Vo> zAx|c z_P(i5dOws<*?vE#z_*=$u;4rfW+<=f`r5tUeAwokV(9HwvRTMA@yX|AUUhZ`JWiYK z`AgHl&D?b}({*M#@E|=v__x{6T8z*E>pL2z|Ityl@cc}pd3yzpf8Z{~F;G2RjrlBm zI2m5c?AGr3CaAa(#l5uEOY*6OV#K~~T=HP~;l9D+&j77y$%G33*4eJ%!`v$448;(0 zb2`six67{F*8HkS`wRaLb!I zjtOb1M(d)?nHay)joiTj0>0QPaqqXl82cfD0KNX!eBi`TQKy>mY&sn1kuo@+_v>dD zb}QSL;xHK#sYSoGllum+55CL$Z22wnc3a8ENloE>QcQ3dwRp&a>#|ogGGDaEJLfTh zhM0I?PMfq9X~u>HC;R4oXqm)&%E?Z*`K!UY!_}kJF}EQTAmJ$Ze#WVk&784m=|Pt&H++W@ztVSZ@a6Dmu)6YHv+< z>?IZmezmcS%#EAo8_sGPTFrrX9B@0K%4N?msmrDZY~)RmPz;A;uG@4`%D z?1oRooL)P0Jn?oF5x2atuf`r^)ST6Gj>4)Yl~)Z!W-&hMoS`0NktOH603IW0WWuiw zZ(BV))iG#~+fjC%+NO&6@QaX+r$3S!%>jx_kUJG+wCPgSFF~lkPS!XsNitGVJIcqD zomoeek%1#cIzGQ_^iujsF2;<$>moEJD(~`YGuuPn6g7^sc1*DOfufY3LCesqUKc#A z(V7shHiy?)LK~mQ7&aZXq(H4p{^GUA9-HgUenW#7Q!>|IVYE#O zT<{+WkujF1LSkn*P?JRcBSm8S@2d-<=uA_ako;_sLY(JR z)=?e67hO@Ca#&YGv*nvK4-)Vr_9=N~abBPitv1NY1%bxmQ z;S9;wic1nt<3XzhD0#E8i3d~lBN#g@>@pQKgY>Th_z3AU{TJT!6J%)gmnN=8NG9WC zg}&a1{nKS!-5s$4e1l!Q`-xdop*_xyo!R}NA-H^jCHD1cU!E||Y54W2_SQ4U@&^a4B=Q*99Rcl)6gkNPnRhJ`95u~ZR z&Yo+u?Ua_aoJhUni$kDkFt z*ar&zZ#EPa0cn&vPGMJJADMHa#5m&(rmS7ellV9+*&aNPdk8T>p;K0+oIxOCufC61 zVG7XO9j*31TrR*w$X%cAbVeB;;UWlPlH*DCihUvmt>Tc3W*m(i2qv-LBJ|Et>lQr) zR-g+-{N>dk2VinZ>5-eAj`ZDsO?W1QO9~-yk=IrT_qC#jcM(x7XORi^QVG!^34}_! z19R4$|3bz(<(~pYGDp~WC+T^icy!>pEYGJ`ogJ8l3DT4shz@3?y`eBvJH&FU`Os1t ziG%`5-OwrWYhP0D4BWsbRGy>2?%H>juAJ#MonY)2w^Jep#_fB`u9V<8UNF1E%PxI^ zd4W6&dw-|KH;Iq=G)7{4RgFZn{8(J_PuNNOxRF#<-`nFoK9zN zSFwDG6?)il81gw;`({g|im*Zh-rrxYd94XZQ2XksoK&+RV#|zGMPOlEK<$8ejaz#}qM%Bl zwnEnGww9g-gF3CWUDk$IwW}{__Ck8n@$I{G$hk4ZI1qz_h>#RAo8g&|J)`z4K{LlB zYCX^epG36rlkZ8rz=o6e%0j*y)lep?JZq7wt2IpbaIx9qnv<_o^mHE zHH*^-JsIV1em|p~cjOWK^^!xpNrXs*k-c)70*^k3i1v3+V1GIgXnFQOgt<`fCm{CI znPoWk9y{ag7AmJc?Wm>OUD?x1<^+;&QtN<`}{>Gp$>8mb#40I*GU<@!>yM$)ZSC zdQ5QM=hQ~u&Hh%e@20z5AcatcrGLe}Ciad+HU7+eH~1m#&VzPrVY}YAJ?IX;?X}ai zq*`UN7Ju=94wy2XDA7Jj#KubctvRjup@O8;_(DwcU~hpFxIR~G7ZpV0kkrcfx+k^ne7j-Xtk<~-|4?=Ey#J*X4EMTN3|V-^-XDtJ`=L#EShRALL$y4yG2D$-DRqea zE{p&a&q+}e1a|mdO&9^n>E}RBG#%y#pYuXpfgrdESdPlpEShL^KVRuAX~F2xU8uNg z=B9p&*L~ERC}cv2fGLt{WKnB`i}kf?b`tLCY%^qKB0uHXFgEguk%1nCN`80n55}>< z|KPr@3&Zp=fO#w_pqkg=sw4gU5XyAv8nYW*y($*bFBGJ^iMf-ZA6o-<`Jzz$ zeNQPAhpnjd3(DKBcf6Q8WnQ={?EYXpYjy1H{3^{e-JQ!_L+d|Pa3jakx*j_CHP)8F zI7j{+&p6|hG&x$ZHcIMIu%dehN<-X=&=kdT`c`pbXusHEM zx~gbcYT}v>4K^XIcWxUe%rwE%A%IV`HHSInZHx`Ev@dL$^uGE*V{30CuIIj8;3a5@ zNo`*HObdzc zC;8V9QW2wrOnH1^ zR5z*^AeC;sAbS$GR`@`aNDQ zO#$64$u+y>4{4S{K|ES6M>B^wVZkl~<~Fx70gaoF0B;Cz{}+rH;`d)WcVlrP7D{>d%niCYUlR>cN=^{s~E&*oEYw zeEY@pl`P@v)tt}zUpU*ttZ7p|1l8hZvBqn47s$##>uNO#LfSCK&zgw8UVkO$W4uYF zSBzKC!&z{co<`qIiU4uj)+TUNMX5H5csf_avMVdLU;p6Njy;V$u58I?qa&c!I;IVB z5~njh&O{Y|Q9>6ugymu^mAn9}bZzblX~Y@alIXl1Gi zn5t?*&aCNs$HDE;B{95aY4~{+St@@7NX68(8~hjbAP;eTq(T$CsR?16?6j5Bbo@a6 zl{rhT$(I1kMtOezb+KvU0;wyc0c3X{U0xFPab!d0tlO&W8U4yl4Z3ik@0dYoMXBx_ zo};9qZ{;)nM-qC83VDO}ali=A&wfR)%#=v>T?DV2t+ivoe;$v>d3J`TuojaSj$x-G zFg%gzONmvKs`gRM;ZJ%Z0zLY<3SWKZ&xwT_sj$FLcY$B4uo*@WJx}O;M zj>M4xCS_oiV_W)j`rc{qkLP~chd%`goBJDcvBFfX^vO@>WVI&4T(QtQXtn~|fW=%j ztaxqQ+KM;&-Kc~<#qlCcSAUsemSi*h==K8z6AJB<_*BuZe9xBSUJ`H#$9fwKqmK|* zKy(f<@EM63>_v)axmvjB>wkv# z%AM!1`Z^N2CJ(GO@uGK~hL|?d1#mS2V!bbKmLJ-brg+Wxov(mQY*voD{+4;)>49v3alNKCug=vPN^J!mm%{T0T1@c@%s>!fF;l zraL$^0uiqu|HkCc6gVi#LSf+GaOtsg8Uo4ukSfSRA8h+xPxbY5RE738E3#&d)>DoI zZ8gPd6VaMH$MLf0{t$L;{5S@J9&`6Xq6f_wBz{>1`5DT%h;I_7v7jxiDvLpmfG5hLp$=tm6OO0>c(J@sJyqtp_K?{*S%qj1K2D+pH4naJ+xku3UrD@6o{RH*UWowYj?eV zilDghS6;u{0`k?L?Vogce}QBHKBFqQ6MVrEh_~HK`f2zRX@+*hW)%@LvN10OCCwM5 zyC-wzDbOS}DRFE}P8Bq^z))05DrwxoLUli42tipY+n8L%s|kTYsN9=)MeXE_?PrrT z@k}33?z*>4rv&{O8D7a@*NCIyNq}7fWWF3Kuc5rOT5#+mbK-rA(zjxPe#N0Q4G$?q z5J#6Nu27_K-j0)cy$!a>%?CmoS2GSClX#}n=Q#0rfx&f;oFW~j(8wo}Q5$V^aHt7{ zKjDg0HU-kdgeDEXTOOicg(y4T%8u6*&eS8Q5u6&Qsi0*bK80}7s{IS?| z+2EUAqy#w>Z&5`cF;W`xwfbbvnqClyXt<(f;+%p7mGCbJ;Ht>sXG>4}g7o)7-gv`8 zeymj~Uyv&m2MIIbXP{?fmF|<$`bwCo*r*lbijM;@YBTQ>`O9LFfFG0}tZ%;O%t!===;)G+3#hX%D-zb}I1r(A{7^8=&vky5Hy)LuB!B2a8UxpfMhja#!>r^xQoft#8; zMS7z5UE!*p6ftnT3SDyk67CfIUShhIOHFb1b9w-JNhmK9BEAsz4Z}PCC@%MuPmCVb zPb3r}NKfZGTn68q!l+X!zhjtVOz)hb$v&3KC|?wgmsGk+NgtL*JoPX%D9o`f(spC2{_0vV#~BV&e=2wK5}2p-N~cFC`GS5w9q55HraUzKBlYjH9?A(uu$L z%F=de(%%J%Dtnd?1hgfme&6wT6GIGq|6rex5XoVs6D@gP@!*REfXjU4!2@`fJ` z1-Vn6Oe=*xARP2l9szB4spm~8S7I#kQNo7ew|VQ?%!w4lS&uu8=_SR_=ZN{AMabiK zrew*9N|eMYK22mx@9NssPxD#J&dx;oPSeRJF{_`fou$u5fVR2ysU`jr8~$5W5oSZg zQ|(pJRF5dnCqd%*m5i6eE|u(z@xI-C1YxlpO@K4PJ5OF#X#DvX;5O$RXqW}Fy|G4Y_zyANN z_WL1X1TcE=#j;O(Gl2FN%@Py{id5<+a1e#=P80qTqPXTklj9dI)&KIr-6f2E#xnJh zxn|58hmg7V*mn55iR_U5FX^iX^}{*L)c#xJ#vj6RV7fa1BqLnChmekg=EDO_K#>w< z{M<+CJj`YfGY*OJpM8q;VPzxR$J_M>j?{MXuGj@1?JzTvspt!Wqfjn0qT_Rv{|3K$lSMbx};Gtq>&1<+-)v) z$|{?HdAg73`-=Z~*70Vx52PD|BN7n)W)~9G6p1SqAuj|jR|2wNzIgBAA33;P+tmis z^DmHnmp@mJ0SLaxaX(cI2E`(#Z3dgeN$(c*@$(Yb`Me{+Ez@jO+=T(A|;PD~h zQr}AoWn{!hX(3zf826ItR{@$jI3^KQnEasq;U057`62xq?K5P!Xnt=r|H0N@N*b`l z6^S*!sbj1u@St{Ze;lw7 z)?C$%q7VTkWH=0&(qt$6be8ChRl>A37+@wGb#c`f7M*UsX6t!{yWgCF&r;<2+2r|X7tp?YK$TD~{tU73 zL#F2k0QvJb1a3}v0pP815$_*(aZGIE-=IvYWWehQ8SaWsd_c-_+aTr!gg%cRKpfcGpW#R8(u4$R3OGl#%9V+H1vI*I@RvN*Rz?$VK!1QVwrRU4 zdr63kOTX7UMbAm*Q4YExGYjoarL3W*nVW{1D^kSa##>M#-hj`Yyc?g&-PHI7 z>tYmd$sPqdysiME!m(Lp?er% zu-S*IbW$~O=nwJc3uu=64juOpW9=o$aaTHcMrV=G(35SwSNtszeAdIZsasfb1rSUj z?bp+lA3ARUji(VvoGX>YpNl^`>8_tO*xfZ`s{1J#<^OcizU5dlJ6EINlpCO!FL$YD zRBpNYrdY%FJ2uH&I+~&{NUnSEW?DdVI^ygU*Et*ufhJ}9T$Luj%mRk5&g&tnOj}v^!iCi0`&jp z+h@`?)rn)V-2GHWCc8R`Iw}%A=kicim_xi8`!{pGx71I-OA z)S*f!Ct$z=p>zn$?2}nm6d%Kn&j5Mx=3$Mo{pO(A9#Ego9u(_67JOn83xg4?qhaHK zj=!B50tl0is63CNE(_?oNa${05zvb5ffUCM&w)~RA@C3xD>7%7cj0 zt4E9`dv^NrDY^b!Gu10nxLG0@gtrYrzfivbEt!0i{?Z$gIR*&3QPR{kymT2uOz$~^ z9&9B7w}%+54U-J?6PSpwDTDyE$g8~=mKiU;Wrq0Glo)#@O;mMdDvGI~mri2&w1F$E z%MF##L(w3^%o zuxsgl>WY2U?V-=Z?$77`j7fT*SA!0I;3}QcLPvPkBJIQJ3b$%QbpYtP2n@mlNiwi{ zw(Jxq@t#>k+$+WpVqLyLRdHy>;j)qUwW8m7UQ8_;FLn@#7r}z$9W!bapFH&GK&_%^ z0(U2U9+i2PNMe$_as_RA`90KpO{lfFz8Y7=2n7u#uWkbBjna6Cg%~_hSz7Z*P69!v zohzyX{VYf5YW0(3UH)66YUkQ3B4>yJiG>pUn#~PKUY_hrrCU*8I{Iz)RRUjSGWBGI zqJA9HJ23&g$UpXAvz^66+1 zt9`4x;IoE4t-9V77Z9GD5~U{`PPMv*bv8E~69^s+jbC@Tni}8S z^}%jVCzTRLkqIPT#($GQlII?S@4J#?xupc2XB62sTpXr>j47tk;U*MTi}Xv|7pk$S zi|m(@l)lGC*s_*44LFBj(AhcUN4JS#l_AjU3fd=kgQlL&x$jnZ zWxm+4_gw>QG8q{T)tt0hhd@AckhXq^pM7*=+_}RS{ro^u3sOa>3u1fFK-bww2 zi;8(9M>hR3>zk=pveQx>Z_aZZE(7v?O4`_%%6&LqHj*=>GcdZh&@^h^;-!x%3$6smsK>+ z_rJ7@V2Zud%u&)ZLpRd>#@JC{!8PRK4XP=KRCJqFPkJ+BcLQ|S-sH68hy|vlr&k`O z@Cn_+mrR{FYZ`>x!;|5magPoNspSlZuIEc^g&o^Kn6ay=ZH(;N{et__rON9ZUepk> zvpS!j|2W2-J@%@luv|;d%VJUS2sXsO@<}(@*HH(BEHXp~DpDAU1QH>w0TvS;ab(I- zp4_y&oX)*0j{}(;gAy(j4)_Fp!!qdwOp!oQUghlzGr3Z{h;p`S=I2-z@618?hIm;` z)(ydR4eG(+=?vgznms*Bdq_U;4pYln?k^-pa708Ms1HJUTrn}G(5AN3!lnh>pDyFCU++WEV z3dOSEJvQIW@1x(=$YCNo*gr6NOJRa665;8T;yRX*(z1l0g0 zw$CK~!vRyarBm(VGYK(2#jRK8 z#ff5k&ej$x?4p_fmU)Cb-#FxPPcvg%eVh~}ExTV8a&MV>t>Tg<&*)*RCCvkwk~DbY zC{18vP$12~IgxY~D&2e($Q03*gJoJ2XuewytDe%xs#ySn3Z##1DAb#X#LNY5Qjj9A}s!;At1DFV&2izasm=Tsx}viGUGITH2zt4-y$1p887 ziVDFb%;Y{1D5rF5NtR8y{W5o%dOsq*63H>@kZ#{p!oOQyd)rLSkiUZiSA`fT94CUK zTJJ@nu&~YIiHaGNT8dAbnfoo+DPuvn%l8>!P?h>7T3 z6-AkhiCIs6GL`Edakl_Q6*6mv~Hu8n<$S}d!{-5srs6u zvY)}3X0!#rFiK(%pX|c~y+WOR2IC);=3mR2B*T0ZhkNDZ-j%_P1Ttio7-_sC=zRSK#Sx@)7E|K~}^3;Rf&KirH>yDv6uh z7=k3Uw|*hDXLni@_4$9CGaWGjAfN7R&GJxL~;6}=3-s>40@~vZnhYiA?{2Yzvf35t-Zozu7_2LCUzGgehgK^pKUsT|-4LBvDchesm7{C! z`-u-O8Zs|eJ$$0>6@`z!)|TA&kvk{u0%IRUN2AEna^$a6bh-b@NB7kM5K0VJeE$`G zAG(n0f6^6K2{6|0l_@`w06kEb#dldlOaHfzDk@mdWZp4+lN7@){uy-UqwST{Z*g+P zXQgV=R5fI|Ee^kdQ2S^0JBh(pC!k4jGdXAXACU4ZyXXMk{@eEF;^v;{!t=r%yeCX6YhfiGk~e%K0h}AOYr;iol}0YwugI<3n1%n zGQ9tja;NA@x4?)bTJt+6oro3RT~9X}v7C^v z%7{b5EPB|6JbkJR119lbw`RPIp~3TkZb9VgJCuq|H-)H2ZJNE2(&D`}9}+ei$ZM$a z|GcnEkx3+Uwn_e;bHu62)b+0YdWXRkh;o`9?Ivt|ZMT1hqSqWv^O-m|ativtiu$5P zJ(^zbd3p+m_8XQDB#DdzRq5hdKcK%|1u`Yh{C<4~r;uN3vCNb5911LeHS6Fp<(^Ci z)_ol5y;4-dIHt@C;qkb!%;l1$Pn_0bW2zkvGirsJQxTuRt_@Q(Wv-KW!{noBUn3+M z#oiUt;Fj%z7wKpa-QI_pK(m`FM8u#SqlJ7s^k7=o32$7q7I1FmH+)0@+T{!TCZtJ{ z*l{kOvh|U!-G(ROfh#Y;PcoXIG4g*unKZlecGOo#A1VHExYckjO~*u|It zE1Nbh;r|QX1a^>%t^n?|BXC%#4V^BQ8Fpu$)L*akw;j9Vt0aIPzaDrCwEPQ+`WJV$ z@_WE1T`H-5f&17Fe_!;k@bcMX`7`jv?&`lI)PMZOuM`IxuKGT=Df>U)pS2h$XD@Cx z#A5jyH~-J4s7LwsCzs+(-~CIa0A~8%_ZN9A7g@Y>|NQs+|AU$S<2PSz0K>U@RPh1r zKQDUnFF(b2EXUY6nC(XY*MI->O*N>eS1OB2|M~tzQ$RWK)M8}_ zA>x0$Ln-iy<)%Y-y#Hfq;Qvh*sQ)LIES=H#yDwm9BN=$?zwaBPj9_Fp%C1g9xdDQm z+u6QXw&e!)d53>(5cubJdWSkC3I%;%4PG)%bsD52LtjtQGT1Y`ZL#u-R+59#C zbJ*TatCOniSOd6~qdS9b+r1606{8*754t4jviT+|+Qr55drMR#6Y?+)kiBZ4=3qy43LD>-ZGY6`z^ zn2}c}(5Q}9oUg$FFSw3ui5^Y%XA~Wz9jOs?Tqr9=kpkzi10d|Shqu_hBKrCSWL>r)Pkev}ZlntG=6pdF@aXzKI;wKE++_3Tf6v@ze^o{V|DPQSt> z`9+IgV!Urj_Eb(GVt*kJAqUqKn@p`uE1b2)&G)KnBa#TBK*FPlZ365d*ieQRBQMu;VK@i#^1OW%|EBF3g0{>fw9tB zaR0HJq@a;JH>y}-@(lh~z2WF$Qf}G@g}=1_S_C6C@vd>J4h4x??lH|2hQJ%_vfvw2 zcxv)&f!MWCsirXk&?2y#yx~ z@6bx<#$|?4T1eFxOIb0yJ0UZ*=pS5aLt9dN6Zf+j6&1GI8EHyR*(t-3;d zMh;z2wJoC)RRc4*%Us2J(|Mcfz6Eu>UwRjBMY4&lV=$9#^jw?WEbuv26~yqKNtu z#dPR1EBxPTr;6osZGV<7B-ZgDv*?ORaZE%)y}=wdn4(1CYVW1Z4^UWL?1>06!q3E) zHAnff`yep8jyO52NumRy0=+FZ1ftOMiRy=<$h4ZDx_c-$(eH`z;Jnw`oL~0$;PqTN zzvD#Bdlf2YwJ#}=B1X_}U)1CgT71`P?Xb>^;(8@2`X%bjeOa;1aO%@)G~eAb$gpm; zG(A<0E)%0J;EV7VDVhxy_hZ6V-8;{7Wx!zkAb3tWb_A-2)i!cKzVY0do4yes4gkzF ze^}A_42U;#)o$!uTSuO+f>(a<_d-_Y7xQ+;(${$sDcDqbwJ8qFPs^LK{~V;ux++k7 z+{^5Jg(k&<%x1SXGI3H9N3vyQn*$a(>qw3hwo&P}ZacEF! zJCQ*wD2D^@dQW%zL6^2Z93dLV*rtMrU)G8F8!X(%q+tR^+RjwAGm!_fGEbSV5hRXhk;}b%VrNgUwWVb|qoNWjeiV z`*m;l8U^Kfs}ZMkNPZnw+hV111bNLLBq^jpPy7_C$ppK(%>FRxRpTyrv~taVGG+?i z8=~g=5^|>|X=XThy|-lry}`?*~1jjj#LBf6Xg zk@f>7W+%dEy6p0`n0S2EPr7az!k~Ebql0|fnx5?EX+76$({t?nTqmG~{$~3=M~!9l z%>eb2@4N~UB8jd)nX%W%9C^dNr#ys4;K9JKr_E zzg?s}b|;=}_2h=)E-23CE}kZiGo9a8Ef4De)>Xpa`wnu|k^?(aZ~Hn4+AAhjK)1)F zCD%1!W)THOI3n>j2~>3z4$MmLV?xHME>TzcQhapHti!K3J+abX8_$`e)f8yh6l5Yy z*(;X)a`w1L4zn@eH&IE_sMFtgt&qkc<`vQZ^ymk4s~cu(9MRTi7^-kuw>wl5XwZCP zCR7PD)WFy03A|V^dcqfE#G!0uqLw1uHPqlhB=_I@?CjP*i>h6x!}|j?^F@oE8TOo6 z2$k$FPL$PLmFYNDhFdZ_V=>s^zx)jK=(#wtd79MtDQWgA338L_^eyWj->bgsC~pkM z!9oM|t6PbS!T5JAp%w26y!sT8Y_wP_WxX7O$Ell%gblkZ2G8df%QOHF#fZJaIcyYi zQNDA6H!8xgxJ@P3JZz9+BUKR=$3($pVOSE*n9i)DNc)XJzsV#yvc$B)_@Fr#my^6GzFf?#HlwjKbo^E4uuQ0^Ub8bKe zaIU-LDt^qW+Qv40{nd^^*f1ERVm9=!%hVrmbcCyGSfeAcT=2)VoXfbhZa24H&UAo4 z4$DfTs<^br41R;h_VxTCG1C_3Eu*NNF}7{Z;4e%5JplOM#Xe8)bmwoXVqDVD*IMuQ z)qyh0XxKsAv!~9KMZHGi2403#Kq&dVmTG3xnS!i6bWjAFtLQuqOTUS|F<>l-!5Tf+ zB`AW8Q@Q;Jm#_|uGow=t4F~bEP*&3OTZ6MT&Cr+SWHyQ%FvF{Cw5TXq#04cEej6u( z9aMQZ&-cvLEOvTJ>6+_u0;cIB(*?UXRI{E<<@Xcp_3voH(x{Pn$>yw=JYM_~lrO57 z|JLZkv(y==PDYiRCJFt@LbQq?DqE16p7s)sNMJrhf@jV(Wo@YNg`;-NDpf}&Mia*$ z{42rr5YKiHG6vJG>4^p_;Dk@1)wR5OqoCc-O8%vV^>bNiW;jR$YYvJ^B1b0O<1%M< z4am$`+aIY;e!kbZ%l8<=W*`KtcC0k} zR^0~kJEu1al)77QPU+B;xKMuP8uEF~*jKUysBAfa=K=4JslkdsioRR{`QsFxng?gj z#mr<{{7!P~ai^HjPoVoS$H6wbht~k3ds--#MV3ccq}UtDIa0WzT%2aoL})6ia%>Py-ybfKRM|E z5Pu9ED3j~?d#PT4i3qV&e>O6ZvH;A@TgWN3+Zu4UfFMhdWh)sxzGg`hZS$)YGm98@ zeyF{5NZho;bE+njmUJE5VIXeKS{R0Ans7JEM2o?LqosCWeYm{WNt@#> zv3&*>5(8p~Bb{AJEWm2NSZGrE0xPS8xrLrWw_Nxe+0C$j!c<}+&P!jwy_WfEMtrMB z+WpF&%j@f6S8ED%(34x&G;i3|L~pXr8$Fvh-IerdjHX?cwg_#6tn6xWy7wtb1Y*Q( zHDZ}24|kBg8(0$LXW7^e&BJeIA%2iV)Sc1?k(CR`-JlX?xcNlnyxD(AW{gvn z9+{}j5BL&*OpFJ_%F`KkbXe84*!eD)fA(_p)#a?5lSQ#@aq}~uChg#HM<5RJi!ehz zQru0x?ek-kYOkY*We;|u?YD26$q`ZD%p0>%;&jBgzBwl-i#E|D>?I|6qeGdusHf7` zT!pVVoMc?Rz&D3=Xr10=e*4`($!2?9r(-LOHmkoP%0eQ@E^}$X%cB)4<7{!s2#!Np z{H0NNZn!teW4fXN;4u9v4r|r^a(Rk8d;W4EZJBc z%%zYiWFkJ7^BB^>5Y+2S81fhQdV*s{#xp8O;k1I1xdEtTi7Aa=bn5ou52J z)4?fIb((VxO^YhHMjVawbl#ZX(16$Tw|+PeTl-$&NBTHb>RqEr3atvmh@nJx~6k!D3Tp`Z1-R<%`3SPU+e0X>Ua zw=1OcdpWrUJY))djLjNCvw=i>xILw6gLM5g?B~F!g8t`ol#Cts^LxlLV`sv&(6n9} zbKjvS&XBmaZCyj(nwA$rSB$~N|`pG z)Ky{ayJi?BzG=C}auDVX;5psdf8k{siwgNHxdaQBNweJabr^k4#qnn&ylL}Xv&md$ zwTT-=+!a&tw}SALQgVAI6u&fKPLDXM-`DG>bo&}(c{Xp*HIxP2Fc_Q*Kki9FG+ zIBK6~!*4i-^92Cd5^WV*)Zi5;;t`mmAgy(v{3pEPNBBmvcw042K`kc{yI4oy4 zS8*1gBg!m@@~Okf)vlMjUZp#Sn2MUSh1boy(E#Y+B=ci`t1ORLoa7uk;fP9xy2Qle zM@Lp({#0)r)Kk~aewRSaZNlHrcC4)1N~N5<9wkA3dM_TZiAmsSrbK!o5Fg_7#WmB5 z<=jFg&R%0jg%19*#xv~)%GlSL1T;VFClFKO2XiMc6b>i(Bg#CKTI4PGzY(x!?1)JT zOizg!1=0aTu#Xd}!&uSE)g=1AK^*Ki0RK5=(~9^%;2DHRLWgjmCy@4^3EKa^{{Ol5 z`zeI;`Oz-{C|)q0-|3}VYrgTKe}8_~tw$cZr67#(H~s4{5?*=aTxyEE1thlR)$xJ{ z0K!_gNHu3G z!f`GEJhuRBu$>8Qr1Rw5kX>R>h^GPKcF(l(AwX-`-nR}RgB0s4EL~)KUzg}w7bMvj z;)a1rTKT8{3tD2BA!Yg8ySV~tb|YY_?|XDmMR}?d>^%A^0A05)o&~0}z*zm`<>M(1 zb{LvG9Kl$DayEXEe@PHlc~Qw9lLYsH7dSlt&L(i7isDqwJAJh`xMK8px_~{9aGV6@ zm>E&{o&b_-#CL!YHnL$sfU?hsR)AMAMKMa`s}H?D)1zO^9@t-fagJw-xt8ez*k*X= zmVo;&0ERR}l5NVG0-w2pI)X?EFYNv>_8%IQI6?9_@*=JuX$v~QnE_i-ZIbLo zF{&Qmor}ia0USfsOgA#Aw~vNPO?~imF<)u*LkI#U8s_5XwW!TU=YrtR)Dx#(V$07c zCY{KHE^^F``71X9vh#@3U{# zDog-IZS!%}^SL|2oJf$4Z~FasVhLcaXlh6Rm?Kp~!I!aIz3b&DP%twvFy*blI;{~?N=~80D!Tf{bXR+sT zv@o9iWneGJ0O|>4hNzd?nz#>+PMVVo?y*SMb^|mOQ*o>{NL`XfBT4kEdj~0?qs#@a#E;qVez7B>=mrh86&! z_KRo*#U00jLw6%!)aiUAV+Vja$|2;nd$B1kWfJy?6JX0d4ZAiTM+octFpk7V`Q#=V zh>Ui=j3fWS<>!Aq#RIrNn}kh5chGdR4zW_YycnBdYD4AmB<}1PJ`^ z`_m$!tHkfD`c{v^vZ)F?Ct|r)2f8JehfNpXr0Rz~S6LK>F^e=JkqPn4D(Z~`y!w2r zSsSaLZ8-E>Ka_AmXg6GBeXl)0LeEV34<&fsTYp0;`pH5=59qHH119IVwReiwxjXMV zv-$~$zLL2vjKkNFs91Uy-c`PwaPI^=^Nz z1K?IYWi;GNsr#+}vA7IJ6azM${_O{_MQ z3H1!MaafZGu31NtUkdv3&br(DT?QJkTBowlA&bn*QBYrmL@pCXa-in(6{=$v{^C|( z&e4YxRed>s!!mP>^-|F1qE!IqZzandsa<``#0u}F)lAj~Qf zyRhR1jj2nPa_YMLpq7u_-wOE_PFWxBMX-bVzr6HI!T6fRMjM$nu6Qir&giG5!R;Qd3FKt&Cg1e(*hV2&-$t zvb{?-2b&8I6cinRTth~Gb`ZYiP~iSh>Kf@0mdO2Q=hiERT6fy-fbNleC5_}m5zKO> z_AY9e0G}4ifS((&J?cC~ZIh~!Vc>!GtN_SPZx|DAmc_%Kc8}R!xPiIkn2G~X(mmP8 z{6B^Uq$~jmI4o;)>l5J^m<(L($tukC7r0@H=gsBZuyK1qt|KB<;p;&Z5^vQdzusE) z%}7aAtOBR{<+Qhn?@b@Eq`}E_!J2Y&kC(q3j2^-(FQ;O~WX;6>v-}Q;&DE zif$D=`ONnBJCW}CD$wFj&DtdO(>q#u@QtMt3=H=JqW7nOE5ixmB}lrdt93EM5yG>f zNUApa3_g(iOdy@Wvbo&^U!O%~GPt1Qcv<|F(3#YWIiDD*AD&H#%^ptChAe*!KFLn8 ztkf2~9!Op%HO){usVoeT8k$7dnI)JCp!`qOW4=sWPX^f zG$l$smGSW`FoR(kO^uBTz5<3$&H@`tj^N>@s9b zDw&kn{jpkl-S1+?nB@Ln_-yzHfAEYu@iE(9MehXZ@Z3qEPndWihsggT^ypW@vvZ}{ z)jlG&gX-UDii*?Gr`Mc~>v0T<6!6tm+vp|2fIi|^P^<{yMuerfI=gKi8(b`R0SMx> z9{C2)Yy{d+UMuK|Hb>c zo&FcMMf{9N{j(04e7@VRnB6$KK`SyJ=Wg#8?|11#)4U7oG##pG_^S6vQe1%F%LCm+ zH}S-^h3nbPB!W)?^%FOy@zRGDzqm0{Rm46$^R>-1zL#LdPvWJQCNo_d@4vi?r}aLX zu8Bb}+btY_v&xC?i6v7}7{w3tBCOZ+{fJ^eTJ(>}Gy5g`9KTy@f#|9flQ*ZSbTB^qI7G3g&;>TyszdC=FXRkH;#EI#ICrF zV-%bGAX3%?{DkJjB|h%@=6J{MEIiq%%gUT@02sVcSV^x_j8x}ijk@_0>c>R;Ev8K=2P_Oy-s-k>)YkB^T_tw7 zRFPlv7UAe|UeRF@DKt=RhbgNKBFI~|Dyl6ndBSWb@(zc+igoIhejM*}*BG4YN^6aW zc@VguCv39!`hVxB&2;~+=BK@P_ip&H#uzQ^Q?zQ;Q)Y~b&tUEs{-uawUk@Spog!bW zz=ls!<}2%&wN7vfn6$IRXp5cZK^sDPxy5)JbIO%Wag_|$Zdgz>H!Mao<7Jdd$X#9f z=<+s={sCp}W%3o))vAaTajm-dPOagpq5$o5b&I0pL;Zc~2}&e|F|m$%;DhUSq*U@| zHVY-tKQ9!YNjkv7xeRJ_N<&@x3jwuNj)fnVd~?UQY_UcJs7N0Fm)7SF5sT61@|^Bl zQJW?f?w=NwtAuuGE{5^b2}URjK0mk8@h?sFWU=Mcs0*=hkMZYW`_6h`-^pEvhfWrg z9d%Z7<{-~~R&&}%?;77!ZQHEcAhzP1(7qnkgr0eP1`lHwY^u6{b+I5PRjVFhRY9ld z1T7`%>RaUW%k-V=9^5H9_=7b73^{tts|=A*1Ixzyy_5FfZcBVNayowF+3eHeSDqQ9 z@6GdR@XaKqUzq4=d|(bW{T9x4VMd}B_srx$T$-J=-6@V)tc9IASCVgF#tU?&z*D)M z;j$V_6vFfuhWly6_MRP;qTl46319iZSC6-!n!UzDtP`AE6>+|GlNR39=@3>(($}&9 zs#X&9C_uBtyJ;fZQCvxx$Qq@Wm9VN)9If7Os{Jx2->rF+c0UznV=E4UB&8_tinm*l zCQDBd9$a|a;wNn8ITi=0X=m!VmDaienI{bl`_ZJfv#QrA-rw_BzI%-|##Cu&6PJ}g<#L9XAs&x|4(HxK2K zN=R*3eK@dKu7j$YQZW8POiVzrNMr{~c3?%4jVUBCAnMrd4c;BTh|QZs3r@#9eC^*- z!8~FOq)3-9A3JAo*3b3#L|rL`4a)H4K<*-LdC4?4fS&3KFwA=}mGGitpKgB)nub5s z?>(Cs-A(L+*(c^He6QMZr~dLN=haEty$aH_{9(tpPgU7M+vLmSZdBCWaT;1qbvD2; zcVl>aM1jW0{>^>VUml#q%RN3kUyLmBzj#+Brq<9Y?u9Ybw>hkBwxbxWl(2cVj;8-1 zZ4%69YL`$ILHE+I-rJaP3sGdNT*#YLttHg{lAE(3>GI%DJkR`+z29itZ~H*k8PretmMw!i=$Jq1)vq0(K8r8ws*d(q zcCMPM%vq%;`+Hn+^>fC?^j`iVQoDjQRRd~>T{pt360D_X8`QZZ^X^*uWqB4aOV7qw z|D_m0tlLue1qBMHh^{se#))g3M<$qYD6SY0O>4=1*4&wz*dDQs z+~+on&%cgN{zM;{FsJm|KW*VcOwiC{N^0zG) zkL}5(3;nL4Jb9PQb7hm+z-2=s+$0o; zA5$ORQMJN|kWMYfX%AO_mK73`MW@#dm+yv|Jd1ws%#3Mzj^z2K2lW9)k8w|vJ&8US z5#uVBBm4XJfX?xFUjd&5NE?-m-Xw_CSa_1)x0dU`aIa!=Nt901oy%SlN{^xZXSo(3 z6>-;1DONTDt^I9|M`>N|D+mu_*2`GjNO&e)!s(a1!FpRt@!SxSCcBFYx4%d=D*E{6 zYky|u<&)%?~Jr1d+{ljs((EyTgo!Q?vPC5OvEYBb1d=4so6g%|#^?7df zaP370t2C`)20M8woEJ>!O;su0Z59;IHsN!TM?1>ygRdzze*xy+(Vk)Oy98}3q|ePDO&FZ(a!8MA=X?GTdZFcX6o@RZd;%W$gwE;CK=PLO2ajZ3`>kRZ9 z&XVz*jh23l$S736^d-&0c{kO*(IdrRL4Q_0{@q~>-i1HAF+s|SSEJipmKNWHqEtiH zS>XNZ|LRAwL4R-bHll+as#MA@n5IynFpKohzh}iHIkdBzH5I`2!|;?Snq z83Z97k%+m36gp4(+R@G2A=ZQwm{fFv4~GRmKcyvF$JF7wG6mjq5q7j-Oab8BV@?W>8rL(@z0m=uk9Jqj)2bBtI%DqL??1rHl7&0p+O3L#t=4=+eZUe+D+c^1B#-v0+VvT>nY#e60QGw*4-;#!78aQ zdGlF^R_FQQcE~Izq8-5$hhk)_QAX)U|5+UCePfkinBKWE7BYc}5bw0(!#?9c@~^bdRkXU}xMiL%e#CgP;R@-h-RDSZ z@aT)d?sT&{`0xEec<3o7;!K#uVxRy}LA9F6H;GCxFB@G6-Iu zl0HY;)2Xc{*E%z6Yco^3M)Um~5*5m0|Hd;~8FPq)x+SIQ@jE zR8-aXRZ#LN9ps)flvHVXlaRioUGgR=RJ1hMLS03_^f1)vthIOsI!n3XpXS_ZLKKC9 zaV&gQe%_|ZjSj1N|3;Cwfu8naQ1C-S=}Hs@;nI5rxmG78xyhZD`Dj3idOC+x_iMlJ zd*7c??Z-F`b4U{-I#I;MIKk`C%&};WE^8aI{{r_JuYx%NskGv&<{QFE0;&A7ay32g z-KKof6z{-rc>b=-Pzm6Mp;8rgsVtQS39BT$TgZ7jp~GxS)z2b1d_eg%=+yXGLh=() z3!lYk=Vzvz=QvX;F#d^Rdc3%6Q|bFoXw4+9&+_(*K@d0u`v+3`u44mA~1vn!(g<~jG?5VNudjd*xvk^i!P?ZV$6nz*Dg zBcUC_vg@s<3SJuM<**(IwQn5NDs{(*|Yf0agIULDuS5-uv~GiwrLuVsFzv4ti8D4 zrCqh0*Qx7nbgqC+&Y_B00xiOK7sa2MpN6afb=H#lROnlx&T7_6>0$UwQl@6Jhb{Vn zetUF=&&Ee-(H8^e$SB`=S?`X0d@HdfVVN6E=665ae{+pW(f%4#Mfn4<89mxg&p~>Y z`#d_-(I(OF^U>!G-4)>r?xqU~h()N$-TN_MwH2>Ml{U4%^ge|n8{1(m>3=w#dbSqJMB_JqxK00mnR-GzF z>8zFhBKp*P?cuTZ{clRsSI}HA(}to@R#eM>&&9mOD+#YvA*enfykGtlD1bn3z$_{q zsDM%uU6a?Tp3t0`%Y8!C9*0RspkHZ;Jb7K_A z8CsN#ueob)rbMY5DkY~eszY;YLp?SKg@CM?fh(YzhH2eDvjS}5WD4) zll3u&|B2cSnLNtHCY|f{k$<92?*>w$KW7K^UnNCtcAMT|6gj0{ntp>>2p|%}Eu>Zs zCQ$7jmL#`Th^&bP0*5CC`1SL26W)o659~9mUK09M)W5dO`!@J|I6hngUOQBrBgY}` z0jv#DaPI6$(?}LK7rygT5Wow6w+A<|yOurdc1$;`9Y% zIIEJ}ff_hV-t*Zlw_2-Sxw|YMJrT`)g|8c%QIL~(g_$z9z+wR9-I$0x{0+U(UP&#b z+@IC7dt=@DK=#?cVB_#R5s#m0Vlo*ySy+FFD7&HXEwuk@s~1Qh;ka-fQFs3zg~JnZ z+$g`1YVFdn|4UAxfOWBHA^x8a{eR>jMi?N(AnBWJ_#e*y|41DEg>1JdOR(er^Sj|B zSeXbsw>#^fL2he{C0RbCh=JKZF;XgLB zgkbu=#^L|YY~5j7V7KK=i(8M_3x|7V=5 z$-_b6`jH$sXaJjp;kpL$RZ|Eg+=1geHilq??a>EdLZIt`RTyKve_O9-`(w8pP6EZK zbT9{e@b*U=PtRy3BOTZjlW&ed5xx!@;j>HqNa6ZHg;DHy--p$4L_%sT z0NTquS-5qnLCA`$1q1VC6&CkqJoTzM?cZUzpV-O`u``uiyY<0KX=E`I68<;lHNYA7 zvwhU37L!8d5Oe3g#;P7DM&4|*UHy!;aBCi7 zEPa+q&xmvI2ehV6L(hQE?({q0&J&>y@r`;7@)|ZLq`vTX0^qL)xS5nq7Fyrx2LF*| zz+yMu0Kt?RS7DTpJ!l#TzK&^O0Kl|#aHA2O{P)**07%$LSi1y>*#>Y}5j+QdKB*lr zdz5@|Z|Wob`>|#lX!%e7IQ+@gNYPpT#G)4E$Y*AkrhM7`!uhWupNwq>Q?y&()MjjQ zqlMhBZJNms8xPOuBKz;Ce6Cb>eScSb`kh)^Sqh6VQfu;W6jghLcY%dr5AcHip#3i^GQrSEDWMl9)0%%C`T-=k z8yN35OjKTc_>FbP!J=>}M|mIzz-J{Cis&vvK)1St&O+?2wUAZd5M>TOCnO~FF5sUSR1sb`H!$bH%QK~=makM-Qe-l zIvdd4HHxvmNB~~EH=aGe@$7}@{^erQ8We@{djtx?)rY-x-wr^_I@$Xcz^H;B0_vgv zt38GLMWEM1Q2^}-|{FhaZ5g>tje zd;|=fV}b*Kdo}~sx#_q<{CE)b0j^sN!4G>us0C~1pR<)`B4LW6!qj5-q?Z(MtS zP7nJ3ETG3pJ4BDdX~!iGv;i(oXhQ@i5b=ABL-bRfL#5kPy5;?ehI)3KoAdH+nj9Vh z&a@48o?Ut}8<8W{gmCv~$m&BI-~@4Ab6Z(4GzwrU)ddy-r$rwxcWz;k&NKO-Jw=t5 z>$y*}<^SyIu8ncR`>C$=*yzduK+UpndK#{1>6G^_8gK=%wjXz z#{geoO?8NSF=RFOPQ)EkMKyO|;l^_77SMM7x{b%vE*NyNSJgX1q5s;PdNTmLS6A1i z@iid{cn#Qn1z&F54zu@Y0n(O>+ts{BpTX_@0ATeEk@z+fwT6qr*2OQtW%gU_c-Bxi zNE8z=4(_x=5OvWfHAnxz^JM*xKLDmBXEx-oex)o#cjc24?O=mjW+sbL?U8X5mo%4J zJ6xCEPid4zGT=$GDjf=e!b|;8!<^;^V~Ji%;AUCXxY01X$V)fCts+~Xqh06REusz; zq}0@!rOq9~WZN2S5>3B9Kn_kLYNUob$G<3dz{<_IqlqmLe7q`R_e@GmE=uWy#_0V8 z3*+4}up&S$epL=nC=VWm$NHWWc?db^6avUIHr}QAHR&5R z>}ayykyUNO?WaIepvd55(U5BxVVVo75z0OWyH45>9{|XCqdpE&m#OY?_`AZzUn4*0 z$D-~5Bd?2HR;61m51}G=q99*1@l|72?U`SeCrgdL14GbWt0;9{Cu8l*XdO_{n zV7ZUy9M^CO8mw>s2vT{fvaGHDW*?LlvYq z>%EH}9*Q8WqIcx;y;qrQ8($%1-azSv{&6jYiS#BR^EN?OPEdL`Mcf{K+Uu`)LT*;` zCnbN9H=@i*$TDaTr|)VRtrOP7h9MzCO_Pc(0L7ypyfd}vnxzueD01=6*EOeqQ1bOW znyT0=)XU|_UuKFlE=z)^&|C-yf+tABas=!!R)p4U z`tqstHkq_&;0bvWk3_L-z%tfeOVJz=7(@nmTP9omd{|+82XP4y-qS~w>o=0Q)8x%= zgGblH1}2})AfbIJ{v@{!t|HUgTr0=Z|5VO%i$H8a9DD*LG@6U8N-U zzeftB56uT&lHZSMmz2}uFQMVTSb=jt99 zCz72=oqzBNB|3f}QIr_iH~O}wrmR=zYu{s~TT$VpVa;XYPBRDz#iQ3Jo{FV514M51 z*Xp%NfRbWhm|Ms#KCY};0W~VEahAUwDFuv*q#~w*dJPUd!{T&j?o_iW znd3|eh~N_eZ>wXR+gAti)J1kJSYFkTaIz!GCi6-u+Y-Kpnd@M@MvH|O+?d%8BBGWk z#r(r0lyd1}i0*#iin14O&^e8A`gIJ0ON8CnWVh}HVkkaentN9(e*^RwK2!-3qZpj& zQXPzm_mm_%mqu}Y5$~uXIAFqMXDU|s%s#x%etxNjK-azh<0^m+qkNHTu4_zMgN5a^ zR#vFh$4xm4!o`JscsPlsjEqS;UVy1JsAU2F(c><7f!yflibjU6vCk5*Mh$lZBb5N=Q4Ngt;g64P+szG91?izZM#4XL)}Q)gl-|A` znXWfIDYekT#j#Y(rg4lP8&iBEEaSB7H_l^fOM~B|k451g-=bnh`3^$kt2T4f%d&YshMpHu-oo-84l%eG0Z9Q# zA?@k~T(c(dTn-r_z&2FOf`pfG=mPb_?5xoFSirP|bGa%crjM1jL9<8UAYuj1{ z7Sej}XiD+A)L0Vv@R{t_LO?3l#fRkG60nY0qN#)Jz8%Lh_u_`#y5T;w`oc>QAB}g- zQ60iN605$3Z2AK-1bIYeDy1{nEGJ{J)l=F0d=)!NU$7LBE<0@mtAxgq=G}y!92K9V zcs^XWOjz|2@K@8|KBhmrdx}&*O$vWqa(fDunHH4wpEJIDx^VS1;MFm~AzHI%_fz+2 z>7T!*LY499j6lpiZv$l|qrM?*9-zAX$2(%rsIVq?kHo%s5`*73q)!8LOm9PXZ zVaSt164Y7gB^Jr39f?0IyhiFo7DaJ(^4Z8N>vrXo2|8Rj-W zIw*Wa^)5mX2?VcpntWwLUI=^{*l^L@1Cas;Z)T+7fEIOy8qmLMe&gd$n& zFCaYGzMgF%_uW82NfL%L{XtpmH|CmfA)U%RtJO?X$$K(dBdVPaS_C5tn(zipSRyi! zM{&zrYHFZN?foaf$s84Uc&`eJCxu05vGc`YAk3`H+oH*)Sr=68itbd9Bt%~^hNP@f zYs%Tscz@7CdQTIT4Xsgb{#4e#G>cbu&Ba(bW4bu`w|@juc&RQf^s~h8ZDHW7N*q1$ZA^F zWyr*O!ShM`vmAk!9j4($S$_rHlK0ZmY?p^y+03^JP7Bkza9tj`*Fd*!W)VZ?I;I1W zd}ttHCp9I1P+~qt>pF@_G1aG5v8}*VkKGJork#%Vl1Nf}vh}vP<=Y@9)Tz~Jy_7CA zdW#}Rq1q?$<<>8OZti*xC3%Nq611&xlwozwTo(Kj@g_&*Osv3^T*usCc}X)5Xz4uBEo@vhE<~H9VZD=v__yCvFpC898`Cauf@} zj~8s|N!I(2$w-gVHt;$DPJ3V4eus1y2gTX87Cxp{xuTLvp4<70tC3Tb^F2L4mZi;7` zi$Kp7+i!n6VQaT&!4)BO)`=nw!$oOpso&{niaF?zA(S(*ta=e4|1yZD|MaKm+uubO z6#Aptxu^2GrV5E>k)_6t4B=1}*Y{=}b*y2xxWg5Cg7Adum?X>Sgk-t1bja&zly;Vd zyJM8Odv;@N`0C@mS~6@ggu=4uR0BB0PHus$c#@llB9*j;dPfu$(=O_x{n%nA6_bfP zGQ}zGdNb8>7t3#*S5FZQ00Z^ivkxep`Bh!;C21WKy01{&h_E;cNmUl9z|p^UV4D$q zhtYu~{Ab_T7Ai?kEe~$~IG^z#Kc)(2u7L-js*d_f-1S#?dT6Qi+d?dIu+@9M(02_O zDsY_gaH^!94phhW-T7<}?sMqNH-@?xPPj6UjQ&%) z@3{rKvZqG(6UA;=6FSpXnkXtZ05&bQ=B}us-B2u{4$oEj_7M{F3!c5F z*+O0(cBGt?_++6m?lX?4PkJGQ)6WGTF556?xP?C%$&S-$HefhB`9fK;HS%2sx?8XO zrZJ^FRUjLeI`Ue$Q{P5I0{NF&`b1vHjON>^H&P}*%iGdD<*33vn7G)KQQ?$uCI zKV3i51)Q-OQr?e^&Sg61njH}p8ayrYi+D=Kyq#!xDe^Q|P+8jDZ*P8klooTHcJp$0 z!g~|>GG8%Kfj3@|UE^`NcUmn1IxbVC{7i2<@7$AjRu|sQDUk=+!0+nQHSv0&=7*rJ z_6WbW)h5Es6K~Z)Q}+0E#)W|2f(|Z`j)pD8$gdmJb>)ijT6JHRWi5W*F2I${L@`~D zdpfv5X4ncrO7%uh?i#9%ly$2V?b2Bla9Mbb-ZqYBlW+^lt|X=sc!9?dAQE*>Cmz_3 zI|(IfaJjU8RFOWX?6&B0Y*k*;v1pqhr>9pyurmDD`-rNM!?tOEE4we;R~A8idk?bt zew22a8E%oNhf3kDC$eoEfLnb3$j((wnKiCj8(hD**D6Eldc18%N|>B!T;ZY+|20SP z*>{MG8XXB|9&2f_2r>ThySkl~TAt#@}@a#70~YES;sQbD*SP|0C@qP06juf$gOy117% z#F1<`Ri@Bf+2bj{9?PZ;K2aJ8){mF0nq)=TQZk8mr|0>YT|$v*U#O}wko+X_PxKz!AVjXPl1t_N<))FW4C~lKPJH#@1Jcrk&<0|tRWl2P{-256h z&dVYB36-%?uc(G4@hgQUiAl`gtAHCL&03-_BEqM zM5qI&CCkr%2f8QWr=5(_FQNKvrP)ayqp{3ku|iMp=* zm?M`O|9tnEi4G=i@Gq3^a?Eor(CTQy`}KW*@;43V8L0Gkqm9YsNqUQYr`6?FBlAUq z`s1!A;<>O#Nx!wfc#`AF{-)W|O%f(uyAVHnHm$<*u{~HI2t7X9Y8r*GBeo;tq(7U{ zVQ+MQ*Y6RSr7GaK;&5Kr-&=7cd`7hlaywUIP=pq6!-NBusz*zcasIX}53shnzewVMe(kX)*fH`6$be-IiLZyuvPaC{@s z>6=(58u86*?`h5jqejhOywi-_h@6tIuK|8LO)v7`t;k8LE>>G`e#({x!B71L#Ub6*m{VIEM)BEP!N@jlszVNAYj2F+ikJJpSF}a++*PbOED9sQU zjE7p1Hftz%mM+{yLDJhdXzwe^g`XP;nJebpBt^Kc+k$+G10vwKR@DF=B=OwrRKSsb&%*Z}<`WQ21+C zKzPW#Mc;#pN2Vg1e2R!UmNZY{&I%vF<{~RZ_U=MSbWS@)uOsw!$CNNdfz&2II?#H z7Lp?@pWBG)q~?PCW+^=XfLz$vMKdLeTz2sNUX9;7GoWeZX(9L=txOa7*b+@ry&MN! z;xJB9j@QR~G8WwYhRWa6)QyOlI3p>XDhAW1boTn*%%jU!bm-dY=i0Ac_}0~~?45+I z&x-ZtD|FCL*}hWRk(}e4yr&@POoLEux_J?c-kxRZi|~$_@_JeS#9txw&cH`*@@FugAMqgl6jM-i@bU7t`Aa26 z%BqT4WE$6lpBEtzJ9>ojQ>-ce>qRCo~eY)AAng|tAjb&|R#z5pd2%_!}SdDo8Od^h400gwJ|4^^E=N}A{DE-lKE#?ol|J{<2= zzQdYjljCnOH&YDREOIK-fwDBJDT166chqg6hRD)HVq$0}NK~9D7oC{gkN5B@? zD0)z#m1ga~wB#Nu`S@{zVRbW3P%Ma)vSS9F6F-Ti&ucN{${N5*8g-SICa`#&$1FOH z5~`mnzwtZuTOj~X(f+*g)!$&%Qgh6r6uu>3+!xAqItYw>fG!JsV?4-% z@Fmx!Ab;25U`l)`BBNM<8r@an z%Zo%3awq(Hu@w@6^JKS2d+yC>W@UwF)K78!TNhJ0*|h^Y-Mx;6r!Kfl)VBHd?}5X( z@Rg}|BX^?oN%KjcUI}b5DwM0RyNLYgRZfJP&8_SV2FY=8811g)0GLqAL@?vm5?+)8 zUPZ?N=(Detma+3hv$m!Q!0PScY?}O*v0+>Ic{1?!@OGm-j+naXo@%QE&b1y|}6?1n%T_PNyDkMo$zex#$Ug3TPlhKIF3(pQ}Mw^Xzd z=_oTtKYLlzF+d{9CmdqCZ|Mk2xTC&|YUu_g0^`ir-(NjKzr{J>L79+++u3>`$Q#uT=mSU1 z5IVMT%8kN=@OmZU6o*)&H`EB@UCiNwcv>onR3yX)+8)bJIe`0S@h5l!7V#&IQb;$^ z7&TZ~n=+P?X!)khLwvP6-s_tY4Npv0`sCdcV2KgCUf5@qS1MYxWY>FO`bl(>>X=d3 zHNwNhG)wQMTXj*du=8NGz>HC^A`{gTwGa3=Trcrjg3(bMnu?kKC5Rt?F!EzU+4**} zuZWQv7k~$uE|Jo+uA@GclC%ZpOw9zi7ziD+AdUZ&x@>8nhn7teN=(J-)sI^wTMl&J z{PrEw^dyCY2()X?Z6*kkORmS%8}h`@95+r5VA}G4NA>E$<#RBDFb|owo|)u$Fw=n$ z$hzO79Lp0V$@JZAh?&~iqzn1_f_fd;AiU?do1wcujDcQnooI`K#k9- zX&)ysPF*^b-qQZWZHbGkC(7uoLQRc{+PrPCMy~}{li6F5e)TQ%;?dWg+mlO^Zwq}s zp8NG$O(uN)Rcya=)5oFli;sZPzTig&eM*3tmi-C}WVeU)K-; z|G&8a3ElEgljf9Q!F?g+p}56${6-KOev3mMS;1%GU{r#mlGEHF+hx2+A z6scTsn+!gy&B2E=FiSVe21COxG9&sd{A?+x1ZN*0YhO{77rnJC`2lB$Tt2oJNi zQ(^9D2r!qwMe@Jp^6DFSC&QB;9W?Z+3R;*C#h~oI-zU@GN0D*S=fHOD1)Lr{yzvDm zO$e3iz1=$21gZWmUU7R$B^3gh%Ba_bCZ&ofk@ytvGLEvH-8s;4*}S7?$iv&ww1yRq zEv0SDCL^?YA8m_mlMFpDtCK|Jx5;4`lgD(B<1#kdjE3$Lne=488Yk>DUrwQAN~0x` z+bxwSE*3vF&=eS;8ru47>krE)QwsyHhFdUY_oi6Y^#{$E4i3$gtVQ9E&%a^2;t2vB zrn3&{C~Asl7m#3vc+s_+FVfoxlr{ah%Oplap6fIsgV{7{T{J6PbpOhx64F!5=BRs@ z=@`q`C@Y%N5I6y?;TgX;VI4<{F;v&UbllM8^)k2 zOofLWMY7{G9>dDk$fh_h9c&?5wD^l7?6=~0Z)oHhZ^PQV788C^#H2UR?J$$X!q=D* z-59#RDli11-4~#dvJ7kLDAJfN&+3%YRqzUZQ?mp;Zp`Z|DE+e6`H1aqht~zk#tsk? zXjVE+03<3;RZNAo_uU<(*HC&M+=>8&id4~98;uKmFai8p#7eQj5ELlC%mcroAcOBU zKA+`?IX~O`vu$nn<|Jk+*b@TYc?`Gy&p)ppQ33M-&`$0{CQI} z`3PH?1@J{ie71FL%@KQ?3ODghOPZ?|T}KcgJv0Fu8l}=1&{UE{ z%+q>vL=-(Tle}(6N{UZ%J7JKXe(6$GvLodInIVqS&TBkMUl200jq))yf?EL$xk^NA zY8iVk;32N2o>A$+~)kn~mB}jD&_Tm7)xy-2tr>FRo?vpbgR8Xaj>~_Y%e-DEZ z$7?x^PUG%?NE+l|MAFt_KTPDa6`v}eaD}+BhQ&W5cecJb^QRYY~ zaMSQa=!#-T{A18~7gKo&@9jj(UGcj89?xmY<>)^7m|vWm;mz3_YZa8*&o;WuLx$V9 zwFvqF(q7preCTKYg~un^^AXv{-g)-Ky4m1(m2xMRtToi{7?-=tOSYZ``;ec=V)V`B zIo2goG?Grlq%bDG&YUtf_|eDnN~c$lcSio2!Yu?t)&K*48(+tVUkLEk7zwLovTf5* zTBP>6kxGZ~Po&vFt+M6wIQtZar-PTg15e+XrtFz32b{VaCeD=78@`-^S`m*D&;8n4 zSt$K>_x?{pC2OTe`!9b3-2~3yJ;+=m_qTWVw`eE=+ilYXtR+-ztwm`B(SxmTmR)~|e(An^w#L0c8Lkg)iB6*X#55GHts9a4*!yum^rmPT$%p1t0bT-Yqi8&u z#4j=5?Z~5PGOVI>GE(eX?s0r-`}QK`4(f;Ok!6f&;vU;1Q@S4cZJzJNM?9I+Yun%) zge_N$_Hi%7zU0;w<8=`^G5_>T3C#)N=GYL$Pd1*q$M=#o`0GjDu|}FOawdNQpI-mH$Pd^aVKF{Td)gh}6^pDgh+-)fG!_6o;ajrQezk-< z>4QT(&WMkJiTWh+^W+pXiLMhM$-|1Kl+;UU9mbLVMDrv11BZQ=Zc*&}m{%7J8flJG zWgWVZX%+YKU6&Q*RDwMJDC#tQSi~0&?N`4mzgfFKi7`-nQShP%W4-=y_dc&dyg!Ue zLkUXYm#f9yZx6YwReU=_{q$3c_mo`bCakvhG~=5F(l5+{&fKY#H%-vk)rsnM_5%Uj zDv(I#T50>?VeI8paIV241I~A*)4coh{J%pVAgnnRTfJ`<-c!+X1N4?Wt9fx;sgu9c zs<#~79oYt1DHvAA-j8RI3g!RzRcKETwkeSoRIgC6E z{Dw$Aggl$Rf&TDM&zvFL>C!K~ejj7X>bu{HBw3P8K6445ZI{<|I7*6!Dew7NruIBM z*IuSPgDwEl-J^^*A@>cH`J;+U>?fHbgsbs9M4^I8>)iLoWen7NX~szcC~qX zVrEmJnDHyjsqbD`&M2_ywR2=NhbuPgyqzGJ(~JE7Sf0CG_9z< znG=y%$JAPLCjCWG?I?_I9Ssg!U##$6Y6e{Cn~?Eujn*{3rDe9|K3-e7Pr)+UGN%o@D7WK-_O}qw&Qd7cUvn1uc83Dpm|fDpK`VHcjmvQ zateOq;49OrU9P}wM{UPA(YV|E84MZiwCD(XP?Xu1>r*k->YPxv7~e?O+{ZW;HYdT? zTu-h&Kh*-W2on4ZIR1&56ur7}{E2sh#TjU>7=^KA)AE|cz-c1W$FJ|HTX*?B3Qc_q zwSyF5Z*||fM+ly33e!5ia2HfH~>rnUDDNyzQ{`Qtw zrjA}!)auLfhtECFLOR0emZ)24=jr33;El}B&=Zx#e?qEbl9moL4R)TK+K3_9<;TIv$r;v|R+(jm%4dRG2S z{oA0=oe=in!OI4v^{59FKST+iX(SR?+k%)ZBA5l$O<;NojE}ezmaC82cAC?|)lamY zsG6sCy55$&*H`B~pp^NpaO2*kM8L1F1t$y#KmOiIN_RPW+w$Yk(6jnYNWq7j48%Em zFr2|lqx}l`Vzd@pt*Ak}(9mK*TUa_pZpt+vkjI_GHql9l?{~zsuw@z1$uBjOcZN{HYmRzJAO&$G&S`2e(_{c7>@^5sH+%=UaPlD$->B)tnyTtz14h zym?<76{5J?XL<6CFVXbX?|H+-=Fet~`U`nQJ)UlUcA3;hj_l63*4t4>Q1NJANK15w z_8blVw*KK}pFun&i4jv-<({dJWsX?cg7BsxV?h>&& zKs9W3xZ*du_!xJ&D49!<-(jDG)9Bj5Mt#3m{9JWetoRT}ex0-RN)LP0HkeZ4;iID#K9F0p8 zl&JX0<`zK#@d(lAqXbmfB(nFBmekXf%rt?v97aTFN?${NP5paIL$?wCqTHF6XoltQ zbUN^?3%;ih-L?!CSWlk{sqeh10v;!>G_OXS?*8q~h;!0k8Bq~_-zbw@|E%=J<>#y} zk~Vm#4mdG3 z(jERu4YI~Q?>q5+zn!ZM`Q*l^DRu-s%xkerfZeBJ{y*&f^;eW{814-#(jkq5scu)?nc?xDYE^S;^9`9&M*<~qUS{N+i#z<|?L_xKML9Jw@NYtwp{ zX7QvOeYtU$UYI3!4w-m$kL^B@i>>F#owK9%Zha2&vPQGWFj+WwXRC-X)4w@h$nlZ^NxQu@+j3g`Bx7FjFB=87dEODvZh3fZ2)Krc!yUEkvN1*b(YXG+-DLCNpC317!ca$?ya zJu-2HM<1dMZU67mf`Hh+n*0cEh3~=Ifb*FO)g~*IA*Wwm5YNz9$ho6%@_avhBJ}tm zfyv;BGTM&wwCzWNqONn@@*na|hj0-eI~HRbZ%)*{pdZ?_`h9ZW{q_JdR9r>Dy~L`U zCZ`M$MAQ?A$xH!@Vf~8MDpmd;bzdPm3LGLJ>1=Zp=Z$g7&0m8?q4bl?$woEmq*{#w zxLCua{-Rl&`<_gVi(j9C9i3_G4H!L3WoRh(kAuN)9unFw<@Q(2J1Bs1-5yh!A=ex? z2*>RhI5?y8h&2@I#}u9(I;cQx_Th zCfw9c)|P1z#@A_jS#jJ1|0rWfapd|xOLAitI(28>2kqm^%L;0LOPPjg8I!kul94aL zA?5$y3w+KD0?rz9;i!hong3I9o=azJ_SzY7g!X@`uK(Y^@xS*z{{QKD#LE9iMEp<4 z4)8dZ%WHoM7d+vvF;~JXa_RejESYA=pW3X4kq5vy?24or&B-fA+#&4-EjwZ-?pi+u zGsyx40#uPO8D#3DGcbcc#;wo;3gi`m_EWq@fau0(`K#mc!R|VtNR(l*rI3E%Y&{Ua zSxZf9<_MTE@H|D@$1NTk`d(VYp3PAIkB#;J@dW@|1+bqCww-vNIGy-hx2yo8l(^PY zx9hCSa*NT6RlopEdnX|JC^HC1M}Gqm8=&i84zJD?0JlRtDtNn_x1uU?l+dbYEDJ-8 zBaqqDoI6D_9!G&X$0Z5v;Q`rfe19|ac6n4_Z8;g&vlGW?UHqy#rfEm~x=Cv3i|;(p zPf1zWK+3fLBc~zN+5b*se81D&uVWm?$~<>KLRwb-bGrbEC(t8g;?}``PLcXb?@_U{ z0lEc|$oiC?o?-9`?ICqzB?R z@GRdLU$!NGCdJzZOaWQ-y_nhUm`e{KKena(E)gytN7lr)FUF6a(N!$LsSOvK0Mh}} z+S|U!K{HE=J8sXaN{)Ohk#qE&@uwJ+#!gJ6yI0gQ*(m;in~33#k8i>8cZ$Ua)lGmb zuuA1TE~Q6t+;(l$2oUqkt%Fcyk`aEtlHQB&2~q<5b~EAzZ8dw&G@nfR}B z@V%i^@Hg)qWL*Klq^uo2Apvrx@gYH`j${yswb=yH!zxDHj6S58=Qft?qQ$-{-;1Q^ z@!tj(PK*fPwaRO>oKg`OMTGyCt#Y#+A1&mKv;_fW)f!vV_7`N^Cp8BT5F@LR4F*#J z4k;w#GGex`(&w`56Ob+KKtLTU;(pV^B)$O%7v8%9&6*~_W(08)nct}de%Hnasro+# zh<`2s%upi)%fmedY2-Q%q`A))0i0O+@~sRE2FY&sVGNw+tlF)Ck6n`BdkMK`@kXdP zekg8AG6Am4HGTb($vr)cF+#c~AmumY26rh2t}8BY`8#F-%kIbd$&**#zIT;8w!Y%C z6x7=pnO_{e{`r#k_em^&P4siw&zxiK5<|=L<_H(B!{o>&@55d}VO_Ntp#08nmZW}h zLHJv!j~M&ClA-Yk+{~5-Rg=yy?xtzX`=<$O5ySwQ4Su~i*Uld??)R>9327Tx@&4OQ z^BIZW;K3L5=mKnKdq6Nv%%QL*^*=y{%Mch^A0|OS)ov_EoKgh@nwo#_{Q`*P@1CP< z*xGrfA;Y9skg>r)QmNZ@h(Ig28+946Z7kM-+^ngmsdKH2cb+38ab8)j0PV|W831x- zMIM47ds{S*Zu~x&afGt;GSEXr^ZLV$_cjBEyJ868_UkyweL^tm0^#fSivkWIOs3zT z7Lp|i2>C97cwS~V9wdY8y7X-u3r=4wXOa=H-s_5I;aMf8V{zUt3}Eb zR0U`5j94IK{#BiFH{KMIkdwZIdm4$N@_vr*EZ!7}-;tn(^s148#bG^COYNqdwdlAi zxD(Mxm5?=3KfBsMp>^f4hcYR%3$^C6=FfEz<$I!!<0f%*x>TevpPR5deN+d$xTl`_ z7l~h%q?jP(MvOqTkSKD_V1s9R^lzrp=U2n3$3f(>;6@Pf2S39Q@Z(=#-!uVqR-W6c z|H!TdiEmhxOBMm66(u1@T?!%$)Fq6Gbp@zz)I_Nv&xow9S6p4Q04Sw}8`~a~fHUi6 z#G=Nx=pV+uI~cFonzs9;NbJZmTDu$^bltHl%i$R7DKlW_b53zRnbbZF z99ZrJqEB4(?IFbGwLegBP;GxBwWB@&d&dG+%8{>+goz$gow$Vtin0<}5lh8Nu_6t` z6-$W;HaRX(Jm}AAtmtY2ihqd69F_RNfwI(55Q)<8OYRz(p=LYYSB5G|UI&#m+vo!n z{8SP|0oOPY>L=AZJ+gjW^rO`XNk1WcmC5=&ymMXfbaTv2@KXd6ErZmsem&BIMj&oD z_u>yu8}<0}ghj@#`NWvSZXz3hyyOIF$4&rWQw^bEr_Q;vj|LE7>)cVB1~{go^t8X!&rT`>1YOh zaxo8pHv>gp81WeDt3@pmp)Os`KvcLd(z&KM7QR^Z==ry?cc#}{H(+U#Cuqx98>G-p5cm9pvwp>pXIg7#Eu!| zFJCXBGxsizcqBajte0D7Fke$)C_jR7k+f5MxhEt)niKuQ^~bufAo6ykv8=q1!nWY3 zyt?GK_LLA2ybbqeBzEkK>okkP)7Ms*OlR)b5(plMR-wDT}v zrsaAHhAFixFw2Sd3GY3RCCI1lO+Xq%UpM(p|2W8c5vhecj%1}xOqzZMh{ff2?$W{9 z#F)4cf1}gzw+UU630TQ($1ar-a+s%%Hl|lbnl3-!HfR3$UbL@UOqCT=6xm|U(+`nu z%MYJ-lYY3;-?yPMTZ-9=(Ph_8UWA;W#!I{EFK)C{gy<`Oq;{>O9nHZroP7 zMB7Z`?Z}>tLhu;=)~6-LI5s5=Yfs;mOBE8ks#wUO1PAFtm&n0t!E_;L^@7&CYS8fcGY?5n9G>|5sh0&qdt2`T&jWJsn%uG;fFtZaw{!&uw0WaeISB=A>W^?> zY@Y@Fv3Pak{f+4;e9I#&VL*QCc8mcJr;G9P?Z|cewOAvdXf~@nwu-&(%sVzhh)h;# z&fc6Z)h$|;ne$nj=3~rUwjH~MZ)?gI*(@Wt0}%z$L>fkh^Z+1!YIoSx=c8%fN6x-+ z#@BRKS1G)`B_EX|te)|DT3_lwe}hmAb3d9wxmCDW4iagkX;5e~Cz2?4J$=)BNZiq` zEYSa_7ND$Ot|9-;kgWD!w4Y1H!e6at@c-Z_s_xwNpL0#7&0ataWTZD{3)e~pXgIB8 zc#{gwgSr&PESK1`(y>;)@{ehyvJ$$5f7HHsOObwlGIGMC6p{D6Kn)hQ4CZ5}p~~ne zik$v5_5N|ui$W$|#&Bt7Tl_r+A|qtfqel@EX(+xA!UgMFs{Jco&)E+o3`06$LkiH?nhwaN9SI~__Xg8rqxX86}vkC62=c9?`(q$ia?1Gzm`@O}Sw z)5m=ehZEw!BC%Q zA>lmZ3ihv`Z~v+v9|Ic15l>3tdc}|tQ9#btU3+c|?N$!}TkGqsEKeX|U=w>b-Suz76-jpATbLIcs;j1~fbTB%9y~HZUDzaFs z2tpby-S~SF^54Y0!4h{1W2yvPTx;*IY!Je#Ak$B$ZNKRJq4z@$Th&4F!O4xl%i-Kw z4Kz7VMk@Y%MO@V;cXk{cO8F(jsvbGsC0XeTQzWP)@%xQwXGP*dNN3QTJ$sr7%%5cC zjC7I~S;`F8P2$Z1ElczJc~O?~4HVs_!r+8czAeV%7u2`MkCv|+crOFq))(Q)nU87Y z8%+5Kw5giCehXJr;`NSHY1qEw<*zAV{tf;%b-k8ov$13y&pufLh&;RmVz zRGI2Qn#H-#kEwt~06s2PcO3!hdqcSYol9gP< zXHIZ?Zg#$8L-w4K`x(bA(A^h0JqN104L}5sbDh2;+W!FDXKl~jo!h@^=_4f7pQ=u> zBi*R1`q#4tb{TH$B`h!AdpYb}^R~sI6kN0^(o0WSgfy#eckUHsWm3_-V<4a+k+XHQ zMO<;k6kp1u64!q~ApYRog}BKtSx6SDKSSIc4g&y$)B+QLb}p+yXD_6hvenG|WK>Z@ zM|z*Shsn|fM&C;W=|^6?&0|8nSkiXVsb$md@$J-Byk%`W4=&eA#AyLZs0V$j;lx*)96T?K>af}BhBB;DV`7o0 z0lQFy?rKVm$2pzBnJs>Wlm1JM_yw*lzVILLpMPw1Dzr+b5S$I1&9rPMSfZmnX zUq12GIVjN_EE3ed(Ik#6?enkBibiuB<}9HYZg*-v{+F|+c9)+XL0fKpKJTNZLHoi6 znysK~4+Lg!{tGo2}xd>7E$sOR%&*4Q0!-2~^|on^uSnu;$W| zdkn34$I1DN2}-zRe@qv=is}@suzu!Um6w&Ka@P#RJtQ2zoryBPW)f&|+PyAIguEN5 z{X_@V&Y>gX{8r31u1!m+%S5WQcG2E2SI;1Dzthht-PvZV6pmm{_?>H-YRkpk+^#ZV z{RrA6IQiz$r@J&$xW+X*96N@4!%Fkwv8nocj(e%MYmvr7_7!l;-j}Sn75fkr^thT676rjY zE=73B@}gJf=c&8lZ!#Mf-2->x9G4GpPSyVLkm>JgGuL=xUxDpP^OiKrhS)!+SrNR0 zarANjUF@95g)n)IM0Ms&;t#M{mIN0U99KuQzWnk2+bwN1=a7VJ`H|9$uV)OH6BQ+& zTe2n{D6$q#JKf#;crv+6aHUb<%KapohCUa0H0Jqg?ce17wb`n=>@9v!{kx%Hu?+;3 z|BO~)2gXL4sixo7{NBmWPEBYBH?5}ece{>F>_oChPKYah3!RVZ| ztSlTBKXM*y?&NbG8zx2>&JZJZl^lp^<%q4ehCV#N zTBhUge;e`s9zvH}Z2idI>Fs)RYI zV}wHEwYvs|Vp%DD#p*cUBkFR#bM>3j!J=ZBYXPQ4GXU1^XRG>wqQ?b~mWpAE6)k@T zQv^!1Fok|uGQA#$TumB9rH1^WVDwm^9KIljC-Xk9$NClS%T%t!q%;2EpGxA!UH;5P z3W4l(Ayhx)twxbv(5DWuF@j`P%-!OVoJA4-NuFLyzMQJB795G89NH~KOHSIfx(|#G zVJF`#{Wo;oqUsH+Z>`7pP&H}&9DXXY!fI#%o=T19Rc)4`0kQN1<8&)+1^DZ3@e+W! zb_{_BMy$$bd;>Z=Y_Gwk5q^71t4Od%E-lBckV}eJXOrYU?vd|#+S>B9OVsgBvPECu zRIcD@e-iL;L`7CX0l~x>pq+U~p!uc(6Vs8ES5LnJhzR!h68H8Aj8c^Ln}ptP#7Jxg z0qcPpaK~JA3{a3wC0r4HwAx z_qShq?lSM-6&gyU;!hnPXs=C9UA27GL|LCg)}2oCJ4ur zkgZz2GxL9!uX0imtfQ(%iekod_?$+30@y#+%5RndNMFiCxoLIIDTFjcfkJhA+t6)9 z(J+>^ep++Ep_Y}_cTv#AyEREBXKHN&-{DKyjw9CT2- z)VJg-US`$hQ4xHI^#Iy+4W3&RYl7NSENjDx30`R=Qw&2DWq^2+RH$X_|1kmiA9F?} zLfS6eF5rs(X)w0|p$zFV6Gp_bO_?NA#QdMeXt78Y>=!9pj{lR$)ql^=@BjT9|4V}W z|D(^tp9^dcP%xSRT92!;N=?K6l0E<6g{@mi+@*+YMe-~^!xvruuL~X*1qmI#lv*EvMI-xf(ieGu>H2Mn})mg$fB<67rG|&gz*3me2PlNWn0a(rL zTjcm?`r+Zk*EP+iMv<43+Vha>8VEA-4%w+S83XWK6RSexH1{QH-Yi-lkjF&WZ-CV_ z<_h4rTJCn`C4|Xa67omolo|XNjJQ<@z612E6_M4`=dOT$(@e}~<-lkM8B~6~ydyq0 z%00}=lVcC`rCWfMq25nGc!d+ttk3gA-e6Q>Yd)zmpaMt6<9Fmh;uy)kl3Dwp$^pDm zwMrr~?#})jSUeoO&)WNk@4YK?%mcKvm4TiY%{{GwKu7|T{e_HMli}}NU3ua!Pwn0# z1{Bes>89Yd0LrgB#ozi6iMw{zzIHx+hy>nsTUY@`FsKzT2Zr^xfpQWBcLUY zWbS4Cy#b7j?Z{SOUc=TYkQWC8QN3<(8{_Jy%vb|1Y!*$xXt4GC0sJZG-mRNrb^X8V zT1*ib}W{|*7 zB)e9G*>{@*9;`H zT~@DSp1o_Am@NmY1%ZL{3xdckV2tW{eBJTbCh~VZu-09h$r!2rXaVSBwa1!w-a(kg zBxHoNhG`za-Mr~-`&r^KkX<=6tDs;s`}zWf+3m(63z#k->3~E3$ny@Z-{0xa&8aQk z{k0Lq1E_ z8H0>~ndBfNHT@Wd#NW>HsP)f4QEz^dY1e+k&A?P>98~M?b=|V&V&}C*A<~BZY!_H{ zpP@xyG(-DO&|B&?g&6AbFe11>$ zD<(MTst0nMEP!14D}ngp$>iBc#+~Qtd1ex!Xe>Ev{v#j|U}_$-Gp+$Dl;9w<5Q_;5 ze&5zk8!uxGdMHj7@blU%`2Jwl#32GoLO32Nn}fr8X|#igkVV%u@7hxw%Rf3U zv34|pXqBXCtH3AEs)z&f^#THWve`gk93B%9xf}TywM9sazyc+a!`ybk``gK+<$@%m z)QTJMHqas(O?dsA&yCj0Gg2inTk_nNJNhs#2Q@hTCh{yIt_Cp2&5FOw%XCR}DX-)t zD`z;wg6VkytF4@2>*k*&Q=FLuFr!gQ`}4K2wRZ!waR=otysOJNmEJI;raN?yo#%S| zuO6G@T!SMXRp8~sw*B)}kBL}Y*T8`&Iz?xSbB893=~?n;Gh_V{ImD$K3-d5HlKNK; z4Er@wQJLETSf*KAS}YmzY-3str0(@#*bp8t>Ej6D`~WLs2h0n{fPvCAB*NLqSss^- zvuP_@WZ7Wt_6zrC(HyA61lsGv1R8&KpNt?g zB}EK~_2wpOW2ZlJGzk3UJT%;^pXUYWqO!Bp0r4! zblJ-WC^5Hs4(7`{<3>{tIAMedFUYwNUThibMTdQ_BgK_gC>=-ViC`ckG=7@*o(W(#rYr$M6CQ38;M=HZX`MQ;f!a80rhcSx z5~~cV{Q+Ojrmqn~`c^Vl-#QbInSINK5|jjQ4vYFL|4`q-KUWOM9YN{q*g{+P;kO{? z>wJ0jNYlgE{h?a~Y)~3>|B=j7frbAN6d;co9L|RULDLL91y4qw;00sT-4>>O8iK@e zP7}7{w8nYowxwQSn1{QB^KS>AYA!PL;bt!CcC{8$)aJSZ|3(mDF9~YR=GD7=e+uUT&114qb zXuDoUoRVsB2GpNyRhy5p6U}1gn(`i3FQT%SXO&}kT@$>Aef_(al#D zb{p$2GRBiU$KQB-OF0l!7)2m4k^w?tjE&rF+-=4*TT z$1%;Gu7SH6W1L8s$ehw#_zUsUPk3ylC6<6%)Z%a0L)0a$6e)Koclf{cuOcNV^QgKjM z6;~aBC>=CE2bGQ-4V%vI^DI^g4)g%_td}6N5ILYGUVRR@CD0H9FwiRm{X2Wbw;>Z2iXl@rF#X>iY8wen@C&v%$;9=TH02=MT;P zIM%jmn!^JovV|p>XPNtO#v(eze~Apb22YHn4$b!x;EEy&A!;Xvn;=55=ye(zHx}Gq<;&;EU?*GLMu%Htr%5|LI+b&)UzPl_HpPRcOm1 zFmnk6t2;Ip;NFaoJOz*ht`4pXrQS#Vn;XFQpTO4t+QZjrx=i9_7#`CJio3=eeZaefm$ z*RO{t;|kjSo}rTx+O+?*CKuchI|H9W44*6ooruH`+G;tImp}>3sxg^wgK`Ya0;^t} zQ=LT>koDoA#9b1Vdl|xl(JouXSoB9u0a%ms96+s^+p$X_nR>MSdAhgursm6dX7FXy_fs#7V zlNrXQ40)*>*J-Zt@}FmMeIU3{yO_XMGEDoq$3o*s^K<4v|4=7?ewptHSWZtY6pj4x zCX6yW=b3xUi$_8Ipo;RX5)zF+v}f5?pC%a7xvRq~h;tC9PbTz8N4u$2M9TWAPIPl< z2rKmYi(tmJ0+fh>KwrevwY<2T#T@}M8x-vew4*mKe& zO1Mh*pUK@aiJyjj^f06H5yTpYC+@Ry$K7p@Yzsif!<3a6yga9`|MV-Je6S1I?rBhB z77RTYup81LAbp=GPEj+uJ4f(Shdu|vJ*zugK!P$TV`iN3Qw^p#P`Tn?X~z3Xq09_>V_lH#Wcm-DjSz#BYr zGi+pI8U@^|uaZF{k-rR#+(a?=S;iE~8{)}u7J@X;2;VTcHEU?XW2ihU&LR(HRUopQ zACkAg!CW#oAI8`KP=ktONq3W!_~#X2m0N-}hc(f?8gc1d=vi$2fJ8msW~$4R0`UT9 zBI2R1((YHI|4AMz5fjWH3|b*V>&KUM8l)V_oDVflmZ2qaC*?cQYfRMdxqsf&fAc{1 zOUsj$5S*WPlRGURC*f|xX&lz$?TaAkurt!19Lp}uf7n{?0joOQr;IkCJI zp~qRE$oD6e)qMT<;i#`Lke>Z@Xt}2aQ%%8s&XcfBzJwhOTR0bVScB(_xPbNd?T3v{3L%q=$6gYS<|j@Or|s5w;Gteqet zG9W+-;x(_J{xR9W9OdRIj{b{>$pUZC)4IT2x&nK3`uNetV}wNlEJ2o}YQBi58a!L@ zZo|-`Hos8zqp8vat!;;$i8jgYvUzLivH!>3XJHnI^et|%sX}kJbR+mt^vr@34J0#B zVJ#t43zO8&prtp*;kHB2$tdask(9Eihv)j`M01e_DzkRQrTd1H&CRIf%rk>txI66k z745r{rm&Y{Jag!3F3A1$Qf4-9 zq#Z0OaZ)zRxzzKaYkcTIFelN^FTYE?K&&!yk8-?I?pQbo&-FPwSEy$w?w0Y6R)<6) zqA#?Zf(WAFTrQe?$b~=pUS(knsoS4_HX1&yR<7_nB>+YmKiryzHnqyl^N=c%}{o^6Qo62 zElON~{t@_RDpeV1|CBkPyJKxYY0kPzNFe88$c0|kb0MMuFYF4 zYJF_%EkZLVi@0ln5du)n#`>@R_~8CHJaju5y?U=px}KH?i{e7Od~H2;?->!U+xg;% zguk)2iA9)1mHqC=I= zBM7u}zngkarfwEB>AWDFxNx_v>~47;wwUh|y)VD62e%Dp1Lfsk%#a@Sg6Pd_qtk7d zjNDJc_oE1OcIN(qy+e63YnsM{W$R2eI-47gta4FhP;$QKRn;<1tmeQwvOYZD^misb zjvyyfOW>!M72i}%4ubxfcgA(tm1LLts-O)`?|`qXCzUB{+w0QnPhHO%Vk|t{i)SL# zB?b@aF1h4$ZJ|#*-4H_E$W1VsRl=l2pejAD`kZ&ZpODZj?s{YRlLhg*<0>xQ`(_ds zh=?jH|LdOAuzjLI@z-@#h8`9ETVDNc4ID>e%%8u`8kij|_DKaOukkD-qJy=&+P}SY zo&S*lrqz5MTFv?Ou(zaNxj|z|KgZSqN4252T{dy9)Rs=hDCVicDh;u!PO6M}$Dy9G zjkIZ)$9e~|s^G^-jyQ^-WxQWpa4!0~geU^@rwoOx<*&UV+wn0v@^}aI1>-vdGPl{q zvB$w1J)1pp@@Cpb>OTjvs-+ND*|Ci%@mxuXfmHu?0jXwv=GFZy^w%erpoL#K4@8Fi^=!u@2Y9W z%b7YmnK|o;xE>c+6Xo-ZhzImdt_EZK&0e^zaTJh21j0;d=KRNQ`)dK(b+c@dtDtCZ zOqIAE`82Pln7#GuG;X;2BB?DQID}i7-n^7py!4Mw#uu+qNIGVILG}A0f?1jUE=l{d z2l%{XWGz{>08dOlegCHz=OQot(tTSf9xK`cP<{krYYJy+9u|>ncm_$w!sr#$_fyXA zJwHw?CJ4lq$fKxEqbRwQn(M96^5|qKdl*dAmmc_K2K&EM3epfCRW3mR9lq;c#VHxo zz0>H)S)AAwf?1S(i}uy#;A3=F(vRP9ZjxKm$Rx=Nc{x9Uo-v=lb0_cBubh;#8VBhv z4Tt7+tV2ze;er>7>)48N{LhXQ>wVtV;~T{AVRprHsWOKvo3hcLEsu$7sIV@|D1o+L zClNC*UCFx`e6QT)%xD;U)gmsq5U`>Bwf1G{gm-3O=Lm`_)J5r+QaF`PorZX5dCcZk zXn(pQ&8xAdLEW6#c%N=a={xD;S3Fid`CCy>UjL@V!ALX9n9Eo6ytn?UZ&kwj1+7;z z^QZ<$86#BxroCQq)KdCw2PBYdjfk~sS=i6dNM@2RK02#Pnh^u9L?k@pjEaNMLW->Z zk!+L`rwQq1{)6TUREC~x=x-Pav&b0|0&R7i(aBqr1kj|EOki7!w)1V?^qVVfG zX%CKr{P2rHS_3zUhyHnbk8X)Lm6ARlc`yf&BQO7{awG7UcVr*L*P?a0-vW~N5LQokDcssR%Rb8LLM)WgWYldrwk0*ZT zXrXg1o0#hiux__3ik3kS>qj4QzV#Z&Rf~irueZLPU#mLbs9_n`eOsGtn+6`--q;&2*7Hx0#yWFArv%b!o2m zk=tOi0S`9VhiotDKc;S9u`Hj1^bUiA3W|iiCC%i?7rIh|-r@y9LJ)_iQ=utpf_!Gi zdu`!Qpl8ClPc(zRAM%#B+xEw5MoTay5>7~`Ql3x-ZV!^pYR*n4lmv-CKNNxH%E-zZ zWAeN>%XDs+ZGHTw2nAsKs$j@Nyfe>avsWBXAuFY!r{J}A#@|_U>LE$S+>imypaFs_ z{l)V5#%58GZLvdlke*HnN_h%_CKzXC3S)JU=bR8d7QVZ^yTujb#@-zV7oRe_|mGm>s~(QBjeQ~Oy~unYCCK`6zr!edfHRIs=BMSm^vb3uC#4!#Mjig$0s#N zmMo%rokP0{Qe7Afl*C4}`MCRTT)4_5AXs%=edx9LcI~lHjxQ5w2pS1K&2}$=^aS_3 zr!V0P@%9%fvi_~|k?NRuU8vp@mLlMYdsE#S!dtXPGiTBn`Y`uxo)C(mckSN|R+3E= z0`Y=ydWTKJ9d}QyVuvJ~Gp%q5qMjKTx|nJfH<%m}g-1H5RvWm3F1@Utb7rZl6ZR!s zFe%iLtm=<~Nm1xDanR(MjcmkAqSMUZC2y_6w&hX~`5_=vEoC;~M3*9$KV>+}RTgBx zWj!6(Ow5-wTcx1EX=JHEtBGu)x#|Aprlixb6pPS+z`mU-mJ z_{`nJ^DA@FLNSZj(=gm?f={B`xIQcCXm}z-&Dih_f3%(m_=yLbl$sWLWDb1QF7dqa zfzC9BZ_l;%pZc{^D)HL=odpw|j!QdkN`m5{D_mKOJB=D1mLFx*G2oI7L>aJr4qd73 zuxzC$Qs%_nkFcd|oI4CrsIYnw!K6=Q*L;9ag|_wp?r)p;;+M`$>3Ag3(QLxgc{bEH z%-%UW8cXe#cDN2+_DilwhLtXuOs-1()JGF76LbqpwA~6x@}-a>>C3iVq1d(jgNd)) zdk3`7l^USU#=C=t=wBUcHFthi`_&|~&?tlVWWG=u=MUY=e1Suq+`^4}8P4wSm>!Mm zhzk|4l{8pnA~y@&L`@1F@|1O!0vm4SxI(x?UK!%8)>q228eTtsU5TI#_|Z(EM&iGotdr|Cl8337aBWJ5(!8*d0wc%0M%!DaMy8d zb%U~AJ_zVl>b#4kdk&wbEIycuz0`LO5B5coZf|pIcHrdfrwzFIt@&jSz`<`cikSS&<|4f5Z5;@=~^7ZLXxX7yrCBGczFh=la=NZ+{? zN7dze;3K08qWJk$=JYmWFmA~SnuhKRO%-RGg)mJQ@1rx3Ajb0`l9*P64f(!3I>fo; zu6I5Wiz&fmJ(SVl44oUcGmqLGUB@vyR4V*t8oSH>Ew)OrPxke&Vm~DfB)p)UV>fF4 z8A<-=-2D=e5X2PzN?@VvZj+&id~74x@v1|3gM`*fC^&ka#j_GyI_any4l#gnK6mJX zllzobq@Hcl)CcqVK^Awh9NVQGC9^dsa3NwYx77K(gjz1vD4p~^4^7P{U5{d*1qh0N zF!zUrHda0U0{{`NC;Ip)TOs(O}K590VILv|ams2ThIJ4Bf;6nhxdKrg8= z(`9NzQ0-8u2)u&`B3AvpbiGb{^N6wZe}Mant$Ff|dp0T{)A!Z=)Wf*KktU8iI`&_C zNr@tgpJyFLEPM)XB$J)9RQbr$XSh_lsNf=>a&QyQAK`syrso?{J{RCG?`)vgMo((a zc#9sab=j2aQ)Jjb-VxIlbhFhM_jyYwU?AeCP1E}+E=zl5Gs+(&6)jt$V-1)(rsxH( zXy-KCgl&X|^xITBh@&Ica^Skr`|AK%F1?157WL?$S8(!Xo3V_ra^gA^yf~>=YrC|@ zI5)-ajE@~sW0XjRfm=P+D2NJHE+r1Jq#~?H2pE?uv7^14AXNDi<&L*TRiCC%7Nl@F z)gHcDHhtCXJj!l+bzsTIK-k<`G%Qvsqni*AGWWj7zChRw)=cRwWpS3*5^)>)DLRTy z>^ly+%eDFmzBDN-?NBw(1H9HIY_O9P1&$+49Cx|X+V2ZIwEaW4N8M_&=>LDXP=a&410Kd!&EV+i=Ape>wdeV@i z$$@51PW#h;)69*r)Flxp)wDm9ck(RNkB!et7rQY6xnI(SM(q-a?y4lK@GIi#^flNx zlu_j6t_hVA6x8g3M95tUC|Z;L)NscTu1+Jpr96((%)n^f%jq{78|3+~UPg~+(wLpE z{Bz>p?zXIJI^%=ZZDFa?pllFLKVs8iy`wrA{sW$xmamf?G(m62Q`UNfpdwqDLqW}CHF^vZCQ|By$1)r%q>%#RK z!4fjqX2jH65bmt&;y(1p_eCN>Hg9KY%_6OjR4JMVG>THrwDz2Lz{pn&a*Rx`olUmvX)8O&qum z4JD?&8ET5XMO@=BXXqNmy)s^{i1yas9zZO1I^-wrN!S-5O0YV# zuYyA2ytDMVVC}cLH~c-!=CJGPH78IoN9m5HwxGntU*^RDUv>|i10eA8T$;<-xmmnF z6@$(IG+i^Ls{V$H?DTUmS#afyET26JA-2)J7Ghp~;1zv1-FtlLdWs?3SNtDvzkwo> z$?QZkm1#xqptzg|H!87Rl_W>n1FpqfW;xp{vbhS(K4n^>=7PCBLD)%5+xQ&tIBCf= zXUakaUPt}1uHQ1o=o`I^f!bV?pkU5NFN#<_<{%+lgXjPOn74nf_@+*vu9W(KM$h1k zoQ8!M6kfc5X*%<@Q+&eQ)Ny+`5G6FcuvvgOfmk9-)ISSRP*{Jwn80w~wwP(6( zaYJbpB-3k+CxXjAE|g9R24zNp5|^|MD{VSrP4ULyVBgcN4mt^Q7{U=II(SyEiCLh^tm%BJEc1PR zc|DDzjH)+PimG}(P9XA`OYEOi;-htWjChnGAB9sF64%MMC8R-;xLXxwnZ1tu3ckZJ z#LUhh5qBo?pP*UXTVfgD<kHgBnig=VYTl!ln3l{6bMa>r#qaIIg2Cnh_Ne!I4jQ;Ub#EIvdCN25^_GmePcVQ1I~Thr_=ntBEQ*pgo=bRmkX;<7Pmda3*RJ2;dJA5C^!|n5 zOvA?A_IELa^(;Fsb0j&*=hiqGtRW!nt7g4??QQV#nO(VJd75!oqna5leKX?KjB2NG zFu^a1s9yz_OU1m@xpxD;a$$a)kyI1X6eOe1HX|?;WNe#GGivrHCjQh4Pk`?l5Km!Fxtp* zI7rP|=&D`2e~e|4mZp9r*_1-EE+M0p*jjwAX~fz_Bv*tX^2HvL&aEfn^PplOf-4uF z)8jx>h@@%k0W@3PBLUX2{!)WRD*--DK9HRts$R_Bk(Sn?z;a~GBBgB+y5d@KM5(qj z_S8zJUJAQxQV=+O#1nhbh3Ny%H|EKCO$7dS-KoK80eUq%0NFE8{?50Mdy&MLVG&^R zmru;6evl{P8=)~MHx}bYDk#Uanni>>=fLyecnSl*tT z&b01@9gWFMYq!9n`afNI+F<7%N?R!*+U-&f_oqukf(rYPxbM#cE5kOAd2*p2NDjNZ zm*r@))$6z>6~h8;O3pty;)UQ*@CJX>`X#=JCZ%WUA1fKjW${toYGPhmJZfVbyH&&O zNEb&vRh{e}jl`U)Ts_~*JpB?IZQ(78v}wtd8fOqGmd1tG**MPP6tP#Gf?`x3hdXqmj@fF6hQ>af+gSy>4*TShe!Snj0M0PebK9n9xXC6ir$EpnBwH~= z0k7fn8I3Zk)|2)iN||j`LA{)u%Zv*un-&hwM434Ma;%BcahMlfMZgRj5AdBBp1vv= zdztO#nWJJ|@aU=X1vDqvwpolF}I!lw8hsV|KM zhE*I&df;w}yF(w2>e;#L-yRXvhj}|V5##e#Wo)<4W7v|olT?g_PNwheYDI6O1`tC~ zL`xYI6xDHJ>+x6f|$m^f^luQhG2|eH}rW0gNLRj!2|bBnDAiZHPQg`14aTFy8aHd`Vq& z|IeSeu}rS2hVGy8mF8OXunEGB*sVDYQg_)s z$2v9_RF3M5RWG16BJ6F%c%7!24K7Ypq3-e8Cix!IrGC_REkA>duApE19)H0ouo)04 zJyAj`qq|}6b2hL0^Flk9-Y5^KpqNl&jd4!N4=TRGOO|Z`eTf5I#C}ZOM`v=^mx_uR zu-U%SrmDAhWIVXfU_kB}z>;H;fg?<|F)CJ$ZtKTb#<>5NA^+ze$5f>B+st^z?Jy2& zb%Ly76~JSBp7oRFzYGEV+em;F4xnrLPD=lLFB{mwe`kyTMPmF9d;b5o@t>FF|IK>H z8>7(&pX*)$^xgMSfWfwAfN2Z=Cs}ir9-wFzDv4C5&&ht5qm%k-2=d5Ga`z# z1SFjg0b|bFOa5K=!QiWdrO+_s?-h%^4iWgp5|U{8@g zRsE-TZq&X;c3A!~#S>7>tg^hk7Z{ClL~fwyJdQpDh;*t_qRVGWR@vaNF>>y#4}gma zz{6V*QY^%D(%~QeQ2zm)X6!Oqgum)~tKjG#YFLd4aWjPpl>N&eVys8P1g0 zf`Bje6ZGNO?71rlZ_ih;jvdWIMBIJ-2qFKx-2F$rb=7e+`tS&No3vl3cHAxx#^0!C>?jl#9JN_N7D)TgF`EDQ>7#0}cJW;@;+aL#qvNLN6cFZaL zM>sdVmloZDnKkI(9)QF){{(Wo4L)V+1QHvd=0W;Eh#3rEoi~$aqT1~q4gu0X`Ur^Y zHPG6v11S38D_}r_YPJT1dJ7B?_8`P#hf^B-d49BeT|f+3u6G?E&}n=Rziz#7W>qiP zXq?viK8ro@{^AzkR&(OZ@h7!rnLBwGbvM8C(DqkFi?A*M8IP4Lf=Z0^J zo(On&WOfEvuV7bT>Uv1}XV5#?uc|XEdX3*e2c-=$-}EMxy=M~`F7v8ldz!sP4=8vS z#G+{tjxEG-cxjpOo~Q*#a|;ol01~Lr-TIM8&SXTcZvNlRXwgJdVVjVBxuyL`#mB=Fx!(w3J&wh$WcNv^o>T$gZw;JCcTPoBRtH0BB(Qz^t%M z;$sWc4am^kGZDf1$=2yOSU9cU-__V9pyQrPl?fvC8)E@R2Wo_Sk@|^05-KzNc|D5B znmX|!Q$OiNQVlScCDuk3ou^q@^TE3YNQ%4%kCaBRp8%^ows_XQB{SY#b@uqqGUTfn z01gZP!9jTeNWI3SK^#MrVs+8JwNwEdZvl;@3tF^Hl&)iql9N}{6WwOCOE<1-y~ z?2LD?`XRPM#ALy&ED&zNd8y$SS7{fHP7cST{gw>=*>~5?oC~103#@12s(;yBJ1(AG z0ZuusJDOz;oa-Kn&NTmcox`}P*X;<`$%9PI_Uc6pM>1=gUs_xmPA3nb7oZaSE**)r zM(7gri*cBnZ8F{{?n}5}#2u$iHMSSx8rpCIOw!5G)6&E9fg$)G=72OySenKjXUa5+ zbZ=h6;*?lr<2`?nTaYgpO)*;pNpS_Z?mJ)d3X{h@(o3g-tg#O4Lc-}bxRoh4z5@a+ znMsz}&{?cmzuDBz*OuJ=Y<;OwUtoZ11^$r0?jMOSx_vv`a|@hvT_aNF=bG!{RxGora8&|AD@~)^HPnDi)uIEfb%tX$22^S`H89$jieht;+*>fYnh=N zeWXT5^aXQ0`VnEiWF`!1^#M}vsMt9ISh7;k_W*TXpt7sHUD|TWhoH4Q$jfL6`>qX!~byhDvgFpx&dB+BBBbHHhz9<>oBp>mA(vh&1J z)Cr3L&l~&qHPF`N<}mQv)t2}}>ig%7(F-q}kEBN;>KrJAam2lY*d9nKl{5{d%Rsuv89;~K+ZMHMAeCy1_c#@>Vw-8C889^XuDSjT1+AH$hOn~4qB||tl+VZ zg(D#b!?G*{cajg1EdSJ+<$Ib@SwfNaVwj2nent4oAufaj@&u*gG{v`_nMO<%8l1?n zm&B=@wMjcig0Eyi(eoU4^$Y3bbyIW4=sobNn;X}@ZpOSu&`X#q^~kz=2pk{*O|Die zQTf_d-JR&yNrm|oqny>)4@XJh4N_v80%zgb*0(oU`~94%r>&QTD#tPeoJ`{}v>D)A z%PZGS9vrqw<87DyXwz>CsA_xBaN+kv$g`b5DFMb*8Nd-_S3FIR^#*V+dX<*$11~>^ z`UN)zQ*2Iov`%zYdpxbAUOD%Zb}!HxUF+v6Ur@DfPQ3Ko-kg86y~1z}R}qpK_Vw$d z*YNh(x5S<_+fHLTy1OFDOygp*Jc445tt(KUXF0VgVAyh7DdB-3uQLuJrZY~Iu-Lj+ z;m?;n2I-c7lEriJQkTV_aWHTKQcn+Iox^0G8Bfg8+CAmpba>3mOyKtjM zA4Y-{3)bpNNO=J8U1u$b(0`I?ET+dxmjLKwB=0ny^HZ+-b(pYZKHIR2REZjj4P&*~O!GnN1YS>H z4A{$Z6_sm;V9CYE%tsTG7ya|?_%929wjVz>CgFPc9>iyM>$E$^S3pHLpaHvNtMymuEp1d zWIXzV4t4Y+ZAZot!)tw-C;3cFa1a*dmxXT>uQM05U|GTFsHvUAUs$b4UbtBogz;>O zNjtAJ^bu>=y)+r|4`Ht6v>W5y5Lc%~Ibl{bbg>0KghscFrxFsWpSm{0&y~zv^nczC zxuk0ssroe14@N_$R2gaRyr|~6$&^SIjyhrH;w*tXhH*HIQ+@i-45}Re^{Gli*F>#24-DcL^&4x+RWtpU0iO7``m1 z$`oF*HqmH3+Z5h-;*9+A85+YeJ~2_$Ln12nAbx-bOktdvI{pZco#Pep4Nd^HGh6ys zrFXPx>qI>6aW*Pp*28c2u7!wxj*798~@2ftvOI<6J??bH5niVeH)>kXSO?DPz;C{hBWf~;rT zdW`%}g!AW*w0}9PvLglGVBBC1VPlVrZD*Wt_=0%tSGSzRoVlExoscQuTu_FR5V>Je zFWf(z+6n7q_Act2RX;&Flzo%~wj{H!I+^9DYvcZEFSsV5V;L?BXt~V)y|?GHj#Hcm z@AFdp!qvI{-GX*I@2ZDaDnJ|bJu!wtyfcY)>ct+T2yUnwRv%%wX)1B1cL{i!26r=R(*tQyKMOAAuQ8nAvH z6WZ^b-Zfo;R8g>F&S=e_p|NYpEF1>=w3yaM3s95Q8B#Vc6ZMo`Zzp8>8Ea1oTKym` z{TygLmlYLdaY^L)qokH7CG~3T3T6XY{lSih<)&-FXcBiGNAzsy*3UHu`=IP2s7C`! zpCkP$daL_a_nMkO7i0S{oSZ3yvFbP_id@gN+#!6fNlyxfRMG95wL-w9%f3@upI0t9DF2_0!{tLj-Na8<1+6Me~@ZR>H=g128`2@+$%&g_GYreh6^e9T~}TW1rGK=fR_lNbK3lk;uxO}KSrT|8gXik;mkOTUmob#>{1l0&!^@8US=A5j+I zz)%e4PkMD}F$CIcP33GAaGB`F(>zJ>pnF9mnK5-AOIZ{24blW!8lz6(xc7t42o%87 zeh}nhfGW3_L6qVjz#-s|@v|&T#y-69A?zB+-7$LEUQdIOer~6$&<`;g8MoCf*Qvzm zL{ZvS8=RYSjoe*FY4wEkP=BbW-^Sj4w!Lde@JP8#GoEP?c7~VJPq9xk&_4X~XR-Mg zJ6ysO6QOxexn&Iu1tNJS#Zz3l1oSy!lUwpZyLwPQe&OmCN#&WJ8dVq5k&yL?z;10y zg0Ult>9n(z$w_T9{?AO^J{vRNVaRmTwxsb(GPqrYMx!HHGII?1uo92khZ_w_SsD%f zaF9YcemvfKYqM77=^#|RQ?uB{qj*Kf!&#e#?wNg zLc=h!-Nq$3Svy3wRyMt-PYtSs&B^XZbCwnVf!c=WjcB>8zi!g~blhL5idSI$$?TPy zMad8s#!T&`&tR?B-C6QfF#^Za1e3__GmT51a;zpcs0X5b5`qh!U;r6MU%%|34sBkJ zRmy_>(aQV&d?iUXh(xGf!c>3atOu6Rt`Gjn(oUd_jNYhBoX{mXt)J2;`v8Wmag_Id zK%mPeijPpdBb`nA=>h42q5)$pBO@+M|{K8VS^5_h=Lr;$X-e{^w`9T!zZ6vJ-bb z+Q_PLZ$VYm<6ZL4%B8;8_;o^HOkj;PyiO24QUm!%0k)%)Jx0AQT6D; z+v^NPQvAAy)F6sUCY{U0VjR%q6P=}kR`lm(9MPBc6_f%;<8zW}g<%m|l_14=DqPG- zT>Bj^pWupHx}KC7Dd>zNxc~cBfdFKba#O;kn*^J)*9Mo9L}*y~fUFQl0jgDrmdX=_ zEAdfMsP=PeVdz!j@>^*9>W|VCND`dM+E~+_v;$=|*3sYVq(_;&UHg*Ds9e#ol z7LkNJX`*&hB`?%DWiv>ZI$gAAKAjho0K(!ZsOU(gL{9=I_{pl{Dn`o9q;kBTu}hrt z^5HGNBelGeIq$YMvYS3#tK~1iIzNbd6uwC2`At2pZ69gi=U5uo@qWo zdPF&gZ~x)@3$7`;@9?*oH}X{BA3EO0;petgK)otB>V3-VV2Vu}U!$8^MA*#Y91C4> z3qKcQs6AN~KS4Vx=Le`J2xgdK+{9lUMJ|#rQm6i_hB>KN#gu3$_ovgZ7K>ZU8Ck#% z*BMGTYtgTxnkU6>{9XWJ(<4*qgr2IKCbe{7>DZnIQVUlmNaM<=;`LcahUQ^)oAMX0 zQ(bL6V;xYI*)=oi``FwpQqxll&giuh`Xo+i$DogufQdKsX%pqsQzA9LTGBTn8y>0Z za^Q$Dxf6}Q98ebWg`Pm;cjXyTid&(+0b;*x=O2JK2;q%5KBw>Cvq98_2~lKZelxlJ zmEaQi+q5W3-U!3JVLlgy-tB+lxv}q%q zXI}xT&;85Owv^>H)Anng4IidlxMm+C4kswl&;IO!pb?qaX{>#KGHQjnLp5DraFb+` zV#IA(wbX^wy(djcFox0QVfqywrYO`i{f%6K$IDp88+Rc;hs2xiI(pe+Rkt z^Y(vCIY~Kl;}K#5%0L_m5ca@Y0(oOEV|3^zef9SWRr=S8i>T%|CHjAEN^!jXeHUba ztuPuI6P9NvQ}dVL-(^(Qw%yHar`@~V@GzStq*t1L`p)E*ZS#9eawo&zA+hMwciNA^ zzfFAI$e!78e`ve*fg}Rr~c1!JQlh=E{8_@U32D z0xcD%Qu|p;JPb^&6D=52K;-H!?ux0%WKv{$njov)I;PdOWY*F3hY52<@&4fT#= z68<~(_fo<<#S}s+2GwTM3!m9Ch!7@SYv-tEZIl5%mfbwukazFjJQUqFY7zLK8vTBY zdw_J9X!PUP?(Kf-Z5yPixN1S@Sv~Z|?*UEahd`f4wavPZEojXbMn*d)eweV&?JZ8w zDvx={oD6?kNdY2HB{JGrFu3rNo0Gd(tK8j(uATsNb?rwB3}{I<`EZFb|8G6T2YoVQ zedO6nZxXuTks(%uU*UG7ttU`Td;Lj4DZREVl2*{pckxY{$nN;7Z>r@K3f+2mSMB9# zj!F1t{d$7?r-RKu@S|`P2z8%Qln@kQVasUw+|M4R(fK8vU9a7J#upx#9G5P*Hrc#Z zxMnpkT6;$1{rL$PKI4Tv- z;^SUrCe~;3X>PeM??FyQ%*}2)wQr?2^0B1-=M6vNZav+dHdVc5Vr@tOo)7X8@e&Su zcU3*p`ycaUCFgp3F<1>u!Cayil{M%u%^M#FLPD3$V$aEMU8bL}EgJ{AH?4F<{DP=( zN~#upb_))v@!WX%nGBkL~0CmP?jHG_zB!Gq&2kR*8S+-+tp=yl+8Q@|=_& za6}M?XQmr75f@g}4PmNHLfI6aT6^m1q<@qcGU?wl@jm~w42)bSP4bbVEXq5EcgvQ3SYSYYO|Rlm3ci&yW_k@4chb}%=S5X9vWNE2Od*y!*bz4Tm3u#a%ROptW$qM zn(>NV0i4}54U@_=ns<4oP!O(CTJE)*lDb7DoP4>LPbtACZyH(fEqI?O7X(r9i1Nb; zXY9o`uzM1PLvc7oNc*gE3+;Vjqe7hVY>f_jeNLmMBsHgdkXNUwEabwuLZ zky9L%!D=}Z>)whk1s=PaO&^~2V_eRod7#V;nogda&6ErXWv?8ht5zb2pr93sIy4w%*Kono|ChHHr_B0xUc7Y~(N zDd8|{!gU&zqs=I`-O_7C8hwcR%~9XP$5-Ija_7jW6!jtlU`&_IF!)bGf#= zv3Ol3q0_Q)zSiv`6K~h;NT=+^40z~GHCC`HJr?_Uq>xPGkk{>VW`}G&e(+I+zBh0- z+XoiZuzLqXSokldwau%VXZs11aztrZHAC_4s8>+$c3w;}I34>C`a6;w9RF*J1V={jN~%!6`sGsAq@`eJovFf%orNY#!@ ziPSNM^jQ{ZZ8?P{3-W!v_USLYva!4hu8p2_Y91bW;X^Qf+hxAOUXJl}xs`4^wD8R1 z?>L|0aqCbOSOh0Vf3##)<0SMsay*q9FDidxtL*dvt>-``P2(&c0eRf+8;d&zq`R(zuX~n&}0Y5%Pk*hFF49#%2m1ZL{gL~|@=G(&!cIun+ z*I=h~ERtC;9k15C5RN0a=SSYd;2H=1XHlGJ>@iZd@PL$V>0*wOx1z;WO3&uDz}kOx zeohQsZ@Md57k^Atoj)@EZot#_Sq>b^{)U|SyEga6wIn4Nap)}a*Zie7Yl#OqO;F2$}FBgKK$K}GS;Qq`g>gUj zQN=neo>yvElm4)P46J??) zY;h_K{pL;%)q-NOJT~W@9$E5@p+AE7%a$EBiKG8w@f*QuHZXUjYQOmX`4fzrOvaKj z5JxREQ^^Q<&;0gNlC&s2xn18npKL$%PL9ZesZPWItTIllq!(83?VfNux=jHFYd+BfY*SX^o zTmFZ)i+eW*9Y8LqdCrt3Z}AFWk96?Qlk`qav2?Gb{9-=b*4zx3*8Q~SIr@~h&yJYmL~46^#OiKVa=yqv5nWM)5iPEIGU!t{_<|N%vRck zHR`|UQBQiUNkw(%t5l`?9QL_4dXhuLu>=RR%I%A+!7=KhFtT%nl(?TwSB<7dml6cB z$8TCBGPmROc%|D_n!N-fj|4LB*#=6+mD=^Pt|s}#kJ*j#vP9q4-PVOCX7Ga0C|L#8 zo;5_4$4$TojKM6+)IRFFpa1*>Xdb$<^Cx%;w2K}z)-6#;y|h!t-U2DP^kO0!quXcX zND275QAzqwaw!y_$G6sDSodQSrHhF3)h3BkZdCRg8Kov_{J8p*@QPZAw#;{RM9HaG z+`5-2+@!x7g-EOH*3294wN#EaHulavVOEn7x}0UF7)Zz0dy7dCRXA?cMpznIt1PCsZX zrYHCHi0qJ{;xIAtwcypcat3UBZ(!ke72;;?iI?U2T}<|*Js-gGjF#x5E|QZ%?$KpT z9>>#(d-{OC3JUp5_~uS;B$5u{-2dF=1S#I;wzd&?JJVG5lO&QuJ9JtObJ7m9 zdWu+r$G1)!(OyE(jT8|)8-Y3|ze_JIT5%|l0P0BO;g?7#*9XF~U#E z8HFkSx>E^Qbq3n0+F3j=;=#I9eX$}!N;y^Wq*H`DT}5sN%G`fMXoB`qIbW#Cg{wDa zIz%fvjn|bDPyBC%_DpZc!UpBIKrXQg-5n!Ib&0`?^YBQ5c*S7~e7!IdLRE7OiU?_D zGG6J`-j@#ht);ig!bj^zJ(WtIDZe^EUMIq5Hy)rOHc{$H7Qk>SR09^{VV4YIyZDNwalpM+re(1k z2tX&;;nO|sO+BucbOU(A{66OOvI3*mc-~L63@Ml1H-uh@bbxA|HDYxvd(-U4Bm1lv zx?gZnN$80!&Z|fyUWkrLPT9@}#!k#*O1N{FpGyoxC`mhs#YC@YtVdhQ7l#<5H8non z4Xp>&n!2LJx!2|w`DiiMkKKAB-2^?uaUbx1G2Q0D6h9r-fbvx^ioAX{!yP4|4sTUn z++!?D!}?O2HvIDB8|Q1Jff9KDmS%dbsK* zjS{*NhTvydSm91+;&zNhEGfmL78h8s_LG79Uq=CHBKox~{aK4yO@kwuSNXevo~lqH zU?zW9%TP4fO$fBomEfOQ|7rwo_uWpOol^zcb!fL0SZtMsQNo566$S#KoH1FI&0p#} z9muCyGhXH0{6G&ZYIJ|D%D@u+rd1l^l1{AB(wq(4@FkHk0FeYgaZP!0-01fDVF$>^ zmMCC+SIDPuV=^sogR=Z{vuR9ZKuzqxGZ;X!8<57JZmQ1Un~=(y)XDQN_opZiJeF`~ zfj*8Quo8xe=Hf$|6AYhvpA%yHxX$N&EK+w6cq3$F>xWK90^-~Hh!4=fDjFP>DbbLa3PLHUHre{l`5iR+6{Vkc3^>{fC|Y*EB57^+kMBQ_3rpzb})?qcm{TAe`G`>p5Onrk#MRwVEa_! z+X43f^A0l7p)i?ES$|^xU)EO`1Z-c}ed1#Hzis=UWssKyo}l91XWIY6`i8$u>H@H+ zKb`jnZfyv)E+W+8gQ!@T0Vv=SASRSdUN)_nMF;M}TxZJRpFA+(igb})81QwA<>8QaNPP}K z_zh#1=SRzHVaoJn(%R8fvT|-wu4*M$Af5i3|qDpnO z{CL0o00q*IDpvpuH7j$Po|-Gm|5 zY5N8|0o!aF!T@~byT2En8@3P7frmi7!xsUySfsP7I7W9d)F z1kZ9Fr}rPl`+>ialL>JP{Q2`2;5hzSl2|7@{iHx(WfFg+4AE^p1i0C&(5r>YV`R+Z zR$z?qPC8_+?e`yGRv&VOfJ_mfXo^RS>W5W>BC3+{F!RBbF-zbV z^Ba*%Kta6p9p!CR^dJyhMFgkz3_AfbbQEFmJOnJr?V)^H9LWzRW{orJ{eeQFFJk9& z?Oj86G%P(+17lbzqc}dj!PRyB7~F$y+(kV~9?Jfi*qe&i;ng#`!<)T6)rUbYpR2B{$Ix*f3dwjmzM!x_Z+1G5*@#e2al%T3UAsO$PF zvTiB=EO!f0W*s&Mu9*nJwFI!?-*4^^N9?mk?MtT)&3Iw30t4r0KlHZklUZjT2c&+zV&~6zuo2`Z1mf* z$Kiy2Nc=4;C|3wZ@2icbpohbnuE(8%P`?s5rJUR-W!G2iHWJ%3b z7y0pCIGKZ<)ic^J(dlo-geaYbmj0T#JA&lln)f)@cG zsbk=+fW7K1Et!j%ujZBj^7>owpXg;CPSPskm~^fFGP`RC0KGuHc9}#P_<^$4*Hdsp zFv&yUnVE}-+uuonUHAImCn>&-k`%#MUx9|eS0JD>PNNGbYG1RP397mQuIR5R9Cjo7 z3k|`(xvz=IqPo#TIH_Z3?mg=LfEua4VunX}lnkJTzFV}-w?zwGBPnp#4!xPaZ&%ck zEvOe6Ww(oJX}IpA{HSu9uWk5uMJE`@IeH*YqowKm%O~0_^;ZI)kAk+OmH;Athpq#G zKK@pH09rDCu1Xwa_Ds}P6bH=QI)04X-k_p-qo&XYeO#dPbIYxCG2ME}s6E8Zw@}tX-4EJzE;Pj*q8G_upQoUk(__u7si9A;SSUZtr3r2w5F= zUXQxn_)N~xC+Eks0H38aejy@R@wos#2z)*?C8V*#l%%Koe$@$ha9e@v*x=qHX|m5H zpo(9-2Xw8+0U(-r>hZ*48Dmz6__zQ99f#4Mx>1g-O}0;^iq5`LFL z+z@YPT>%H~#VcG)NL4?=@{MQ)Yo??lNAPT`Z1S8XU@^kH>}(6VFZ&OBJC&OBwIo;< z=Ih>d{NZ&w5w%yfh`>F=GO3dQk6lw0^lBj)`QZ~ND7$pL=H*e%Y!=ay767K|Dzv1t zEhxK4I~Ri0t#s-HOt31FN`Zh`G}i+_j-Dk78AbAJ5VAX4N4{SI!k(V-t9j%}Pes2K zii#3#667#Cr)H!9C6Vreq|?w@76PwI{e4P`T=68&bI>pem3Xu`0Msr4Hso#XbMVk-i039!xY>8^6S-U-{YUXHMdl_(*H-XS|wHfrqGN!Rtj1vG#-JOeCht@ZOS zD(A>R5MWeir|>|i@^e|d)T2)<9E=r=8{P|F%}?CEN;!b;JT4uDG|TxEFWl5G3lF~E zLughz9&A1z0oUsxk0Mlp=K{sy#eH|C)QDp%Mpj)9v?z@ z+?m{I5yE$VhhOe+>_1+A|R|bR@ zISb5pgB-|z9&%e=s|)4!V6HbR0fUCyx4_lnuNA>5Bcb^7C~tp6>Dm4%(T`{7-g9-f z_z^TI3qUqFr$2?sX|!l*K9VV-@cQA&2#L_)dVi>1x2A` z$vc%K%wydmTD3=N{QDU|o^A1GzcQMFY!QRnvh`7~=!!7sBBERNZL5g6JG{d#LsPWk zV0cq@kKh}!iM|Myrz*uFP%T*BN+=2SP>uW?Q5^GRZt|$ z2OL)m%$Lh*#)%?gZE7S}9g5c5SCand?6#Beltr_8R>ppeUVnJ~uDy?2AXhh+a(-+k zIl~4IlUBkRlq)V|$X<*1&8dSp+yMS#Ue#(wkT%IGyx7JSjM>UG7*BqL`x5XAF6X+t zdq$n$O5MlG-C2M3O6VLW!*O0mvQ1G^$r6si#h}ZfKa0CIuNQ2Vn2e0F35h-9Eqh*Q zJvOx0Phlx7mJp3Uu1W|;>(O3d(HBYhm2QeI5oWE{N4nu{9*D>uh`kWKFc=fuptbb@ zt`B~Km9$hvB3ZWk(Lv<2*bZ7t0uZn{*i<4+f&D{jCADAuQMlo74DB}R0Nb6fVZlEC z{F8ZH&c*UG?0wZ>Rfz({rviQwf^3QsuB%7Jn7Jb)yy+j`?6)1;z*3F`{S63akj3%4hlBwIXNJaVvdYEj%<-v zv2Bp=l6RB_24!-~q-K%O*jr_wwqwNM;SY(}cP(;7q>REZMzjB1DbY?fomY9-vk@oW zGtilSX$Hwe^M)Ou2=Qj0}E+un=HZ3cA7v1v&>F3+6 zBOMugNR~6=v|*f=`Y927Hj5?FHDKT|fshCVURxCA8b#bR^gHA7^^xW*VUNLTe;h)65! zdgps5>-*IxSBN!uRw?MUoGM<}X~bvvsN$bygA1`V*~Z^SgG4h3oANReXp=KQ8v0hk z*0LX2JV1(((bKQU-6~(G$8CAF4q-F+5vi+3g4P;Q?d6{!fq%csMw>kT_IUfPW9vq& zgWI|kwn$09%IrbOjR&05^Ttth5P?3799Atsb`n+^Pb(}ho9Fd~8564@{bC$gZ8wI6 z5pjNYTQr6eY@1jCI?q?u*eLqZopu3xYjXpSIO(KYb;Y~98mzCrMai6ZQg>mv1$VbW zjqd>J9Dyo{=g7IqnbpbjjMZ4EdB@N3bl_{5>|ffQbDrkfq?}1`oV$$ z1sBsPHpAAiN@dj& zms8P}02hv^S2gIo zF!sh{PvTJps0DZ}RfBbzd!=%BN(O~!*Hm)3kT;33f}=oa9PRtzO`*fKC+WP>Qh3^1 znK6H!uS!2xU{S92%R6Dn^-eY6pAp;xSC<;Yzv^>bEmCHm&Po@8c< zWfx{q0m(_TVk$81>REAAG0a6MI*N`(3RqXoWtYk`Y^68XnU%_s@V6(*t)n^&M?0g- zuGCUf2IYjvI|+HO+rCJIRQ#!f6YVpdRlFu3>Vc}l z#HwFeH+ z*xQqJxU!tGsxnbcuJU2tXG$HN7H&L6&h|=8JE%gS+jG^718*#gM zTO^aO#JQESv;ihyI^QMc#!uVr;nmVS)npH6sFP4bB0c|m<-Wy%g-8e^7xG$eFSnC= zbaJcJzCVP1gUu`rRS0=-CWv%OZiu)xCtdF~Z=ov_dS*E&p-$|}u@ne2^Il=opgI|b z&1_bi(arm+a_|j4P1rTEiM%>Ckvzmv^ozI%$?}tw-wZ~4w;?nOifGfor%b^D>-5DC zq4&qZYMSe%X8WT1ZZOc)gy+wj$3e~L`}ea|&MnKb)QE-XVkyRD8YgIVP~mFynOh0+tP$>}3vx!Pv$zM0$VzP!b{!a%dC4TrN$Isy@ga`v}uXQGF!Lc zMZ@a!d8azN_+iSKz^mPS*jK$bHifesQ-*7s+_Q2}N9<-c-`ot!Bt4u{A_eHV`Peg+ zCV|wiCoyqqcDAUoR!?;)lC~v_1ok&lW@PlH^@z#L1?i(<*mZVC;WGmqnm@APB=!EHyxW7F-TZ#AaSwnNTfk6KA9Ou zz!a2&$esF)!|nH_W|?0-<*H|$)lBPxK%PMvqHIAa{3*ikjEZ?GmzA5+6tx$nJ~%oBu7R>pUH_G?D~{vyZ6@SJ>osAVn7GY~rb!qXs~_iZAr6z(P6hWdeO)RAjI zcu`Gotb0mCU58vNhwM^V-V0P7;L_V>rMj@VmHE>(i|UX0;60C#t)A5I)YLpEp0Pqm zeemGZ_p5c3uMih&_`;VA(twiLL10AaU^+@MM z%u=WYz0qb77GoAnsh}z5zogb>CBZ5bG-6?yNOPu6K zgCod>1z75%)1bSq6FSGR7!G|YR^E6LA^dPyU2?jPFRn+!2}HI?)RTh9g-L>^J{mv4 zRGRarxSfU}j)A&~$F}&JRmcDwvd6#mW*;Q8UCLE70)I=ZtL9@Ii4J}<1MNQU{eU8t zoAoRCB3dEEwMfAVw5h(xjE0xvk+7Z4r%a2+e0|}u1Wuxht1$4{+_sImPEmfc_P8o;yzR1)n8#c^n_`nkVA$&KpYd& zQ_5Dnem(P}a7b|6CN@tZ)s{pICJEG|6zsl-PN=;sZ%z)Cezor+ZX&)@OxN&Rd_yU8 z@gTuve1GpsiP>yq*1no#6{W)Zf-5edP!{J_pc-Jom$zAAB%hX16jBHkyjd~7=zk?D zdHHlwvsjQsSIM?!9ivNhP>j~H=xU+NE1h?r7i3#Zs+4QyjUl$GP+8Jy|JspCPlu6U zEx3hXy#<3{LpD$=fjkAf3FneX#l4UH9KYxP+|T=c?9Dq^%$ij*-zz@Xc^-*+$=mbrM7iGc+|mWpg|g`)q~sm9 z(~y$?9~OY+30n$gfN%-V)VEB4BIei7kKd{`4K7h1PS;mh+496YIdreDP1zl*wG;YMeju;{qUTf$bgIc29ep80o5 z9k{b9BuUhod|hBUaCgWxK7?I6scclk(fKan_=X->P=ia=??AW_Rd%SF%WUKou~|%} zpR%3a#*~yvffDSI_DwD3&H!X8Pg#(WFM{MdvjfEu4>6Wph$Mx-UaJT^;z|L~_``ab z(4i%gi+zvZ&0D$e`}6YdV%{20>$eBnXfbNLa0+HYNrck`=HJv%#SwgmY5e+moplWf z_APr~mUBwM(P&3xr9-asSBDfs#j^^xHBhyx{y`Sg_k^+^@I0W}n9IIMHA5=S!$TzQ z_;rB_j*O1^F(WFpadbah6V10c6>P)dI_xy^sc%s`Epe1S$FdbOWqWky5)YM2=WDuD zH9oN=8>s4^+?(7Ao()-kN?9wIC_ct>=2Dwtq>AhGTa1p3SHyVTU|Zy5)@f*AN`cIv z(aA}D zajq`Lt)0>MYX-ryB%N`mQf&DKb1>x$xGM}}i(6#zMRV_|(xFUi#UTG;to!b}{h>CcxN1O4aCvILO@UF5)2bH02mct4Ucsad`33F|=>Wo)h<8HGol#(Zu9 zwZRYG##)mCx_!Y$P0axI`d%r7GJ<}p0$`Yb+S{#I$Fmdd=g-?>U^XS?DWQd@?Y z<@EIcuN+G)kRW{>?9DCpJ~D_t+VhmKvsYyBM@DID3O7W{jl&9@P9}k$7$Ceoj*LO| zWB66Q-r&_Q_cM<*_kqa+iiJKh_iCHHEOX6uM8<~%SO^j`Gq-?{8+Tx=eRpmcuz$=>itE|@;7b6h2 z{pU<0VoH=5uyvHDB_C^a=PMXqn>Bwal)c8!ma(u>YkELL!R6^p$DUcd?tg~p?XT#% zJszz@QQGto34Zjg3kX-sbJ>suOr#fI0opA0oucQN#mU^4%#a>}0uKMryofm(gykAPKd~iOwW&s5Y?#tD(NLU$&Y4}$Y zg98WMlgIFj^faR!3B{L14>t^ntF-vS6d|MUr zK_@y1_!QvGDLX+m$RjB?!=^P7y{KAkim-%T;yt%UW!>9SxMykB%f35`mskIuybl3m z4)^U5vupevH}nzu;~Uoorx^_i z(&di%uynz5D}R~$0ys_tY@IrXmTKz+qdQoBsv1$uiwwHN_K)H{oBtydF@*iK7w3afyQB#yf0daS6V8{1|RfPsaGi%beTH}s0eZ6+;pmC zJKl+aR{CVe&FQc=GYKV1=%pJM{TpGK1P~V=2UhEZn$4Ah>25jkS?W z;LkfTK^QBJT&yU19Bx=)H@LiMr_k?Ox=cL7KA9_7i;X_LTM)!YqiTJS_m*1Gs&V3cEhvcg7za78rfH8cEdpimE;U!431v?M z!YwCOGNacn1V^_@@=`8#qtF3oqI_$IiEu(@*Jot}ifNY^TIrfPc&oU3-c-XM^ZPjn zggK&ww|XdoB}v?dGGpFiwV8%TRj*aYMwJ<35~qRFuCNrN`Y<)w0=#e>q%%y_fR3JSH5QECagFaqz zf`w2s{LC?f`(TXrpa`6`GJ0k6Y_pv{*JN1lbM zl3>D@kfeP0J$*c3Bq}s=#e#SgGA*$G@B@E`h1j_iab>gllL)7z8IAY5kYP9nK?V^? zztfH8tB-@pOp^;Ps{QnK{471Gjl=n1(`1%p4T$tCm>8na_;=xKWN478#n(7soj|%0 z_~t7^$VS~lC)_gVg8<6`1W#>8$&}0a``o26o0JMw9eV}~-8y+})34qM^DT03)^9xA z<3g043E-kn>xq`6b|{3^jHv{DezWoJbII|>-=@$`k$84S^o2DAJTM9F9@4r>(-2j{dm}1w zU1~a0UWCV)^O4fHh$rolW&$PygDYH4zM$#nI}Y_TjTo)0rZDv=V^&|}P;@)2PWo%z zmp2sOn?VPD;cr~u+a{8e-PR(b*G&3St@Dnkju!U3JAa&ZK-^1EJ9 zT?}^YjVz6_6oU@8)kiIpLzA&r=VG2rt*y~0v6R_5lQ<}Neo3GheVu$uz;lE=HJ;sd z_gWpsbckO0)H8Mb93y^nB5j4U{o${`J;X!rjVT=|s_;Q>|t4?V_ZCCdZK;KN27`ag=lUOZn0E{Vxl4o;aedhKL#Q+lHK~q8j0lk zM60M#9TfGkrfu;dTbUldc<2L>}!P)-#~Pnx=A|dd-4Ki^{3hl!aRMvFI|^E zvoPtpX48|p&d1s=@LPjO(v-EUTaKt#8Ua58?#{Ns8Ur3JKwu@GNn^wh*($p-~Oix_4-{j za{-Cez91B;+UT|~)6jtRWL;sa@3kg@&t;z{GxR%%JAsce zK73Pxa`7dTKs+11iLbk+T~R2i>8XXGw2W~&?Ye$vIOjS3!-WeMNru>g!Q#KgwsLl5 z?(xUvoq0}K#HP05cF?Vddb2hWa)@|&OVCRf1r)UzjZ4p3$suB8uOX{b`w@Gb{?Pkq zk`SaY|DRL2yySAIq=%@D^u&>A>CMpE4&bw`P=A>D%MjNO<^T`-6amomp`>_d6x zixH*5GRHAiUGnMm`Cdc$Z`ao2jGPXdwK4j0-ohVfr$^^=hJtbJ3ZjHDlEO5;3NVn+ z65=SRvNbPm(Y<3!9VV|SRuvl%9bhMgGQ>)HaVX4mq$8e`CTJw#kZ$zpy0WR-rr?qN z%zq)T{H5J_eQNWE_WOp(NaT^HSkv@m2nh7Y)cUFHYBMsQw@9ch*B{Ziu06fXF1vLy zj}qLJXnsqh(+zA7Aj}i0r(Zp#iC25G(QjKPH^6 zLkb?6SLyIKItN5T*(U^;?AH>mAfC!*J=6C|{`m6cr^rW%DRDC~#Taf;$k>L-RQQx* ze))YwbvU%$ZF#0k@43VLg(Bl??r0hC?8FpmQm3zNZ(X-)N?dh^`T!nCWt5(q+Ae*U zB;K7N`4ZJ6;&Wk_7q$47MZh`_|Iz0$D(ibKU&|uv!FxHk!0s2{b@lh++^k*l5_v?` zgVv+Zbo9XF(I}hW$vAt*@8uH8cu>N^o`A9&Wvw;`PCk%vZcBxOpqnD&JeYVO*L3>Q zTn30T<4!PID2o^W3M8DVE5^qTdm%_f-?|~}c4&IulLT zlMx`>%s0!UV=DAd5Qc6pXx(+j60JsFM-`1IyDs>yb>ybCD=WCWCn)jH>q ztSC~W0!TwCP!djAaFMf&tzycIBk=6*Wo}(NqH(v{q=!t-#ZN^@4P|hn+BY>7I-pQB z2Rkbci(PR5pi+N@roEeQXp-`2@1`Q{#b!ttJ5{&F#OUD{S55kGYk;;mDPhrEP zd-Xe6WSt%i&co-L_kuVr)D@QwEe_hzo4jX5Wv5)szoj%K%p(*}+nsZJ!3VdYDn2!T ze6#<7sHKG?DXhh8(V;}^Tkj92xG40eu=>Wbv9#ud0LWDi?}V?~zr1cJ7)dZrd2RiL zy)IwX=j6*SEMa+d!bPzrZ0>i>3RyI_ETlMJm=dioDj_dhO^oD4K> z`(OV0e>0E1z=^9RS?uflZ@ULhTlD{nr)>d+|4bDB?V9vvfRRJt4M6bhk-U7f{x*;_ zsCS=VvNwt5TkxkxW9*Aa;hxX`FjluqizrxJKLFvnpiWka^{0%K>d?Oz^^8N!g1q0C2c!v%0^ z_j%+2d=l+|wlno+O?}r0ckktfOK}8=I{-obGUM9@7BhmrbxzBYz zYGkeeLWduU-#*-3bOU;!lNpnKfcW2XN!&9rJkfA@|BDr$?yK#**S~$PT~q0C0K(1Z zB70B*K~MNgC&@Scq4^PUdu(Jrz={IS-GJR@Jz(E`r6d022AKPJ(_T+S-A+Dc02hyB zW)N=ZKEO&<1|a}2NQ%UJ?Pm4jA98It1|Zi~(}@2O4h0;qcYq4Em_eX#` z4aD7YxmfjUpv@b7{!zkbZeQy^Kw-iNBn+S1^<*;25!^UH&$Kd%no4UnPQ@7bv_FaX zqzsKy34CN21|I-D(qrk+H&u)hmy*!_nWB5ocHnY$15;Y1Mo6pYZS9>}fyZesG0d5N zz_=nq5DA&XAEz6QACEH{@|Si1l`8J`FC?aK2+(rqq6#kuSi2r^LKi@BlS-{kD_~#m zQBuzXNY3h$zKZ-EAYA#?zV`d4-{MT6(41`4p$yBtOv@qg9IjSHMZZPx7p_ZRJc?lc zf{#9XQ~~W22NWH97$5Z>eLDx8lWmh7~qb0rK-1^P1vzyjG2=M4=X5FQ;$TG1de{K9%*eNk6jP^lu zWp@)0jXYhEF=Rx=xym&6Hfaa^=_l??98LOmN=@ZZy6TVekG(SXfO)Lpr{9+UQjGZL z0>OL{zwnA@T2Vj#roi^;Bg^*GmkJYs%gW$mP1Vq`f%zN*%5z;6PIbOoD+tZyw@dVS ze<=-4ZzJ(o?>GLIP%w;SNagabluZqrU?cSoIZ#+R+ zf5e%!(wzp;hF=%L37}fb~ZZbg{s9zpAkD-IuK=V2Uzu zf%^#i@79I@=T|F2QW)eeoj*xv*-;$+0KDw7x$9^2j5QO7@(h3IDCf(+u}pBVxxB#l z$IfRvfT&5;;t5HWB+-pUw^=Udfd-l6p5R54S#9=PMkhqg1}vQ%M5FPOxr^3T3tZ0mcz~dmvlXc{*6Mpc+4~;%a;++i7UH%ZY*FI(O+j zU#Ro?cZ0^O#TTy`20Um)!u_b*R3(Ip!xT(g-OMItKpd_l3p=+Ky`L*I-10A7S)RF8^Xo9@9k8>xk z)#7P+-2)YducAm8_=Y>ch?*%oQB`GY5FYL^v`u{e>>!~D)0qfyJ;pzIdhk2~x3!<` zK$>MYp=T#KI_Nd7O0(_=7=mieT71yFeFrQpLgFRUMcitHIXJL0#OIa{eeZe`Z{ zoJZBi$^d*zSD?}~ClzX+k3s7{rKEVeKqgb-xcdNn%QpFZkExGY!g_TnSA=^4P(gDa z9-&bkq1S;Yc{^9xB!Bn|Fp2zCOkY8N-xOfavJpKGsew(S_;;nA1xDN2cEIG zyQYTe2k)YNc*e>sQiV?5KF_K{DnatJKt=RJ0>Z?8Xa;drBU zCTSvn^!SF?T z_0IXD0?oG1$a_r$#@FznrH+LcwKEG{rO`5RH9)Ff|_ zyr|HH@1SMr2VnX~yefMZvTcp{fZp*^lq}G=xMp>HYQoNO3rq*_3+sE_$eZNKY7RLJ z>oW*ZV_7C54+o4)Tz-BLrZmG6#eh?4ri%w%LM*o-m!~#pJY$5qr|6nLrIX6)kItFB zVuF|Ze!rC6@SS1aIw0igbYs6EBUZVee{Rk8PYbz27^Hjp1vL95mK-zQ(GA}bR^FMB&2K$ z37=(K6PDqndr>;rzg-fA!v9vQGGY!!xCo+Vm&C7pHQU$7I%vaa7`3{1Q~S<<0b#%SnUrGQ8j45^4_A zUK6K?x#MXR)jH`lwbjxtS{E<^mKr@wt_F#l`cz#f7Kvjngu>>Zih_EIQ@DRb_F|W= zT5~mVPv?mKX%e`56JWY!YYu%HsGc~aiAWk!0nv*O98nfID74|5%TVLFEMI+V2>ki- zqHE3|^2z#`$7s?w&OK9|#=m{3yvF$4kfnhLy%glWh*QGY$zC8-zL?{a$2Vcj{b_#W zn^g*O9Z@_5l@Ybt^q#jibZ#a|-&^VkvEL*W;e3Yo2XecvCb;fq4Cx|Vf07d;I})_kUQ*l+NPoGasY8RRxM zT|Li<;}VBN=QQfO^kX+*Qab+UtkPF8H=pqW ze;jmcw}&gv;t2n}1(xjNB8`P;`*mLj7GbzMKLOe#ATVA8Us|+d9DLNerL~l2%ng6g z;~|yfP9zv%W>Rqd_$T7|r9JaDnTSsFduYv~zcDJ?*V*+DgQFEl8(k866IJ$4q4cg^ zy(Pq$NA0||>4fu~RJZ@c7GM7-_XkloD&V0}hoFBWp7?!SsCPFuwWDYLTf#c)pyea( z55wwrhv<$#dRBXE0^*PUqKX#kUtaQhAuHu9g!!TpP3>vA|EM?x*Ip$ev?H zZb!%3_qTHAcKx~uxb4+=wf!CaTr(ce+lQ)^n)d5?i0lmizV7i@kgVpmG1--suhg6r zhz0+dMMg>Orxw6X>>V&XHbDBK{5R-KyCZc0h}a9ZS5GU1nWcGIR3nCR$Ay;0c20Gf zNbL#`d)P(>ddZnD*dgl4y@VA6vRugo8E_D+LnQi`UNFkEoGvmMLl<SzyLnzzvufZA-}6$!5&vmtNY!jKTI`16sW6bts0`m7J>q0WP~I zRf)kR!5@Y)qb5V?Q@CqAu&NM$26BeY>BLv%7j>y`UKlw~K2^av$LlWm(kl#fpG<0P zv315P`hV>>AI%RQDNSpY`nTaN?4L_~xA-mjWGCV58?ypw{^I`2(~u-d#?`Q2o@@Ir zw%jFZR-fJtys#d-v>vdX$g8W~B3RIsM*SQ~>AY$GDPM=1#oQl6rC6`8(7W}1j)2iF zB0_I|WhN1ZERl``W`;Pqw(>u;Ap*`!VND9hxwMdK|3~5QNBMZ8@A-x~e~D5#Xo2an z0A6!t^w@O*Ze*P>lubv=`-0Mcyc~`Kj{NTW$`mo%kz{orb)?6p18ivVrMQ$4$(|g# z-pcJ9)9=US%Ep1L&pxPJWX?TI2M8#3{@M;saxaTr49kB*43aJGVJm9Z6XCC}RM%xu zRdyUbgQ{gsp5AF11Z0Y(#3W4e^i>Y9#7k(L#E2#);!%d%;mWr-*KbMuYRF5IrxUVT zh@?wPFgMPh+~QD4ZXK`c_0pO-k%Ke$YG7a_x7r>Hlndn4cCyYf_3>r~a}@|1 zB@i`MF&ux6ankA_t# zb^nG(5J1(;wD?*!s~KLY&cEGdIz`=s1So0QF`9PlMJmTo;cOsF0;>xpLE|MCy zo)(xDU!6=!fAsqig3-fun-|DFp|*viBiwTHyL*xwkW49beYEH3VT_fvESd}<6=qDC zK$9ZEuFwo$(QEqq%8TX9{`$gbk=q>rg(Q^X67s# z@crb7rnH_DD2mtK68E3z(@|)VAHe*}2R&AcR8qHn*+vED@s4(8C)jd*U=w zkD2(BO{I;j%0jd0Tl^3)@x0eZPI5sL_qv5^ry3ie9Gkch@}2EwSER`Kh0oY80$~lI zU+weghRUA#7c@KFK;L|^{>6kwPvn~yV6(U_IlC8koo=qQXWed&{^}LsDbKyT%`^$V zGqC*q?3`rja`p{CF3lRY=>-uNHC=N{M(f^y92a|jpg(tg z964nb>?nw~>V>onw3_LT=$yeAOe{#%Qn}5fada*py-VVT$S;@98BwSX5R>c z(Y*JQZPn^>M9qK6l*CsiWV53@KDc}wEx0ylznAm>3^wJT zqiUd763S~H^(VXFcfO$%!>V;x$~}3h=>DUI5&%33)*4%*#Tc=z;mkdfRS^9+YLu`P zg~e0yZ$ixQ2oQ(}KO8B+vjE6g8ohgU8@7NNn#WF2(0zwT*U81jvWJ!y%+(rO_}8BY z9O31ub%}vILhVK2V~0mY{-z$C=O#pux#V7Zunw#(J)Z&6&deK%OIHEig!iaIp9%b;*jBX>_ws z#VRGIPWA|l3W(Sf`}@>c)2b=a74F8UG58hgKKA;WC#qgki8AI>VD^kGO)d=v2IIgq z)_D+OBGxO^W}-i_O)|SvBRp{8jx;B`->VHo#-ODs$MI6lS;(%wH7d=e%FTdp`)iiL zkrNY^$71Z;oj&HnsC(`eUQJqTmEvVS!z;ZZF~9S}Ro#mUNE=dN`Ou%&`zHG324q9C z)b!Wr1oTFXx~SzUzPJ<5jn1VW=QE971$aFJ`%9~HDdWU`5F$re|D{l+7fts9D1YJx zna%(v4ck~}kvKc)D7_@bO~5L8`S)>z6>epe3%df0Le>L;GR2jd2}Qdc_;c&5uA0Gy zOgMgohZZp8Sthdnhk@{fvXtF+lvlB8!D>B}Eury~z3Td+Q17xZfhFYcJy8|nG9ix` zJYk?zG5$`DCZ1HNaJiDs`3Wyy6T25X*ZdrnQ(9F+AmAFhO;}ktyAhjb-v81IRc1~~ z@y;yITHVop_?ot759%baAMxBy*{i^8Ea;pBm)>0z@3g;= zwD%+Vucl`dC<}edGQE!jkVliEDmaWdT;m-1mA8pj3nGW|4B+b*YNb+x%JSlFgNpFG zcA}7}GCUYfj&(L?Mv|a`!5W5m+FR&xd~DFGqSwu$H~W>pM0XhwOugBm52fAi`ys}L zOG?p0J8PmBsoEqwRu2|ZU&MyK(_cTm%NV_HJuMbl92}wfb0T%##h%9f_-Sd7Jq9Ad zDd(1H#mBPT1+K>OdlfmyFLxJfM^AI}oq-Xxzm%iET>QRG=@3WCQ&Gw@Yqs97rO%Y83LItr=Jy8zr_yr8!-Jdhn2UpO~Jj1YZ+x^VK#3&eE2=P&}K9a8n>1&?Z@vpbxtV z++U-#v|vYDr^(_hFV>(XOL;xf19qxvvYar6a6+k1Vy|#g$SPiyXO{lHlBYLKo&=E| zqHGh~W4$T=uHZaxTIQ#DQ>V%jr&_xtJ++egeeGN`;BK`fpt{fwSly`%HF99GjgO^o z@y+Ew@*0^Uj^VomRKE2GD?kzarmy0}qrUsMSkMW6&|o`(SKv@KEt6Ja3p3_8fr>8a zioD|pFhaets#cp1c$(HToZ4{G&PRxzDlr^gU+ zfOw+Cu3y2LzWAr>FVi8&W`G*QxKgjo)H{1Ss~Y~V3Cc)>n(^+u-wmwsDGZq9U)gQk zW+xs|74Bz9bmk_`SG=igOm0GOqWAG{=6Eq_U!EUE8GfuH;*g&|T2v0#ou55(+Cn)G zG55(26FCYE+j|asZ{|%DKtZ4I(Sr59^SYrQ-6~7~52gx*@3zxZ4b691<7P0NST84| z*Qy@*Dc&27(;{XO@KIl~9e%^`-n~Ca42Yq?Qxpsuy@Ctt6z(22;TC^j?DK-1?^aes zH@3cOpW~>u$a~SD_gtwe(z+M80@q7kbQG!rC63XU4xIU__F_eyfMP%@z%)LY(;+PH z!%>MRJ@cjuqw}=~7MFwu+J54}ct%LvN+YVJLb~RDLR4OqvPLs!Pyc-iB?E_zKwn+^ z>i+9S28L0WG!)9!HHwb#jI%nPXP0$=IDiU53y&D(Ke}(qVZr5M#&ramtzJB7Pn;wL zX;G3f^_VfQ)8Q(((Iku7plYc#KN$Q=xad*OiN8MDnMy|qX=sQ*^4A2E2BO>#Kfo<0Y=UT zNGG|grU+EfTQe;D&%WzFFBJfdf#A$Ip1#%pTgQ_oF?fh%924k<{Oc}GAGJkjKF^l^ z>(<9sDO|zhzqLvK^A|}#8Kqo_=Zx)t+kG@_n(AL9O@Q43ZR;dJ*JTf^E~)x|T#$dZ zKDJ63Oa(Chx8s^(1UCDk=_L`M{KsAU&-VgO`@i<|fBwt=FHW0G0>#M8Ey6V5?Aywt z8U-ND(E53l6ZyZ%%-9M6*U|R;^5EB?%nx9W-;31TGiB+~Ku1&jmjEK|)Bw0wi})Qt z18xOq;OO|*J@$$oH9%Z|@Xiyk3e?J*zy9!_kKZS31&a|VmLkg&)?Yxs(wjBkHPjTa z-=lf58N*t*J0WqR{?Hvk@?vQH-M0Oy-&YmZ@n4RBqJY<Lns;!TFp%e{Zx-tMmt zcJP$~)b-GeF~(}lPJDCw-p^6cq3o*6^k9@JvP030DC*X+SzRdi}%pcshy1N z=|5l)qmU?*Jn1`rhuAHO`%8_`@cEy)YH2*WsXD+hN#T>l!J5XiK&g2yT~(hUDbS5REy0~~!xX;)Yx|A?v{EvOu;Srr-Zc%CRn=<2g zTg87Ls^9lK+mxQLi`;Kq5-*mfFOHN^=FdtL-6oT^RigIN|C`G#Pt#35Dm39c?Q=pO z90*-$#>jKoS_AwT*OvoCiv&*2p=F}S^pqzBcjf5;pL*rW1bkyYpqUH$ox^BF>kJc+ zZekaF%6Y0)QQMVoO`2`rK3G-=HRb?nJhumFELvFn=rETsQjda6r`{+y@O|p*fj1*> zk}O)OVZ=&!ovMo(X|0(9`<;tzVKWZ$1Q%Wz0%KZnqR(J&3`WvajQc)UACQVJlr7|| z2{0C^KiT5i8^iv_GdOQ8WkNqzJnIy_qwWAlH^XL)`^skHiI{)4#cQlu*Xn9bueu2+ z-{f*KAZRFGJzasyVSD|`n2IyMfzawJaC+YbzABpf z*2TI(RVt6Lvvg^rlS~mQR72(M{&w=-m@d4j{qNwlU0{xefo@i5mbwt)oAO=n>G=Ce zUcZ>X@H3<1M#l7_vq|F|8nUyM>)W0LQxTsj6^jhh-eS?iCfr7O_D0^X!9{;X8%OpA zjSbPGZdu~MpMMyK&RX2fyjK4jf+x*sFbm)Xz1TN9Yv(6Yb7_SJNuTDSSV@SSMW9=| zf=+72qcwtyKqagj7^pm&r~6@7p{zCpjjR~{^6-{bP4gbM)pj>a4&KOh^D z57>Tc?97&6#+Fozda6a6(vKbeHMT(jY;!b8<_rvJpCoh3zi;IqXf^VkXgPbuz}%`@ z@#e5kuk}w$-LC-M+uqY2xrfF<`Y7@@WF_8HmN&H5$kdrPXq}q9Q!!e+&om~>UeBy3 zLPGS|OS)WebJEPLXzQDiBTGh`uvC?t!Urtbu!LAdGRWFpR~b>k1eW_QDgh>flWG%x zS)wFcPTY4{ujL=Y#n`;RPOpts5n%Wa*-d+U?`G%q;0=Zd+V1VGPpT=d&?`~BK~lUl zDnHMp^6-fcIF)PrW2Md~$8JgCz}uvK{nI2q--U4B&{4L83>2}muj|C-x5Zvun_S#t zx%wq#o!?t7wx^r|@!Z-57tLciKNhIjWHg7W57||klsED*)83owl3-iLqcEC8;nVXD zwAxui!ASDm4o>f(aSCn*<@MWz7v(z{DO~h1eg1HLx&G4Gr#=P#%+a)sNUSx^#1q7U ziR#SfnO&mc>hnCdJ3sT6G|;s70xC{(;|4jr8tjdS4kkE2b{x!8LuXPa%Bfg-qBJ1T#pNaQHZ(cU8 zj=kPkvoJgkmOksD-aqkUH02tIfBIVWLwJfdMvDed&5X8{OuPnmhTNXU;`PpJk14e% zo-|GhC6x@ahWS5re9>x(uX$|84n#t+Zed|u5qY8qr>|qBj5J?=6W?TNyf*|=M=fs# zJ@(L#v{O8T~Y)rj4}4uc5etXwU6+p)UTvYK%R#=uDLMxJy@=H-VPs%%}&xhc)& z16;FDc0lk-L)8>w#>~L9e;AtT=UO`&Wpx6N(pC%m7(>N-Tn>TwWSrPtTYzq2_T19S znHEB^oBDB!KToR0n`gJ#g(rcZ8)6ohQQO#Xku}rLYq$w$KTWN5(J=XhoJEt~R;1c+ zLvVMY*hVLTJKlTq`v5CqVNWL}t6KMW85sL>h_E-Af(`v!5;-#zPE$|IXofNrYZDHp zHqV!DzKP6&DVcF3<0reUiVc4>4&-Adklah6p?b1a`mVp>sXSc#!?RKX6_e+B1&hwi z*HU!Hj)7U$PNj9~S>_^Sp=u{w)D#Q4N(}nt(%UbBygWcr75a5GV%_hyXe9LEUk=@< zyf8iCA6=d7tGdAJJ=_ZL?+aeQj9%ncV-$QIN0(%LeAS2}VhHio@qo^htTSIt3vn0j z<$PI?5zEG`HUE6m22wa|82X74g@hTp3yhnflc}fACC5*S-N``ceD5xL<()QNu7Jamo3v&IRxy*LLd8k0@d8uh(ll6kz!jG zv47a!SRh_fo!2E<$uYcXkq%IXsvQP11ndoE&Re#7%_YJfiW>D9aI1d>lNDI(@iLdH z^r`Vz``6r0@1747mkZIiQWr+$P|HgMA4dLx23Gq3uGo3Fgd;*Z*~Y_?3)Pyoay{;& z{pod-4XKox=Ia*L-_^KU#lkwuijD027waIRF$2}S>@gZ#NyLb@qGp}R9R5M2CmEPw z)QeC3;uoeoJNIgeA#L+s8@9U{>N?Z}D&M_cX1RBDjbu3$Rn2UAzc4LHE>>WX-_<)v zl#KXuk}4QeeTdSHQx5fXO{30m!u@i`Q@Jq&<>3$wWU=n~-JeU)`L`Ob!^P17sm}lK zQ6bsVCzDAaIqI!-gsX;BO^R-{X6!dOCLS~eJueYdpE|zJ!eF}Bgo?p0QaqyJGT&;!q6TA2XA?5m(azusx5GpsSAIYd#yrm85-=c@GEdch z-|gMN#7@jHmO3Bqu5TVNcr^azIdPzvK&2K`?c&#}+$1+e@qT#A&CK;3)FHL@pvQIv z>`X!ue?%IyU+I2skZ2687wCn5q)Rq zLc7rf7zXPJhL*)HffF6{Gk{K(N%}4lrKisxs@AsH4X70};j$^$6i@P0J7v+d^ZZ-! z8Gqd{34eGEnWHJlZP#T48U9B+b~VSUy^DLu(uk}gy|_l+fDg{RiXHW?aUQ0<@psQ_ zkD+A9ri@5ry<=X*VdAa+w>fRVk|B>={bgM0P!&e)QL$)%xtIL#TjDgTawu;AHNnmp z|9P%%RiefT2dQT9W+xDQ`k6!9{}k7Zg&?zHTc1M$5q2KQnC3r6BeKp2_uT>`X@pUp zw{x8upyq#u3!t*v6@5ymWP-}qBGqMkYC z;V}fxODv%yvt9&xLt*y*}ts*6E9FF}0@Sc7m zi-Pl%7D^sULq@@pMu&G_u#zh9^jH-k0XkJ| zn~-XK1^?i#dzVP`o2_9f8km(eKdbF*sg>W8UPg<8DJ8 zJFt^HoSCf6rl7hcf!WZvwT4eAAMH)K=*$0>Wmt!XBa+|b8BBO-vvy)R`7fZRxiwvt z<@_Ep1ubE(Qey}<4^40g!YejZQ<0dx=zq*!!5wKaNUF%8@iPIK>rKdVa&E`kBToy| znV7wzW%9+eQ{PZ;3}FivSVkKc$MINk-S$8VFY(=~QmY(aYQ!F<>Ve{8kxo{0{pc;C zw9}xoK2tkD+L8@J>+74D=Qu84@srR~ehz0wuO_@!kKoqa{iFi>mn4*o2*_@p2vQL! z{(Fv@?Flfy>enFEz<+r$kW5-=134=BtgABF|FZonKpgY!F|u9#x1{R7lGYGeAc3~g z?x(l>uRr~_oHRs52_T-!lHP5R{(BnxBm&6KWpSdy!T-LUg&M$))1*REU;XP9LLYS2qn6b z(IAwr0U?V;nUs}L(p|4)L&@Sh_%Zko{K#K`*kn**kZdM#bu+jI<;Ugo47Z*^PfwSJ zp2d6moOAm0I_G@epK~w(K%W$jKCCa`3wRJs)2USIsTAy~K2WJtGMQ|@-+u(q?RIOm znqIFbNs^){u>=q;pU*cMjaZh|>2%_=#Ma<+It_-BoG+3a?^@px=B8cinCa=AnZS*_OBJDKA+f*|~UKS2-} zh6!8ddH!;_bUK~YYUTBM8HRbi57Oy0Lg;q8JWRAgNTU(P$Eh#J_$x-%tMw_%DE8nReV5=4z2Y00000NkvXXu0mjf_BjsT literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/b.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/b.png new file mode 100644 index 0000000000000000000000000000000000000000..cc75c7d20cc48c337e251efffd52093c306f721b GIT binary patch literal 617 zcmV-v0+#)WP)1${ibmA%lZI5fS*hIY+=9O7YYTF$wUyu?RG;55d?wbxG0Kx zz20WCktCVPWbAhP8v;BR!!YCV7{jpTayg&RDT*qW%ZtULR;wX|TCJAD;mBsQ@KOlg zNvqW=h9t?u;h^|RrP6M<0iakcmdj;z0HIKb=Xu4mEE|i({)Tv&hHn*&S$zP*Fcd{0goeXmDwR^92EkzPcswdzk|ZVXG)-G97G*yEzx^3l z6ve?{a5|l2Sssl>_xs&qvE*{Od_KQkuW6b#7z`MORjbv@M-XVelzgRnR&w)!%xZvKdcwvKLjX>@?pg=j7JUl5479u%H?t}7z6;C zrU4)tjdr_TP17*OsZ?q^Z7g;j{|_i;jr0k)9KVA03p=x z_a#YU80PnEwOTC{3Z+uXA|Rbk4+aB_aVQiz91fq>6pKXwumX@IDU-=yjAdD-DC)sJ zECO=5+;X|Z7>lA$U0qX95U<`1PG22;#{Azu&*zZq1mYsQrHbWI!MgxB()Oh%C#`A9g&?PbL!p z;5g0=$8oJzizG>}*SlCO?o~D#4TfPX zj_X7sQLEL?=d;V@G7RHGR@e1>K93N(Ua#LifvL@A1NLMftM#?e+0`0sei!J08-4 UmN$%iEdT%j07*qoM6N<$g6iS~BLDyZ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/d.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/d.png new file mode 100644 index 0000000000000000000000000000000000000000..66e23a897c4a97b2da18e9c2db42d91b51ec0ce3 GIT binary patch literal 525 zcmV+o0`mQdP)@5XNWMM6nYk z(MD{vMJ#*+o4km%58x{ZfmC(@A%(Hh&RRrR|5O$d<6IH(O;R-hh7q;O+$&W0bn!ZQB+_@d*ODX}Mgc(`ia+G#bt2a*`y4 z!(jj@6bjBRS(bafo@H71li-`!d_HeBo0oMrrKqY30E(heN(Y01cfe+|$!4>T=Q!>* zG?`3NsT3ksDiuXhJOUVFk|enT5V2OPjYcCxlx11dH2(p*uD4n(L_8c0p-{+w03u%V zw%cvPFkF-T>K@p(?U-t{s_VM{7cCNr?Du;BD3{BoY5EUHBoe37$?-hT`ww7@34#Cs zi^U?7$@mZ0ZnusxO*5a*KQSsEIYpLbiK6KEKp=20iT4hM!(qK%2LM%78;!G^ziJR#&Zq-h$@^MWA6VzJq577PZxbYK`pr_;F(yWR14j1P#sKVEOZ-v@jEvb#&?OK31t P00000NkvXXu0mjf6gAv^goX7~m$~GA8E(!Yh;t6Fln-94H{d@2;4gZXWtpb=ohh;`i=z0jg}(4Xxm+HP z$LsYv7K;gjaJgIz!_YL1F=m?PZnpyfMNvYbP#_SP&1R3M@MkI(izu91h>Nvf1qMcD6lWg>hZ0)q=s`4*>`v=lb`Vaj$y4-syBcOXcT)<#L%w zBmf{9jjmQJ_xyUj4h92NRc+gDG#c@E{Ey?hP$)RBj4{R-JGCf^82@HZNs<6yv)Mcx hg5Ez~Z@|9~_yzANC6IOHq{#pP002ovPDHLkV1k(^@6-SQ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/f.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/f.png new file mode 100644 index 0000000000000000000000000000000000000000..e0f76fc95c9bef8111333e5973497f492d23bdd6 GIT binary patch literal 500 zcmVTUHE_rI zs$pkm9=kJd1_JbFh{xl;?<0gl8)F;<0b{J) zZYzp%GYRJCV87q*cDrV?X&6SaSX?X?)9KVSO~%;qcwDVk{eC~6&sVF})9GXw#_cR{ z50ui$WC8%4PRF+GE3c}m>2zAtw6DVN*C3Hdc%B!2iy&Oz9}EV$T<-Jv3yNH+R6;{l zRmRvOMdo8Rn}tTB(crw`K?28dE_No9d5sPLK$0Yc(0o3x*Xyqr8X=_BYGI5OML8S} zu~_U`pz7A7xXxm<3yTidp?+3aXEa$UFE?VitPQ50*n+BbE;+Xv(Ec(d6MLV_T; qXf50@x~_|&_$Awkn3Bd>EFy~Y;k!pzm0000iV#5#X4EPTL!{P7`&t|hZm4H5>cDwEI zcq9@D04Nj+0FcRKu~=+89wUUbT5YXX`zZJC0GrK5k|aS8Hk)nlEEbDOr4j&mJRYCV zFPF;<0R%xjJUkQ%1+`jz7`?fZr_&{qNraG8D(!SSN7pzU4gg>R$mjEV zy&fSn7z{2iFHh6~0Hspt%K)?4T(8#=LXVG+fk5B{AQFkZzP^4Luy3&2+uKYggP7|0 zJ{XNgBuUaXMNtGneDg-@_xp4g0zjkDpnLy20bDM3KPOl$7Kg)O3^<;7adFXXHfdWb zl@102u~@v1S}c~yWP)MXVzHn-0)b$?Ui*ALm&^6pqk_ZX(1z3Le13lZH8dO!pPrs@ z9PjmdqtS?>C_bN`%jLG)?csB_dP;q0neF z;c!@^(Nrpx)oOM4ZI71xsh>ApS=Zn`F@b3fO0nhcC@66(+-v9sr07*qoM6N<$g6+pL9RL6T literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/h.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/h.png new file mode 100644 index 0000000000000000000000000000000000000000..0347c9327748445a525e29c28e8a6698f30bcee9 GIT binary patch literal 537 zcmV+!0_OdRP)!2>3|_zz@p@`~v{})RiP@xm+>~W7{?%grX>hVJyo^r_+r_ zV>ld6r&E??FPDq!x&VM+Flbp;G#c%8yZ61wGZ}`VD2gbGqtQsyw83BykH;5_g<%+k z5YseORn6scolZy7G+CCz;V{Nn*Y(F%&nFNBK@fyOp#UL72O&fIJ^ev1A$z_P4RC8yog`sfJysqzQ3LWKfpHFb71=B1M&ynA< zW1sg8#d=Fw7@RtSPOV$Xs*}(-pCRa!0tbVGrmLnY`T-|~Oaw%qNxi>KWC{Z?ZG&b`|?!`GHCF@#ls;M{25o PK4tK9^>bP0l+XkK+Y5f6 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/j.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/j.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ad651dd102a424bfe686e6c5eeedde9b72d871 GIT binary patch literal 388 zcmV-~0ek+5P)Oa3@C=?Hcklp$t(BF6t%U&#D@80)*y!6Lutf?pOOP$rzj_Sw_y&IF ze~%y{Y$*yGYX|&2;7jmc*L9S>zGhh#RaFTgYn>>dvMf#0Je^JeVB0q5+%OCP;G9QM zwB9QO_>rP0&mstdIF3bHe&>O%>wVt?Kwa0Ws%~g9rBpBi_J6PgcECRXWLf6>ev%|F z=Y$Z^ZDAz{$8kI!k9nSJnpRa6B67~Vu0ur2vYy39Y1%Z6<2aYg#kTFXZ2@4KCP|X= zJfG)TFiqdg1J`x0*X#LwM#MBt4~Ih-hK#Xc7z9Vin~_-*#qD;x-|v)CS(ZJ|V~jl> i4{?*pzS-@7kM#`=1%9=aMn66P0000&sBOD~f+5hLof{YG#-LgSAqt8@P0l~i zRL-Q%eGA{_*$~E?Ab6eSxrgtEd(ZcrOJI!QE5iU^96x~n0Dv^J`}_O1x3@;4QBf3( zF+mVUqfwUS)z#JQ?QH;v#bT3_lih9?08Azm#@J%993LNRXko1o1mW`Xa&~q$o6TNd zU!Rb0Y}Cu;A|QjwH!Kp^#3e0U(pfRI61@DQ&K+M51@*6DPnrl!`{*I!>> zBaz6%!^4<+ep~?0^Mk>FWm$}IqtTe3pMQIM(-V+LBt%hMT3UK~dZH+*SS&6qEa(Yv zI-S$g)8%rRVHf}ihr=5i8_{S~XBUOT;mys>P$&cdTU%QIu(!9T^Biy-M^RKNl>&f# zK7Vv{R4SEpu<6K>U>L^l_s3$fR;y*TTAR(L$KxRg;&T95mPwKX0992H`m3^5tJ!R} zU@++Mc$&>7P1DcM&l3|9??ry??(V+NUR_;PDwTtS1BPMl@9#xXJUl$4C`ytfx7!T> zk|aGoKAxYS69gd$g4t|lS$27Od2ViQM2gUyms~Dauh$Vm{eJ(?O%dw%`-_W<@pv2n z+U@q~=_x{JFc=J91|ej(+gX+!3-I&l{{X%f;5T7vZ3}A2W32!H002ovPDHLkV1fy- BNO1rF literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/l.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/l.png new file mode 100644 index 0000000000000000000000000000000000000000..72015ab4143687e0e4434d81ba4ea3b25e7dcc94 GIT binary patch literal 376 zcmV-;0f+vHP)E4ynuHwF!c_Go}P?b3nKjh0000)P6y*=*M7 zbgfoPQ4~T*I-RCz`qRmhB>DY*06;{FqDDqWBuR?JVpCI7Zz6mjxm@nx-~a&D*Vk`u zZZ%r8t9(ZXfy!8VzD5iEXy=a_c8#0(b3UH zqk)JE3k$Vcty|Nx2BA(~*qDZOb#Wd+T<))taxau5ug~kH@vq?-p4Nhr>~=RuR!= zvwax)2agBduP7c zY#Iy(0ALvA@$s<_fh^1Mc--l9j*pK!9FD!cJxP+(AyE_oAe+r<;7-xb1KmgzO5RFFP-rjhge}8`m01U&5 z#UeovTS7LQeRy~fi^Tx2TCJQ;XDk-`rV!eLPNx$Nht+Czzu#{(8i_>W>gsBjFqupq zA0IC-F9D!jE>EY^Z|m$8KnQUh2LQ=ra&z^1y_rnr6Q@)vnM@{uB0>W5`5XX9lI-<* zJkKM92!a?6hr66&v1qYa1d8AXT^fx>7Z(>VFE0SVFpO5K-TdriT_lxC^ZC5dXv8o~ zrBbESX`jz`;x-M1LK=0mIp37P;ffrYbJEEEdGCqg6= zAxScoN&$e`Y^Eq`Hk-BE?Gt#gYev0ZM+mLgYaGXIHrr`D*n(jghr_X4E=3|ywOSR9 z#W4bMx%~eA-e52QfKI1dtyZTW*M7g>(G{QQ+BlgVnennWTwG6(0S ee-`*h1U>+}I&RA2*NI600000hSOo08lIz)y2VJKoCSA5U|;7FE1~f11uIxtyW_g z=KTEp_jN^4o}Zs7ijpMBWHPZVy9vPW_ut;$qMU0Q&d$z;!{K~BCkW!>kdNY7?7k|bBX;y8{Y5eNiEqmkaAy}rJBJRYP) zQMB9bYs0j=yE~ao^a9Lg^K!XVW2h&s7={@b6(mUtf`GKk<(f{XtC~MQKar3mNxkXy zfW5sv^+0!ab|gt!xjWO(_J@ZD^|9$1c8Nry)9C;Jj*pL7meuqKf^c+ng!J9r-O0&` zfnmpSoZIb&5I#LU1%p9NPrY6*6bcYRhGCE}HYzfi%=Ps(3Xv?!e;W=C4tSpDIL>Od zZaD0GK3_hcuU4zcWb%(o?RGm7iFCVN48ufG+NY z3dyppD9Yvl2;uwtd%0W=hr=khIF37=&dbY7p6B&^aIo!<*B0>a1AYK#xe|k7XKA@5XQgNl{CJ9 zA&LZIEL0Ft!P-VFQwhF;TG)w=U@v(Id%@B&m4$_kg4hHt1g!)MiH=1Mi#soR8jpj^ zS1t2re+#oS3?m}EQ$D;|9^fAUxP$L_Jnr}Vo33CmC1r_%|5 zBuT5)%6))kS$@ACfN7ecP{@6NVHl}Y3P8PHZ#J9m0DQiW`0aMPSS%z-DijK`ENhzf zOrw3hUDx&DaCkTz27>{BY&NUwdZ|=;vXejQd_I@U#@H*H$9=$LGD#+r07Ow-uh%~&I853~rDDejg1|YqyDSh0wA*cZSj=0zJiy-v ZTmWFeIro}|6xIL$002ovPDHLkV1h$w%b)-N literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/q.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/q.png new file mode 100644 index 0000000000000000000000000000000000000000..e47c32ea6b18aa30d7b9285a958a28dcb5bdb234 GIT binary patch literal 825 zcmV-91IGM`P)Z?MxHuUh<`gtFMT6B6BGu9mNMkfKG$>>t1a7&BMmQ)QS(M_X z1m%!k&uF{mrA9g(P%!Oe|dS) zXf#t(Q#PCJXLhi^zfaTj*x1lPm-2D8!EX#JgogfI0$0N(~H}$Bj=jUg=Uca)k zVzF3ucXvOgBuVP&={Y(&qG>vrOn$M*R{(>-5Q#)msg%iN`kdX{+gn{-l_ZHI$=lmo z)c~K*x4yoPh%T4w?Ch+mhoUG%OsCU4&#MNIB-sc$J3Ey;6B83RH#dlAx7(x9X!CWN z9!w|{@_N0En5Jo^^D~>xi9`YbHa0eb!Jvv;6bgl$PA337K0Xc(4k`fzLC9n>05CZ@ z84ib40E)$;R;vYoTrOuY7?c2geSJ?)PmP#mSrq_L6bA+d06>;yifXADtJSIsfFKC@ zd>#N8hN;)a?rs$Thr@AlasmJx$EDM0C4eZ3 zI-L#xE-o${4u`r?!7xlC=gGd$8lP%_Vo0$ zX%*4l)A9WLJe$pyN~NKpq4Du?qtU43B>vu}{~hoTaD5yG{k=yJ00000NkvXXu0mjf D!6SZ{ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/r.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/r.png new file mode 100644 index 0000000000000000000000000000000000000000..44ae3c0d6484ff0336f451432bd3a86bc819ed40 GIT binary patch literal 579 zcmV-J0=)f+P)~0005vNklq!bieKKc(4fugWK&E`^93x^ZaNuN~KbT zLgD@lU+jUd>)2?T=61WW4~0VYdVMyVsjBL5I2w({!%Jj}rs*4l)$jMqx7%UwbULk%>E&{{Ua#02hG9KmI-RD|X@pR_-Iit9f<2%p$}Fx{E1u`O-EOH= zk|gPLIz1m#6X0^W5{X16lc8xEA;hw5Hk<8qIzK%JCV*iW0PuRfgTVj*Se88=kMIpW z7SrW&DM=Cl42Q!=Bw{@P0BW_Gq9_26%jH_Fmh}Jt5Jhpb*__X3j^oVx!%Bdvs)0ZN z0LJ67-|x2uK$7J9dZkinHk$yTC`z$dd=hXt9DF_>_R(n6FpT$Ij^p|TH$>kVMCEDKP2 RG`Ii&002ovPDHLkV1iEf|4{${ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/s.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/s.png new file mode 100644 index 0000000000000000000000000000000000000000..93dd1c61d6ac04beca23465cf78704952acf934f GIT binary patch literal 665 zcmV;K0%rY*P)D=G%-1E8J@9+H1AwUShUkU+#tT*6401$sTuhZ#NtJT?TMx)WxYPHQ~BNB<-Zg;g> z84QM7Z^E0xaeTYo3WY)dfW=~|R4T<{QLonn0H{#bTAqWvkWt6d;qyB$G*})7fY=u2R$K6ae6MyKk>>$7B>mtyU|W&7RNaS1FN5 z6buIMyLX!}kw`Y1&EarB5M($UUS$V^K_ZcO>KA#v-cqTA<2Z(4d_Ldda9|h)f1^8q z#bQCBP)?^4j^hx*LZQInaFj}AwOV}*078hOD49%dx7+8cg%D0A6O+lr{_k%xd+K)^2-2ct=DUbL}Ihq&X3V( zG?hv{4v0h|D2jfK`~CiKIDD=Gl}h#aMx#(Dh=1^$H(LC8pm-Gi4+I~a=F}9YPZ|*cs!j>HyVu|Zx!))Je$o51Ol(u zdl?@NhX4R3lliSfzc4u#i_z(HkH@1>C;$LPqtR}+%jI$afZ1$buh)00j&S?pg<%+% z%RP^e$78S8LlA_)V2H)yA0CB-_s#ANcv}Aeod}3@%EiT=00000NkvXXu0mjf*;_Ht literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/t.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/t.png new file mode 100644 index 0000000000000000000000000000000000000000..c359ccd2717878d307dc9f28b9f42a92dd293680 GIT binary patch literal 448 zcmV;x0YCnUP)@+~05&#muxnw}@; z^zCUO=N$Y}2>e(AAOPR1Rkn~MiR-!uAz79I0E{t=@$>oQoJ*3F=Q+k0A(UkqW6ZKF z&-0p9a5|lCx0`92`~AM%ZciqY=I%f&E^(P%^n34&lgpKrI@(h_)y2qBuL z^?JSg{a!={gF%ucob%~)N(d=}o6Sa1l;Ln#mZw$GzVrE8@ka*u975Gs`lGxJdT1^!{b-!~c!08kXA*=)AkZ2+j% zYPzmpuh%5wI8LEZ006@<06^0;$?4ZKe?7=nVB(7v)Aj*W;5i&6&#O8%d!wL zilSDl#mvm-b7l|j;l5-HT^bhKiyr77I)RQWN9xSQN!lsU%6#XfzrQ zhm_KMKEGP6@CC?=2e0*dz1!`AATSK0)9Fx3U);weJK1G|kGTP^Z5U$P)5={^W4 zC9AyDIfH+IQc7X*7bwYqO<9yvW`p^ZOk`jZS!6OB)X6{@7#NPhBFXm|&YgO^-1p&j z4^R0_=Umry&ga+F?@a}OeiJqQGH=0K@N@oLhYp9sZnwJ#0H;>xo3-x@NoGy4~(Vp}_Mz?nCzykw~Q1>j4;zM$u^WW{tsMU>F8pa#t{) z&z(-^XVI-rE*1+S%IEV>3IMPyJDE%XB$LT@yM2)r1c8VoNqSz;?REo!002=Gyg3<;_xq2J4*)#R$K&x= z3No3DAP4|rvDjcRARf?D|~Ql!}+2!gnY zTBs-*MNeoOJgit6%L`_Xihlht+R9swav)N8gPKc1RC<1V~T&Jg} zS`>@LR9Bt7*Xy-ftzXsB7;J5A_4f7xSX)~Q1Oi&r*4AdRST;8|0d#eB?d|QUsI;_n zet!O22I}Y(Md5i~?M$UoM09a+;c~eEL?RK7$HP!EnIxju*VpeFba!{}?(PC`I2`Ba z=d9D`^Uci60N{B(l}c$-nwy)etE)>t*0jBmNTj{JouxD~GNKE8c6N4RVgkUxz(6=0 z24J__S>w9~0630gDKXvE)m5+8%h21~8{27;Bvn;aso(s}KpkCeZLK6pJkQ_W-m0{| zzCIR<0VpXc@%#PiV*J2Bk|c-20bqT7-Db17-EJ-2-rnx)>{Pe^&d$z{4FH%-rk9r& zmj2PvQKp@iB_9BW@$vCYH?5*5XJ=;>6%{KhE6dBvI{NVN@cjH7kH>kQ@95~rcwc8R ze|mZ{o6TcmV+#ulX)|;>ovp2{?AZTHMC=?C6%}Qo<>lpOvpKs0m;HY9cKiAHc{m*2*w{dM0y%?9rIN{HLPSv%RVoz#OeT}x1R&z>?rtKHK*WoS z3#ZeGvLzQFiXs3EheJfPSS*=L=9dA8SglqK1_L6F$72AHPGzBf@KoI0-8CAGR4T>u zydVfpr&HE6naj`Ra?+}mO6B{FlCx2=0QGtu0D8S1A*5I=TCLVkr?NbN5Yle90ia&5 zznfO8wOA}7;?>oaUawysKnUq}yEIKlqtTE4a5&^RPOA6z_F}Qvl7L>X$1u#+*4F*~ z{io>Y=;-9+M5&yh$(r_=fUev`>`czD=oG^D80=?H=_7!1{ZTrSUTMa}&$8jVKLXq4l)*Vk8yqSn^d^m_gN{yqRSn@vFwSe7M(h@wbQ r6adgPtZ88`{8NB8GDH4y)neSV00000NkvXXu0mjfv@=m- literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/y.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/y.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1ecf62a2ea93f55a5b60180258324b5b9e1b5f GIT binary patch literal 556 zcmV+{0@MA8P)9{|LgS9iNzp-}L8y_d@c0C=7!gb+g7?e@E; z)oM*969BMnTaqNd-><6bjV`=1ubYyyHylL5Cm0K1A)L| zvAEfD7l4ShTCG$nQ7uW*;c)oqNvG2QU|H6^l1BjAyWj5-aWEL9QmK!INF*{G4j(i; z0rdO*OeRBhI2@kMX4j{q(I}ZrK5lpdKtx%V=kvMix`tr{gTd<~kH=%0=63;xVaT#f zbvB#r^?Fnni^WEx@ihJ%KzlV!LqyXw1wlZ>&1U2C`B<_{0Mj%jNus)3E;pM^S(cZ} z<&Obquc9ba6GHO&JY$d*KwqhC+lW}HRJz?RW9k#%qEIMwI-LN35W>C(KLPmKa{X8P zz;#{Mb*W%~Tq27})3oF9xLU1rT|b}CmSxrJbpVJ)qw#qBah7Abmuj`j^E}6Kj^l6~ u2LPfdI*yY_Byzdj4**_&6)(Ww0^R`8)1&asQC+_P0000XafZY zaS*J7)=6;E#YG*(!NJKz5&RQ6xJq|X7Z(xdE)E3|M-g3|q#X)w9TZ%vbjrCy-jhpx z*4}b2Ja~T7$vI#8qah~=1_1Pv`h|X2Z@_;52)NX2+rD0}?(-?7(P-4gfL;0kV_YZ{ zw%aWmilWGI975=LJch$z_FYZWZnqmDF8MsNe59^2K6NRaF2uolZQ@!z(=ntX8W`CgVshm&;r($Kq@@yI!v;rTzhm zqBxSFQ0Q{G0Kj}cuT(1FK?pock|bG{S&T8ZEbBV~=kxi#;+;-sI2?MM=oKJ};%>L2 zlp2N+iA22rwzg#z_Khth@+~isvromEDr{Q>2&&K zfN7ctAwozX@cTvz{1L|Ze$=yTz`ZT-`{DHl{QH0pob+c7bM=cO00000NkvXXu0mjf Dz_0ww literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/a.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/a.png new file mode 100644 index 0000000000000000000000000000000000000000..bbbc10267ecf51ec4f06128c516b65cd9d887fe5 GIT binary patch literal 499 zcmV7?s=qtReBrnOp)5OUjEmK7vmu~d0%_f+ed^j8c*tUH;8IQ*RqS0tDH#wir4+aC8 zHB~a11VF)`R?zG900@F`=jAw#GCaJT??2hHEI|GTT~ z++`Gx#|a@1v*URlK)2iVsNewrz<$4{>r5u2D9T^vY&Hv^TrR%=n9t{Q1gq7mBuSzu zdYGHdCJkP#R;^a+DS&O;;c%FCFBXgKb~_J%X__=Lkx0yDvu9hhUaxbxT%}SupU;lt pcn{ciyIn4qA5GEs+42SW=?X6_)14Nr{Mi5i002ovPDHLkV1i@^(arz> literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/b.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/b.png new file mode 100644 index 0000000000000000000000000000000000000000..1f2d08ac31c91b8c8f480920fd8fe6eb1c54e709 GIT binary patch literal 599 zcmV-d0;v6oP)mrNEZB9e$0?!LpPF6qmCfA{UX zc~AHGJfG)z^*o>Fo;!o0DELeL!yoGd_y8VtKA)d<4u`|xaL{m5exPQvX|Y&}#Ufd* zR;zS6twu1L&6COGm9GY1xm-G(PP^R>pwsCnijvFa+-`Tf-5!lbf*_boCIA#g=>**G zcSTWrJ|BSDY{oE5Hk*AsFdmOd9>?QR4}gfKX#gzCG7R%g2*7MM>&$>8p_Y5M+dZ0O zSso6D0Q&vDe!yTbAkp*r{F7<1SWpxtisBo0Z9uJ7BY@NCq;5)*#BrS0>s_zc@7=Wl z$z&1$$8ls?DwV8OD*(UWKcCMv-L(O3w;KSdLm&`f7{=rAsJ9Xdg?=O z7K_D*DU-?Q2ap?9>+_^|JgzwoG-gq+*8>m^hrhMf>vi(5*=%&qqF^uxV87pM7Eou2 z0JvPPSJunr0)Xdvod8i30aUBiR|f<^FdB_-^3wpYEDNAgsn~2bNs^wd-ENnr>FIQ; zvrWmprBW#X27>`WB9Uk`8m(5VTrN8tj%YM`yh48(v0n6nQz<4}<@D0NtgzWcwUO+aRRTSmfw{4p-Mk(b2tX3-kjYflg zs~3Pur2=3!n|%!s!ry~LBH?)+&zlhjxLhu>EC;<3%Pg{O8$dFdjBD5(k4FHm>&690 zrBcCSx7+<0u-$Ik?Kamm4Pu_llv280uK~>GbFMPgbv2#7L zNe~18rBZ1!nV6>8YPHhoboh*W7eFaJ91g`|@ph%EstyK&$QtdTs0blZHrnso@&ml5 YD|ai| zQcMP2qC{QlN)#DPvND~)Xkk!BbvC6Wg)%UkZZPO(G9kOcl@hL#`wgC?$KO-Gdg}4s z?)!Ot?)9y^&$llj%QAj5D*ST3g8x9ERzz>NTTv8MDwWY_e78q_m0qtGi9~cd-EFVU zW=p5jlgZ>s`!fN@ab~kQl}gp?^-LxMAQTF59M^8Qi^U>M(-#v(QIaGn6I3b{yTWd}jnXvz z;aT*D0Nif(?Ybz6E|-g8m>2EO%dJ)mK&#cdUOXHQg+jq(GVwhBdP1N7pyhHI06`F) zPDc=g#bPlS3@Gn9 T+4U}w00000NkvXXu0mjf3BBZ@1g)_4;@` z?)Q6)amcW3y8wVBNz>`{vmc;Ztrp;5Hk{F(+wB$t6h-;i(sf-F#pm;xcSIOt%d!BV z)9EORA_#)-`>WLoV{DpcF)>{(mpsph#f?ToRaM7vii~Obt0)0+`UNv5G5>$Ul!*WU N002ovPDHLkV1f?U%`*T1 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/f.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/f.png new file mode 100644 index 0000000000000000000000000000000000000000..28a6cffc0febaf5fd4e7a82b7abb382242902dca GIT binary patch literal 483 zcmV<90UZ8`P)_Y{!VbNd^|Au8jv>OG3&L9T=2cxhgcCA(sG#C__O%?`nLBXQz3p3C=#B&jB#7FGAx0jD7jpYzr_QA<2Z#vp`^m;uWfTw5CVzD5EWV6|TpG@-ov-=7H Za|LDowplw^g>V1>002ovPDHLkV1kQ))lC2Z literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/g.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/g.png new file mode 100644 index 0000000000000000000000000000000000000000..a8f1999bdd520beec47c4aa1e5d9b06e4641ad8a GIT binary patch literal 579 zcmV-J0=)f+P)@jQ{Orqij*<%&k5)oN8ylwPlw&1Pwu1`vzI^a3iC3d1n-`TU=FE|&vPEEaVE%H=YE z!{Kn95(I%|**j~=fbn6_3Z4%jNy$1b{5d0P^|# z`B@PFKA(@+1YH24SL*e8DwVoZaL>t;$piq)vbPG_?Y1b2Mx*gbC-?h(02D>tDhLLH z02D=evPFZz;PMii&E`6L*&lJ(JoF9H>GXBV?REq3`~A8Akx1mikY)KJxZCYK9*@J} z08lEGbOE;8t-hUa;jrYVY&Bx$i& z*ladMQ6xzspBvBFCz(tF*zfmxjrOHhs}+D+t@Z;>et&;Ao6X^HSXI@JAjffqLg8md zMJN>d+)u03YOz>4ozCOieIwrNj>luG)f$aPCX~!Y}EM%C4J`y@B4o5@RfTz z&vo7R^>p3mzIzBk5b&F!!Y{{1;QtZ0-ERM0V7J>9i$$8I34+jQG?hw4jv0@~1A%}v zCdfoSpZ9n?^?H3c9EQVT00x6Wl3AH5!f2C*5urKsucklX;#8kjZ4^1pe;9;c(DuwcG9X`Ea#b0r2^JVu!2MDu7%r zC)-Kkjfll!049@(7_wTe%0=E1uvjdTRXC0VkW3~Oa$nEE^?Kzv&gF86p?13sAeBlf zq?5|kN2AenIt5^}**cxh^KK_eve|3`xEuJL9_aP@JBJ_$aUw-g02qc*wpYob%jF^n zg4t|VtJUJn@pud%5{dk17i~5hp63&Zgc$1g`v5|r(2oRqy&iyUHY)uUTX=nMjh9 zgj%f@0Gg)P>-A!>(CKvLa`|f(u`Ekb6w9)b=xjE7T+wc~4+aCdI>fghUgz`qcsx3t lPL)c@XX5j+`w09v{s53-g&g?I_Mrd(002ovPDHLkV1kf_4X^+J literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/i.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/i.png new file mode 100644 index 0000000000000000000000000000000000000000..a149116cbd55f5ad964efc2d6aab15facc6967ba GIT binary patch literal 467 zcmV;^0WAKBP)VHNNj>{3}M*rc$tuu%{{z)mE6ibO5a3fU_JkzjI(XSm{= za@g5f-g~pV#27=7_(H+>82kf+(hHi?=|n`2OcX`+dj0uomI0H=q}%OQDwQNlj^n~G ze5$4NpzU_Me!p*;rX)!m$2FVHa=Cmw9tVSgZQHUeGscLh-EJptk#g|ub_-y=UdQ-q zwW_Kr%Z4-qK@dixQH&gq#{ibgwY>$;xj8HQ0*4jjh; zpzC@L4a);XQEoZNE}>lS0TJ;$e?FfJDbZ%L0ibDGQFqa5wF1!V_3~XT*{dmvV&0zp z5VS{JE*Ai%X%=N*Sr!1#^J4traCnaafZ=c$BRidrD2nOAQc`1x$Z?$O^-4t3>9kg> zsj51k&+qfPSS*4d*zfnRG}-t4bXBX>n$2eK58CHf@iF)lgKwE2iC9>2d~pB(002ov JPDHLkV1j&L$`=3t literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/j.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/j.png new file mode 100644 index 0000000000000000000000000000000000000000..cf94ff276a68cbaedf599779e91267d3e4780547 GIT binary patch literal 531 zcmV+u0_^>XP)A|? z;R9G;HCD=25sAGuN?FWCiq9dX*l6Md$Og$5u#<(Al@ya2v9fY4yv4jR!<~8bdgUzt z_x$_ad+s@RhEPiJ&T!z(@d5lj;Om$E{eJIoeD9J{>hX9uj{A{8t;cXU%w#f#yuo0g zOD2})V7Xi-5{Y;`o=hfvKA#{6JkQtb_33mf%W^Ch({JC>3EJ(p+wDG|&swq9>j5|( zk7h1bK)2fka5|l|;&!_Q&}cLs7?}Wyq5vosi#k0TjS7PB*vkYc6bgR7|8O{H#noyB zpjNBB0AN_+d_E6AQIr<|jGaI*7<`&$bCM^M34m-i`#ja&_H(%$fcbp>G?Uo-;CQ`W zRaIHMc1pC_Y*bY>do5l77>~yQQmGVEwv7u&r_%s-yB$-r8LFjH=>Z#nD2lAzd@n5) z3ji*c%g`XpGGqUk0%o(>t$OSA`hJz?`D(RlVIIwj03Z|!T`m``9tZ@=<+8PbH&k1# z){Vh&oFqw|PN!0-IGxUZzi;_PFP5}V1t#Ue5&i_XMgpi|1Aq)>_s>iZ3+PB+}^ zp5M>iJlpp^?|Yu_d%pKQ=e!X@@SFI9U&c$|B_N?ztF>CKyVPp6%4V~%SZuLa+@Z-M zwA*d1Rtq4VPG3>u@z~*Tc)ebZ;{Z4uj@$D0?>9c1%|@dU%d(9|!)P>0@#FCr3WXF3 zMZe!S7z_Zq-7Zbj|8fFCh|A>y(ChWYWu;Ql>2#CHuh#$=h5^8` ztl4bdZnsxCYPI@)@lQ@5Wl|K?Y&MA;JQkSG=KunMfYoZPR;xrN9t)JqWdPy@68U&M z2gBhIfY<8#x2@&w#&H-O9K@;R7Fr2yn|xvOM~qCP%8WC&a?7XW_0|CTbDOaMBajuhcI&Sta8 zv#3}s0^oW6mfG+4;uj(u4#(qhtyY^%Cck>lmv2+0QYi?6#bUXoG#brzyUpkGr_+gH mm{O_qO_#pC{_I`?|Bb&3aC|#3A7Tgq0000E-{0004uNkl@5XQef{FBZE z6-{TMSPCHzp|P=vMH)e|RvYas#0L<3fuLZUfDd3{VPWkH*og>2VhRh_A|S`X#bhxY z2l=`kX86qvGs6-}DZ`q0B{_~eX6Pofa5rikN^O~FaYSf{<2Ia6So47DB}NAB$LT_JZ{_e z%d%Rnc%D}jfv+0 z-xG-hO9k`!+}+sU9BkXJR;#isGfol5aR5Y7OsCV5Bn^kd?RNX!q0wjnI3ABIi>4@w zD2l48mdoWIY00wO>-9#XQ7jfa91bj--0%16_4@60ds$4=>~_0_LcwJSf-oMBDW#9c j<1^PZ`c*`LzXCh~Wd|aycr%7@00000NkvXXu0mjfK@`uf literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/m.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/m.png new file mode 100644 index 0000000000000000000000000000000000000000..08eccac594fe14fe65d7acb9fe63d5d9768ad626 GIT binary patch literal 722 zcmV;@0xkWCP)i6#qQofrSpi z6LJt56htBfi>7oDF+pd zsrbIbjrTQwJ%ew{7eCWI=bn2$+|N1Zaw$oY@S9NKm$4z(5Qw74aolh?{87?}hljt0 zv=Vl^9l+Dmle9K2FE9OmzicWH&@>I;=H_P2?AdGwOS;; zR4T1SP$(3vRx5zr-CacjQ501w6-7}1CXE_Zcx1%T&y#lo7+=0G4INz&HV z7NJotvdv}_1mWP|0KoI}^NL8P(|LG!*l08WoSd9YZ>_pPr_-9Q-R4OGqO(qk7TCJu` zkk98ij+4z;ECwJFiOAV`o~I}(9*=*kr%DB&-|s6Ecs!m~t0kN7@9zM#TCF^QG)+gN z(V0^Vm0UnD8jXxbG=5A zU@#mV9nGIAm&*VchEXP-C5N`}_L~RV6a&bh;V;*BrQ9uKWA@@pv2#hc7NJ z=KFnTXNP53i^W2keIBF+L@3$(T9FYam={sTcsyS5TD043lEG%Pxm>Pq5`BJtG7Lku zYqi?+TlgceEPHl#mP{rW*Pv3Vh@vR{Yfzi7f!H-zw3uBm7!0#43M&?iN$_8AhyyWL6bu>^Oe?~M?cT7Ly)XW` zsXPx)c`ohuz3=@#_dD)(XF~|VcQ!kGbNdDSJb?JxbgHT+ilKA(R&9zT6e)578Ka=8Qm zkH_=SQ!bY=#aRG`!(pjZLI@EA0RXGj>fRFw1TYyamS{X4r&1{ZC=?1do2}h$-xw~J z3r*9w6!;3F(WtKL2q8sL9_}Scl3J}6CW8gQ=kuB0Znql%`u+a@hFmVU-|s&JOeT|Z zxon2DS`7fw>GX>m)EZDKm1eV<8Jsy&eEKolYanX0ylR@k2ndSd?Y?UUxVg03ZkgLg?AidkNt6dLQb7 zAOL{NHV{Bu&$*)hf^P7&ZXVG~H-4-T)j9hkrM<-HsVE7z_;CZnt{_ zplMn#7_|H|n`dG)8ohEG+HRhX+wGR3D3T<<>KS1BeVhI`;17@>|B2ZQUK0QS002ov JPDHLkV1i431<3#a literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/o.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/o.png new file mode 100644 index 0000000000000000000000000000000000000000..a6568588bc3bbbc1fce0a8fb0be937f6745ca252 GIT binary patch literal 597 zcmV-b0;>IqP)NklL7K<#)&So=eTdmestJQ9|)9Ew-LI{BAbb2@UH9!yqhr>bbR4QdK z7;aBxS*8G=&-W*QXf$fG*{I!YHUZFk+)5P1C(U>Us8lKdR;!h&s+Y?JKqwUY9=6$R zC}1!cyaAvuB#}r^Hy)1zSg+T2gLOI`fL^cn1|S#=0yrEF)Xn8`+wJyIu-R+|FdmP! z0?y|%0FTF`YLi~C2XMV!?_BQg+if%&0Q`Qx#wj_SP8`S4Mrj(fPNxHa=XovFX)tZ6 zR={L30l+Yf7C^mT2SA5TD`3Ch16VGXFRLqx^7Zv42!hdQd;?&ySO9dp-Isu9G|Dhc zwOV~|7iF_qEt{&}?*ot|Nl}zXG51R>77Gf9#bS>#hr{8c>D4r7fk1#VL{a>HS|}7) zmZe+dxyX}mi`(rUjYa@Cj*CPhcDtPr((m_cwOTTn%w#f}X5=|PpU*p;&fmdaueV$- jtM7<>K3*TdzYq8YE;zyD3(J&500000NkvXXu0mjf)BpVD literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/p.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/p.png new file mode 100644 index 0000000000000000000000000000000000000000..fc24a272aa555adf2dcf027c43951fa314447876 GIT binary patch literal 581 zcmV-L0=oT)P)M*DwW%(BuM~dS-zv0rWp(d0Wb{nhCsPo z<~UB*^_wM=$p9FQMvvs#Y-UsK=hoF~buHA*5)Ov}oX_V+@_xSu@b&feUWx8`08P_R zU5mv6K&@7DFR)xL0c5k;r`}Sj4*ITdGgpg}Hy>||- z$mjFdSaf6OBd-g~DAgxDilQ6+kYRn@lDikLS8? zNs@NEos;BV{{ux)02GTwUDp*wiO1uDAiQzgy-XpQOad@XleoeQf#dNAAe~MVw|FrR zWLXAKtybL+1bh8RB;v4@-IQpv+1T6x4nf&GykuE645QI#{A6TOpO@W7;K%q2y?nP| TviJ<)00000NkvXXu0mjfH#Pmk literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/q.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/q.png new file mode 100644 index 0000000000000000000000000000000000000000..44ebb8de0dd2921149e440d6ab387fbc5b272093 GIT binary patch literal 663 zcmV;I0%-k-P){oqBb`pO1T2?J z04Nj+&jK_W4FCv*LY4p&MSVWsivS$Q=_F>e+1miC)ym~^8QVhxn$6}z@6#zF2%=mr zM$GcoEYygA7;MPEg!;wm*!r?H6VRpNnBuR>*8jS`3OePchmW`5U zvzg6ilSm|dK3}C$g+iglVnMqql?sQ$nNFw7GNj(L>-FmKc=USx>2!Mi?hHDht<&j{ zBuOi7JRX-yrCzU>%jLelzV1Ikk0t$#Tr3vvgNu z%49N5r<23s+%N`%A)C$acDq}oPNy>(jsMz%dcE#)xxSMG0)bwy7mLMSua|uf?ycMH x)@rrYYPH|*wOXy)?dJ3OuTH9;U&sF+@Edn{t^vvb+W`Oo002ovPDHLkV1kx}D-Zwx literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/r.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/r.png new file mode 100644 index 0000000000000000000000000000000000000000..be3017a4a29fdcc6487596b1e22941f08da6e039 GIT binary patch literal 641 zcmV-{0)G98P)=t>#h|2=!C+CcGnyz?Bdbu?;7{R}+{++EO+*Wq@%1ptboM1y@k9{}WX zIZ?03DH@GNcDtQr+3Ui`<1qlZTrSa_RH;+|;PraH^OCVjr4j%n5(!bSMx(LWY|nBf z9n;}(2mo%k`_WacRs}&A3oMbSIQ$F%_lfIpu~=Y0JRbi6fFK9}5C{Zrjgd%1`T_YOs8A>XK&@80HF6w>0r`CX zE`Bh zu~-ZM7K??bm!|2zA4P&7Nivhkyxl4c2E%5v!M*HJl}g3q@k}NYhr7{{M8g)x!W zuV802Woe^WPMQUog^jRLlD&^$MM~L`m9mo(cCxi)DJ8KQ3yYcOE>7uohq?1Y-CO?4 z^E}V_opb)@jUXbtQw+RWAHaVGoK7c0d1yw*s3 zx7X|SWHPDO>m0`sLI7aD-`fQUf)I^He>AG9O6M^g4s8Kitrh@Gr&Dc+=Xr)~uP> z2Owg<-w%hw6ytKa27|$i0e1|w1OO_Pid}%BD7V{9+n!7&DPumLTL%;hg+L&1KA#^( zgTWvGlu9Liz|(V(PN#dl-sN(k9ch)%=K&xT3R$`AuGcF7c)eboq19?N0N8G~R+ebB zT2cIFvr$#`VUEM$_;r2sJfHxUWp}%sHX4t|GntH$T}PgMTNaB&B9S13AYv+&5=GJD z@hFP2TrNkWQMcR8X0vu5oWtRe%jMi|H_i05a8Mb-k=Q?1VJ!_x;=5`j%&#-Ejhz4XLt6S zo!QAOM+m`^`oO|k0V{x2!!U$l_|x)9INZ9xT3}UfJkTO~&Vqi5G*jcQ84h9lwA_l35&0-Lu!qTCkcW5Fv=k)El zwGEwVH|`lWVuz zc|0Dg)v7ovl?utZ-|qn=5{b`}79g9=3W6ZZax$3&(CKtY&SJ3$U_PJ!AK+DfzaM}o ziX?;CY&Mxps?yg0Ns<6WA`y~dFc<(R6bd>4&1Mt8U@#yV7={6`TrPD2XqvWIEUMD; z`5cW#04RzgJ^lrN<2V3~MuTLq*=zvP>9kHjJRaAGaX#@D1bm9pc6n*l-+Jul~|T_I2_$>7eKjO)&rQ$W&rZ}{Aa1x z>j5~Q=j0LO8904&P_Xt&!R`aI7ASg+Tw2x-UUH)%R53yGrmcXPAZc)ebp=NX2P zBGb)0>I;$n-Q)34-V{JA7UOyTgF%T9fMT(zu?L3l pT)Ym4gUjX8_88tbyEow5^#=$0z&)9g@U#E`002ovPDHLkV1kL#2^jzY literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/v.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/v.png new file mode 100644 index 0000000000000000000000000000000000000000..2c51c10dfa13fca1efc357fb580242dcd2710820 GIT binary patch literal 518 zcmV+h0{Q)kP)8mEbN7VPayaLwib#)N{OO{Bw%BcYY|vvP2x3} zX7O~HIWr$~ZzhBxguqGtz+rs>Ux0&v+wIovb~~NUcDuExZ@1fv#lng}Ow{Z3LZOiE z8IQ+?p2=jQ8>Z8#Sszn?uEAiSx7h7=&)I&z@AvxwB$G*-076K$S_M$4RLl&8LV;yj z`v6&%tq*g#T;}t6v+V1)h~v0eECyh+*%%s*$788fdi#2&&Xx!9io zKqiv`a5x;EQ=%xQQYn^Y&1zjVfJ7nz;Cj9OiL0vGXf&SVZ*Q`uX@>D^Hai>+eLkNf zpNew19F0a>t(LXTMc?spj(WYmTCL9K^UEqK0K+f<;_2%UGjZlkf z0!fkpcsw3OQM_KSekGrr06?)=B(_8a7>!26u9)wyvk zk`#v&2U~&$MTbC=1{Xzw5JAYn#Yt#rwIFb4YX}6F3nEQANYJ9V1&R(LC>0?@i=&EM z#q);q-hFmGUEhP(^6;DP{m=iO@BHWg&VLS}l;S&~!8c<`uq61G1f$W&XfzT+1VJd3 zN?!#?l4P}7T`m`Q)aUaNLY|+Wf1BtpNRm{m)xzO0vp1Vf%0s`!b zL^fi6icly7!0mQ(3A|qK=H@1VTrM|1`tb0uv$NxLI@JjJ{k|f(+2z~q_Eahb;PmvA zyMjz6jCn+-svQc>8=W^=pUZZsMIR##WKvG@1)=jZ1O2x74q08tbbk%2(q zXBYsW*Xzy427|#)r?Y_I>go!><>lq9QKQlH`+fH9@pu3f3I#+5Sl5ZJHV?FLXTmlc7DMB?V==97t=fhdXq(&;p%bUK|@tJU@O^;w5vu?S$c zn3U3wkB^Ow4aHPi{_)dj0IaO6FkQP`E>>6>4u=E4)6>(e@#yF%pU?kMt9W^NkqM&F zXgnU@+uNIU*xK3xFdPnL%iZ0b!C*K%JXFrb-J*+&3jmEqIL+uK`q=;mQG z8re~ZL?Zk9`>ermz)fGL)2Xy0hGa6ygd_-piW^5o+9cLIP5ZLwOUN9UxC#ipU>~^?y9(PGANhJ#bVK9GO1rxgTWw~O#1zPbvH8qvZIu; p^wlw$Otf0}?A95h*$Z?_u&Q55s}yvHd|5}i(`N~OZG zY^hXQE|;37QP0$y67_n$a5(I0Qm@wml*?uBsy>s*FpP9MZQHhGS%M${NG6j2G)?pO zhoWLKnZ)Dq!{P8VIh{@cM59q3&ZcHXQOsmAk9k>^{d$km+U<4$%x1I4lCJA6fubn) z``xmvcDwDHpin3P5ClQjb;{BL0RX8~N|Gc1qtVDW!C)`|P^;Ch*Xv_dk|dX-SS)Tf ko0k%i&&BIQ@c#+E0CWR_T2(BDHUIzs07*qoM6N<$f?PlB)&Kwi literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/y.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/y.png new file mode 100644 index 0000000000000000000000000000000000000000..6670417a7b73caadb525e084ca2ae229364529fb GIT binary patch literal 559 zcmV+~0?_@5P)nq)q5ebn2V zXEk%qea>^wJ?Gpms;UZ~#1DKJUxB|ZuwJj@@i-zPVltVOB+1xv+wB$+!{PAxd^V4w zT41?cy4`M36#M;tFc<^?ilR=Z)7`ScV4%e*6bhzsECnG60pdN-R5!!V}AM~h6;bS{?zfOflW^j}|fg+ifT zug9|N`vn{h2gh;6Vo{rn_X}jRS)b2mI?}HSXcNFN%yc?^lw(!>L?Ur#+3j{Nmy73l zqQ)~9n9XJYFdPnbORLoafP6l$62dYAEx%MMRjbwfem?*-8V!{kmI9;ENI%9%B(hj6 x)Te+pFFRS5$K!D{8s&NZ>2bmD)A9cc`~tKKlO1JOmjnO+002ovPDHLkV1lPt?~woi literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/z.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/z.png new file mode 100644 index 0000000000000000000000000000000000000000..2489eda0e59883c60371ad2540319227c3d509e9 GIT binary patch literal 559 zcmV+~0?_@5P)1MFbTr^1Jv#xAO?#Ti?C$TXtK!4tO`DUAczimtU4Fm35Np* z{Fsi{_Y|+V`?{}RxOZ(9UDv@o^$WaNAHWCjbAZKSk;~;EgqFWz7)B6;dc7`+qQ~PI zjYc;YEzcA!l}ag!l1`^}T}KFw$K&aA`mdqgZs+s)+spbxX_`jUbR-hF9vu#c?RE`-n|jSFdWC}MzWau*zr8S-|uBvHgtZO zNKYn{7~^NsjgS0Co6Ux0SqP!i=_E-K0O0j{IgUFXkA}NX^#DRxtJNe)a=BdbcwClc zK@b#0v0AN$yD!`zkx0-qEsEk>nj8v+!r}0%=}+B2RaJ_j8jZ$11IE~74=$I>Zntwd z9Q}U(o`>goilR&cCX)$45X0f{o}pAK0RTFkjv2sUFaQ8Fn@vfQR;!h&s@EQy%@&PD z%`~~yY88vc>*qe7FAxX>gF%ucWm)$7{oQW&<=3=QsUU<3g~I7{(ll+kT&~ya`FxHL x!Wf^=XM!MDmaSH+u~_Uod+_-ue*pgr@Eb7WB@o=qWm*6L002ovPDHLkV1iP;_7VU9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/a.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/a.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a6950a011de8bed9b29907242982b6529a26bd GIT binary patch literal 393 zcmV;40e1e0P)w+cp3sNx}vo2*R(+B!mFK?RML(-GAg|S*B?+3}c%TMUlZ2 zQAz-w?lHEi3K0buQ&Qo6dVC<@E6 zPNx$91VIqTaaorCb+YTaKj(elN5n7;*D%X6HcmE8ljr%>YpWzls;X+Ykb82g==&ZK nRaJfUbL5V-_o1e%nFhSdUEfYfTWl9MQk7K=swfcyP^yWJeexm+$$6jcIzsTg&;-G09h z;B-1QScA!A(o_vPoeqG(V9*qx*XseGl*;A#e4fwed7jq>kPT6e%jME>oH&jR!w7<) zv{zQB!Q=55kH?f!&+`BfLe}ebmSyG9m1?)!0T>R4oO8MJd_Hwu2aqJm-@X-2Fr7{b zA#$$kx@B24U(;XH{i^&&08M*q#yPJ6aJ^pNQEl6<0ZEUn)!%$Qd gX+K^q;Qs@@0jA*b;6S1&FaQ7m07*qoM6N<$g62QKQUCw| literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/c.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/c.png new file mode 100644 index 0000000000000000000000000000000000000000..e0417c53e7b25ceec69b85978b9d0101db7e512a GIT binary patch literal 330 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 G2~7ZXlyz4C literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/m.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/m.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a79ce813b0201e6d0d42c8f5f95f54cb233065 GIT binary patch literal 450 zcmV;z0X_bSP)ztQLR=1K-09rV9;nZZqGECOk`PpD5U^^bG}}$ zecuNFK@g_XDI)H6JIk^to$I>f9FNDOP+0{kK*afc4gl?T`_BF2R_pb8KHz1OB}t-O zZ(CRnT7EFbehD}n4%EH;{bY#axbUC_K|qGlXhh0twIandO;S#$6Dfiq=(;|e%?dnI z&N*%FbULJ5k12}ce!nMCRaM4VrBYcgm&N7)5go_r^?J9;a5z*HckzW@LL literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/n.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/n.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b7491a7bd9b8187349d4e03009094b6a941a73 GIT binary patch literal 382 zcmV-^0fGLBP)U#RmUs-Vcv&hBq_3 z6A@ug3D{W&-~fCIfO9@SW?A+N0xik+eE?~i5>eAMhG773T{q8jTA>Ai=Xp~ewrw-U zL{Xe4SJ(9>z%UF|RRuu+K$4{U{Z2%j^DqooR=->U5k*l1z;T?n^L#$n1B5k?1VGcY zx1*{m09lszYEwZFezw-%&q3e!|76g*uA4gY?KDj@1+Ui&z&MVZ07X#%h~xP2cuY=N zmQ!F^*7bUA+jbK`lB91NLf7@nPx# literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/o.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/o.png new file mode 100644 index 0000000000000000000000000000000000000000..f386683e561d8ac0d040377c8b1202885217a541 GIT binary patch literal 382 zcmV-^0fGLBP)o8qIZGarymz3q{j3 z&+{my$CT+X463RMhNfvj5af9-*`ZPZ#u%kkQ4~T*mSwx9%T02t`0ASb?%{a5)|Lx! c0nP_}0J+w6G^wFA2><{907*qoM6N<$g6VjbIRF3v literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/p.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/p.png new file mode 100644 index 0000000000000000000000000000000000000000..334a11890098e231dbe0f3f9177f05d084a231a0 GIT binary patch literal 462 zcmV;<0WtoGP)PZPn}zJPxPc(31B0h7r@5CmR;PN&msHlKNxB0tg|~=@fvbY1{3VdSAqXeOyPNzzx^4#C+^){Q0@B0AO>-DEXyId~)e&4oj0H$ebnnp2= zM#J}gmKJBy!D6uhU|AL+WImsFyWQLEmSq`BEK`vmkH=FDqtR%$+f}Po#>bTj5Cj3= zfkQizBY<9!BuQ@o1eQU#TCMK)`(QBO1^9kjzJNme0fBmE9D#G)kN^Mx07*qoM6N<$ Ef}p>|n*aa+ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/q.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/q.png new file mode 100644 index 0000000000000000000000000000000000000000..205df6aa1f8e3dec251846aa059302cd22e353bb GIT binary patch literal 439 zcmV;o0Z9IdP)IeZ7lY&vA>1K2?j#7;#jSu}SDl=d#>_G%~3mY*Cx z&!0c4CWJtr8lh(mfC2DrK$c~W<3v#efKuvtUb{yq%lG}KYciPtI3AC!E~NyNQqweb zU8j_uPN&^&XBY;6*=*KL0?V=hR8{q?91aHnK@fD4AW4$xbSm2-^>{o0)OFp#As0mf zU_PI}7Sl8ZuvjcQ0Nidj0ORra%{CeVXqu)2Kv|aGxCgRPPyGt?FM#aB^?D_Q$jbSA zW{jyuXq_|8xtw|cgpl=m%^2HkHUQ!{ZnZ1jgUjV20o(1Cb1sBftyYQvT_vS$+hG`% zW$C)^Uk_PV+_&HFUzeJuDGu0&uj?d90OWbz7eJ1d%+U+re!l})E|;x4wGV#0gb*sv h{yAXy=nsH*{Q%hRmesQWCwBk<002ovPDHLkV1j`7vwHvl literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/r.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/r.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8bc8b0ae880e53cfe630bc7e2ccfd49d80129a GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysr8J)^~EYYTuv&pllnLp+YZoo0Kg#XzD({dQNALIo=~xA(zQrw%c9^ez|h z-rFO0D7%6=+f_h^rTb^sfoby#Z<=^7ods*yvbtzwth1?r-PFG*4b`1?Z z>3RQqe71??Sp%M>s=mSZzaKCBljgH@kp|NQm6Mh8y2NbGel_6ff7SYPn?wWS3-&*Z Ymw%-%TO%HG3+QDAPgg&ebxsLQ09M+BdjJ3c literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/s.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/s.png new file mode 100644 index 0000000000000000000000000000000000000000..bd6c50c094f3539b1a895fe0d07706d20fab5f25 GIT binary patch literal 405 zcmV;G0c!qu8~)-fX!E4GmpStd zbGR@JBEpek;b5JB6L1241r$Xg%W|5gr0n~CS(XhCQp<51j^l{ya=GZb9t6Rriwe+n z9nbT&Z6o62@h}WS5QNw3MdPIcJfBYhh@uF87gYu<%L2eK4Bt+k=i@k1n#4rrs@AtR7Uava?{>gP+04U3H zpOCXGyWMVpA!O4uMN$0jC(|HF631~n%t4lAZQGKy=Xr!7Nm81o zh`6rnCV=_rSCJ&iJkP%G(_5JH+j0U`sfJysr8eI19Jg&>W`JzX3_JdVGeV#wE`AmG}*_Ns71L{y!6s#jV?&JIp>X6UyhPrAn=IGNmyY~@w#=dE9Y(g ov+Q}b{Q0jb?5X@+544-iRXwLJTzszYIM7QBp00i_>zopr0O8YZ&Hw-a literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/u.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/u.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1dfbcf105e9f02883f4d6a0f9a286af94a0fbf GIT binary patch literal 389 zcmV;00eb$4P)KuhZYF5ny-L925Ctwtw8;$I}9m@On5vAglhqS^RXFW)zl&*Z(CWGF<0 zJM{rK>j6A~{{m>5=0|^;rV9X`=Lv!k$MMz-!|?Tb<#~Qw9saI)o-NBFga7~`WP7#d zR#k;Zg2RX?iU2?mgzo@+L&rf~*PQ_z|H1l1JkQ_TrX0uZ9F}FT0n~L30For_e43`O z0Te|60J1Fa{Hm(10iN*8zZG7~l61F$e<3an@W_RSm<) zvg}lwx~{t|C`l4Tv~3#zL{V(p_Us%WVp*1oqR6s5j^pYK!=P!}vMh(W)ZexWM5HL{ jok;3gTOPmzxF7HdKM4w$-7NIH00000NkvXXu0mjfM9iJ) literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ua.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ua.png new file mode 100644 index 0000000000000000000000000000000000000000..cc049efe2a4f36ffb323bb03540b0987ac409e90 GIT binary patch literal 653 zcmV;80&@L{P)3poEa@Z!#K8`Nh~T7yf`gljgFi|!f))f(O1HK{&0t-m z^>qkezMx-2P21_~+1|PL=Dd@4-{nz+5d0(z_+k7C{09QY&m@VWSglqc9v&EmNhA`- z$H(eurBX2%4B>G2-^D}|q9~r8o^l+=vaC{ad3mWMoSmITA`y)*XbI$UId$>lGysm{2q9Lh6~OiNwT8flhs^W*E=f^TI-LeE zolXJRY&Llldb)^V7>c6YZub@+3jSP()y9uI(izpv+zW!&A} z@jQQcc&IShY&IMYTP&7ua1e{dip8Ru5d^{S_bbcKIM5mu^50O9&*$g!d9&HvN?R_M z-!SZw$)qGng+gIB^z`(kf7lU1*6X#;=c8%*>gsAM`ttGuU^1EL@1oIYbaZs2B#*~q zWiENWUWda0z-%__9CoQxie=eYET+CzyJjOZ00000NkvXXu0mjfW+5)X literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ub.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ub.png new file mode 100644 index 0000000000000000000000000000000000000000..841e8cc19703f08479e5897f3d0129f7312f0db0 GIT binary patch literal 707 zcmV;!0zCbRP)jpdBnt zo$O?xx5I@H{KI^uo9~wQo}1_9oWso_5JK>m`UiikEno`(06`EUk%-sphsJU>5U1^~#i ztoZqS9soFw(*Wppy8z(#`{(@2%S!+_J3CXGolXY;bUNMB(~~4g8v$fl#+fY?3TmI{ zc>pk*&2#Z2Ndf>()1oMDnxarBgc<#QUol@^UKU$pG#b$~{rLE(tp;CTUq+*mAc#O9 zpqL*YA8NpGIAmG&`uZBJ*19&u$yJwHNnI|NqbN%0_1)dwo0}VL0EAGrS~ZzWpP!$K z)9dvBz+^Hhd22Kp4u=C{&d<*^07Ov?27|NNOl`K?Z2$-cgLAo+FFUnfUtf=p zk2#KOwOXrUD2lS%?b^BsE1gcyohcfP&Rq$`Vlf;JFWpY88C!Us&tx(z%eq{y$z)Qm z*DIBZvPzO?9=zV) p-}mOF6((0004`Nkl0zO;EQCEQBbpKnXG2O++!=#K2=Xb<=OSm+Ri`ey4Mu z^PKZJf1dO7n1~2^>JK{002lxn4Tr-{r=#pg->Y7)+wFD$KA%s~`3pd!(U?poX0v%P z7_?d~w!hVCB?!X(e*XzjsZ9yQ$cfa5N=TNKFN~Mx|!1MV$olZ`t^F1y?p-?)VP9~F9t5q>= ze44I#o{z`l?--8bL{U_nXi`yl9S#SF!||cB$*AlMz|VRC?tT@H6iOT100000NkvXX Hu0mjfQi0006pNklMfx^-ckl%Vhw_ zWHKzvN~@2Lj}C`Jz>LS^;{Xi90KjxQ6(?_QZfdofICFP*#{-N;<8c6=&)06Z`7y_F zo6SbA*H^1msj^rs@{C5KaRlJ%>Pi@M9Ean$-|zoSY%-YuAel@`OY(idFibEQ6sDz8 z>2Nr_yu5sN71QZ70L*4HrH%IX_U83^h3R6k0Dw-X^YHK>t9Q9v0HD!mPV57OkXEbZ z^}F3pTAk1501$~pl>Q>=N6<9Qk7KczRG`!80O0!i`b00nFpMCGcsvdOEXzs-qtOTe z+-~<@nH_IF`F#E;fYLKqtyVaWQxqjz4Fm$AP)N4)jhlA6-G0CS{QUg-`nuomWi{LF z_Wu5UI2<1BruBMVth~6mh(@DAdkbN=+XsWe(Pp|MmNtifQwFicviR4UD8 s(_*n?vsr|Ytme-ZKR>+Afd3!x0T->L_LGj*%K!iX07*qoM6N<$g2mA?8UO$Q literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ue.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ue.png new file mode 100644 index 0000000000000000000000000000000000000000..69b1f086851cfdf496a42485fd301fa1e05a1599 GIT binary patch literal 566 zcmV-60?GY}P)TCHq0TPl?v{rP;J49n#*Lg>l#X8@k(-EMcM)4>>z zMkDe^MN!Dt<#MTKiJk#$Hd`up64%@ zi`i^e6y-&LEXx3JyWP}`#bN<~TCFyjOe9Gv7K@wBhN7q!4_Y#r1b}|OuVx$$hsWc2 zz9|hfIUEiHz+$lgfM&B9i^baQwkV2LtJT=8qDAiYdg?L8Z%7kxJRS)kl}ddCfH6)a z5`*U%0MqI8tqN3) z$Ky;U^N7jia_93|&s>wyhnFNtPN!49-}HUieF1Ol7m!cud$y6`p8x;=07*qoM6N<$ Ef`B>r>i_@% literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uf.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uf.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd1e6a1f73ad2c54f5e4f9c399f48732dc3052e GIT binary patch literal 616 zcmV-u0+;=XP)f zc#YTG=5bH89A@^+?%CO0Oi>j0N&JBy#;?Fj{M8dQ8jWhT+WCBTxm@XVnjnZb6qHwB z7)FzlN~JV0{eJ&h`U`<2z#1n|eWlAjq=(Y=*B)ZZsODQb|J|4hNUZmCxr1g0NUDlgY&4a9|kr9S?Y(*D%Rs zlH)k#9f1B&p64lwQr^TH0s!Fi`OsLF<@I`9E|(1x5JeGf>E&{fWqG&Tp>CMXW?v`j z?PQC^g3c(zF!TA`=kxjfegGH@2A?*Xx|>i+BoaYPrBX4{14U8d@i@}BUatn2+-x?z zUM~Q2yWIy#k|c&0aPQ7;~HL) zq;NQFz>9`z+-|pO&swb(0MzSs158F!<2b(G?-3(O5=oNN>C~{xE|bZiQj*DJG#X`D z_IA7J?@dh4&rT48;c)15Izyq*yT1zT_v`ro3;YAeCXGC%@$6o_h~P2*FR90Y7XT!2b+5IXPJ=j_5H-lG5q4 zBuVjj96+H^Q1r!Ou`FdJz~|@Z)z#I_%?$va=LsPU!zk}(x7&R_-_z66`hZHM5{X2z z+3dG3&gF6dj7H;RGSNua0`NTVbUGW21|g)~Zhr;HvMfo`{{H^Q$A>J-YXY{nx7}{H zvVMMkRsfHWkAx78WJ!_$a2%(&udlBx%i3(Vd_Mm*?C|i= zY&HX+C`uo|S->P)%v)NoM7DWNnYBd1FVljLf3WXSkDHICvc>G-RR4Vm6 zfMFP%<#0FzgTd`~dv+}r3+(cEJkJ9-j>B2BTJ5zrkw^f5TrL;YrVfV#0E|ZCwToq0 z;>Sb=G@DJFWxZZsxR%Q$c5ODB=K%;IjYb0i-EQ~7KA+EtPjJ^PibNs+Ad|^nJnYKl z@_0N30HsoCv)O2xz8R)csU9A7yWLK&*W-XpCPUNoe!ssC!!_`Fy$=`JVzGq7VS~Yd z8KcqYbUIy!4F&@MNT<_}0jASwuh+xtXf#@@)&AO?%jNJ2&paUF>;q zp=z}X0Lf(1>2&t{ePaCAqiwfZt?YLDWHMn{R-sT3<0YS8$Nvxb2K2o@2QsxxYXATM M07*qoM6N<$f@5XQd*Z8Vjj zZy>R<5X4w&WnrHtP0%N>wG7x;r0_))Svw0!7qGF=QZa>?7!X7W@aTyDMU(!V0{4p0FdBDP)egH>UO)H=V_W|7)Bbcs7?#bPlG!*;uUKA(rf;bybByXy7&bUNjCfFVLityX)q ztk>&Kr=zOsY&M%rCjEY&{Q?KjY&M^{Y}?i}joV=sV87q@dc7ZAmSq7LkH>ETSZM$N z*LAs(f1HC{E(c(>T8SF8R4N7FbUKLwls%nPgqACz3utyAR-P ZT>-WXL*43-sP$cj~qK~yk5MQny8F&a!3!Q?kE_yr7B&Ay-_%qIB4+z|HMFpzOyba&Tr zxo}S!=j@yx=jA^}IOp)w0`S@X0e=c`KA-&p7>1Efrzxd`kWQ!bJpy-Okx0aulF#Rz z(Zk{JAon?dF{Y}j{oHQ1ZH6ESjYgwbELN-4_GF0gT6E(=($gJ$*};ClPo+|v^FpD(IbSRm z&S)Z$06;1AJ|a;RGnotk#+cpc$9HnM+zZZB(=-6VV9@F8^?KoO*v*-`y5&G10AMs4 z-941j^?Get)@uO$e&24lUavQsO<9(AyPZo_x)s`Hvl$MDgb+!RWLf@(B>(?Se;x1! XUiw9ZoiIq600000NkvXXu0mjfoh<07 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uk.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uk.png new file mode 100644 index 0000000000000000000000000000000000000000..adb3b00ae8019b75416edd3e0f2028ec1cf1f47d GIT binary patch literal 577 zcmV-H0>1r;P)0005tNkl>6VZUV_{(<3(d%ug@3}zihn>^jIFYhQZ}=(P!=|_CN)Y^q=*;z_6Ga{z~`%i`Ft+R@^-tm+wG}TDi(_w2=LQ3 z9*+@1JkN`w$Z;Hzhr?lg)w6(FttLs*V`Q~jA%p;6I2_Uf>h*f7)%tRYVVKEeLIqeZ zmpYj&6biH{N+c32%ii67zaI<+0YDT*jPdPuqXHa{$H!jCX0y3m?%p|r!N72T1^`Xd z$iEatNvG52^O?j2K>z@r=V<{LW2e&z02Yhoa5&t9v)PP*1wm-H+f;y3sRRJ!a`~@# zBog5`uG{U>oaLkk98MuG{VYHUJq6o6Ux} z`~BWzG6BGJIyKZjHBCJp4*;+%OI(M;QK?h_U^E(i&$u?5&CzJ|F_KIs0if6G8H@jS zw0JzeSS-jz^?JRh)9G-B{ikPO&twq~=L&*#_c^}i$GzD29mS}Yb{ zE3&Gpfj|HNGMS8~X4WPC^-bUUJ+n;hD P00000NkvXXu0mjfjGqDA literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ul.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ul.png new file mode 100644 index 0000000000000000000000000000000000000000..9f138ee71d6febb585fc3233651a826de42a1c6c GIT binary patch literal 537 zcmV+!0_OdRP)Y%7X~uskL_(w zcn>`7e(yPaw(q(3a4A9vyfePw&G7;JLjcBjzuzN-^cE0(fiW%?i!96D3OSCuTrQf0 zx&YJZG!lu3q9`xh?Y7Lw=ksO(7~{oa!7z+UkH_Nx!1KH&K%)l~MTJ74bULll{eHi^ zYqrUaM&o=w-|MpI^?J<$Hk%Cqbh}-ZE=dvq^m@H!v$@;ti~~511AzH_zFx1Dx*!NN zO(zlwhr?mF+f5x)o6QCQu~>{43T;5WUcdSN762i{?REn|wOTa*&^0P5l?nhH4hJK{ zNY7V{$783{`RpeCf<@tQ7$Nj*w_Gm2sI|QKxlX4u91i>a{^@jjmeXprd_JEMi%O-E zGA)3NHR`^I}O3h%vEuWvQ;%{lYUnK|b$0ukXmVZb-zN8rB|2#3RKYipB}laeI8zP{Go z<>27JZnrxej#8gEQ%ttlq89&Q6-ScWXxuBxm;$`L?Y4B(gMI_G7-`8^77{9=JxhB+pD3WAr_0d zTrOrD3VQOlMcQ+c10H&v>y;W0l=`?_@t}fov@Am`XuPC3-1CV7|B~X>7 zXJ==fot-Rpg=}hS(&nYM2hYyV0vH(?sZ$5xa2UYAz<`R^m1%EpSH`j|kB*MkFSKkn zYcLoN4-bD^7z_Y(oyW(=+2HQ(4nRjoht|f(PtMQJkB*K?r4oPMr>7^~m;g*nOt3+X zYOfM-I-O3ZQ)Th^_y}Neagis>=kD%qmJtdBLHHAai;D}T zJt(-ky4u;~_?-Nn6SR5J}T3uaLmM$+ZPft&YXm@wl z?RJwMa=Bb%V`DOzRPloD$BT$`Q=%@kj>6B+?nmIS@eADw_>(U7=A9dG!{fr zYB0*mlr0No!AO>BHvRz?v$9fFnws@26v;{oODh)2j2TWm~P*u}#DcR;!iGW($YIu~^LG@c>{LMx)Vi97hPLR;vny zB9%&IG8w5<3c&02US}Ya$=2)j{n^-F)%$^D_Wp>rb_aVHmU7?DzZSayea3@$~dW=Z-HP4u=3F zlA{C5idM(taj8_Q)oT2r$z%ecR;v$Ab9#_j(OZedV$1ONa407*qoM6N<$g6twVe*gdg literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uo.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uo.png new file mode 100644 index 0000000000000000000000000000000000000000..0340b6d03416fa966c0b2e8970395e09e140558d GIT binary patch literal 606 zcmV-k0-^nhP)RQ z<{93^nc925_kPZ8&iURF7-RU&AmNwe1Ng51&1UlrfbK<|+wH~}(=_e(`@LST-EJqz z*OJ38#Ar17zEH2%a~wAq43yUrs*SeYZap4PwOSQLQO=qqNl_G6tCcK>L?ZL~{LK@D z!{PCG{B#N-6pO{=O_IsvPdg|9d_G^jURTZ_7!1mcp+_PNh;w8DO*7 z9tmlyqG&WKYc7|If-Id*13;xx(e{Y|U^1D=58ZB8LAGA60f1o`&0b_OnTo|C0O)i| zj8NTRPNligFvfvEV6j*z2>Sg#00@Gh4IoL<;c#GCw%u+kXW(!+ zve~TC`JV2+-|r0ugZvFG7E3OdTP~O1l^nvTFzrBZ(`aXOu~T1`Hys*yau4=~0ALHsp{ s5V~HkMx)VeHotyl5}!Z258$8U3z7%h*~Ah(EC2ui07*qoM6N<$f-77Gw*UYD literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/up.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/up.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a1d38d7583f7516237fe38ebb33ecf0a919c43 GIT binary patch literal 685 zcmV;e0#f~nP)SXCIf(vj}Ht$tyX(`d%IL#US2rH`FwUdo%8vew|qVy0K{T33;+O>%VnVm049^^ z%1Wox0H9DP`u%>d*ZVVII-LRlK@eAZB9Q<9wOW0pFBS`qZMWMGhr@SA001tR>r(7? zy8xikXoT%alFVka7{4f=&vT4Ip}>pV?e-?1*=*WuHnCz6ts;lR0RRq%gID(Zy%2Cb z9swX8k7ENUiUNRQv3MWQ>2&U|Cs8912>AW}OXVhjpRiCUgaK$Y8p47T1LSf!j&VAj zFh(E@F#tlyVzB@~y9gRkR0(gCWO(v5J!+d>xH5!d8l3uTmL?YpE*ladq zmnlN%^YfD=N#P`qMkBA+%VRtq&z&Uq0GrL`^7U{yTvgF{JQh1=ep05B$piqDN+rSx zj54KZnmceFb*osf*W3fcFb@F?heMT0wOXy@a{2ealHlG=5keA) TfhFW&00000NkvXXu0mjfCNCx` literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uq.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb7f505109971e0bd98e5fcdc2f59c943f658d4 GIT binary patch literal 606 zcmV-k0-^nhP)1xPwJ59D%t8j44Rlfr7Uj>SNaE62j_Wd6l(^sUDSi9pj`RE3 zyr)ms`}w?jy7%+kVWKF)C#8Z9>kIgw06`Ew2%sn`9*@5Pz+Q>2!(#sCd0z%eR=z-CBNnM~%P zK{BS}@fZLKg~F4Vt5kNo9ROICRW=7Gm-Tvmxm?OK%w{tHU>K$h(C_!rAs7tG0~`*= z9isrC*XtXN271qf!9WI}(P#j`X0s_?72$B$>2&_?=Al-r6##g>-ghRsTCD=Wa5$9l zSS%Kqd!8&imSz2Zzt88BGMrAQ{eGWHrQX>^48xElDc@o?o7HNy@9d&7UK%i7A zT`m`?X*U{;9LL>mH)Q~H`)~dH{FKY(?RJX{=kpmYiOFOl-{J#6rBaDRA{@u@JYTET z2!fD`CQ`fIMupSq^d-P%v-#`E;czGxi?LWN8jU8C$yTc+isE1}FququjMwXB7)J5; s;HjF;W+)UIjYd)i?E7c;1^l!A04f&oAMt=3b^rhX07*qoM6N<$f(0xQy#N3J literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ur.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ur.png new file mode 100644 index 0000000000000000000000000000000000000000..959804cd94498599d5e680a83343f22cf101af42 GIT binary patch literal 690 zcmV;j0!{siP)C|xP*|aVuMRwK?SD-g`x&+OrlLUH)&N|BLasUT$FSWL{V~yP{9cNKspT< z1+9sPhX+ArG#XuGtyb&q?(Sck5Yg&fI-Nc|Je*FaMAYy1tyU}7D4)+0k<;mX zdwV0I=jUgRm&;`l0@Z32!0YQP9~zBD02+-7TYcDsDo zZnwF^CX-1%x7+Oi4h|0P@9!TUAD6qWFj=8cFbs2abi{``oo;`BAAnY?<@2+%GlfFY z>-9c9J{%6mk4$d0T3pKIa`Cy_?FJB!$N4ZGkEhdV(I#JCUvnCbMq>d_Pfr2d-Q97o zg+jq#FmP^*79b*%$poO)Y6%1)k%+}&;m_dYTZym7C;$Ke07*qoM6N<$f*$-arvLx| literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/us.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/us.png new file mode 100644 index 0000000000000000000000000000000000000000..1d77b1d70537a413d909b19e7f4c6b201bc15c9d GIT binary patch literal 674 zcmV;T0$u%yP)!KYxCHIF6fP{C_c-t_hL6$*vs%kc2lQ`T2QwcXxk(-)uHNK0c0*j}wW6R;yLfrqO5=0MGM;kb1o? zd(t%R^?E6a`ZtK#Y+jbZVr;+P2QVIw0Wb_xDwRAQkI`tfTCE(%Rjbvvw>P>^5xVQkYzrU|y7KOuM0FopX z3Wc?Ry}dmEE|*K)EHW4j0CsnG*On-s&##EH)NpfiBcI^l;9xbtrQL4la=BnISSS=W85Q&5dEV)C z{&jNddTAHJ!C5UK@K&Z(v2pY06Y6^ld3~~q}?>qP+eSP_U zEQrb&{N&1RR&<$ArQX*!)w=W;p6EZ9M-)v8b^+?a-8a2$u9 zkz)n5S`8s|W5(n0PN(x+8#$3#mL*AYyWQH3EXxEz7>4mw1&&>m$z(2<3(xbm(`+^g zf@rl`uc-iITr3u^m!(q4+A^EX9|7V$3X~% zuBTkx?{`U(w%aWsB;eZb_bh_%`( z5&-1$`Tt*XDwSe`>2w+f5VkVGCD-e90O8C5j82utCl^7AM zC>eB7EH0ug>Sp^79O~3DgLKrTljH}u2wKpgwP=SrxCo+F2zBd{PQ{8&4kc=cwa}qL z#k}D{$V;P`_g<&hv*mo}ekbQ9-{oSGB*AyW0N;!sga5z)-%#uK`=wHe=XtN!%PsH~@&p<0`Sk;m~ccx3~BB_^2YUudh!| zPHlgY&Gc3)jxJv=<5)9KyaU1SrDM#tmvZ|ec_`Mk6q+6m6i z&Qwe;my^@PVzF|$T&-4v!63(R(nf%!2Moi=X^xMNQQXZ-us^tX&FAx-ogI=Sw-IAM eH@hE$zs4`LQ9?CPO?xW<00009d!Cv9%+EIJ$x8nC&!$$CSfkXEa$R4SCj<8hTr1)#01Egp|cMw1FeqfwX36^%y2;jqDA zAR1d+Tf}RzSP0SU^^HbD6vaRwFf=se^ZDq6dU|@6mzNI?4ip4pvDoC~BungeJL&fL z_&72$Qm@wqK_FyycGmCrpPru5V4mlRYhq$Tc?AFjL6EKy0HD+9-rn8_86O`fFq6qh zg7f*j#bQz3qFgQqz-Tl|`YbFg0O;@Ur=(OW(Pgobl}d%U22cyx3G zz+f=2u)VzrrG05nfE>sZ^>^C|Iplp68pJn-za(+~39PPvG|p Z{0IIo#$xdaS+M{B002ovPDHLkV1kyLgsA`k literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ux.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ux.png new file mode 100644 index 0000000000000000000000000000000000000000..e87b75546c5db940206bcf3b68534f1875d8b56b GIT binary patch literal 575 zcmV-F0>J%=P)uo$d1!D5J&1Umt*EFqOufHZxOHHTKdt^47z1v5l zk!hSvCe|6O0JGT)Kqiy%csyph(P%^|?e%)1C~_P}2ywgJk|d4CW7~lBdR;D;@5fXs z1wasl&1O@nR4Ap_>opJv0LbU_*Xz|V410ifyZsyr00@V}kH+Ki`1ck)DVD#< zj%-|0pU(#%nM{7_9q>F4AR3L@0ubwUz1?n`%_hSzx~}i{ds&tfi3H2C01U(EbUKkp z#2Ua@yA?%gG#a|Da~vm%qAbhRYW3&m$LVw`it;l1>xcHJQmF($lB7=!`FuVD*zI*P2_x}r6tyYCX;eJdc5~tIN zQYwm~S@&QtFkPCaJ+7>`0II5*Swf*uJRawHURBlmF7x~Sgb*{p>-DlM`{;eQf>x^q zz~OLoyWJ<(?RJaBVkRJ$%e`z7`P;|qa=EzOZkNmT-&OJbReS+&=oc8(vHp)XKpFr5 N002ovPDHLkV1lty0%-sM literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uy.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uy.png new file mode 100644 index 0000000000000000000000000000000000000000..b51e8ee870f14ae9c5f76bc8060982c49f44225f GIT binary patch literal 726 zcmV;{0xA88P)D~4L5UKq#2?rhwGhNK5i7eO3W8QC0?|eV(aK7j!$y>p`2*BKPOuQM5lLYo7HVQZ zMBP^$EXR2o&%6|m_omwY=G*&rZf16uhY*6FG(P;W{UZX4#bP?0o~VEhS}vCpi9{6B zU@(kEqwRK!y(CGVpPxIO&I4cAE3jNH^?H3Y8cn5A_xJYzz~k`*0>Q_}2So^lLKFx9 z*VotY@9*3M#A5N=+Z&#CyIm>{x7&>nayT57N@X^isnu#qMyJzp5O{ie+WmXkY?jh+ zxm>H&3gcH-SCj?^fxEjq07#`$Of~=j)M_<4ND#ziGnvdLs}Yy<$%ZnptoyWKV#4f<{X;Ns$f zK^6*yr}Tl}?`IG^9uMmhsZ_czf)Ol*-zB$-Syz*4DXx7!adJW8NYC{Vj;wOSaA zMx)_y_{+6N3G{kB9I;F$yS%)-xw#=p@|d;X&B6bd-CrQ^8@v^NgnoT@#sB~S07*qo IM6N<$f)?32CjbBd literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uz.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uz.png new file mode 100644 index 0000000000000000000000000000000000000000..58ee470185ca5a4a093d49efdd61cb7a1aeda038 GIT binary patch literal 527 zcmV+q0`UEbP)i7FzuUFHwVzC$q1g`NV5()NqKnU4xw`Q}MCI$z*z6oo`GutJSKi>Tb6aMKKr*x?HYUEOs~?SPuRFAFsa+_yum;F=?GK RBK-gW002ovPDHLkV1ke7;;sMy literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/v.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/v.png new file mode 100644 index 0000000000000000000000000000000000000000..3aed0031cacf3ad6303d9435a42333a56835ca9d GIT binary patch literal 423 zcmV;Y0a*TtP)HQ0003-Nkl2XiY`I*%Hn-pJTLCR28jVJ->jJpn?@5xJ&u8EFpU0992ri-I5kxZQ3X0PH=VPN&V{WHJGuCSyk2d?FK|q?2?1_4$?GbeJF}@ zxm*Bvo<|7T?RFfJ%(PywUw+dxx7#i4EOhkQwhh3tEc&K|;a4#L2Eac6d;!#^)mRhK RsI&k8002ovPDHLkV1k@huzdgk literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/w.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/w.png new file mode 100644 index 0000000000000000000000000000000000000000..008b3613484ed1bbb12f6f0be6630cdcced5fe67 GIT binary patch literal 496 zcmVD^E~!LB2r@DPPACWk0Sbu7ah&`89+cpEy;dp}S(bwmXqt9B9>uWV?{~Z1mpP3_ zV>+FFG0<;Wtya9+Y&MCgUa#|^q9~)$h=>-8MJyKMFrUxQ=X3H1yb8Ho4nQ;-t<`F# zY4&VI6ccs%Y~AW4!}$#ER?K`SQKP17ywwW*S=4YVHkY5 za=H8>0FcRKX0zFDw@W6I!{Ly;gAcV*sRUrTTnchH9G<(O>pFeQCjn#3vaEM*+jghZ mab1`G5Gnj^2?e1bc)XK6{w}RaGJ4d*3X}@;uixttg5`FB4!=9LE4)nkMpyqsY_LQdM>9gU@Q3 zW-Wjyia!C1&j|%8L6?wnkmt|?&c9JB0-}BvT#*r+-9Q%L7F>a@z&)hR0;WnSxCKdRs(1NT)W-wa{{Z<;c%GG=c02ypP96(0qu5M*Y&b2DW#0D<#GwY z^E^pR1>kf#0njvUu~=L#m*H?|+ctLq?Du;G6>K&ezT$el=1vqvhG768geU+Uk4FIA zZdWv?(G3@dZ<{bhSnktYw&k#r%h>b`DAt-jPbBl!(w^}b7xP_-%+1YP) z&d#7hMEIsud|4A<0{l|fb-Uf}`FxIuAz|HaH(l2iMFDWRTm+*;0jJX`48tTz=JWZe z%!Kwa#?mw;qG1^FJO{AdZUq6#*ipe4GfngLdVT8^`MxiH`Z$xju3N2E08G<791fCA zCZgl<=y~2Jv;BTA8Nl^;JUAc-0+IddsA8678AZ|cdIeBbm1Gavw&hvZbq!#%*~q*> z-}hk{p3i3h!!Q6a3_~PP7X&zt!z%-TPYcVkr1e1@$EvC>77M;CiUNS^x^g^dng+mZ zHv4>u<5<(Qs;cBXQ^puC%W}EQvMkSY+qU2Dx6DSn-|rtw*X#ADz7ZOBM8u8#gOusV dYXba#zz?JukpQNi4>JG&002ovPDHLkV1j`sxL*JO literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/alpha.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..91907f256e28c86774b8ce4260234f5ca0cdac6d GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*eybgy1C)S5pFCY0Lp+YZof_MFL_y&A@^l87EkXqsyjCz51aMAe;G5te z8^Hd6K}LkVm|w+r^K9LmZ)Q8$|K;=e)O}_x>EO73g})|}_W}d&2YE)rW82S_f6bp5 zq;<^Vd~wgk>h)7jeVZb*^vhD|Yn{dCEcfeez1ESjw)EUxi!jC>!uukEXvwJb*O{oif5P948( jc71zk?!au~5V?QZ$tOLDJd2ruzGv`s^>bP0l+XkKZViHX literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/beta.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/beta.png new file mode 100644 index 0000000000000000000000000000000000000000..95edb82f59d4cda867805b03112ad4ba60a4a6a5 GIT binary patch literal 382 zcmV-^0fGLBP)l)Gp-GMO%A;cK_-FpS< zg)(r?mD7zeZQGs(Ii=JzO<8izl~SOkLB6Au(t9tZWQ$MNBb5P}eL8e~F98Q>UW+qTx) za}2!qLWp^u@1@qd?|b<4ob&fn0K+gKgw}OUDKW;N`2sR{NWcMo^uh@tV2ochsIEV| c%iv|*0PbkToCs2G7ytkO07*qoM6N<$f=QE}8UO$Q literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/chi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/chi.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5f2f28f499555ec79523d8adf36a3b5c09f88d GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Ii|xJr`G_5zI(bjhIkx*JMCa$gMx_5^pFJh04CW8rl`iU1kPy=oHrPw z8cQ5FZyj9DTvTxEqzb#jMejCSrr+|LKS)OO2!{ccp$2}zxsWzp=Y&Jfw$(;DO#)I*bI&_C@3k-dTx0+ z6v$vWCb713-)aVd7&<8Oc0eSa`tNompiMxMh8OH0l@y%YXzcl^<> oES!pyv?Kp+3vpoG!~cV&{H|x;clM?4fI-0E>FVdQ&MBb@08S~0mjD0& literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/delta.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/delta.png new file mode 100644 index 0000000000000000000000000000000000000000..847f5c1469dbb348de397f17e25dd88cfaaf9779 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*QIRVg%gum7FFaiwLp+YZowkwphysu6*_T!6%_+<`8hR!PZgK=cHxDxd z=?6X&1SJ}^CkWhaJR++8Q9C%|{*Rj+5BIjmzhboyGtOYEPxzqcYjBK1Q6Nw=^grA0 zeasAky^kdxz5k>dHBFV}+|DyojF>f->W4&jPYHUxYnr3B*7M4F2NdjGpV(i&UTSD; zeE+-boUD5fEc$Y9@A>Y+!tlKET8ocM)a!~jzwP>hWlwyz@xLt6f7l?Tjfdgo18>dj zZ6~5;Uwb&m`N*m6whqm=H4Ho13R~7}je7m(6Zf}`sfJr+J*Q6n~1rPDy66`n4RAs)xyPCdxWDk#u){F&$i=3pk-7Y^K37n_8pEMT^} z(8TxRfVIcH(wl2epRQ3CI{92)`0z1_f=S$b&P+lR9>}xIUwc`xWlr&XS;4*E^|{w< zy}VI8am~Xy!cIN4Hy)LrwG8*lT>Jc*<@dCvATEX_Q{+^3h^^;m=%`rbD;UTTm|c5m zdADb<*RdJbZpEyh-o5txlc?+-L7>9@*Y~wvyr9m==}~ZAyy$?robndyJwP`zc)I$z JtaD0e0suLQU(x^o literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/eta.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/eta.png new file mode 100644 index 0000000000000000000000000000000000000000..206d0142761401395213686294b78561c25d17ae GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*F_oKtjzj{5u6epRhIkx*JIzvuoQ#(+U6^Q77k1n4D22mGFyZm zEwDHtH{)jF4Q5UI?fasQUe@@=ExYXH^1!$DL8_<&qez3$hIOy)Ql6fYS;cAEWFPxdo8Ygrp4lCPKgUe5U`vAE1_R&P&BSv!p~v!ri~3bD!HLCr@=A{;XaC~A(Oz!5Be~&J^OQ@QbguJU zm{nsSBlz{}&HTW5jFD&K3?7{7SeAKe)%sKWS1@of?2GxvroTPO(FEv222WQ%mvv4F FO#tELb(;VH literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/gamma.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/gamma.png new file mode 100644 index 0000000000000000000000000000000000000000..97a09a08c45a6c7f9ce729f9de7844ed8af47eb0 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*5yLidCj+3+IZqeI5Rc<;ryb;NRp4>BXyM@gf+LSX`h`Z$A&y;)ISjK8 zu$3|YYdkXH56i@sBh2qps$MKUYUX3;c5U*^(lm~?1P(hD4n-5GN5aPo85ojz1owWg zv7vs6SpAbU_BRu$MN-N?tPjqmHcY+c8-pW```PTN@K14iVp8Mo3HP{aWU}0 yoY%LNlvd4IFTPtt{l4o|pT`ePS?-JfVc6d5@OtBxC(1ydF?hQAxvX`sfJr+J*aoPEgY6XBoGd*1#Lp+YZy>?KrMUaOz;onWB5(oAY2TrdGlCl|!vKJU- zFEsAmx$exG(|Px7KcC#q5ud$rcIAzy0uBs}^_*uc^_etP-~V-GV3-oLW2(4X(5X4b zSuBiGf+UiYc|<-e__gsGmttP%lC6D)?{fFW1ZL-czZ`Y@((ye3uelT%7JQd;vXFWB te7+sSm8iMJ$7XysFWjZYq40pc!CZ%@?;*QSp(N0e44$rjF6*2UngG06R~P^Q literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/kappa.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/kappa.png new file mode 100644 index 0000000000000000000000000000000000000000..7a8571dd2749b7e6bbc3c1969576a2e0aff20a03 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*ann`dS6=~z&U?BzhIkx*d+j1;ivbVY0}XQrGY_`{7Wb1JeGk}nHQqcR zYUN~}F?T`Ug=&o{&CI$h^vnOwU-IGiMYkosJ%aOmxcQeeiLN;CpYiuTdyW-Z_rFI5 zg}Tgn{&UAyE%qM6*z1f9TdzfFE8VLWw9GSox<5Nj?zo_!pke+~n~gf>EEyD(1Pzb1 z2yk^TJ+Mi~MI@O=(dV*@%ekGClA`SzN_09bc$ke>XGQIQu6@eEPwoeA!}q$|+x#15 yUcP<#@Kwd-#sA|XuYcWg`%1JctJVkR1JZR?Zf_2ng#8D4jlt8^&t;ucLK6V69dly< literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/lambda.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/lambda.png new file mode 100644 index 0000000000000000000000000000000000000000..b619ecd3dcc1a19882a61eb13d65f76104b3f25b GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*2~n|yFW&-%u6VjQhIkx*d(Dxz#Xx}dLZaw{1*HspT`V#^EGh~Mg&0_Q zxh5D`tY|rS@J*sHA2+*N=JyRR?aeadKdbvjb#gp8!)>&jf%S*1!THTw%kGzNRp@W- zh`ruv#HG-}z+iYRrlCV3dC&J%y1Nv=*Y4NxUMJbXA($D>^!7rJ;bDU(t6o_2?OJ!e z^lXrzvGSvBxeN|2o!Uuh&t;6eJuaJ^k8XOteE#-t_oA~WGoHD#?X8LLbFUsj1}6^A zhVw5UThy(!elB3hTkyN2^Tn!r%e3})F^N3jZ!njT|Kyim+jAG_KL$@%KbLh*2~7Y6 ClyWry literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/mu.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/mu.png new file mode 100644 index 0000000000000000000000000000000000000000..016d4642008c5a2eea36b59f2d63c38f85160b10 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Nk-8Go{K=CE1oWnAs)xyPCLlks=(8Bk+p<5fl0P8@Q#c5O6eU=cMtGJ zsUP62U>9<}cd*@N$H)7(mi%=3FP1THcQyv&`OkO0-+jM1HL}OB_P%kkhp+ifX$P0jHp~rMuc<5h=GE;xdD-OW zwkf-`;(BVFy5oFPPRT`NZ_h2RU$OH4BCZt-9~mnjG9O*zwR;B8e+-_kelF{r5}E*X C7ICBi literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/nu.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/nu.png new file mode 100644 index 0000000000000000000000000000000000000000..0f00fc4117d938236eb5eb6c32ba21c43106016f GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Nlk^TOSFMP`#fD7Lp+YZofgP@M1iMmcd!Bb0|u1`ESx@EdDK?)oo4^}xj>hbTkzoIs)L7THE_;ouxGv!r9bo9t-ZYxT#6iu zEdtM%Y`tb#{yLSht4?al41++Y8B8cek$FOc2krFm>d^83B-UvDtfU7E2rI{WrEMu(n{&Fu$r4g^lS$F?t`VUDrVrSPa{ g>ywz&9zopr0LF!Ac>n+a literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omega.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omega.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0220f4d0cd21495d0de45a33d6a0f5b87e0024 GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Im;qtr4FFbB~KT}5Rc<;r(Wc3HsEp5k7ejTz}CVm(a3v(Bj*6e0hJ0C zw*=-*jtNa)^tp1cY*|_pa_VpFnjews-eT9HVpdA)g)yl(F#TanxV=rD;nudRQTF?_ zm!8^W!+jx2IB?!`M+bqL3B4;{TP62we!c70)n%D+_4V3HN=2R8OaDxo@+rqE@*TmORda8%JJ)@8U`sfJr+J*DTN{xe;=UGNlzEY5Rc<;r*7nJG2n4M+$raFg3Z9mtbx~tD@W+Y0cjQG z11uleDw<;og}O2d7%z$bi`|#B*F%5O>N%S$jpaWVi7a4X{iED4b7o}S{%P^9E-oeK z1O)|kPb*2C-o$Xgfahu9EVYvfx;4Ldtvg;gr+2H_u^%&FVdQ&MBb@0DdiS$N&HU literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/phi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/phi.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6fc9e50b7ea1a2a986346a8321bca119f08884 GIT binary patch literal 369 zcmV-%0gnEOP)?=nRCuv*TopCxpjc|UMW@L7^C;T#MatrnyTq_55{qv=Xo#GUKU}eKB_&lZJROX zbpjAk;`sfJr+J*DdTUm_$C2`Hha1_hIkx*d(Dyeu!0EN10&W44?I_}%-ON2!?zV0>ChFoa|2E~^6#vm@i$n2$46k96iS=&#XQWSgr{M0FzCaBGS9(h`xrQ6>xP&~a!BKg&g>iZR|mSwIk)_eYEmfZ1+d>sEm4GtWTXYjAS X^F`x~V8{`m^BFu{{an^LB{Ts5skUmE literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/psi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/psi.png new file mode 100644 index 0000000000000000000000000000000000000000..92054d2b8e0b687eed39d9c0ff6a64c4813f7fc1 GIT binary patch literal 362 zcmV-w0hRuVP)_AGm9e@=`2bRF?KssO_Ovq&1tUuArZsK{=8&2Z)0X|Yn>`K1a#oU5h z@FPUzy}wZ4y|1e3LP3m?bN;U~h%vqf007J92L(igh{l+z#QmQOVB04T0qPZ>3xn*rQ=TgemIz4}R2LJ#-M19|f5Z(fq2TlmtdoP5T z*UACR-|95M>!NuFAflA=1OWgntKyu?))mqk(=-Vo5HW;ctqmb)t;cap+h7~#hGD4d zT5D~sO?zP5N4u^|`}s5X!P^el&ST?$(XJ!WfCH2?qr literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/rho.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/rho.png new file mode 100644 index 0000000000000000000000000000000000000000..48cc456e69b154f92b63299cd8a3ed8376448c3a GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Y2hpH<)wi_&pllnLp+YZopzA7MM1!|aC7-f2k#BcFI}uI2)%KzVzA!8 ze4J|ovzLTb0>8?!ikpVo(|P~1s2omy=HH;yav`sfJr+J*83Cr{H`0JY`#oJ8Lp+YZo$4sqV!-2i*)%|=q1kH%%K=8A2@TC2D_CAF zC=HMaaZ*Xi=h@w!EBRnc7dU$6gNlBIgkXmQ%YT&)!@kEW>}D=oSu+vR%>zxc|~O_-4b3~%CRsgU|q(%=c$pimff8E_-B@@3k!qgbNQ1? zyPP=U=NFud%zi)TV4#D`u^Ce?&1G_NaY;L8`MtLORcTt7sdeRTv-h>vOAi~&nQhQ8 hX{kPwV8?`sfJr+J*8STw$44r^N^E_P~Lp+YZo$AZ$tjN=lcvH3@fYZZ)NvME9XhIW<$^#ae zhURx$RINYmvhjOeuJ`lTbS1&SIZqV%4l{{ucrc$uQ#HBg&oRsLeud{e413F6dJG@U zzIN-|+hXaB*O(dvngo)17H(DB>M`kDsitf8+r9RtPoh?Doo1H0=ggd7%~lr<(Jj|b zyqp{rlD&7+^e4K%9_;p902??0Zomk-fw%!1;0EXfxB+b7cOW6&>`V0WVo#Q|`L(5gERN$qPud4PY%kyi z{3u{uS9oyom6EmAF-A)1vMl2`f^rV9P1D3VPv1?`IOiZ)P(TQQ5E4R2F6Ue+1xbY7 zLEra`v9c_a8)F0}{y~EFeV^yqIhRl108j_U7>sdU*ZE}IHcIJj9T;PZqG;RpTs~v$ zwk<*k4a1OKr4%6qxE=DkMd{h7dUC@ZltbK6YAbgpd#-i}{h)^!=l~fZqiC13}EH*U&1Q Qf&c&j07*qoM6N<$g7GYweE`sfJr+J*SswnqTQh({*F9YvLp+YZoqCb8#ek=6@txh02YFwySv4u|=(K9gd%$(` zK;8oB8N8Qxi}+bJk2|&o?`W^f|EpQ!DV(uv)dv+z8y_JRN1;Cx4_J!(?)%hrFCi^k z*O>W$0gv6B=an+!*yLp`nZnf~LO3&pIUJ>R%nW z&dqSVu;rnNuX)J>MWtk)$Y~E-1V3)m-E^(ahC{G4wtO~&;Nhz8wfwtxCbHe$CYkKw z5_-M#Yjx?wH;?9@IpgwVPWJ6<@2|RU`tnlU5$K*d=GK{>55Bae=K;OQ;OXk;vd$@? F2>=WTb|nA+ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/xi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/xi.png new file mode 100644 index 0000000000000000000000000000000000000000..a00c3829d177de5ea599de8145998680341975ce GIT binary patch literal 358 zcmV-s0h#`ZP);Ouz153aXumVev4x|I@fa!oecyY6r!DzAv-+AB<|4$}VIcK<&7u?Jv@Cf`e zj$={%yHp^A;G7deAY#{bSH2*Gpp@D#_1+61NXIgb7$akBp66T$RbUtf&Ur3}YSFfB zR8PLCh|4a7(6;R~O^h)B;G7fns8b|_FvhIw3IL3;x~{2Dp!k?l(psmKPGmq5&|1eB z^C^JRzLYYboVzQ7J>-3U`o1s91L&nGC2K9`8~~POxnAHn zRMuKzalyLw-XmhuGyq_XxiaLVOLTK~s^{bN2>idm2WA<@_K>}J`Tzg`07*qoM6N<$ Ef>>6QCjbBd literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/zeta.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/zeta.png new file mode 100644 index 0000000000000000000000000000000000000000..683d9bca83ea455961ba22637f470c94fb8b68c7 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*F@YZ*25*2u4?SHRLp+YZoqABPMS;h)`SIN;4(!tsIBzuS-e^?yV2@yu zox!(-`7MKW0)I^Tv6jehN9@}x=joYWH##48fU8gd{!_jZ_AL&vo!rAHHvFub=F zR8$hoTpRy9dZp$0&k@x`e2krFVC&lgvNBYVn*QLB{=k?Mj(9zw>%L`z)W= z@q2J7>YQd`ICH`AOwj%BXHJGiE!7nMY-8Nt@p$sLsliufHvD=Se&9c&yxc}!mD)Y4 RS%98p@O1TaS?83{1OUL+e6s)m literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/digamma.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/digamma.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ab6f1448fe0eba3714206132e00a1b3ce0d9ed GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJytG3HVXyDye&YX_nt0}As)xyPBY|cF%WP)z9S<$IX(BGU`xWvh*jdB<+4_8 zo9EiEu<>+`;D(4YLqqGi`=ur|`aki{X=v`pHIKhP5(t7{1lUPkU;^f7rlt(tgP$nOZFt+b2)?6#nRp0=HsF^zCgG z-aR4*OjA~~yy)>zU9c{DkG9+NhS%aHvCFHjm8w=AH1TD4@Oz)smH*;=&+nARuKvkj gasK=}!wuJ@mv=CH?bq741L$=IPgg&ebxsLQ0Nv4qe*gdg literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varepsilon.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varepsilon.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3ae9c94835bd79f04304c5b68e39be5c712940 GIT binary patch literal 375 zcmV--0f_#IP)uuX0 zgni%7^DIfy3tu=aqT@JqUEk%wx~>R<&@_G5B*$?q%ksZZZQEW`B8Fl926bKUy6#Mg zj#q{6`w&9IFj$ryhM}seq9~#$!g2hvHl3y^48yW4F$_~xRnxSK=ioUw58wfOrXNec V1jITqZ8rb_002ovPDHLkV1k|AnsNXD literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varkappa.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varkappa.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc85a22758f76099117875787aeeacbbb86e3b3 GIT binary patch literal 446 zcmV;v0YUzWP)Ska)hV*Q@2>e>&Vh z_x%3%4ENp!BEly{!G~1?YCsKm2H?8xXf*2edQlXW-7L#wS*B?^&-0)6W2H>f1OSSn z0ARb_esdkiAx#X!xYwZyu-ol8jtj#O5p`Y9^SrRKER!S&0GiEa5Cj!XssNYE<$Ar6 zdN>>w>#Nm@1m}4k9|`aYrD>|FDk2__N0wzt@NTzzKA+zMn9XKMl312Sf@_)<$8p8n ze+>{tvET0l0K+h3;*-hbbUM8UpePCnKA+Ev#lc{JNKB#9shx50@#&s!`Oq#lpQ zhr{6&fNk65;6&^7y3^@!90vf?>GYKo?Du;BXt&$G@0Z=pW&;4NR%^LjJ{(cw-lLzU oDNWOVzl$36uc8LjfPVn^0$XNCsPaLfKL7v#07*qoM6N<$f^&wulK=n! literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varphi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varphi.png new file mode 100644 index 0000000000000000000000000000000000000000..a198b26921f9af5f8e825491313443f073105e4c GIT binary patch literal 520 zcmV+j0{8uiP)&zuW&dV7K=qZq0{Ne zvK$VF+3!Ip6slAzhrT5M`_aR@{R92}yymOg{6et`x-aB*l6YKsJM2pSc1Zp!pFJcuy0e9-dn zO!xlJx#xGd_Z+woAq2i@Kj6z&0V+TR0H9Xj+wFE3hJBa_$8n0HG8`z&Ow;^Bv6-oA zuR({yVKSN6w%uyASeDf^?RL8r}_PA5&%Qb#VA3y$OEE)F3ypUv>+g-F|FURjt?SaU8QOyI!v!I>Rul)vCC`a^C<#*y(h5o^Lc7&1Td0{Uk{?n+*V9 zI2>{u2LO;H>1_w+0$kS}jYfmPKv9%uT~U-?uQwi#P1F2jL}2x+r~nn<9{}z^`f5pB S+iC~^0000yXdAO?fYZZY~3Z2kt5QR5baANUa#1PvC8$Ql$4yC#_z1X-Dl^Pd8cD^;9Z#I2`Oquh$z422A}&y+XBGozLgtaQJpy zEEWJXO=EmO^b9;6PbQPmG_6vpM59qc$mMeJ`~9r5<+1*1wYtrQr-RZ(r_*V(*}O7M zU5}T(Wm$nhpja#>lS#MR4L}sdL?V&T=bb4LA!IZf<#IVe5F(LCEEbbxnd7+ec+6NL t*Aw5C^Z9(eUPV!KphVxD{1x~JfgheZ2g)B9vbq2O002ovPDHLkV1lld(=Px3 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varsigma.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varsigma.png new file mode 100644 index 0000000000000000000000000000000000000000..a5409dd4b923662dd2b59335466910ad94a801dc GIT binary patch literal 360 zcmV-u0hj)XP)$-|GIHoMif*|+^3L%tA%Yw5~FF8$9-}i5HQQ!Ac%JVi-_UL&YV~lftZbWLpIF1M*jB%dlw*Ua3 zZChQ}5kjVE)^&Y7005+vVHm!r>Nw8zfVb9lwQUJ^otJ$A3yp+ z2ui6Cf-!d7xL?#V3`1F#`@YZf3;-D8i#vEO+5>n1XY~iin5?d03g37D0000)m9~P|q!0^>*w~4URdg+FMeqlRU>B_=)?yd@_ybmoc9wz?D-A*2D})$4xFlYL zJ8+6+XLgroVdmW(hEj@mngegP58!_S*6TGPq|s=Y+D$E*D2nZNn^HQT&sml=+;0tV zI-Lk1kHf%zzqb=mtJM@m(Oj?BI~)#wK4L8g$K%oIbUqU3aI97FjjIZmD+4Jnw!mLd%a#F zkua-%!z=7|JD1DF^Za-`<~U9e1WOMvW7ro_N*RV(E|-VHA)QWJ{r;FwE5!5h(ZYSJii)CM2L7y z4Yby85v7z;>X;gQoDGP$EKAeaXgPjLsg5(o>YLU23y@MGBF;Gx)m<%wkWxD5KH{JH vr^t-4$9SlvwSE|I`sfJr)605#|q~NlSo2Pd!~6Lp+YZopzSDMM0po@bO(C9Y*U5Ld%4sHZZ?su)e@| zge%SK0@obAH2&E$&gLl{nR-}lkMKiv`44jTGdotys9JHttAXVQvqRlI8=mIkyxZG$ zt?TznV{2HJ*~Ibavdwwxyl2|hTGnTFAr24nC>i8=j8L8 Up%mI$1N1P1r>mdKI;Vst0Mej%D*ylh literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/chi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/chi.png new file mode 100644 index 0000000000000000000000000000000000000000..774804af196fa73fe550b41b349f228a05914a47 GIT binary patch literal 364 zcmV-y0h9iTP)xtPjX9AaGvDy%pM)18l5fTj`Epc1 z1yn#5V6Bx>c3r2G+P3Y?kK@>Nos@E(=L`XJ0RWUz=iHw>=NtgC<#_-idhaQvF~&3F zoGa;G3P8lZ?}ZS@ImYO{FDxtt06^Qe#uxy&%Jl#M5km-s5Uq8gIJW_aI1Gaj;uhe> z9_;(h7y|%n?Ttk!pXHD~#z+VWAv`RR_x`l0G3I#6V}Pr3IOj^K#{gGf9zvCD1Nl7o zx~@{nt8-FHjIpL^mSssPeQ5HVwSd<8->YewN=)>s|Dp=00P+R~;PtZ(vR)ei0000< KMNUMnLSTY`>5%>a literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/delta.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/delta.png new file mode 100644 index 0000000000000000000000000000000000000000..c3baf6253586ab872c62ccae51d725760af5ec11 GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60QQH+ErtnLZT zn;dT*s5UU1{`t$QRz> zeDa>nt%l21t(wmeef)X%k57}fUQ3O9r^BJhaNy2jzU^I8f;bw3k4L>;doJ)vzBgOS cfxivv)3@@Ll`s9w4D>dGr>mdKI;Vst07XcFvj6}9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/epsilon.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/epsilon.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f85ef3fbef563dd92dd43417f489a61ac84ecb GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60QRDO1lRbe#_dH!3Lp+YZofgR3svy#KQL=%C)Y_ddHs^0(UZ z$NS#TU-m+X!RK;|K-4tVWyUWxFGU4=$oDfibtFuf zm7uY7%JWJu&FiIKU(flRd%J1&ig)#*b+78B-raA|Z20s*#DQ_oLjEp4rj6MtlRJPu OW$<+Mb6Mw<&;$Stw0uPX literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/eta.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/eta.png new file mode 100644 index 0000000000000000000000000000000000000000..c02a78af3eeba4366aa30e51fb4c7732fd6d6e76 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60ap7bAip)Tv6`n4RAs)xyPP@o?SV5poe<`y?lk$$nzDc|>2YF>2-FMzT zAUKKl49oTQ2A11wnkT(?{(t#{#eTy4!<{o9p0j!ItiyptiJ@Yiy#DD)#d=E_8Vu9s zrLX`sfJr)605veJ4r&54I^E_P~Lp+YZopzCzS&^gd{Vcu*Y?}^lY}DS_sQiMXPf6LL zv1ftsh4$)~v)^tt%RKboh2shL1p7qsiMdPjZYOCvFxE5d@YkMU`8>wU@R-7*nQ!)9 zkLrKyq3QeUsj202Cyw(oug%(8cB`V+mEpnO_-baClxM9B3_lJ{v}ajyQRD-+!~3}% z$0S@_T!PbMKQ?w8kvRY0E@xS7w8(;nuMO`sfJr)603BxJnH5x#nI!_nJ5Rc<;uQ~F%DDtpe*c8d=;lRX~#mXLW=#<3@mI4Ef z2lv0l@crN5`P}W$6V(uzBzHRokw4X|8*=)AN07 z=z6Vk|0%_N@gfck^*j?;7!ua9HZ0jZV@@`=r}1yu?6v1MPE6A0QedcLP_}JT%$e+X Q59ksGPgg&ebxsLQ00I<9GXMYp literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/kappa.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/kappa.png new file mode 100644 index 0000000000000000000000000000000000000000..44aa91f3c746c532ba9456a24e136b884d30a70d GIT binary patch literal 364 zcmV-y0h9iTP) z&paum^mU1d-uro;i`+rVZj32%$(OQUCP2i#@1>MQWSVM!JRVx>3q|Ft$T^q9(=^RA zO-CMb34{>OrE`u_`lmn>a$CeXf7-^Fwrw*T_2H=S-iHuMy#qoBW6WBswMN8$5g;M} z?E4M?0PvcQbB>6^FaW^k!!F6pIhTyn@CYIN^q+96|DsAz3CK6h(rgg`c1n8y0000< KMNUMnLSTY}Op-zX literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/lambda.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/lambda.png new file mode 100644 index 0000000000000000000000000000000000000000..cf67ea5de45ba58bbf2a9fc0fbcfc1b490b9ed33 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60N!97wW{LoX9(%ethIkx*JMAFvVFeynPT`8?4UQ6u(g!+n5{w*gFqkPw z&)|K*sM%Gt;?cGh;{Q%=GKl~G^U=y{T2)?M=cL#UKj3FOUig7cEBLd`=6j!c1Oho4 zJI=eSOz$^5R((I4ogrcE-EC`6^9dL}_i@qjnsn4%la&EPFBi4((y?2c7C1@AE?p$q zhvVV&4nI5J*SqYNeo;y5F+5iB_Q{-9f$h(pckKBd^*Y;KbE{5w@w?kBE>Gq#H`LzG zpSfl$gMgF5B6EA6_v^cYyu4PveITW@G{h@&>$P9o7Oq}axQ(Yd@xuKFtoKwx`1z~3 R`GMYL@O1TaS?83{1OTT#d>8-# literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/mu.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/mu.png new file mode 100644 index 0000000000000000000000000000000000000000..7284125d1d9b94b23b811982b93e41cb8e463bdd GIT binary patch literal 372 zcmV-)0gL{LP)00003KNklIBA+?6PY1=^B*3|val=Vi(M=? z;0F8y!1tEHIX4W0wKhqTzVAQYK}5zF0MvE8NmzEJEKAP$JkRf@X_~SutEy`Mgt*5f!{ILU}eM9#TG?jHaMA&R0f#vCfZv0bE;>bmZ5jD-i)eOx@0^*lSbH`D)D((W_@o)5OEhBai#raszI_^?)CA^!miu SbglmY0000ItDpXD!^A>xBlZx3SK zfE(}+0PnA#bI#uTloDfXnx<#FwRYRKvMiNSLWm!~zzgd8z9@=e7!LNPX-<7F0gN%@ zIC9SSeSfwu%W~>_wFYh5erAKP$lm)9!n&?h03n1irt3PwHdRU?qP3O^z&Ur$Ip=cD zRD)L6byZbb>%SSaZ{?hmQqJ?tIVV{aLI|al)*1k)c9FFf5mQRP1pq*dF@z9fJjCn0 zzY+?2eN_O!SC~@DL(&1@v<&P%TW-J&pa*;asIU(}wxA`)00000NkvXXu0mjfjRlMW literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omega.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omega.png new file mode 100644 index 0000000000000000000000000000000000000000..3b9466db6b0cf618d1ba1359d750ae3afc6535c1 GIT binary patch literal 409 zcmV;K0cQS*P)X!!T@}Qc3`j zQaZOg05(xw*ZYty)Hsfp0Gx9Gcsstex~>7BEXzxPgEDqqXB&Q;!O>)UgJoIvA?p-E zTvAa{6jnvQN^4#4cNH095b^nZ?n8*^tdF|~M5L73t3^tQh{l)?0EnonsyDT8&bzKV zvlou*qm;7WVHj@pv+|s?2F@{F3$-4(EK6G)V~leS9?l;eV~jDDWm(_%)~U7jeV;Mr z`@ZLS#~Il1vqfvY4uKHDs($N?qUe~x?sw4*xB>72CRs*o0xrGj00000NkvXXu0mjf DKOm$M literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omicron.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omicron.png new file mode 100644 index 0000000000000000000000000000000000000000..6d31fbd95e6ace84ef6f1b317ac700c9da502a09 GIT binary patch literal 370 zcmV-&0ge8NP)0003INklJ2haigVY1n*Ph}tRV-xQu0~}_COK5V=aHl@tW<7uh z@DBi=C6iK0(=@ehi-;*D?>!<4A&Ln3O3pdPm~-yupw?PSnG19Qh%q9fwRRtpQYxit z0ZOT^>t2RJ2mla5IN#x-$;OzYT2o31A;y@h9st10`fOs1F~;7{V4mmm!?kT&<%7%h zDWxg^A_9Q-{scfNt#UHw{HRbVrDa+AzOQPswH5$kjQfz*`sfD#!3Ucagb;fJ5<-62 z`%OU3c^t=K7{2px&T-C5cF#FCg};h*U5zo@V+R1GFC9Shd|MvC1GpdX1==;FbG^FT Q5&!@I07*qoM6N<$f<&~D)Bpeg literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/phi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/phi.png new file mode 100644 index 0000000000000000000000000000000000000000..1a928d65d4f45299b2b7bd405b61624d49db8367 GIT binary patch literal 364 zcmV-y0h9iTP)~=P||~7CGnAG(Ev0rIay-G4{L;0M^<=7OiEI=lRQBDP`AnhXjNW zYrMb7Kfi2u$VE}SyyjX|Wm%rk2U_d8t{+2=F>0-wrg_V~Z5)~2dqhOUs;ZoGM5L5@ z>(5_w@_knuhY$cDgpeeOlyVDkt3^cg_(L$pP8PT(+9hxa9Kbi7cgzu3r%9Or0000< KMNUMnLSTYR8Ih>~ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/pi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/pi.png new file mode 100644 index 0000000000000000000000000000000000000000..a1e1314b03fe7c4c585d9699e614dfce48f123ac GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)608Dlxo8$c0;nVv3=As)xyPCLlStSI1`?##8JMe`tE&QU&{gF-rv-i1~h zSl%YAIUpm}bhAZ8r6OWR{iN>`*^PMel6fL#a_jVQxD+rQ{8}5E?W_58j-a66^Ho!r z7^1SX-!7~=@k8mD#QVR-CFg4Q{Jt)%xiqEAMWIQUW5&#ms`oA~E@x`m*KU>kx8u#X rR8glJ{Kh?oat}`De99GUOd|q9BOQPf&XDV0)w3Sj1(^WSG+trZafXsw-3 zLkJq8E{41;OYi+|nK4EpverJUB1F98;aQp9rKpqw051Rlfb*PNYqi$b01y!~pY?-? znpIGBKt$gA@8x^%LkJprC*_;W%*-5PwAKQ^wr!XC`KL|R-bFd*-g~XJ)|yh9=ULgo qO|NJX+4ud+(PvHLUo-#)fcXRxwJFvG85Q6F0000`sfJr)60S&>C7FjVcd2Hc(d8;A+1PO*`mH+b2oNws3wJr5olVbkuu`sfJr)60Idg literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/tau.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/tau.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad430550b442ecdcc55b7995c1e2fac5f05729a GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60IVHErvkHJhdpunnLp+YZopzA7MM1#zf6g~O*$nnujMI|X1Da$bgch<` zNoY6l-C*v#dAQ5%`t3i$lNCQ389!t{W%<~1?}rU63Ji=4@2je0+?6gxF?(pX3f$WE zb{8Lm@%q=hbWR)aY!%wMYTx_ho@kB(mfKs8&3OM|IiFj~+EA~zsn09Zp1rnCcxKdV ztGP6fk>Ls>!?Mg>`<@(rmHzI8v+#k(aUmfw8cSIYRQtQkR{qN#ptCwt>UoUi{Pzt{ e;#C+JA26ps@3lE}IF1$Q4+c+HKbLh*2~7Z^#A$&5 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/theta.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/theta.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d78300c31402f09f77c5ca91245b8ebf36b22c GIT binary patch literal 392 zcmV;30eAk1P)4KnG|AU!IRJR5EY-m!Pt!z1Pc1~`oKMqqDn-k(5RvyjwTv;0u|vSS6d7ao zLDzNbx<0r<2qL<#`3rzCwhxF15mS5!;cQF+U>wI+t`OodtOs{c*Y%r2nCJOb1ad3T zT9;+HZCh$7r8wtj`(ST{+wGP%Am`j#`wxH^W8e3E-{0$S&ee6DvwMuO$o#f=?~O5t mxF;v~r2{Cgf6)cF0Pq8V(6X@sR^_e$0000`sfJr)60d9Ey5=F>o-6P_-PAs)xyPCLlkq9DNV@KO942I~zh$*fa0EDh)?X^<7r z4$xKzQwZDeU12A`CBNRo?Vp>@zT@j}Js>#o>XV~d&P+lR9xOi~ak*6XdCjb40!}=7 zrzf%PZ|c`ry65}#(#*BT3te2^*WTWC&eEmiT;|&O);65mayMVA+s2TvmbKxAtZ>zDF~-6kjZwsIc(lncLt0?tA~)rvGuo^-!;w smg{~0MLs$#ApSFS&OcWb1;%RTIMWWZr%fuhKtC~fy85}Sb4q9e06oWY;{X5v literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/xi.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/xi.png new file mode 100644 index 0000000000000000000000000000000000000000..a478d75912ca67133ab024ee8ea449bb68968c23 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60X(P4ZxZ=GF=py0%h2iy*b z*z?cqShMxqPVey0nWmX_}|$oU7}4S(bxvMu>Ah&vWT`?+GEsn8PdzFbu;hQV4;` zqDlk+CWFWL?G|9~&h9$%f8c7+WVFc^L0AyiEd~+X4dO--S@GPkaQRU0 z{p60q7d-8}@4z!>=FDLj5#g2b2QQ8{;J*iKx7)kAVHl4R==(5DGZu^8wM0>z&1UpK z`~;XzrvO%~)ve|C`y-JEFMx=AK3^aZIG@i~dZW<*P_0(E0GG>UKA!`K$K$tdHk$>| zY&N+nAfkT14_*wGV-#OZY6?IPQ@0gOf?Ck=&nXIasUp81Mf?A0KH!CuB9l-F9C*O6pO`RFbE)-Oxm`6yC$E{|GYWI p|1TmU#@Ki669DgT%Ny`&z$db<4@E?goxlJ9002ovPDHLkV1gY9^5Fmg literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/approx.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/approx.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef6f5dab254b82b474171509f3743e7f5995ac3 GIT binary patch literal 494 zcmVi0s_SV89}G7Jq?B0}S0oC2^~tsa&AejklS0aPlLN4?wazM8{S zm&;`)lVP^{{k|Xw03=D0W!dF&0hmlCJOFz|q9~?PDP}8?NSx2-dc965RaG?>i|uy1 zNF>5rHTm&BSS%J+tJUxKzwlfxm*ersj)C&4TrPhdgpg9H#B(Z&QmfSrWN@Euu~?eT zrmCvz^}1TE3W8v_+sEVavpJj14u?Zy005`c>6=(66aXZX$<1c-DHe-GQ522cqSbBv~W1gOLab<4+aBW*8_n-E|^KnO{a^oy5e`9KEe?Y3_*Xw0`znarDnWo9}d=LZ=_kdxTaU4C* z0{~su<2Vk(@Ub!7w#{)IS(XjMNRnip=cZ}0EMr+VilPUa+_vrK^Qr3^0Q$ZcMe&Sd zj4jK$w37{Wp69Q;gP-<&CtVdR>8HPKn;-};0_eJ?01EhrfG@Z6{5)89q7ncA002ov JPDHLkV1oDbmtX(@ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/baifenhao.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/baifenhao.png new file mode 100644 index 0000000000000000000000000000000000000000..624539c19693627bc2a55f333ef657a165abf1db GIT binary patch literal 690 zcmV;j0!{siP)r) zLRql#2T0A5#Kub27B=#$q~ynfl&sjv1}T!oSja{Su~W=$l%hn0g-J|t?qcdRVO-bO zt*@{9tj_bCch1w9^PcxT2mpZdlla5=Vf-5W!v+9=-EJ2Q21B7xzu#vITd&vAX!Mx_ zV8L#;Q>j$+IG@jFv)TKY4@@SL)9KXf^)xk`&04KiE|;SyDwD~k z(cp(qN{WHJc=pePE%uv{+J?REhGTrQU+N$?bp4R9R4@ou-< zolb|T*lf0RIt{)8@8Px%hXaBjOhqgf@ArF1$K!FY*DIAuUuMx`1BF6yb2h8hN+y#* zs?+I4qtQ!w%6j?;GM~>O_51yB91e$lJ|B1utOoITJdsF13Rhe%mjZzRybR8hIg7UG?q#wdOVp-=uD$gsZZbN~PV07*qoM6N<$g0&kr1ONa4 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/because.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/because.png new file mode 100644 index 0000000000000000000000000000000000000000..51070efc10f886dc762a36d25e73749c6655b905 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`Esb@24VQsJOFdm2Lp+YZy<*69L_vV{f<5;=CHK>gMXU#pIY&I<%DlX6 z^Tt`+9AZhDyVN_@Y|t#58Gru6k0$56l4`sfJyvc`JteK}Yfb`%9(%ethIkx*JJpb@#X!Kdmt~_6)1-T+qC0MQO7$ls9$>y% z&Bkrpx3|}iVJ%F>c~Q(oKXaR114n6)hTb{(g~0dw81 zMX#;AUY5qLnxnumYuU-qF`g5$3eTC|X6bU+SSS-4{(9oF%plQ&2R3SSwFsQv#Gx2s z`Pt@pAMU;MszVBPgn(^Ymn%`;=?KaUKZ`n=L=wVLN7ozw5u_*k=xEm$rd;>4{` Ts++YP=v@X+S3j3^P6`sfJyvc`ea4BW-~0j!C3?CzhIkx*du<~pgCPg&1(!TV?(h0B$71g|<}E3&-% zANC2PVeD4m%g@c{>dx=jrO_vd$@?2>^TBL2Cd2 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cap.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cap.png new file mode 100644 index 0000000000000000000000000000000000000000..59d6a754347ad2e7fb94068e40e71eade8447ce1 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`VLi{6D`J2`cRgJkLp+YZoun3nsm}xA(ojUTW(be0y8vJmsWmsX<=O8;vx(7AbHXEBv$N)Fu`N z#UqvT!k@A^1d0^OWHZHHS6rl)z`)QjC1}3q>(Gdc*(# literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cdot.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cdot.png new file mode 100644 index 0000000000000000000000000000000000000000..4f923c17780c032655a7aa14dc94f1a709565e07 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`9g{bq)lxvAC{Gv15Rc<;uWaN!V8G!Ls3)sz+_(KB)0zf}#y*`1$EIm0 z-Hm_H*y2!rI;Ee-y@7#|$)5S$zjurb4xx-G&o~~u3sqIBe&4*YPb@y$wPmI+qfIaq e3x~jucdUyvWKO+f6*~m9g~8L+&t;ucLK6UndpIuu literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/circ.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/circ.png new file mode 100644 index 0000000000000000000000000000000000000000..a27d47748e475c55a752c387bcb6a86bcf633a81 GIT binary patch literal 362 zcmV-w0hRuVP)b@ZYe^X>+)TkIM;n zAf*(%Qy<{X;s6fdfIk3yvX3@RgE3y$)p49Cik{qH-*-*Z;y6|m#j>obsvv}Y-!l;? zgH%;b)AYO3bsYd;S(e-EJ)kHG&-1Q+k|bdmJ^%=UpswqyKTVS;insCm4(54A2wi=I z(6((4lq7RrX0>v8S> zw_n)1a!Ip29*@`SwOA|$G@yrV+kNL| zv!OXX&pRHEgAx^RI-M}aNs{~zecu;FQI_Sd>j)ul=G|_WW!W@j^BH6O%`S#vSe7*npsH%yw%_C#08~|FNoD{BpvNCWf!T-W SXo&j&0000`sfJyvc`VWG6PE4P6{H#}V&Lp+YZy=KVg>L9@OAaW{)`otVp-P>7P^&Uv^J>=+H zFu~(XmCM4dih&m{%qVY64_DbW^Vj_U+RG%{IzBv=`0!D{;lOqWiMHI^S=uqz?|%Qw zYv6l%TW(Z>%<<1QFHf)teBdjPdA>_8_h_Navdn#qHTT!A^18cEhnwNXw%XYTeoqWy zI$(3Y%SV7EbCwp97K32-B8CQ=^Z!51DOPOR)tI@zD^cQ+Mcyp6E~RspO6y)nO-sH1 zJ#w0==c2fD{`+E@sj=5%uS>QiMotqr^m&hZch5g1CXNPqsrqkhi%g2Y0R70|>FVdQ I&MBb@0P?zewEzGB literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ddots.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ddots.png new file mode 100644 index 0000000000000000000000000000000000000000..c609835e5a42f761cd4139dfc7b6e93904c4a017 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`T{X7v)<8LiO`a}}As)xyPEq7Lq9EX!D17ef?T`W`J%F zr2g#K73sJsNqW{@hP3I=A3jb0$K&d9X)^oEGXgx0?vD5RC6d=Na?g40sj1qcv2;UI z64U!yzKyxj(^)z+T4p?#WXKY_V87e-c%jAfS!W;g3OLnmT9@4{7F+q&#p~tg@cX=x zUYrbbKF2l1+mxN&B$0e;%ZsjSR`r|SS2v5@Js|PgG$mU%IcL_gi;EN`nvDF7uFjb{ TPyG@*(De+Su6{1-oD!M`sfJr+J5EtUz3zefUvnmk<`Lp+YZoqCY>fC7iB_v5>wGL5`*4hG&iz?&j01EgF0 z0<_sDn>~&HY0uBc&~aj8@bit4Yz7UCAq|FZUYgI>D4*CgBT`yWaPIDFr_QY6sQGte zr{~)5abAoKoyV*FT@+iang6_z7YNLL8(aP0TD0R431y{KYz)=EK!(gKWfYCm?zPlD R$p&-{gQu&X%Q~loCIDMpOR)d| literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/downarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/downarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..fe285ddba4ab2b6092b93113f114fb899d96f899 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`O}5Cd_wECQ?t8j8hIkx*drgtA*+7Kt!S#(Tx40adjtRP~Z*cl1Gl#*3 z@7)1Lfd>!xBy=Q1Ja`(H2v7Dlle(r8`RmQ=`Tl#ltvFx%R$3V~=4=z`W<{S1;1wQ0#jg!}MyG-0_W> zQl~d<%Vlmz=UzBvS>~;6Z%ur|^Am2DMNW&HCfUZwAd!6kd$YoeUFSaUIq&{pxw@xN z&&GAHdp3U7R0-MRb9v75NR1-#U&VnUUu*S61ep&Rl*EQ>G=-S|wfw*kr9Geb@{`H+ QK(8`*y85}Sb4q9e06V;Y9RL6T literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/eq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/eq.png new file mode 100644 index 0000000000000000000000000000000000000000..21820cadf2fc50656cc6abac4a4f3b6e0f357db3 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J5Wr673Gjf4K{+=$5As)w*|NQ@N&#cQR%-nl$1?yt5o+yK?g9#fNSoeQv zV&xXoi}AQH`sfJr+J5OF14r|BXPQ8c!F;5Rc<;uN>q(puoWzkWqD9Q0Cy-n1g{btmYSd?>LzM zF!Rj`Vh(S0KX4+M=a!^+E*~?G!2^~DZ0W0_ydtM{7+O8Q$Dr7vZrk+A<;ed3zT(y% znuf+Zl$9*g4VG?pzfzsQ_F;|S!G2!Gtzn_D-(KvsuVQDDNI1ZLfaT0a6>Ei~4y{0U OFnGH9xvX`sfJyvc`RRwil5j~*LdQTU}5Rc<;Cp&T-RuFKV8>G_Rkn;Reb;{JwuUPlA|GwkU zDq!4^pr62Nvh~8Xn{~&x&-kzK+$ZW>ugN^VAIt~#${m+jI%O)mQ%B{zcy^2DQ-Tf~ zhy=S_iE0*$!;dIW{9Hy6D_v zi)+{QD+^?foA~nD-uS+^`on96V>dE6{TW{GI`nzrl%jLeRTuj2FwSSRVbH$irf{7< R&J^f$22WQ%mvv4FO#q*mXkY*U literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/forall.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/forall.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a01c859c410ff2d669a4cd0c8c09283079ca79 GIT binary patch literal 444 zcmV;t0Ym>=`GcQ;WC&wtz9 z_y2yk?>oLz7-Qg-`T{T32k_4UuIo}tg((n1m&@f5fMFP681l1cSw<;^5Vl6Jc9mtx z4`7UWo)-iGCqUr0EGv#{sw_j`m;+b$u*G);a60f2wT>2yj6;oBAAu=9O? zx7(?z`e(h@>!oR0*EQcR2Aoc(!C-Ja9-E&3+7tz2-0$}>#)4bSBs3b0k|en=9i>!U zVHv=7yPeHuw=0LkLDzK|uN0s;Z&g*-PseehD0(Kqwrz}Y8}A8#+nQ`PoB4b$`|C_v z*RBqS!~32;0kB@L7mLODe3ra>jlSh4`*OL|Gz~(yTCF-f2&{`HlL-JI&+`t2?F1l% mjK||n7V)U~Jo+EN+W|i#$Gq!U0w@*$0000`sfJr+J56Y&Evoe@BxtDY{7As)xyPP@q4tRT>~^(8~!12%J}Jcl_9a}Eef927jj znb2I!>~?@xqS0=`j|(P?!X}wLtbY2bp7YMc)y^EDesZB{T?;t66f^_8cn@z__qx>C zqp_n!;M~rwW^4k`p+^MYZ((}E#tn} z&ayo3vGUjZ`J(5aqxKo2r_y85}Sb4q9e E07r^>Q~&?~ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gets.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gets.png new file mode 100644 index 0000000000000000000000000000000000000000..702b6da64d3590519fd342b1d443265210f123a3 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`b>*HSbupmO6Hgb%5Rc<;r`d8f8;CT-ze*Ad7c3X#f2di+Xxr#s_*rC~ zWT}XV>{lK>F21I2&vqwG-7u9}?~~h8e^uiw$2Y z@FZL!Idhg5D<7*`sfJr+J51I^UH!0$kzx1KJJAs)xyUW;CPL_vTpp=|0EMxkYV6Bzv1*smOXut4a5 zqpFW=Ps=-IPQ|-#=GpGuW0?Q<@}KxqsxOmoo0UGdxq9|;BVWk_e}(6Bit{E*Jl?hL zzreQjhtFJ#Vn}#4N#`^Z!?~TaYUID3_TC!e;x#FViQ#>%uOH)luTGC_Ti?s34$)G{ zYdDqOO$v61wmM&2DI(~?(lF(csl(0xi4q+vVx5Xr#4JS&u0yY*|)-eh*hw6b$s&40>Tvo4uZ_S?zopr0P@v`sfJr+J5eU1A(`Tv1JTRmMILp+YZy>^lFh=Ksig(o|h-l(X~;M>-+k;U3$jmk?0 z>l;E_nspUl9{A01C*P+-M&{i14-svQzvmQ(8?RqiBz2*I?T;LXqQ&!Xwfps-Y&I|! zjLddbiT4lxp?8df!J%g(SAmNQgMgrMIAdSVZ8P7=*Q#Q#YaN(=F^YLb(LtN@hYfU2 zf2v`>7Nzv*p8cK14vA!jDc7U93_e@*F}!>Gpmx`jDU-g(X_n@nsQn#kvVgIkp@w1M XN9T?obML+fdVs;x)z4*}Q$iB}2pef% literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/in.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/in.png new file mode 100644 index 0000000000000000000000000000000000000000..271d61905f992c930cbf76769743ffdf71b501dc GIT binary patch literal 368 zcmV-$0gwKPP)&V6rv>}Vy?LBE=PV#=c_0C?aa>15=4Y25#V87 z!7JeB>!awRDC)ZIx=s*&Z?>+h=XtU$^JWkP0U^Y3oU$xMQM@w)L}ZL9iqiMJrfDD7 z2+uGK!*yM}%84L~BE}eUa3Y|TR#n9#AP3uYo@Yua=ej+5|6?COkLL@1Y-66~((&7T}&wARKLDW&H(afFs- t*|x21+pg;{#!s76<K0w{pb`UNxk0gRWap-lh)002ovPDHLkV1i>Rpw0jQ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leftrightarrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leftrightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..989a47dc39a40d1cfceb4012d77213382f9eb980 GIT binary patch literal 448 zcmV;x0YCnUP)? zuHVD=oZ&r(!yzIR86FBwDJTX1UvRtK&gU})*zflY15#s}=5#ux0JU0ex7$$wh5!KK zIHmxO;|vCaF9ksmbh};p3DPtLfamj>Pe2HX;}`(0*DJCzpU<1kWJRaGT~FpG$Yl}g1hjMM4ld7h?ezo(yq#bPlUjQ~KF z<=5-Qaa@+NBjV%nI3ACpD6UqkR;$IRsjlmdMgub^3`0Q>T-VLfBFnNQNy@T4NfH1! z91gi_+Uay=vl&xRuh*B$=V`sfJr+J5L#e~F7#9GA_ItWGhIkx*JMAFvVFeyn&#R1^ICC7#8Ut@AC`+g*NE&$YmdTGeHpB8;# z>+UU?@@UTFpm)FHynfCUmtD))P~WAhpp^ag?zI?3hBdFHlGns?oJ(PF@OnAtG0)!r ze0scsyn=I%NNl}!EozzD7hkibC0PQ69S>Lpdkv#r2R6MHG+%Z4@%3ru&x5%Yw-{?K i&0m_DR~G!iT>cdQQjUO(u6;nSFnGH9xvXIP literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ll.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ll.png new file mode 100644 index 0000000000000000000000000000000000000000..d0cc99f3daaeaead992b145969645ce4d285359b GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J5J^p0b*H?i;pFLe1Lp+YZy>^keSwVm;;kIX9v-HD9EU#ELaOOPV*ua>_ zAZ@{vSD<{MU9Dx(m0MBwf5_|qs^@I)+&(3!JoVk(qnQrOQXixRoH!JxOiqpb$DDK9 z%y;ruF$SY+-)o=lRgvX3_SWpoh`s(?<(Ng^VgaRNJ3c3sFNw-6ONjLAGo zQpsLCg8d=&40DP*R!q?{R62D-^MC|1!_$XciVO`iFHe8@jo&>x)_2X;|BUlyKHsU6 znzr=H!LN0N-K&Dq#GIyte-oLIUmGfwEYs%bRr$?&g@lrp_ulU=A?sd=Oz>VUYw`S^ kZB6!mUEYiXUk@`sfJr+J5U4f$(TOR|3wtBiahIkx*do7TcS&@hB!R}P1f~FQP2KJ+jLJo%(GR$dU zR#9M-*>L@|9NV4Vl*k|Rz4w{5w(PyO>+G52*>hNR5*Y1yEuL?=_I8)mj5(hRWf&6H zzFk@WZF`KD;jtqUmd_Pi?j_sCE}7CI!0=$N{M;Rk74I#dcgzS{HT@IkhHFAjNj+cP zZV59q2qc|ic`mD`sfJyvc`ZMA^4bEX1?Vm)0PLp+YZy}FV2fB^@KgSFRb4V@!A>uyf)6v%cE+n~C9 zgNWw;x85-yS@*8Gbu#8{0Z`sfJr+J5Q?6Z(R}KJ$8a!PbLp+YZopzA-fC7i>(w7W<2iW=^Wc0CVTQnLmDqmPV zecQz=&cgpb3jeeIz~3;lb*|N+G|K~w_6&3QH{aXcvB&Mnoa>BdY^=`obaYtE(p)O> zIJfKUiYZPm!P@s0^+&5HZ4G0%adpwPSuO44SyTBk0`m9 UR12g#0o}sj>FVdQ&MBb@0BHtL=Kufz literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/neg.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/neg.png new file mode 100644 index 0000000000000000000000000000000000000000..164bfa842c13b5e45098b4c1d81ab2a7ec846d03 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`9X6FFtyw^!I!_nJ5Rc<;rx|h`P~c$*eWfpRXYQX~eV!jo^^e~@TBr1q zTPpg<%AKZd-6|~}E+XoIj|_AY7`Y=pa3B0C@?tM@!?juG++E)9Eq=Fo!L?aIL0KP< z&e^=x?3l;Y4a^KJ0v+tTZD$mJnxU7uRxog9WoVC~m*%kL S(g{G9FnGH9xvXHbFtq zrGtA%aW9CVIEten-2}V(GrDyX`b)%C5d<9^92^9}?tWm46x6}ILGXR>=+|o|&y=<| zIrrq|G#61yfh9O#jJG8)3}d(3g^5J*ii{9C9*>1Wfr$dgank8@nAHIQs4uqLZ7P+* zKS2lq073{Mq}goxuMoUN`~9BdzJzid*YEcwN$PgHr_-raDqXMF_zM0+u~=NKR+Q4i z;eavr4~|3dN-GROpsWN6RE1|{eB04+wF!i_MaY1(CKt++eQchz<4~CWx3I4JRT1KxLhuy(J09+ zQWQnk_19zaJ`hE5yUp>zg1R)s(wr%HfxokH3{beST84L!=_`ooXcDo(p-yT-Ma5$`1 yt8p5Tkcs5;`ORj-P(iEJigeHXw=a69-t-gplY1P!*rDkF0000KP)!g$-hCV%+~kEJ zgaDfQ0+jUt9>9IEr;a2^+P3{UavZ0ss%e^nAW)eAV;ls5D2j$*48w5VK&~nbLjXXU zrpLDH07A$-&j5h3ENKC@ZEKo_Wm#H)Z|S-oMbTdM12J_RC(rZiG4(vJuImHCvMiD$ z?Nyo6eK3yWG))JFs;Y{j$g=F>1Q0?9;ep}xdTE;W`Frr2695oGdsXJ<%Cv2JUDr5{ zsZ8LyuA(T%o+~j$2>HIx^E}45@B6!Nk*@21T4Y(aEUW9f|4hj|-ni9`y8f`sgLyHF@Z2mxTVT3-^F&*x^dIh{_2!{IYX)3m{0sMTseb?<>a z(ChU!n@x^48V%_MK@e`x?^Fu(J0v{PbCrw0GUkY z`9<4oHUJ1ASF=v1Q%Q$!?ZI$31mJSH7Fc002ovPDHLkV1oGe><0h< literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/plus.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7055190c44bfa7f28cd4ee6f59f8c92199efd112 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`ZJutiP-mdf3Qrfu5Rc<;r)}gssvyv2Tgbo}v80IitkX=#0%7rjmK>#~ zUcQ9MW(TjI_D)RfDhU5~=Y4s5yWEy*C(bNLDN8DTyxt#VdL_`+h&SKCa@OhJ25bw;AdNEzHFTb_e!9f89ZJ6 KT-G@yGywpN`sfJr+J56&YC{r$(Sqr>Bc!h{y4_(*k)9DDb%Sr!q|lV1K~i>2W}akAc0kfmLQh z{H9cu-w7wD-Fv?D&hHmX9lze&7$hy`&A?P4ec;U6t*s3b%EqVp?AQV(XU{6uTRKNZ zNomo=FZZ(7zIXb@`A39h!L_WOjo12~smLD#=YL)DX z4an#7O#g5=+#mLOz1jq@hs<#t)AxG4jYb1NtyZ(Ur%Y_QT(+tx91cgLQ2?9G=KT&N zNt(~+&wjJnOsCV6$pk<$nS8$kBFbbk56*Bn6a?Yt*5-1#H-}6_i^U?F%^r_OBHHiw zs;b6fvD4{fCg{2j!0-2WI-M6Qix=?icB?2#BodKjc`z6}C!Eh`P17VvN~Ka(m$;l? fg#&N^{{V0UkweYyYlbiy00000NkvXXu0mjfz`sfJr+J5b;Uf+*kGX05>FS$5Rc<;uln*bD+;haxT|%LQAmQFg*AbZH9~^@K|)~z zt4ss4iVwfQP+ka-{V0hVo79Edo*5uhV)G*RnFW zxVR`D*`#xyIl4W$Cn`Jp?ZdY&CZDID1e*Paxq!WmRpH^?&oe#)-OJ$V>gTe~DWM4f D{FYf# literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/simeq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/simeq.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4b64b65c6a1e93dea9b3d3f317f0676fdcbbef GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J5Gwx^E+ouABE_u2*hIkx*JM|)Ovw}d|#+TMP4{{ZhEt;fHux)BweTO4& zfpmj#hwuxw>+HhGS=DB~IYEd2AFDr5E;GTq!(-0M*%pz40*rzMtOx!UuqpLDUNJ@M zbdcs(5ne?OMTQ5bg(Z>&CU(pzj(WW;^V^SRmX~{PZCkr4OP25Ogw&Z^%VsTG>%7Lo zA@=&~xaeT7%pT1yCEwuZGW;Gh>K^R99`*jO0Fx4v!@TD{U&U4H?-%Syw>n>Z|NEaR z&8Mf0>R3M9D~~Ooq0I2+|MAv$3QS50Omz$u3^JMbrm+OfHUavM!PC{xWt~$(696`5 BbM62D literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/surd.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/surd.png new file mode 100644 index 0000000000000000000000000000000000000000..9ddfd4db77f349593e7d2eee602b0f83acfa7fcf GIT binary patch literal 477 zcmV<30V4j1P)FI=HlxL{(WP8BqY3O5`3e#!W;Z{Akwzf90dqD8Z1)Xr21Wi}!n?gEo^#-L z4)>hr(xa53OZ!2`_NM@nB>BGI72te6XIVBLkKY57kxeEO*L6SrYyj8mwcqdOhS&h6 z)2ZV)T>(7L<2deHlmS3dl*8fB6(9(L;z>dK@@?BLNa(fEqBxEPK`4Ght3_L{*QRL} z=QQsiilX6gSo(NT2dmZUd4{>R-EJ+*Dla7WWFC))BuM~tUC&KO(-c6GB&Ac31GwF8 z%jNRbdzz-7IfM{GNR=@w8dE|DfX!y}=1-F38@L|ee!u5_#@%jb7)HfKDOt3|VgcZ7 zl>mfc$OiD7qQPMB@|dQnX`sfJr+J5ZNAK0eKw#_xu=U`h{y4_*Bp5dDDbdeI4|;mLFK^&1y0t81DvHF%4alw zy}+{VUv;IYH&>&IPVqqtK8p{Q4lY&itr}-tiDK+Ayf^(%E}LaK!%~rGg<};(-9cX4 z4qRS3IlT217b8dY-jl`WuFdMm+0tEdAj-Sc>g0p}O6)QRc#YY$pGTcuWdU>ogQu&X J%Q~loCIE)!NYnrT literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/therefore.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/therefore.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd47cf7f8c60d97f3fdeb2ee00d85886a46dc76 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`Esm)P3#5TUb39!fLp+YZonp(yqR7+w_@1{--}DbAWpU0T2anyl7M3!@ zjhlP>hIupRGK!a-T+Q_J=Om^69>avCaT_8y91d(}>@jrem{KI_kj=|*?UuCd`sfJr+J5P0@>XEg3+eDV{ElAs)xyP6^~aYQW)oddd~fpaoo63;hl_>OScCzI%_Z z`sfJyvc`4Xq-x=31c88&4O<5Rc<;r!C}aaS&*mo9q~HLH&l#4VL?dw)j8bj;P_^ z?bf`0p|1f4+vI~PYLh!E^<-q)S3IbkocDjnXJdKm!*6sH7CEhKchcdU&|uF{G0)sr zSn+_#S)J48WGehaLtpNyOWMKh;BtH0WEDl0JyjRB>54K4?p~MN^Y$LI+4)idmek0) zi*HjSf9*5pQ9fUMz4ZR`=mQ2kk1gWPu3MEQ(dK)3Nv2lI51x&^Q;W}8?&lJ4VmM%P z-um_HI_5_fWirn-xW0$0F|2vLDpTsDihJOb-~R%?$xk`4Y0V-H4)vYuUKcZ;$nR$H dV6c6_dAa|<+$Y(Y=0JZlc)I$ztaD0e0swwefcF3Z literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/uparrow.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/uparrow.png new file mode 100644 index 0000000000000000000000000000000000000000..0c619451ae4cf406ac66c39ca6662f3cfd395802 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`4bBUJpZI}7_dQ)4Lp+YZy|$6F#XyAZ!Sm2-T{qGh9VhT4WD5rrFqjuG zl@~BuYaa}15eYkJ%2LXx{dt{*#X6HY4=ql_v&qHFy%$VURC;lS+2lBbIrH<%cfZ#O zzWBXwUG`S70M*P{Y>o>;7BQ@O{cG1{6W=I?>!sa`7EEC}uq`*}ly>O!v<*7lk1aw& zj~4oHNVXmPUaNS7*Z9F4<6{g9a-&^xW~rSocA4}1=C)j~%4bz)Fw>c3_7?DH%HAL=!w^Lqik O%HZkh=d#Wzp$Pz_=650h literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/varnothing.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/varnothing.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1b6c1d9e5035dee7006127814bf632eb5bd878 GIT binary patch literal 584 zcmV-O0=NB%P)k+iJA{ARG>NyWJN7@pznNSwpK(C=di8Nz!Vy za=Bcu0AyJ`sfJyvc`UBP``^JIWRD?MEtLp+YZovg@rL_xr{-IjgXJZ;6_1 z)X;Hy6N5ufp^Tu7iCB%e6vMjLN+KMJOQxK&6gpTa^Or+$f{vu%+O4;@*`7b_oP6+n zQ_!gx_vKkp*>6wmd;j>#5%%x3-<6;Hn3}xbYq)IdF`yFnd*%vn!!)8VYzI1;!PC{x JWt~$(699L?U&a6c literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gneqq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gneqq.png new file mode 100644 index 0000000000000000000000000000000000000000..b299d23031ec9249af036beb8a18214c36b3fb28 GIT binary patch literal 408 zcmV;J0cZY+P)ftSgSQDnztvzhZ`fSfP)4@sPJaHqcDW_y;sgZ&JUDtW*h*5x3Yav8Y6me7LoclhW z^L1T~F^sX@Edbcvx^`9U%36zvAz>xQzszZxwrzV|FUyjMq?7=FhzAZQDH_M|H8XA7 zR#j!K)mj5Unx>rd_oT>LE2TUguE;rva6hksF(ye8|6SKL=bVUsocUD^rfKr+*fb3h zF~)q}pCyDiYSxf2l~PwTbFBu$Fht+#$>-_#{{asr{FRnF)4Hkv0000bh>1Kaf%)V&C_d%jNNSv@pav008IQ7!yK>Yd}^-0|2FT97jal zg&@H>Cxob^X(7mIq?F$Kg|K#+_I-akok9q=+iim;=LjJfV<@Fs>tfH>5g?*5hI0-8 z8#fsd$8n^T)~Bu|NU4Po&bfwq76`1h&8ZU(Z3}0f=Om=ftl|fR5S7DRI|sSbP1D2} zV~lNMb^wsPnlWarjWKf0bNM^x7MetA{2*1sT1zRFQfjU9nDhC(;1&e}rBwd0i1=O- z>BM`llv>D8*l1nX<-6>9y#m1fem@?MQc6OI_x@L2louBfIp^1=xXhfE{25&;eS3`(d)#>`PF1Yxc+cWym;Zn5zTXzVC3SKHz3O zfCmuJx~^^8GRB;9e++QWwQXAz1*OzE#~2Gm?=iC0A|jh-Hciv( z5bgWEu50hT)*1jPrJ;Ej+nGGiuTQ!-4-&GUdoa&)mSx9t(=?1RMEn)=mIuqStm_H@ zUDqKZA>`=$PjSu(A#ZsgrHt)NoCo7LCjXDwb2t5Wz!$^%oE}^G<{bb4002ovPDHLk FV1kg^t9bwb literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lnsim.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lnsim.png new file mode 100644 index 0000000000000000000000000000000000000000..1365188a04e6085031a6046ccf2e296cf6d7aa3e GIT binary patch literal 447 zcmV;w0YLtVP)T_tJ0KlE2e<=rK(Z{Ygb9idE9IX!jOJN0pN|hQM%Yt7 zu(Q5^eF4)n-S78}qF5y&YTH&y>72_~LPcvt9EM@D^?QI2!u5JZM5R;+q5OlOy!GvN zd#m*}AcSzaTo93nVy$v6^4@E$&*!rcqTXtSTkZS4aI2L|HpXzy`@XlIZaj)G0^r)g-dkH@1BLMgSb8HOQ$Gjf2g>((FZoC5$M z#IgWuZP#`A8T@9Z*ECI2ylzWUZa1seT9R;X3CKaXBlch^WL%r8bpP pmd8U4fOB5=9@Iz0_s8qs0A4T3#DZWY`Az@;002ovPDHLkV1jZuz|8;v literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nbdash-1.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nbdash-1.png new file mode 100644 index 0000000000000000000000000000000000000000..07cce702f4abfb4d7d235f5e19449aea32fa5672 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyro$9jSed@%lia1D-C9As)xyUfsyq;vm3!VgKuy(p*`rVH+3D{Mn=`DUqSr z#`dhMQQ_DrvjoOh5r^&`)RVdMr>27Eb0Ul2!BiEQc1AXdAI1rhVhpc$F)1v{z1{bC z1Lv1o{soy*N=C;*LPc2)-d=hAd4m8`!}H4D`^sa(r!Ac<-Sar&dg;99$7cNAmz&3s zFl(7c*Cw6W&wuV(XTY;`%C&|>iAyHEk0Ufw_q*oaR`Xmm#p?WJPv6@6*Q1yiwBxV0Gg&f z9*@;(b-7%%TJ2h3x7$ml(&agkNC*SuaybBi!C68;wQ*fL5!8VOX=-WLfrbIB*;{olbo|9{|AX^+E_aj>B=h(P&)s9*-v$iwOWY z9FBZGf4yEVm(^-D03Z|!5d^VbuZP2-&*wu?RDcIO&&y=8dkGA~q*AG`ZKBufCzHuN zJ#upvb-P`g&33Qx+-^65An|ydWm%n0N0Q`EwrRiL7nCI!;B-2x)#|$dg+f8A)e1_v z?Ljh`tW+u}ihivmhGCP*M4?dNIR01G@puddgPBa``cpRm5W>-D#4rqkAfJmEhUId( z`Fx&Er}z8)b&5)*A_(GnlNp8q0L*5y^ZEP(CAtoZqLfNyy^kNB7?!;;(=H!UaeM}&4wU|)9G|`m*?}DB*|X{O4w_6;?Tdmg9htfX)*=+XX_q?DA>jen(LjGvva0qYUA zwknFEX`0PJs}Vu~z$*t)6lGcVzWyA5F?Lw^?f|6}0JLp;>Q3LbG)~jBah7F?F}~mL z!!X#2K8m7E4y;v_=lQc|o@ZkWA!Mhe0HChxZSsF{D!At$P187z-Fp5QAcWYT_+Efh zQ^5tm7z@MDXJ_mI#&JXl2_bv{2TPwZ_H(G6GT)v2`SJP(fCqT_R+JdNI;sEw002ov JPDHLkV1i~lt1$oo literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nequiv.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nequiv.png new file mode 100644 index 0000000000000000000000000000000000000000..83427dc84ec60897226f5ac9be13a5a6a0f8086c GIT binary patch literal 463 zcmV;=0WkiFP)kWEXysH4$8oBoKM+~lL5mpNs^!ey0@umniNHG9EW~ox9EDk(lqV5F7n0K0q{I; zxm-2_)B)gmJ`BSlfVK>>EE5D_u~-awc|fo0|F`Mr`UWU0;BEe#z{&ss002ovPDHLk FV1kSX%k=;N literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nexists.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nexists.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e3e583c6d81cdb274f5d83ad06160c578d37e7 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyroWS<4%Lr*8ua-SKpB4DmSrcG^bX76Tqv#=8tTLS`H@8w49XB{~H?)DB3i z%w))apq-&H;ap!q@uTp}HPhecyRYnAaVaEN^EK<9hG@m4``^157#=WdC7qBcj<)W5 zeEwEj<U6>1JxAV7q-9lo_0u%QqB{?|O?+7;W4L&C+ zD0tCQUHOB1hD2NKeNPR>0}{?frc(MDiQP#(tbDJ&zy9&RLBDaSjDC6YM^Hd9c)I$z JtaD0e0sxn-bV2|C literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngeq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngeq.png new file mode 100644 index 0000000000000000000000000000000000000000..d3385e4cd6dce61f029f9b76541095347ec01231 GIT binary patch literal 526 zcmV+p0`dKcP)1r|V7XjjJ07=i zx%ZzAoagZ4c|QRFp#0Pa<+J`cK+`lI0rUBMGMTvB0jZM7D+EN{8w0jcDo%4 zh05h}x7&R+XHJ0o{a&xvW3kwDIt74KDrH%gmw@y6yjUzAXTvZGg#y7$#LYpqTE!eb zKNP@R`jJTFbUG2tT_=ET+s$SZA*Ad2cDpT=O3yY7!?ap02Y^!_AcQKFN;n+OX0xiQ z+P3{{L(}xTeXw4y6-6OleC~jJK5rNXF~EIg%CekDB#8e8xK;H3v-`z>FJew|?N;%r QO#lD@07*qoM6N<$f{>u-1^@s6 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngtr.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngtr.png new file mode 100644 index 0000000000000000000000000000000000000000..033a1d168126cf8e29d8b725a10ba0434d57e7ef GIT binary patch literal 432 zcmV;h0Z;ykP)1&`N`Rjh~?74fF1x_(W92tK&IDUX* z0guOH9LGdb+!{nwRh9RCJ#Bjj)>~~!UKnSr9z!+nUd97a8b<;HW`+c7wbIyr~h^)19>6|f~GM~)b z?FQg{KF>R>wH88T-B~&EopW=tQYwD~vMlo6YpnrDDZee9066Eg){L=vjo)vi%=rH{ zou=t}y>iZ{X_^O6Rn^9KBWY2I{PYZzQmblB#%~55tf~na08Kc*Gdz z^ZEP!vUgw@hU>bfX^NtlC}swnPA33BtyWtumo$0?z$NggpkEzq3e1!fG`XZLb|TsZny76MNxtv$jpJ~d7>z) zs=D9r??|5KSwjI6gS^>nEX#rravY~=TC3H95HfTPQ#$MQy61UJ4rn`hwOS1ZgZX?u znM^RowrywZpjxd)QFMQfqNv;LmdoYwc$`fi1VNxE%Hz7@IN1OU!|;7S-Q0yVhkmJ4 zx?Zp8PL8L5IF5V09zy7FIP7-2X0!RIDHIC*e*b5{=d%|Gp?14nEEXk6@_j#!<3~*{ zmwPouDTWW*Pi{0Ctiy+`(K?+D$8oP*Tc}d>f3y4DfG?DvE5W^y-znE zcQVB(V7XkjS}j2kc%B~)htAhz19&_h>-D-=EOH#TSS(JbQ!<%!W!efbnM`7_SgBMx z9*^&cD2n6pI2eGYX#k+A>Q4kAl*{GZUO6iV`~6-N#Y`qM8jT1c<#KsCodyYb>w3LP zk^}%0MLnO--~n&dYPC+M0|4D_*A>9N&??|uLV;Dx3<-_6NcZ=rpc{ZE`sfJyroWY3qcQfigg$DV{ElAs)xyPCLlUqR8Po^X#3i!ny~AbQ*;;faF2HB`nqx z`R*JxYcT$}f%8Alo|ga4JFZ0)1j$?IF#nNG=n3?)eH>tF4Rg zRreUS7(5TzmUH}yp1YMV0tI~4qxDjP7ae2z5*kERm l##XUb|Nh*jmsLkvHv&Z&JYD@<);T3K0RS6#SCRk# literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/notin.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/notin.png new file mode 100644 index 0000000000000000000000000000000000000000..d0012918e033082e4f727ec48169322da7fa3c5c GIT binary patch literal 383 zcmV-_0f7FAP)LJ!9a@F2i( z9Nzl}0mgCMw(UAEwT2L)B(1Rn?>%FzD7CG8DdoDZC7IvlRXgXFWjTrU-tYTP2$|>k zh7MwkN+}_PF(!myj2VWZuvb*br`Eb*K1Bdp>woo9O3T^02B4IN5PqLk^GPY;OS{Gx zkK>qA4FCXu5CQ-x`sfJyroW8KK;$`0YTUIi4<#As)xyPTS3UK!L}F_Y_0V0W||A=?7;cS_35-c|F<# zx)SX478OjD{(W$6tH4r`2UA$mWDhK7IJYxO`B9z2xt-TEmriC3G<0)gP%1k-LHqLB zt$$0kQY4eJco`H~ysq;csJ?&bp6c^C4{s^0dS5KLW#47pMND%0^3Nq)`M!}SttP)@ xqul(G=BY31tJh5p+IlTYc=wT?H)RiO$`du|*rD3xxee$}22WQ%mvv4FO#mqxT?POE literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nprec.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nprec.png new file mode 100644 index 0000000000000000000000000000000000000000..a929e3b024b53f8a690da1c901403673d44d83ae GIT binary patch literal 353 zcmV-n0iOPeP)>msc^zF!N=XQDWaa0kzO^=lP`SZgUkH&>s@!1HpXXUh*)&bf1~Ep?IT3m9 zi~2+aXK&MS9033kIp@~ef<9wk#c8bTx_$T|gc##649>Z>ZR;Gg{cx6L0RRBVIUlWj zYWiK*5z#bFecvmkiW@*gCjeS&@BQ}Zz2}@48SJe7KF&FFfyhn(`liQ=^ z;eWe-{_x|Rd+y;<7-RUPzTm?u00p1``~?ulvEw+oi-3B2Rmie@yWI|lLrxCAC0*AU zhKb`iH~Aaja=A#7)a&&GK`>48<*(Q4YPEVkpVQ&lY(@q+9*>z?MNzz7ub$^sDwXYa zn-2TF-)^@F06`D{K&@6o2-&v1-|q*50RS|cO_pUhn@uLaSS&`P5dlC|)mE#OBuUyt z2mwH;RMIpp48xbd+wA~gxm*$eI-QPT7#UL(MMY7@<1qj<8jWtZJDE&)o(F*8a7b{; zNs`p-^^7^4PC1T?q6lL=pU)YF`5AMH>i7Hi`~C5F5LDp%e)_mtt;*$cx-CHv*tU%j za$PsmNrEx`mStH0a5|mddoekHD2iyB&I~1ysNz>q01CiA06YOE7(F=js&pp+0000< KMNUMnLSTZxy~b?- literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsubseteq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsubseteq.png new file mode 100644 index 0000000000000000000000000000000000000000..9e530e2767f3d70ea8ca7dbf8c2324b50852367f GIT binary patch literal 401 zcmV;C0dD?@P)Ih zI=SrzH;=M15B5{&C1jZOCdY(==HPq(+6cmNE7;J^|pEUyPAS-8E6P(pk_b@5`soRX8=aP9JXp}FEb!BR_(!m1?sXle8Yrctl<|EbOU^mQSjx^w1kV^#@uLw`Rpp$^#*atPb)8ZwA3x;|gb+%p zJp6bBgb=N@wU%?fEQ|MEN_hgGkRowhBcj%Np67kv0RRAgm-@b^ls-H7eS)PZj^kjA zm1UX!iX<6GDYtC{fU2sDF&`ck08rPpF$NLGaXj7euWMkMrePRD2-aF5L`Ki2Hd@=Z z>$+wbL{ii=4W$$j5%F*3d@Myj%EphU=$-7R8oYxaLMZN!*KP3s4Ib>;D&rq+_@@8> N002ovPDHLkV1gE7j^zLV literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsupseteq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsupseteq.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1866b401e2fa89deb23d995a79a4f8e04cc3f5 GIT binary patch literal 400 zcmV;B0dM|^P)~0003mNklR*i1nEGn06IV`zz(njv;y~FK4LtG61{xcIq}R(24>!m?`2tDPvY}>7(aq% z2`Hrx5;RT27z^huu>b&TZ7?l4re}=J^St|*Wm)=%`(I$Kl~Q7iDW%T2V1A55&N)Je zlo9}f95Dn{Rn>L99?G)3pMVhJFHQ(KPQF~GN-0VyLTC-sG#!TFAU}yHe<6eq5kk{6 z-Bv}`S^(I|b*Dr^h@vQb*mYfaT3of)pN%mX<6tu<5yNL3$F^;?)=H^hGrx~lCS%Nd z*!MjEtj03Nwp!gFkuipI9?>*s2{`9k>!%2ua~R{esea0XaU2mszI%5|ZQFN|9&Crt uReY`vpUVhdAyX zfCunNob!2}gG}9Vt?P<04m3WKft0eY>rm?x8DNapbyZ3+#;mp9jbA6iPt&w4%Ph;B za{!R%`DI0xQjX)8W!W@MQc6OI*X0%dv=9OzL1DwvFRR2mt`CH6i3cdA%9z z&CVFpS|>>Y002-F#l?dbMbUl`LL3d>1K^x%t>ZW@ieeZBt@XtKgiw+sZQB}SthL*= zbzKJlx9lQgj4=jd%ouB$<^U#Sbf;&_nV)3<%&e4h&H;dk zAmU~WnE7-%A!65c%&fIu&wqn~_x^sr9}b6ko{4DX)^9WL-fOLy`F6WG=c=m8JpDDm zaJS)(l#ay%ZtD{`ry%>XW!3o}pCq_w_YuOS3P%-1LD4FF()Nh!5$ ztCWf{Ztq0^Fbo3#7-O2IIiJt#{Z-Nji#=FtLkM+UTWkBie?Fg^nO)a)<2e5OGLEA$ z=J9x}{8hbWp9Q9yD-jVjO;ci9nHMp}Ow&}rK&`JW)>;vXF^b4V~wH898^O7ZS&b8Km95wsn$A#(6+7jK1Zrt4eGjdl|Uo`8w5<(bb z&*zhKP6)Z+i4J)0kBCwVV=RRDp!Vr89mnx~IuSyNi*l-iW4V-4l+s}sl9T#4yIcq% z0OLYr#tEdT%j07*qoM6N<$g0dp1 Ae*gdg literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglerighteq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglerighteq.png new file mode 100644 index 0000000000000000000000000000000000000000..abff3af7dcdb933014f0be241e50dba2a5827422 GIT binary patch literal 440 zcmV;p0Z0CcP)0pTdL}{Fb=F$W`8?12 zspAL`vG4n7ng9R*4j*tt4-ipnEu|!cZ0d(+52_%`GD66*EZf*nO2ug!J3eD4ZiG#Z zF;dECQ-|Lr&-1|X@Ds`5+M<*K07L`;&iSL_9(6tm+>6F>M8vwTuaYR_cYMCdh)5}o ivVXKh@5SpM6MO;Y0yxP?(3jc(0000mSa<%**=I-Z|%-J8)0BqB)_i>u#xm_r9vCmwrC1H`uJG)=~s82c-2s;YHew{3f+ zA7V0KW)azZXs0@H5D`S2qyHWtB1A+)2csehKtv+49yRN^6sbr4wq!sC+z)sIHCj2* TtT@y?00000NkvXXu0mjfq*8p> literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-2.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-2.png new file mode 100644 index 0000000000000000000000000000000000000000..4079f6fba03da755909ea184176debbd6bfe8b31 GIT binary patch literal 342 zcmV-c0jd6pP)Nklfpnl9pp|F`Qi2_z6)+{x0dz3;KytZ<+g;X^mks~ZWM;w_X8r^UBD$s2{gzl6 zkO7|p7>40dX&guI{eJ=0+DG83su*KQMzkzTxWV(buXCp>rS^T_w(VtSEZ{hfpV)gp zO_Ne8Bsu370JPR2Ktx28QW|4I1^}L|fg;2?4}o(I0E{sdtv3M9xw@{k*7S~wm`sfJyroWS*;l7YZ*YH&z>%hAs)xyPP@q4tRT?VzwG^{gGV__mpPqc?Ny)fM`@|AkrJ+3k?$I1|Mk{)$cfG_%bEeTJylN53txIe&ZG zU#a|hPY%Pa_RqDKP6^U}*zWbjEaduERk@6{OQ*cP$@pNOdH(g%ysJGM4R~VByOhrT zw6xBc<>n>H!l+~y_v-gQlgW=Q)~z~~ca86WMIXZk?cH0;RrG) j-t{xTo4w+|*9LVBw+*u#?r`4#dY{45)z4*}Q$iB}gg1dH literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4fb1f2e91b0d3c523f84f4e909e1f85fea3cd2 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyro$Ey==5D}izh2RvOILp+YZy}FUJ#X*4e!v5DYrMa?L!!|CQ`Ljt?QX)gK zjqO=iqr$OMW(kb1A`aa>s3&vhPfZ2S=R_94gQ+Sq?Tl;^Ka3M1#TZ`iVp3R?d%N%P z2F@?F{0lOrl#Gsrgo?5pyuI@J^9BK?hUb;P_m#(nPg^=!y617k_0oCIkIneKFE@`N zVb(H@u1z|#pa0yo&VXm>lxq!%5|>PRA4h1W?sv_-t>(FCiq-kcp1!sBuSYR!bUo5` i_~4(`z{pm|P{H8Du;cxLd34?Qpk^pw)g(?`D}K3?~O6m zT0|rw&Uwm3A1O6-&N=72_sg<0O(UgD{QD7$rfHH=3L&)CDg1+7G|#gTf{1bntPnz2 zYjd?J0JLqJH_1)Yc<`sfJyroW9)$P#?|c7n!J~$K@0VwC?d+;(=y2j#Te^>P{?8yUB`(&kP7$h^EVl$$sE_ezsz5Asa&q-9QjN^rG3|;u8T78RR*ZGHFn(EcJ{>UMiIl}>!t3| gQStV>xdYb7n}+AK1}qfa3iLgLr>mdKI;Vst058{sX#fBK literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/succnsim.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/succnsim.png new file mode 100644 index 0000000000000000000000000000000000000000..7eafb5bd473d4db551059509427c895ec984db19 GIT binary patch literal 465 zcmV;?0WSWDP)65N5*f!u-Afz*KropGTZ@c}ao$qOu=Apj!YZnsq<^vUYFj#AonU7uSp+hL61oM&UelBNMeYn=g8EZk&7 z)LLt;4~K&gf)FC59Bxrc8DqaaxVv7jO91x!{qcBwymu0DxiZTAN1~EoTskL@1kvZqy`)r%eELsRb2$7bhRD$VJ`{Cxie1 zizdrswk*qqc3K+Oh&YW{##myx-kU%vMF;@^#+Wf?@YOUkthEUf&j46!M>dQxlu{{W z(=^kb%jJ^r@eDv!Rnw1+F#>>;aumROUsYA&4c}=32_XYNLusv*Qf=FwPNyO4y!Xzz zd<~}L#uz#0<8{+COQPuwo1V|-j6{OByq~c##pmew{{emg&fMTr9Krp*00000NkvXX Hu0mjf)11jg literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/supsetneq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/supsetneq.png new file mode 100644 index 0000000000000000000000000000000000000000..b43f091926deaaf19d55f0a596f49a512a1c6a61 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyroW0TsT`Rwba&OHUWa5Rc<;!w&McCuk1}U4YH%oIVRXsiOd#Ysr0p$sO{y(BPHm-a9On~9mw%l21 z{SJjC7X$Xc=9ZP%RQ*z1Mo)@}_fstK)l|G!t%spW8SUFe;SzKjfl z-#7J3DJ%`~di&fxYRkujdFjV)yf0upV8C-d_AHB`l3iLFCr>mdKI;Vst0I(l`761SM literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/a.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/a.png new file mode 100644 index 0000000000000000000000000000000000000000..9da4fafe5aeab01be22acaaf52aa64c6229129c0 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWM(ab9FKh-1o%3{Y4DmSrcA6vaVFMo5%b5&k7PKXBGzPGRN=h_oia2r| z6yRCN!?ZAQf~?ll4ZcxUTc_*(7x?+$$4UE*lk}dyS$E}Z>>9R=2DTsS2X?Jnm6dj8 zPLP$u3DGXYHUY0Y-~VpQ-RT!9JL9I!`RbmIj*PVQs3&{nkAFP5(d)ooHBQ0yL;*nt zg+)UFO0~il5-+1`v=qe8TD4@?6JYD@<);T3K0RRW(b*BIT literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/b.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/b.png new file mode 100644 index 0000000000000000000000000000000000000000..c14fe4f1dac6ab7d710dc32043867d2824a980b0 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWCb2b%_gR5Lhdf;zLp+YZy>^hdML~cy;BF3Mi9(qJdjfme0@VO6)c_`0 z2liWyHx9l}`1T;R|M9VtaX-{O8r)|%yy#pp`OIozKW3>5415OXKb!a}vS=zSb#Y;c z;%)i#j9+(Y%v6RA>$J`sfJysrWCSBPqGew}#Ax{^_5Rc<;ryk@ztia8waR8-OJJyD*l~G#R5oLSAsa(fc2?w4 zPYyvRi)%|ol6f{xNV&L4C&)`PHT&s{XGYz7zIWVka>?0{t;59dJjPaalIxt$bBd2= zcXb#Zdw$0I$68lS)pM1aOH;3vsz#Xzx~KIN-Zoo$#pb-G>e{a#74BvI%20d%+t22^ jO2VII%mxhgTonvAs~zqw)>2mm`i8;N)z4*}Q$iB}Ym;Vt literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/d.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/d.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9a95d8df8530ebcb7a5893e59960da4a457e46 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWX0{b)|0w{4E_=E-hIkx*J8dIxvjdN-@1(Xq-Vbd1CSA%oz>#xk>Xa=d z=1j^5*m4+r7<8{L?GSOzOj24Svh)7kll#l9H2#t+gBTg}cFKcA!2 z(DAG?EGKZ1N`3MtU%6LvoR8$*e)88cz%g>#F^M$2E+)a>`|O1;nD8=4B+I$Gq&zcb zjJ!gDdQX^xp7s}|L zHtJJm*pj>Z{qOY8e+AdR{`sfJysrWX8AMA!X5yHu6epRhIkx*JM|!Mi-Le_;^y+@EY=BD24xAHKs2R6^#)_v z0@()i;jJu>Cv3^k&YF?K2tljpZfg7KfF;T9_BcDB{5Qhxq~LI&V$i%SX;A zIl07MU)aKoPbfsfe4 zLYdp!R2Svm{Md5>s;*3wtbsLy|I3D0Gv|hZ@X2--`sfJysrWW|IV|^$UPPQ$1ZALp+YZo#x2PqR8WFKU*|FbE*N~h6Z6RM)n6R1r5v- z8koOrJIWbQew$g_mZYt1RsVeGa9|@>2*V!##%obtogEAvC(erY7|tnHWJ$Z1 zdd;)w+_hWEPu4UAojQ2?|K*g;|6{v7)`}h|jb+&L-JE-0@@8Y3T_?4EOtgG1xncho qL$@?FCBc__^Ml;pD~YaPkiYZlHi!THnyWwuGI+ZBxvX;899xK8dg9!>9z6 zpb|9AxBO@bfti`vT1!Mk1OU#to3tXsFbwOumQr%gN~xT4&N-!YnX7DiSY=?t!&7#(3Rf=55>B zw!O`j+BAf4+7ti~k(r%yTI;tF)DNc;RDu`q0}6#|8F&p06951J07*qoM6N<$g4276 AVgLXD literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/h.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/h.png new file mode 100644 index 0000000000000000000000000000000000000000..fa3c006d3324d8d6e96bde3eb5431e84a6b9be44 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW7WwAq2h@Q=Q#@T9Lp+YZz2?ZvqR7JJI;&C~x~`78wNZmlklin;%s1L!^mPgg&ebxsLQ06k7t6951J literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/i.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/i.png new file mode 100644 index 0000000000000000000000000000000000000000..58e2a69325c503ece628a44281d8f3f31322f4ce GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW77Mkvr9MERd`}n05Rc<;uLSZQP~c$+n9=lzgl`D)gYJe^R!nE+1kEazdvhbP>b+7?z1_bx-BH;~rx>;= zD=3|LQ=z1ENS(PNNOWtM(kaXJTLVNH81}H=*xqm{>%;M2H=xxFp00i_>zopr0Ky|f AU;qFB literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/j.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/j.png new file mode 100644 index 0000000000000000000000000000000000000000..592148aa81b4deca5fe1021338f129399c805f1d GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWR>|V|A;CbQMo$;V5Rc<;uQ&?2C~~kR++Z>LxITe-afXuijRRaR3mVN5 z-dA6m`TVKwf5~UF8yU@vcg^IF?PKQq UbK9q_K*un6y85}Sb4q9e0LaEnUH||9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/k.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/k.png new file mode 100644 index 0000000000000000000000000000000000000000..e2daf2e56154174a51fef2078d029b1093729bab GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^@<6P}!2~4N?RmZ#NO2Z;L>4nJa0`PlBg3pY5H=O_Is>6+^l-1l|IG*h0b`oIEHu}e>=@lu*HDKb+>i3x{%gFz9^Xo4IT#=JytLm zILIh0oERX|(EO&+`gZEA=>MA2|9?`SdGd*>(yAHvRxQ!md#U@v?seI>uT{sl__-(* z%}bwKtye2oF)j7x_gKx;wWa4$&#l|ar}(9|zQ1mg?J`sfJysrWHugn(tv&;V!aQ9ZLp+YZy=ExLV94Qe@rj56E4M|5vd#krZjZwU=e6EB zbMfu_nc+Ey**2(EUn^kY5ct6|r}&JH(z1qCOc(CnX<%Sv+TZ^APOM9asqy>uX8)C# bSgvt9pUbqBF^RGQ+Q8uH>gTe~DWM4f3~V^U literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/m.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/m.png new file mode 100644 index 0000000000000000000000000000000000000000..9f020cc1b7d489578334cee644e972473ff7ab32 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWHu;Sg7cB(}?e}zX4DmSrcIrXi!wNjEb5}7}Os;6jad11qmdJeLfbs-i zCp8Y~7QquN?;49cuV}3b`FVfdgg+`j#O8J!m|J<^Y+xf-$OrzW^v7qa_vcC*Gdp;# zoWjI#?be*)9zg~#&1<)~n@ui%w>5tMJMN;y;WLUYUFUXI&buwFw~j-w_?%0~#ExmH zGncJ=WWb}jH2*$>p!5pUzk46poIjuaYL2su(yF~YiUNX4RqtI>Vy_p`sfJysrWHsfZ_b8bMPK2I0N5Rc<;ryk^GR^(yXsll3~o}<3SL461F^aoKZ7`zq; ze{$&hWG#1G{nH<@#9jlpnBsE`sfJysrWc0vE5eUE`cmpxq^Lp+YZoqC_M#enD7$CCpjS_duiXg5Vto za{=`g(l>Z7@mBFSaWp+yaH#N0b(XzU-4lLaF{cLguTAY!88{~}{AZ{*J)iGzLkGiy zz3+GVNr|Ogii*zuZfu;rwzYAQkYuvJ##O8Sc6GR1`Chw)=hZH`;~(Fg`5ZGXbqmk5 z)SIj8rxokn5)pMRH2rMT&!(^_bJn?YyVkjgtYts5W=hht!+~D8x79k&wpib^Oz+8@ z#m2B^Ywm41=hF3WZZCbmcfXm9n!?{@Kxf!<{9w3iVbin3`KKe$dkmhgelF{r5}E+A COnR#T literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/p.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/p.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e837cd82eb88546ceb17b73624dbff1683e838 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWcE!xqef~h9lb$Y)As)xyPCLlkq9EYvzM0jB-GOyV!(0c>GKIMg?AsV* zZ!{*eUSg~^xLG0GD`WO>ZUR$f`%mW=Mdt!0%V}L^@x8#pF#ojhwObO4ugxm`sfJysrWb^~VVb$fwAH$7b(Lp+YZofgY`M1kk{&8I9^7%gt7gdBRtz-b{NG@+p- zYDTkV0^b3~?-!mF-3)$z=v%?V{|-S+e_NNy^K1<(T`Kn~snmhJcWa z9FuTSSyVZ1_TGkC%javhG6*E!`Mx)@!--?5NVe|m%O;$Ay%}9vI_6t5ToBrjdz`sfJysrW4t}Gj^ZkKBO`a}}As)xyP6^~~HsomOPi4|tC^R8}(_>}xHOH+F8>|*^ zS#kfJT*}Y=ou@|exMOwxoh#haMH?7c9`sfJysrW4%L@&VKae3$30yfLp+YZo#x2fX28>WTAt+!<5UK&F!l!w+7>fdReYHE z+L|L*H2-T?ZFy{cp!JRHG`VZFmATW`7ME8A+gC;MUSQz;!0N#N&Uo{bNgXpJ1?N8B znJYcz<&0~kdmqgy=3w-3@h*`$F53Ti#j1?n0`^tA-dAfLz5BY0gLOxBk6}xI?2|e2 zYh literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/t.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/t.png new file mode 100644 index 0000000000000000000000000000000000000000..00432047f5efe9ce1711d81a8f11162336eba2bf GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW4s)sJ>KB1R6FprVLp+YZo#x2PqR8WVT4I6F1O~1y5fuf_DFK`w4orMA z4yzR3P26nzX3775pD!K$y)rVpF@;Z{k4fZ%+krX3VgX(gS-;$4WjteZ?8d4Y&y%MY zuiL7WgcT&TVCvqLde{?dnqFNO)$?V(~oh;-2sJ-yUpZ6m;gec1vAuhW@^; m?DqnJPnf`sfJysrWPJw0L7XJncE%J164DmSr_Ub~xBMJhn7oMzZd{D5(fpZCq)dChThafi9 z7Cwzez5|QG7JqX&vyywKXP)1i^7ucM#@z{SM_!(@SvK35fsy48_k%gn*G*eCTo-7% zb}On{m4RXFwY^fwEdrL$wf(o~oNo8(|HGZ|=S4hI(5dgca&JHQ@N$kc%bxE&8?Qxq zbr#DdzuBw3ly6#v8qiH05nhsW&U|?(?7+ZyypnO*q%M~^Z!$jtWf(kN{an^LB{Ts5 DemY@* literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ua.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ua.png new file mode 100644 index 0000000000000000000000000000000000000000..7d36a0e98a63a6fd1968e086ae446731a4585e2f GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrZg#PYdYwR_Z=NoWAs)xyh8^rZtRQe_&Zl(m0?vR&?*pnA8lwx?^%!?E zEns@W<->mA;HAd*;*lrsp42FlQ-8Ky`7NKZj?nhp+Yh{I4jx^>6#C#YlV!T1%gjSz zOlwUUB$E5Ki&$sez7|#O>0+7g65?g~T(8q3+t+ibo7<)wn|0k=Cd7@*u9RK;oMIH no_e1hSL0npS1|o|cpx3Qe1+JJsXGIJA;942>gTe~DWM4f847}V literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ub.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ub.png new file mode 100644 index 0000000000000000000000000000000000000000..d1eacb7ef8cd2dcb0d0c6fb4d7f2ad23e18424fc GIT binary patch literal 363 zcmV-x0hIoUP)OV6WpkIDn_YS1f0~&v`2znyxE;pY6+(!0T>&6Tk~B>Lz&ZDLJj$~4>4}aPRM#~kK39}dh}d=AY482Tol;7l zQ^uH-GRrc?Sf1xWJYb9gz&y{POm@xzz^M)I1B4KWSXI@hQ{=Vp`?4%P)><25ybTwO zsTU!HbM9kA)LKg^$8ju*;+iq#oc}6r+eQfK`~Lsl_dTGL3L)CI4f|ABYXbtTwTO6) z$$urK9EL$D^(mlfnrWJ})<4JXoHND%fHCIuqTS-ZC;}n?z5!3j06NQ6{=WbK002ov JPDHLkV1kG!kc0pL literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uc.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uc.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f8bb9e0e7e3950f920b95f633e496466f4f1f0 GIT binary patch literal 378 zcmV-=0fqjFP)yL^jFi$40;N@-Af2bB*&Bu!@w8= zfHyw?V2qolIZjUi0Dur;t=*0GeV+s*imbK97z-hGqf*MWzQ=sVSWy%Q2R=RStV9T* zqzIQJy1mizJonz;2oORn%X0h+E*05Yix67ZbvL@M>o|^=iX3CCs!B@vsSo}(;MYag zS_42`*Khu9awJDZc5+I!z5oCK literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ud.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ud.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d2343dcfe16517550e55bbc0f8feee106bbb29 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrQ_&@BUG@Nlu6nvShIkx*JMAEEvjLAQ?<mI+2{d3L;v^dE?eGPGh8X{ z?O-U7aldSmd;3^&l;YBT@8eI+DLy8l#3lb?c89>kndd*NC<(Gp=VyqR_VhcSp8PS1 z?6nEvnQNa{im@mx`W`37z;Jt;C*!r!UPn*HJ>R`F4|dG3wB&j^_xkEpuXg#d95{2? z#PIXoRC6BZH(v^6*58?19QFEz0;k5O?W)X14sst@HuJsTB)mLB9_T>^Pgg&ebxsLQ E00UWZb^rhX literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ue.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ue.png new file mode 100644 index 0000000000000000000000000000000000000000..974322c69f5280bd2b88512e5d688b18474f9938 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrQ{A5Rf0Teimpxq^Lp+YZopzA-umX>(@73zC1m;bQJqOq%RZp^<0TLu+ZD=iJd*rdkmhgelF{r5}E)= Cx^<%f literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uf.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uf.png new file mode 100644 index 0000000000000000000000000000000000000000..253244e6002ffc49dd28a84f6a071cca1a7136aa GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrGnS_Y=Dk3n#hxyXAs)w*|NQ@N&#cQR%-nl$1?yrl9!Bm6j#U{M83`#V zM^vNZ?d{)-sT zxtPe;#{BSvcNjtvLO^%g2fEoF zzytUPfX|b8%d&J`7eb(v0sy77swx05##B{x6=00fT3c%=rK<-3)_n;fk>U`uzV8`h z-usQ;dyg@0n&!AX0`T4wLWW`3jVh(0fJl?I))-?U#BQ`GinzYVe8yOw=LZSj9qz0| z2%)G5mn6D<4$?GTmSy7vfN7fEON=q+{Fjp~g!sDGrgKtCrPQS+55s^En&){pnq}G5 zYbu10Qr3078wG$rc`sfJysqrGu`D)>mLGzR(iTPhIkx*JMADRiz1J!@oBLn&RdPDHyWo+;L~yS-oU(- z$y>mB1M_zSgXyg45(PI}|74r+KY2bow}(;tYtvCB2F8C3ALdOL+_?3a#Okd|i>3%M z?D?+9qUhq~nVs7+bE`!9rfYTb+DjQ6dOm*nbyoe+oXOpCMHd&&`5blNZT@4eg!v4o z7RfVxx%Y6F?K8(M%bAqqPClL!?8Vp+bjs5F{f3LToEVtau-7m&O*xwCIAz;rpraW) MUHx3vIVCg!08tuZVE_OC literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ui.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ui.png new file mode 100644 index 0000000000000000000000000000000000000000..f69e3f857e6a7c7e11ecaed284b3bd53d33a5e8e GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrbJlJhvnZfYv8Rh;h{y5dKmY&RGwU)6Gxr``!Ma$Chmkv?BmCBd3k44k zu{t{+{`~wrI}3}7ii*I}xAvL|e}8@D;o*6If4_Phcc!C?f&zoOd+@JL8VaB*=xJ3rrliQch`X{SN*7w$1Jv^_n@oOtS%Ezo)fPgg&ebxsLQ09cDc AmH+?% literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uj.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uj.png new file mode 100644 index 0000000000000000000000000000000000000000..ffefb31042c96f3fdd04d151cfe32eb1f9007674 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrbBPyPQO!W1iJmTwAs)xyUOULktiZt`sfJysqrb7Pljiw^^Zet5b#hIkx*JMH4c76qQRo3nKttQW9&Enu-a5z$zZ5Ve8n zjf3?8J|FfB)=P}P51ct`duQd2(}&M~*zc$y&&hdMx#d97tM1e=Mv(*d3^x5|qh9CU zws?Nda_!bBpKdRivg-A%YJLW3a%;;MvbLcdMluIs`VpuYUjcIisQRWs_C`0YgQgEmnQWGEv!*$=7Zb z_?G`#kQ;sOXC}MLUCm$@ACD`0{rWnirm1?f^cZTYGMM-l#|17wF79+B{QdKzR?i>p o5jZ4K{NQ2WK3&!ThM$c33B8}g^nX{^0mFd7)78&qol`;+0Hh>|(f|Me literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ul.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ul.png new file mode 100644 index 0000000000000000000000000000000000000000..47d868a0cbacd1e3148c7fca84eb9a9f820e9b73 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqr3!c)9Nrph7W=|K#5Rc<;uN~xVP~c&`kadUMt(midGeP9W0%ZfIn+v2L z99+z9x{=-Y|HhwZy%iL7iv1>>;W`xP(8$klJN2-o`LPYxlolB-oASwLhPjZ_j+-{_ z`jL(MnYV^TF8Hp;VX*mupyB54|K=XoJ9Z1opD; Xzgk3!mmjtPI)}m2)z4*}Q$iB}sSQvX literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/um.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/um.png new file mode 100644 index 0000000000000000000000000000000000000000..c45333e6034076b8fabc626ab19d9e2314ee5655 GIT binary patch literal 368 zcmV-$0gwKPP)SfD)zy zDM2c5tN==&153~j&w1L?qfATgU;b#+%CE^(g758(smp9zm?n#h&$LoSXR za0C81Kqbsw&H}x~>;zwbq1?zVA17c>hF7sjll5 zrvQKuLMiY`p(Q|imJmYn&zS(m7yzV8c<=Z4=Wwf#Qmz%mIRHd-&h51S0l;iW z04R#W7_&bCZ+ejsf>H_q*4nxGXsy%OTC0>wH=D)Rc--HX8*l@z2mAt)S@#guVlb=# O0000`sfJysqr3-cq%)uKS5kDe}$As)xyPCIzEMM0o7-TePu%|^aCLR*;LHbgWAFh(#= zX%O{bzttprqcMu{f9dA5tIc;Rj=MkbPOF$)*(#v0?4Cd*=L7~$h7aX+IxRDvOER=2 zIvnw@zhBO9V$+$Z>TfPPCIxAoFFyBkdVY`Lv6#61p-RtV?ti~*Qaj7V#pV2$hK^g? za%ZU}P2PI#^{%Y7$&3OQEz{S=PE);RzV`L3jwMqBiyzGSe6RX_GNVMYm!{^^ZMhpK z>9lYt#CElQ=nO#+dy!WsF@NG|st{^3jhmVvLP3R{=3b zLdY--E0a>XGEV~X=cJTMsr>WNS_>f#_nuX~bZxQL=C;|HzLlzSFDifnfL~)P?e{fw RnV|px002ovPDHLkV1j#yn6>}_ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/up.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/up.png new file mode 100644 index 0000000000000000000000000000000000000000..d48be7b8cfb41d25ad1e53532bd9c29a7dc776bc GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrOX>Fu)V2eKwtKobhIkx*J8dIxivf@8T;bXq3ilKw8wEEpYNs@B;MA^Y zu3%M5U^Q}F=U_Egqwjzw>!kXphrVh5`I;K))i|xnF`3hWfr;UTpS2Um=}im`hHQe{ zbA!DUA6fL(-k&e*)tc1Pes0R7t!49`U%olJVeZ1Mao4|ofAd$G=kSDLwMEBwb7Biq17(8A5T-G@yGywqEYH9}n literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uq.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uq.png new file mode 100644 index 0000000000000000000000000000000000000000..d20612bf0e3f1f77cf23b2f812d1e18c0b5b66d6 GIT binary patch literal 425 zcmV;a0apHrP)SD+F!N8m#Tem}y2FQc z0WQFKeeFEwoO8|*LgslUgaAO(G-;7h+##h@UDvNWh)5|##O$|uK-YDg^W{Dw7DW+4 zI0f+D1Hjr%>$?7t+1mgqC8cyNYK#GZ?IiBm+A_x0qCyA&===V7n~vl7cs$mksf(s* z`o~5qiemeM0I-o_9#B=)2EaK702@Wh8_ik^0N(qx9{bfI?-{KuOQlp=Ypsnj#+Vpm z2!RliHFF*iLZFlyV-V3=o6_>$mu0E7{)17G7)mKAW!tvNU!3zjgJ>_{wItSBM0`G4 zdbi_FURqZO!5EvSX&8p&vU#4*j_akg)`SotM7GWc0na(ub=~%{+x2I60Z!{1>qGYX Tagem$00000NkvXXu0mjfbHTL+ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ur.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ur.png new file mode 100644 index 0000000000000000000000000000000000000000..e812c3186f8143411f9e41e603b163045099ea97 GIT binary patch literal 336 zcmV-W0k8gvP)S3m_HX z65Ii#lCl65ahgz#@sV~)79nb;) z0Py|RgNXKhS4tUU06;{>akSPt=WY?|4SDaco~4u!g0;4k@;3I#6KSo92oa}gYM2A( z95XX>D}dJeJevSwjPpDLz~=$XOhf<>WBfpwo=Pbxr9>p9bmX~JnbulE2#9zm_95W- z2bX1O(g)XMw4FsF(hy*+J#VnC>+>Xg?-B8sdfT?0_MEdZCg+@UzS>_j{AFzs5oQK} iU)pWxdr=2;fcgOyy_CfoKG2r{0000)FhWKkBV>cH0VBW$WCPfM9x6Rmd6DW$yhEk@H!NG9jg7_7T4V3j2Ya(_ zzzz5ZfKQ@dO38Z<04XIQgfYf@Z;bgpvJn(Q&{{u_rIdM|rIeId5O8IGtG4=#p z7HX}f#FCoKIrrY5jMFrcx<|=kSr!1;wyphLjOb^r{Z2?JwXSQ7YXyKlW6BtF&Yc=ge95F`H_x+D z$`~__BO)HhvG4n3S+5!>-9H9Xw^q8o4n*cXu0RV)r0LO1{b002ov JPDHLkV1l=yjwJv9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ut.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ut.png new file mode 100644 index 0000000000000000000000000000000000000000..d897d27c64780aa6b2917b04be971d4991fb5c21 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrE4@i}8^eJ@i#%N%Lp+YZopzAZS&^r$c4_(M&b$P-0v7WNyl2#Qb*_HF zmY2ZKTG@UrT&_an$^O48zgk;5j!QVdx#FB7#w>AwL2=&ef^$2!Zadd$xb9H0X0nf0 zX4Lz=L0Pwgx~3G>9(L_sv-RB0OhyKVWv)jA4&9SfNLu^V?m^7^?Jf6y|5cp-`*UDa zcAN>@AKM3ybZ2>K3SO*!@5JHq`sfJysqrYmP__*4IFx6P_-PAs)xyPP@o?SV5poU-f+O^oddj+cx4U> z8Z}8CyZS$0zdOIPSf`|95iD*I$&+wEp5fKw2z3} z-(2jMUHg4|E;EDXQv)7%{{X+*`}TXE?frf){qfi1_2FKH;)V~x8Js$b8Q1@^UE0zS z&ycZp_A*aR+aIrYO=I}9xT(X5Blq^ZxrH*xJ*qbs1zs$bWspc-v(>3XLRm>F*=y6) p==6GZdd>S literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uv.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uv.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6cd3bbdea1f593e8b09140f47ea859542679af GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrYgv=84}l_#9G)(YAs)xyPK)hrF%USue0nuI`xQnD4ZZ^h6&Tq)fHaUJ zRNx@HMPo*7hLc(K?tl}M?l}MVU&8!(wttYDOTqHG2WhMh3@i)>-uJCtrFBe#K_dCq zwx@IKqhIfeyM8sQyCXHS?u*mzNkQ-SD7QpROTB-X@qh#~L+tgvTkEXs85NXVbh;j` z{eJkvUIs5sh99rJy*%Zt<}I>0KUwAF?|(l7vj1NC-0fSIHLI<-PO)Y^&z(J4YnNy4 z+Qc!hkwa17qAma72bbgStK}O%HhULRTjTv?m5A#_i@s~OEc*7xD{U8uoaU(+D;Iz6 zz~7o@mHP~tmAo#8XqLX3T+HzQ;msq5j%qXfvwy&-#=UdFKl4A1z(8T}boFyt=akR{ E0N?qLH2?qr literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uw.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uw.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5f3890cb01ceade5bb9d1b17eb32a5feb383ae GIT binary patch literal 442 zcmV;r0Y(0aP)YnB{xewo;FEDTB%?vSd&cP?~1s}#O za0}c50N*d!vMiG%0RUr+Qp%HB>#pn4G+maZX&TPC=li}N$B|M>2zXl! z$aP%-V45bxw{6?D?aMg30@E}Bz`Cx8CxkRjgGedmUYy+?aLx%K!5@!p+ZbcxIHJRp z(ko3CLLdRHb>H{PvTWNHNNerIDH1}=^NjB2dH#4jVqv9JX!vP?*d=SNw}NwyD!XVA zilvkiLhMzx3wH=9WjGU$3L(UQ4#QxKIf(G40-rK6B<_Fk?c65E<`zZaV|lS)T~$@T za>>1el#)`4R>>Fx0CinIZ{j(Ne6rSBl&r5zYt0zD^4P^-jAdCC`xDymHx~If?wK^k k9M6wOa{qYU0{>s&2kbm4AE-gYjQ{`u07*qoM6N<$f}$t8hyVZp literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ux.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ux.png new file mode 100644 index 0000000000000000000000000000000000000000..024bade9b32aa3d20452de9f458bc00beba8f155 GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW20;d64HX6kMo~`}#}JR>Z>L@CZBY<$y`S?<-b!LE!`lOV8<<}>SRdfi zU<49S_6&X@<3h8p$zRX^KK@j-z5Jo7jT1+~(z*vpcN?S&m>KHIzx~=L-==uJ__<7S zPqEzJ%6XR0QzOrP_R);}yI-{I>0b2~5!a0$mrm(1d|zuJBoh{q&FGN*H;+rvX_mrL z4~|B|xbv&0%v$!+o>7s-$s_jqM#ZHe9${Juv(#E9Ofj;ZQ`}Ioks)F2Uao|mO1t@? zp>vs*@ZH*^b8cs$%-XH7*XPdI@}=gH_NA!#TwFqj4Uety_ImmJMJ@k_d)}Jnd`=o4 zEoGTCmd;P(d9` literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uy.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uy.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa70de56d26d1a4158a9fb9759877fd01d17a68 GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW28F=48gf9PFP<)rAs)xyPP@CdMM0po{p>zxc0cxM37pd$IBztTIdEpM z9^ukyj9`pl+}L!JJ^swS*Y}@QP4>0$Z#jHsy38RKH^~Yg=YW& literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uz.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uz.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1fcc83fe1d05564a170ac03ede1fc843b345e8 GIT binary patch literal 366 zcmV-!0g?WRP)VI0003ENkl649ELj?j1(Z z319==fDs%)H^2?l4R8Y707t+HU<25|@4@6^_>!~6^WhTzPo!!43oR|LbzR|3eZkFo z01x0F0KPF!N~v)iw=-jmQVIYu#${Qglx1071$gg62z}r0bG2>joa3Ay1g{7QA)Ir2 zi*pVDwAP2QD1ekQu@priguuk2N|a?;(h_T}wHDRo^`t@wl+v#2kp8CuRaG&@@c!oj z#uxxF#@q#9jMa6WRP4_HQc6NdlJWC_CBm)>@BJ_gN~vv(@p>WuRrpMF0Q* literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/v.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/v.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad4cd8a334f33a21d9548486e4f6c2a2129e8bf GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWPJ_8KnvH=%XFOdTLp+YZopzA7Re`7Nba(mP19=BHHZ&@qV6$qPeS&Qb zgRp^<`vu-#d@9FgKYeiY!+fbr&$Rz4E|?*C?+Slh7_*53a}DDK+q9h9%cd|fB=>9; zV@T@JRArd)TvAZ}Rpf%qS<_N?u9rye@CedodNSvD;hyzxexEaHH1N-sb z?Cl$O{c3gmqt7<;-Q%A!8p|KQ_}x}e@Zwg{&MALfi_a-4DOo+&I=6Dq^rWqK?paON wU;Xr3SpSL});!KveZ$^{Uu59@z<5CZxsQwKY$3%2puZSAUHx3vIVCg!0Gt7FhyVZp literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/w.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/w.png new file mode 100644 index 0000000000000000000000000000000000000000..c6edcb49b5f460c2664587157b62cd46b45ed5ba GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWE@6>N3!8vKpFCY0Lp+YZoqCYBMM1!|{p`Jk%r6fJX)sz{@Y}%b9iV-I zZwvEVhP4TA8f<->Y~FCS-?jb7pR!Nj{uzGGGu8b2uQ1oG;W^R3^Mm<8<>u=qyvaNa zt5z{JBuc#4y;Y3i*FO6`#JYmrh!w8{qZXX8mig-u9XMgawx_nZmVAqib8PFyr|tn!Sd<_r`sfJysrWZn@%$H+4XvbDl1aAs)xyUOmX$q9DL};d~nR2IdzBgf_5PH}D-3deb1Z zf!TWli!e`gL?$O0yQhWD3cA6sZGWr)b$ zy^h(y_wu$}hB?K@W=#G(Y2p;2hSJ#YMUi69?*#ty6H`z!bjx1bVNlHBxM}gH_~7@o zmrah%NR;4en{c1oID2h!PtYVLg{2}+7oyVd)kz*WQ~mz4&Gy{WXTq7z__(-xy4?GH xnnCGS`tQ9=3*P^pQ@P@odiVk+(I3nYm^V4Joa|Oy`VQzb22WQ%mvv4FO#nNkab^Gj literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/y.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/y.png new file mode 100644 index 0000000000000000000000000000000000000000..98c8626b14f31920ca63cb8c34911db9b173174d GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW9wrS7wQoS77oIMTAs)xyPCK}|uZ9lzZ+x77cS`HU9*$@4i^%rU;R(tbyzXaJ+=2j&BhbC1}Z_tIo= zII`|FL&E*MbUl*4xxzS?YC*|i9%Jdpui+W#s(01x|Czq(# z0#15@BCg7d?%Xq)ygqhUc8I~|;&;C{pRg>S_q^DthM~ga)}b?J{>Zp24f+}%!YIn{ ZKk1OKwfSF%SfHO7JYD@<);T3K0RU`Qfaw4L literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/z.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/z.png new file mode 100644 index 0000000000000000000000000000000000000000..644a5b3158bab6d2441751b15836855112cc0d58 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW9*L___j`ashdo^!Lp+YZz3Rw&L_vV{LfK}f0teZKW;WKT418V8Dj`fk zR-p|nT}%ZBfX@E3 kUiPKGS_1>qKZYL++P_^-R9%kp2Z}Rzy85}Sb4q9e06MK|egFUf literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/1.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3894249db8e513cde9912875bba551de948fdb46 GIT binary patch literal 965 zcmV;$13LVPP)7S}9L000AINkl^N*{QcFhN`G*0aB*?*=k4Dpgb+~_r>Cc# zQ2v1Q@pxPi1bZJ>u5fo_xXH^q6mU8Gc!X7iN#`pKmY(jq0q|8 z3IOcx?p|MCQ=XnQO}o3hGYmsj)mSWsh?Po(<2XbV1R)-eBVr7?Xs8*{y&jUaFn&3Wtr!Bzu%9D(P(sWaS;)>x3`ywQS^Gf{r&y+rT+Q(d17LMCTP80cez~l z8zv%tetvd$chk)J_4W0`!$W(YR4VoD&iP{ztyC%<9UVPAJ@$t*NsaR0S=m$`}PkK?=y3`{njE{-7?_ukIf*!9Ul;JEqm_KWEo1Y9lzS>Jb9Q_If! z_K4RToh_R#UOJ?{L7-cNEw`!HDM-Ue^&bc+0&w(haY}$w_desRqpL=x!JSY z1SYAR?4KvPE#Ugs8aw$jEa7)^e`sI$TbD1_ci7<2 zn%7^etmeLpI+}E`Q07!p&&Jog*1i6hBFCoErw|l$GX472kyVGFT%AnNb}LSVY|9D5tn|__dEZd0=`P*m9 zYpQw%tqnV@f1z1+?e*7*(=uo6jeGCCDQM-3U4D^ox}R4bdg#jPHLvQj$$pj1H+58G1+<}}SbnQ|#>t44S8C6lw&i-f-DA7ZYzkjdMAd%m6QqMcJzgg8Ti z;Hd?lqKO30pB*uJ#xr~3D{bT^pG=96pO)$x=)zGb^L_8b95e21RnIDdM2>FKIlW25 z^`J!eq8IMxKWWcC`>blO+7_;LyKYZdbK>3Nl_6e%Q?ADzR%W)He_rSGK1Pi_cNlR* d;J>MMj7v<+T&BDbumvV922WQ%mvv4FO#qE@B{={9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/3.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fad9d20cfe5e5b62a221a7ce9847dca79eae0e80 GIT binary patch literal 596 zcmV-a0;~OrP)H}S_Bo$H_!nbQ-+;jDu5E`06Op=m|+}7Bbtz?**&e|;1ia&Z`WcN1~`KK!9fgxB2Wa1 zKoKYcMW6_D_dxr;Cxm#XC<=cwIE0YC@5fG7E6$)tyRI|FEKXsJ>ADVM^h{f?wRX-e zPT`!>T4Rjj*5|Te-rBa6QVvTdrEJ@F$ZU{fQYobnB3yFL!w07ieF7-we7sixz&T$# zv;yd^w!Zk?-jmk)dcAJr0mc|(Y&B5ESjzjf*3s-)cIio2D5b2mi_v4PRZ8WK(Pt}K z*R@Zf&bi0q5!7^)4vaB%U4Ju1LlQT}csM=pizb5F)htecM0O1?fYPUBYvdTBfS1s;U;#$^Cx6-EL96HKqbWNT{pQhYneV zo+3s!Hy}O@G_gP{%W|?DL*cydpAGm!?2{`RjL!B2WbSiv0udZFR4YSI^i00000heao;{}ayT3S z5R1iFZ;8d?FLT1-FaW&1zB0|Cq9UWwm}-yi@9&qFm*Y6jdh7E6Wu({Zo0^*Vd_HqP zL!ppDp-A>#nw*>*sZ^TKHA*&US|lZpkB@I} zZ=B;yZf-8~7D&2B=jP^aZ*RGQQWUkewpLM5fwumydU$x)+uMsoA_|3~wzf8XGkiXu zpO=@nu&|Ksbv=&brKP0+kPLTzbIo*od`u9;5BO4Ix7#_Vn@PX*7K`Ql{9GgwwY0P- zl}eY(RZ~;Lj_Pzek|do@r$(bOnM^p2UtC-q92}%N&C}_0-QC@cJwHGHWwouXEw9&0 z)AZHV6#%&1Zj;IMxq3-a_T=;Vn5e`wmzS3bg7`dPdU~2M%w{uNPBG{y1sxn5l*wdl zlOTwtr6soc@$tdhDwRs5QYDx)atF=I%F=4JzZU{>KXGR=*RjZ~M*Wo2b-#F&_vsH&<00I%1}mU|e60l?1A4gfG8q;_|A z+uGW=JuXA7R&)DhdwcuH$Vfp!!OF_Y=H{kWtHm&^va(Vtl>$H{61lm#;qiExnVCYN z(Bttq91ej%z&+3=cyxlnAbWM#2*8ML! hB2Wa1KoRIa>ldJcqhTm*w2%M*002ovPDHLkV1ftF2Y&zn literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c2.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c95a87123b926713695f00e1ccf64b5821debb GIT binary patch literal 1077 zcmV-51j_q~P)Bqd&dvD&({&wHY&b(O;gb-AMa6yF#2F0Kl6oX<=42nT9C@HZ*OlQgakn} zH#e6r==}UVQog>v005Vlm)SA9ySv-l+vy(kZ0v!0JRXn7lQO5Krerc%MvTE=@caEL zm1=Em4S6gUi$EYK;C6-2dYjGG+1Z&g^?LpF_4U=&ReDS$5|K)!UavP6iy@E86aD@DDKi)hhC(4UDrlNU&W47Dy}dp5QlCm?x`e}F0D#Zu%ZTji z>OwlhFaUt}_ji_39|#26+S;=Hb#-+Lg+irLr8^xChg>d4y3^?t2n1rWn5ERu&dz?< z6p2It0HIJQ<&j7vXJ=1%<}Sb%G78yRaI5(?d@{8oM9L~ zpZ^DI{m94@%4yi=c-m`tYX>S_Rh z-EQC6*%6DyKaZK;9HaTl=jSH?pr)p#$bL!=`dgCU=gD9&oS&Z;f7e(nw!gnG6beiA zMroRk$K$_JR*1!7E|<${>R(=7nwpx*y|{aNdXh?|6;Oqqo}M-~Hm zx7!_$$45s;lgVWHmdmIFMKdGk4z(F8~}4N6Jhj5;r$DNLMPAN~MzRF`7suva<{! z)ai6BEiE}Okw_#~tCej~y27@6Qjs6_d(a|wDI7rj9$z);}W?^B0qNu~eLq4Cc)9L>6jWhl$ vfY* literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c4.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c4.png new file mode 100644 index 0000000000000000000000000000000000000000..74c5cdfe2e677593d0fd24cc0f6d506a0a9ca6f5 GIT binary patch literal 1124 zcmV-q1e^PbP)h|<2K3Z>C#e!su2t}a{i{#CnPB9Vy2;xx*& zwY8m{om9`|Vo129H@$r$zb|xa5zq7!0OzIGs*DpPxEFp-{+VGD7=&z6^u%`KfogTrDjv zWHS&5NTt%$0o&W#GMS9fHk(Z-6jJjD<#M@9CX;Ngudna!?xqfiL?TU1O@y}F?HMi5 z%-87q`#XftZnvw|>a^b4+FF~<1|i(q+5!Ohe7;QXmC=EZ2&Ak=XZB^d3kx?A}RT!Jv}`!7>wN9+;5aUecw{V zY&M%rrceCv_4W1O;Nb5?6vHqw+xWM8x45{NvZ?oYJUEW?c)YT*vhSNX8w>^v!;X%Q z1Omaz%1X8tY34_!TrP*%w=aljC=`mtVn5(bi9(@hY;4T>`IPyjJU>4J0LI3~()_o# zw~LF5XJ=;+LXXEYKR+Lj$3I>5XS(YrCnq@^PE}P^UteD=7Aq+!A^Z-9BODHoj*dzs z5|Kz$Q&Ur3UOq4|5Rbot~bu*=(g!`M*e<(N_@!ia-%4 q0!5$*6oDd81d2crC<6Ttfc^##Mp87^nZJSn0000S=51)mYdzBso1Cy4gi(^Q}y|*{4S3hzPVR+za5T`35=-S<(z{PdYX-$qx z$BoXWsjUhfW>FojQ|+B{*66reA9VA0y;$_fAt%9uez_)(np5&7y1o&V zW~#{8sTr#qCmI}kA=~7dFT}vA;lRih(7+_J0K&Xb&#+2)cAnA97bW&jLqbgjI3je! zq84nwefItL>b>_azibgmiY(iGcUO$w6NUlVOpYV zV>Lv?x>*lC;rSyE^h0LU*PSu%YV7{MTDM4JYm}~3@4vsH^;UC3LjRs+R-63t@#Dw) zHT+e$?T*bzoDsHq>;3o18zYn^E+`2uvXGf{@=4LoJ8#PtX?(KLKW((~iORy6KF_kR zKP))%xKL^#$HEe;zpt{SMS@Oxp1W9MC(qX&AGHdYskQ&<)$T< iFr&p+K*K)yFT(8CKZtES;$jI*NDQ8?elF{r5}E*BMj2)R literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/1.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3654ff91c867daf6eabdb97f02ee3ac19116b676 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yQ)RY@rW1(24+)F7srr{dv9mjdb|!0Iqv`J^I}og?(VBgIrMgkZ+Y-Q z&FY1MlGB|#C1MA)EG#;@tvW1zgtCjuw(#*Sbvn3f>V+nSur)J0cn_M~ny_VWK1a)i zYf`5BzCW33{B%zByR-ep@9f#5x&)Z)59WMu=5Z7h!H(>Ce{HW@{mUT3Z1z%(R}UUM zh-Y8BX3dh!U8`5WzP!H2Z83v_XOPiMmIeEZKfZP8&>^PNn-(u#eE06%C>05wd2{D}wAsIJUtLYj8V#<) z2Ael;4h;=Gs_s2$%eHN1wzhx8UOar5=K4`3-o0}t=WVN|qFUeMxcKRQGGx^Qjoo+Wc`fboKlilg{Q2{#THil?QaZh9Wf#+dw{O?3S{1i` z`l1#4_Sr4JoOw0o#PiQG$EV&r@wvuouGv>vQP)6$ma}JlT>~rTmG6w%yLWHcO1sG? z=ggTi#gn7`@W+ZfA+P1-<)1%)-YdBL^3RLcu3xz_C1>x{q)j(-R`y~Z)!N+WpSJ_YnE2<#i>)LUcMY0Ec(&#CzySvZfel_hs%pV{(=T@w*4M9Jwd(fU zYwee>FAp)By?5u%%>4X%ZN-^Bx88nRwrtt=qf550*}66Kcgm}R`1wo2x?b+?O_Xr* zu$sGX_ip8un3$N1qAPb!pZ4CI^egZ7jT;ON?d|QKKNmAZ#Ko~SRM^PzwKFDUX0Cjq n$MrwfEr7)pE4uJs_KUgM)w27srr{dv9m#_Wm3oam?SzRW*b&#AS(v*F}4$f{$Ig zB?3|A?BcBY3K^v$>QlR%1s67#ePHVHie-`Q3JJ)%#C5Mti(_rBlT*uw**+t)mtaP!J;&g!>MDD#^jSOlT>^!b0}`U zxhAUr_~er*UVk?Dm6w;#ojZ47Ku79LAXvU!-RAVBHJ4weM1K4Du`ng&$)iV1=k;`S zSehOC9 z)2B~Y)b783|L)zj(;k1^aW(7g)1s)d>gwGylC!g4zj?EU>BWs3GZZ-D8@6rRrl+Sj zE&EW?MiwSU8zH{-k3Ws=?D_;=y?8NW{(OHGp;PZY_sQG; zJzZT@A1kS_W3hsWMpI>+}yi&@5`5& zTVuk*x9{G)dg-lOw=}x6-fbwc0>)RXTy16LMc$Ck+AYhMFWF%R%%Bl_BHAHsp-Mg0I)%V|Yo@ELd~)aNmyaIH_Pf4vd|*8*I~{*wJ}Hi0cN!9B9TT*u() L>gTe~DWM4f&I!Ff literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/3.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/3.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc2186ac8cbb7ae187e6b1f41a990feb3a1dc60 GIT binary patch literal 931 zcmV;U16=%xP)rP3Q&Lo6rcbF zC_n)UP=EsTUqI98v?z){0J^`we|2?L=!sLQ6wmVrp`)WCgit&lm#2at2!ikjXgC}; z8jXd9USD4a0s(}O$K#PE4F-cW4TVCXQ0UVEL=jb0Re~Up0!K2L)GxTdzn7=1+wG?4 zKp@cH-+z97jxpZZ*;!j#>*(l^pOw$&3x~riD=TKR*=#oFERxgd+}PMCD=W)nGTYnR zo12?YPfs;9HL5G>a=Gkwdr?u5){;9Mj-H+#y%jAkF8=uVkhVopq~o)*vvj+@zW(6g zAm_k%JZ`hu#>dC$uIA?E-QC?Uthan#Db%5=mmVRswY4Q}`~Cjb)>dUrUteEuZ!b;9 z#>R$*hEyrT!^4k{k2=<_t}c1{7kzYUYRYQ0O54@d)vvFw${IpQOG}G9O(v77zvgzk zOG`_2rkkIim#4q-hq_#@xw*MWBx1AKqR}YJvdS7!6qWa`YVbU7GMNkp&6SEqqvhr0 zdA*r1#<5t8rdF#JV>~l6GcYjF-rlbDQpoe8z|zu^>NTMu^(j55D2mdFVvH{@FQvhS zg@sfqH8L_Hr7X*4G8u%>;^N}h`l!d_F_}zSdkG<{tE=*JR)N;l)m>a%AcQ!MYiw+k z25)a~D=RB$&GGRu$8iXuY&I)DHs^jY7z|n$x3jbJ;o(6G$}mh*Qxn55dhKa%Z?CPb z?d0TSdU~1;zP-KG*49o=PDUb;<>lp@o12D)hKY%Z_4RdHGdMVCG#V=^D!g7VA;jzT zS}c~5l9JKUQROU&L?WBb>OA#1od;>v@jR~_e13k8#bUJ2y}!R}bw2%+5OQ{QmQJU2 zpofQtc|i*uPNx%NtW(h4-ThxcUtV4~j-x9l2!cGlySqyy5?^fi-y1y7>;HQ?Jw5&O zc)_<&fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rkT5zX4>ZCm)Tw9Kiqp002ovPDHLk FV1hvCtsDRV literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/4.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/4.png new file mode 100644 index 0000000000000000000000000000000000000000..6f528dbf975e917eadde81809ad3ab663a78e272 GIT binary patch literal 880 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yN3Lfuu#IaXfu(gw@IiiX5M&Oy|3Ke?r3a z7ra&;0u`^4Qrd-H2TWJlCE;4;(ZQ2{SII`@#?j<}=?+sO#8N(|9v6=ZD%^hfkU`Gt zs6Q{#4}P{iVe|Q^q`k4#=JR}uHMo9p8!fa~VqguxfiC2G6x*lQ#9o)bFnRLi+qa|J z66g4-%bq)TPO0V4!w;W7Z&qu4d3tN|>Z?H_t*JMIR;Fyesp2UmA(0R%mYlOSO4UiOsI-@Ti4Hf{IacO_O*;ggoMx3f1-6c-ogy_2x0 zUcTXa^|k8o!wm`?K+%m6J=@I8%;ebS$J3&&y4`brg8v;yFpc z>1NKi<#oR*Z1T27?e6{b@1LESS(`vqRFsvi?bOtn5f?MAOF3qt-U2NXCr+Ff9cMdr%j{V~$0`yN9iLyh`r_Ze zxXb?M|9$u{VcWLt+npCqxaFrJ#Mb$L$IOzjlB%j(DMm{#XI2?KfBrmccZ5#b=E$VV zy>UGoZ2{v02BQ9g8O(8dUzS*}YDXKl?goBcc9_Gpsf<5!)Jcf<$UPAu}=UX^7c trE{8(kMEnjNSrH!hyx>5^hNw7vpHA88@1HxbYN~_@O1TaS?83{1OP2(k}v=O literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/5.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/5.png new file mode 100644 index 0000000000000000000000000000000000000000..e22d59278cf4d3e295d481848a2ec245d5281ecd GIT binary patch literal 904 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yC(PaMP+Ub49x1DE{-7?_ukI1^>`g1a{T>T5s@ib8~t{r6%_;r+_BP% zIC${n(W8!u32>KcC-u^6$mo=TC%kB-nm&Zdxd>#K0PW16|mp;u)kh)rn*7ym_;7Eo9s{ zRE0X1FJGR|SXEIW(S20FNn2YxZTGHST>@Ne&6{+d-)Z`PI{kQwRcv^8cv8cvRebG- zrM|p*<0EnuC>9#}w7}xlty?jA;-|H`9)15k*KfIs=j6$g%XZ(b$v2w$@_b)e8eDdkj zroDUTM#Wx_)tkQVbH+hC$efTgj`@-zm(k%k#KVQFoy)7|i z^Udqm!)JB5Ew=1_@csAQJo8>w#|^jNK6`WL&Yj=CtN)4QbaHuJ|JvTpo*i)5z-eKC zyF2?`>1VkcwrvZGjorI@xAvbf1%VqkZ!Wxf^r&m!<5Q8xf!-FnxqbWg0*f5ps*;i; zk33Wk72f&v%WCWG+qWeiCkg+k*#``(B8T677`tZvpY46{?+qHZ5 z+1)^|UbL~3>b>L;IOWf)Jv(-s*y+TPxc}*Dhr{bvu8fR|N}48c>CT-qZ_b=K^W(>k zoex``6s62fOul^o4)pZq90LiJmM7ctdZMGE434Sp%JKK_FFhz3AI5Ykk^XB=fO>S;(UZkPbWn^TObdHaQ$HdI6thCfsNpSh)mme!W1qQ7QsjaOw z3~=gLwQ6U6OOvZRbD)UvOrMQgJB~lTnX@gz^vL6n^>IG&3(jjU)1RPoddt*H`^_eL z1XS16`Mo`Ty1Ue{w(;AyZ(eieef$1h)$^Cwa&?P`%o+_$I8a^8eukUk3ev^_wUxkJ O#Ng@b=d#Wzp$P!Esi%7Y literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/6.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/6.png new file mode 100644 index 0000000000000000000000000000000000000000..2eed1bcd0533a3b6ecfc54f6f9d1cab3ef4c81f7 GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yQco?g_EW;Ffhw_x;Tbp+8!9J5xLWz|wEaqfp;vT?p5&*yg* z$-47w9?rRH`@H`B&ixP1S>BQK3KTKn`NqxL$*9r5gaawH1nj;m$9G}zV&%`A{{H@p zG?ZF4-PCdFcx(|UVm+77_wp)hj)1nrGwLcrob#RwIxSzmoMWMf%AwCStFKzw+lR*{ zaemeR*B=xzf6M##@A=vfdrVE;c{8W4w>PtS|Mzd-z684l-no1CsKoKdh3l_pZ;a6B zx|Ao()oRhVd-v|ybLMP`TDwZ5*R9s>{_*4PyYKe7E!H`G?#!7NpY?%2S68wzsps&+ z4{zSQi4Sy5|5n zojZT7ZQH+fYv}5$f9mR2h6uS9=H~jYW@BQUe%jRDe!k!G%vpAJc52h+&z&0^7su9o zu)V$g>(|oSf7h>H|M;;``GVi_%UN5uyp^0eJ$+-upI^U>g1B3oPJZ;96tXs~_ezLX z>ZbJy91@TJ)s`@9+p!~K(X*nR&CSjKnYIM2bP0 Hl+XkKMhBl+ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c1.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c1.png new file mode 100644 index 0000000000000000000000000000000000000000..d797cb8341215b0d5ec100495ae914f7f342f376 GIT binary patch literal 857 zcmV-f1E&0mP)T5g zNu1PH(a@qp8X;7RgIw{TrU=5Nz$J*lL8MGEA{rVTqK2!6A{!eV5`vaMiEs-WR2mwR zK#M#v^!&f!c*mh-zPtB$#QVPK`~H4>{O<4n?gR;?6uv{~;F|3Ul zm25Vv*Xz|lkB^Vf&(DX3h8TufUtbRfgVH)7#OL$rbh^#WO}Y8{`r2x>_V)G`i^a3E zvrHzlw6qishd&#BbaXU3J1du&Oa=h@`}@`0OdQ84OTXW*EJLACC=_bG!=llsvJ^$J zd9ok~05CW>_~TbN9F7*AFV5)2#l`FEYgbp7R8CAxv~%*Nr>EuIU@#O41(szSdakan z0O024rn|daT5-GG%?GL7um0fRz+^I6EEccVn@Xi7Cnwv18jZ#;d+zV=0YFv)z{$zU z;^LwjD5Z2^VWC_u`+Pn@5bSpQ;o;$*dKHyQrIC@5h7Dd`URDDoghV0{qtWPgyZ86^ z>-BnzEB@UOMNxU*Y;SLGY;351g(@F%gpjeZF%>34Nb{o2W~)}KQl3ty6N$vy+M0Uk z<>h56m6GymwQ8|gl+V$8KL7UirhKfHN~MMgl}hE|;h}l*%*;$OnUr#u%azS$zqs1g ze~887@y^c9$HzxPNTE>hcs%k)tE;Po5K5`pY+hMe0f5`v+tbrilgU&p7U$>ZS(e?| z*|V6aetCj0p^J zF&HhujBFf)YOzl zqxoJ7{NE3r=T}x%5JDK^R4Uck*=ey@zT4z)K(DT@>gwta4-ZMYyu3_NlpqM-YNGtZ zOozka*Vk8uVHk!fDJdcKY&Ls)d&~2DadELmqtR-$r2g{q^8EbFvTSK-DaUa&H8pZ8 zhGC3GV_{(-NlB2&WN4bEC<-BzNF)jh3iNt?EEeN9uBxhvVVHcsdY8*}aB!g4>sgld zcsz1_ettd_3h8t@j^o^JH$q5$o~G&A+FFFr;^Ja%D~4gbUTQBd9UUEYI-U9M(Qr6iQBgr+gpgLNC2=4SFq_TtV@F3vHk*ya z4Gj%)eRFg3s}&3c0xc~qkw}E3OG``1WD;XMH#bLG?eFhLqtSf#sMG1}>gxKv?r=El zcDtNDK0X?aMvmh!#vYGHrBe0x_it@&eWheswzs$U?Ck6xbwLoUR_of@+8_4l=S!c- zWIjGVey>ZClzTaWF_t7Lo6S-bWwBW9?(RA|I%a2Q?RNX8=jhDL%*4cm$z)04U+bPN$R8WHLz(7oX49+}teJPfkwcgJy7WP_DPNwTYsb z+c1?%t*)-hD?U9vEeOK<`}^_nu^ir zr?QTUj7(f9EP=Epypa2CZKmiI+fC3bt00k&O0SZun0`y-Q ZzW^ literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c3.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c3.png new file mode 100644 index 0000000000000000000000000000000000000000..0f55b7e17fa552ec9a97f0624582e5c8ab9c1c74 GIT binary patch literal 2532 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 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/2.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/2.png new file mode 100644 index 0000000000000000000000000000000000000000..09cb7f882c266d4f44fa14fd9e9d01009ded3ffd GIT binary patch literal 1148 zcmV-?1cUpDP)r6qN000CVNklB^;KP6E%As_6m@ubxVX58AL8|T8HUN} z<8(U38d08WbbEW7<2a+ysL^P2I$i!A!oqQ!Xq%MZ|Lg4RoS&aBr6XH!#?lv6)9H<$mzcs!mz z*PoxCVr?eix8L=8eU6f4S*O!!x7!gycDvo@^L>1L;HEU7Pft$(u)MsCepkv~qen+a z05Ci}T^*E3hQ+Z_&v!{IQV zD6A|fR9WvhJv{}0?(S|Opc4}l05Cp24geaBMy*!k8vvM`oD>K2{QMjM^m;vSN{`2b zZ~FTB0HC$C6*ueZ>Hxsya<#R!sZ=VV4!^gz7XXfrk9m8UL?V$$B#K$1(P**Upgd6g z-(s;CZ_r>c7z_rBSU2kaJ00v zd}Gz=bj2!yGDh_B@)AEw2q;a{G))(?Zf$L`EGsm7!aK?3av>=M%H2tCZ*M~0XSdtG zNvW2WmLidepepqF`MJ5dS*21%qtS{!De?RLq9jcok0;~v^TlGZFbpGTjjpb)0>H+` zhQOs3kH^#LbUK|b77mIz{8C5s;^G1T3pLQ_*y6*u+x8;Dqk^FIq(xuu8qtq&9akFjvMjuTAEUJI~@QzQ=R;%yXXSoaf9apePD|g8hX*#CT91ln3QOc~Bmd z2jxL|&FFswtw_Y^m@IerKPpCwX{AlG11r82cV*&LZMLn zzDLz+bzWW`OAG`805&!@D6TDi(A?bI{{DWJI6puC&2UO&X(rR%-5p7it*xyreSLjh zEEZ=`)~~It0cdV+X6ZJYO)8aU5vavt0U(h`Vnw^%{we)$f|^XG^73+)Xti3i3-s#h z3V>WLXX)G9+W;CG8nOj+e}5l9Wo2c2fEE`QXVDQ#d#^t0z6QW-`&j|Hx3>qN zzP>)5KHkkN^LRXFvl)P1uV-4b+3fLnm@aNkrk9r&00cp>^xocH07j!R`S4&c=<#?c ziaI+xV_LV{O_C%@l3uTuvy*9SYYRYodpk?d&(84~!=^x)ties9{{-KEQ=FNfRhcIK(#&1SQ4mP~Xl z%wnR`tFf^$l^FyA!H<`DE|=@mQEhE)02UV)znmcu2xMaEFD@?PHzokb$HxFv9Yn|=jTMR zt5T^FM(}@nXpu++;NjsRR-B!k1u#53oGl&=hr@4gZv;Wmdpl$FwX>zAC6!5ZIvstl z`qZPNqoW*n^ziTyKv!26OQ#q8{{B9dNl21R;=Dj0z(Lm2sm%&ddMh9ZqNu1Sl}T=H zZuELR6OJmCiY`qY4u`|xSYBS{AnS*Qh5*oI1Y>Tu8$eG_Puk&_C@9nSD4pHa)z$F< z8h;&4<#38^xvWPoFE5*#npon=$q9hY&dzLkNp^dC3!tN;<5N)9b@Vqu6M4>RwbBWZ zEueID$6ETw$Hzz{67S|8u@v)EB9SPSN|tCa7y$TuKI-Q!C67iT5vS8RFfhQU27aqH=O_=H}+8j94;ItyW9FxT~tF(rUH; zjsXS-2Q3zhP$;A_Wr8GsehCJHGMTKPpg<@T8jVIqpPrufdc6jN!D_YE)YN3=tBBys zf9ZrmA%Y-SVl)~R3Wb^ceDgIZ|3Qogna=s)!sZ9nuW Re)9kT002ovPDHLkV1hQz7aafq literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/4.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/4.png new file mode 100644 index 0000000000000000000000000000000000000000..483092e69a6bd7acc836a05ef1cfd97870c578c6 GIT binary patch literal 1406 zcmV-^1%djBP)8w$CT3z7@Pg;t7^#kC9Byi>^g>%@d)jb>g-8Jm}}IXnN0 zQ>XKsV|zB+{P*-fpNmub{Laok`@a8vn}8%q{0;EIUjkkzFO(O`3+09KLV2OQP&dG8 zwR)q_`T6 zb#-}pc}#v_U?4g=x}>CJX=#ZhNwe9^eeai~r-W8iR8&<}O-@b%pe>})XeiGF2L~r4 zBzVZ8|2Q5bx3{;WqoYctk|2oi@bI{}IEt^Wtt~Dt1`r<~pP!#^D|KAWC&#~2YisMT zU%yzS#bN<4GBQFlR;!i1+9y5b`q0qO^73*PIXpZJfR$cjV`JR6e@QwHN6V95ufM;) z&&kPQ@d|~)-``&-6f()MurTfuz9il6`oY0L04FCWY>xnCWo0b#{r#QASglqUv))mQ z&dtpMh>eY9lIQ2=0CID4SvM<{N|VVXm&FMd*RtX?8Gt*m!lG)i=04XUcEPiHYMko~e`T2Q^(8a|? zs-81RolXZpEEapwn76R703ahHy*8N=cuA|e1BA0K}^k-NIO z3iEkjdxcel}Kv}MtTh6YD1dU|>afVG7uNisDxm22j2;Q9I4&c4rRG&-8~R8{8= z@COG6Tr+ zz1jVBl&jL#2R}VMQHLl@oSvRiW0x2Gau*a7WU*K-E-tiMtxP8S`1sh^*tod3NJvO< zyHJ5Ef6yXH^2;&87XP0K<$qn~h4Mmqp}bIDC@+*3$_wR%{$GUt3jq?uS`N^A`2YX_ M07*qoM6N<$f;T9e%K!iX literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/5.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/5.png new file mode 100644 index 0000000000000000000000000000000000000000..604128ceda81954571b399706eec20a83e427dbe GIT binary patch literal 1486 zcmV;<1u^=GP)<{P+91{3MKt(I2;xau`K&v5z2Ag^z^h!rD|+!Y;A274%O7un9b%3 z7cQ)=t?}gN&!1CLQf}V7dH??X-74iIA}J}Ur>Cc(p#i}5_BJ6qJ3G~CHIdlX*2WtH z`10k;)vH(kU?B?sNV==Xj~}xvTT@drH#euzXcP(s;Vl-+lP6EMx3{yiv(KMDPsqD> z@201x=jP_>bh^aE!~^wcUS6KrY^KQG-d+HqP>AA_lapIoTDU!e1fk!*e+OW**(ly@ zHfLsLQl!`G1>kbI;vm#!vjLc$ou#J$>g($%vaPLc_i-tNgwT2U@+E-Nr%ww>;<p(NO>+92jEG49-@bi|mIT~l7j#oJ$h8gzkT~w{D?_3pE`AF z_vt7hAwgPOl}e>FkB*IviE9#R`2bL5X>f25 zfYE4-I_=QV5V_Tec=YJe&!0b~C491zUc7iAB>VdM0OaN6McheaV`JQ2Bf3!Dg+lV) zy?X$fnwlaS$Fi{9ZnxX*JB{ACb7ysRRf5pvwjHTAQ86$uz~_81+S}WI{P-bZ*H2DPMqE1(2rvvo_3#rD69BGU zxe|*|qtSTi&>@cFs5C^-+}up<`Y4ayY&MgmBP4x3AAs`ma?03XFaTItS&8v!k{QU= zYPEX3Ua!|{wOV;nLX48sO_AN*-2fgwd`R(1rBWQtJK@)_U(_|?P^>XJH#bN8B#uR@ zFAjx5TU%Qd6%~>SkMJ6CD5iuzGc&`tVdC;b6;G1tuV23&heI+_ImALgeE1;F1Ehe7 zjSoU7S-YsHNJuU&E&?bkE2E5uhld%4q2Brr=$$DiC&yqgP~`LH&q*c{pYn;1r4A_J zPfku&R#u8%M->VM6`;XjFcb<^S6A=jk@HS>K-$fvr6r2b%*?EgwvWS}h?L7ZC>m&J|iLaf9bF+%P>s5e!h_)RQ^Fs7Agysg~~!@ op|Vg}s4P?#Dhri`{_lkT3+S5(IQogUxBvhE07*qoM6N<$f-DWpApigX literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/6.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/6.png new file mode 100644 index 0000000000000000000000000000000000000000..287b6ca3da36e44daef8c3baa8ed58678a40ded8 GIT binary patch literal 1376 zcmV-m1)utfP)GS zkE&4{HL+Mfuu|}%rdEp|{Wz)M)oZVwyozUU9?ij{BBEG?5)~BlMGF;svDipNCC0Kz z*CejlWV4z1ABO)BEPwy0-HO7z)4X{*v%h(7=gr$?8H5mc2*QE~A{3N@Qcwy?K`AH& zrJxj)f>KZlN-BoQ{_aA5ad9y@ zIq7sdA%p+`Q4}X8Cg$hou~iU+si~>CxjB5LCrG*TvsHosL?(Rb0($X?JJ4@95{(j=NY&L7N*;ZCo zh}G-$UR_;Dk|aq|Fc?fE5_c5(Xf$dzn}fk1>Cx-;L=A_-9LFV-Nn(|9B$-S?2=6HL zf*@R8UOsv91gn0(-()hCmX>1m$B!R8&+|M_t|z(au1}_~U%$4swGnlBdD&vIl$4ZU z)#LGWc6Q#2BlN?E4=-Q7B|ipS%Mq7)Ssu`F9tQ&Uq@!!XS5?yfdx{l||VjYeZ}aWPiU&(8q> z1ay6Uy|}oTJg+y4qA0(1ilV3u==S!u#bP0Qd~^!t~QxWSl!y%>g(&nZBBmjWV z=X?A1EqQz+k;to8ukxHNold9I>1&J6qhNAqPScxm&=vOWJrAeDD+;hcW7vcs2-1}qoadm zS)z`Pj^;m`*=%lVYQk+YE$R8AGVl5G=U%TDw`EzjTCJ;_uakMr&1}S(YUy{I5;?HFc?%-2j)TU*mA^#9{gj^k=;YYPer#>dBTChG3)cDY>b?d>+34eucc z;ndWW(P#t!6ciNT1{QL_{&kNcgj7{MK0eO%aju$9r^yb(1toSo7N5_jl}8zE|A5G3 zGKoY2J5{IC1%tsGa`b{<^@24)FQ7srr{dv9mhdb|!0Iqsj8`A5U+;MtXq2Ul)pz36#i z>Ez~Sy;$qj%}w1wB?Ye@BnjR+x-`L2V~PSttJc(Q&fHM}vw||LS#q0?ITg#kTWlkz zzjY^PrN700#U++IpZ_bGR9$uMDTm?*;U^99N-VAc80bPhZ1sQBm2BC&*Ej#h{rl?oSKiFAv$a*7 zeDdzyyEA7>S{X?73cY4w&as={?^jt|oP6Tt-@kjWzZPXVsCMD{^>8jLBcnwcU4hq6 zpFX`a<{V#u(}}NNO;ckdA`(9A+qyMXSVK`of+y(O;>F6&>r8!DUw{3rQON1n>%|c| zS+mm8_Bkzd;8+>9dM?maFFht*+3(R`C8hN+eRE{hqwl{h`-~^2xCF8^6z$YGy-DZv z(x8>~6Xkf9FSjqLtMhvw9~qg*_x$+rc8#v8YhFOf5Fb|&hNgoLZrze%SaSJghRLZP z?~|V8N^qULaz#Y;>!(kL1TMy{zn-`K>zY+SkY%>$%f!6={Fgs3T@rE*5OM8vQL4J; zqc-_u%9>6M#V0?0?D%geAkE5?EG90__~7Hmi!U4^r#Ua2Fwb(=@C`yYQ?xQ%CV=Bz~;lP6EE z-&$8!$HZ{{b6WJoxpU`+tv>3*$#6H%eER8^k=a|L)`nePd$xVf<4>PHy?L|dZrK3zcS_e{ODOHgEp?-m3bFiXVT~&wp-pVq^$fIYq^DlFHH`O$G~FTh@jYBTH-R z)AQV=d)d~`mIyol?AfyiuU1B_<%_gExIOjAix)4hUKM42dgo4z+3c;Fwr9_umzR^1 zDy=Fkd|0;IR<6IbvgATiRD68-&X`7r2k+kHeb~NYRo31({i$9@lQ!PpD(l%C9JY7_?L>#bPm*G8T)KN~I=&@?3hF zrmNK|Yn3aNicBVhAV@$KB}p<8iLjKBNQ5LwVJ$sHQQ2&krOalt6h#SZ=>Y)AWKu4d zx3{;a(`lp8n8{?S)oO2Vui#$zZ{wzUk<^eyg|*k)Y&L_zU@#c;dc900lYc60ZEY%* zs-vSrr_(W`bUK~gZf}J}34+jQG!#WCmC9nV_*Z8r6biv$@b2#J*RNkLmkR)((P%IX zYsFrFadE-?a$sP9>ju5Cu>k;hn-%boFC`@_D=Q4^+S(e|2?Bw@*w|Q$Kxvxp@9$?= z5d`5nhuv)s7{jn&FbDu}yWRCR6bfM&R_|&w!`EuH z^%R7+Mcr;UNs=G+9vvMuWKl-0udkU8qobn@y}-Fkcnsg%+|1>2AN4LTFMnHcM^RK~XJ?^M003k%8NFWrja4xOK}`D% zX`WOnJwHDO08C9y@t|B?U45H(*L`<#a`GJy<{i1)+uIh4<=gA`TCG-Zzrjag7?wyR z#bS})@U5*au09HQJaH%#VvZZ$KKBgwWM8DCvpmCNOi zdKvF;v}Q7yOb&-*czC$cjGf~{aswS18ChIhTv%A(iskqF|NLsPSkBJQ0028XJN5SX z_!vb|6h&1kRYN<|($dnz!~_qITwh;*dU|4IPl-h0qwI<4;u%afo2{p(hX(e(3Cnx;_{H5!fk`}-!7>GKGHAP7a#=jZ2# zhX)vjA0HpGXQN z$z;;$bdn^AAc)iH6x{U-vUCqoh(PEA5v^B*Hqw&*$?9g0Peb zg5>jgVfm<1sWh9-ET!3ORw|Xk0)-&x?GnGM{9({yu^5d;S;}ZM`q#tWAGi=Jm&>e$ zE|p3Og+g!_VyRS$rA(z#g1Zn?tJNNl$L)4UB9Xnly+WaIa&qGFc+_gOczyHV@AV?6 j2r7b#pdzRU+6?&(&<^1V{7$OH00000NkvXXu0mjfSwK1R literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/3.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/3.png new file mode 100644 index 0000000000000000000000000000000000000000..70b0f3e1d0603800b7411651fb2172f01955bb46 GIT binary patch literal 988 zcmV<210(#2P)Vd>x zh(89UNOW*>QgO)OB#6#}?xK^_;^wF*)WJW%MQ15?D&nL=hbjRBL6Xuz)E0}iw$`TD zJnwK4Uh3PLUXog0?ip@)?$;;JU7q{q!U6#E8;oOqiBV7rN?B^%u^3{ez^hK5`Rl_Y6-d6{7tgwWR3R-sU+(Kwk*777Jf zmTzuu%zKTwxw&vS>_AB2JDZ=M$1M*I4#2V{5{b>tP24e;%YkiUtTbwGZ^u(65{bG- zFPF=rC~jEx3{_PzXkT9+!5pF}HYlP1u)Dj9Sr-=<>zyN&N`=GW27v;=^z<}l z4TVDBgc*immQI2ei^bN~R?M1Cr|lq0k`xRE0bq7^)+~d;pd?9V6*(vXTwGjW(2*RNq_>K#202w>Lr^>t#zwY9b9=jUp*IKXy60YDH0%zAlw2~JzJjY|TW&1OG^ z0>|mPPB6mG&Q3O)tya6by6Q|s0U#6#Vb+O>39?5mm&?^^|G6s|;x)n=fMJ-ImzR3` zo}Zt;zrRLizW`}_M0!(3lqcXV_Rbgx^H5l58g`JG$^bhKGl3CQH{7{@K|X$8p7C z(ed2w*b!=~();^+i+aa2MNujQmy4q0?d^^D%p4mVt2d(Ld311a@bK`^l%y6dl}e3{ zj?T=?)JUa&mv-~$fUOm6d2T>h*f3rl!6< zZ0_#v9v&VH!!VtKAed^)#qat^ByxOw+|$#eD2l}qySuypzJT!i{f^{Ul7vt1p4^{v9v>eyO>0I_^NX~G=jTB)nT#yU{r&ws&kKU!@puLX24q>zWHQYK ziV*Vod=*Zg&xa6l36$`y$638%t#w^*X=x$8Om!uq`FuVWi&Z#du~`f__Rb3(g+~)pb1{k5@S3@wl$*%>~NyJVHoS)pR-?jYdnQ((UanLWt-2pZP0N z!@9b<+S=L>LcP7c9LIHbc6z;D_Yyu8B@~o`Qcwy?K`H3}4f+Sw?_4!#iGgVV0000< KMNUMnLSTYc2hrsK literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/other.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/other.png new file mode 100644 index 0000000000000000000000000000000000000000..a5796aa82861db92a8d248df72c151f187032dd9 GIT binary patch literal 40838 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 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/2.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/2.png new file mode 100644 index 0000000000000000000000000000000000000000..1eac155aae83d21adcf8317a8dcf8f80d0d964bd GIT binary patch literal 464 zcmV;>0WbcEP)kFIhEeSa-?0_iGXe9`6j}$k%mcCFp|{B7g!Epa2CZ zKmiI+fC3bt?*hs>H^!vc7{fWgx|C6$$A`9UD}+d~5Tb3{t4q1Wi~kEHA|kqR;<7Bm zFf7ZGnRMMz(=<)ftk>neXN-C8*R0x2eX_Hz>l=;|QC-(nRiQ>p1XW5YrEZ)^L|xb2 zyNFLa`Wxkh8b!lL!^dSp!$-qMjiTYB;b(C)yR5Y_#uOyKz4s}IF zRsfT3sK2D5(ex;&k1kQIb)M%Tk$Il` zyWd}=o>D4=@U{?wQu?av@Qd^N$+YL?Ohn(rL!!{ zvTVa;UMWQgQA(ZhQkbCLmorV%ZKq|Lrb&{ZM`KKsa~}A>9rsL86x#;z>WZG%Na#@r zJ_H}b1i^>kqemh55d57LJsee4HBI9UUvH(9H=3rYs%mJ=VS1Q^5YN9WTI7#8R{9H&!njA4w0L^8$}R%h7UMRzh`Y5Q-f$I=$m-<^6aZSPu9ENx?a xg@$bIR<8ti5&R@cmS1V09*H7RB#K1$;RE-1D=}0)oB99%002ovPDHLkV1iV9H}S_Bo$H_!nbQ-+;jDu5E`06Op=m|+}7Bbtz?**&e|;1ia&Z`WcN1~`KK!9fgxB2Wa1 zKoKYcMW6_D_dxr;Cxm#XC<=cwIE0YC@5fG7E6$)tyRI|FEKXsJ>ADVM^h{f?wRX-e zPT`!>T4Rjj*5|Te-rBa6QVvTdrEJ@F$ZU{fQYobnB3yFL!w07ieF7-we7sixz&T$# zv;yd^w!Zk?-jmk)dcAJr0mc|(Y&B5ESjzjf*3s-)cIio2D5b2mi_v4PRZ8WK(Pt}K z*R@Zf&bi0q5!7^)4vaB%U4Ju1LlQT}csM=pizb5F)htecM0O1?fYPUBYvdTBfS1s;U;#$^Cx6-EL96HKqbWNT{pQhYneV zo+3s!Hy}O@G_gP{%W|?DL*cydpAGm!?2{`RjL!B2WbSiv0udZFR4YSI^i00000g8T0lfZwA=02AVwwz zM&8`=`8)swgTc4lN~IFM7YhIig+g+&_6}b#=waxej~e#(_tk3k!^6Y$^z`7RHAt)j z5Nfqr-z^e#34$O9LVap&Zf@3_nnPQ4e}CT`+Gx;Luc1Dl?^Amk1M*B5S-zi4$&}+b z0C;+O5{s9Ym+5rcXf%GyG!zPzN+pFt;dZ+L;PLU1n4FyK-nDi8 z6+bL4E@HQ$xlg7Ni-r`Lk|~+~FjIzMq&F3p%3`rtuW`9t7Z(?ue)roR!vsOdX0wQR za&i(5hhJV^5HXodiZMe&Lv8LqI_U3zjg5@~K($&`tJNNl2LOhLhfhyW0bpxuD;A4= zfwWc6&(DaMN~O~2v{>W!`)jpY&vz(@Xf~VQj=GX;&?Y7(5V24w;5XEqKEp`xKtAmK z#*rw&Gv#?607gegX){5lWJ;z#^mH;X*%K&%5-5QZD1j2_?*SDzJu)5~dn}&kr>3U* z2I_P=6N$w7`nq^2n~ zFDjMFTrLLyM@L64xw1WKR;+8g}?rgtsVb*VU-00000NkvXX Hu0mjf&?kid literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c2.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c2.png new file mode 100644 index 0000000000000000000000000000000000000000..572ad1ffba49478afcee3e46fee8198be363a0f6 GIT binary patch literal 626 zcmV-&0*(ENP)k^+-H{C=?P8pdyM%m_&y}rBd<=I*AF*BpP182#HA;fs8*|az23=Wa^H2mUMG`DriI<@ zc2=vE5Q2Nalmqi4*GK5PL2Wi00Ho7t&Ra^;w9RJY@pxWrpB|4#08kVq7K^def3Ost zPA5VLr8F1};xR?&Z-L@IMJPfM${N*bRZ)~%74*RvjYgExMx$|~=E=L1-EQA*w>;Y~ zm&-SZ&$K_A%|fA2AQ0f+K8MwBx7z?9NfImdZoiTw8QmNXhvjm~GDWO&DhLAmyx)h4 zqDU#7PN(e9`*Z4aI>+O2tJP9f6(7+EMJPfMYU-`;ZMsKM6h%=KMNt$*QBF}Rm5jvY zat#K9*A*26!ALThOsCU%20=}XL?W?REY9ci6W=xIHLuxh`g}fz!(p*ldc9sgpU3yn zUn81IrS|*%d_IpvBH3&f0NieOx7+1r%H@>EvTP*7;qZqJC}(Ii8m-ssMy{$VM>2<{ zmt~m{vRbVQg@Uf@@pv2nipApfe@yUKD2k#eilQirq9}@@D2jfHzc(*hEZq7lZ=Pp& z{kpuzzH_Q`?>)ZvbLQSV_kaNa^1*(P&+N3`cDt?k%;szi^WOX&`}X#xL@?B3%*As% zxR>Yo^OAk8aD>1$gfa|s!)bksCAfjmMx#LpQK?jf5QoF@#~6HJola+~hhnwtcKe~B zudlDTUC!_XE;2ug{%@k`bo$}p;b>LZY0Kpj0Q`P`p-=#TZnv9Cr2rt2NbLC39?_5H z@p$&e>`8wznb>T$&6krXii^d9Dt!R3*=)yVgJ&N_&uqA*P!vT`6h*g96vcYIZZsM< zuXNh7Cmap~Krk3wHyu0N_5{U%IanH}syTgty z&2y*p)Opk`N_xFSluh&aSNqd+ol}a+1bi3VO1*B3b$|=sa^gPc80)dy8m#zL%sZ^`g z?(XggA%Y-0Jw2IBrhoQC0bn|vp73Yy33f9#6V=kUS}jSE)M~XTiawuDuh(BGC>A9M jil7LJpa_bfS8qQ7ClFT@Dkzn>00000NkvXXu0mjf=doX; literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/1.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/1.png new file mode 100644 index 0000000000000000000000000000000000000000..f6d0f2e56f9112404f1e0371b7c6de48d3056e20 GIT binary patch literal 800 zcmV+*1K<3KP)20008NNkl zJGj(A9E27Jhq|b^xw*Lb4;0jYz{S}=A+teO9kk%Af?ATr#UEJEE=7Y%(SVT1c|#s~ z)*5T_;xFF$rh89LzI-?L}8y*gaK|k=@M^cl4A%&z!ilj%+P+neMtXAuW@#*Qw z$ZV>j*Xx;_p%jZnT~qX4q#ln40P^`f$8kHd9et$g65q63Dw#~GspPtSbET&%q&`1C zl|r-G{8v)1*Q*p5hA}Pp8;u6f^M1cyD=H0UeKwmdo6V}#L?Xem>_&I#?)|}F0EU3` zK9V9SlKzLQlZ$CR3PqtP6osNt6pBL62DG_!JkQ7D@nA4WQPghF>+9=ODs{5#$>nmj z+wF7j`amF{ZdWMBN_d_Z1VIo4p66BL-xDXg049N9m|QNWloyKy%d$KE*K-`Fm){(r zqtPf73aM2|lDgflmh*T#-e)iCAo~ywhvV(-?Hq@v<#MT(qtR%&Tt2&Tbg@_vLM#@G zQZ1EAZnxX%bRK*lH5QbWO6B?ad9_-3z25IvB}wY{`&#!-CKCfOYOw2lKHtsFjlds?HH&40000C=?1yLZyXP+SwbUg;vWCAfdn?AjSq8jEx;6K-6eR4C`m1Awe{{?k?vQ zlecdlyWp8|N?x@BMJ@bvTq;PUcPvv4Qi_@^s?rKKf(wOXxe%&D}85yz4iWaEVYFfEeDy^-p0Vos-nz2wQ2!ddGZ%a~BEG{nUtKo3i zHmUZ$N+c4zkj-ZG9k#Z%-l8-bjSdbDYSqWbNBxWP>gvk$E_(Kf)M1cI5h;-p={F@! zr_*O=XR<7}+d12P^+}S{)z!sgo{o+VXO!OD-0;G~!vkY15C}Lxy0^E-3+LzOjIouK z6~e94z*2xVFfd@uM6`h=mpVQ^<^_u@ z)-LFc#bSJC+tbs-jb5+!T|qB^?d@#fl!Lit(T$;rvl(NQ9ikR&OYO!CvYxw*Mwv1oC$b|;v@A!M`J<>h7T%kpVL zM@L7Ej@u?@Wigv)FRf>UAP5r^6XkN5SI5T2N~Ka$pIj~{%W^A*{r!D+pL#vIySo9b zuCDIx?iyRy*Vo%*R`nlsxxVzdTyAo5a(;f^v{e+vOeO<>AIDVW2LO-}IEfzEtZQp)l}hEa0002+`1lAKIBe43 zu(xmBZnsjYyuQBbd<_5`4u_2z^m#21e7C7fTWGafu~@9pXcUV@#ga%Qh}IjU;CX)3 zINbE&;sOlt;~w~N0e`8fYt&RI6r4`yxYH${&vP92#dJv~lPuFkU9CFZy1u^tXV5k6 zhP6IFKZ7xFx>)dlE#F7dUr8zm0wKiX@vyLhDSEvg02GTwumUoE(`K_dG16={t31fE z{9V$^%S!+Vhr_zHgTY`h7_cby`~AQKT>D5mVc?WPQY1xE`$>m13@a*htnnEoHCE0A&>-DD7X+p@#%F4mP!S3#^Qq}2n&d<;1 z=H|X6SzcZ?Jjh_%jGN%;>1lp`UTX;kgJ2sNg(eb-Znvw*RV+rinjaHNDV?32otc?& zxm<*hhld9M$mMeCm5hGB-)gl0;O6E=NrlO>%=0|Y^Rg`8-``KwqgveE-NoZ^wJ1rF zNlMN90LNaT3kwU{BFAyMw_?-*nefrhnAqCds@LmU%kAy0lC{-EtyY`HfAr+!#O-#g z_cKbRQZyPJN+a_;|Nj1N#L#ZH8C}9K3LcLK07Ow-U0ofmEtktCxn%R>&HNC}@$z+&+G`}d3jnNYdMWHAZg`!XtibAd812|k# UAGE!VT>t<807*qoM6N<$f(pB&>i_@% literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/4.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/4.png new file mode 100644 index 0000000000000000000000000000000000000000..66470a6b0d6767dbe7e4b9d716d09a6e32ee3256 GIT binary patch literal 916 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 V=M|+_tOS-e44$rjF6*2UngE4UFRK6m literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css new file mode 100644 index 0000000..355d9b0 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css @@ -0,0 +1,40 @@ + +.kf-editor { + width: 100%; + height: 100%; + border: 1px solid #e0e0e0; + position: relative; + top: 0; + left: 0; + + overflow: hidden; + z-index: 2; + background-color: #f6f5ee; +} + +.kf-editor-edit-area { + position: relative; + top: 0; + left: 0; + + z-index: 1; + height: 0; + background-color: white; + /*background-color: white;*/ + /*background-size: 21px 21px;*/ + /*background-position: 0 0,10px 10px;*/ + /*background-image: -webkit-linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef),-webkit-linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef);*/ + /*background-image: linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef),linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef);*/ +} + +.kf-editor-canvas-container { + width: 100%; + height: 100%; +} + +.kf-editor-input-box { + position: fixed; + top: 0; + left: -99999999px; + z-index: 999999; +} \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css new file mode 100644 index 0000000..8026403 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css @@ -0,0 +1,12 @@ + +html, body { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + background: rgba( 48, 48, 48, 0.5 ); +} + +body { + height: 1000px; +} diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css new file mode 100644 index 0000000..b8254b0 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css @@ -0,0 +1,78 @@ +/*! + * 滚动条 + **/ + +.kf-editor-edit-scrollbar { + width: 100%; + height: 16px; + position: absolute; + bottom: 0; + left: 0; + z-index: 994; + border-top: 1px solid #ddd; +} + +.kf-editor-ui-left-button { + position: absolute; + top: 0; + left: 0; + width: 5px; + height: 100%; + background: white; +} + +.kf-editor-ui-right-button { + position: absolute; + top: 0; + right: 0; + width: 5px; + height: 100%; + background: white; +} + +.kf-editor-ui-track { + position: absolute; + top: 0; + left: 5px; + width: 0; + height: 100%; + background-image: url(../images/scrollbar/edit/bar-left.png), url(../images/scrollbar/edit/bar-right.png), url(../images/scrollbar/edit/bar-bg.png); + background-repeat: no-repeat, no-repeat, repeat-x; + background-position: 0 0, right 0, 0 0; +} + +.kf-editor-ui-thumb { + position: absolute; + top: 0; + left: 0; + width: 0; + height: 100%; +} + +.kf-editor-ui-thumb-left { + width: 5px; + height: 100%; + position: absolute; + top: 0; + left: 0; + background: url(../images/scrollbar/edit/thumb-left.png) no-repeat 0 0; + z-index: 1; +} + +.kf-editor-ui-thumb-right { + width: 5px; + height: 100%; + position: absolute; + top: 0; + right: 0; + background: url(../images/scrollbar/edit/thumb-right.png) no-repeat 0 0; +} + +.kf-editor-ui-thumb-body { + position: absolute; + top: 0; + left: 5px; + width: 0; + height: 100%; + background: url(../images/scrollbar/edit/thumb-bg.png) repeat-x 0 0; +} \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css new file mode 100644 index 0000000..e8ac470 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css @@ -0,0 +1,536 @@ +/* 工具栏 */ +.kf-editor-toolbar { + width: 100%; + padding: 1px 10px; + position: relative; + top: 0; + left: 0; + z-index: 2; + background-color: #f6f5ee; + border-bottom: 1px solid #ccc; + -moz-box-shadow:1px 1px 1px rgba( 0, 0, 0, 0.1 ); + -webkit-box-shadow:1px 1px 1px rgba( 0, 0, 0, 0.1 ); + box-shadow:1px 1px 1px rgba( 0, 0, 0, 0.1 ); + color: #000; + font-family: Helvetica, Arial, "微软雅黑", "Microsoft YaHei", "宋体", sans-serif; +} + +/* 按钮 */ +.kf-editor-ui-button { + padding: 8px 6px; + height: 79px; + font-size: 12px; + display: inline-block; + border: 1px solid transparent; + border-radius: 3px; + cursor: default; + position: relative; + top: 0; + left: 0; + z-index: 3; + vertical-align: top; + opacity: 0.5; + margin-right: 1px; +} + +.kf-editor-toolbar .kf-editor-ui-overlap-button { + width: 100%; + height: 25px; + background: #53b856; + border-radius: 0; +} + +.kf-editor-ui-button-icon { + width: 32px; + height: 32px; + margin: 2px auto; +} + +.kf-editor-ui-button-label { + color: #666; + text-align: center; + display: block; + font-size: 12px; + line-height: 20px; +} + +.kf-editor-ui-overlap-button .kf-editor-ui-button-label { + padding: 3px 5px; + text-align: left; + color: white; + font-size: 12px; +} + +.kf-editor-ui-button-sign { + border: 4px solid transparent; + border-top-color: #2d2d2d; + width: 0; + height: 0; + display: inline-block; + margin: 8px auto; + vertical-align: top; +} + +.kf-editor-ui-button-mount-point { + display: none; + position: absolute; + bottom: -2px; + left: -1px; +} + +.kf-editor-ui-overlap-button .kf-editor-ui-button-mount-point { + width: 100%; + height: 10000px; +} + +.kf-editor-ui-wrap-group { + overflow-x: hidden; + overflow-y: auto; +} + +.kf-editor-ui-overlap-button .kf-editor-ui-button-mount-point { + top: 27px; +} + +.kf-editor-toolbar .kf-editor-ui-button-in { + border-color: #8fcc91!important; + background: #e0f0dd!important; +} + +.kf-editor-toolbar .kf-editor-ui-overlap-button { + padding-top: 0; + padding-bottom: 0; + border-color: #61b864!important; + background: #61b864!important; +} + +/* 分割符 */ +.kf-editor-ui-delimiter { + width: 11px; + height: 100%; + display: none; +} + +.kf-editor-ui-enabled.kf-editor-ui-button:HOVER { + border: 1px solid #a9d9ab; + background: #ebf7e6; +} + +.kf-editor-ui-enabled.kf-editor-ui-overlap-button:HOVER { + border: 1px solid #53b856; + background: #53b856; +} + +.kf-editor-ui-delimiter-line { + width: 1px; + height: 100%; + margin: 0 auto; + background: -webkit-linear-gradient(top, rgba(233, 233, 233, 0.11), rgba(92, 92, 92, 0.20) 60%, rgba(92, 92, 92, 0.41) 80%, rgba(123, 123, 123, 0.50)); +} + +/* box */ +.kf-editor-ui-box { + border: 1px solid #b3aead; + border-radius: 3px; + box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.11); + background: white; + position: absolute; + top: 0; + left: -1px; + overflow-x: hidden; + overflow-y: auto; +} + +.kf-editor-ui-area .kf-editor-ui-box { + border-color: #61b864; +} + +.kf-editor-ui-box-container { + font-size: 12px; +} + +.kf-editor-ui-box-group-title { + background-color: #f7f6f0; + height: 23px; + line-height: 23px; + font-size: 12px; + border: 1px solid #ebeae4; + border-width: 1px 0; + padding-left: 12px; +} + +.kf-editor-ui-box-group-item-container { + padding: 7px 9px 17px 9px; +} + +.kf-editor-ui-overlap-container { + overflow: hidden; +} + +.kf-editor-ui-area .kf-editor-ui-box { + top: -1px; +} + +.kf-editor-ui-overlap-container .kf-editor-ui-button-sign { + border-top-color: white; + border-width: 4px; + margin-left: 10px; + margin-top: 8px; +} + +.kf-editor-ui-yushe-btn .kf-editor-ui-box-item { + border: 1px solid transparent; + padding: 5px; +} + +.kf-editor-ui-box-item { + display: inline-block; + margin: 4px; +} + +.kf-editor-ui-box-item-content:HOVER { + border-color: #dff3df; +} + +.kf-editor-ui-box-item-content:HOVER .kf-editor-ui-box-item-val { + border-color: #6eb864; +} + +.kf-editor-ui-area .kf-editor-ui-box-item { + position: relative; + top: 0; + left: 0; + width: 32px; + height: 32px; + border: 0; + margin: 3px; + padding: 0; + z-index: 1; +} + +.kf-editor-ui-area .kf-editor-ui-box-item img { + width: 32px; + height: 32px; +} + + +.kf-editor-ui-box-item-label { + margin-bottom: 5px; +} + +.kf-editor-ui-box-item-content { + background: white; + border: 1px solid white; +} + +.kf-editor-ui-area .kf-editor-ui-box-item-content { + position: absolute; + top: 0; + left: 0; +} + +.kf-editor-ui-area .kf-editor-ui-box-item-content:HOVER { + border: 1px solid #dff3df; +} + +.kf-editor-ui-box-item-val { + padding: 5px; + line-height: 0; + border: 1px solid #808080; +} + +.kf-editor-ui-area .kf-editor-ui-box-item-val { + padding: 0; + margin: 0; +} + +/* area */ +.kf-editor-ui-area { + height: 79px; + display: inline-block; + cursor: default; + position: relative; + top: 0; + left: 0; + vertical-align: top; + opacity: 0.5; + z-index: 4; + border: 1px solid #e0dfd5; + border-radius: 4px; + background: white; + margin: 8px 10px; +} + +.kf-editor-ui-area-container { + width: 293px; + height: 70px; + /*margin: 7px 5px 5px 5px;*/ + margin: 5px; + display: inline-block; + border-right: 0; + vertical-align: top; + position: relative; + top: 0; + left: 0; + overflow: hidden; +} + +.kf-editor-ui-area-panel { + position: absolute; + top: 0; + left: 0; + line-height: 0; + background: white; + -webkit-transition: top 0.5s linear; + -moz-transition: top 0.5s linear; + transition: top 0.5s linear; +} + +.kf-editor-ui-area-button-container { + display: inline-block; + width: 16px; + height: 100%; + overflow: hidden; + text-align: center; + border: 0 solid #D3D3D3; + border-left-width: 1px; + background-color: #f2f0e6; +} + +.kf-editor-ui-moveup-button, .kf-editor-ui-movedown-button { + line-height: 25px; + height: 30px; +} + +.kf-editor-ui-moveup-button { + background: url("../images/toolbar/btn.png") -304px 9px no-repeat; +} + +.kf-editor-ui-movedown-button { + border: 1px solid #D3D3D3; + border-width: 1px 0; + background: url("../images/toolbar/btn.png") -325px 9px no-repeat; +} + +.kf-editor-ui-area-button { + width: 100%; + height: 50px; + line-height: 26px; + background: url("../images/toolbar/btn.png") -346px 0 no-repeat; +} + +.kf-editor-ui-enabled .kf-editor-ui-area-button:HOVER { + background-color: #e5e4e1; +} + +.kf-editor-ui-enabled .kf-editor-ui-moveup-button:HOVER { + background-color: #e5e4e1; +} + +.kf-editor-ui-enabled .kf-editor-ui-movedown-button:HOVER { + background-color: #e5e4e1; +} + +.kf-editor-ui-area-button-container .kf-editor-ui-disabled { + opacity: 0.25; + background-color: transparent!important; +} + +.kf-editor-ui-area-mount { + position: absolute; + top: 0; + left: 0; + display: none; +} + +.kf-editor-ui-overlap-title { + width: 100%; + line-height: 1.5; +} + +/* list */ +.kf-editor-ui-list { + background: #f9f8f5; + border: 1px solid #b3aead; + border-radius: 3px; + position: fixed; + top: 0; + left: 0; + box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.11); +} + +.kf-editor-ui-list-bg { + display: none; +} + +.kf-editor-ui-list-item-container { + position: relative; + top: 0; + left: 0; + z-index: 2; +} + +.kf-editor-ui-list-item { + line-height: 24px; + padding: 2px 6px; + border: 1px solid transparent; + border-width: 1px 0; +} + +.kf-editor-ui-list-item-select { + color: #61b864; + font-weight: bold; +} + +.kf-editor-ui-list-item-select .kf-editor-ui-list-item-icon { + visibility: visible; + width: 16px; + height: 16px; + background: url(../images/toolbar/btn.png) no-repeat -367px 0; +} + +.kf-editor-ui-list-item:HOVER { + border-color: #beddbf; + background-color: #ecf3e9; +} + +.kf-editor-ui-list-item-icon { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; + margin-top: -2px; + margin-right: 4px; + visibility: hidden; +} + +/* area 内容区 */ +.kf-editor-ui-area-item { + width: 26px; + height: 26px; + position: absolute; + top: 0; + left: 0; +} + +.kf-editor-ui-area-item-inner { + width: 34px; + height: 34px; + border: 1px solid white; + position: absolute; + top: -4px; + left: -4px; + -webkit-transition: all 0.1s linear; + -moz-transition: all 0.1s linear; + transition: all 0.1s linear; + + -webkit-transform: scale( 0.76 ); + -moz-transform: scale( 0.76 ); + transform: scale( 0.76 ); +} + +.kf-editor-ui-enabled .kf-editor-ui-area-item-inner:HOVER { + border-color: #dff3df; + + -webkit-transform: scale( 1 ); + -moz-transform: scale( 1 ); + transform: scale( 1 ); +} + +.kf-editor-ui-area-item-img { + width: 32px; + height: 32px; + border: 1px solid #808080; + -webkit-transition: all 0.1s linear; + -moz-transition: all 0.1s linear; + transition: all 0.1s linear; +} + +.kf-editor-ui-enabled .kf-editor-ui-area-item-inner:HOVER .kf-editor-ui-area-item-img { + border-color: #6eb864; +} + +.kf-editor-ui-enabled { + opacity: 1; +} + +.kf-editor-ui-overlap-container .kf-editor-ui-box-item { + width: 34px; + height: 34px; + border: 1px solid white; +} + +.kf-editor-ui-overlap-container .kf-editor-ui-box-item-content:HOVER { +} + +.kf-editor-ui-overlap-container .kf-editor-ui-box-item-val { + width: 32px; + height: 32px; +} + +/* scrollbar */ +.kf-editor-ui-box::-webkit-scrollbar { + width: 17px; + background: url(../images/scrollbar/custom/bg.png) 0 0 repeat-y white; +} + +.kf-editor-ui-box::-webkit-scrollbar-button:end:increment { + height: 5px; + background: url(../images/scrollbar/custom/down.png) 0 0 repeat-y white; +} +/*定义滚动条渐减按扭的样式 */ +.kf-editor-ui-box::-webkit-scrollbar-button:start:decrement { + height: 5px; + background: url(../images/scrollbar/custom/up.png) 0 0 repeat-y white; +} + +/* 垂直滚动条的第三层轨道的上段 */ +.kf-editor-ui-box::-webkit-scrollbar-track-piece:vertical:start { + background-image: url(../images/scrollbar/custom/top.png), url(../images/scrollbar/custom/bg.png); + background-repeat: no-repeat, repeat-y; +} +/* 垂直滚动条的第三层轨道的下段 */ +.kf-editor-ui-box::-webkit-scrollbar-track-piece:vertical:end { + background-image: url(../images/scrollbar/custom/bottom.png), url(../images/scrollbar/custom/bg.png); + background-repeat: no-repeat, repeat-y; + background-position: 0 bottom, 0 0; +} +/* 垂直滚动条的滑动块 */ +.kf-editor-ui-box::-webkit-scrollbar-thumb:vertical { + /*background: url(./images2/bar.png) 6px 0 no-repeat;*/ + /*background-size: 6px;*/ + -webkit-border-image: url(../images/scrollbar/custom/bar.png) 8; + border-width: 10px; +} + +.kf-editor-ui-wrap-group::-webkit-scrollbar { + width: 17px; + background: url(../images/scrollbar/custom/bg.png) 0 0 repeat-y white; +} + +.kf-editor-ui-wrap-group::-webkit-scrollbar-button:end:increment { + height: 5px; + background: url(../images/scrollbar/custom/down.png) 0 0 repeat-y white; +} +/*定义滚动条渐减按扭的样式 */ +.kf-editor-ui-wrap-group::-webkit-scrollbar-button:start:decrement { + height: 5px; + background: url(../images/scrollbar/custom/up.png) 0 0 repeat-y white; +} + +/* 垂直滚动条的第三层轨道的上段 */ +.kf-editor-ui-wrap-group::-webkit-scrollbar-track-piece:vertical:start { + background-image: url(../images/scrollbar/custom/top.png), url(../images/scrollbar/custom/bg.png); + background-repeat: no-repeat, repeat-y; +} +/* 垂直滚动条的第三层轨道的下段 */ +.kf-editor-ui-wrap-group::-webkit-scrollbar-track-piece:vertical:end { + background-image: url(../images/scrollbar/custom/bottom.png), url(../images/scrollbar/custom/bg.png); + background-repeat: no-repeat, repeat-y; + background-position: 0 bottom, 0 0; +} +/* 垂直滚动条的滑动块 */ +.kf-editor-ui-wrap-group::-webkit-scrollbar-thumb:vertical { + -webkit-border-image: url(../images/scrollbar/custom/bar.png) 8; + border-width: 10px; +} \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css new file mode 100644 index 0000000..de07bba --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css @@ -0,0 +1,540 @@ +/** + * 所有构件样式规则 + **/ +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-widget { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-drag: none; + color: #000000; + line-height: 1.5; + font-size: 12px; + font-family: "ff-tisa-web-pro-1", "ff-tisa-web-pro-2", "Lucida Grande", "Hiragino Sans GB", "Hiragino Sans GB W3", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; + -webkit-font-smoothing: antialiased; + outline: none; + display: inline-block; + vertical-align: top; + position: relative; + top: 0; + left: 0; +} +.fui-widget.fui-selectable { + -webkit-user-select: text; + -khtml-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + -webkit-user-drag: text; +} +.fui-widget * { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-drag: none; +} +.fui-widget.fui-disabled { + opacity: 0.3!important; +} +.fui-widget.fui-hide { + display: none!important; +} +.fui-widget.fui-mask-animate { + -webkit-transition: all 0.2s; +} +.fui-widget.fui-mask-hint { + -webkit-transform: perspective(600px) translateZ(30px); +} + +/** + * 容器类通用样式 + **/ +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-container { + overflow: hidden; + position: relative; + top: 0; + left: 0; +} +.fui-container.fui-disabled { + opacity: 1!important; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-button-menu { + border: 1px solid white; +} +.fui-button-menu:HOVER { + border-color: #d5e1f2; +} +.fui-button-menu.fui-button-active { + border-color: #d5e1f2; + background: #d5e1f2; +} +.fui-button-menu.fui-button-active .fui-button { + background: #d5e1f2; +} +.fui-button-menu.fui-layout-top, +.fui-button-menu.fui-layout-bottom { + text-align: center; +} +.fui-button-menu.fui-layout-top .fui-open-btn, +.fui-button-menu.fui-layout-bottom .fui-open-btn { + display: block; +} + +/** + * 通用button + */ +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-button { + overflow: hidden; + cursor: default; + font-size: 0; +} +.fui-button ._layout .fui-label { + display: block; +} +.fui-button ._layout .fui-icon { + display: block; +} +.fui-button .fui-icon { + display: inline-block; + vertical-align: middle; +} +.fui-button .fui-label { + display: inline-block; + vertical-align: middle; +} +.fui-button.fui-button-layout-top .fui-label { + display: block; +} +.fui-button.fui-button-layout-top .fui-icon { + display: block; +} +.fui-button.fui-button-layout-bottom .fui-label { + display: block; +} +.fui-button.fui-button-layout-bottom .fui-icon { + display: block; +} +.fui-button:HOVER { + background-color: #d5e1f2 !important; + color: #000000 !important; +} +.fui-button:ACTIVE { + background-color: #87a9da !important; + color: #000000 !important; +} +.fui-button.fui-disabled:HOVER { + background-color: #ffffff !important; + color: #000000 !important; +} +.fui-button.fui-disabled:ACTIVE { + background-color: #ffffff !important; + color: #000000 !important; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-colorpicker { + background-color: #fff; +} +.fui-colorpicker-container { + border: 1px solid #d3d3d3; +} +.fui-colorpicker-container .fui-colorpicker-title { + background: #eee; + padding: 2px 4px; +} +.fui-colorpicker-container .fui-colorpicker-colors { + margin: 0; + padding: 0; + font-size: 0; + line-height: 0; +} +.fui-colorpicker-container .fui-colorpicker-colors-line0 { + margin-bottom: 3px; +} +.fui-colorpicker-container .fui-colorpicker-item { + display: inline-block; + margin: 0 2px; + width: 13px; + height: 13px; + border-style: solid; + border-width: 1px; +} +.fui-colorpicker-container .fui-colorpicker-commoncolor, +.fui-colorpicker-container .fui-colorpicker-standardcolor { + margin: 4px 3px; + white-space: nowrap; +} +.fui-colorpicker-container .fui-colorpicker-toolbar { + margin: 4px; + height: 27px; +} +.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-preview { + display: inline-block; + height: 25px; + line-height: 25px; + width: 120px; + border: 1px solid #d3d3d3; +} +.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-clear { + display: inline-block; + height: 25px; + line-height: 25px; + width: 60px; + border: 1px solid #d3d3d3; + font-size: 12px; + text-align: center; + position: absolute; + right: 5px; + cursor: pointer; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ + +/** + * 通用button + */ +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-dialog { + position: fixed; + top: -1000000px; + left: -100000px; + border: 1px solid #B1B1B1; + background: #fff; +} +.fui-dialog .fui-panel-content { + width: auto!important; + height: auto!important; + padding: 2px; +} +.fui-dialog .fui-dialog-caption { + margin: 0; + padding: 5px; + font-size: 16px; + font-weight: normal; + line-height: 1; + display: inline-block; +} +.fui-dialog .fui-dialog-head .fui-close-button { + float: right; +} +.fui-dialog .fui-dialog-head .fui-close-button .fui-close-button-icon { + width: 16px; + height: 16px; + background: url("images/close.png") no-repeat 0 0; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-drop-panel { + border: 1px solid #d3d3d3; + overflow: hidden; + position: relative; +} +.fui-drop-panel .fui-drop-panel-content { + display: inline-block; +} +.fui-drop-panel .fui-drop-panel-placeholder { + display: none; +} +.fui-drop-panel .fui-drop-panel-button { + border-left: 1px solid #d3d3d3; + visibility: visible; +} +.fui-drop-panel .fui-drop-panel-button:HOVER { + border-color: #d5e1f2; +} +.fui-drop-panel .fui-drop-panel-button:ACTIVE { + border-color: #87a9da; +} +.fui-drop-panel:HOVER { + border-color: #d5e1f2; +} +.fui-drop-panel:HOVER .fui-drop-panel-button { + border-left-color: #d5e1f2; +} +.fui-drop-panel:ACTIVE { + border-color: #87a9da; +} +.fui-drop-panel:ACTIVE .fui-drop-panel-button { + border-left-color: #d5e1f2; +} +.fui-drop-panel.fui-drop-panel-open { + overflow: visible; +} +.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-content { + border: 1px solid #d3d3d3; + position: absolute; + top: -1px; + left: -1px; +} +.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-button { + visibility: hidden; +} +.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-placeholder { + display: inline-block; +} +.fui-drop-panel-popup { + border: 1px solid #d3d3d3; +} +.fui-drop-panel-popup:HOVER { + border-color: #d5e1f2; +} +.fui-drop-panel-popup:HOVER .fui-drop-panel-button { + border-left-color: #d5e1f2; +} +.fui-drop-panel-popup:ACTIVE { + border-color: #87a9da; +} +.fui-drop-panel-popup:ACTIVE .fui-drop-panel-button { + border-left-color: #d5e1f2; +} + +.fui-icon { + text-align: center; + font-size: 0; +} +.fui-icon img { + display: inline-block; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-input-button { + border: 1px solid #ababab; +} +.fui-input-button .fui-input { + vertical-align: middle; + border: none!important; +} +.fui-input-button .fui-button { + vertical-align: middle; +} +.fui-input-button:HOVER { + border-color: #87a9da; +} +.fui-input-button:ACTIVE { + border-color: #87a9da; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-input { + border: 1px solid #d3d3d3; + padding: 1px; + margin: 0; +} +.fui-input:HOVER, +.fui-input:FOCUS { + border-color: #4d90fe!important; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-item { + font-size: 0; +} +.fui-item .fui-icon { + vertical-align: middle; +} +.fui-item .fui-label { + vertical-align: middle; +} +.fui-item.fui-item-selected { + background: #87a9da; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-label-panel .fui-label-panel-label { + width: 100%; + color: #666; +} +.fui-label-panel.fui-no-position .fui-label-panel-label { + position: static!important; +} +.fui-label-panel.fui-layout-bottom .fui-label-panel-label { + position: absolute; + bottom: 0; + left: 0; + top: auto; + z-index: 2; +} + +.fui-label { + cursor: default; + display: inline-block; + white-space: nowrap; +} + +/** + * 通用button + */ +.fui-mask { + position: fixed; + z-index: 99998; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-menu { + background-color: #fff; + border: 1px solid #d3d3d3; +} +.fui-menu .fui-item { + padding: 2px 5px; + display: block!important; +} +.fui-menu .fui-item:HOVER { + background: #d5e1f2; +} + +/** + * 通用button + */ +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-panel { + display: inline-block; + vertical-align: top; + overflow-y: auto; + overflow-x: hidden; +} +.fui-panel .fui-panel-content { + position: relative; + top: 0; + left: 0; +} +.fui-panel .fui-panel-content { + width: 100%; + height: 100%; +} +.fui-panel.fui-container-column { + font-size: 0; +} +.fui-panel.fui-container-column .fui-column { + display: block; +} + +/** + * 通用button + */ +.fui-ppanel::-webkit-scrollbar { + width: 15px; +} +.fui-ppanel::-webkit-scrollbar-button:start:decrement, +.fui-ppanel::-webkit-scrollbar-button:end:decrement, +.fui-ppanel::-webkit-scrollbar-button:start:increment, +.fui-ppanel::-webkit-scrollbar-button:end:increment, +.fui-ppanel::-webkit-scrollbar-thumb { + border: 1px solid #e7e7e7; +} +.fui-ppanel.fui-ppanel-position { + position: fixed; + z-index: 99999; +} + +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-separator { + background: #6d6d6d; +} + +/** + * Spin-button + */ +.fui-spin-button .fui-spin-up-btn .fui-icon, +.fui-spin-button .fui-spin-down-btn .fui-icon { + width: 16px; + height: 9px; + background: url("images/up.png") no-repeat 3px 1.5px; +} +.fui-spin-button .fui-spin-down-btn .fui-icon { + background-image: url("images/down.png"); +} + +/** + * 通用button + */ +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-tabs .fui-selected { + background-color: #d5e1f2; +} + +/** + * 可切换Button (ToggleButton) + */ +/** + * FUI 通用样式定义 + */ +/*------------ var*/ +/*------------ mixin*/ +.fui-toggle-button.fui-button-pressed { + background-color: #aec5e6; +} +.fui-toggle-button.fui-button-pressed.fui-disabled { + background-color: #aec5e6 !important; +} diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css new file mode 100644 index 0000000..3faab2a --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css @@ -0,0 +1,10 @@ +/*! + * ==================================================== + * Themes file * Flex UI - v1.0.0 - 2014-07-28 + * https://github.com/fex-team/fui + * GitHub: https://github.com/fex-team/fui.git + * Copyright (c) 2014 Baidu Kity Group; Licensed MIT + * ==================================================== + */ + +.fui-widget{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;color:#000;line-height:1.5;font-size:12px;font-family:ff-tisa-web-pro-1,ff-tisa-web-pro-2,"Lucida Grande","Hiragino Sans GB","Hiragino Sans GB W3","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;-webkit-font-smoothing:antialiased;outline:0;display:inline-block;vertical-align:top;position:relative;top:0;left:0}.fui-widget.fui-selectable{-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;-webkit-user-drag:text}.fui-widget *{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none}.fui-widget.fui-disabled{opacity:.3!important}.fui-widget.fui-hide{display:none!important}.fui-widget.fui-mask-animate{-webkit-transition:all .2s}.fui-widget.fui-mask-hint{-webkit-transform:perspective(600px) translateZ(30px)}.fui-container{overflow:hidden;position:relative;top:0;left:0}.fui-container.fui-disabled{opacity:1!important}.fui-button-menu{border:1px solid #fff}.fui-button-menu:HOVER{border-color:#d5e1f2}.fui-button-menu.fui-button-active{border-color:#d5e1f2;background:#d5e1f2}.fui-button-menu.fui-button-active .fui-button{background:#d5e1f2}.fui-button-menu.fui-layout-bottom,.fui-button-menu.fui-layout-top{text-align:center}.fui-button-menu.fui-layout-bottom .fui-open-btn,.fui-button-menu.fui-layout-top .fui-open-btn{display:block}.fui-button{overflow:hidden;cursor:default;font-size:0}.fui-button ._layout .fui-icon,.fui-button ._layout .fui-label{display:block}.fui-button .fui-icon,.fui-button .fui-label{display:inline-block;vertical-align:middle}.fui-button.fui-button-layout-bottom .fui-icon,.fui-button.fui-button-layout-bottom .fui-label,.fui-button.fui-button-layout-top .fui-icon,.fui-button.fui-button-layout-top .fui-label{display:block}.fui-button:HOVER{background-color:#d5e1f2!important;color:#000!important}.fui-button:ACTIVE{background-color:#87a9da!important;color:#000!important}.fui-button.fui-disabled:ACTIVE,.fui-button.fui-disabled:HOVER{background-color:#fff!important;color:#000!important}.fui-colorpicker{background-color:#fff}.fui-colorpicker-container{border:1px solid #d3d3d3}.fui-colorpicker-container .fui-colorpicker-title{background:#eee;padding:2px 4px}.fui-colorpicker-container .fui-colorpicker-colors{margin:0;padding:0;font-size:0;line-height:0}.fui-colorpicker-container .fui-colorpicker-colors-line0{margin-bottom:3px}.fui-colorpicker-container .fui-colorpicker-item{display:inline-block;margin:0 2px;width:13px;height:13px;border-style:solid;border-width:1px}.fui-colorpicker-container .fui-colorpicker-commoncolor,.fui-colorpicker-container .fui-colorpicker-standardcolor{margin:4px 3px;white-space:nowrap}.fui-colorpicker-container .fui-colorpicker-toolbar{margin:4px;height:27px}.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-preview{display:inline-block;height:25px;line-height:25px;width:120px;border:1px solid #d3d3d3}.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-clear{display:inline-block;height:25px;line-height:25px;width:60px;border:1px solid #d3d3d3;font-size:12px;text-align:center;position:absolute;right:5px;cursor:pointer}.fui-dialog{position:fixed;top:-1000000px;left:-100000px;border:1px solid #B1B1B1;background:#fff}.fui-dialog .fui-panel-content{width:auto!important;height:auto!important;padding:2px}.fui-dialog .fui-dialog-caption{margin:0;padding:5px;font-size:16px;font-weight:400;line-height:1;display:inline-block}.fui-dialog .fui-dialog-head .fui-close-button{float:right}.fui-dialog .fui-dialog-head .fui-close-button .fui-close-button-icon{width:16px;height:16px;background:url(images/close.png) no-repeat}.fui-drop-panel{border:1px solid #d3d3d3;overflow:hidden;position:relative}.fui-drop-panel .fui-drop-panel-content{display:inline-block}.fui-drop-panel .fui-drop-panel-placeholder{display:none}.fui-drop-panel .fui-drop-panel-button{border-left:1px solid #d3d3d3;visibility:visible}.fui-drop-panel .fui-drop-panel-button:HOVER{border-color:#d5e1f2}.fui-drop-panel .fui-drop-panel-button:ACTIVE{border-color:#87a9da}.fui-drop-panel:HOVER{border-color:#d5e1f2}.fui-drop-panel:HOVER .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-drop-panel:ACTIVE{border-color:#87a9da}.fui-drop-panel:ACTIVE .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-drop-panel.fui-drop-panel-open{overflow:visible}.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-content{border:1px solid #d3d3d3;position:absolute;top:-1px;left:-1px}.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-button{visibility:hidden}.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-placeholder{display:inline-block}.fui-drop-panel-popup{border:1px solid #d3d3d3}.fui-drop-panel-popup:HOVER{border-color:#d5e1f2}.fui-drop-panel-popup:HOVER .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-drop-panel-popup:ACTIVE{border-color:#87a9da}.fui-drop-panel-popup:ACTIVE .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-icon{text-align:center;font-size:0}.fui-icon img{display:inline-block}.fui-input-button{border:1px solid #ababab}.fui-input-button .fui-input{vertical-align:middle;border:none!important}.fui-input-button .fui-button{vertical-align:middle}.fui-input-button:ACTIVE,.fui-input-button:HOVER{border-color:#87a9da}.fui-input{border:1px solid #d3d3d3;padding:1px;margin:0}.fui-input:FOCUS,.fui-input:HOVER{border-color:#4d90fe!important}.fui-item{font-size:0}.fui-item .fui-icon,.fui-item .fui-label{vertical-align:middle}.fui-item.fui-item-selected{background:#87a9da}.fui-label-panel .fui-label-panel-label{width:100%;color:#666}.fui-label-panel.fui-no-position .fui-label-panel-label{position:static!important}.fui-label-panel.fui-layout-bottom .fui-label-panel-label{position:absolute;bottom:0;left:0;top:auto;z-index:2}.fui-label{cursor:default;display:inline-block;white-space:nowrap}.fui-mask{position:fixed;z-index:99998}.fui-menu{background-color:#fff;border:1px solid #d3d3d3}.fui-menu .fui-item{padding:2px 5px;display:block!important}.fui-menu .fui-item:HOVER{background:#d5e1f2}.fui-panel{display:inline-block;vertical-align:top;overflow-y:auto;overflow-x:hidden}.fui-panel .fui-panel-content{position:relative;top:0;left:0;width:100%;height:100%}.fui-panel.fui-container-column{font-size:0}.fui-panel.fui-container-column .fui-column{display:block}.fui-ppanel::-webkit-scrollbar{width:15px}.fui-ppanel::-webkit-scrollbar-button:end:decrement,.fui-ppanel::-webkit-scrollbar-button:end:increment,.fui-ppanel::-webkit-scrollbar-button:start:decrement,.fui-ppanel::-webkit-scrollbar-button:start:increment,.fui-ppanel::-webkit-scrollbar-thumb{border:1px solid #e7e7e7}.fui-ppanel.fui-ppanel-position{position:fixed;z-index:99999}.fui-separator{background:#6d6d6d}.fui-spin-button .fui-spin-down-btn .fui-icon,.fui-spin-button .fui-spin-up-btn .fui-icon{width:16px;height:9px;background:url(images/up.png) 3px 1.5px no-repeat}.fui-spin-button .fui-spin-down-btn .fui-icon{background-image:url(images/down.png)}.fui-tabs .fui-selected{background-color:#d5e1f2}.fui-toggle-button.fui-button-pressed{background-color:#aec5e6}.fui-toggle-button.fui-button-pressed.fui-disabled{background-color:#aec5e6!important} \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/close.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8885f47e0ce084c2a963bad9a3d9998e4c292d GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+uenMVO6iP5s=4O z;1O92G;jkLPtXOMsMzWR&J6Sy{Q{Czpb>SXl)C zO)h3IT>gKzKAIY^ORcOtQZv&tN*GLyjZf`ioC;JUj${s0O?YNXNd`zsq;KE}pb|+W zCBB)tsU?*KsSIFG=ojRr+iwc%W1gMI^(Ad(<+{D7f)T~Q8m<^~z7|ERA%qn2y z=vkV1J2~ZkTHXkhPC}9n4f142%gjjyhM0aver~FMT1kPvp{bF9erjTIWo9xkD3bF~ t*vTn*x|zA@ddTuX*XbJ?niv~HNHZfnpa{bxe=VSG44$rjF6*2UngElh3X%W- literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/down.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/down.png new file mode 100644 index 0000000000000000000000000000000000000000..cf92db68069cad3c42ef007f543f905fe00fb2b3 GIT binary patch literal 1089 zcmaJ=Ye*DP6rPCG7VH5P6%@m0nAFZ|cgJo_jdoch0%zyWO$c z^~J8GE)2tpqcuVt?T%egRDk~9C+6Nk+Y%T_!aAc7rX>qtA;o9_cvO>`KpaR)+qSzP zfMGLB)kG2|#SOe{Xr$!CkQvQHXbcNfWlTwK0T6EhO{yLw#;;r_a8(Hs8+{@znqkna z*0fuouDv!Px3|cZ3Q@Hd4`g^mpaCf187-yTd?rX_d3j_zZi>LOA+RM#{3$9a#_+IV z0o+G=+%nBDILDEU*T-?pYMiARmZH((+>Dp^aXedrPksc-W+{z)T&SMRg-$`D8A6k% zsB}6_rah!#HBn4uWu?QxvThXNw%c?lW!$=5l4B5nEnBJyRYS)eMybJQg+T&U`lkiW zoTAn3$!kIvMr9{n0UC3!&i!utm=-VJc|%TKC0VL(q#}8f&}6qRaN1=6}Fx-P4#XwXD zB{EOFwf(MJ^nxAT?_#d{=P!PA`ahQ)I5x2PZQ)mOPUnK+Jx>-DmhXL?*g95!b9W&% zcqQF?_QJEk{lmn=jv1$W=6wp>bKSVSeBZ0ojgE7x*Q9o;$4l>AD!TBv;n0z?2VZ_h z-`qOW_r8AEyKwFVvH#RXZI$&XHq@0aI*EO(IV$++k*i;34c;DFOm>aE9O+ftL)Yhb vulP08KTeb`K6q{8=%!txMK@0be|?=zW7=RMaef)Q+j-Q{NUhMfZcFEHB|va9 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/open.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/open.png new file mode 100644 index 0000000000000000000000000000000000000000..861a04e883c7eeabda06bf1ea385218b2c34ff3e GIT binary patch literal 859 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&V!2%?m`@?4fDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&U|7|wYy{+S z7I;J!1L+hn=AU--E|4+Z)5S4F<9zLTL%t>hiMEI0yJu7|i1R&MraXJMw)#ZT{6|@j z9*Oeo5?GfYQJ|*c6TqJQ=lAvxrP=qE_$%kV*?8tH7bkDovpqK&71QVVu=Tkx7(Pu2 z+3;`gtV`^Z`wq|F_DHDboX%7JZF}}ENqbyZe9-eF`zHNJzt60ZexGDF&3U3-)bV~| zZQX=7pS0y><%C?hRQ&v9Tph!N@T$#BUq5yMov2#k8c~vxSdwa$T$Bo=7>o=IO>_-R zbqx$dj0~(y%&iQ}wGAw+3=CMEvM!@&$jwj5OsmALp+x>tK2U=%$cEzlw370~qErUY z+{E-$-^BFHlpinIKI- z4Ai8TUz8rXB)%TzlH#&-tK|IL+|;}h1_k%jywoC~CsGuWDiu7F^L_L4^Yk+F6%0{uKbLh*2~7Yx9TzJA literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/up.png b/public/resource/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/up.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4a6d1f9831b280fc99774f19b835ae0ff96c7e GIT binary patch literal 1080 zcmaJ=T}TvB6dp;$Br^(1MQ9q0655%a+1=3{cQe~rbE7d^m)d@HoVo4}>-;oxZCCLr z5t4kdqN2AT0|o2Fel#r%3Zk;7it@!Eis->0BB`M6=&ttAHeBYOdpO^B&bjBi{Y{N~ z3JXdLFbpdUHSl4y+jd@l9{T_IQuG*YB`_F;&3ZdbiYCD7WW5dGAytflFc9UglTUyT z!&X%&ktmD``#4EgNzslWQ>uZ`80M=@8KRT`5N`u9Me`H$_Z|?qBKwI$9>FOX0T5Rj zx=qmB-58O&6OvaZYIowk6o&{@07X2dc4!ut@)L`^9I|aUMc|7eFySYbii!$NctAG+ z?jc|&bsR6z%nTZ4QQUpa_T6r9m;}(5&(d0}m|8R1B!-8g4U+ZF(p46R6Uq7F1)I zRsgo6 z<@8hsXgcVwbMXvc$9jUnDu$tho(z`PrA`%SFoTs>u&r3!RlOjg_<4!eqr#s2Iu~?O&tLxR8Eqb6L3Puq=I`A-$VO*c;z?2GOG!3GsE2 z)LY;Fse*^jb@wZXd~LYbtycDjb1zMfonKgAQa16uvaDuEnWUmcWKU1+c+I=1ZCi4$ zzUtgsITX7a`*m>dftm5KYb`?;b{!kNHSOJWd7^iAq1<$BRs jrDjcgU*e40*OHTmbscRzN6p+Rwcm0m*vQ}5-Fo^Dnsa3k literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="

",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0p;p++)k=n[p],k!==h?k?"string"==typeof k?(n[p]="brackets"===e.name&&2>p?k:"function"===e.name&&0===p?k:c("text",k),f.operand.push(n[p])):(f.operand.push({}),n[p]=b(a.operand[p],k,f.operand[f.operand.length-1],g,i)):(n[p]=c("empty"),f.operand.push(n[p])):(m.push(p),i.hasOwnProperty("startOffset")||(i.startOffset=p),i.endOffset=p,e.attr&&e.attr.id&&(i.groupId=e.attr.id));for(2===m.length&&(i.endOffset-=1);p=m.length;)p=m[p-1],n.splice(p,1),m.length--,a.operand.splice(p,1)}if(o=d(e.name),!o)throw new Error("operator type error: not found "+e.operator);j=function(){},j.prototype=o.prototype,l=new j,o.apply(l,n),f.func=l;for(var r in e.callFn)e.callFn.hasOwnProperty(r)&&l[r]&&l[r].apply(l,e.callFn[r]);return e.attr&&(e.attr.id&&(g[e.attr.id]={objGroup:l,strGroup:a}),e.attr["data-root"]&&(g.root={objGroup:l,strGroup:a}),l.setAttr(e.attr)),l}function c(a,b){switch(a){case"empty":return new kf.EmptyExpression;case"text":return new kf.TextExpression(b)}}function d(a){return g[a]||kf[a.replace(/^[a-z]/i,function(a){return a.toUpperCase()}).replace(/-([a-z])/gi,function(a,b){return b.toUpperCase()})+"Expression"]}function e(a){var b={};if("[object Array]"==={}.toString.call(a)){b=[];for(var c=0,d=a.length;d>c;c++)b[c]=f(a[c])}else for(var e in a)a.hasOwnProperty(e)&&(b[e]=f(a[e]));return b}function f(a){return a?"object"!=typeof a?a:e(a):a}var g={},h="\uf155";return a.prototype.generateBy=function(a){var c=a.tree,d={},f={},g={};if("string"==typeof c)throw new Error("Unhandled error");return this.formula.appendExpression(b(c,e(c),d,g,f)),{select:f,parsedTree:c,tree:d,mapping:g}},a.prototype.regenerateBy=function(a){return this.formula.clearExpressions(),this.generateBy(a)},a}},b[1]={value:function(){return{toRPNExpression:b.r(2),generateTree:b.r(3)}}},b[2]={value:function(){function a(b){var e=[],f=null;for(b=c(b);f=b.shift();)"combination"===f.name&&1===f.operand.length&&"brackets"===f.operand[0].name&&(f=f.operand[0]),e.push(d.isArray(f)?a(f):f);return e}function c(a){for(var b=[],c=null;void 0!==(c=a.pop());)if(!c||"object"!=typeof c||c.sign!==!1&&"function"!==c.name)b.push(c);else{var d=c.handler(c,[],b.reverse());b.unshift(d),b.reverse()}return b.reverse()}var d=b.r(4);return a}},b[3]={value:function(){function a(b){for(var e=null,f=[],g=0,h=b.length;h>g;g++)d.isArray(b[g])&&(b[g]=a(b[g]));for(;e=b.shift();)f.push("object"==typeof e&&e.handler?e.handler(e,f,b):e);return c(f)}var c=b.r(13),d=b.r(4);return a}},b[4]={value:function(){var a=b.r(7),c=b.r(6),d=b.r(15),e={getLatexType:function(b){return b=b.replace(/^\\/,""),a[b]?"operator":c[b]?"function":"text"},isArray:function(a){return a&&"[object Array]"===Object.prototype.toString.call(a)},getDefine:function(b){return e.extend({},a[b.replace("\\","")])},getFuncDefine:function(a){return{name:"function",params:a.replace(/^\\/,""),handler:d}},getBracketsDefine:function(b,c){return e.extend({params:[b,c]},a.brackets)},extend:function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}};return e}},b[5]={value:function(){var a=!0;return{".":a,"{":a,"}":a,"[":a,"]":a,"(":a,")":a,"|":a}}},b[6]={value:function(){return{sin:1,cos:1,arccos:1,cosh:1,det:1,inf:1,limsup:1,Pr:1,tan:1,arcsin:1,cot:1,dim:1,ker:1,ln:1,sec:1,tanh:1,arctan:1,coth:1,exp:1,lg:1,log:1,arg:1,csc:1,gcd:1,lim:1,max:1,sinh:1,deg:1,hom:1,liminf:1,min:1,sup:1}}},b[7]={value:function(){var a=b.r(22),c=b.r(11);return{"^":{name:"superscript",type:c.OP,handler:a},_:{name:"subscript",type:c.OP,handler:a},frac:{name:"fraction",type:c.FN,sign:!1,handler:b.r(14)},sqrt:{name:"radical",type:c.FN,sign:!1,handler:b.r(23)},sum:{name:"summation",type:c.FN,traversal:"rtl",handler:b.r(24)},"int":{name:"integration",type:c.FN,traversal:"rtl",handler:b.r(16)},brackets:{name:"brackets",type:c.FN,handler:b.r(12)},mathcal:{name:"mathcal",type:c.FN,sign:!1,handler:b.r(19)},mathfrak:{name:"mathfrak",type:c.FN,sign:!1,handler:b.r(20)},mathbb:{name:"mathbb",type:c.FN,sign:!1,handler:b.r(18)},mathrm:{name:"mathrm",type:c.FN,sign:!1,handler:b.r(21)}}}},b[8]={value:function(){return{"int":b.r(26),quot:b.r(27)}}},b[9]={value:function(){return{combination:b.r(29),fraction:b.r(30),"function":b.r(31),integration:b.r(32),subscript:b.r(39),superscript:b.r(41),script:b.r(37),radical:b.r(38),summation:b.r(40),brackets:b.r(28),mathcal:b.r(34),mathfrak:b.r(35),mathbb:b.r(33),mathrm:b.r(36)}}},b[10]={value:function(){return{"#":1,$:1,"%":1,_:1,"&":1,"{":1,"}":1,"^":1,"~":1}}},b[11]={value:function(){return{OP:1,FN:2}}},b[12]={value:function(){var a=b.r(5);return function(b,c,d){for(var e=0,f=b.params.length;f>e;e++)if(!(b.params[e]in a))throw new Error("Brackets: invalid params");return b.operand=b.params,b.params[2]=d.shift(),delete b.handler,delete b.params,b}}},b[13]={value:function(){return function(){return{name:"combination",operand:arguments[0]||[]}}}},b[14]={value:function(){return function(a,b,c){var d=c.shift(),e=c.shift();if(void 0===d||void 0===e)throw new Error("Frac: Syntax Error");return d.handler&&"integration"===d.name?(d=d.handler(d,b,[e]),e=c.shift()):e.handler&&"integration"===e.name&&(e=e.handler(e,b,[c.shift()])),a.operand=[d,e],delete a.handler,a}}},b[15]={value:function(){var a=b.r(17);return function(b,c,d){var e=a.exec(d);return e.expr&&e.expr.handler&&"integration"===e.expr.name&&(e.expr=e.expr.handler(e.expr,c,[d.shift()])),b.operand=[b.params,e.expr,e.superscript,e.subscript],delete b.params,delete b.handler,b}}},b[16]={value:function(){var a=b.r(17),c=b.r(11).FN;return function(b,d,e){var f=e.shift(),g=a.exec(e);return g.expr&&g.expr.type===c&&g.expr.handler&&"integration"===g.expr.name&&(g.expr=g.expr.handler(g.expr,d,[e.shift()])),b.operand=[g.expr,g.superscript,g.subscript],b.callFn={setType:[0|f]},delete b.handler,b}}},b[17]={value:function(){function a(a){var c=b(a),d=null,e={superscript:null,subscript:null};if(!c)return e;if(d=b(a),e[c.type]=c.value||null,d){if(d.type===c.type)throw new Error("Script: syntax error!");e[d.type]=d.value||null}return e}function b(a){var b=a.shift();return b?"subscript"===b.name||"superscript"===b.name?{type:b.name,value:a.shift()}:(a.unshift(b),null):null}return{exec:function(b){var c=a(b),d=b.shift();if(d&&d.name&&-1!==d.name.indexOf("script"))throw new Error("Script: syntax error!");return c.expr=d||null,c}}}},b[18]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathbb"},a.callFn={setFamily:["KF AMS BB"]},a.operand=[d],delete a.handler,a}}},b[19]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathcal"},a.callFn={setFamily:["KF AMS CAL"]},a.operand=[d],delete a.handler,a}}},b[20]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathfrak"},a.callFn={setFamily:["KF AMS FRAK"]},a.operand=[d],delete a.handler,a}}},b[21]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathrm"},a.callFn={setFamily:["KF AMS ROMAN"]},a.operand=[d],delete a.handler,a}}},b[22]={value:function(){return function(a,b,c){var d=b.pop(),e=c.shift()||null;if(!e)throw new Error("Missing script");if(d=d||"",d.name===a.name||"script"===d.name)throw new Error("script error");return"subscript"===d.name?(d.name="script",d.operand[2]=d.operand[1],d.operand[1]=e,d):"superscript"===d.name?(d.name="script",d.operand[2]=e,d):(a.operand=[d,e],delete a.handler,a)}}},b[23]={value:function(){var a=b.r(13);return function(b,c,d){var e=d.shift(),f=null,g=null;if("["===e){for(e=[];(f=d.shift())&&"]"!==f;)e.push(f);e=0===e.length?null:a(e),g=d.shift()}else g=e,e=null;return b.operand=[g,e],delete b.handler,b}}},b[24]={value:function(){var a=b.r(17),c=b.r(11).FN;return function(b,d,e){var f=a.exec(e);return f.expr&&f.expr.type===c&&f.expr.handler&&"integration"===f.expr.name&&(f.expr=f.expr.handler(f.expr,d,[e.shift()])),b.operand=[f.expr,f.superscript,f.subscript],delete b.handler,b}}},b[25]={value:function(){function a(a){if(d(a))return a.substring(1);switch(m.getLatexType(a)){case"operator":return m.getDefine(a);case"function":return m.getFuncDefine(a);default:return c(a)}}function c(a){return 0===a.indexOf("\\")?a+"\\":a}function d(a){return 0===a.indexOf("\\")?!!l[a.substring(1)]:!1}function e(a){return a.replace(/\\\s+/,"").replace(/\s*([^a-z0-9\s])\s*/gi,function(a,b){return b})}var f=b.r(43).Parser,g=b.r(1),h=b.r(8),i=b.r(42),j=b.r(7),k=b.r(9),l=b.r(10),m=b.r(4),n="\ufff8",o="\ufffc",p=new RegExp(n+"|"+o,"g"),q=new RegExp(n,"g"),r=new RegExp(o,"g");f.register("latex",f.implement({parse:function(a){var b=this.split(this.format(a));return b=this.parseToGroup(b),b=this.parseToStruct(b),this.generateTree(b)},serialization:function(a,b){return i(a,b)},expand:function(a){var b=a.parse,c=null,d=a.pre,e=a.reverse;for(var f in b)b.hasOwnProperty(f)&&(c=f.replace(/\\/g,""),j[c]=b[f]);for(var f in e)e.hasOwnProperty(f)&&(k[f.replace(/\\/g,"")]=e[f]);if(d)for(var f in d)d.hasOwnProperty(f)&&(h[f.replace(/\\/g,"")]=d[f])},format:function(a){a=e(a),a=a.replace(p,"").replace(/\\{/gi,n).replace(/\\}/gi,o);for(var b in h)h.hasOwnProperty(b)&&(a=h[b](a));return a},split:function(a){var b=[],c=/(?:\\[^a-z]\s*)|(?:\\[a-z]+\s*)|(?:[{}]\s*)|(?:[^\\{}]\s*)/gi,d=/^\s+|\s+$/g,e=null;for(a=a.replace(d,"");e=c.exec(a);)e=e[0].replace(d,""),e&&b.push(e);return b},generateTree:function(a){for(var b=[],c=null;c=a.shift();)b.push(m.isArray(c)?this.generateTree(c):c);return b=g.toRPNExpression(b),g.generateTree(b)},parseToGroup:function(a){for(var b=[],c=[b],d=0,e=0,f=0,g=a.length;g>f;f++)switch(a[f]){case"{":d++,c.push(b),b.push([]),b=b[b.length-1];break;case"}":d--,b=c.pop();break;case"\\left":e++,c.push(b),b.push([[]]),b=b[b.length-1][0],b.type="brackets",f++,b.leftBrackets=a[f].replace(q,"{").replace(r,"}");break;case"\\right":e--,f++,b.rightBrackets=a[f].replace(q,"{").replace(r,"}"),b=c.pop();break;default:b.push(a[f].replace(q,"\\{").replace(r,"\\}"))}if(0!==d)throw new Error("Group Error!");if(0!==e)throw new Error("Brackets Error!");return c[0]},parseToStruct:function(b){for(var c=[],d=0,e=b.length;e>d;d++)m.isArray(b[d])?"brackets"===b[d].type?(c.push(m.getBracketsDefine(b[d].leftBrackets,b[d].rightBrackets)),c.push(this.parseToStruct(b[d]))):c.push(this.parseToStruct(b[d])):c.push(a(b[d]));return c}}))}},b[26]={value:function(){return function(a){return a.replace(/\\(i+)nt(\b|[^a-zA-Z])/g,function(a,b,c){return"\\int "+b.length+c})}}},b[27]={value:function(){return function(a){return a.replace(/``/g,"\u201c")}}},b[28]={value:function(){return function(a){return("{"===a[0]||"}"===a[0])&&(a[0]="\\"+a[0]),("{"===a[1]||"}"===a[1])&&(a[1]="\\"+a[1]),["\\left",a[0],a[2],"\\right",a[1]].join(" ")}}},b[29]={value:function(){return function(a){return this.attr["data-root"]||this.attr["data-placeholder"]?a.join(""):"{"+a.join("")+"}"}}},b[30]={value:function(){return function(a){return"\\frac "+a[0]+" "+a[1]}}},b[31]={value:function(){return function(a){var b=["\\"+a[0]];return a[2]&&b.push("^"+a[2]),a[3]&&b.push("_"+a[3]),a[1]&&b.push(" "+a[1]),b.join("")}}},b[32]={value:function(){return function(a){var b=["\\int "];if(this.callFn&&this.callFn.setType){b=["\\"];for(var c=0,d=this.callFn.setType;d>c;c++)b.push("i");b.push("nt ")}return a[1]&&b.push("^"+a[1]),a[2]&&b.push("_"+a[2]),a[0]&&b.push(" "+a[0]),b.join("")}}},b[33]={value:function(){return function(a){return"\\mathbb{"+a[0]+"}"}}},b[34]={value:function(){return function(a){return"\\mathcal{"+a[0]+"}"}}},b[35]={value:function(){return function(a){return"\\mathfrak{"+a[0]+"}"}}},b[36]={value:function(){return function(a){return"\\mathrm{"+a[0]+"}"}}},b[37]={value:function(){return function(a){return a[0]+"^"+a[1]+"_"+a[2]}}},b[38]={value:function(){return function(a){var b=["\\sqrt"];return a[1]&&b.push("["+a[1]+"]"),b.push(" "+a[0]),b.join("")}}},b[39]={value:function(){return function(a){return a[0]+"_"+a[1]}}},b[40]={value:function(){return function(a){var b=["\\sum "];return a[1]&&b.push("^"+a[1]),a[2]&&b.push("_"+a[2]),a[0]&&b.push(" "+a[0]),b.join("")}}},b[41]={value:function(){return function(a){return a[0]+"^"+a[1]}}},b[42]={value:function(){function a(b,e){var g=[],h=null,i=null;if("object"!=typeof b)return c(b)?"\\"+b+" ":b.replace(f,function(a,b){return b+" "});"combination"===b.name&&1===b.operand.length&&"combination"===b.operand[0].name&&(b=b.operand[0]),i=b.operand;for(var j=0,k=i.length;k>j;j++)g.push(i[j]?a(i[j]):i[j]);return h=b.attr&&b.attr._reverse?b.attr._reverse:b.name,d[h].call(b,g,e)}function c(a){return!!e[a]}var d=b.r(9),e=b.r(10),f=/(\\(?:[\w]+)|(?:[^a-z]))\\/gi;return function(b,c){return a(b,c)}}},b[43]={value:function(a,b,c){function d(a){this.impl=new a,this.conf={}}function e(){this.conf={}}var f={},g={},h={extend:function(a,b){var c=null;b=[].slice.call(arguments,1);for(var d=0,e=b.length;e>d;d++){c=b[d];for(var f in c)c.hasOwnProperty(f)&&(a[f]=c[f])}},setData:function(a,b,c){if("string"==typeof b)a[b]=c;else{if("object"!=typeof b)throw new Error("invalid option");for(c in b)b.hasOwnProperty(c)&&(a[c]=b[c])}}},i={use:function(a){if(!g[a])throw new Error("unknown parser type");return this.proxy(g[a])},config:function(a,b){return h.setData(f,a,b),this},register:function(a,b){return g[a.toLowerCase()]=b,this},implement:function(a){var b=function(){},c=a.constructor||function(){},d=function(){e.call(this),c.call(this)};b.prototype=e.prototype,d.prototype=new b,delete a.constructor;for(var f in a)"constructor"!==f&&a.hasOwnProperty(f)&&(d.prototype[f]=a[f]);return d},proxy:function(a){return new d(a)}};h.extend(d.prototype,{config:function(a,b){h.setData(this.conf,a,b)},set:function(a,b){this.impl.set(a,b)},parse:function(a){var b={config:{},tree:this.impl.parse(a)};return h.extend(b.config,f,this.conf),b},serialization:function(a,b){return this.impl.serialization(a,b)},expand:function(a){this.impl.expand(a)}}),h.extend(e.prototype,{set:function(a,b){h.extend(this.conf,a,b)},parse:function(){throw new Error("Abstract function")}}),c.exports={Parser:i,ParserInterface:e}}},b[44]={value:function(){var a=b.r(43).Parser;b.r(25),window.kf.Parser=a,window.kf.Assembly=b.r(0)}};var c={"kf.start":44};!function(){try{a("kf.start")}catch(b){}}(this)}(); \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js new file mode 100644 index 0000000..8066599 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js @@ -0,0 +1,5757 @@ +/*! + * ==================================================== + * Kity Formula Render - v1.0.0 - 2014-07-30 + * https://github.com/kitygraph/formula + * GitHub: https://github.com/kitygraph/formula.git + * Copyright (c) 2014 Baidu Kity Group; Licensed MIT + * ==================================================== + */ + +(function () { +var _p = { + r: function(index) { + if (_p[index].inited) { + return _p[index].value; + } + if (typeof _p[index].value === "function") { + var module = { + exports: {} + }, returnValue = _p[index].value(null, module.exports, module); + _p[index].inited = true; + _p[index].value = returnValue; + if (returnValue !== undefined) { + return returnValue; + } else { + for (var key in module.exports) { + if (module.exports.hasOwnProperty(key)) { + _p[index].inited = true; + _p[index].value = module.exports; + return module.exports; + } + } + } + } else { + _p[index].inited = true; + return _p[index].value; + } + } +}; + +/*! + * canvg库封装 + * canvg官网: https://code.google.com/p/canvg/ + */ +_p[0] = { + value: function(require) { + /** + * A class to parse color values + * @author Stoyan Stefanov + * @link http://www.phpied.com/rgb-color-parser-in-javascript/ + * @license Use it if you like it + */ + function RGBColor(color_string) { + this.ok = false; + // strip any leading # + if (color_string.charAt(0) == "#") { + // remove # if any + color_string = color_string.substr(1, 6); + } + color_string = color_string.replace(/ /g, ""); + color_string = color_string.toLowerCase(); + // before getting into regexps, try simple matches + // and overwrite the input + var simple_colors = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "00ffff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000000", + blanchedalmond: "ffebcd", + blue: "0000ff", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "00ffff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dodgerblue: "1e90ff", + feldspar: "d19275", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "ff00ff", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgrey: "d3d3d3", + lightgreen: "90ee90", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslateblue: "8470ff", + lightslategray: "778899", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "00ff00", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "ff00ff", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370d8", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "d87093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + red: "ff0000", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + violetred: "d02090", + wheat: "f5deb3", + white: "ffffff", + whitesmoke: "f5f5f5", + yellow: "ffff00", + yellowgreen: "9acd32" + }; + for (var key in simple_colors) { + if (color_string == key) { + color_string = simple_colors[key]; + } + } + // emd of simple type-in colors + // array of color definition objects + var color_defs = [ { + re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, + example: [ "rgb(123, 234, 45)", "rgb(255,234,245)" ], + process: function(bits) { + return [ parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3]) ]; + } + }, { + re: /^(\w{2})(\w{2})(\w{2})$/, + example: [ "#00ff00", "336699" ], + process: function(bits) { + return [ parseInt(bits[1], 16), parseInt(bits[2], 16), parseInt(bits[3], 16) ]; + } + }, { + re: /^(\w{1})(\w{1})(\w{1})$/, + example: [ "#fb0", "f0f" ], + process: function(bits) { + return [ parseInt(bits[1] + bits[1], 16), parseInt(bits[2] + bits[2], 16), parseInt(bits[3] + bits[3], 16) ]; + } + } ]; + // search through the definitions to find a match + for (var i = 0; i < color_defs.length; i++) { + var re = color_defs[i].re; + var processor = color_defs[i].process; + var bits = re.exec(color_string); + if (bits) { + channels = processor(bits); + this.r = channels[0]; + this.g = channels[1]; + this.b = channels[2]; + this.ok = true; + } + } + // validate/cleanup values + this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r; + this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g; + this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b; + // some getters + this.toRGB = function() { + return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")"; + }; + this.toHex = function() { + var r = this.r.toString(16); + var g = this.g.toString(16); + var b = this.b.toString(16); + if (r.length == 1) r = "0" + r; + if (g.length == 1) g = "0" + g; + if (b.length == 1) b = "0" + b; + return "#" + r + g + b; + }; + // help + this.getHelpXML = function() { + var examples = new Array(); + // add regexps + for (var i = 0; i < color_defs.length; i++) { + var example = color_defs[i].example; + for (var j = 0; j < example.length; j++) { + examples[examples.length] = example[j]; + } + } + // add type-in colors + for (var sc in simple_colors) { + examples[examples.length] = sc; + } + var xml = document.createElement("ul"); + xml.setAttribute("id", "rgbcolor-examples"); + for (var i = 0; i < examples.length; i++) { + try { + var list_item = document.createElement("li"); + var list_color = new RGBColor(examples[i]); + var example_div = document.createElement("div"); + example_div.style.cssText = "margin: 3px; " + "border: 1px solid black; " + "background:" + list_color.toHex() + "; " + "color:" + list_color.toHex(); + example_div.appendChild(document.createTextNode("test")); + var list_item_value = document.createTextNode(" " + examples[i] + " -> " + list_color.toRGB() + " -> " + list_color.toHex()); + list_item.appendChild(example_div); + list_item.appendChild(list_item_value); + xml.appendChild(list_item); + } catch (e) {} + } + return xml; + }; + } + /* + + StackBlur - a fast almost Gaussian Blur For Canvas + + Version: 0.5 + Author: Mario Klingemann + Contact: mario@quasimondo.com + Website: http://www.quasimondo.com/StackBlurForCanvas + Twitter: @quasimondo + + In case you find this class useful - especially in commercial projects - + I am not totally unhappy for a small donation to my PayPal account + mario@quasimondo.de + + Or support me on flattr: + https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript + + Copyright (c) 2010 Mario Klingemann + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + */ + var mul_table = [ 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259 ]; + var shg_table = [ 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 ]; + function stackBlurImage(imageID, canvasID, radius, blurAlphaChannel) { + var img = document.getElementById(imageID); + var w = img.naturalWidth; + var h = img.naturalHeight; + var canvas = document.getElementById(canvasID); + canvas.style.width = w + "px"; + canvas.style.height = h + "px"; + canvas.width = w; + canvas.height = h; + var context = canvas.getContext("2d"); + context.clearRect(0, 0, w, h); + context.drawImage(img, 0, 0); + if (isNaN(radius) || radius < 1) return; + if (blurAlphaChannel) stackBlurCanvasRGBA(canvasID, 0, 0, w, h, radius); else stackBlurCanvasRGB(canvasID, 0, 0, w, h, radius); + } + function stackBlurCanvasRGBA(id, top_x, top_y, width, height, radius) { + if (isNaN(radius) || radius < 1) return; + radius |= 0; + var canvas = document.getElementById(id); + var context = canvas.getContext("2d"); + var imageData; + try { + try { + imageData = context.getImageData(top_x, top_y, width, height); + } catch (e) { + // NOTE: this part is supposedly only needed if you want to work with local files + // so it might be okay to remove the whole try/catch block and just use + // imageData = context.getImageData( top_x, top_y, width, height ); + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); + imageData = context.getImageData(top_x, top_y, width, height); + } catch (e) { + alert("Cannot access local image"); + throw new Error("unable to access local image data: " + e); + return; + } + } + } catch (e) { + alert("Cannot access image"); + throw new Error("unable to access image data: " + e); + } + var pixels = imageData.data; + var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, r_out_sum, g_out_sum, b_out_sum, a_out_sum, r_in_sum, g_in_sum, b_in_sum, a_in_sum, pr, pg, pb, pa, rbs; + var div = radius + radius + 1; + var w4 = width << 2; + var widthMinus1 = width - 1; + var heightMinus1 = height - 1; + var radiusPlus1 = radius + 1; + var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2; + var stackStart = new BlurStack(); + var stack = stackStart; + for (i = 1; i < div; i++) { + stack = stack.next = new BlurStack(); + if (i == radiusPlus1) var stackEnd = stack; + } + stack.next = stackStart; + var stackIn = null; + var stackOut = null; + yw = yi = 0; + var mul_sum = mul_table[radius]; + var shg_sum = shg_table[radius]; + for (y = 0; y < height; y++) { + r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0; + r_out_sum = radiusPlus1 * (pr = pixels[yi]); + g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); + b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); + a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]); + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + a_sum += sumFactor * pa; + stack = stackStart; + for (i = 0; i < radiusPlus1; i++) { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack.a = pa; + stack = stack.next; + } + for (i = 1; i < radiusPlus1; i++) { + p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2); + r_sum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i); + g_sum += (stack.g = pg = pixels[p + 1]) * rbs; + b_sum += (stack.b = pb = pixels[p + 2]) * rbs; + a_sum += (stack.a = pa = pixels[p + 3]) * rbs; + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + a_in_sum += pa; + stack = stack.next; + } + stackIn = stackStart; + stackOut = stackEnd; + for (x = 0; x < width; x++) { + pixels[yi + 3] = pa = a_sum * mul_sum >> shg_sum; + if (pa != 0) { + pa = 255 / pa; + pixels[yi] = (r_sum * mul_sum >> shg_sum) * pa; + pixels[yi + 1] = (g_sum * mul_sum >> shg_sum) * pa; + pixels[yi + 2] = (b_sum * mul_sum >> shg_sum) * pa; + } else { + pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0; + } + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + a_sum -= a_out_sum; + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + a_out_sum -= stackIn.a; + p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2; + r_in_sum += stackIn.r = pixels[p]; + g_in_sum += stackIn.g = pixels[p + 1]; + b_in_sum += stackIn.b = pixels[p + 2]; + a_in_sum += stackIn.a = pixels[p + 3]; + r_sum += r_in_sum; + g_sum += g_in_sum; + b_sum += b_in_sum; + a_sum += a_in_sum; + stackIn = stackIn.next; + r_out_sum += pr = stackOut.r; + g_out_sum += pg = stackOut.g; + b_out_sum += pb = stackOut.b; + a_out_sum += pa = stackOut.a; + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + a_in_sum -= pa; + stackOut = stackOut.next; + yi += 4; + } + yw += width; + } + for (x = 0; x < width; x++) { + g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0; + yi = x << 2; + r_out_sum = radiusPlus1 * (pr = pixels[yi]); + g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); + b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); + a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]); + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + a_sum += sumFactor * pa; + stack = stackStart; + for (i = 0; i < radiusPlus1; i++) { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack.a = pa; + stack = stack.next; + } + yp = width; + for (i = 1; i <= radius; i++) { + yi = yp + x << 2; + r_sum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i); + g_sum += (stack.g = pg = pixels[yi + 1]) * rbs; + b_sum += (stack.b = pb = pixels[yi + 2]) * rbs; + a_sum += (stack.a = pa = pixels[yi + 3]) * rbs; + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + a_in_sum += pa; + stack = stack.next; + if (i < heightMinus1) { + yp += width; + } + } + yi = x; + stackIn = stackStart; + stackOut = stackEnd; + for (y = 0; y < height; y++) { + p = yi << 2; + pixels[p + 3] = pa = a_sum * mul_sum >> shg_sum; + if (pa > 0) { + pa = 255 / pa; + pixels[p] = (r_sum * mul_sum >> shg_sum) * pa; + pixels[p + 1] = (g_sum * mul_sum >> shg_sum) * pa; + pixels[p + 2] = (b_sum * mul_sum >> shg_sum) * pa; + } else { + pixels[p] = pixels[p + 1] = pixels[p + 2] = 0; + } + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + a_sum -= a_out_sum; + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + a_out_sum -= stackIn.a; + p = x + ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2; + r_sum += r_in_sum += stackIn.r = pixels[p]; + g_sum += g_in_sum += stackIn.g = pixels[p + 1]; + b_sum += b_in_sum += stackIn.b = pixels[p + 2]; + a_sum += a_in_sum += stackIn.a = pixels[p + 3]; + stackIn = stackIn.next; + r_out_sum += pr = stackOut.r; + g_out_sum += pg = stackOut.g; + b_out_sum += pb = stackOut.b; + a_out_sum += pa = stackOut.a; + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + a_in_sum -= pa; + stackOut = stackOut.next; + yi += width; + } + } + context.putImageData(imageData, top_x, top_y); + } + function stackBlurCanvasRGB(id, top_x, top_y, width, height, radius) { + if (isNaN(radius) || radius < 1) return; + radius |= 0; + var canvas = document.getElementById(id); + var context = canvas.getContext("2d"); + var imageData; + try { + try { + imageData = context.getImageData(top_x, top_y, width, height); + } catch (e) { + // NOTE: this part is supposedly only needed if you want to work with local files + // so it might be okay to remove the whole try/catch block and just use + // imageData = context.getImageData( top_x, top_y, width, height ); + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); + imageData = context.getImageData(top_x, top_y, width, height); + } catch (e) { + alert("Cannot access local image"); + throw new Error("unable to access local image data: " + e); + return; + } + } + } catch (e) { + alert("Cannot access image"); + throw new Error("unable to access image data: " + e); + } + var pixels = imageData.data; + var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, r_out_sum, g_out_sum, b_out_sum, r_in_sum, g_in_sum, b_in_sum, pr, pg, pb, rbs; + var div = radius + radius + 1; + var w4 = width << 2; + var widthMinus1 = width - 1; + var heightMinus1 = height - 1; + var radiusPlus1 = radius + 1; + var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2; + var stackStart = new BlurStack(); + var stack = stackStart; + for (i = 1; i < div; i++) { + stack = stack.next = new BlurStack(); + if (i == radiusPlus1) var stackEnd = stack; + } + stack.next = stackStart; + var stackIn = null; + var stackOut = null; + yw = yi = 0; + var mul_sum = mul_table[radius]; + var shg_sum = shg_table[radius]; + for (y = 0; y < height; y++) { + r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0; + r_out_sum = radiusPlus1 * (pr = pixels[yi]); + g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); + b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + stack = stackStart; + for (i = 0; i < radiusPlus1; i++) { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack = stack.next; + } + for (i = 1; i < radiusPlus1; i++) { + p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2); + r_sum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i); + g_sum += (stack.g = pg = pixels[p + 1]) * rbs; + b_sum += (stack.b = pb = pixels[p + 2]) * rbs; + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + stack = stack.next; + } + stackIn = stackStart; + stackOut = stackEnd; + for (x = 0; x < width; x++) { + pixels[yi] = r_sum * mul_sum >> shg_sum; + pixels[yi + 1] = g_sum * mul_sum >> shg_sum; + pixels[yi + 2] = b_sum * mul_sum >> shg_sum; + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2; + r_in_sum += stackIn.r = pixels[p]; + g_in_sum += stackIn.g = pixels[p + 1]; + b_in_sum += stackIn.b = pixels[p + 2]; + r_sum += r_in_sum; + g_sum += g_in_sum; + b_sum += b_in_sum; + stackIn = stackIn.next; + r_out_sum += pr = stackOut.r; + g_out_sum += pg = stackOut.g; + b_out_sum += pb = stackOut.b; + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + stackOut = stackOut.next; + yi += 4; + } + yw += width; + } + for (x = 0; x < width; x++) { + g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0; + yi = x << 2; + r_out_sum = radiusPlus1 * (pr = pixels[yi]); + g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); + b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + stack = stackStart; + for (i = 0; i < radiusPlus1; i++) { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack = stack.next; + } + yp = width; + for (i = 1; i <= radius; i++) { + yi = yp + x << 2; + r_sum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i); + g_sum += (stack.g = pg = pixels[yi + 1]) * rbs; + b_sum += (stack.b = pb = pixels[yi + 2]) * rbs; + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + stack = stack.next; + if (i < heightMinus1) { + yp += width; + } + } + yi = x; + stackIn = stackStart; + stackOut = stackEnd; + for (y = 0; y < height; y++) { + p = yi << 2; + pixels[p] = r_sum * mul_sum >> shg_sum; + pixels[p + 1] = g_sum * mul_sum >> shg_sum; + pixels[p + 2] = b_sum * mul_sum >> shg_sum; + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + p = x + ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2; + r_sum += r_in_sum += stackIn.r = pixels[p]; + g_sum += g_in_sum += stackIn.g = pixels[p + 1]; + b_sum += b_in_sum += stackIn.b = pixels[p + 2]; + stackIn = stackIn.next; + r_out_sum += pr = stackOut.r; + g_out_sum += pg = stackOut.g; + b_out_sum += pb = stackOut.b; + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + stackOut = stackOut.next; + yi += width; + } + } + context.putImageData(imageData, top_x, top_y); + } + function BlurStack() { + this.r = 0; + this.g = 0; + this.b = 0; + this.a = 0; + this.next = null; + } + /* + * canvg.js - Javascript SVG parser and renderer on Canvas + * MIT Licensed + * Gabe Lerner (gabelerner@gmail.com) + * http://code.google.com/p/canvg/ + * + * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ + */ + (function() { + // canvg(target, s) + // empty parameters: replace all 'svg' elements on page with 'canvas' elements + // target: canvas element or the id of a canvas element + // s: svg string, url to svg file, or xml document + // opts: optional hash of options + // ignoreMouse: true => ignore mouse events + // ignoreAnimation: true => ignore animations + // ignoreDimensions: true => does not try to resize canvas + // ignoreClear: true => does not clear canvas + // offsetX: int => draws at a x offset + // offsetY: int => draws at a y offset + // scaleWidth: int => scales horizontally to width + // scaleHeight: int => scales vertically to height + // renderCallback: function => will call the function after the first render is completed + // forceRedraw: function => will call the function on every frame, if it returns true, will redraw + this.canvg = function(target, s, opts) { + // no parameters + if (target == null && s == null && opts == null) { + var svgTags = document.getElementsByTagName("svg"); + for (var i = 0; i < svgTags.length; i++) { + var svgTag = svgTags[i]; + var c = document.createElement("canvas"); + c.width = svgTag.clientWidth; + c.height = svgTag.clientHeight; + svgTag.parentNode.insertBefore(c, svgTag); + svgTag.parentNode.removeChild(svgTag); + var div = document.createElement("div"); + div.appendChild(svgTag); + canvg(c, div.innerHTML); + } + return; + } + opts = opts || {}; + if (typeof target == "string") { + target = document.getElementById(target); + } + // store class on canvas + if (target.svg != null) target.svg.stop(); + var svg = build(); + // on i.e. 8 for flash canvas, we can't assign the property so check for it + if (!(target.childNodes.length == 1 && target.childNodes[0].nodeName == "OBJECT")) target.svg = svg; + svg.opts = opts; + var ctx = target.getContext("2d"); + if (typeof s.documentElement != "undefined") { + // load from xml doc + svg.loadXmlDoc(ctx, s); + } else if (s.substr(0, 1) == "<") { + // load from xml string + svg.loadXml(ctx, s); + } else { + // load from url + svg.load(ctx, s); + } + }; + function build() { + var svg = {}; + svg.FRAMERATE = 30; + svg.MAX_VIRTUAL_PIXELS = 3e4; + // globals + svg.init = function(ctx) { + var uniqueId = 0; + svg.UniqueId = function() { + uniqueId++; + return "canvg" + uniqueId; + }; + svg.Definitions = {}; + svg.Styles = {}; + svg.Animations = []; + svg.Images = []; + svg.ctx = ctx; + svg.ViewPort = new function() { + this.viewPorts = []; + this.Clear = function() { + this.viewPorts = []; + }; + this.SetCurrent = function(width, height) { + this.viewPorts.push({ + width: width, + height: height + }); + }; + this.RemoveCurrent = function() { + this.viewPorts.pop(); + }; + this.Current = function() { + return this.viewPorts[this.viewPorts.length - 1]; + }; + this.width = function() { + return this.Current().width; + }; + this.height = function() { + return this.Current().height; + }; + this.ComputeSize = function(d) { + if (d != null && typeof d == "number") return d; + if (d == "x") return this.width(); + if (d == "y") return this.height(); + return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); + }; + }(); + }; + svg.init(); + // images loaded + svg.ImagesLoaded = function() { + for (var i = 0; i < svg.Images.length; i++) { + if (!svg.Images[i].loaded) return false; + } + return true; + }; + // trim + svg.trim = function(s) { + return s.replace(/^\s+|\s+$/g, ""); + }; + // compress spaces + svg.compressSpaces = function(s) { + return s.replace(/[\s\r\t\n]+/gm, " "); + }; + // ajax + svg.ajax = function(url) { + var AJAX; + if (window.XMLHttpRequest) { + AJAX = new XMLHttpRequest(); + } else { + AJAX = new ActiveXObject("Microsoft.XMLHTTP"); + } + if (AJAX) { + AJAX.open("GET", url, false); + AJAX.send(null); + return AJAX.responseText; + } + return null; + }; + // parse xml + svg.parseXml = function(xml) { + if (window.DOMParser) { + var parser = new DOMParser(); + return parser.parseFromString(xml, "text/xml"); + } else { + xml = xml.replace(/]*>/, ""); + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(xml); + return xmlDoc; + } + }; + svg.Property = function(name, value) { + this.name = name; + this.value = value; + }; + svg.Property.prototype.getValue = function() { + return this.value; + }; + svg.Property.prototype.hasValue = function() { + return this.value != null && this.value !== ""; + }; + // return the numerical value of the property + svg.Property.prototype.numValue = function() { + if (!this.hasValue()) return 0; + var n = parseFloat(this.value); + if ((this.value + "").match(/%$/)) { + n = n / 100; + } + return n; + }; + svg.Property.prototype.valueOrDefault = function(def) { + if (this.hasValue()) return this.value; + return def; + }; + svg.Property.prototype.numValueOrDefault = function(def) { + if (this.hasValue()) return this.numValue(); + return def; + }; + // color extensions + // augment the current color value with the opacity + svg.Property.prototype.addOpacity = function(opacity) { + var newValue = this.value; + if (opacity != null && opacity != "" && typeof this.value == "string") { + // can only add opacity to colors, not patterns + var color = new RGBColor(this.value); + if (color.ok) { + newValue = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", " + opacity + ")"; + } + } + return new svg.Property(this.name, newValue); + }; + // definition extensions + // get the definition from the definitions table + svg.Property.prototype.getDefinition = function() { + var name = this.value.match(/#([^\)'"]+)/); + if (name) { + name = name[1]; + } + if (!name) { + name = this.value; + } + return svg.Definitions[name]; + }; + svg.Property.prototype.isUrlDefinition = function() { + return this.value.indexOf("url(") == 0; + }; + svg.Property.prototype.getFillStyleDefinition = function(e, opacityProp) { + var def = this.getDefinition(); + // gradient + if (def != null && def.createGradient) { + return def.createGradient(svg.ctx, e, opacityProp); + } + // pattern + if (def != null && def.createPattern) { + if (def.getHrefAttribute().hasValue()) { + var pt = def.attribute("patternTransform"); + def = def.getHrefAttribute().getDefinition(); + if (pt.hasValue()) { + def.attribute("patternTransform", true).value = pt.value; + } + } + return def.createPattern(svg.ctx, e); + } + return null; + }; + // length extensions + svg.Property.prototype.getDPI = function(viewPort) { + return 96; + }; + svg.Property.prototype.getEM = function(viewPort) { + var em = 12; + var fontSize = new svg.Property("fontSize", svg.Font.Parse(svg.ctx.font).fontSize); + if (fontSize.hasValue()) em = fontSize.toPixels(viewPort); + return em; + }; + svg.Property.prototype.getUnits = function() { + var s = this.value + ""; + return s.replace(/[0-9\.\-]/g, ""); + }; + // get the length as pixels + svg.Property.prototype.toPixels = function(viewPort, processPercent) { + if (!this.hasValue()) return 0; + var s = this.value + ""; + if (s.match(/em$/)) return this.numValue() * this.getEM(viewPort); + if (s.match(/ex$/)) return this.numValue() * this.getEM(viewPort) / 2; + if (s.match(/px$/)) return this.numValue(); + if (s.match(/pt$/)) return this.numValue() * this.getDPI(viewPort) * (1 / 72); + if (s.match(/pc$/)) return this.numValue() * 15; + if (s.match(/cm$/)) return this.numValue() * this.getDPI(viewPort) / 2.54; + if (s.match(/mm$/)) return this.numValue() * this.getDPI(viewPort) / 25.4; + if (s.match(/in$/)) return this.numValue() * this.getDPI(viewPort); + if (s.match(/%$/)) return this.numValue() * svg.ViewPort.ComputeSize(viewPort); + var n = this.numValue(); + if (processPercent && n < 1) return n * svg.ViewPort.ComputeSize(viewPort); + return n; + }; + // time extensions + // get the time as milliseconds + svg.Property.prototype.toMilliseconds = function() { + if (!this.hasValue()) return 0; + var s = this.value + ""; + if (s.match(/s$/)) return this.numValue() * 1e3; + if (s.match(/ms$/)) return this.numValue(); + return this.numValue(); + }; + // angle extensions + // get the angle as radians + svg.Property.prototype.toRadians = function() { + if (!this.hasValue()) return 0; + var s = this.value + ""; + if (s.match(/deg$/)) return this.numValue() * (Math.PI / 180); + if (s.match(/grad$/)) return this.numValue() * (Math.PI / 200); + if (s.match(/rad$/)) return this.numValue(); + return this.numValue() * (Math.PI / 180); + }; + // fonts + svg.Font = new function() { + this.Styles = "normal|italic|oblique|inherit"; + this.Variants = "normal|small-caps|inherit"; + this.Weights = "normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit"; + this.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { + var f = inherit != null ? this.Parse(inherit) : this.CreateFont("", "", "", "", "", svg.ctx.font); + return { + fontFamily: fontFamily || f.fontFamily, + fontSize: fontSize || f.fontSize, + fontStyle: fontStyle || f.fontStyle, + fontWeight: fontWeight || f.fontWeight, + fontVariant: fontVariant || f.fontVariant, + toString: function() { + return [ this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily ].join(" "); + } + }; + }; + var that = this; + this.Parse = function(s) { + var f = {}; + var d = svg.trim(svg.compressSpaces(s || "")).split(" "); + var set = { + fontSize: false, + fontStyle: false, + fontWeight: false, + fontVariant: false + }; + var ff = ""; + for (var i = 0; i < d.length; i++) { + if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { + if (d[i] != "inherit") f.fontStyle = d[i]; + set.fontStyle = true; + } else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { + if (d[i] != "inherit") f.fontVariant = d[i]; + set.fontStyle = set.fontVariant = true; + } else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { + if (d[i] != "inherit") f.fontWeight = d[i]; + set.fontStyle = set.fontVariant = set.fontWeight = true; + } else if (!set.fontSize) { + if (d[i] != "inherit") f.fontSize = d[i].split("/")[0]; + set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; + } else { + if (d[i] != "inherit") ff += d[i]; + } + } + if (ff != "") f.fontFamily = ff; + return f; + }; + }(); + // points and paths + svg.ToNumberArray = function(s) { + var a = svg.trim(svg.compressSpaces((s || "").replace(/,/g, " "))).split(" "); + for (var i = 0; i < a.length; i++) { + a[i] = parseFloat(a[i]); + } + return a; + }; + svg.Point = function(x, y) { + this.x = x; + this.y = y; + }; + svg.Point.prototype.angleTo = function(p) { + return Math.atan2(p.y - this.y, p.x - this.x); + }; + svg.Point.prototype.applyTransform = function(v) { + var xp = this.x * v[0] + this.y * v[2] + v[4]; + var yp = this.x * v[1] + this.y * v[3] + v[5]; + this.x = xp; + this.y = yp; + }; + svg.CreatePoint = function(s) { + var a = svg.ToNumberArray(s); + return new svg.Point(a[0], a[1]); + }; + svg.CreatePath = function(s) { + var a = svg.ToNumberArray(s); + var path = []; + for (var i = 0; i < a.length; i += 2) { + path.push(new svg.Point(a[i], a[i + 1])); + } + return path; + }; + // bounding box + svg.BoundingBox = function(x1, y1, x2, y2) { + // pass in initial points if you want + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + this.x = function() { + return this.x1; + }; + this.y = function() { + return this.y1; + }; + this.width = function() { + return this.x2 - this.x1; + }; + this.height = function() { + return this.y2 - this.y1; + }; + this.addPoint = function(x, y) { + if (x != null) { + if (isNaN(this.x1) || isNaN(this.x2)) { + this.x1 = x; + this.x2 = x; + } + if (x < this.x1) this.x1 = x; + if (x > this.x2) this.x2 = x; + } + if (y != null) { + if (isNaN(this.y1) || isNaN(this.y2)) { + this.y1 = y; + this.y2 = y; + } + if (y < this.y1) this.y1 = y; + if (y > this.y2) this.y2 = y; + } + }; + this.addX = function(x) { + this.addPoint(x, null); + }; + this.addY = function(y) { + this.addPoint(null, y); + }; + this.addBoundingBox = function(bb) { + this.addPoint(bb.x1, bb.y1); + this.addPoint(bb.x2, bb.y2); + }; + this.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) { + var cp1x = p0x + 2 / 3 * (p1x - p0x); + // CP1 = QP0 + 2/3 *(QP1-QP0) + var cp1y = p0y + 2 / 3 * (p1y - p0y); + // CP1 = QP0 + 2/3 *(QP1-QP0) + var cp2x = cp1x + 1 / 3 * (p2x - p0x); + // CP2 = CP1 + 1/3 *(QP2-QP0) + var cp2y = cp1y + 1 / 3 * (p2y - p0y); + // CP2 = CP1 + 1/3 *(QP2-QP0) + this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); + }; + this.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + var p0 = [ p0x, p0y ], p1 = [ p1x, p1y ], p2 = [ p2x, p2y ], p3 = [ p3x, p3y ]; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + for (i = 0; i <= 1; i++) { + var f = function(t) { + return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; + }; + var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + var c = 3 * p1[i] - 3 * p0[i]; + if (a == 0) { + if (b == 0) continue; + var t = -c / b; + if (0 < t && t < 1) { + if (i == 0) this.addX(f(t)); + if (i == 1) this.addY(f(t)); + } + continue; + } + var b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) continue; + var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i == 0) this.addX(f(t1)); + if (i == 1) this.addY(f(t1)); + } + var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i == 0) this.addX(f(t2)); + if (i == 1) this.addY(f(t2)); + } + } + }; + this.isPointInBox = function(x, y) { + return this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2; + }; + this.addPoint(x1, y1); + this.addPoint(x2, y2); + }; + // transforms + svg.Transform = function(v) { + var that = this; + this.Type = {}; + // translate + this.Type.translate = function(s) { + this.p = svg.CreatePoint(s); + this.apply = function(ctx) { + ctx.translate(this.p.x || 0, this.p.y || 0); + }; + this.unapply = function(ctx) { + ctx.translate(-1 * this.p.x || 0, -1 * this.p.y || 0); + }; + this.applyToPoint = function(p) { + p.applyTransform([ 1, 0, 0, 1, this.p.x || 0, this.p.y || 0 ]); + }; + }; + // rotate + this.Type.rotate = function(s) { + var a = svg.ToNumberArray(s); + this.angle = new svg.Property("angle", a[0]); + this.cx = a[1] || 0; + this.cy = a[2] || 0; + this.apply = function(ctx) { + ctx.translate(this.cx, this.cy); + ctx.rotate(this.angle.toRadians()); + ctx.translate(-this.cx, -this.cy); + }; + this.unapply = function(ctx) { + ctx.translate(this.cx, this.cy); + ctx.rotate(-1 * this.angle.toRadians()); + ctx.translate(-this.cx, -this.cy); + }; + this.applyToPoint = function(p) { + var a = this.angle.toRadians(); + p.applyTransform([ 1, 0, 0, 1, this.p.x || 0, this.p.y || 0 ]); + p.applyTransform([ Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0 ]); + p.applyTransform([ 1, 0, 0, 1, -this.p.x || 0, -this.p.y || 0 ]); + }; + }; + this.Type.scale = function(s) { + this.p = svg.CreatePoint(s); + this.apply = function(ctx) { + ctx.scale(this.p.x || 1, this.p.y || this.p.x || 1); + }; + this.unapply = function(ctx) { + ctx.scale(1 / this.p.x || 1, 1 / this.p.y || this.p.x || 1); + }; + this.applyToPoint = function(p) { + p.applyTransform([ this.p.x || 0, 0, 0, this.p.y || 0, 0, 0 ]); + }; + }; + this.Type.matrix = function(s) { + this.m = svg.ToNumberArray(s); + this.apply = function(ctx) { + ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); + }; + this.applyToPoint = function(p) { + p.applyTransform(this.m); + }; + }; + this.Type.SkewBase = function(s) { + this.base = that.Type.matrix; + this.base(s); + this.angle = new svg.Property("angle", s); + }; + this.Type.SkewBase.prototype = new this.Type.matrix(); + this.Type.skewX = function(s) { + this.base = that.Type.SkewBase; + this.base(s); + this.m = [ 1, 0, Math.tan(this.angle.toRadians()), 1, 0, 0 ]; + }; + this.Type.skewX.prototype = new this.Type.SkewBase(); + this.Type.skewY = function(s) { + this.base = that.Type.SkewBase; + this.base(s); + this.m = [ 1, Math.tan(this.angle.toRadians()), 0, 1, 0, 0 ]; + }; + this.Type.skewY.prototype = new this.Type.SkewBase(); + this.transforms = []; + this.apply = function(ctx) { + for (var i = 0; i < this.transforms.length; i++) { + this.transforms[i].apply(ctx); + } + }; + this.unapply = function(ctx) { + for (var i = this.transforms.length - 1; i >= 0; i--) { + this.transforms[i].unapply(ctx); + } + }; + this.applyToPoint = function(p) { + for (var i = 0; i < this.transforms.length; i++) { + this.transforms[i].applyToPoint(p); + } + }; + var data = svg.trim(svg.compressSpaces(v)).replace(/\)(\s?,\s?)/g, ") ").split(/\s(?=[a-z])/); + for (var i = 0; i < data.length; i++) { + var type = svg.trim(data[i].split("(")[0]); + var s = data[i].split("(")[1].replace(")", ""); + var transform = new this.Type[type](s); + transform.type = type; + this.transforms.push(transform); + } + }; + // aspect ratio + svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) { + // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute + aspectRatio = svg.compressSpaces(aspectRatio); + aspectRatio = aspectRatio.replace(/^defer\s/, ""); + // ignore defer + var align = aspectRatio.split(" ")[0] || "xMidYMid"; + var meetOrSlice = aspectRatio.split(" ")[1] || "meet"; + // calculate scale + var scaleX = width / desiredWidth; + var scaleY = height / desiredHeight; + var scaleMin = Math.min(scaleX, scaleY); + var scaleMax = Math.max(scaleX, scaleY); + if (meetOrSlice == "meet") { + desiredWidth *= scaleMin; + desiredHeight *= scaleMin; + } + if (meetOrSlice == "slice") { + desiredWidth *= scaleMax; + desiredHeight *= scaleMax; + } + refX = new svg.Property("refX", refX); + refY = new svg.Property("refY", refY); + if (refX.hasValue() && refY.hasValue()) { + ctx.translate(-scaleMin * refX.toPixels("x"), -scaleMin * refY.toPixels("y")); + } else { + // align + if (align.match(/^xMid/) && (meetOrSlice == "meet" && scaleMin == scaleY || meetOrSlice == "slice" && scaleMax == scaleY)) ctx.translate(width / 2 - desiredWidth / 2, 0); + if (align.match(/YMid$/) && (meetOrSlice == "meet" && scaleMin == scaleX || meetOrSlice == "slice" && scaleMax == scaleX)) ctx.translate(0, height / 2 - desiredHeight / 2); + if (align.match(/^xMax/) && (meetOrSlice == "meet" && scaleMin == scaleY || meetOrSlice == "slice" && scaleMax == scaleY)) ctx.translate(width - desiredWidth, 0); + if (align.match(/YMax$/) && (meetOrSlice == "meet" && scaleMin == scaleX || meetOrSlice == "slice" && scaleMax == scaleX)) ctx.translate(0, height - desiredHeight); + } + // scale + if (align == "none") ctx.scale(scaleX, scaleY); else if (meetOrSlice == "meet") ctx.scale(scaleMin, scaleMin); else if (meetOrSlice == "slice") ctx.scale(scaleMax, scaleMax); + // translate + ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY); + }; + // elements + svg.Element = {}; + svg.EmptyProperty = new svg.Property("EMPTY", ""); + svg.Element.ElementBase = function(node) { + this.attributes = {}; + this.styles = {}; + this.children = []; + // get or create attribute + this.attribute = function(name, createIfNotExists) { + var a = this.attributes[name]; + if (a != null) return a; + if (createIfNotExists == true) { + a = new svg.Property(name, ""); + this.attributes[name] = a; + } + return a || svg.EmptyProperty; + }; + this.getHrefAttribute = function() { + for (var a in this.attributes) { + if (a.match(/:href$/)) { + return this.attributes[a]; + } + } + return svg.EmptyProperty; + }; + // get or create style, crawls up node tree + this.style = function(name, createIfNotExists) { + var s = this.styles[name]; + if (s != null) return s; + var a = this.attribute(name); + if (a != null && a.hasValue()) { + this.styles[name] = a; + // move up to me to cache + return a; + } + var p = this.parent; + if (p != null) { + var ps = p.style(name); + if (ps != null && ps.hasValue()) { + return ps; + } + } + if (createIfNotExists == true) { + s = new svg.Property(name, ""); + this.styles[name] = s; + } + return s || svg.EmptyProperty; + }; + // base render + this.render = function(ctx) { + // don't render display=none + if (this.style("display").value == "none") return; + // don't render visibility=hidden + if (this.attribute("visibility").value == "hidden") return; + ctx.save(); + if (this.attribute("mask").hasValue()) { + // mask + var mask = this.attribute("mask").getDefinition(); + if (mask != null) mask.apply(ctx, this); + } else if (this.style("filter").hasValue()) { + // filter + var filter = this.style("filter").getDefinition(); + if (filter != null) filter.apply(ctx, this); + } else { + this.setContext(ctx); + this.renderChildren(ctx); + this.clearContext(ctx); + } + ctx.restore(); + }; + // base set context + this.setContext = function(ctx) {}; + // base clear context + this.clearContext = function(ctx) {}; + // base render children + this.renderChildren = function(ctx) { + for (var i = 0; i < this.children.length; i++) { + this.children[i].render(ctx); + } + }; + this.addChild = function(childNode, create) { + var child = childNode; + if (create) child = svg.CreateElement(childNode); + child.parent = this; + this.children.push(child); + }; + if (node != null && node.nodeType == 1) { + //ELEMENT_NODE + // add children + for (var i = 0; i < node.childNodes.length; i++) { + var childNode = node.childNodes[i]; + if (childNode.nodeType == 1) this.addChild(childNode, true); + //ELEMENT_NODE + if (this.captureTextNodes && childNode.nodeType == 3) { + var text = childNode.nodeValue || childNode.text || ""; + if (svg.trim(svg.compressSpaces(text)) != "") { + this.addChild(new svg.Element.tspan(childNode), false); + } + } + } + // add attributes + for (var i = 0; i < node.attributes.length; i++) { + var attribute = node.attributes[i]; + this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue); + } + // add tag styles + var styles = svg.Styles[node.nodeName]; + if (styles != null) { + for (var name in styles) { + this.styles[name] = styles[name]; + } + } + // add class styles + if (this.attribute("class").hasValue()) { + var classes = svg.compressSpaces(this.attribute("class").value).split(" "); + for (var j = 0; j < classes.length; j++) { + styles = svg.Styles["." + classes[j]]; + if (styles != null) { + for (var name in styles) { + this.styles[name] = styles[name]; + } + } + styles = svg.Styles[node.nodeName + "." + classes[j]]; + if (styles != null) { + for (var name in styles) { + this.styles[name] = styles[name]; + } + } + } + } + // add id styles + if (this.attribute("id").hasValue()) { + var styles = svg.Styles["#" + this.attribute("id").value]; + if (styles != null) { + for (var name in styles) { + this.styles[name] = styles[name]; + } + } + } + // add inline styles + if (this.attribute("style").hasValue()) { + var styles = this.attribute("style").value.split(";"); + for (var i = 0; i < styles.length; i++) { + if (svg.trim(styles[i]) != "") { + var style = styles[i].split(":"); + var name = svg.trim(style[0]); + var value = svg.trim(style[1]); + this.styles[name] = new svg.Property(name, value); + } + } + } + // add id + if (this.attribute("id").hasValue()) { + if (svg.Definitions[this.attribute("id").value] == null) { + svg.Definitions[this.attribute("id").value] = this; + } + } + } + }; + svg.Element.RenderedElementBase = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.setContext = function(ctx) { + // fill + if (this.style("fill").isUrlDefinition()) { + var fs = this.style("fill").getFillStyleDefinition(this, this.style("fill-opacity")); + if (fs != null) ctx.fillStyle = fs; + } else if (this.style("fill").hasValue()) { + var fillStyle = this.style("fill"); + if (fillStyle.value == "currentColor") fillStyle.value = this.style("color").value; + ctx.fillStyle = fillStyle.value == "none" ? "rgba(0,0,0,0)" : fillStyle.value; + } + if (this.style("fill-opacity").hasValue()) { + var fillStyle = new svg.Property("fill", ctx.fillStyle); + fillStyle = fillStyle.addOpacity(this.style("fill-opacity").value); + ctx.fillStyle = fillStyle.value; + } + // stroke + if (this.style("stroke").isUrlDefinition()) { + var fs = this.style("stroke").getFillStyleDefinition(this, this.style("stroke-opacity")); + if (fs != null) ctx.strokeStyle = fs; + } else if (this.style("stroke").hasValue()) { + var strokeStyle = this.style("stroke"); + if (strokeStyle.value == "currentColor") strokeStyle.value = this.style("color").value; + ctx.strokeStyle = strokeStyle.value == "none" ? "rgba(0,0,0,0)" : strokeStyle.value; + } + if (this.style("stroke-opacity").hasValue()) { + var strokeStyle = new svg.Property("stroke", ctx.strokeStyle); + strokeStyle = strokeStyle.addOpacity(this.style("stroke-opacity").value); + ctx.strokeStyle = strokeStyle.value; + } + if (this.style("stroke-width").hasValue()) { + var newLineWidth = this.style("stroke-width").toPixels(); + ctx.lineWidth = newLineWidth == 0 ? .001 : newLineWidth; + } + if (this.style("stroke-linecap").hasValue()) ctx.lineCap = this.style("stroke-linecap").value; + if (this.style("stroke-linejoin").hasValue()) ctx.lineJoin = this.style("stroke-linejoin").value; + if (this.style("stroke-miterlimit").hasValue()) ctx.miterLimit = this.style("stroke-miterlimit").value; + if (this.style("stroke-dasharray").hasValue()) { + var gaps = svg.ToNumberArray(this.style("stroke-dasharray").value); + if (typeof ctx.setLineDash != "undefined") { + ctx.setLineDash(gaps); + } else if (typeof ctx.webkitLineDash != "undefined") { + ctx.webkitLineDash = gaps; + } else if (typeof ctx.mozDash != "undefined") { + ctx.mozDash = gaps; + } + var offset = this.style("stroke-dashoffset").numValueOrDefault(1); + if (typeof ctx.lineDashOffset != "undefined") { + ctx.lineDashOffset = offset; + } else if (typeof ctx.webkitLineDashOffset != "undefined") { + ctx.webkitLineDashOffset = offset; + } else if (typeof ctx.mozDashOffset != "undefined") { + ctx.mozDashOffset = offset; + } + } + // font + if (typeof ctx.font != "undefined") { + ctx.font = svg.Font.CreateFont(this.style("font-style").value, this.style("font-variant").value, this.style("font-weight").value, this.style("font-size").hasValue() ? this.style("font-size").toPixels() + "px" : "", this.style("font-family").value).toString(); + } + // transform + if (this.attribute("transform").hasValue()) { + var transform = new svg.Transform(this.attribute("transform").value); + transform.apply(ctx); + } + // clip + if (this.style("clip-path").hasValue()) { + var clip = this.style("clip-path").getDefinition(); + if (clip != null) clip.apply(ctx); + } + // opacity + if (this.style("opacity").hasValue()) { + ctx.globalAlpha = this.style("opacity").numValue(); + } + }; + }; + svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase(); + svg.Element.PathElementBase = function(node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + this.path = function(ctx) { + if (ctx != null) ctx.beginPath(); + return new svg.BoundingBox(); + }; + this.renderChildren = function(ctx) { + this.path(ctx); + svg.Mouse.checkPath(this, ctx); + if (ctx.fillStyle != "") { + if (this.attribute("fill-rule").hasValue()) { + ctx.fill(this.attribute("fill-rule").value); + } else { + ctx.fill(); + } + } + if (ctx.strokeStyle != "") ctx.stroke(); + var markers = this.getMarkers(); + if (markers != null) { + if (this.style("marker-start").isUrlDefinition()) { + var marker = this.style("marker-start").getDefinition(); + marker.render(ctx, markers[0][0], markers[0][1]); + } + if (this.style("marker-mid").isUrlDefinition()) { + var marker = this.style("marker-mid").getDefinition(); + for (var i = 1; i < markers.length - 1; i++) { + marker.render(ctx, markers[i][0], markers[i][1]); + } + } + if (this.style("marker-end").isUrlDefinition()) { + var marker = this.style("marker-end").getDefinition(); + marker.render(ctx, markers[markers.length - 1][0], markers[markers.length - 1][1]); + } + } + }; + this.getBoundingBox = function() { + return this.path(); + }; + this.getMarkers = function() { + return null; + }; + }; + svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase(); + // svg element + svg.Element.svg = function(node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + this.baseClearContext = this.clearContext; + this.clearContext = function(ctx) { + this.baseClearContext(ctx); + svg.ViewPort.RemoveCurrent(); + }; + this.baseSetContext = this.setContext; + this.setContext = function(ctx) { + // initial values + ctx.strokeStyle = "rgba(0,0,0,0)"; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 4; + this.baseSetContext(ctx); + // create new view port + if (!this.attribute("x").hasValue()) this.attribute("x", true).value = 0; + if (!this.attribute("y").hasValue()) this.attribute("y", true).value = 0; + ctx.translate(this.attribute("x").toPixels("x"), this.attribute("y").toPixels("y")); + var width = svg.ViewPort.width(); + var height = svg.ViewPort.height(); + if (!this.attribute("width").hasValue()) this.attribute("width", true).value = "100%"; + if (!this.attribute("height").hasValue()) this.attribute("height", true).value = "100%"; + if (typeof this.root == "undefined") { + width = this.attribute("width").toPixels("x"); + height = this.attribute("height").toPixels("y"); + var x = 0; + var y = 0; + if (this.attribute("refX").hasValue() && this.attribute("refY").hasValue()) { + x = -this.attribute("refX").toPixels("x"); + y = -this.attribute("refY").toPixels("y"); + } + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(width, y); + ctx.lineTo(width, height); + ctx.lineTo(x, height); + ctx.closePath(); + ctx.clip(); + } + svg.ViewPort.SetCurrent(width, height); + // viewbox + if (this.attribute("viewBox").hasValue()) { + var viewBox = svg.ToNumberArray(this.attribute("viewBox").value); + var minX = viewBox[0]; + var minY = viewBox[1]; + width = viewBox[2]; + height = viewBox[3]; + svg.AspectRatio(ctx, this.attribute("preserveAspectRatio").value, svg.ViewPort.width(), width, svg.ViewPort.height(), height, minX, minY, this.attribute("refX").value, this.attribute("refY").value); + svg.ViewPort.RemoveCurrent(); + svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); + } + }; + }; + svg.Element.svg.prototype = new svg.Element.RenderedElementBase(); + // rect element + svg.Element.rect = function(node) { + this.base = svg.Element.PathElementBase; + this.base(node); + this.path = function(ctx) { + var x = this.attribute("x").toPixels("x"); + var y = this.attribute("y").toPixels("y"); + var width = this.attribute("width").toPixels("x"); + var height = this.attribute("height").toPixels("y"); + var rx = this.attribute("rx").toPixels("x"); + var ry = this.attribute("ry").toPixels("y"); + if (this.attribute("rx").hasValue() && !this.attribute("ry").hasValue()) ry = rx; + if (this.attribute("ry").hasValue() && !this.attribute("rx").hasValue()) rx = ry; + rx = Math.min(rx, width / 2); + ry = Math.min(ry, height / 2); + if (ctx != null) { + ctx.beginPath(); + ctx.moveTo(x + rx, y); + ctx.lineTo(x + width - rx, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + ry); + ctx.lineTo(x + width, y + height - ry); + ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height); + ctx.lineTo(x + rx, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - ry); + ctx.lineTo(x, y + ry); + ctx.quadraticCurveTo(x, y, x + rx, y); + ctx.closePath(); + } + return new svg.BoundingBox(x, y, x + width, y + height); + }; + }; + svg.Element.rect.prototype = new svg.Element.PathElementBase(); + // circle element + svg.Element.circle = function(node) { + this.base = svg.Element.PathElementBase; + this.base(node); + this.path = function(ctx) { + var cx = this.attribute("cx").toPixels("x"); + var cy = this.attribute("cy").toPixels("y"); + var r = this.attribute("r").toPixels(); + if (ctx != null) { + ctx.beginPath(); + ctx.arc(cx, cy, r, 0, Math.PI * 2, true); + ctx.closePath(); + } + return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r); + }; + }; + svg.Element.circle.prototype = new svg.Element.PathElementBase(); + // ellipse element + svg.Element.ellipse = function(node) { + this.base = svg.Element.PathElementBase; + this.base(node); + this.path = function(ctx) { + var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); + var rx = this.attribute("rx").toPixels("x"); + var ry = this.attribute("ry").toPixels("y"); + var cx = this.attribute("cx").toPixels("x"); + var cy = this.attribute("cy").toPixels("y"); + if (ctx != null) { + ctx.beginPath(); + ctx.moveTo(cx, cy - ry); + ctx.bezierCurveTo(cx + KAPPA * rx, cy - ry, cx + rx, cy - KAPPA * ry, cx + rx, cy); + ctx.bezierCurveTo(cx + rx, cy + KAPPA * ry, cx + KAPPA * rx, cy + ry, cx, cy + ry); + ctx.bezierCurveTo(cx - KAPPA * rx, cy + ry, cx - rx, cy + KAPPA * ry, cx - rx, cy); + ctx.bezierCurveTo(cx - rx, cy - KAPPA * ry, cx - KAPPA * rx, cy - ry, cx, cy - ry); + ctx.closePath(); + } + return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry); + }; + }; + svg.Element.ellipse.prototype = new svg.Element.PathElementBase(); + // line element + svg.Element.line = function(node) { + this.base = svg.Element.PathElementBase; + this.base(node); + this.getPoints = function() { + return [ new svg.Point(this.attribute("x1").toPixels("x"), this.attribute("y1").toPixels("y")), new svg.Point(this.attribute("x2").toPixels("x"), this.attribute("y2").toPixels("y")) ]; + }; + this.path = function(ctx) { + var points = this.getPoints(); + if (ctx != null) { + ctx.beginPath(); + ctx.moveTo(points[0].x, points[0].y); + ctx.lineTo(points[1].x, points[1].y); + } + return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y); + }; + this.getMarkers = function() { + var points = this.getPoints(); + var a = points[0].angleTo(points[1]); + return [ [ points[0], a ], [ points[1], a ] ]; + }; + }; + svg.Element.line.prototype = new svg.Element.PathElementBase(); + // polyline element + svg.Element.polyline = function(node) { + this.base = svg.Element.PathElementBase; + this.base(node); + this.points = svg.CreatePath(this.attribute("points").value); + this.path = function(ctx) { + var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y); + if (ctx != null) { + ctx.beginPath(); + ctx.moveTo(this.points[0].x, this.points[0].y); + } + for (var i = 1; i < this.points.length; i++) { + bb.addPoint(this.points[i].x, this.points[i].y); + if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y); + } + return bb; + }; + this.getMarkers = function() { + var markers = []; + for (var i = 0; i < this.points.length - 1; i++) { + markers.push([ this.points[i], this.points[i].angleTo(this.points[i + 1]) ]); + } + markers.push([ this.points[this.points.length - 1], markers[markers.length - 1][1] ]); + return markers; + }; + }; + svg.Element.polyline.prototype = new svg.Element.PathElementBase(); + // polygon element + svg.Element.polygon = function(node) { + this.base = svg.Element.polyline; + this.base(node); + this.basePath = this.path; + this.path = function(ctx) { + var bb = this.basePath(ctx); + if (ctx != null) { + ctx.lineTo(this.points[0].x, this.points[0].y); + ctx.closePath(); + } + return bb; + }; + }; + svg.Element.polygon.prototype = new svg.Element.polyline(); + // path element + svg.Element.path = function(node) { + this.base = svg.Element.PathElementBase; + this.base(node); + var d = this.attribute("d").value; + // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF + d = d.replace(/,/gm, " "); + // get rid of all commas + d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, "$1 $2"); + // separate commands from commands + d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, "$1 $2"); + // separate commands from commands + d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm, "$1 $2"); + // separate commands from points + d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm, "$1 $2"); + // separate commands from points + d = d.replace(/([0-9])([+\-])/gm, "$1 $2"); + // separate digits when no comma + d = d.replace(/(\.[0-9]*)(\.)/gm, "$1 $2"); + // separate digits when no comma + d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm, "$1 $3 $4 "); + // shorthand elliptical arc path syntax + d = svg.compressSpaces(d); + // compress multiple spaces + d = svg.trim(d); + this.PathParser = new function(d) { + this.tokens = d.split(" "); + this.reset = function() { + this.i = -1; + this.command = ""; + this.previousCommand = ""; + this.start = new svg.Point(0, 0); + this.control = new svg.Point(0, 0); + this.current = new svg.Point(0, 0); + this.points = []; + this.angles = []; + }; + this.isEnd = function() { + return this.i >= this.tokens.length - 1; + }; + this.isCommandOrEnd = function() { + if (this.isEnd()) return true; + return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; + }; + this.isRelativeCommand = function() { + switch (this.command) { + case "m": + case "l": + case "h": + case "v": + case "c": + case "s": + case "q": + case "t": + case "a": + case "z": + return true; + break; + } + return false; + }; + this.getToken = function() { + this.i++; + return this.tokens[this.i]; + }; + this.getScalar = function() { + return parseFloat(this.getToken()); + }; + this.nextCommand = function() { + this.previousCommand = this.command; + this.command = this.getToken(); + }; + this.getPoint = function() { + var p = new svg.Point(this.getScalar(), this.getScalar()); + return this.makeAbsolute(p); + }; + this.getAsControlPoint = function() { + var p = this.getPoint(); + this.control = p; + return p; + }; + this.getAsCurrentPoint = function() { + var p = this.getPoint(); + this.current = p; + return p; + }; + this.getReflectedControlPoint = function() { + if (this.previousCommand.toLowerCase() != "c" && this.previousCommand.toLowerCase() != "s" && this.previousCommand.toLowerCase() != "q" && this.previousCommand.toLowerCase() != "t") { + return this.current; + } + // reflect point + var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); + return p; + }; + this.makeAbsolute = function(p) { + if (this.isRelativeCommand()) { + p.x += this.current.x; + p.y += this.current.y; + } + return p; + }; + this.addMarker = function(p, from, priorTo) { + // if the last angle isn't filled in because we didn't have this point yet ... + if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length - 1] == null) { + this.angles[this.angles.length - 1] = this.points[this.points.length - 1].angleTo(priorTo); + } + this.addMarkerAngle(p, from == null ? null : from.angleTo(p)); + }; + this.addMarkerAngle = function(p, a) { + this.points.push(p); + this.angles.push(a); + }; + this.getMarkerPoints = function() { + return this.points; + }; + this.getMarkerAngles = function() { + for (var i = 0; i < this.angles.length; i++) { + if (this.angles[i] == null) { + for (var j = i + 1; j < this.angles.length; j++) { + if (this.angles[j] != null) { + this.angles[i] = this.angles[j]; + break; + } + } + } + } + return this.angles; + }; + }(d); + this.path = function(ctx) { + var pp = this.PathParser; + pp.reset(); + var bb = new svg.BoundingBox(); + if (ctx != null) ctx.beginPath(); + while (!pp.isEnd()) { + pp.nextCommand(); + switch (pp.command) { + case "M": + case "m": + var p = pp.getAsCurrentPoint(); + pp.addMarker(p); + bb.addPoint(p.x, p.y); + if (ctx != null) ctx.moveTo(p.x, p.y); + pp.start = pp.current; + while (!pp.isCommandOrEnd()) { + var p = pp.getAsCurrentPoint(); + pp.addMarker(p, pp.start); + bb.addPoint(p.x, p.y); + if (ctx != null) ctx.lineTo(p.x, p.y); + } + break; + + case "L": + case "l": + while (!pp.isCommandOrEnd()) { + var c = pp.current; + var p = pp.getAsCurrentPoint(); + pp.addMarker(p, c); + bb.addPoint(p.x, p.y); + if (ctx != null) ctx.lineTo(p.x, p.y); + } + break; + + case "H": + case "h": + while (!pp.isCommandOrEnd()) { + var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y); + pp.addMarker(newP, pp.current); + pp.current = newP; + bb.addPoint(pp.current.x, pp.current.y); + if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); + } + break; + + case "V": + case "v": + while (!pp.isCommandOrEnd()) { + var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar()); + pp.addMarker(newP, pp.current); + pp.current = newP; + bb.addPoint(pp.current.x, pp.current.y); + if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); + } + break; + + case "C": + case "c": + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var p1 = pp.getPoint(); + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, p1); + bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + + case "S": + case "s": + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var p1 = pp.getReflectedControlPoint(); + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, p1); + bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + + case "Q": + case "q": + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, cntrl); + bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + + case "T": + case "t": + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var cntrl = pp.getReflectedControlPoint(); + pp.control = cntrl; + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, cntrl); + bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + + case "A": + case "a": + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var rx = pp.getScalar(); + var ry = pp.getScalar(); + var xAxisRotation = pp.getScalar() * (Math.PI / 180); + var largeArcFlag = pp.getScalar(); + var sweepFlag = pp.getScalar(); + var cp = pp.getAsCurrentPoint(); + // Conversion from endpoint to center parameterization + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + // x1', y1' + var currp = new svg.Point(Math.cos(xAxisRotation) * (curr.x - cp.x) / 2 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2, -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2); + // adjust radii + var l = Math.pow(currp.x, 2) / Math.pow(rx, 2) + Math.pow(currp.y, 2) / Math.pow(ry, 2); + if (l > 1) { + rx *= Math.sqrt(l); + ry *= Math.sqrt(l); + } + // cx', cy' + var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt((Math.pow(rx, 2) * Math.pow(ry, 2) - Math.pow(rx, 2) * Math.pow(currp.y, 2) - Math.pow(ry, 2) * Math.pow(currp.x, 2)) / (Math.pow(rx, 2) * Math.pow(currp.y, 2) + Math.pow(ry, 2) * Math.pow(currp.x, 2))); + if (isNaN(s)) s = 0; + var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); + // cx, cy + var centp = new svg.Point((curr.x + cp.x) / 2 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, (curr.y + cp.y) / 2 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y); + // vector magnitude + var m = function(v) { + return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); + }; + // ratio between two vectors + var r = function(u, v) { + return (u[0] * v[0] + u[1] * v[1]) / (m(u) * m(v)); + }; + // angle between two vectors + var a = function(u, v) { + return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(r(u, v)); + }; + // initial angle + var a1 = a([ 1, 0 ], [ (currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry ]); + // angle delta + var u = [ (currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry ]; + var v = [ (-currp.x - cpp.x) / rx, (-currp.y - cpp.y) / ry ]; + var ad = a(u, v); + if (r(u, v) <= -1) ad = Math.PI; + if (r(u, v) >= 1) ad = 0; + // for markers + var dir = 1 - sweepFlag ? 1 : -1; + var ah = a1 + dir * (ad / 2); + var halfWay = new svg.Point(centp.x + rx * Math.cos(ah), centp.y + ry * Math.sin(ah)); + pp.addMarkerAngle(halfWay, ah - dir * Math.PI / 2); + pp.addMarkerAngle(cp, ah - dir * Math.PI); + bb.addPoint(cp.x, cp.y); + // TODO: this is too naive, make it better + if (ctx != null) { + var r = rx > ry ? rx : ry; + var sx = rx > ry ? 1 : rx / ry; + var sy = rx > ry ? ry / rx : 1; + ctx.translate(centp.x, centp.y); + ctx.rotate(xAxisRotation); + ctx.scale(sx, sy); + ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag); + ctx.scale(1 / sx, 1 / sy); + ctx.rotate(-xAxisRotation); + ctx.translate(-centp.x, -centp.y); + } + } + break; + + case "Z": + case "z": + if (ctx != null) ctx.closePath(); + pp.current = pp.start; + } + } + return bb; + }; + this.getMarkers = function() { + var points = this.PathParser.getMarkerPoints(); + var angles = this.PathParser.getMarkerAngles(); + var markers = []; + for (var i = 0; i < points.length; i++) { + markers.push([ points[i], angles[i] ]); + } + return markers; + }; + }; + svg.Element.path.prototype = new svg.Element.PathElementBase(); + // pattern element + svg.Element.pattern = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.createPattern = function(ctx, element) { + var width = this.attribute("width").toPixels("x", true); + var height = this.attribute("height").toPixels("y", true); + // render me using a temporary svg element + var tempSvg = new svg.Element.svg(); + tempSvg.attributes["viewBox"] = new svg.Property("viewBox", this.attribute("viewBox").value); + tempSvg.attributes["width"] = new svg.Property("width", width + "px"); + tempSvg.attributes["height"] = new svg.Property("height", height + "px"); + tempSvg.attributes["transform"] = new svg.Property("transform", this.attribute("patternTransform").value); + tempSvg.children = this.children; + var c = document.createElement("canvas"); + c.width = width; + c.height = height; + var cctx = c.getContext("2d"); + if (this.attribute("x").hasValue() && this.attribute("y").hasValue()) { + cctx.translate(this.attribute("x").toPixels("x", true), this.attribute("y").toPixels("y", true)); + } + // render 3x3 grid so when we transform there's no white space on edges + for (var x = -1; x <= 1; x++) { + for (var y = -1; y <= 1; y++) { + cctx.save(); + cctx.translate(x * c.width, y * c.height); + tempSvg.render(cctx); + cctx.restore(); + } + } + var pattern = ctx.createPattern(c, "repeat"); + return pattern; + }; + }; + svg.Element.pattern.prototype = new svg.Element.ElementBase(); + // marker element + svg.Element.marker = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.baseRender = this.render; + this.render = function(ctx, point, angle) { + ctx.translate(point.x, point.y); + if (this.attribute("orient").valueOrDefault("auto") == "auto") ctx.rotate(angle); + if (this.attribute("markerUnits").valueOrDefault("strokeWidth") == "strokeWidth") ctx.scale(ctx.lineWidth, ctx.lineWidth); + ctx.save(); + // render me using a temporary svg element + var tempSvg = new svg.Element.svg(); + tempSvg.attributes["viewBox"] = new svg.Property("viewBox", this.attribute("viewBox").value); + tempSvg.attributes["refX"] = new svg.Property("refX", this.attribute("refX").value); + tempSvg.attributes["refY"] = new svg.Property("refY", this.attribute("refY").value); + tempSvg.attributes["width"] = new svg.Property("width", this.attribute("markerWidth").value); + tempSvg.attributes["height"] = new svg.Property("height", this.attribute("markerHeight").value); + tempSvg.attributes["fill"] = new svg.Property("fill", this.attribute("fill").valueOrDefault("black")); + tempSvg.attributes["stroke"] = new svg.Property("stroke", this.attribute("stroke").valueOrDefault("none")); + tempSvg.children = this.children; + tempSvg.render(ctx); + ctx.restore(); + if (this.attribute("markerUnits").valueOrDefault("strokeWidth") == "strokeWidth") ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth); + if (this.attribute("orient").valueOrDefault("auto") == "auto") ctx.rotate(-angle); + ctx.translate(-point.x, -point.y); + }; + }; + svg.Element.marker.prototype = new svg.Element.ElementBase(); + // definitions element + svg.Element.defs = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.render = function(ctx) {}; + }; + svg.Element.defs.prototype = new svg.Element.ElementBase(); + // base for gradients + svg.Element.GradientBase = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.gradientUnits = this.attribute("gradientUnits").valueOrDefault("objectBoundingBox"); + this.stops = []; + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + if (child.type == "stop") this.stops.push(child); + } + this.getGradient = function() {}; + this.createGradient = function(ctx, element, parentOpacityProp) { + var stopsContainer = this; + if (this.getHrefAttribute().hasValue()) { + stopsContainer = this.getHrefAttribute().getDefinition(); + } + var addParentOpacity = function(color) { + if (parentOpacityProp.hasValue()) { + var p = new svg.Property("color", color); + return p.addOpacity(parentOpacityProp.value).value; + } + return color; + }; + var g = this.getGradient(ctx, element); + if (g == null) return addParentOpacity(stopsContainer.stops[stopsContainer.stops.length - 1].color); + for (var i = 0; i < stopsContainer.stops.length; i++) { + g.addColorStop(stopsContainer.stops[i].offset, addParentOpacity(stopsContainer.stops[i].color)); + } + if (this.attribute("gradientTransform").hasValue()) { + // render as transformed pattern on temporary canvas + var rootView = svg.ViewPort.viewPorts[0]; + var rect = new svg.Element.rect(); + rect.attributes["x"] = new svg.Property("x", -svg.MAX_VIRTUAL_PIXELS / 3); + rect.attributes["y"] = new svg.Property("y", -svg.MAX_VIRTUAL_PIXELS / 3); + rect.attributes["width"] = new svg.Property("width", svg.MAX_VIRTUAL_PIXELS); + rect.attributes["height"] = new svg.Property("height", svg.MAX_VIRTUAL_PIXELS); + var group = new svg.Element.g(); + group.attributes["transform"] = new svg.Property("transform", this.attribute("gradientTransform").value); + group.children = [ rect ]; + var tempSvg = new svg.Element.svg(); + tempSvg.attributes["x"] = new svg.Property("x", 0); + tempSvg.attributes["y"] = new svg.Property("y", 0); + tempSvg.attributes["width"] = new svg.Property("width", rootView.width); + tempSvg.attributes["height"] = new svg.Property("height", rootView.height); + tempSvg.children = [ group ]; + var c = document.createElement("canvas"); + c.width = rootView.width; + c.height = rootView.height; + var tempCtx = c.getContext("2d"); + tempCtx.fillStyle = g; + tempSvg.render(tempCtx); + return tempCtx.createPattern(c, "no-repeat"); + } + return g; + }; + }; + svg.Element.GradientBase.prototype = new svg.Element.ElementBase(); + // linear gradient element + svg.Element.linearGradient = function(node) { + this.base = svg.Element.GradientBase; + this.base(node); + this.getGradient = function(ctx, element) { + var bb = element.getBoundingBox(); + if (!this.attribute("x1").hasValue() && !this.attribute("y1").hasValue() && !this.attribute("x2").hasValue() && !this.attribute("y2").hasValue()) { + this.attribute("x1", true).value = 0; + this.attribute("y1", true).value = 0; + this.attribute("x2", true).value = 1; + this.attribute("y2", true).value = 0; + } + var x1 = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("x1").numValue() : this.attribute("x1").toPixels("x"); + var y1 = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("y1").numValue() : this.attribute("y1").toPixels("y"); + var x2 = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("x2").numValue() : this.attribute("x2").toPixels("x"); + var y2 = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("y2").numValue() : this.attribute("y2").toPixels("y"); + if (x1 == x2 && y1 == y2) return null; + return ctx.createLinearGradient(x1, y1, x2, y2); + }; + }; + svg.Element.linearGradient.prototype = new svg.Element.GradientBase(); + // radial gradient element + svg.Element.radialGradient = function(node) { + this.base = svg.Element.GradientBase; + this.base(node); + this.getGradient = function(ctx, element) { + var bb = element.getBoundingBox(); + if (!this.attribute("cx").hasValue()) this.attribute("cx", true).value = "50%"; + if (!this.attribute("cy").hasValue()) this.attribute("cy", true).value = "50%"; + if (!this.attribute("r").hasValue()) this.attribute("r", true).value = "50%"; + var cx = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("cx").numValue() : this.attribute("cx").toPixels("x"); + var cy = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("cy").numValue() : this.attribute("cy").toPixels("y"); + var fx = cx; + var fy = cy; + if (this.attribute("fx").hasValue()) { + fx = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("fx").numValue() : this.attribute("fx").toPixels("x"); + } + if (this.attribute("fy").hasValue()) { + fy = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("fy").numValue() : this.attribute("fy").toPixels("y"); + } + var r = this.gradientUnits == "objectBoundingBox" ? (bb.width() + bb.height()) / 2 * this.attribute("r").numValue() : this.attribute("r").toPixels(); + return ctx.createRadialGradient(fx, fy, 0, cx, cy, r); + }; + }; + svg.Element.radialGradient.prototype = new svg.Element.GradientBase(); + // gradient stop element + svg.Element.stop = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.offset = this.attribute("offset").numValue(); + if (this.offset < 0) this.offset = 0; + if (this.offset > 1) this.offset = 1; + var stopColor = this.style("stop-color"); + if (this.style("stop-opacity").hasValue()) stopColor = stopColor.addOpacity(this.style("stop-opacity").value); + this.color = stopColor.value; + }; + svg.Element.stop.prototype = new svg.Element.ElementBase(); + // animation base element + svg.Element.AnimateBase = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + svg.Animations.push(this); + this.duration = 0; + this.begin = this.attribute("begin").toMilliseconds(); + this.maxDuration = this.begin + this.attribute("dur").toMilliseconds(); + this.getProperty = function() { + var attributeType = this.attribute("attributeType").value; + var attributeName = this.attribute("attributeName").value; + if (attributeType == "CSS") { + return this.parent.style(attributeName, true); + } + return this.parent.attribute(attributeName, true); + }; + this.initialValue = null; + this.initialUnits = ""; + this.removed = false; + this.calcValue = function() { + // OVERRIDE ME! + return ""; + }; + this.update = function(delta) { + // set initial value + if (this.initialValue == null) { + this.initialValue = this.getProperty().value; + this.initialUnits = this.getProperty().getUnits(); + } + // if we're past the end time + if (this.duration > this.maxDuration) { + // loop for indefinitely repeating animations + if (this.attribute("repeatCount").value == "indefinite" || this.attribute("repeatDur").value == "indefinite") { + this.duration = 0; + } else if (this.attribute("fill").valueOrDefault("remove") == "remove" && !this.removed) { + this.removed = true; + this.getProperty().value = this.initialValue; + return true; + } else { + return false; + } + } + this.duration = this.duration + delta; + // if we're past the begin time + var updated = false; + if (this.begin < this.duration) { + var newValue = this.calcValue(); + // tween + if (this.attribute("type").hasValue()) { + // for transform, etc. + var type = this.attribute("type").value; + newValue = type + "(" + newValue + ")"; + } + this.getProperty().value = newValue; + updated = true; + } + return updated; + }; + this.from = this.attribute("from"); + this.to = this.attribute("to"); + this.values = this.attribute("values"); + if (this.values.hasValue()) this.values.value = this.values.value.split(";"); + // fraction of duration we've covered + this.progress = function() { + var ret = { + progress: (this.duration - this.begin) / (this.maxDuration - this.begin) + }; + if (this.values.hasValue()) { + var p = ret.progress * (this.values.value.length - 1); + var lb = Math.floor(p), ub = Math.ceil(p); + ret.from = new svg.Property("from", parseFloat(this.values.value[lb])); + ret.to = new svg.Property("to", parseFloat(this.values.value[ub])); + ret.progress = (p - lb) / (ub - lb); + } else { + ret.from = this.from; + ret.to = this.to; + } + return ret; + }; + }; + svg.Element.AnimateBase.prototype = new svg.Element.ElementBase(); + // animate element + svg.Element.animate = function(node) { + this.base = svg.Element.AnimateBase; + this.base(node); + this.calcValue = function() { + var p = this.progress(); + // tween value linearly + var newValue = p.from.numValue() + (p.to.numValue() - p.from.numValue()) * p.progress; + return newValue + this.initialUnits; + }; + }; + svg.Element.animate.prototype = new svg.Element.AnimateBase(); + // animate color element + svg.Element.animateColor = function(node) { + this.base = svg.Element.AnimateBase; + this.base(node); + this.calcValue = function() { + var p = this.progress(); + var from = new RGBColor(p.from.value); + var to = new RGBColor(p.to.value); + if (from.ok && to.ok) { + // tween color linearly + var r = from.r + (to.r - from.r) * p.progress; + var g = from.g + (to.g - from.g) * p.progress; + var b = from.b + (to.b - from.b) * p.progress; + return "rgb(" + parseInt(r, 10) + "," + parseInt(g, 10) + "," + parseInt(b, 10) + ")"; + } + return this.attribute("from").value; + }; + }; + svg.Element.animateColor.prototype = new svg.Element.AnimateBase(); + // animate transform element + svg.Element.animateTransform = function(node) { + this.base = svg.Element.AnimateBase; + this.base(node); + this.calcValue = function() { + var p = this.progress(); + // tween value linearly + var from = svg.ToNumberArray(p.from.value); + var to = svg.ToNumberArray(p.to.value); + var newValue = ""; + for (var i = 0; i < from.length; i++) { + newValue += from[i] + (to[i] - from[i]) * p.progress + " "; + } + return newValue; + }; + }; + svg.Element.animateTransform.prototype = new svg.Element.animate(); + // font element + svg.Element.font = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.horizAdvX = this.attribute("horiz-adv-x").numValue(); + this.isRTL = false; + this.isArabic = false; + this.fontFace = null; + this.missingGlyph = null; + this.glyphs = []; + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + if (child.type == "font-face") { + this.fontFace = child; + if (child.style("font-family").hasValue()) { + svg.Definitions[child.style("font-family").value] = this; + } + } else if (child.type == "missing-glyph") this.missingGlyph = child; else if (child.type == "glyph") { + if (child.arabicForm != "") { + this.isRTL = true; + this.isArabic = true; + if (typeof this.glyphs[child.unicode] == "undefined") this.glyphs[child.unicode] = []; + this.glyphs[child.unicode][child.arabicForm] = child; + } else { + this.glyphs[child.unicode] = child; + } + } + } + }; + svg.Element.font.prototype = new svg.Element.ElementBase(); + // font-face element + svg.Element.fontface = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.ascent = this.attribute("ascent").value; + this.descent = this.attribute("descent").value; + this.unitsPerEm = this.attribute("units-per-em").numValue(); + }; + svg.Element.fontface.prototype = new svg.Element.ElementBase(); + // missing-glyph element + svg.Element.missingglyph = function(node) { + this.base = svg.Element.path; + this.base(node); + this.horizAdvX = 0; + }; + svg.Element.missingglyph.prototype = new svg.Element.path(); + // glyph element + svg.Element.glyph = function(node) { + this.base = svg.Element.path; + this.base(node); + this.horizAdvX = this.attribute("horiz-adv-x").numValue(); + this.unicode = this.attribute("unicode").value; + this.arabicForm = this.attribute("arabic-form").value; + }; + svg.Element.glyph.prototype = new svg.Element.path(); + // text element + svg.Element.text = function(node) { + this.captureTextNodes = true; + this.base = svg.Element.RenderedElementBase; + this.base(node); + this.baseSetContext = this.setContext; + this.setContext = function(ctx) { + this.baseSetContext(ctx); + if (this.style("dominant-baseline").hasValue()) ctx.textBaseline = this.style("dominant-baseline").value; + if (this.style("alignment-baseline").hasValue()) ctx.textBaseline = this.style("alignment-baseline").value; + }; + this.getBoundingBox = function() { + // TODO: implement + return new svg.BoundingBox(this.attribute("x").toPixels("x"), this.attribute("y").toPixels("y"), 0, 0); + }; + this.renderChildren = function(ctx) { + this.x = this.attribute("x").toPixels("x"); + this.y = this.attribute("y").toPixels("y"); + this.x += this.getAnchorDelta(ctx, this, 0); + for (var i = 0; i < this.children.length; i++) { + this.renderChild(ctx, this, i); + } + }; + this.getAnchorDelta = function(ctx, parent, startI) { + var textAnchor = this.style("text-anchor").valueOrDefault("start"); + if (textAnchor != "start") { + var width = 0; + for (var i = startI; i < parent.children.length; i++) { + var child = parent.children[i]; + if (i > startI && child.attribute("x").hasValue()) break; + // new group + width += child.measureTextRecursive(ctx); + } + return -1 * (textAnchor == "end" ? width : width / 2); + } + return 0; + }; + this.renderChild = function(ctx, parent, i) { + var child = parent.children[i]; + if (child.attribute("x").hasValue()) { + child.x = child.attribute("x").toPixels("x") + this.getAnchorDelta(ctx, parent, i); + } else { + if (this.attribute("dx").hasValue()) this.x += this.attribute("dx").toPixels("x"); + if (child.attribute("dx").hasValue()) this.x += child.attribute("dx").toPixels("x"); + child.x = this.x; + } + this.x = child.x + child.measureText(ctx); + if (child.attribute("y").hasValue()) { + child.y = child.attribute("y").toPixels("y"); + } else { + if (this.attribute("dy").hasValue()) this.y += this.attribute("dy").toPixels("y"); + if (child.attribute("dy").hasValue()) this.y += child.attribute("dy").toPixels("y"); + child.y = this.y; + } + this.y = child.y; + child.render(ctx); + for (var i = 0; i < child.children.length; i++) { + this.renderChild(ctx, child, i); + } + }; + }; + svg.Element.text.prototype = new svg.Element.RenderedElementBase(); + // text base + svg.Element.TextElementBase = function(node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + this.getGlyph = function(font, text, i) { + var c = text[i]; + var glyph = null; + if (font.isArabic) { + var arabicForm = "isolated"; + if ((i == 0 || text[i - 1] == " ") && i < text.length - 2 && text[i + 1] != " ") arabicForm = "terminal"; + if (i > 0 && text[i - 1] != " " && i < text.length - 2 && text[i + 1] != " ") arabicForm = "medial"; + if (i > 0 && text[i - 1] != " " && (i == text.length - 1 || text[i + 1] == " ")) arabicForm = "initial"; + if (typeof font.glyphs[c] != "undefined") { + glyph = font.glyphs[c][arabicForm]; + if (glyph == null && font.glyphs[c].type == "glyph") glyph = font.glyphs[c]; + } + } else { + glyph = font.glyphs[c]; + } + if (glyph == null) glyph = font.missingGlyph; + return glyph; + }; + this.renderChildren = function(ctx) { + var customFont = this.parent.style("font-family").getDefinition(); + if (customFont != null) { + var fontSize = this.parent.style("font-size").numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); + var fontStyle = this.parent.style("font-style").valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle); + var text = this.getText(); + if (customFont.isRTL) text = text.split("").reverse().join(""); + var dx = svg.ToNumberArray(this.parent.attribute("dx").value); + for (var i = 0; i < text.length; i++) { + var glyph = this.getGlyph(customFont, text, i); + var scale = fontSize / customFont.fontFace.unitsPerEm; + ctx.translate(this.x, this.y); + ctx.scale(scale, -scale); + var lw = ctx.lineWidth; + ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize; + if (fontStyle == "italic") ctx.transform(1, 0, .4, 1, 0, 0); + glyph.render(ctx); + if (fontStyle == "italic") ctx.transform(1, 0, -.4, 1, 0, 0); + ctx.lineWidth = lw; + ctx.scale(1 / scale, -1 / scale); + ctx.translate(-this.x, -this.y); + this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm; + if (typeof dx[i] != "undefined" && !isNaN(dx[i])) { + this.x += dx[i]; + } + } + return; + } + if (ctx.fillStyle != "") ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y); + if (ctx.strokeStyle != "") ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y); + }; + this.getText = function() {}; + this.measureTextRecursive = function(ctx) { + var width = this.measureText(ctx); + for (var i = 0; i < this.children.length; i++) { + width += this.children[i].measureTextRecursive(ctx); + } + return width; + }; + this.measureText = function(ctx) { + var customFont = this.parent.style("font-family").getDefinition(); + if (customFont != null) { + var fontSize = this.parent.style("font-size").numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); + var measure = 0; + var text = this.getText(); + if (customFont.isRTL) text = text.split("").reverse().join(""); + var dx = svg.ToNumberArray(this.parent.attribute("dx").value); + for (var i = 0; i < text.length; i++) { + var glyph = this.getGlyph(customFont, text, i); + measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; + if (typeof dx[i] != "undefined" && !isNaN(dx[i])) { + measure += dx[i]; + } + } + return measure; + } + var textToMeasure = svg.compressSpaces(this.getText()); + if (!ctx.measureText) return textToMeasure.length * 10; + ctx.save(); + this.setContext(ctx); + var width = ctx.measureText(textToMeasure).width; + ctx.restore(); + return width; + }; + }; + svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase(); + // tspan + svg.Element.tspan = function(node) { + this.captureTextNodes = true; + this.base = svg.Element.TextElementBase; + this.base(node); + this.text = node.nodeValue || node.text || ""; + this.getText = function() { + return this.text; + }; + }; + svg.Element.tspan.prototype = new svg.Element.TextElementBase(); + // tref + svg.Element.tref = function(node) { + this.base = svg.Element.TextElementBase; + this.base(node); + this.getText = function() { + var element = this.getHrefAttribute().getDefinition(); + if (element != null) return element.children[0].getText(); + }; + }; + svg.Element.tref.prototype = new svg.Element.TextElementBase(); + // a element + svg.Element.a = function(node) { + this.base = svg.Element.TextElementBase; + this.base(node); + this.hasText = true; + for (var i = 0; i < node.childNodes.length; i++) { + if (node.childNodes[i].nodeType != 3) this.hasText = false; + } + // this might contain text + this.text = this.hasText ? node.childNodes[0].nodeValue : ""; + this.getText = function() { + return this.text; + }; + this.baseRenderChildren = this.renderChildren; + this.renderChildren = function(ctx) { + if (this.hasText) { + // render as text element + this.baseRenderChildren(ctx); + var fontSize = new svg.Property("fontSize", svg.Font.Parse(svg.ctx.font).fontSize); + svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.toPixels("y"), this.x + this.measureText(ctx), this.y)); + } else { + // render as temporary group + var g = new svg.Element.g(); + g.children = this.children; + g.parent = this; + g.render(ctx); + } + }; + this.onclick = function() { + window.open(this.getHrefAttribute().value); + }; + this.onmousemove = function() { + svg.ctx.canvas.style.cursor = "pointer"; + }; + }; + svg.Element.a.prototype = new svg.Element.TextElementBase(); + // image element + svg.Element.image = function(node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + var href = this.getHrefAttribute().value; + var isSvg = href.match(/\.svg$/); + svg.Images.push(this); + this.loaded = false; + if (!isSvg) { + this.img = document.createElement("img"); + var self = this; + this.img.onload = function() { + self.loaded = true; + }; + this.img.onerror = function() { + if (typeof console != "undefined") { + console.log('ERROR: image "' + href + '" not found'); + self.loaded = true; + } + }; + this.img.src = href; + } else { + this.img = svg.ajax(href); + this.loaded = true; + } + this.renderChildren = function(ctx) { + var x = this.attribute("x").toPixels("x"); + var y = this.attribute("y").toPixels("y"); + var width = this.attribute("width").toPixels("x"); + var height = this.attribute("height").toPixels("y"); + if (width == 0 || height == 0) return; + ctx.save(); + if (isSvg) { + ctx.drawSvg(this.img, x, y, width, height); + } else { + ctx.translate(x, y); + svg.AspectRatio(ctx, this.attribute("preserveAspectRatio").value, width, this.img.width, height, this.img.height, 0, 0); + ctx.drawImage(this.img, 0, 0); + } + ctx.restore(); + }; + this.getBoundingBox = function() { + var x = this.attribute("x").toPixels("x"); + var y = this.attribute("y").toPixels("y"); + var width = this.attribute("width").toPixels("x"); + var height = this.attribute("height").toPixels("y"); + return new svg.BoundingBox(x, y, x + width, y + height); + }; + }; + svg.Element.image.prototype = new svg.Element.RenderedElementBase(); + // group element + svg.Element.g = function(node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + this.getBoundingBox = function() { + var bb = new svg.BoundingBox(); + for (var i = 0; i < this.children.length; i++) { + bb.addBoundingBox(this.children[i].getBoundingBox()); + } + return bb; + }; + }; + svg.Element.g.prototype = new svg.Element.RenderedElementBase(); + // symbol element + svg.Element.symbol = function(node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + this.baseSetContext = this.setContext; + this.setContext = function(ctx) { + this.baseSetContext(ctx); + // viewbox + if (this.attribute("viewBox").hasValue()) { + var viewBox = svg.ToNumberArray(this.attribute("viewBox").value); + var minX = viewBox[0]; + var minY = viewBox[1]; + width = viewBox[2]; + height = viewBox[3]; + svg.AspectRatio(ctx, this.attribute("preserveAspectRatio").value, this.attribute("width").toPixels("x"), width, this.attribute("height").toPixels("y"), height, minX, minY); + svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); + } + }; + }; + svg.Element.symbol.prototype = new svg.Element.RenderedElementBase(); + // style element + svg.Element.style = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + // text, or spaces then CDATA + var css = ""; + for (var i = 0; i < node.childNodes.length; i++) { + css += node.childNodes[i].nodeValue; + } + css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ""); + // remove comments + css = svg.compressSpaces(css); + // replace whitespace + var cssDefs = css.split("}"); + for (var i = 0; i < cssDefs.length; i++) { + if (svg.trim(cssDefs[i]) != "") { + var cssDef = cssDefs[i].split("{"); + var cssClasses = cssDef[0].split(","); + var cssProps = cssDef[1].split(";"); + for (var j = 0; j < cssClasses.length; j++) { + var cssClass = svg.trim(cssClasses[j]); + if (cssClass != "") { + var props = {}; + for (var k = 0; k < cssProps.length; k++) { + var prop = cssProps[k].indexOf(":"); + var name = cssProps[k].substr(0, prop); + var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop); + if (name != null && value != null) { + props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value)); + } + } + svg.Styles[cssClass] = props; + if (cssClass == "@font-face") { + var fontFamily = props["font-family"].value.replace(/"/g, ""); + var srcs = props["src"].value.split(","); + for (var s = 0; s < srcs.length; s++) { + if (srcs[s].indexOf('format("svg")') > 0) { + var urlStart = srcs[s].indexOf("url"); + var urlEnd = srcs[s].indexOf(")", urlStart); + var url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6); + var doc = svg.parseXml(svg.ajax(url)); + var fonts = doc.getElementsByTagName("font"); + for (var f = 0; f < fonts.length; f++) { + var font = svg.CreateElement(fonts[f]); + svg.Definitions[fontFamily] = font; + } + } + } + } + } + } + } + } + }; + svg.Element.style.prototype = new svg.Element.ElementBase(); + // use element + svg.Element.use = function(node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + this.baseSetContext = this.setContext; + this.setContext = function(ctx) { + this.baseSetContext(ctx); + if (this.attribute("x").hasValue()) ctx.translate(this.attribute("x").toPixels("x"), 0); + if (this.attribute("y").hasValue()) ctx.translate(0, this.attribute("y").toPixels("y")); + }; + this.getDefinition = function() { + var element = this.getHrefAttribute().getDefinition(); + if (this.attribute("width").hasValue()) element.attribute("width", true).value = this.attribute("width").value; + if (this.attribute("height").hasValue()) element.attribute("height", true).value = this.attribute("height").value; + return element; + }; + this.path = function(ctx) { + var element = this.getDefinition(); + if (element != null) element.path(ctx); + }; + this.getBoundingBox = function() { + var element = this.getDefinition(); + if (element != null) return element.getBoundingBox(); + }; + this.renderChildren = function(ctx) { + var element = this.getDefinition(); + if (element != null) { + // temporarily detach from parent and render + var oldParent = element.parent; + element.parent = null; + element.render(ctx); + element.parent = oldParent; + } + }; + }; + svg.Element.use.prototype = new svg.Element.RenderedElementBase(); + // mask element + svg.Element.mask = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.apply = function(ctx, element) { + // render as temp svg + var x = this.attribute("x").toPixels("x"); + var y = this.attribute("y").toPixels("y"); + var width = this.attribute("width").toPixels("x"); + var height = this.attribute("height").toPixels("y"); + if (width == 0 && height == 0) { + var bb = new svg.BoundingBox(); + for (var i = 0; i < this.children.length; i++) { + bb.addBoundingBox(this.children[i].getBoundingBox()); + } + var x = Math.floor(bb.x1); + var y = Math.floor(bb.y1); + var width = Math.floor(bb.width()); + var height = Math.floor(bb.height()); + } + // temporarily remove mask to avoid recursion + var mask = element.attribute("mask").value; + element.attribute("mask").value = ""; + var cMask = document.createElement("canvas"); + cMask.width = x + width; + cMask.height = y + height; + var maskCtx = cMask.getContext("2d"); + this.renderChildren(maskCtx); + var c = document.createElement("canvas"); + c.width = x + width; + c.height = y + height; + var tempCtx = c.getContext("2d"); + element.render(tempCtx); + tempCtx.globalCompositeOperation = "destination-in"; + tempCtx.fillStyle = maskCtx.createPattern(cMask, "no-repeat"); + tempCtx.fillRect(0, 0, x + width, y + height); + ctx.fillStyle = tempCtx.createPattern(c, "no-repeat"); + ctx.fillRect(0, 0, x + width, y + height); + // reassign mask + element.attribute("mask").value = mask; + }; + this.render = function(ctx) {}; + }; + svg.Element.mask.prototype = new svg.Element.ElementBase(); + // clip element + svg.Element.clipPath = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.apply = function(ctx) { + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + if (typeof child.path != "undefined") { + var transform = null; + if (child.attribute("transform").hasValue()) { + transform = new svg.Transform(child.attribute("transform").value); + transform.apply(ctx); + } + child.path(ctx); + ctx.clip(); + if (transform) { + transform.unapply(ctx); + } + } + } + }; + this.render = function(ctx) {}; + }; + svg.Element.clipPath.prototype = new svg.Element.ElementBase(); + // filters + svg.Element.filter = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.apply = function(ctx, element) { + // render as temp svg + var bb = element.getBoundingBox(); + var x = Math.floor(bb.x1); + var y = Math.floor(bb.y1); + var width = Math.floor(bb.width()); + var height = Math.floor(bb.height()); + // temporarily remove filter to avoid recursion + var filter = element.style("filter").value; + element.style("filter").value = ""; + var px = 0, py = 0; + for (var i = 0; i < this.children.length; i++) { + var efd = this.children[i].extraFilterDistance || 0; + px = Math.max(px, efd); + py = Math.max(py, efd); + } + var c = document.createElement("canvas"); + c.width = width + 2 * px; + c.height = height + 2 * py; + var tempCtx = c.getContext("2d"); + tempCtx.translate(-x + px, -y + py); + element.render(tempCtx); + // apply filters + for (var i = 0; i < this.children.length; i++) { + this.children[i].apply(tempCtx, 0, 0, width + 2 * px, height + 2 * py); + } + // render on me + ctx.drawImage(c, 0, 0, width + 2 * px, height + 2 * py, x - px, y - py, width + 2 * px, height + 2 * py); + // reassign filter + element.style("filter", true).value = filter; + }; + this.render = function(ctx) {}; + }; + svg.Element.filter.prototype = new svg.Element.ElementBase(); + svg.Element.feMorphology = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.apply = function(ctx, x, y, width, height) {}; + }; + svg.Element.feMorphology.prototype = new svg.Element.ElementBase(); + svg.Element.feColorMatrix = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + function imGet(img, x, y, width, height, rgba) { + return img[y * width * 4 + x * 4 + rgba]; + } + function imSet(img, x, y, width, height, rgba, val) { + img[y * width * 4 + x * 4 + rgba] = val; + } + this.apply = function(ctx, x, y, width, height) { + // only supporting grayscale for now per Issue 195, need to extend to all matrix + // assuming x==0 && y==0 for now + var srcData = ctx.getImageData(0, 0, width, height); + for (var y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + var r = imGet(srcData.data, x, y, width, height, 0); + var g = imGet(srcData.data, x, y, width, height, 1); + var b = imGet(srcData.data, x, y, width, height, 2); + var gray = (r + g + b) / 3; + imSet(srcData.data, x, y, width, height, 0, gray); + imSet(srcData.data, x, y, width, height, 1, gray); + imSet(srcData.data, x, y, width, height, 2, gray); + } + } + ctx.clearRect(0, 0, width, height); + ctx.putImageData(srcData, 0, 0); + }; + }; + svg.Element.feColorMatrix.prototype = new svg.Element.ElementBase(); + svg.Element.feGaussianBlur = function(node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.blurRadius = Math.floor(this.attribute("stdDeviation").numValue()); + this.extraFilterDistance = this.blurRadius; + this.apply = function(ctx, x, y, width, height) { + if (typeof stackBlurCanvasRGBA == "undefined") { + if (typeof console != "undefined") { + console.log("ERROR: StackBlur.js must be included for blur to work"); + } + return; + } + // StackBlur requires canvas be on document + ctx.canvas.id = svg.UniqueId(); + ctx.canvas.style.display = "none"; + document.body.appendChild(ctx.canvas); + stackBlurCanvasRGBA(ctx.canvas.id, x, y, width, height, this.blurRadius); + document.body.removeChild(ctx.canvas); + }; + }; + svg.Element.feGaussianBlur.prototype = new svg.Element.ElementBase(); + // title element, do nothing + svg.Element.title = function(node) {}; + svg.Element.title.prototype = new svg.Element.ElementBase(); + // desc element, do nothing + svg.Element.desc = function(node) {}; + svg.Element.desc.prototype = new svg.Element.ElementBase(); + svg.Element.MISSING = function(node) { + if (typeof console != "undefined") { + console.log("ERROR: Element '" + node.nodeName + "' not yet implemented."); + } + }; + svg.Element.MISSING.prototype = new svg.Element.ElementBase(); + // element factory + svg.CreateElement = function(node) { + var className = node.nodeName.replace(/^[^:]+:/, ""); + // remove namespace + className = className.replace(/\-/g, ""); + // remove dashes + var e = null; + if (typeof svg.Element[className] != "undefined") { + e = new svg.Element[className](node); + } else { + e = new svg.Element.MISSING(node); + } + e.type = node.nodeName; + return e; + }; + // load from url + svg.load = function(ctx, url) { + svg.loadXml(ctx, svg.ajax(url)); + }; + // load from xml + svg.loadXml = function(ctx, xml) { + svg.loadXmlDoc(ctx, svg.parseXml(xml)); + }; + svg.loadXmlDoc = function(ctx, dom) { + svg.init(ctx); + var mapXY = function(p) { + var e = ctx.canvas; + while (e) { + p.x -= e.offsetLeft; + p.y -= e.offsetTop; + e = e.offsetParent; + } + if (window.scrollX) p.x += window.scrollX; + if (window.scrollY) p.y += window.scrollY; + return p; + }; + // bind mouse + if (svg.opts["ignoreMouse"] != true) { + ctx.canvas.onclick = function(e) { + var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); + svg.Mouse.onclick(p.x, p.y); + }; + ctx.canvas.onmousemove = function(e) { + var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); + svg.Mouse.onmousemove(p.x, p.y); + }; + } + var e = svg.CreateElement(dom.documentElement); + e.root = true; + // render loop + var isFirstRender = true; + var draw = function() { + svg.ViewPort.Clear(); + if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight); + if (svg.opts["ignoreDimensions"] != true) { + // set canvas size + if (e.style("width").hasValue()) { + ctx.canvas.width = e.style("width").toPixels("x"); + ctx.canvas.style.width = ctx.canvas.width + "px"; + } + if (e.style("height").hasValue()) { + ctx.canvas.height = e.style("height").toPixels("y"); + ctx.canvas.style.height = ctx.canvas.height + "px"; + } + } + var cWidth = ctx.canvas.clientWidth || ctx.canvas.width; + var cHeight = ctx.canvas.clientHeight || ctx.canvas.height; + if (svg.opts["ignoreDimensions"] == true && e.style("width").hasValue() && e.style("height").hasValue()) { + cWidth = e.style("width").toPixels("x"); + cHeight = e.style("height").toPixels("y"); + } + svg.ViewPort.SetCurrent(cWidth, cHeight); + if (svg.opts["offsetX"] != null) e.attribute("x", true).value = svg.opts["offsetX"]; + if (svg.opts["offsetY"] != null) e.attribute("y", true).value = svg.opts["offsetY"]; + if (svg.opts["scaleWidth"] != null && svg.opts["scaleHeight"] != null) { + var xRatio = 1, yRatio = 1, viewBox = svg.ToNumberArray(e.attribute("viewBox").value); + if (e.attribute("width").hasValue()) xRatio = e.attribute("width").toPixels("x") / svg.opts["scaleWidth"]; else if (!isNaN(viewBox[2])) xRatio = viewBox[2] / svg.opts["scaleWidth"]; + if (e.attribute("height").hasValue()) yRatio = e.attribute("height").toPixels("y") / svg.opts["scaleHeight"]; else if (!isNaN(viewBox[3])) yRatio = viewBox[3] / svg.opts["scaleHeight"]; + e.attribute("width", true).value = svg.opts["scaleWidth"]; + e.attribute("height", true).value = svg.opts["scaleHeight"]; + e.attribute("viewBox", true).value = "0 0 " + cWidth * xRatio + " " + cHeight * yRatio; + e.attribute("preserveAspectRatio", true).value = "none"; + } + // clear and render + if (svg.opts["ignoreClear"] != true) { + ctx.clearRect(0, 0, cWidth, cHeight); + } + e.render(ctx); + if (isFirstRender) { + isFirstRender = false; + if (typeof svg.opts["renderCallback"] == "function") svg.opts["renderCallback"](dom); + } + }; + var waitingForImages = true; + if (svg.ImagesLoaded()) { + waitingForImages = false; + draw(); + } + svg.intervalID = setInterval(function() { + var needUpdate = false; + if (waitingForImages && svg.ImagesLoaded()) { + waitingForImages = false; + needUpdate = true; + } + // need update from mouse events? + if (svg.opts["ignoreMouse"] != true) { + needUpdate = needUpdate | svg.Mouse.hasEvents(); + } + // need update from animations? + if (svg.opts["ignoreAnimation"] != true) { + for (var i = 0; i < svg.Animations.length; i++) { + needUpdate = needUpdate | svg.Animations[i].update(1e3 / svg.FRAMERATE); + } + } + // need update from redraw? + if (typeof svg.opts["forceRedraw"] == "function") { + if (svg.opts["forceRedraw"]() == true) needUpdate = true; + } + // render if needed + if (needUpdate) { + draw(); + svg.Mouse.runEvents(); + } + }, 1e3 / svg.FRAMERATE); + }; + svg.stop = function() { + if (svg.intervalID) { + clearInterval(svg.intervalID); + } + }; + svg.Mouse = new function() { + this.events = []; + this.hasEvents = function() { + return this.events.length != 0; + }; + this.onclick = function(x, y) { + this.events.push({ + type: "onclick", + x: x, + y: y, + run: function(e) { + if (e.onclick) e.onclick(); + } + }); + }; + this.onmousemove = function(x, y) { + this.events.push({ + type: "onmousemove", + x: x, + y: y, + run: function(e) { + if (e.onmousemove) e.onmousemove(); + } + }); + }; + this.eventElements = []; + this.checkPath = function(element, ctx) { + for (var i = 0; i < this.events.length; i++) { + var e = this.events[i]; + if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element; + } + }; + this.checkBoundingBox = function(element, bb) { + for (var i = 0; i < this.events.length; i++) { + var e = this.events[i]; + if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element; + } + }; + this.runEvents = function() { + svg.ctx.canvas.style.cursor = ""; + for (var i = 0; i < this.events.length; i++) { + var e = this.events[i]; + var element = this.eventElements[i]; + while (element) { + e.run(element); + element = element.parent; + } + } + // done running, clear + this.events = []; + this.eventElements = []; + }; + }(); + return svg; + } + })(); + if (typeof CanvasRenderingContext2D != "undefined") { + CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) { + canvg(this.canvas, s, { + ignoreMouse: true, + ignoreAnimation: true, + ignoreDimensions: true, + ignoreClear: true, + offsetX: dx, + offsetY: dy, + scaleWidth: dw, + scaleHeight: dh + }); + }; + } + return canvg; + } +}; + +/*! + * 输出转换器,提供输出支持 + */ +_p[1] = { + value: function(require) { + var kity = _p.r(34), canvg = _p.r(0); + return kity.createClass("Output", { + constructor: function(formula) { + this.formula = formula; + }, + toJPG: function(cb) { + toImage(this.formula, "image/jpeg", cb); + }, + toPNG: function(cb) { + toImage(this.formula, "image/png", cb); + } + }); + function toImage(formula, type, cb) { + var rectSpace = formula.container.getRenderBox(); + return getBase64DataURL(formula.node.ownerDocument, { + width: rectSpace.width, + height: rectSpace.height, + content: getSVGContent(formula.node) + }, type, cb); + } + function getBase64DataURL(doc, data, type, cb) { + var canvas = null, args = arguments, ctx = null; + if (true) { + drawToCanvas.apply(null, args); + } else { + canvas = getImageCanvas(doc, data.width, data.height, type); + ctx = canvas.getContext("2d"); + var image = new Image(); + image.onload = function() { + try { + ctx.drawImage(image, 0, 0); + cb(canvas.toDataURL(type)); + } catch (e) { + drawToCanvas.apply(null, args); + } + }; + image.src = getSVGDataURL(data.content); + } + } + function getSVGContent(svgNode) { + var tmp = svgNode.ownerDocument.createElement("div"), start = [ '' ]; + tmp.appendChild(svgNode.cloneNode(true)); + return tmp.innerHTML.replace(/]+?>/i, start.join("")).replace(/ /g, ""); + } + function getSVGDataURL(data) { + return "data:image/svg+xml;base64," + window.btoa(unescape(encodeURIComponent(data))); + } + function getImageCanvas(doc, width, height, type) { + var canvas = doc.createElement("canvas"), ctx = canvas.getContext("2d"); + canvas.width = width; + canvas.height = height; + if (type !== "image/png") { + ctx.fillStyle = "white"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + } + return canvas; + } + function drawToCanvas(doc, data, type, cb) { + var canvas = getImageCanvas(doc, data.width, data.height, type); + canvas.style.cssText = "position: absolute; top: 0; left: 100000px; z-index: -1;"; + window.setTimeout(function() { + doc.body.appendChild(canvas); + canvg(canvas, data.content); + doc.body.removeChild(canvas); + cb(canvas.toDataURL(type)); + }, 0); + } + } +}; + +/*! + * 所有字符的列表 + */ +_p[2] = { + value: function() { + return [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "ȷ", "ı", "α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "ς", "σ", "τ", "υ", "φ", "χ", "ψ", "ω", "ϑ", "ϕ", "ϖ", "Ϟ", "Ϝ", "ϵ", "ϱ", "Ϲ", "ℜ", "ℵ", "ℑ", "℧", "ℶ", "ℷ", "ℸ", "ð", "ℏ", "⅁", "ℎ", "∂", "℘", "⅌", "Ⅎ", "∁", "ℓ", "Ⓢ", "(", ")", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω", "Α", "Β", "#", "!", "$", "%", "&", "∠", "′", "‵", "★", "◆", "■", "▲", "▼", "⊤", "⊥", "♣", "♠", "♢", "♡", "∃", "∄", "♭", "♮", "♯", "∀", "∞", "∡", "∇", "¬", "∢", "√", "△", "▽", "∅", "ø", "◇", "◀", "▸", "[", "]", "{", "}", "〈", "〉", "ϰ", ",", ".", "/", ":", ";", "?", "\\", "⋮", "⋯", "⋰", "…", "@", """, "'", "|", "^", "`", "“", "_", "*", "+", "-", "∐", "⊼", "⊻", "◯", "⊡", "⊟", "⊞", "⊠", "•", "∩", "∪", "⋒", "⋓", "⋐", "⋑", "·", "▪", "◦", "⊛", "⊚", "⊖", "⊙", "⊝", "⊕", "⊗", "⊘", "±", "∓", "⋏", "⋎", "†", "‡", "⋄", "÷", "⋇", "∔", "⌭", "⋗", "⋖", "⋉", "⋊", "⋋", "⋌", "⊓", "⊔", "⊑", "⊒", "⊏", "⊐", "⋆", "×", "⊳", "⊲", "⊵", "⊴", "⊎", "∨", "∧", "≀", "<", "=", ">", "≈", "≇", "≍", "≒", "≓", "≊", "∽", "≁", "≂", "≃", "⋍", "≏", "≎", "≗", "≅", "⋞", "⋟", "≐", "≑", "≖", "⪖", "⪕", "≡", "≥", "≤", "≦", "≧", "⩾", "⩽", "≫", "≪", "≨", "≩", "⋘", "⋙", "⪇", "⪈", "⪉", "⪊", "⋧", "⋦", "⪆", "⪅", "⋛", "⋚", "⪋", "⪌", "≷", "≶", "≳", "≲", "⌮", "⌯", "≯", "≱", "≰", "≮", "⌱", "⌰", "⌲", "⌳", "≬", "⊀", "⊁", "⋠", "⋡", "≺", "≻", "≼", "≽", "≾", "≿", "⊂", "⊃", "⊈", "⊉", "⊆", "⊇", "⊊", "⊋", "⪷", "⪸", "⪯", "⪰", "⪹", "⪺", "⪵", "⪶", "⋨", "⋩", "∼", "≜", "↶", "↷", "↺", "↻", "↾", "↿", "⇂", "⇃", "⇄", "⇆", "⇈", "⇊", "⇋", "⇌", "⇍", "⇎", "⇏", "⇐", "⇑", "⇒", "⇓", "⇔", "⇕", "⇚", "⇛", "⇝", "↫", "↬", "↭", "↮", "←", "↑", "→", "↓", "↔", "↕", "↖", "↗", "↘", "↙", "↞", "↠", "↢", "↣", "↰", "↱", "⊢", "⊣", "⊨", "⊩", "⊪", "⊭", "⊯", "⊸", "⊺", "⋔", "⋪", "⋫", "⋬", "⋭", "⌈", "⌉", "⌊", "⌋", "⫋", "⫌", "⫅", "⫆", "∈", "∋", "∝", "∤", "∦", "∴", "∵", "∍", "⋈", "⌢", "⌣", "∣", "∥", "⏐", "⏑", "⏒", "⏓", "⫇", "⫈", "⊮", "⊬", "⫉", "⏔", "⏕", "⏖", "⏗", "⇇", "⇉", "↼", "↽", "⇀", "⇁", "↚", "↛", "⟵", "⟶", "⟷", "⟹", "⟸", "⟺", "≢", "≠", "∉" ]; + } +}; + +/*! + * 字符配置 + */ +_p[3] = { + value: function() { + return { + // 默认字体 + defaultFont: "KF AMS MAIN" + }; + } +}; + +/*! + * 工厂方法,创建兼容各浏览器的text实现 + */ +_p[4] = { + value: function(require) { + var kity = _p.r(34), divNode = document.createElement("div"), NAMESPACE = "http://www.w3.org/XML/1998/namespace"; + function createText(content) { + var text = new kity.Text(); + // Non-IE + if ("innerHTML" in text.node) { + text.node.setAttributeNS(NAMESPACE, "xml:space", "preserve"); + } else { + if (content.indexOf(" ") != -1) { + content = convertContent(content); + } + } + text.setContent(content); + return text; + } + /** + * 构建节点来转换内容 + */ + function convertContent(content) { + divNode.innerHTML = '' + content.replace(/\s/gi, " ") + ""; + return divNode.firstChild.firstChild.textContent; + } + return { + create: function(content) { + return createText(content); + } + }; + } +}; + +/** + * 文本 + */ +_p[5] = { + value: function(require) { + var kity = _p.r(34), FONT_CONF = _p.r(47).font, FontManager = _p.r(25), TextFactory = _p.r(4); + return kity.createClass("Text", { + base: _p.r(46), + constructor: function(content, fontFamily) { + this.callBase(); + this.fontFamily = fontFamily; + this.fontSize = 50; + this.content = content || ""; + // 移除多余的节点 + this.box.remove(); + this.translationContent = this.translation(this.content); + this.contentShape = new kity.Group(); + this.contentNode = this.createContent(); + this.contentShape.addShape(this.contentNode); + this.addShape(this.contentShape); + }, + createContent: function() { + var contentNode = TextFactory.create(this.translationContent); + contentNode.setAttr({ + "font-family": this.fontFamily, + "font-size": 50, + x: 0, + y: FONT_CONF.offset + }); + return contentNode; + }, + setFamily: function(fontFamily) { + this.fontFamily = fontFamily; + this.contentNode.setAttr("font-family", fontFamily); + }, + setFontSize: function(fontSize) { + this.fontSize = fontSize; + this.contentNode.setAttr("font-size", fontSize + "px"); + this.contentNode.setAttr("y", fontSize / 50 * FONT_CONF.offset); + }, + getBaseHeight: function() { + var chars = this.contentShape.getItems(), currentChar = null, index = 0, height = 0; + while (currentChar = chars[index]) { + height = Math.max(height, currentChar.getHeight()); + index++; + } + return height; + }, + translation: function(content) { + var fontFamily = this.fontFamily; + // 首先特殊处理掉两个相连的"`"符号 + return content.replace(/``/g, "“").replace(/\\([a-zA-Z,]+)\\/g, function(match, input) { + if (input === ",") { + return " "; + } + var data = FontManager.getCharacterValue(input, fontFamily); + if (!data) { + return ""; + } + return data; + }); + } + }); + } +}; + +/** + * 定义公式中各种对象的类型 + */ +_p[6] = { + value: function() { + return { + UNKNOWN: -1, + EXP: 0, + COMPOUND_EXP: 1, + OP: 2 + }; + } +}; + +/** + * 定义公式中上下标的类型 + */ +_p[7] = { + value: function() { + return { + SIDE: "side", + FOLLOW: "follow" + }; + } +}; + +/** + * 下标表达式 + */ +_p[8] = { + value: function(require) { + var kity = _p.r(34); + return kity.createClass("SubscriptExpression", { + base: _p.r(17), + constructor: function(operand, subscript) { + this.callBase(operand, null, subscript); + this.setFlag("Subscript"); + } + }); + } +}; + +/** + * 上标表达式 + */ +_p[9] = { + value: function(require) { + var kity = _p.r(34); + return kity.createClass("SuperscriptExpression", { + base: _p.r(17), + constructor: function(operand, superscript) { + this.callBase(operand, superscript, null); + this.setFlag("Superscript"); + } + }); + } +}; + +/** + * 二元操作表达式 + */ +_p[10] = { + value: function(require) { + var kity = _p.r(34); + return kity.createClass("BinaryExpression", { + base: _p.r(19), + constructor: function(firstOperand, lastOperand) { + this.callBase(); + this.setFirstOperand(firstOperand); + this.setLastOperand(lastOperand); + }, + setFirstOperand: function(operand) { + return this.setOperand(operand, 0); + }, + getFirstOperand: function() { + return this.getOperand(0); + }, + setLastOperand: function(operand) { + return this.setOperand(operand, 1); + }, + getLastOperand: function() { + return this.getOperand(1); + } + }); + } +}; + +/** + * 自动增长括号表达式 + */ +_p[11] = { + value: function(require) { + var kity = _p.r(34), BracketsOperator = _p.r(35); + return kity.createClass("BracketsExpression", { + base: _p.r(19), + /** + * 构造函数调用方式: + * new Constructor( 左括号, 右括号, 表达式 ) + * 或者 + * new Constructor( 括号, 表达式 ), 该构造函数转换成上面的构造函数,是: new Constructor( 括号, 括号, 表达式 ) + * @param left 左括号 + * @param right 右括号 + * @param exp 表达式 + */ + constructor: function(left, right, exp) { + this.callBase(); + this.setFlag("Brackets"); + // 参数整理 + if (arguments.length === 2) { + exp = right; + right = left; + } + this.leftSymbol = left; + this.rightSymbol = right; + this.setOperator(new BracketsOperator()); + this.setOperand(exp, 0); + }, + getLeftSymbol: function() { + return this.leftSymbol; + }, + getRightSymbol: function() { + return this.rightSymbol; + } + }); + } +}; + +/** + * 组合表达式 + * 可以组合多个表达式 + */ +_p[12] = { + value: function(require) { + var kity = _p.r(34), FONT_CONF = _p.r(47).font, CombinationOperator = _p.r(36); + return kity.createClass("CombinationExpression", { + base: _p.r(19), + constructor: function() { + this.callBase(); + this.setFlag("Combination"); + this.setOperator(new CombinationOperator()); + kity.Utils.each(arguments, function(operand, index) { + this.setOperand(operand, index); + }, this); + }, + getRenderBox: function(refer) { + var rectBox = this.callBase(refer); + if (this.getOperands().length === 0) { + rectBox.height = FONT_CONF.spaceHeight; + } + return rectBox; + }, + getBaseline: function(refer) { + var maxBaseline = 0, operands = this.getOperands(); + if (operands.length === 0) { + return this.callBase(refer); + } + kity.Utils.each(operands, function(operand) { + maxBaseline = Math.max(operand.getBaseline(refer), maxBaseline); + }); + return maxBaseline; + }, + getMeanline: function(refer) { + var minMeanline = 1e7, operands = this.getOperands(); + if (operands.length === 0) { + return this.callBase(refer); + } + kity.Utils.each(operands, function(operand) { + minMeanline = Math.min(operand.getMeanline(refer), minMeanline); + }); + return minMeanline; + } + }); + } +}; + +/** + * 分数表达式 + */ +_p[13] = { + value: function(require) { + var kity = _p.r(34), FractionOperator = _p.r(38); + return kity.createClass("FractionExpression", { + base: _p.r(10), + constructor: function(upOperand, downOperand) { + this.callBase(upOperand, downOperand); + this.setFlag("Fraction"); + this.setOperator(new FractionOperator()); + }, + /*------- 重写分数结构的baseline和mealine计算方式 */ + getBaseline: function(refer) { + var downOperand = this.getOperand(1), rectBox = downOperand.getRenderBox(refer); + return rectBox.y + downOperand.getBaselineProportion() * rectBox.height; + }, + getMeanline: function(refer) { + var upOperand = this.getOperand(0), rectBox = upOperand.getRenderBox(refer); + return upOperand.getMeanlineProportion() * rectBox.height; + } + }); + } +}; + +/** + * 函数表达式 + */ +_p[14] = { + value: function(require) { + var kity = _p.r(34), FUNC_CONF = _p.r(47).func, FunctionOperator = _p.r(39); + return kity.createClass("FunctionExpression", { + base: _p.r(19), + /** + * function表达式构造函数 + * @param funcName function名称 + * @param expr 函数表达式 + * @param sup 上标 + * @param sub 下标 + */ + constructor: function(funcName, expr, sup, sub) { + this.callBase(); + this.setFlag("Func"); + this.funcName = funcName; + this.setOperator(new FunctionOperator(funcName)); + this.setExpr(expr); + this.setSuperscript(sup); + this.setSubscript(sub); + }, + // 当前函数应用的script位置是否是在侧面 + isSideScript: function() { + return !FUNC_CONF["ud-script"][this.funcName]; + }, + setExpr: function(expr) { + return this.setOperand(expr, 0); + }, + setSuperscript: function(sub) { + return this.setOperand(sub, 1); + }, + setSubscript: function(sub) { + return this.setOperand(sub, 2); + } + }); + } +}; + +/** + * 积分表达式 + */ +_p[15] = { + value: function(require) { + var kity = _p.r(34), IntegrationOperator = _p.r(40), IntegrationExpression = kity.createClass("IntegrationExpression", { + base: _p.r(19), + /** + * 构造积分表达式 + * @param integrand 被积函数 + * @param supOperand 上限 + * @param subOperand 下限 + */ + constructor: function(integrand, superscript, subscript) { + this.callBase(); + this.setFlag("Integration"); + this.setOperator(new IntegrationOperator()); + this.setIntegrand(integrand); + this.setSuperscript(superscript); + this.setSubscript(subscript); + }, + setType: function(type) { + this.getOperator().setType(type); + return this; + }, + resetType: function() { + this.getOperator().resetType(); + return this; + }, + setIntegrand: function(integrand) { + this.setOperand(integrand, 0); + }, + setSuperscript: function(sup) { + this.setOperand(sup, 1); + }, + setSubscript: function(sub) { + this.setOperand(sub, 2); + } + }); + return IntegrationExpression; + } +}; + +/** + * 方根表达式 + */ +_p[16] = { + value: function(require) { + var kity = _p.r(34), RadicalOperator = _p.r(42); + return kity.createClass("RadicalExpression", { + base: _p.r(10), + /** + * 构造开方表达式 + * @param radicand 被开方数 + * @param exponent 指数 + */ + constructor: function(radicand, exponent) { + this.callBase(radicand, exponent); + this.setFlag("Radicand"); + this.setOperator(new RadicalOperator()); + }, + setRadicand: function(operand) { + return this.setFirstOperand(operand); + }, + getRadicand: function() { + return this.getFirstOperand(); + }, + setExponent: function(operand) { + return this.setLastOperand(operand); + }, + getExponent: function() { + return this.getLastOperand(); + } + }); + } +}; + +/** + * 上标表达式 + */ +_p[17] = { + value: function(require) { + var kity = _p.r(34), ScriptOperator = _p.r(43); + return kity.createClass("ScriptExpression", { + base: _p.r(19), + constructor: function(operand, superscript, subscript) { + this.callBase(); + this.setFlag("Script"); + this.setOperator(new ScriptOperator()); + this.setOpd(operand); + this.setSuperscript(superscript); + this.setSubscript(subscript); + }, + setOpd: function(operand) { + this.setOperand(operand, 0); + }, + setSuperscript: function(sup) { + this.setOperand(sup, 1); + }, + setSubscript: function(sub) { + this.setOperand(sub, 2); + } + }); + } +}; + +/** + * 求和表达式 + */ +_p[18] = { + value: function(require) { + var kity = _p.r(34), SummationOperator = _p.r(44); + return kity.createClass("SummationExpression", { + base: _p.r(19), + /** + * 构造求和表达式 + * @param expr 求和表达式 + * @param upOperand 上标 + * @param downOperand 下标 + */ + constructor: function(expr, superscript, subscript) { + this.callBase(); + this.setFlag("Summation"); + this.setOperator(new SummationOperator()); + this.setExpr(expr); + this.setSuperscript(superscript); + this.setSubscript(subscript); + }, + setExpr: function(expr) { + this.setOperand(expr, 0); + }, + setSuperscript: function(sup) { + this.setOperand(sup, 1); + }, + setSubscript: function(sub) { + this.setOperand(sub, 2); + } + }); + } +}; + +/** + * 复合表达式 + * @abstract + */ +_p[19] = { + value: function(require) { + var kity = _p.r(34), GTYPE = _p.r(6), Expression = _p.r(21); + return kity.createClass("CompoundExpression", { + base: _p.r(21), + constructor: function() { + this.callBase(); + this.type = GTYPE.COMPOUND_EXP; + this.operands = []; + this.operator = null; + this.operatorBox = new kity.Group(); + this.operatorBox.setAttr("data-type", "kf-editor-exp-op-box"); + this.operandBox = new kity.Group(); + this.operandBox.setAttr("data-type", "kf-editor-exp-operand-box"); + this.setChildren(0, this.operatorBox); + this.setChildren(1, this.operandBox); + }, + // 操作符存储在第1位置 + setOperator: function(operator) { + if (operator === undefined) { + return this; + } + if (this.operator) { + this.operator.remove(); + } + this.operatorBox.addShape(operator); + this.operator = operator; + this.operator.setParentExpression(this); + // 表达式关联到操作符 + operator.expression = this; + return this; + }, + getOperator: function() { + return this.operator; + }, + // 操作数存储位置是从1开始 + setOperand: function(operand, index, isWrap) { + // 不包装操作数 + if (isWrap === false) { + this.operands[index] = operand; + return this; + } + operand = Expression.wrap(operand); + if (this.operands[index]) { + this.operands[index].remove(); + } + this.operands[index] = operand; + this.operandBox.addShape(operand); + return this; + }, + getOperand: function(index) { + return this.operands[index]; + }, + getOperands: function() { + return this.operands; + }, + addedCall: function() { + this.operator.applyOperand.apply(this.operator, this.operands); + return this; + } + }); + } +}; + +/** + * 空表达式 + * 该表达式主要用途是用于站位 + */ +_p[20] = { + value: function(require) { + var kity = _p.r(34), FONT_CONF = _p.r(47).font, Expression = _p.r(21), EmptyExpression = kity.createClass("EmptyExpression", { + base: Expression, + constructor: function() { + this.callBase(); + this.setFlag("Empty"); + }, + getRenderBox: function() { + return { + width: 0, + height: FONT_CONF.spaceHeight, + x: 0, + y: 0 + }; + } + }); + EmptyExpression.isEmpty = function(target) { + return target instanceof EmptyExpression; + }; + // 注册打包函数 + Expression.registerWrap("empty", function(operand) { + if (operand === null || operand === undefined) { + return new EmptyExpression(); + } + }); + return EmptyExpression; + } +}; + +/** + * 基础表达式, 该类是表达式和操作数的高层抽象 + * @abstract + */ +_p[21] = { + value: function(require) { + var kity = _p.r(34), GTYPE = _p.r(6), FONT_CONF = _p.r(47).font, // 打包函数列表 + WRAP_FN = [], // 注册的打包函数的名称与其在注册器列表中的索引之间的对应关系 + WRAP_FN_INDEX = {}, Expression = kity.createClass("Expression", { + base: _p.r(46), + constructor: function() { + this.callBase(); + this.type = GTYPE.EXP; + // 表达式的上下偏移 + this._offset = { + top: 0, + bottom: 0 + }; + this.children = []; + this.box.fill("transparent").setAttr("data-type", "kf-editor-exp-box"); + this.box.setAttr("data-type", "kf-editor-exp-bg-box"); + this.expContent = new kity.Group(); + this.expContent.setAttr("data-type", "kf-editor-exp-content-box"); + this.addShape(this.expContent); + }, + getChildren: function() { + return this.children; + }, + getChild: function(index) { + return this.children[index] || null; + }, + getTopOffset: function() { + return this._offset.top; + }, + getBottomOffset: function() { + return this._offset.bottom; + }, + getOffset: function() { + return this._offset; + }, + setTopOffset: function(val) { + this._offset.top = val; + }, + setBottomOffset: function(val) { + this._offset.bottom = val; + }, + setOffset: function(top, bottom) { + this._offset.top = top; + this._offset.bottom = bottom; + }, + setFlag: function(flag) { + this.setAttr("data-flag", flag || "Expression"); + }, + setChildren: function(index, exp) { + // 首先清理掉之前的表达式 + if (this.children[index]) { + this.children[index].remove(); + } + this.children[index] = exp; + this.expContent.addShape(exp); + }, + getBaselineProportion: function() { + return FONT_CONF.baselinePosition; + }, + getMeanlineProportion: function() { + return FONT_CONF.meanlinePosition; + }, + getBaseline: function(refer) { + // 上偏移3px + return this.getRenderBox(refer).height * FONT_CONF.baselinePosition - 3; + }, + getMeanline: function(refer) { + // 上偏移1px + return this.getRenderBox(refer).height * FONT_CONF.meanlinePosition - 1; + }, + getAscenderline: function() { + return this.getFixRenderBox().height * FONT_CONF.ascenderPosition; + }, + getDescenderline: function() { + return this.getFixRenderBox().height * FONT_CONF.descenderPosition; + }, + translateElement: function(x, y) { + this.expContent.translate(x, y); + }, + expand: function(width, height) { + var renderBox = this.getFixRenderBox(); + this.setBoxSize(renderBox.width + width, renderBox.height + height); + }, + getBaseWidth: function() { + return this.getWidth(); + }, + getBaseHeight: function() { + return this.getHeight(); + }, + updateBoxSize: function() { + var renderBox = this.expContent.getFixRenderBox(); + this.setBoxSize(renderBox.width, renderBox.height); + }, + getBox: function() { + return this.box; + } + }); + // 表达式自动打包 + kity.Utils.extend(Expression, { + registerWrap: function(name, fn) { + WRAP_FN_INDEX[name] = WRAP_FN.length; + WRAP_FN.push(fn); + }, + revokeWrap: function(name) { + var fn = null; + if (name in WRAP_FN_INDEX) { + fn = WRAP_FN[WRAP_FN_INDEX[name]]; + WRAP_FN[WRAP_FN_INDEX[name]] = null; + delete WRAP_FN_INDEX[name]; + } + return fn; + }, + // 打包函数 + wrap: function(operand) { + var result; + kity.Utils.each(WRAP_FN, function(fn) { + if (!fn) { + return; + } + result = fn(operand); + if (result) { + return false; + } + }); + return result; + } + }); + return Expression; + } +}; + +/** + * Text表达式 + */ +_p[22] = { + value: function(require) { + var Text = _p.r(5), kity = _p.r(34), FONT_CONF = _p.r(3), Expression = _p.r(21), TextExpression = kity.createClass("TextExpression", { + base: _p.r(21), + constructor: function(content, fontFamily) { + this.callBase(); + this.fontFamily = fontFamily || FONT_CONF.defaultFont; + this.setFlag("Text"); + this.content = content + ""; + this.textContent = new Text(this.content, this.fontFamily); + this.setChildren(0, this.textContent); + this.setChildren(1, new kity.Rect(0, 0, 0, 0).fill("transparent")); + }, + setFamily: function(fontFamily) { + this.textContent.setFamily(fontFamily); + }, + setFontSize: function(fontSize) { + this.textContent.setFontSize(fontSize); + }, + addedCall: function() { + var box = this.textContent.getFixRenderBox(); + this.getChild(1).setSize(box.width, box.height); + this.updateBoxSize(); + return this; + } + }); + // 注册文本表达式的打包函数 + Expression.registerWrap("text", function(operand) { + var operandType = typeof operand; + if (operandType === "number" || operandType === "string") { + operand = new TextExpression(operand); + } + return operand; + }); + return TextExpression; + } +}; + +/*! + * 字体信息检测模板,用于检测浏览器的字体信息 + */ +_p[23] = { + value: function() { + return [ '', 'x', "" ]; + } +}; + +/*! + * 字体安装器 + */ +_p[24] = { + value: function(require) { + var kity = _p.r(34), FontManager = _p.r(25), $ = _p.r(33), FONT_CONF = _p.r(47).font, CHAR_LIST = _p.r(2), NODE_LIST = []; + return kity.createClass("FontInstaller", { + constructor: function(doc, resource) { + this.callBase(); + this.resource = resource || "../src/resource/"; + this.doc = doc; + }, + // 挂载字体 + mount: function(callback) { + var fontList = FontManager.getFontList(), count = 0, _self = this; + kity.Utils.each(fontList, function(fontInfo) { + count++; + fontInfo.meta.src = _self.resource + fontInfo.meta.src; + _self.createFontStyle(fontInfo); + preload(_self.doc, fontInfo, function() { + count--; + if (count === 0) { + complete(_self.doc, callback); + } + }); + }); + }, + createFontStyle: function(fontInfo) { + var stylesheet = this.doc.createElement("style"), tpl = '@font-face{\nfont-family: "${fontFamily}";\nsrc: url("${src}");\n}'; + stylesheet.setAttribute("type", "text/css"); + stylesheet.innerHTML = tpl.replace("${fontFamily}", fontInfo.meta.fontFamily).replace("${src}", fontInfo.meta.src); + this.doc.head.appendChild(stylesheet); + } + }); + function preload(doc, fontInfo, callback) { + $.get(fontInfo.meta.src, function(data, state) { + if (state === "success") { + applyFonts(doc, fontInfo); + } + callback(); + }); + } + function complete(doc, callback) { + window.setTimeout(function() { + initFontSystemInfo(doc); + removeTmpNode(); + callback(); + }, 100); + } + function applyFonts(doc, fontInfo) { + var node = document.createElement("div"), fontFamily = fontInfo.meta.fontFamily; + node.style.cssText = "position: absolute; top: -10000px; left: -100000px;"; + node.style.fontFamily = fontFamily; + node.innerHTML = CHAR_LIST.join(""); + doc.body.appendChild(node); + NODE_LIST.push(node); + } + /** + * 计算字体系统信息 + */ + function initFontSystemInfo(doc) { + var tmpNode = doc.createElement("div"); + tmpNode.style.cssText = "position: absolute; top: 0; left: -100000px;"; + tmpNode.innerHTML = _p.r(23).join(""); + doc.body.appendChild(tmpNode); + var rectBox = tmpNode.getElementsByTagName("text")[0].getBBox(); + // text实际占用空间 + FONT_CONF.spaceHeight = rectBox.height; + // text顶部空间 + FONT_CONF.topSpace = -rectBox.y - FONT_CONF.baseline; + FONT_CONF.bottomSpace = FONT_CONF.spaceHeight - FONT_CONF.topSpace - FONT_CONF.baseHeight; + // text偏移值 + FONT_CONF.offset = FONT_CONF.baseline + FONT_CONF.topSpace; + // baseline比例 + FONT_CONF.baselinePosition = (FONT_CONF.topSpace + FONT_CONF.baseline) / FONT_CONF.spaceHeight; + // meanline比例 + FONT_CONF.meanlinePosition = (FONT_CONF.topSpace + FONT_CONF.meanline) / FONT_CONF.spaceHeight; + // 上下延伸性比例 + FONT_CONF.ascenderPosition = FONT_CONF.topSpace / FONT_CONF.spaceHeight; + FONT_CONF.descenderPosition = (FONT_CONF.topSpace + FONT_CONF.baseHeight) / FONT_CONF.spaceHeight; + doc.body.removeChild(tmpNode); + } + function removeTmpNode() { + kity.Utils.each(NODE_LIST, function(node) { + node.parentNode.removeChild(node); + }); + NODE_LIST = []; + } + } +}; + +/*! + * 字体管理器 + */ +_p[25] = { + value: function(require) { + var FONT_LIST = {}, kity = _p.r(34), CONF = _p.r(47).font.list; + // init + (function() { + kity.Utils.each(CONF, function(fontData) { + FONT_LIST[fontData.meta.fontFamily] = fontData; + }); + })(); + return { + getFontList: function() { + return FONT_LIST; + }, + getCharacterValue: function(key, fontFamily) { + if (!FONT_LIST[fontFamily]) { + return null; + } + return FONT_LIST[fontFamily].map[key] || null; + } + }; + } +}; + +/*! + * 双线字体 + */ +_p[26] = { + value: function() { + return { + meta: { + fontFamily: "KF AMS BB", + src: "KF_AMS_BB.woff" + } + }; + } +}; + +/*! + * 手写体 + */ +_p[27] = { + value: function() { + return { + meta: { + fontFamily: "KF AMS CAL", + src: "KF_AMS_CAL.woff" + } + }; + } +}; + +/*! + * 花体 + */ +_p[28] = { + value: function() { + return { + meta: { + fontFamily: "KF AMS FRAK", + src: "KF_AMS_FRAK.woff" + } + }; + } +}; + +/*! + * 字体主文件 + */ +_p[29] = { + value: function() { + return { + meta: { + fontFamily: "KF AMS MAIN", + src: "KF_AMS_MAIN.woff" + }, + map: { + // char + Alpha: "Α", + Beta: "Β", + Gamma: "Γ", + Delta: "Δ", + Epsilon: "Ε", + Zeta: "Ζ", + Eta: "Η", + Theta: "Θ", + Iota: "Ι", + Kappa: "Κ", + Lambda: "Λ", + Mu: "Μ", + Nu: "Ν", + Xi: "Ξ", + Omicron: "Ο", + Pi: "Π", + Rho: "Ρ", + Sigma: "Σ", + Tau: "Τ", + Upsilon: "Υ", + Phi: "Φ", + Chi: "Χ", + Psi: "Ψ", + Omega: "Ω", + alpha: "α", + beta: "β", + gamma: "γ", + delta: "δ", + epsilon: "ε", + zeta: "ζ", + eta: "η", + theta: "θ", + iota: "ι", + kappa: "κ", + lambda: "λ", + mu: "μ", + nu: "ν", + xi: "ξ", + omicron: "ο", + pi: "π", + rho: "ρ", + sigma: "σ", + tau: "τ", + upsilon: "υ", + phi: "φ", + varkappa: "ϰ", + chi: "χ", + psi: "ψ", + omega: "ω", + digamma: "Ϝ", + varepsilon: "ϵ", + varrho: "ϱ", + varphi: "ϕ", + vartheta: "ϑ", + varpi: "ϖ", + varsigma: "Ϲ", + aleph: "ℵ", + beth: "ℶ", + daleth: "ℸ", + gimel: "ℷ", + eth: "ð", + hbar: "ℎ", + hslash: "ℏ", + mho: "℧", + partial: "∂", + wp: "℘", + Game: "⅁", + Bbbk: "⅌", + Finv: "Ⅎ", + Im: "ℑ", + Re: "ℜ", + complement: "∁", + ell: "ℓ", + circledS: "Ⓢ", + imath: "ı", + jmath: "ȷ", + // symbol + doublecap: "⋒", + Cap: "⋒", + doublecup: "⋓", + Cup: "⋓", + ast: "*", + divideontimes: "⋇", + rightthreetimes: "⋌", + leftthreetimes: "⋋", + cdot: "·", + odot: "⊙", + dotplus: "∔", + rtimes: "⋊", + ltimes: "⋉", + centerdot: "▪", + doublebarwedge: "⌭", + setminus: "⒁", + amalg: "∐", + circ: "◦", + bigcirc: "◯", + gtrdot: "⋗", + lessdot: "⋖", + smallsetminus: "⒅", + circledast: "⊛", + circledcirc: "⊚", + sqcap: "⊓", + sqcup: "⊔", + barwedge: "⊼", + circleddash: "⊝", + star: "⋆", + bigtriangledown: "▽", + bigtriangleup: "△", + cup: "∪", + cap: "∩", + times: "×", + mp: "∓", + pm: "±", + triangleleft: "⊲", + triangleright: "⊳", + boxdot: "⊡", + curlyvee: "⋏", + curlywedge: "⋎", + boxminus: "⊟", + boxtimes: "⊠", + ominus: "⊖", + oplus: "⊕", + oslash: "⊘", + otimes: "⊗", + uplus: "⊎", + boxplus: "⊞", + dagger: "†", + ddagger: "‡", + vee: "∨", + lor: "∨", + veebar: "⊻", + bullet: "•", + diamond: "⋄", + wedge: "∧", + land: "∧", + div: "÷", + wr: "≀", + geqq: "≧", + lll: "⋘", + llless: "⋘", + ggg: "⋙", + gggtr: "⋙", + preccurlyeq: "≼", + geqslant: "⩾", + lnapprox: "⪉", + preceq: "⪯", + gg: "≫", + lneq: "⪇", + precnapprox: "⪹", + approx: "≈", + lneqq: "≨", + precneqq: "⪵", + approxeq: "≊", + gnapprox: "⪊", + lnsim: "⋦", + precnsim: "⋨", + asymp: "≍", + gneq: "⪈", + lvertneqq: "⌮", + precsim: "≾", + backsim: "∽", + gneqq: "≩", + ncong: "≇", + risingdotseq: "≓", + backsimeq: "⋍", + gnsim: "⋧", + sim: "∼", + simeq: "≃", + bumpeq: "≏", + gtrapprox: "⪆", + ngeq: "≱", + Bumpeq: "≎", + gtreqless: "⋛", + ngeqq: "⌱", + succ: "≻", + circeq: "≗", + gtreqqless: "⪌", + ngeqslant: "⌳", + succapprox: "⪸", + cong: "≅", + gtrless: "≷", + ngtr: "≯", + succcurlyeq: "≽", + curlyeqprec: "⋞", + gtrsim: "≳", + nleq: "≰", + succeq: "⪰", + curlyeqsucc: "⋟", + gvertneqq: "⌯", + neq: "≠", + ne: "≠", + nequiv: "≢", + nleqq: "⌰", + succnapprox: "⪺", + doteq: "≐", + leq: "≤", + le: "≤", + nleqslant: "⌲", + succneqq: "⪶", + doteqdot: "≑", + Doteq: "≑", + leqq: "≦", + nless: "≮", + succnsim: "⋩", + leqslant: "⩽", + nprec: "⊀", + succsim: "≿", + eqsim: "≂", + lessapprox: "⪅", + npreceq: "⋠", + eqslantgtr: "⪖", + lesseqgtr: "⋚", + nsim: "≁", + eqslantless: "⪕", + lesseqqgtr: "⪋", + nsucc: "⊁", + triangleq: "≜", + eqcirc: "≖", + equiv: "≡", + lessgtr: "≶", + nsucceq: "⋡", + fallingdotseq: "≒", + lesssim: "≲", + prec: "≺", + geq: "≥", + ge: "≥", + ll: "≪", + precapprox: "⪷", + // arrows + uparrow: "↑", + downarrow: "↓", + updownarrow: "↕", + Uparrow: "⇑", + Downarrow: "⇓", + Updownarrow: "⇕", + circlearrowleft: "↺", + circlearrowright: "↻", + curvearrowleft: "↶", + curvearrowright: "↷", + downdownarrows: "⇊", + downharpoonleft: "⇃", + downharpoonright: "⇂", + leftarrow: "←", + gets: "←", + Leftarrow: "⇐", + leftarrowtail: "↢", + leftharpoondown: "↽", + leftharpoonup: "↼", + leftleftarrows: "⇇", + leftrightarrow: "↔", + Leftrightarrow: "⇔", + leftrightarrows: "⇄", + leftrightharpoons: "⇋", + leftrightsquigarrow: "↭", + Lleftarrow: "⇚", + looparrowleft: "↫", + looparrowright: "↬", + multimap: "⊸", + nLeftarrow: "⇍", + nRightarrow: "⇏", + nLeftrightarrow: "⇎", + nearrow: "↗", + nleftarrow: "↚", + nleftrightarrow: "↮", + nrightarrow: "↛", + nwarrow: "↖", + rightarrow: "→", + to: "→", + Rightarrow: "⇒", + rightarrowtail: "↣", + rightharpoondown: "⇁", + rightharpoonup: "⇀", + rightleftarrows: "⇆", + rightleftharpoons: "⇌", + rightrightarrows: "⇉", + rightsquigarrow: "⇝", + Rrightarrow: "⇛", + searrow: "↘", + swarrow: "↙", + twoheadleftarrow: "↞", + twoheadrightarrow: "↠", + upharpoonleft: "↿", + upharpoonright: "↾", + restriction: "↾", + upuparrows: "⇈", + Lsh: "↰", + Rsh: "↱", + longleftarrow: "⟵", + longrightarrow: "⟶", + Longleftarrow: "⟸", + Longrightarrow: "⟹", + implies: "⟹", + longleftrightarrow: "⟷", + Longleftrightarrow: "⟺", + // relation + backepsilon: "∍", + because: "∵", + therefore: "∴", + between: "≬", + blacktriangleleft: "◀", + blacktriangleright: "▸", + dashv: "⊣", + bowtie: "⋈", + frown: "⌢", + "in": "∈", + notin: "∉", + mid: "∣", + parallel: "∥", + models: "⊨", + ni: "∋", + owns: "∋", + nmid: "∤", + nparallel: "∦", + nshortmid: "⏒", + nshortparallel: "⏓", + nsubseteq: "⊈", + nsubseteqq: "⫇", + nsupseteq: "⊉", + nsupseteqq: "⫈", + ntriangleleft: "⋪", + ntrianglelefteq: "⋬", + ntriangleright: "⋫", + ntrianglerighteq: "⋭", + nvdash: "⊬", + nVdash: "⊮", + nvDash: "⊭", + nVDash: "⊯", + perp: "⊥", + pitchfork: "⋔", + propto: "∝", + shortmid: "⏐", + shortparallel: "⏑", + smile: "⌣", + sqsubset: "⊏", + sqsubseteq: "⊑", + sqsupset: "⊐", + sqsupseteq: "⊒", + subset: "⊂", + Subset: "⋐", + subseteq: "⊆", + subseteqq: "⫅", + subsetneq: "⊊", + subsetneqq: "⫋", + supset: "⊃", + Supset: "⋑", + supseteq: "⊇", + supseteqq: "⫆", + supsetneq: "⊋", + supsetneqq: "⫌", + trianglelefteq: "⊴", + trianglerighteq: "⊵", + varpropto: "⫉", + varsubsetneq: "⏔", + varsubsetneqq: "⏖", + varsupsetneq: "⏕", + varsupsetneqq: "⏗", + vdash: "⊢", + Vdash: "⊩", + vDash: "⊨", + Vvdash: "⊪", + vert: "|", + Vert: "ǁ", + "|": "ǁ", + "{": "{", + "}": "}", + backslash: "\\", + langle: "〈", + rangle: "〉", + lceil: "⌈", + rceil: "⌉", + lbrace: "{", + rbrace: "}", + lfloor: "⌊", + rfloor: "⌋", + cdots: "⋯", + ddots: "⋰", + vdots: "⋮", + dots: "…", + ldots: "…", + "#": "#", + bot: "⊥", + angle: "∠", + backprime: "‵", + bigstar: "★", + blacklozenge: "◆", + blacksquare: "■", + blacktriangle: "▲", + blacktriangledown: "▼", + clubsuit: "♣", + diagdown: "⒁", + diagup: "⒂", + diamondsuit: "♢", + emptyset: "ø", + exists: "∃", + flat: "♭", + forall: "∀", + heartsuit: "♡", + infty: "∞", + lozenge: "◇", + measuredangle: "∡", + nabla: "∇", + natural: "♮", + neg: "¬", + lnot: "¬", + nexists: "∄", + prime: "′", + sharp: "♯", + spadesuit: "♠", + sphericalangle: "∢", + surd: "√", + top: "⊤", + varnothing: "∅", + triangle: "△", + triangledown: "▽" + } + }; + } +}; + +/*! + * 罗马字体 + */ +_p[30] = { + value: function() { + return { + meta: { + fontFamily: "KF AMS ROMAN", + src: "KF_AMS_ROMAN.woff" + } + }; + } +}; + +/** + * 公式对象,表达式容器 + */ +_p[31] = { + value: function(require) { + var kity = _p.r(34), GTYPE = _p.r(6), FontManager = _p.r(25), FontInstaller = _p.r(24), DEFAULT_OPTIONS = { + fontsize: 50, + autoresize: true, + padding: [ 0 ] + }, Output = _p.r(1), EXPRESSION_INTERVAL = 10, ExpressionWrap = kity.createClass("ExpressionWrap", { + constructor: function(exp, config) { + this.wrap = new kity.Group(); + this.bg = new kity.Rect(0, 0, 0, 0).fill("transparent"); + this.exp = exp; + this.config = config; + this.wrap.setAttr("data-type", "kf-exp-wrap"); + this.bg.setAttr("data-type", "kf-exp-wrap-bg"); + this.wrap.addShape(this.bg); + this.wrap.addShape(this.exp); + }, + getWrapShape: function() { + return this.wrap; + }, + getExpression: function() { + return this.exp; + }, + getBackground: function() { + return this.bg; + }, + resize: function() { + var padding = this.config.padding, expBox = this.exp.getFixRenderBox(); + if (padding.length === 1) { + padding[1] = padding[0]; + } + this.bg.setSize(padding[1] * 2 + expBox.width, padding[0] * 2 + expBox.height); + this.exp.translate(padding[1], padding[0]); + } + }), Formula = kity.createClass("Formula", { + base: _p.r(32), + constructor: function(container, config) { + this.callBase(container); + this.expressions = []; + this.fontInstaller = new FontInstaller(this); + this.config = kity.Utils.extend({}, DEFAULT_OPTIONS, config); + this.initEnvironment(); + this.initInnerFont(); + }, + getContentContainer: function() { + return this.container; + }, + initEnvironment: function() { + this.zoom = this.config.fontsize / 50; + if ("width" in this.config) { + this.setWidth(this.config.width); + } + if ("height" in this.config) { + this.setHeight(this.config.height); + } + this.node.setAttribute("font-size", DEFAULT_OPTIONS.fontsize); + }, + initInnerFont: function() { + var fontList = FontManager.getFontList(), _self = this; + kity.Utils.each(fontList, function(fontInfo) { + createFontStyle(fontInfo); + }); + function createFontStyle(fontInfo) { + var stylesheet = _self.doc.createElement("style"), tpl = '@font-face{font-family: "${fontFamily}";font-style: normal;src: url("${src}") format("woff");}'; + stylesheet.setAttribute("type", "text/css"); + stylesheet.innerHTML = tpl.replace("${fontFamily}", fontInfo.meta.fontFamily).replace("${src}", fontInfo.meta.src); + _self.resourceNode.appendChild(stylesheet); + } + }, + insertExpression: function(expression, index) { + var expWrap = this.wrap(expression); + // clear zoom + this.container.clearTransform(); + this.expressions.splice(index, 0, expWrap.getWrapShape()); + this.addShape(expWrap.getWrapShape()); + notifyExpression.call(this, expWrap.getExpression()); + expWrap.resize(); + correctOffset.call(this); + this.resetZoom(); + this.config.autoresize && this.resize(); + }, + appendExpression: function(expression) { + this.insertExpression(expression, this.expressions.length); + }, + resize: function() { + var renderBox = this.container.getRenderBox("paper"); + this.node.setAttribute("width", renderBox.width); + this.node.setAttribute("height", renderBox.height); + }, + resetZoom: function() { + var zoomLevel = this.zoom / this.getBaseZoom(); + if (zoomLevel !== 0) { + this.container.scale(zoomLevel); + } + }, + wrap: function(exp) { + return new ExpressionWrap(exp, this.config); + }, + clear: function() { + this.callBase(); + this.expressions = []; + }, + clearExpressions: function() { + kity.Utils.each(this.expressions, function(exp) { + exp.remove(); + }); + this.expressions = []; + }, + toJPG: function(cb) { + new Output(this).toJPG(cb); + }, + toPNG: function(cb) { + new Output(this).toPNG(cb); + } + }); + kity.Utils.extend(Formula, { + registerFont: function(fontData) { + FontManager.registerFont(fontData); + } + }); + // 调整表达式之间的偏移 + function correctOffset() { + var exprOffset = 0; + kity.Utils.each(this.expressions, function(expr) { + var box = null; + if (!expr) { + return; + } + expr.setMatrix(new kity.Matrix(1, 0, 0, 1, 0, 0)); + box = expr.getFixRenderBox(); + expr.translate(0 - box.x, exprOffset); + exprOffset += box.height + EXPRESSION_INTERVAL; + }); + return this; + } + // 通知表达式已接入到paper + function notifyExpression(expression) { + var len = 0; + if (!expression) { + return; + } + if (expression.getType() === GTYPE.EXP) { + for (var i = 0, len = expression.getChildren().length; i < len; i++) { + notifyExpression(expression.getChild(i)); + } + } else if (expression.getType() === GTYPE.COMPOUND_EXP) { + // 操作数处理 + for (var i = 0, len = expression.getOperands().length; i < len; i++) { + notifyExpression(expression.getOperand(i)); + } + // 处理操作符 + notifyExpression(expression.getOperator()); + } + expression.addedCall && expression.addedCall(); + } + return Formula; + } +}; + +/** + * 公式专用paper + */ +_p[32] = { + value: function(require) { + var kity = _p.r(34); + return kity.createClass("FPaper", { + base: kity.Paper, + constructor: function(container) { + this.callBase(container); + this.doc = container.ownerDocument; + this.container = new kity.Group(); + this.container.setAttr("data-type", "kf-container"); + this.background = new kity.Group(); + this.background.setAttr("data-type", "kf-bg"); + this.baseZoom = 1; + this.zoom = 1; + this.base("addShape", this.background); + this.base("addShape", this.container); + }, + getZoom: function() { + return this.zoom; + }, + getBaseZoom: function() { + return this.baseZoom; + }, + addShape: function(shape, pos) { + return this.container.addShape(shape, pos); + }, + getBackground: function() { + return this.background; + }, + removeShape: function(pos) { + return this.container.removeShape(pos); + }, + clear: function() { + return this.container.clear(); + } + }); + } +}; + +/** + * jquery + */ +_p[33] = { + value: function() { + if (!window.jQuery) { + throw new Error("Missing jQuery"); + } + return window.jQuery; + } +}; + +/** + * kity库封包 + */ +_p[34] = { + value: function() { + if (!window.kity) { + throw new Error("Missing Kity Graphic Lib"); + } + return window.kity; + } +}; + +/** + * 小括号操作符:() + */ +_p[35] = { + value: function(require) { + var kity = _p.r(34), Text = _p.r(5); + return kity.createClass("BracketsOperator", { + base: _p.r(41), + constructor: function() { + this.callBase("Brackets"); + }, + applyOperand: function(exp) { + generate.call(this, exp); + } + }); + function generate(exp) { + var left = this.getParentExpression().getLeftSymbol(), right = this.getParentExpression().getRightSymbol(), fontSize = exp.getFixRenderBox().height, group = new kity.Group(), offset = 0, leftOp = new Text(left, "KF AMS MAIN").fill("black"), rightOp = new Text(right, "KF AMS MAIN").fill("black"); + leftOp.setFontSize(fontSize); + rightOp.setFontSize(fontSize); + this.addOperatorShape(group.addShape(leftOp).addShape(rightOp)); + offset += leftOp.getFixRenderBox().width; + exp.translate(offset, 0); + offset += exp.getFixRenderBox().width; + rightOp.translate(offset, 0); + } + } +}; + +/** + * 组合操作符 + * 操作多个表达式组合在一起 + */ +_p[36] = { + value: function(require) { + var kity = _p.r(34); + return kity.createClass("CombinationOperator", { + base: _p.r(41), + constructor: function() { + this.callBase("Combination"); + }, + applyOperand: function() { + // 偏移量 + var offsetX = 0, // 操作数 + operands = arguments, // 操作对象最大高度 + maxHeight = 0, // 垂直距离最大偏移 + maxOffsetTop = 0, maxOffsetBottom = 0, cached = [], // 偏移集合 + offsets = []; + kity.Utils.each(operands, function(operand) { + var box = operand.getFixRenderBox(), offsetY = operand.getOffset(); + box.height -= offsetY.top + offsetY.bottom; + cached.push(box); + offsets.push(offsetY); + maxOffsetTop = Math.max(offsetY.top, maxOffsetTop); + maxOffsetBottom = Math.max(offsetY.bottom, maxOffsetBottom); + maxHeight = Math.max(box.height, maxHeight); + }); + kity.Utils.each(operands, function(operand, index) { + var box = cached[index]; + operand.translate(offsetX - box.x, (maxHeight - (box.y + box.height)) / 2 + maxOffsetBottom - offsets[index].bottom); + offsetX += box.width; + }); + this.parentExpression.setOffset(maxOffsetTop, maxOffsetBottom); + this.parentExpression.updateBoxSize(); + } + }); + } +}; + +/*! + * 上下标控制器 + */ +_p[37] = { + value: function(require) { + var kity = _p.r(34), EmptyExpression = _p.r(20), defaultOptions = { + subOffset: 0, + supOffset: 0, + // 上下标的默认缩放值 + zoom: .66 + }; + return kity.createClass("ScriptController", { + constructor: function(opObj, target, sup, sub, options) { + this.observer = opObj.getParentExpression(); + this.target = target; + this.sup = sup; + this.sub = sub; + this.options = kity.Utils.extend({}, defaultOptions, options); + }, + // 上下标记 + applyUpDown: function() { + var target = this.target, sup = this.sup, sub = this.sub, options = this.options; + sup.scale(options.zoom); + sub.scale(options.zoom); + var targetBox = target.getFixRenderBox(); + if (EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { + return { + width: targetBox.width, + height: targetBox.height, + top: 0, + bottom: 0 + }; + } else { + // 上标 + if (!EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { + return this.applyUp(target, sup); + } else if (EmptyExpression.isEmpty(sup) && !EmptyExpression.isEmpty(sub)) { + return this.applyDown(target, sub); + } else { + return this.applyUpDownScript(target, sup, sub); + } + } + }, + /** + * 返回应用上下标后的空间占用情况,其中的key各自的意义是: + * top: 上空间偏移 + * bottom: 下空间偏移 + * width: 当前整个图形的实际占用空间的width + * height: 当前整个图形的实际占用空间的height + * @returns {*} + */ + applySide: function() { + var target = this.target, sup = this.sup, sub = this.sub; + if (EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { + var targetRectBox = target.getRenderBox(this.observer); + return { + width: targetRectBox.width, + height: targetRectBox.height, + top: 0, + bottom: 0 + }; + } else { + // 下标处理 + if (EmptyExpression.isEmpty(sup) && !EmptyExpression.isEmpty(sub)) { + return this.applySideSub(target, sub); + } else if (!EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { + return this.applySideSuper(target, sup); + } else { + return this.applySideScript(target, sup, sub); + } + } + }, + applySideSuper: function(target, sup) { + sup.scale(this.options.zoom); + var targetRectBox = target.getRenderBox(this.observer), supRectBox = sup.getRenderBox(this.observer), targetMeanline = target.getMeanline(this.observer), supBaseline = sup.getBaseline(this.observer), positionline = targetMeanline, diff = supBaseline - positionline, space = { + top: 0, + bottom: 0, + width: targetRectBox.width + supRectBox.width, + height: targetRectBox.height + }; + sup.translate(targetRectBox.width, 0); + if (this.options.supOffset) { + sup.translate(this.options.supOffset, 0); + } + if (diff > 0) { + target.translate(0, diff); + space.bottom = diff; + space.height += diff; + } else { + sup.translate(0, -diff); + } + return space; + }, + applySideSub: function(target, sub) { + sub.scale(this.options.zoom); + var targetRectBox = target.getRenderBox(this.observer), subRectBox = sub.getRenderBox(this.observer), subOffset = sub.getOffset(), targetBaseline = target.getBaseline(this.observer), // 下标定位线 + subPosition = (subRectBox.height + subOffset.top + subOffset.bottom) / 2, diff = targetRectBox.height - targetBaseline - subPosition, space = { + top: 0, + bottom: 0, + width: targetRectBox.width + subRectBox.width, + height: targetRectBox.height + }; + // 定位下标位置 + sub.translate(targetRectBox.width, subOffset.top + targetBaseline - subPosition); + if (this.options.subOffset) { + sub.translate(this.options.subOffset, 0); + } + if (diff < 0) { + space.top = -diff; + space.height -= diff; + } + return space; + }, + applySideScript: function(target, sup, sub) { + sup.scale(this.options.zoom); + sub.scale(this.options.zoom); + var targetRectBox = target.getRenderBox(this.observer), subRectBox = sub.getRenderBox(this.observer), supRectBox = sup.getRenderBox(this.observer), targetMeanline = target.getMeanline(this.observer), targetBaseline = target.getBaseline(this.observer), supBaseline = sup.getBaseline(this.observer), // 上下标都存在时, 下标的定位以上伸线为准 + subAscenderline = sub.getAscenderline(this.observer), supPosition = targetMeanline, subPosition = targetMeanline + (targetBaseline - targetMeanline) * 2 / 3, topDiff = supPosition - supBaseline, bottomDiff = targetRectBox.height - subPosition - (subRectBox.height - subAscenderline), space = { + top: 0, + bottom: 0, + width: targetRectBox.width + Math.max(subRectBox.width, supRectBox.width), + height: targetRectBox.height + }; + sup.translate(targetRectBox.width, topDiff); + sub.translate(targetRectBox.width, subPosition - subAscenderline); + if (this.options.supOffset) { + sup.translate(this.options.supOffset, 0); + } + if (this.options.subOffset) { + sub.translate(this.options.subOffset, 0); + } + // 定位纠正 + if (topDiff > 0) { + if (bottomDiff < 0) { + targetRectBox.height -= bottomDiff; + space.top = -bottomDiff; + } + } else { + target.translate(0, -topDiff); + sup.translate(0, -topDiff); + sub.translate(0, -topDiff); + space.height -= topDiff; + if (bottomDiff > 0) { + space.bottom = -topDiff; + } else { + space.height -= bottomDiff; + // 比较上下偏移, 获取正确的偏移值 + topDiff = -topDiff; + bottomDiff = -bottomDiff; + if (topDiff > bottomDiff) { + space.bottom = topDiff - bottomDiff; + } else { + space.top = bottomDiff - topDiff; + } + } + } + return space; + }, + applyUp: function(target, sup) { + var supBox = sup.getFixRenderBox(), targetBox = target.getFixRenderBox(), space = { + width: Math.max(targetBox.width, supBox.width), + height: supBox.height + targetBox.height, + top: 0, + bottom: supBox.height + }; + sup.translate((space.width - supBox.width) / 2, 0); + target.translate((space.width - targetBox.width) / 2, supBox.height); + return space; + }, + applyDown: function(target, sub) { + var subBox = sub.getFixRenderBox(), targetBox = target.getFixRenderBox(), space = { + width: Math.max(targetBox.width, subBox.width), + height: subBox.height + targetBox.height, + top: subBox.height, + bottom: 0 + }; + sub.translate((space.width - subBox.width) / 2, targetBox.height); + target.translate((space.width - targetBox.width) / 2, 0); + return space; + }, + applyUpDownScript: function(target, sup, sub) { + var supBox = sup.getFixRenderBox(), subBox = sub.getFixRenderBox(), targetBox = target.getFixRenderBox(), space = { + width: Math.max(targetBox.width, supBox.width, subBox.width), + height: supBox.height + subBox.height + targetBox.height, + top: 0, + bottom: 0 + }; + sup.translate((space.width - supBox.width) / 2, 0); + target.translate((space.width - targetBox.width) / 2, supBox.height); + sub.translate((space.width - subBox.width) / 2, supBox.height + targetBox.height); + return space; + } + }); + } +}; + +/** + * 分数操作符 + */ +_p[38] = { + value: function(require) { + var kity = _p.r(34), ZOOM = _p.r(47).zoom; + return kity.createClass("FractionOperator", { + base: _p.r(41), + constructor: function() { + this.callBase("Fraction"); + }, + applyOperand: function(upOperand, downOperand) { + upOperand.scale(ZOOM); + downOperand.scale(ZOOM); + var upWidth = Math.ceil(upOperand.getWidth()), downWidth = Math.ceil(downOperand.getWidth()), upHeight = Math.ceil(upOperand.getHeight()), downHeight = Math.ceil(downOperand.getHeight()), // 分数线overflow值 + overflow = 3, // 整体padding + padding = 1, maxWidth = Math.max(upWidth, downWidth), maxHeight = Math.max(upHeight, downHeight), operatorShape = generateOperator(maxWidth, overflow); + this.addOperatorShape(operatorShape); + upOperand.translate((maxWidth - upWidth) / 2 + overflow, 0); + operatorShape.translate(0, upHeight + 1); + // 下部不需要偏移 + downOperand.translate((maxWidth - downWidth) / 2 + overflow, upHeight + operatorShape.getHeight() + 1 * 2); + this.parentExpression.setOffset(maxHeight - upHeight, maxHeight - downHeight); + this.parentExpression.expand(padding * 2, padding * 2); + this.parentExpression.translateElement(padding, padding); + } + }); + function generateOperator(width, overflow) { + return new kity.Rect(width + overflow * 2, 1).fill("black"); + } + } +}; + +/** + * 函数操作符 + */ +_p[39] = { + value: function(require) { + var kity = _p.r(34), Text = _p.r(5), ScriptController = _p.r(37); + return kity.createClass("FunctionOperator", { + base: _p.r(41), + constructor: function(funcName) { + this.callBase("Function: " + funcName); + this.funcName = funcName; + }, + /* + * 积分操作符应用操作数 + * @param expr 函数表达式 + * @param sup 上限 + * @param sub 下限 + */ + applyOperand: function(expr, sup, sub) { + var opShape = generateOperator.call(this), expBox = expr.getFixRenderBox(), scriptHanlder = this.parentExpression.isSideScript() ? "applySide" : "applyUpDown", space = new ScriptController(this, opShape, sup, sub, { + zoom: .5 + })[scriptHanlder](), padding = 5, diff = (space.height + space.top + space.bottom - expBox.height) / 2; + // 应用偏移, 使图形在正确的位置上 + opShape.translate(0, space.top); + sup.translate(0, space.top); + sub.translate(0, space.top); + if (diff >= 0) { + expr.translate(space.width + padding, diff); + } else { + diff = -diff; + opShape.translate(0, diff); + sup.translate(0, diff); + sub.translate(0, diff); + expr.translate(space.width + padding, 0); + } + // 只扩展左边, 不扩展右边, 所以padding不 *2 + this.parentExpression.expand(padding, padding * 2); + this.parentExpression.translateElement(padding, padding); + } + }); + /* 返回操作符对象 */ + function generateOperator() { + var opShape = new Text(this.funcName, "KF AMS ROMAN"); + this.addOperatorShape(opShape); + // 为操作符图形创建baseline和meanline方法 + opShape.getBaseline = function() { + return opShape.getFixRenderBox().height; + }; + opShape.getMeanline = function() { + return 0; + }; + return opShape; + } + } +}; + +/** + * 积分操作符:∫ + */ +_p[40] = { + value: function(require) { + var kity = _p.r(34), ScriptController = _p.r(37); + return kity.createClass("IntegrationOperator", { + base: _p.r(41), + constructor: function(type) { + this.callBase("Integration"); + // 默认是普通单重积分 + this.opType = type || 1; + }, + setType: function(type) { + this.opType = type | 0; + }, + // 重置类型 + resetType: function() { + this.opType = 1; + }, + applyOperand: function(exp, sup, sub) { + var opShape = this.getOperatorShape(), padding = 3, expBox = exp.getFixRenderBox(), space = new ScriptController(this, opShape, sup, sub, { + supOffset: 3, + subOffset: -15 + }).applySide(), diff = (space.height + space.top - expBox.height) / 2; + opShape.translate(0, space.top); + sup.translate(0, space.top); + sub.translate(0, space.top); + if (diff >= 0) { + exp.translate(space.width + padding, diff); + } else { + diff = -diff; + opShape.translate(0, diff); + sup.translate(0, diff); + sub.translate(0, diff); + exp.translate(space.width + padding, 0); + } + this.parentExpression.expand(padding, padding * 2); + this.parentExpression.translateElement(padding, padding); + }, + getOperatorShape: function() { + var pathData = "M1.318,48.226c0,0,0.044,0.066,0.134,0.134c0.292,0.313,0.626,0.447,1.006,0.447c0.246,0.022,0.358-0.044,0.604-0.268 c0.782-0.782,1.497-2.838,2.324-6.727c0.514-2.369,0.938-4.693,1.586-8.448C8.559,24.068,9.9,17.878,11.978,9.52 c0.917-3.553,1.922-7.576,3.866-8.983C16.247,0.246,16.739,0,17.274,0c1.564,0,2.503,1.162,2.592,2.57 c0,0.827-0.424,1.386-1.273,1.386c-0.671,0-1.229-0.514-1.229-1.251c0-0.805,0.514-1.095,1.185-1.274 c0.022,0-0.291-0.29-0.425-0.379c-0.201-0.134-0.514-0.224-0.737-0.224c-0.067,0-0.112,0-0.157,0.022 c-0.469,0.134-0.983,0.939-1.453,2.234c-0.537,1.475-0.961,3.174-1.631,6.548c-0.424,2.101-0.693,3.464-1.229,6.727 c-1.608,9.185-2.949,15.487-5.006,23.756c-0.514,2.034-0.849,3.24-1.207,4.335c-0.559,1.698-1.162,2.95-1.811,3.799 c-0.514,0.715-1.385,1.408-2.436,1.408c-1.363,0-2.391-1.185-2.458-2.592c0-0.804,0.447-1.363,1.273-1.363 c0.671,0,1.229,0.514,1.229,1.251C2.503,47.757,1.989,48.047,1.318,48.226z", group = new kity.Group(), opGroup = new kity.Group(), opShape = new kity.Path(pathData).fill("black"), opBox = new kity.Rect(0, 0, 0, 0).fill("transparent"), tmpShape = null; + opGroup.addShape(opShape); + group.addShape(opBox); + group.addShape(opGroup); + this.addOperatorShape(group); + for (var i = 1; i < this.opType; i++) { + tmpShape = new kity.Use(opShape).translate(opShape.getWidth() / 2 * i, 0); + opGroup.addShape(tmpShape); + } + opGroup.scale(1.6); + tmpShape = null; + // 为操作符图形创建baseline和meanline方法 + group.getBaseline = function() { + return opGroup.getFixRenderBox().height; + }; + group.getMeanline = function() { + return 10; + }; + return group; + } + }); + } +}; + +/** + * 操作符抽象类 + * @abstract + */ +_p[41] = { + value: function(require) { + var kity = _p.r(34), GTYPE = _p.r(6); + return kity.createClass("Operator", { + base: _p.r(46), + constructor: function(operatorName) { + this.callBase(); + this.type = GTYPE.OP; + // 该操作符所属的表达式 + this.parentExpression = null; + // 操作符名称 + this.operatorName = operatorName; + // 操作符图形 + this.operatorShape = new kity.Group(); + this.addShape(this.operatorShape); + }, + applyOperand: function() { + throw new Error("applyOperand is abstract"); + }, + setParentExpression: function(exp) { + this.parentExpression = exp; + }, + getParentExpression: function() { + return this.parentExpression; + }, + clearParentExpression: function() { + this.parentExpression = null; + }, + // 提供给具体实现类附加其绘制的操作符图形的接口 + addOperatorShape: function(shpae) { + return this.operatorShape.addShape(shpae); + }, + getOperatorShape: function() { + return this.operatorShape; + } + }); + } +}; + +/** + * 开方操作符 + */ +_p[42] = { + value: function(require) { + var kity = _p.r(34), // 符号图形属性 + // 线条宽度 + SHAPE_DATA_WIDTH = 1, // 计算公式 + radians = 2 * Math.PI / 360, sin15 = Math.sin(15 * radians), cos15 = Math.cos(15 * radians), tan15 = Math.tan(15 * radians); + return kity.createClass("RadicalOperator", { + base: _p.r(41), + constructor: function() { + this.callBase("Radical"); + }, + applyOperand: function(radicand, exponent) { + generateOperator.call(this, radicand, exponent); + } + }); + // 根据给定的操作数生成操作符的pathData + // radicand 表示被开方数 + // exponent 表示指数 + function generateOperator(radicand, exponent) { + var decoration = generateDecoration(radicand), vLine = generateVLine(radicand), padding = 5, hLine = generateHLine(radicand); + this.addOperatorShape(decoration); + this.addOperatorShape(vLine); + this.addOperatorShape(hLine); + adjustmentPosition.call(this, mergeShape(decoration, vLine, hLine), this.operatorShape, radicand, exponent); + this.parentExpression.expand(0, padding * 2); + this.parentExpression.translateElement(0, padding); + } + // 生成根号中的左边装饰部分 + function generateDecoration(radicand) { + var shape = new kity.Path(), // 命名为a以便于精简表达式 + a = SHAPE_DATA_WIDTH, h = radicand.getHeight() / 3, drawer = shape.getDrawer(); + // 根号尾部左上角开始 + drawer.moveTo(0, cos15 * a * 6); + drawer.lineBy(sin15 * a, cos15 * a); + drawer.lineBy(cos15 * a * 3, -sin15 * a * 3); + drawer.lineBy(tan15 * h, h); + drawer.lineBy(sin15 * a * 3, -cos15 * a * 3); + drawer.lineBy(-sin15 * h, -h); + drawer.close(); + return shape.fill("black"); + } + // 根据操作数生成根号的竖直线部分 + function generateVLine(operand) { + var shape = new kity.Path(), // * 0.9 是为了在视觉上使斜线部分不至于太高 + h = operand.getHeight() * .9, drawer = shape.getDrawer(); + drawer.moveTo(tan15 * h, 0); + drawer.lineTo(0, h); + drawer.lineBy(sin15 * SHAPE_DATA_WIDTH * 3, cos15 * SHAPE_DATA_WIDTH * 3); + drawer.lineBy(tan15 * h + sin15 * SHAPE_DATA_WIDTH * 3, -(h + 3 * SHAPE_DATA_WIDTH * cos15)); + drawer.close(); + return shape.fill("black"); + } + // 根据操作数生成根号的水平线部分 + function generateHLine(operand) { + // 表达式宽度 + var w = operand.getWidth() + 2 * SHAPE_DATA_WIDTH; + return new kity.Rect(w, 2 * SHAPE_DATA_WIDTH).fill("black"); + } + // 合并根号的各个部分, 并返回根号的关键点位置数据 + function mergeShape(decoration, vLine, hLine) { + var decoBox = decoration.getFixRenderBox(), vLineBox = vLine.getFixRenderBox(); + vLine.translate(decoBox.width - sin15 * SHAPE_DATA_WIDTH * 3, 0); + decoration.translate(0, vLineBox.height - decoBox.height); + vLineBox = vLine.getFixRenderBox(); + hLine.translate(vLineBox.x + vLineBox.width - SHAPE_DATA_WIDTH / cos15, 0); + // 返回关键点数据 + return { + x: vLineBox.x + vLineBox.width - SHAPE_DATA_WIDTH / cos15, + y: 0 + }; + } + // 调整整个根号表达式的各个部分: 位置、操作符、被开方数、指数 + function adjustmentPosition(position, operator, radicand, exponent) { + var exponentBox = null, opOffset = { + x: 0, + y: 0 + }, opBox = operator.getFixRenderBox(); + exponent.scale(.66); + exponentBox = exponent.getFixRenderBox(); + if (exponentBox.width > 0 && exponentBox.height > 0) { + opOffset.y = exponentBox.height - opBox.height / 2; + // 指数不超出根号, 则移动指数 + if (opOffset.y < 0) { + exponent.translate(0, -opOffset.y); + opOffset.y = 0; + } + opOffset.x = exponentBox.width + opBox.height / 2 * tan15 - position.x; + } + operator.translate(opOffset.x, opOffset.y); + radicand.translate(opOffset.x + position.x + SHAPE_DATA_WIDTH, opOffset.y + 2 * SHAPE_DATA_WIDTH); + } + } +}; + +/** + * 上下标操作符 + */ +_p[43] = { + value: function(require) { + var kity = _p.r(34), ScriptController = _p.r(37); + return kity.createClass("ScriptOperator", { + base: _p.r(41), + constructor: function(operatorName) { + this.callBase(operatorName || "Script"); + }, + applyOperand: function(operand, sup, sub) { + var padding = 1, parent = this.parentExpression, space = new ScriptController(this, operand, sup, sub).applySide(); + this.getOperatorShape(); + space && parent.setOffset(space.top, space.bottom); + parent.expand(4, padding * 2); + parent.translateElement(2, padding); + } + }); + } +}; + +/** + * 求和操作符:∑ + */ +_p[44] = { + value: function(require) { + var kity = _p.r(34), ScriptController = _p.r(37); + return kity.createClass("SummationOperator", { + base: _p.r(41), + constructor: function() { + this.callBase("Summation"); + this.displayType = "equation"; + }, + applyOperand: function(expr, sup, sub) { + var opShape = this.getOperatorShape(), expBox = expr.getFixRenderBox(), padding = 0, space = new ScriptController(this, opShape, sup, sub).applyUpDown(), diff = (space.height - space.top - space.bottom - expBox.height) / 2; + if (diff >= 0) { + expr.translate(space.width + padding, diff + space.bottom); + } else { + diff = -diff; + opShape.translate(0, diff); + sup.translate(0, diff); + sub.translate(0, diff); + expr.translate(space.width + padding, space.bottom); + } + this.parentExpression.setOffset(space.top, space.bottom); + this.parentExpression.expand(padding, padding * 2); + this.parentExpression.translateElement(padding, padding); + }, + getOperatorShape: function() { + var pathData = "M0.672,33.603c-0.432,0-0.648,0-0.648-0.264c0-0.024,0-0.144,0.24-0.432l12.433-14.569L0,0.96c0-0.264,0-0.72,0.024-0.792 C0.096,0.024,0.12,0,0.672,0h28.371l2.904,6.745h-0.6C30.531,4.8,28.898,3.72,28.298,3.336c-1.896-1.2-3.984-1.608-5.28-1.8 c-0.216-0.048-2.4-0.384-5.617-0.384H4.248l11.185,15.289c0.168,0.24,0.168,0.312,0.168,0.36c0,0.12-0.048,0.192-0.216,0.384 L3.168,31.515h14.474c4.608,0,6.96-0.624,7.464-0.744c2.76-0.72,5.305-2.352,6.241-4.848h0.6l-2.904,7.681H0.672z", operatorShape = new kity.Path(pathData).fill("black"), opBgShape = new kity.Rect(0, 0, 0, 0).fill("transparent"), group = new kity.Group(), opRenderBox = null; + group.addShape(opBgShape); + group.addShape(operatorShape); + operatorShape.scale(1.6); + this.addOperatorShape(group); + opRenderBox = operatorShape.getFixRenderBox(); + if (this.displayType === "inline") { + operatorShape.translate(5, 15); + opBgShape.setSize(opRenderBox.width + 10, opRenderBox.height + 25); + } else { + operatorShape.translate(2, 5); + opBgShape.setSize(opRenderBox.width + 4, opRenderBox.height + 8); + } + return group; + } + }); + } +}; + +/*! + * 资源管理器 + * 负责管理资源的加载,并在资源ready之后提供Formula构造器 + */ +_p[45] = { + value: function(require) { + var kity = _p.r(34), cbList = [], RES_CONF = _p.r(47).resource, FontInstall = _p.r(24), Formula = _p.r(31), // 资源管理器就绪状态 + __readyState = false, // 资源管理器是否已启动 + inited = false; + return { + // 初始化 + ready: function(cb, options) { + if (!inited) { + inited = true; + init(options); + } + if (__readyState) { + window.setTimeout(function() { + cb(Formula); + }, 0); + } else { + cbList.push(cb); + } + } + }; + /** + * 资源初始化 + */ + function init(options) { + options = kity.Utils.extend({}, RES_CONF, options); + if (!/^(https?:)?\/\//.test(options.path)) { + options.path = getFullPath(options.path); + } + new FontInstall(document, options.path).mount(complete); + } + function complete() { + kity.Utils.each(cbList, function(cb) { + cb(Formula); + }); + } + function getFullPath(path) { + var pathname = location.pathname.split("/"), pathPart; + pathname.length -= 1; + pathname = pathname.join("/") + "/"; + pathPart = [ location.protocol, "//", location.host, pathname, path.replace(/^\//, "") ]; + return pathPart.join(""); + } + } +}; + +/*! + * 所有符号的基类 + * @abstract + */ +_p[46] = { + value: function(require) { + var kity = _p.r(34), GTYPE = _p.r(6); + return kity.createClass("SignGroup", { + base: kity.Group, + constructor: function() { + this.callBase(); + this.box = new kity.Rect(0, 0, 0, 0); + this.type = GTYPE.UNKNOWN; + this.addShape(this.box); + this.zoom = 1; + }, + setZoom: function(zoom) { + this.zoom = zoom; + }, + getZoom: function() { + return this.zoom; + }, + setBoxSize: function(w, h) { + return this.box.setSize(w, h); + }, + setBoxWidth: function(w) { + return this.box.setWidth(w); + }, + setBoxHeight: function(h) { + return this.box.setHeight(h); + }, + getType: function() { + return this.type; + }, + getBaseHeight: function() { + return this.getHeight(); + }, + getBaseWidth: function() { + return this.getWidth(); + }, + addedCall: function() {} + }); + } +}; + +/*! + * 系统项目配置文件. + */ +_p[47] = { + value: function(require) { + return { + zoom: .66, + font: { + meanline: Math.round(380 / 1e3 * 50), + baseline: Math.round(800 / 1e3 * 50), + baseHeight: 50, + // 系统字体列表 + list: [ _p.r(29), _p.r(27), _p.r(28), _p.r(26), _p.r(30) ] + }, + /*------------------------- 资源配置*/ + resource: { + path: "src/resource/" + }, + // 函数相关配置 + func: { + // 上下标在函数名上下两侧的函数列表 + "ud-script": { + lim: true + } + } + }; + } +}; + +/*! + * 启动代码 + */ +_p[48] = { + value: function(require) { + window.kf = { + // base + ResourceManager: _p.r(45), + Operator: _p.r(41), + // expression + Expression: _p.r(21), + CompoundExpression: _p.r(19), + TextExpression: _p.r(22), + EmptyExpression: _p.r(20), + CombinationExpression: _p.r(12), + FunctionExpression: _p.r(14), + FractionExpression: _p.r(13), + IntegrationExpression: _p.r(15), + RadicalExpression: _p.r(16), + ScriptExpression: _p.r(17), + SuperscriptExpression: _p.r(9), + SubscriptExpression: _p.r(8), + SummationExpression: _p.r(18), + // Brackets expressoin + BracketsExpression: _p.r(11) + }; + } +}; + +var moduleMapping = { + "kf.start": 48 +}; + +function use(name) { + _p.r([ moduleMapping[name] ]); +} +/** + * 模块暴露 + */ + +( function ( global ) { + + var oldGetRenderBox = kity.Shape.getRenderBox; + + kity.extendClass(kity.Shape, { + getFixRenderBox: function () { + return this.getRenderBox( this.container.container ); + }, + + getTranslate: function () { + return this.transform.translate; + } + }); + + // build环境中才含有use + try { + use( 'kf.start' ); + } catch ( e ) { + } + +} )( this ); +})(); \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js new file mode 100644 index 0000000..332ca58 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js @@ -0,0 +1,12 @@ +/*! + * ==================================================== + * Kity Formula Editor - v1.0.0 - 2014-09-03 + * https://github.com/kitygraph/formula + * GitHub: https://github.com/kitygraph/formula.git + * Copyright (c) 2014 Baidu Kity Group; Licensed MIT + * ==================================================== + */ +!function(){function a(a){b.r([c[a]])}var b={r:function(a){if(b[a].inited)return b[a].value;if("function"!=typeof b[a].value)return b[a].inited=!0,b[a].value;var c={exports:{}},d=b[a].value(null,c.exports,c);if(b[a].inited=!0,b[a].value=d,void 0!==d)return d;for(var e in c.exports)if(c.exports.hasOwnProperty(e))return b[a].inited=!0,b[a].value=c.exports,c.exports}};b[0]={value:function(){function a(d,e,f,g){return g=0|g,g>b?f:(g++,c.each(f,function(b,f){d?!b||"object"!=typeof b&&"function"!=typeof b?e[f]=b:(e[f]=e[f]||(c.isArray(b)?[]:{}),e[f]=a(d,e[f],b,g)):e[f]=b}),e)}var b=10,c={extend:function(b,d){var e=!1;if("boolean"==typeof b?(e=b,b=d,d=[].splice.call(arguments,2)):d=[].splice.call(arguments,1),!b)throw new Error("Utils: extend, target can not be empty");return c.each(d,function(c){(c&&"object"==typeof c||"function"==typeof c)&&a(e,b,c)}),b},contains:function(a,b){return a.contains?a.contains(b):a.compareDocumentPosition?!!(16&a.compareDocumentPosition(b)):void 0},getRect:function(a){return a.getBoundingClientRect()},isArray:function(a){return a&&"[object Array]"==={}.toString.call(a)},isString:function(a){return"string"==typeof a},proxy:function(a,b){return function(){return a.apply(b,arguments)}},each:function(a,b){if(a)if("length"in a&&"number"==typeof a.length)for(var c=0,d=a.length;d>c&&b.call(null,a[c],c,a)!==!1;c++);else for(var e in a)if(a.hasOwnProperty(e)&&b.call(null,a[e],e,a)===!1)break}};return c}},b[1]={value:function(){var a=b.r(20);return a.createClass("Component",{constructor:function(){}})}},b[2]={value:function(){function a(){return++d}var c={},d=0,e=!0,f=b.r(3),g=b.r(0),h=function(a){var b=a.type,d=a.target,f=this.__kfe_eid,h=/^(?:before|after)/.test(b),j=c[f][b];return h||(i.trigger(d,"before"+b),e!==!1)?(g.each(j,function(b){return b&&b.call(d,a)===!1?e=!1:void 0}),void(h||i.trigger(d,"after"+b))):(e=!0,!1)},i={addEvent:function(b,d,e){var f=!0,g=null;b.__kfe_eid||(f=!1,b.__kfe_eid=a(),c[b.__kfe_eid]={}),g=c[b.__kfe_eid],g[d]||(f=!1,g[d]=[]),g[d].push(e),f||b.addEventListener(d,h,!1)},trigger:function(a,b,c){c=c||f.createEvent(b,c),a.dispatchEvent(c)}};return i}},b[3]={value:function(){return{createEvent:function(a){var b=document.createEvent("Event");return b.initEvent(a,!0,!0),b}}}},b[4]={value:function(){var a={},c=b.r(0);return c.extend(a,c,b.r(2)),a}},b[5]={value:function(){var a=b.r(20),c=b.r(8),d=a.createClass("ControllerComponent",{constructor:function(a){this.kfEditor=a,this.components={},this.initComponents()},initComponents:function(){this.components.listener=new c(this,this.kfEditor)}});return d}},b[6]={value:function(){var a={32:"\\,","s+219":"\\{","s+221":"\\}",220:"\\backslash","s+51":"\\#","s+52":"\\$","s+53":"\\%","s+54":"\\^","s+55":"\\&","s+189":"\\_","s+192":"\\~"};return{getReplaceString:function(b){return a[b]||null}}}},b[7]={value:function(){var a=b.r(20),c=b.r(4),d=b.r(6),e={LEFT:37,RIGHT:39,DELETE:8,INPUT:229};return a.createClass("InputComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b,this.inputBox=this.createInputBox(),this.initServices(),this.initCommands(),this.initEvent()},initServices:function(){this.kfEditor.registerService("control.update.input",this,{updateInput:this.updateInput}),this.kfEditor.registerService("control.insert.string",this,{insertStr:this.insertStr})},initCommands:function(){this.kfEditor.registerCommand("focus",this,this.focus)},createInputBox:function(){var a=this.kfEditor.getContainer(),b=this.kfEditor.getDocument().createElement("input");return b.className="kf-editor-input-box",b.type="text",b.isTrusted=!1,a.appendChild(b),b},focus:function(){var a=null;this.inputBox.focus(),this.kfEditor.requestService("syntax.has.cursor.info")||(a=this.kfEditor.requestService("syntax.get.root.group.info"),this.kfEditor.requestService("syntax.update.record.cursor",{groupId:a.id,startOffset:0,endOffset:a.content.length}),this.kfEditor.requestService("control.update.input")),this.kfEditor.requestService("control.reselect")},setUntrusted:function(){this.inputBox.isTrusted=!1},setTrusted:function(){this.inputBox.isTrusted=!0},updateInput:function(){var a=this.kfEditor.requestService("syntax.serialization");this.setUntrusted(),this.inputBox.value=a.str,this.inputBox.selectionStart=a.startOffset,this.inputBox.selectionEnd=a.endOffset,this.inputBox.focus(),this.setTrusted()},insertStr:function(a){var b=this.kfEditor.requestService("syntax.serialization"),c=b.str;c=c.substring(0,b.startOffset)+" "+a+" "+c.substring(b.endOffset),this.restruct(c),this.updateInput(),this.kfEditor.requestService("ui.update.canvas.view")},initEvent:function(){var a=this;c.addEvent(this.inputBox,"keydown",function(b){var c=!1;if(b.ctrlKey)return void a.processUserCtrl(b);switch(b.keyCode){case e.INPUT:return;case e.LEFT:b.preventDefault(),a.leftMove(),c=!0;break;case e.RIGHT:b.preventDefault(),a.rightMove(),c=!0;break;case e.DELETE:b.preventDefault(),a.delete(),c=!0}c&&a.kfEditor.requestService("ui.update.canvas.view"),a.pretreatmentInput(b)||b.preventDefault()}),c.addEvent(this.inputBox,"input",function(){a.processingInput()}),c.addEvent(this.inputBox,"blur",function(){a.kfEditor.requestService("ui.toolbar.disable"),a.kfEditor.requestService("ui.toolbar.close"),a.kfEditor.requestService("control.cursor.hide"),a.kfEditor.requestService("render.clear.select")}),c.addEvent(this.inputBox,"focus",function(){a.kfEditor.requestService("ui.toolbar.enable"),this.isTrusted&&a.kfEditor.requestService("control.reselect")}),c.addEvent(this.inputBox,"paste",function(a){a.preventDefault()})},hasRootplaceholder:function(){return this.kfEditor.requestService("syntax.has.root.placeholder")},leftMove:function(){this.hasRootplaceholder()||(this.kfEditor.requestService("syntax.cursor.move.left"),this.update())},rightMove:function(){this.hasRootplaceholder()||(this.kfEditor.requestService("syntax.cursor.move.right"),this.update())},"delete":function(){var a=null;this.hasRootplaceholder()||(a=this.kfEditor.requestService("syntax.delete.group"),a?(this.updateInput(),this.processingInput()):(this.updateInput(),this.kfEditor.requestService("control.reselect")))},processUserCtrl:function(a){switch(a.preventDefault(),a.keyCode){case 65:this.kfEditor.requestService("control.select.all");break;case 83:this.kfEditor.requestService("print.image")}},pretreatmentInput:function(a){var b=this.getKeyCode(a),c=d.getReplaceString(b);return null===c?!0:(this.insertStr(c),!1)},getKeyCode:function(a){return(a.shiftKey?"s+":"")+a.keyCode},processingInput:function(){this.restruct(this.inputBox.value),this.kfEditor.requestService("ui.update.canvas.view")},restruct:function(a){this.kfEditor.requestService("render.draw",a),this.kfEditor.requestService("control.reselect")},update:function(){this.updateInput(),this.kfEditor.requestService("control.reselect")}})}},b[8]={value:function(){var a=b.r(20),c=b.r(9),d=b.r(7),e=b.r(10);return a.createClass("MoveComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b,this.components={},this.initComponents()},initComponents:function(){this.components.location=new c(this,this.kfEditor),this.components.selection=new e(this,this.kfEditor),this.components.input=new d(this,this.kfEditor)}})}},b[9]={value:function(){function a(a){return a.getBoundingClientRect()}var c=b.r(20);return c.createClass("LocationComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b,this.paper=this.getPaper(),this.cursorShape=this.createCursor(),this.initServices(),this.initEvent()},getPaper:function(){return this.kfEditor.requestService("render.get.paper")},initServices:function(){this.kfEditor.registerService("control.cursor.relocation",this,{relocationCursor:this.updateCursor}),this.kfEditor.registerService("control.cursor.hide",this,{hideCursor:this.hideCursor}),this.kfEditor.registerService("control.reselect",this,{reselect:this.reselect}),this.kfEditor.registerService("control.get.cursor.location",this,{getCursorLocation:this.getCursorLocation})},createCursor:function(){var a=new c.Rect(1,0,0,0).fill("black");return a.setAttr("style","display: none"),this.paper.addShape(a),a},initEvent:function(){var a=this.kfEditor.request("ui.canvas.container.event"),b=this;a.on("mousedown",function(a){a.preventDefault(),b.updateCursorInfo(a),b.kfEditor.requestService("control.update.input"),b.reselect()})},updateCursorInfo:function(a){var b=null,c=null,d=-1;return this.kfEditor.requestService("syntax.has.root.placeholder")?(this.kfEditor.requestService("syntax.update.record.cursor",{groupId:this.kfEditor.requestService("syntax.get.root.group.info").id,startOffset:0,endOffset:1}),!1):(b=this.kfEditor.requestService("position.get.wrap",a.target),b&&this.kfEditor.requestService("syntax.is.placeholder.node",b.id)?(c=this.kfEditor.requestService("position.get.group.info",b),void this.kfEditor.requestService("syntax.update.record.cursor",c.group.id,c.index,c.index+1)):(c=this.kfEditor.requestService("position.get.group",a.target),null===c&&(c=this.kfEditor.requestService("syntax.get.root.group.info")),d=this.getIndex(a.clientX,c),void this.kfEditor.requestService("syntax.update.record.cursor",c.id,d)))},hideCursor:function(){this.cursorShape.setAttr("style","display: none")},reselect:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor"),b=null;return this.hideCursor(),this.kfEditor.requestService("syntax.is.select.placeholder")?(b=this.kfEditor.requestService("syntax.get.group.content",a.groupId),void this.kfEditor.requestService("render.select.group",b.content[a.startOffset].id)):void(a.startOffset===a.endOffset?(this.updateCursor(),this.kfEditor.requestService("render.tint.current.cursor")):this.kfEditor.requestService("render.select.current.cursor"))},updateCursor:function(){var b=this.kfEditor.requestService("syntax.get.record.cursor");if(b.startOffset!==b.endOffset)return void this.hideCursor();var c=this.kfEditor.requestService("syntax.get.group.content",b.groupId),d=0===b.endOffset,e=d?0:b.endOffset-1,f=c.content[e],g=a(this.paper.container.node),h=0,i=a(f),j=this.cursorShape.getTransform(this.cursorShape),k=this.kfEditor.requestService("render.get.canvas.zoom"),l=this.paper.getZoom();this.cursorShape.setHeight(i.height/k/l),h=d?i.left-2:i.left+i.width-2,h-=g.left,j.m.e=Math.floor(h/k/l)+.5,j.m.f=(i.top-g.top)/k/l,this.cursorShape.setMatrix(j),this.cursorShape.setAttr("style","display: block")},getCursorLocation:function(){var a=this.cursorShape.getRenderBox("paper");return{x:a.x,y:a.y}},getIndex:function(b,c){for(var d=-1,e=c.content,f=null,g=e.length-1,h=null;g>=0;g--)if(d=g,h=e[g],f=a(h),f.leftthis.startPoint.x,e={},f=null,g=!1,h=this.startGroup,i=null,j=this.getGroupInof(b,a);j.groupInfo.id===h.groupInfo.id?(e={groupId:j.groupInfo.id,startOffset:h.offset,endOffset:j.offset},this.startGroupIsPlaceholder&&(d?e.startOffset===e.endOffset&&(e.endOffset+=1):e.startOffset+=1)):c.contains(h.groupInfo.groupObj,j.groupInfo.groupObj)?e={groupId:h.groupInfo.id,startOffset:h.offset,endOffset:this.getIndex(h.groupInfo.groupObj,a,b)}:c.contains(j.groupInfo.groupObj,h.groupInfo.groupObj)?(e={groupId:j.groupInfo.id,startOffset:this.kfEditor.requestService("position.get.index",j.groupInfo.groupObj,h.groupInfo.groupObj),endOffset:j.offset},d||(e.startOffset+=1)):(f=this.getCommunityGroup(h.groupInfo,j.groupInfo),f.startOffset===f.endOffset?f.endOffset+=1:(i=f.group.content[f.endOffset],g=this.kfEditor.requestService("position.get.area",i,b),g&&(f.endOffset+=1),d||(f.startOffset+=1)),e={groupId:f.group.id,startOffset:f.startOffset,endOffset:f.endOffset}),this.kfEditor.requestService("syntax.update.record.cursor",e.groupId,e.startOffset,e.endOffset),this.kfEditor.requestService("control.reselect")},updateSelectionByTarget:function(a){var b=this.kfEditor.requestService("position.get.parent.group",a),c=null,d={};if(null!==b){if(this.kfEditor.requestService("syntax.is.root.node",b.id))return void this.selectAll();this.kfEditor.requestService("syntax.is.virtual.node",b.id)?(c=this.kfEditor.requestService("position.get.group.info",b.groupObj),d={groupId:c.group.id,startOffset:c.index,endOffset:c.index+1}):d={groupId:b.id,startOffset:0,endOffset:b.content.length},this.kfEditor.requestService("syntax.update.record.cursor",d),this.kfEditor.requestService("control.reselect"),this.kfEditor.requestService("control.update.input")}},selectAll:function(){var a=this.kfEditor.requestService("syntax.get.root.group.info"),b={groupId:a.id,startOffset:0,endOffset:a.content.length};this.kfEditor.requestService("syntax.update.record.cursor",b),this.kfEditor.requestService("control.reselect"),this.kfEditor.requestService("control.update.input")},getGroupInof:function(a,b){var c=this.kfEditor.requestService("position.get.group",b);null===c&&(c=this.kfEditor.requestService("syntax.get.root.group.info"));var d=this.kfEditor.requestService("position.get.location.info",a,c);return{groupInfo:c,offset:d}},getIndex:function(a,b,d){var e=this.kfEditor.requestService("position.get.index",a,b),f=this.kfEditor.requestService("syntax.get.group.content",a.id),g=f.content[e],h=c.getRect(g);return h.left+h.width/2k;k++)i=b.operand[k],h(b)?e(a,k,b,i):f(a,k,b,i);return b}function c(){return q+ ++s}function d(a,b){a.isResetId?b.attr["data-root"]="true":b.attr["data-type"]=r.VIRTUAL}function e(b,c,d,e){"brackets"===d.name&&2>c||("function"!==d.name||0!==c)&&(d.attr["data-type"]=r.VIRTUAL,e?"string"==typeof e?(d.operand[c]=j(b),d.operand[c].operand[0]=e):i(e)?(d.operand[c]=j(b),d.operand[c].operand[0]=a(b,e,d.operand[c])):d.operand[c]=a(b,e,d):d.operand[c]=e)}function f(b,c,d,e){d.attr["data-type"]=r.GROUP,d.operand[c]=e&&"string"!=typeof e?"text"===e.name?e:a(b,e,d):e}function g(a){var b=1;if(a.length>3)return!1;for(var c=0,d=a.length;d>c;c++)a[c]!==m&&a[c]&&"placeholder"===a[c].name&&b--;return!b}function h(a){return!!n[a.name]}function i(a){return"placeholder"===a.name}function j(a){return{name:p,attr:{"data-type":r.GROUP,id:a.getGroupId()},operand:[]}}var k=b.r(19).Parser,l=b.r(20),m=b.r(29).cursorCharacter,n=b.r(22),o=b.r(29).rootPlaceholder.content,p="combination",q="_kf_editor_",r=b.r(11),s=0,t=l.createClass("Parser",{constructor:function(a){this.kfEditor=a,this.callBase(),this.kfParser=k.use("latex"),this.initKFormulExtension(),this.pid=c(),this.groupRecord=0,this.tree=null,this.isResetId=!0,this.initServices()},parse:function(b,c){var d=null;return this.isResetId=!!c,this.isResetId&&this.resetGroupId(),d=this.kfParser.parse(b),a(this,d.tree),d},serialization:function(a){return this.kfParser.serialization(a)},initServices:function(){this.kfEditor.registerService("parser.parse",this,{parse:this.parse}),this.kfEditor.registerService("parser.latex.serialization",this,{serialization:this.serialization})},getKFParser:function(){return this.kfParser},initKFormulExtension:function(){b.r(17).ext(this)},resetGroupId:function(){this.groupRecord=0},getGroupId:function(){return this.pid+"_"+ ++this.groupRecord}});return t}},b[22]={value:function(){return{radical:!0,fraction:!0,summation:!0,integration:!0,placeholder:!0,script:!0,superscript:!0,subscript:!0,brackets:!0,"function":!0}}},b[23]={value:function(){function a(b,c,d){var e=null;return b.ownerSVGElement?(b=b.parentNode,e=b.tagName.toLowerCase(),b&&"body"!==e&&"svg"!==e?"kf-editor-group"===b.getAttribute("data-type")?b:c&&"kf-editor-virtual-group"===b.getAttribute("data-type")?b:d&&null!==b.getAttribute("data-flag")?b:a(b,c,d):null):null}var c=b.r(20),d=b.r(4),e=c.createClass("PositionComponenet",{constructor:function(a){this.kfEditor=a,this.initServices()},initServices:function(){this.kfEditor.registerService("position.get.group",this,{getGroupByTarget:this.getGroupByTarget}),this.kfEditor.registerService("position.get.index",this,{getIndexByTargetInGroup:this.getIndexByTargetInGroup}),this.kfEditor.registerService("position.get.location.info",this,{getLocationInfo:this.getLocationInfo}),this.kfEditor.registerService("position.get.parent.group",this,{getParentGroupByTarget:this.getParentGroupByTarget}),this.kfEditor.registerService("position.get.wrap",this,{getWrap:this.getWrap}),this.kfEditor.registerService("position.get.area",this,{getAreaByCursorInGroup:this.getAreaByCursorInGroup}),this.kfEditor.registerService("position.get.group.info",this,{getGroupInfoByNode:this.getGroupInfoByNode}),this.kfEditor.registerService("position.get.parent.info",this,{getParentInfoByNode:this.getParentInfoByNode})},getGroupByTarget:function(b){var c=a(b,!1,!1);return c?this.kfEditor.requestService("syntax.get.group.content",c.id):null},getIndexByTargetInGroup:function(a,b){var e=this.kfEditor.requestService("syntax.get.group.content",a.id),f=-1;return c.Utils.each(e.content,function(a,c){return f=c,d.contains(a,b)?!1:void 0}),f},getAreaByCursorInGroup:function(a,b){var c=d.getRect(a);return c.left+c.width/2=0;g--)if(c=g,h=e[g],f=d.getRect(h),f.leftg&&(c.index=g,!d.contains(f.content[g],b));g++);return c.group=f,c},getParentInfoByNode:function(b){var c=a(b,!0,!1);return c=this.kfEditor.requestService("syntax.get.group.content",c.id),{group:c,index:c.content.indexOf(b)}}});return e}},b[24]={value:function(){var a=b.r(20);return a.createClass("Printer",{constructor:function(a){this.kfEditor=a,this.initServices(),this.initCommands()},initServices:function(){this.kfEditor.registerService("print.image",this,{printImage:this.printImage})},initCommands:function(){this.kfEditor.registerCommand("get.image.data",this,this.getImageData)},printImage:function(){var a=this.kfEditor.requestService("render.get.paper");this._formatCanvas(),a.toPNG(function(a){document.body.innerHTML=''}),this._restoreCanvas()},getImageData:function(a){var b=this.kfEditor.requestService("render.get.canvas"),c=this.kfEditor.requestService("render.get.paper");this._formatCanvas(),c.toPNG(function(c){a({width:b.width,height:b.height,img:c})}),this._restoreCanvas()},_formatCanvas:function(){var a=this.kfEditor.requestService("render.get.canvas"),b=a.container.getRenderBox();a.node.setAttribute("width",b.width),a.node.setAttribute("height",b.height),this.kfEditor.requestService("render.clear.canvas.transform"),this.kfEditor.requestService("control.cursor.hide"),this.kfEditor.requestService("render.clear.select")},_restoreCanvas:function(){var a=this.kfEditor.requestService("render.get.canvas");a.node.setAttribute("width","100%"),a.node.setAttribute("height","100%"),this.kfEditor.requestService("render.revert.canvas.transform"),this.kfEditor.requestService("control.cursor.relocation"),this.kfEditor.requestService("render.reselect")}})}},b[25]={value:function(){var a=b.r(20),c=b.r(19).Assembly,d={autoresize:!1,fontsize:50,padding:[20,50]},e=a.createClass("RenderComponent",{base:b.r(1),constructor:function(b,c){this.callBase(),this.options=a.Utils.extend({},d,c),this.kfEditor=b,this.assembly=null,this.formula=null,this.relDisabled=!1,this.canvasZoom=1,this.record={select:{},cursor:{},canvas:{}},this.initCanvas(),this.initServices(),this.initCommands()},initCanvas:function(){var a=this.kfEditor.requestService("ui.get.canvas.container"),b=this.kfEditor.getFormulaClass();this.assembly=new c(new b(a,this.options)),this.formula=this.assembly.formula,this.setCanvasToCenter()},setCanvasOffset:function(a,b){var c=this.formula.getViewBox();b=void 0!==b?b:-c.height/2,this.formula.setViewBox(a,b,c.width,c.height)},setCanvasToCenter:function(){var a=this.formula.getViewBox();this.formula.setViewBox(-a.width/2,-a.height/2,a.width,a.height)},initServices:function(){this.kfEditor.registerService("render.get.canvas",this,{getCanvas:this.getCanvas}),this.kfEditor.registerService("render.get.content.size",this,{getContentSize:this.getContentSize}),this.kfEditor.registerService("render.clear.canvas.transform",this,{clearCanvasOffset:this.clearCanvasTransform}),this.kfEditor.registerService("render.set.canvas.offset",this,{setCanvasOffset:this.setCanvasOffset}),this.kfEditor.registerService("render.set.canvas.to.center",this,{setCanvasToCenter:this.setCanvasToCenter}),this.kfEditor.registerService("render.revert.canvas.transform",this,{revertCanvasTransform:this.revertCanvasTransform}),this.kfEditor.registerService("render.relocation",this,{relocation:this.relocation}),this.kfEditor.registerService("render.disable.relocation",this,{disableRelocation:this.disableRelocation}),this.kfEditor.registerService("render.enable.relocation",this,{enableRelocation:this.enableRelocation}),this.kfEditor.registerService("render.select.group.content",this,{selectGroupContent:this.selectGroupContent}),this.kfEditor.registerService("render.select.group",this,{selectGroup:this.selectGroup}),this.kfEditor.registerService("render.select.group.all",this,{selectAllGroup:this.selectAllGroup}),this.kfEditor.registerService("render.tint.current.cursor",this,{tintCurrentGroup:this.tintCurrentGroup}),this.kfEditor.registerService("render.select.current.cursor",this,{selectCurrentCursor:this.selectCurrentCursor}),this.kfEditor.registerService("render.reselect",this,{reselect:this.reselect}),this.kfEditor.registerService("render.clear.select",this,{clearSelect:this.clearSelect}),this.kfEditor.registerService("render.set.canvas.zoom",this,{setCanvasZoom:this.setCanvasZoom}),this.kfEditor.registerService("render.get.canvas.zoom",this,{getCanvasZoom:this.getCanvasZoom}),this.kfEditor.registerService("render.get.paper.offset",this,{getPaperOffset:this.getPaperOffset}),this.kfEditor.registerService("render.draw",this,{render:this.render}),this.kfEditor.registerService("render.insert.string",this,{insertString:this.insertString}),this.kfEditor.registerService("render.insert.group",this,{insertGroup:this.insertGroup}),this.kfEditor.registerService("render.get.paper",this,{getPaper:this.getPaper})},initCommands:function(){this.kfEditor.registerCommand("render",this,function(a){this.render(a),this.kfEditor.requestService("ui.update.canvas.view")}),this.kfEditor.registerCommand("getPaper",this,this.getPaper)},relocation:function(){this.relDisabled?this.relocationToLeft():this.relocationToCenter()},relocationToCenter:function(){var a=this.formula.container.getRenderBox();this.formula.container.setTranslate(-a.width/2,-a.height/2),this.setCanvasToCenter()},relocationToLeft:function(){var a=this.formula.container.getRenderBox();this.formula.container.setTranslate(0,-a.height/2),this.setCanvasOffset(0)},selectGroup:function(a){var b=this.kfEditor.requestService("syntax.get.group.object",a);this.clearSelect(),b.node.getAttribute("data-root")||(this.record.select.lastSelect=b,b.select())},selectGroupContent:function(a){null!==a.groupObj.getAttribute("data-placeholder")&&(a={id:a.content[0].id});var b=this.kfEditor.requestService("syntax.get.group.object",a.id);this.clearSelect(),this.record.select.lastSelect=b,b.node.getAttribute("data-root")||b.select()},selectAllGroup:function(a){null!==a.groupObj.getAttribute("data-placeholder")&&(a={id:a.content[0].id});var b=this.kfEditor.requestService("syntax.get.group.object",a.id);this.clearSelect(),this.record.select.lastSelect=b,b.selectAll()},selectCurrentCursor:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor"),b=this.kfEditor.requestService("syntax.get.group.object",a.groupId),c=null,d=-1,e=0,f=Math.min(a.startOffset,a.endOffset),g=Math.max(a.startOffset,a.endOffset);this.clearSelect(),this.record.select.lastSelect=b;for(var h=f,i=g;i>h;h++)c=b.getOperand(h).getRenderBox(b),-1==d&&(d=c.x),e+=c.width;b.setBoxWidth(e),b.selectAll(),b.getBox().setTranslate(d,0)},tintCurrentGroup:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor").groupId,b=this.kfEditor.requestService("syntax.get.group.object",a),c=this.kfEditor.requestService("syntax.is.placeholder.node",a);this.clearSelect(),b.node.getAttribute("data-root")||(c&&(b=this.kfEditor.requestService("syntax.get.group.object",b.operands[0].node.id)),this.record.select.lastSelect=b,b.select())},reselect:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor"),b=null;b=this.kfEditor.requestService("syntax.get.group.object",a.groupId),this.clearSelect(),this.record.select.lastSelect=b,b.node.getAttribute("data-root")||b.select() +},clearSelect:function(){var a=null,b=this.record.select.lastSelect;b&&b.node.ownerSVGElement&&(b.unselect(),a=b.getRenderBox(b),b.setBoxWidth(a.width),b.getBox().setTranslate(0,0))},getPaper:function(){return this.formula},render:function(a){var b=this.kfEditor.requestService("parser.parse",a,!0),c=this.assembly.regenerateBy(b);this.kfEditor.requestService("syntax.update.objtree",c)},enableRelocation:function(){this.relDisabled=!1},disableRelocation:function(){this.relDisabled=!0},setCanvasZoom:function(a){var b=this.formula.getViewPort();this.canvasZoom=a,b.zoom=a,this.formula.setViewPort(b)},getCanvas:function(){return this.formula},getContentSize:function(){return this.formula.container.getRenderBox()},clearCanvasTransform:function(){var a=this.record.canvas;a.viewBox=this.formula.getViewBox(),a.contentOffset=this.formula.container.getTranslate(),this.setCanvasToCenter(),this.formula.node.removeAttribute("viewBox"),this.formula.container.setTranslate(0,0)},revertCanvasTransform:function(){var a=this.record.canvas,b=a.viewBox;return b?(this.formula.setViewBox(b.x,b.y,b.width,b.height),this.formula.container.setTranslate(a.contentOffset),a.viewBox=null,void(a.contentOffset=null)):!1},getCanvasZoom:function(){return this.canvasZoom}});return e}},b[26]={value:function(){var a=b.r(20);return a.createClass("DeleteComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b},deleteGroup:function(){var a=this.parentComponent.getCursorRecord(),b=this.parentComponent.getObjectTree(),c=b.mapping[a.groupId].strGroup;return a.startOffset!==a.endOffset?this.parentComponent.isSelectPlaceholder()?this.parentComponent.isRootTree(c)?!1:(a=this.selectParentContainer(a.groupId),this.parentComponent.updateCursor(a),!1):this.deleteSelection(c,a):0===a.startOffset?this.parentComponent.isRootTree(c)?!1:(a=this.selectParentContainer(a.groupId),this.parentComponent.updateCursor(a),!1):c.operand.length>1?(a=this.deletePrevGroup(c,a),this.parentComponent.updateCursor(a),a.startOffset===a.endOffset?!0:!1):(a.startOffset=0,a.endOffset=1,c.operand[0].attr&&this.parentComponent.isGroupNode(c.operand[0].attr.id)?(this.parentComponent.updateCursor(a),!1):(c.operand[0]={name:"placeholder",operand:[]},this.parentComponent.updateCursor(a),!0))},deletePrevGroup:function(a,b){var c=b.startOffset-1,d=a.operand[c];return this.parentComponent.isLeafTree(d)?(a.operand.splice(c,1),b.startOffset-=1,b.endOffset-=1):b.startOffset-=1,b},deleteSelection:function(a,b){return 0===b.startOffset&&b.endOffset===a.operand.length?(a.operand.length=1,a.operand[0]={name:"placeholder",operand:[]},b.endOffset=1):(a.operand.splice(b.startOffset,b.endOffset-b.startOffset),b.endOffset=b.startOffset),this.parentComponent.updateCursor(b),!0},selectParentContainer:function(a){var b=this.parentComponent.getGroupObject(a).node,c=this.kfEditor.requestService("position.get.group",b),d=this.kfEditor.requestService("position.get.index",c.groupObj,b);return{groupId:c.id,startOffset:d,endOffset:d+1}}})}},b[27]={value:function(){function a(a){var b=null,c=this.parentComponent,f=null;return f=c.getGroupContent(a.groupId),c.isSelectPlaceholder()?e(this,f.content[a.startOffset],p.LEFT):(a.startOffset===a.endOffset?a.startOffset>0?(b=f.content[a.startOffset-1],l(b)?a=d(this,b,p.LEFT):(a.startOffset-=1,m(b)||(a.endOffset=a.startOffset))):a=e(this,f.groupObj,p.LEFT):(a.startOffset=Math.min(a.startOffset,a.endOffset),a.endOffset=a.startOffset),a)}function c(a){var b=null,c=this.parentComponent,f=null;return f=c.getGroupContent(a.groupId),c.isSelectPlaceholder()?e(this,f.content[a.startOffset],p.RIGHT):(a.startOffset===a.endOffset?a.startOffset1)return{groupId:d.group.id,startOffset:0,endOffset:0};d=c.requestService("position.get.parent.info",d.group.groupObj)}return k(d.group.groupObj)?{groupId:d.group.id,startOffset:d.index,endOffset:d.index}:(b=d.group.content[d.index-1],l(b)?k(b)?f(a,b):f(a,b):n(b)?g(a,b):{groupId:d.group.id,startOffset:d.index,endOffset:d.index})}function h(a,b){var c=a.parentComponent,d=null,e=null;if(l(b)){if(d=c.getGroupContent(b.id),e=d.content[0],k(b))return k(e)?h(a,e):m(e)?{groupId:b.id,startOffset:0,endOffset:1}:{groupId:b.id,startOffset:0,endOffset:0};for(;!k(e)&&!m(e)&&!n(e);)d=c.getGroupContent(e.id),e=d.content[0];return m(e)?{groupId:e.id,startOffset:0,endOffset:0}:n(e)?i(a,e):h(a,e)}return null}function i(a,b){var c=a.kfEditor,d=a.parentComponent,e=null,f=null;if(j(b))return null;for(e=c.requestService("position.get.parent.info",b);e.index===e.group.content.length-1;){if(j(e.group.groupObj))return{groupId:e.group.id,startOffset:e.group.content.length,endOffset:e.group.content.length};if(k(e.group.groupObj)&&e.group.content.length>1)return{groupId:e.group.id,startOffset:e.group.content.length,endOffset:e.group.content.length};e=c.requestService("position.get.parent.info",e.group.groupObj)}return b=e.group.content[e.index+1],n(b)?i(a,b):k(b)?(f=d.getGroupContent(b.id),d.isPlaceholder(f.content[0].id)?{groupId:b.id,startOffset:0,endOffset:1}:{groupId:b.id,startOffset:0,endOffset:0}):{groupId:e.group.id,startOffset:e.index+1,endOffset:e.index+1}}function j(a){return!!a.getAttribute("data-root")}function k(a){return"kf-editor-group"===a.getAttribute("data-type")}function l(a){var b=a.getAttribute("data-type");return"kf-editor-group"===b||"kf-editor-virtual-group"===b}function m(a){return"Placeholder"===a.getAttribute("data-flag")}function n(a){return"Empty"===a.getAttribute("data-flag")}var o=b.r(20),p={LEFT:"left",RIGHT:"right"};return o.createClass("MoveComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b},leftMove:function(){var b=this.parentComponent.getCursorRecord();b=a.call(this,b),b&&this.parentComponent.updateCursor(b)},rightMove:function(){var a=this.parentComponent.getCursorRecord();a=c.call(this,a),a&&this.parentComponent.updateCursor(a)}})}},b[28]={value:function(){var a=b.r(20),c=b.r(27),d=b.r(26),e=b.r(29).cursorCharacter,f=b.r(11),g=a.createClass("SyntaxComponenet",{constructor:function(a){this.kfEditor=a,this.record={cursor:{group:null,startOffset:-1,endOffset:-1}},this.components={},this.objTree=null,this.initComponents(),this.initServices(),this.initCommands()},initComponents:function(){this.components.move=new c(this,this.kfEditor),this.components.delete=new d(this,this.kfEditor)},initServices:function(){this.kfEditor.registerService("syntax.update.objtree",this,{updateObjTree:this.updateObjTree}),this.kfEditor.registerService("syntax.get.objtree",this,{getObjectTree:this.getObjectTree}),this.kfEditor.registerService("syntax.get.group.object",this,{getGroupObject:this.getGroupObject}),this.kfEditor.registerService("syntax.is.root.node",this,{isRootNode:this.isRootNode}),this.kfEditor.registerService("syntax.is.group.node",this,{isGroupNode:this.isGroupNode}),this.kfEditor.registerService("syntax.is.virtual.node",this,{isVirtualNode:this.isVirtualNode}),this.kfEditor.registerService("syntax.is.placeholder.node",this,{isPlaceholder:this.isPlaceholder}),this.kfEditor.registerService("syntax.is.select.placeholder",this,{isSelectPlaceholder:this.isSelectPlaceholder}),this.kfEditor.registerService("syntax.has.root.placeholder",this,{hasRootplaceholder:this.hasRootplaceholder}),this.kfEditor.registerService("syntax.valid.brackets",this,{isBrackets:this.isBrackets}),this.kfEditor.registerService("syntax.get.group.content",this,{getGroupContent:this.getGroupContent}),this.kfEditor.registerService("syntax.get.root.group.info",this,{getRootGroupInfo:this.getRootGroupInfo}),this.kfEditor.registerService("syntax.get.root",this,{getRootObject:this.getRootObject}),this.kfEditor.registerService("syntax.update.record.cursor",this,{updateCursor:this.updateCursor}),this.kfEditor.registerService("syntax.update.selection",this,{updateSelection:this.updateSelection}),this.kfEditor.registerService("syntax.get.record.cursor",this,{getCursorRecord:this.getCursorRecord}),this.kfEditor.registerService("syntax.has.cursor.info",this,{hasCursorInfo:this.hasCursorInfo}),this.kfEditor.registerService("syntax.serialization",this,{serialization:this.serialization}),this.kfEditor.registerService("syntax.cursor.move.left",this,{leftMove:this.leftMove}),this.kfEditor.registerService("syntax.cursor.move.right",this,{rightMove:this.rightMove}),this.kfEditor.registerService("syntax.delete.group",this,{deleteGroup:this.deleteGroup})},initCommands:function(){this.kfEditor.registerCommand("get.source",this,this.getSource),this.kfEditor.registerCommand("content.is.empty",this,this.isEmpty)},updateObjTree:function(a){var b=a.select;b&&b.groupId&&this.updateCursor(b.groupId,b.startOffset,b.endOffset),this.objTree=a},hasCursorInfo:function(){return null!==this.record.cursor.group},isRootNode:function(a){return this.objTree.mapping.root.strGroup.attr.id===a},isGroupNode:function(a){var b=this.objTree.mapping[a].strGroup.attr["data-type"];return b===f.GROUP||b===f.VIRTUAL},isVirtualNode:function(a){return this.objTree.mapping[a].strGroup.attr["data-type"]===f.VIRTUAL},isPlaceholder:function(a){var b=this.objTree.mapping[a];return b?(b=b.objGroup.node,"Placeholder"===b.getAttribute("data-flag")):!1},isBrackets:function(a){return!!this.objTree.mapping[a].objGroup.node.getAttribute("data-brackets")},hasRootplaceholder:function(){return"placeholder"===this.objTree.mapping.root.strGroup.operand[0].name},isSelectPlaceholder:function(){var a=this.record.cursor,b=null;return a.endOffset-a.startOffset!==1?!1:(b=this.getGroupContent(a.groupId),this.isPlaceholder(b.content[a.startOffset].id)?!0:!1)},isLeafTree:function(a){return"string"==typeof a},isRootTree:function(a){return a.attr&&a.attr["data-root"]},getObjectTree:function(){return this.objTree},getGroupObject:function(a){return this.objTree.mapping[a].objGroup||null},getCursorRecord:function(){return a.Utils.extend({},this.record.cursor)||null},getGroupContent:function(b){var c=this.objTree.mapping[b],d=[],e=c.objGroup.operands,f=e.length-1,g="rtl"!==c.strGroup.traversal;return a.Utils.each(e,function(a,b){g?d.push(a.node):d[f-b]=a.node}),{id:b,traversal:c.strGroup.traversal||"ltr",groupObj:c.objGroup.node,content:d}},getRootObject:function(){return this.objTree.mapping.root.objGroup},getRootGroupInfo:function(){var a=this.objTree.mapping.root.strGroup.attr.id;return this.getGroupContent(a)},updateSelection:function(a){var b=this.objTree.mapping[a.id],c=b.strGroup,d=null,f=null,g=null,h=-1,i=-1;if(d=a,f=b,"combination"===c.name)this.record.cursor={groupId:d.id,startOffset:0,endOffset:c.operand.length},c.operand.unshift(e),c.operand.push(e);else{for(;"combination"!==f.strGroup.name||1===d.content;)a=d,b=f,d=this.kfEditor.requestService("position.get.parent.group",b.objGroup.node),f=this.objTree.mapping[d.id];var j=[].indexOf.call(d.content,a.groupObj);this.record.cursor={groupId:d.id,startOffset:j,endOffset:j+1},f.strGroup.operand.splice(j+1,0,e),f.strGroup.operand.splice(j,0,e)}return g=this.kfEditor.requestService("parser.latex.serialization",this.objTree.parsedTree),h=g.indexOf(e),g=g.replace(e,""),i=g.indexOf(e),f.strGroup.operand.splice(this.record.cursor.startOffset,1),f.strGroup.operand.splice(this.record.cursor.endOffset,1),{str:g,startOffset:h,endOffset:i}},getSource:function(){return this.serialization().str.replace(e,"").replace(e,"")},isEmpty:function(){return this.hasRootplaceholder()},serialization:function(){var a=this.record.cursor,b=this.objTree.mapping[a.groupId],c=b.strGroup,d=null,f=-1,g=-1;return f=Math.min(a.endOffset,a.startOffset),g=Math.max(a.endOffset,a.startOffset),c.operand.splice(g,0,e),c.operand.splice(f,0,e),g+=1,d=this.kfEditor.requestService("parser.latex.serialization",this.objTree.parsedTree),c.operand.splice(g,1),c.operand.splice(f,1),f=d.indexOf(e),a.startOffset===a.endOffset&&(d=d.replace(e,"")),g=d.lastIndexOf(e),{str:d,startOffset:f,endOffset:g}},updateCursor:function(a,b,c){var d=null;1===arguments.length&&(c=a.endOffset,b=a.startOffset,a=a.groupId),void 0===c&&(c=b),b>c&&(d=c,c=b,b=d),this.record.cursor={groupId:a,startOffset:b,endOffset:c}},leftMove:function(){this.components.move.leftMove()},rightMove:function(){this.components.move.rightMove()},deleteGroup:function(){return this.components.delete.deleteGroup()},insertSubtree:function(a){var b=this.record.cursor,c=0,d=0,e=null,f=0;this.isPlaceholder(b.groupId)?this.replaceTree(a):(c=Math.min(b.startOffset,b.endOffset),d=Math.max(b.startOffset,b.endOffset),f=d-c,e=this.objTree.mapping[b.groupId].strGroup,e.operand.splice(c,f,a),b.startOffset+=1,b.endOffset=b.startOffset)},replaceTree:function(a){var b=this.record.cursor,c=this.objTree.mapping[b.groupId].objGroup.node,d=this.kfEditor.requestService("position.get.parent.info",c),e=this.objTree.mapping[d.group.id].strGroup;e.operand[d.index]=a,b.groupId=d.group.id,b.startOffset=d.index+1,b.endOffset=d.index+1}});return g}},b[29]={value:function(){return{cursorCharacter:"\uf155",rootPlaceholder:{color:"#666",content:"\u5728\u6b64\u5904\u952e\u5165\u516c\u5f0f",fontsize:16},scrollbar:{padding:5,step:150}}}},b[30]={value:function(){return{"\\pm":{x:5,y:0},"\\infty":{x:42,y:0},"=":{x:79,y:0},"\\sim":{x:116,y:0},"\\times":{x:153,y:0},"\\div":{x:190,y:0},"!":{x:227,y:0},"<":{x:264,y:0},"\\ll":{x:301,y:0},">":{x:338,y:0},"\\gg":{x:375,y:0},"\\leq":{x:412,y:0},"\\geq":{x:449,y:0},"\\mp":{x:486,y:0},"\\cong":{x:523,y:0},"\\equiv":{x:560,y:0},"\\propto":{x:597,y:0},"\\approx":{x:634,y:0},"\\forall":{x:671,y:0},"\\partial":{x:708,y:0},"\\surd":{x:745,y:0},"\\cup":{x:782,y:0},"\\cap":{x:819,y:0},"\\varnothing":{x:856,y:0},"%":{x:893,y:0},"\\circ":{x:930,y:0},"\\exists":{x:967,y:0},"\\nexists":{x:1004,y:0},"\\in":{x:1041,y:0},"\\ni":{x:1078,y:0},"\\gets":{x:5,y:37},"\\uparrow":{x:42,y:37},"\\to":{x:79,y:37},"\\downarrow":{x:116,y:37},"\\leftrightarrow":{x:153,y:37},"\\therefore":{x:190,y:37},"\\because":{x:227,y:37},"+":{x:264,y:37},"-":{x:301,y:37},"\\neg":{x:338,y:37},"\\ast":{x:375,y:37},"\\cdot":{x:412,y:37},"\\vdots":{x:449,y:37},"\\ddots":{x:486,y:37},"\\aleph":{x:523,y:37},"\\beth":{x:560,y:37},"\\blacksquare":{x:597,y:37},"\\alpha":{x:634,y:37},"\\beta":{x:671,y:37},"\\gamma":{x:708,y:37},"\\delta":{x:745,y:37},"\\epsilon":{x:782,y:37},"\\zeta":{x:819,y:37},"\\eta":{x:856,y:37},"\\theta":{x:893,y:37},"\\iota":{x:930,y:37},"\\kappa":{x:967,y:37},"\\lambda":{x:1004,y:37},"\\mu":{x:1041,y:37},"\\nu":{x:1078,y:37},"\\xi":{x:5,y:74},"\\omicron":{x:42,y:74},"\\pi":{x:79,y:74},"\\rho":{x:116,y:74},"\\sigma":{x:153,y:74},"\\tau":{x:190,y:74},"\\upsilon":{x:227,y:74},"\\phi":{x:264,y:74},"\\chi":{x:301,y:74},"\\psi":{x:338,y:74},"\\omega":{x:375,y:74},"\\Alpha":{x:412,y:74},"\\Beta":{x:449,y:74},"\\Gamma":{x:486,y:74},"\\Delta":{x:523,y:74},"\\Epsilon":{x:560,y:74},"\\Zeta":{x:597,y:74},"\\Eta":{x:634,y:74},"\\Theta":{x:671,y:74},"\\Iota":{x:708,y:74},"\\Kappa":{x:745,y:74},"\\Lambda":{x:782,y:74},"\\Mu":{x:819,y:74},"\\Nu":{x:856,y:74},"\\Xi":{x:893,y:74},"\\Omicron":{x:930,y:74},"\\Pi":{x:967,y:74},"\\Rho":{x:1004,y:74},"\\Sigma":{x:1041,y:74},"\\Tau":{x:1078,y:74},"\\Upsilon":{x:5,y:111},"\\Phi":{x:42,y:111},"\\Chi":{x:79,y:111},"\\Psi":{x:116,y:111},"\\Omega":{x:153,y:111},"\\digamma":{x:190,y:111},"\\varepsilon":{x:227,y:111},"\\varkappa":{x:264,y:111},"\\varphi":{x:301,y:111},"\\varpi":{x:338,y:111},"\\varrho":{x:375,y:111},"\\varsigma":{x:412,y:111},"\\vartheta":{x:449,y:111},"\\neq":{x:486,y:111},"\\nless":{x:523,y:111},"\\ngtr":{x:560,y:111},"\\nleq":{x:597,y:111},"\\ngeq":{x:634,y:111},"\\nsim":{x:671,y:111},"\\lneqq":{x:708,y:111},"\\gneqq":{x:745,y:111},"\\nprec":{x:782,y:111},"\\nsucc":{x:819,y:111},"\\notin":{x:856,y:111},"\\nsubseteq":{x:893,y:111},"\\nsupseteq":{x:930,y:111},"\\subsetneq":{x:967,y:111},"\\supsetneq":{x:1004,y:111},"\\lnsim":{x:1041,y:111},"\\gnsim":{x:1078,y:111},"\\precnsim":{x:5,y:148},"\\succnsim":{x:42,y:148},"\\ntriangleleft":{x:79,y:148},"\\ntriangleright":{x:116,y:148},"\\ntrianglelefteq":{x:153,y:148},"\\ntrianglerighteq":{x:190,y:148},"\\nmid":{x:227,y:148},"\\nparallel":{x:264,y:148},"\\nvdash":{x:301,y:148},"\\nVdash":{x:338,y:148},"\\nvDash":{x:375,y:148},"\\nVDash":{x:412,y:148},"\\daleth":{x:449,y:148},"\\gimel":{x:486,y:148},"\\complement":{x:523,y:148},"\\ell":{x:560,y:148},"\\eth":{x:597,y:148},"\\hbar":{x:634,y:148},"\\hslash":{x:671,y:148},"\\mho":{x:708,y:148},"\\wp":{x:745,y:148},"\\circledS":{x:782,y:148},"\\Bbbk":{x:819,y:148},"\\Finv":{x:856,y:148},"\\Game":{x:893,y:148},"\\Im":{x:930,y:148},"\\Re":{x:967,y:148},"\\updownarrow":{x:1004,y:148},"\\Leftarrow":{x:1041,y:148},"\\Rightarrow":{x:1078,y:148},"\\Uparrow":{x:5,y:185},"\\Downarrow":{x:42,y:185},"\\Leftrightarrow":{x:79,y:185},"\\Updownarrow":{x:116,y:185},"\\longleftarrow":{x:153,y:185},"\\longrightarrow":{x:190,y:185},"\\longleftrightarrow":{x:227,y:185},"\\Longleftarrow":{x:264,y:185},"\\Longrightarrow":{x:301,y:185},"\\Longleftrightarrow":{x:338,y:185},"\\nearrow":{x:375,y:185},"\\nwarrow":{x:412,y:185},"\\searrow":{x:449,y:185},"\\swarrow":{x:486,y:185},"\\nleftarrow":{x:523,y:185},"\\nrightarrow":{x:560,y:185},"\\nLeftarrow":{x:597,y:185},"\\nRightarrow":{x:634,y:185},"\\nLeftrightarrow":{x:671,y:185},"\\leftharpoonup":{x:708,y:185},"\\leftharpoondown":{x:745,y:185},"\\rightharpoonup":{x:782,y:185},"\\rightharpoondown":{x:819,y:185},"\\upharpoonleft":{x:856,y:185},"\\upharpoonright":{x:893,y:185},"\\downharpoonleft":{x:930,y:185},"\\downharpoonright":{x:967,y:185},"\\leftrightharpoons":{x:1004,y:185},"\\rightleftharpoons":{x:1041,y:185},"\\leftleftarrows":{x:1078,y:185},"\\rightrightarrows":{x:5,y:222},"\\upuparrows":{x:42,y:222},"\\downdownarrows":{x:79,y:222},"\\leftrightarrows":{x:116,y:222},"\\rightleftarrows":{x:153,y:222},"\\looparrowleft":{x:190,y:222},"\\looparrowright":{x:227,y:222},"\\leftarrowtail":{x:264,y:222},"\\rightarrowtail":{x:301,y:222},"\\Lsh":{x:338,y:222},"\\Rsh":{x:375,y:222},"\\Lleftarrow":{x:412,y:222},"\\Rrightarrow":{x:449,y:222},"\\curvearrowleft":{x:486,y:222},"\\curvearrowright":{x:523,y:222},"\\circlearrowleft":{x:560,y:222},"\\circlearrowright":{x:597,y:222},"\\multimap":{x:634,y:222},"\\leftrightsquigarrow":{x:671,y:222},"\\twoheadleftarrow":{x:708,y:222},"\\twoheadrightarrow":{x:745,y:222},"\\rightsquigarrow":{x:782,y:222},"\\mathcal{A}":{x:819,y:222},"\\mathcal{B}":{x:856,y:222},"\\mathcal{C}":{x:893,y:222},"\\mathcal{D}":{x:930,y:222},"\\mathcal{E}":{x:967,y:222},"\\mathcal{F}":{x:1004,y:222},"\\mathcal{G}":{x:1041,y:222},"\\mathcal{H}":{x:1078,y:222},"\\mathcal{I}":{x:5,y:259},"\\mathcal{J}":{x:42,y:259},"\\mathcal{K}":{x:79,y:259},"\\mathcal{L}":{x:116,y:259},"\\mathcal{M}":{x:153,y:259},"\\mathcal{N}":{x:190,y:259},"\\mathcal{O}":{x:227,y:259},"\\mathcal{P}":{x:264,y:259},"\\mathcal{Q}":{x:301,y:259},"\\mathcal{R}":{x:338,y:259},"\\mathcal{S}":{x:375,y:259},"\\mathcal{T}":{x:412,y:259},"\\mathcal{U}":{x:449,y:259},"\\mathcal{V}":{x:486,y:259},"\\mathcal{W}":{x:523,y:259},"\\mathcal{X}":{x:560,y:259},"\\mathcal{Y}":{x:597,y:259},"\\mathcal{Z}":{x:634,y:259},"\\mathfrak{A}":{x:671,y:259},"\\mathfrak{B}":{x:708,y:259},"\\mathfrak{C}":{x:745,y:259},"\\mathfrak{D}":{x:782,y:259},"\\mathfrak{E}":{x:819,y:259},"\\mathfrak{F}":{x:856,y:259},"\\mathfrak{G}":{x:893,y:259},"\\mathfrak{H}":{x:930,y:259},"\\mathfrak{I}":{x:967,y:259},"\\mathfrak{J}":{x:1004,y:259},"\\mathfrak{K}":{x:1041,y:259},"\\mathfrak{L}":{x:1078,y:259},"\\mathfrak{M}":{x:5,y:296},"\\mathfrak{N}":{x:42,y:296},"\\mathfrak{O}":{x:79,y:296},"\\mathfrak{P}":{x:116,y:296},"\\mathfrak{Q}":{x:153,y:296},"\\mathfrak{R}":{x:190,y:296},"\\mathfrak{S}":{x:227,y:296},"\\mathfrak{T}":{x:264,y:296},"\\mathfrak{U}":{x:301,y:296},"\\mathfrak{V}":{x:338,y:296},"\\mathfrak{W}":{x:375,y:296},"\\mathfrak{X}":{x:412,y:296},"\\mathfrak{Y}":{x:449,y:296},"\\mathfrak{Z}":{x:486,y:296},"\\mathfrak{a}":{x:523,y:296},"\\mathfrak{b}":{x:560,y:296},"\\mathfrak{c}":{x:597,y:296},"\\mathfrak{d}":{x:634,y:296},"\\mathfrak{e}":{x:671,y:296},"\\mathfrak{f}":{x:708,y:296},"\\mathfrak{g}":{x:745,y:296},"\\mathfrak{h}":{x:782,y:296},"\\mathfrak{i}":{x:819,y:296},"\\mathfrak{j}":{x:856,y:296},"\\mathfrak{k}":{x:893,y:296},"\\mathfrak{l}":{x:930,y:296},"\\mathfrak{m}":{x:967,y:296},"\\mathfrak{n}":{x:1004,y:296},"\\mathfrak{o}":{x:1041,y:296},"\\mathfrak{p}":{x:1078,y:296},"\\mathfrak{q}":{x:5,y:333},"\\mathfrak{r}":{x:42,y:333},"\\mathfrak{s}":{x:79,y:333},"\\mathfrak{t}":{x:116,y:333},"\\mathfrak{u}":{x:153,y:333},"\\mathfrak{v}":{x:190,y:333},"\\mathfrak{w}":{x:227,y:333},"\\mathfrak{x}":{x:264,y:333},"\\mathfrak{y}":{x:301,y:333},"\\mathfrak{z}":{x:338,y:333},"\\mathbb{A}":{x:375,y:333},"\\mathbb{B}":{x:412,y:333},"\\mathbb{C}":{x:449,y:333},"\\mathbb{D}":{x:486,y:333},"\\mathbb{E}":{x:523,y:333},"\\mathbb{F}":{x:560,y:333},"\\mathbb{G}":{x:597,y:333},"\\mathbb{H}":{x:634,y:333},"\\mathbb{I}":{x:671,y:333},"\\mathbb{J}":{x:708,y:333},"\\mathbb{K}":{x:745,y:333},"\\mathbb{L}":{x:782,y:333},"\\mathbb{M}":{x:819,y:333},"\\mathbb{N}":{x:856,y:333},"\\mathbb{O}":{x:893,y:333},"\\mathbb{P}":{x:930,y:333},"\\mathbb{Q}":{x:967,y:333},"\\mathbb{R}":{x:1004,y:333},"\\mathbb{S}":{x:1041,y:333},"\\mathbb{T}":{x:1078,y:333},"\\mathbb{U}":{x:5,y:370},"\\mathbb{V}":{x:42,y:370},"\\mathbb{W}":{x:79,y:370},"\\mathbb{X}":{x:116,y:370},"\\mathbb{Y}":{x:153,y:370},"\\mathbb{Z}":{x:190,y:370},"\\mathrm{A}":{x:227,y:370},"\\mathrm{B}":{x:264,y:370},"\\mathrm{C}":{x:301,y:370},"\\mathrm{D}":{x:338,y:370},"\\mathrm{E}":{x:375,y:370},"\\mathrm{F}":{x:412,y:370},"\\mathrm{G}":{x:449,y:370},"\\mathrm{H}":{x:486,y:370},"\\mathrm{I}":{x:523,y:370},"\\mathrm{J}":{x:560,y:370},"\\mathrm{K}":{x:597,y:370},"\\mathrm{L}":{x:634,y:370},"\\mathrm{M}":{x:671,y:370},"\\mathrm{N}":{x:708,y:370},"\\mathrm{O}":{x:745,y:370},"\\mathrm{P}":{x:782,y:370},"\\mathrm{Q}":{x:819,y:370},"\\mathrm{R}":{x:856,y:370},"\\mathrm{S}":{x:893,y:370},"\\mathrm{T}":{x:930,y:370},"\\mathrm{U}":{x:967,y:370},"\\mathrm{V}":{x:1004,y:370},"\\mathrm{W}":{x:1041,y:370},"\\mathrm{X}":{x:1078,y:370},"\\mathrm{Y}":{x:5,y:407},"\\mathrm{Z}":{x:42,y:407},"\\mathrm{a}":{x:79,y:407},"\\mathrm{b}":{x:116,y:407},"\\mathrm{c}":{x:153,y:407},"\\mathrm{d}":{x:190,y:407},"\\mathrm{e}":{x:227,y:407},"\\mathrm{f}":{x:264,y:407},"\\mathrm{g}":{x:301,y:407},"\\mathrm{h}":{x:338,y:407},"\\mathrm{i}":{x:375,y:407},"\\mathrm{j}":{x:412,y:407},"\\mathrm{k}":{x:449,y:407},"\\mathrm{l}":{x:486,y:407},"\\mathrm{m}":{x:523,y:407},"\\mathrm{n}":{x:560,y:407},"\\mathrm{o}":{x:597,y:407},"\\mathrm{p}":{x:634,y:407},"\\mathrm{q}":{x:671,y:407},"\\mathrm{r}":{x:708,y:407},"\\mathrm{s}":{x:745,y:407},"\\mathrm{t}":{x:782,y:407},"\\mathrm{u}":{x:819,y:407},"\\mathrm{v}":{x:856,y:407},"\\mathrm{w}":{x:893,y:407},"\\mathrm{x}":{x:930,y:407},"\\mathrm{y}":{x:967,y:407},"\\mathrm{z}":{x:1004,y:407}}}},b[31]={value:function(){var a=b.r(4),c=b.r(20),d={min:1,max:2},e=c.createClass("ScrollZoomController",{constructor:function(b,c,e,f){this.kfEditor=c,this.target=e,this.zoom=1,this.step=.05,this.options=a.extend({},d,f),this.initEvent()},initEvent:function(){var b=this.kfEditor,c=this,d=this.options.min,e=this.options.max,f=this.step;a.addEvent(this.target,"mousewheel",function(a){a.preventDefault(),a.wheelDelta<0?c.zoom-=c.zoom*f:c.zoom+=c.zoom*f,c.zoom=Math.max(c.zoom,d),c.zoom=Math.min(c.zoom,e),b.requestService("render.set.canvas.zoom",c.zoom)})}});return e}},b[32]={value:function(){return{VIEW_STATE:{NO_OVERFLOW:0,OVERFLOW:1},scrollbar:{step:50,thumbMinSize:50}}}},b[33]={value:function(){return{"x=\\frac {-b\\pm\\sqrt {b^2-4ac}}{2a}":{pos:{x:0,y:0},size:{width:310,height:73}},"{\\placeholder/\\placeholder}":{pos:{x:315,y:0},size:{width:56,height:75}},"\\frac \\placeholder\\placeholder":{pos:{x:376,y:0},size:{width:56,height:75}},"a^2+b^2=c^2":{pos:{x:437,y:0},size:{width:310,height:73}},"{\\left(x+a\\right)}^2=\\sum^n_{k=0}{\\left(^n_k\\right)x^ka^{n-k}}":{pos:{x:752,y:0},size:{width:310,height:73}},"\\frac {dy}{dx}":{pos:{x:1067,y:0},size:{width:56,height:75}},"\\frac {\\Delta y}{\\Delta x}":{pos:{x:1128,y:0},size:{width:56,height:75}},"\\frac {\\delta y}{\\delta x}":{pos:{x:1189,y:0},size:{width:56,height:75}},"\\frac \\pi 2":{pos:{x:1250,y:0},size:{width:56,height:75}},"\\placeholder^\\placeholder":{pos:{x:1311,y:0},size:{width:56,height:75}},"\\placeholder^\\placeholder_\\placeholder":{pos:{x:1372,y:0},size:{width:56,height:75}},"\\placeholder_\\placeholder":{pos:{x:1433,y:0},size:{width:56,height:75}},"{^\\placeholder_\\placeholder\\placeholder}":{pos:{x:1494,y:0},size:{width:56,height:75}},"e^{-i\\omega t}":{pos:{x:1555,y:0},size:{width:56,height:75}},"x^2":{pos:{x:1616,y:0},size:{width:56,height:75}},"{}^n_1Y":{pos:{x:1677,y:0},size:{width:56,height:75}},"\\sqrt \\placeholder":{pos:{x:1738,y:0},size:{width:56,height:75}},"\\sqrt [\\placeholder] \\placeholder":{pos:{x:1799,y:0},size:{width:56,height:75}},"\\sqrt [2] \\placeholder":{pos:{x:1860,y:0},size:{width:56,height:75}},"\\sqrt [3] \\placeholder":{pos:{x:1921,y:0},size:{width:56,height:75}},"\\frac {-b\\pm\\sqrt{b^2-4ac}}{2a}":{pos:{x:1982,y:0},size:{width:137,height:75}},"\\sqrt {a^2+b^2}":{pos:{x:2124,y:0},size:{width:137,height:75}},"\\int \\placeholder":{pos:{x:2266,y:0},size:{width:56,height:75}},"\\int^\\placeholder_\\placeholder\\placeholder":{pos:{x:2327,y:0},size:{width:56,height:75}},"\\iint\\placeholder":{pos:{x:2388,y:0},size:{width:56,height:75}},"\\iint^\\placeholder_\\placeholder\\placeholder":{pos:{x:2449,y:0},size:{width:56,height:75}},"\\iiint\\placeholder":{pos:{x:2510,y:0},size:{width:56,height:75}},"\\iiint^\\placeholder_\\placeholder\\placeholder":{pos:{x:2571,y:0},size:{width:56,height:75}},"\\sum\\placeholder":{pos:{x:2632,y:0},size:{width:56,height:75}},"\\sum^\\placeholder_\\placeholder\\placeholder":{pos:{x:2693,y:0},size:{width:56,height:75}},"\\sum_\\placeholder\\placeholder":{pos:{x:2754,y:0},size:{width:56,height:75}},"\\left(\\placeholder\\right)":{pos:{x:2815,y:0},size:{width:56,height:75}},"\\left[\\placeholder\\right]":{pos:{x:2876,y:0},size:{width:56,height:75}},"\\left\\{\\placeholder\\right\\}":{pos:{x:2937,y:0},size:{width:56,height:75}},"\\left|\\placeholder\\right|":{pos:{x:2998,y:0},size:{width:56,height:75}},"\\sin\\placeholder":{pos:{x:3059,y:0},size:{width:56,height:75}},"\\cos\\placeholder":{pos:{x:3120,y:0},size:{width:56,height:75}},"\\tan\\placeholder":{pos:{x:3181,y:0},size:{width:56,height:75}},"\\csc\\placeholder":{pos:{x:3242,y:0},size:{width:56,height:75}},"\\sec\\placeholder":{pos:{x:3303,y:0},size:{width:56,height:75}},"\\cot\\placeholder":{pos:{x:3364,y:0},size:{width:56,height:75}},"\\sin\\theta":{pos:{x:3425,y:0},size:{width:56,height:75}},"\\cos{2x}":{pos:{x:3486,y:0},size:{width:56,height:75}},"\\tan\\theta=\\frac {\\sin\\theta}{\\cos\\theta}":{pos:{x:3547,y:0},size:{width:137,height:75}}}}},b[34]={value:function(){function a(a){var b=[],c=a.path,d=a.values;return e.Utils.each(d,function(a){var d=a,e=a;"string"!=typeof a?(d=a.img,e=a.key):e="\\"+a,b.push({item:{show:""+c+d.toLowerCase()+".png",val:e}})}),b}var c=b.r(41),d=b.r(40),e=b.r(20),f=[{type:c.DRAPDOWN_BOX,options:{button:{label:"\u9884\u8bbe
",className:"yushe-btn",icon:"assets/images/toolbar/button/fx.png",iconSize:{w:40}},box:{width:367,group:[{title:"\u9884\u8bbe\u516c\u5f0f",items:[{title:"\u9884\u8bbe\u516c\u5f0f",content:[{label:"\u4e8c\u6b21\u516c\u5f0f",item:{show:"assets/images/toolbar/ys/1.png",val:"x=\\frac {-b\\pm\\sqrt {b^2-4ac}}{2a}"}},{label:"\u4e8c\u9879\u5f0f\u5b9a\u7406",item:{show:"assets/images/toolbar/ys/2.png",val:"{\\left(x+a\\right)}^2=\\sum^n_{k=0}{\\left(^n_k\\right)x^ka^{n-k}}"}},{label:"\u52fe\u80a1\u5b9a\u7406",item:{show:"assets/images/toolbar/ys/3.png",val:"a^2+b^2=c^2"}}]}]}]}}},{type:c.DELIMITER},{type:c.AREA,options:{box:{fixOffset:!0,width:527,type:d.OVERLAP,group:[{title:"\u57fa\u7840\u6570\u5b66",items:[]},{title:"\u5e0c\u814a\u5b57\u6bcd",items:[]},{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",items:[]},{title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",items:[]},{title:"\u7bad\u5934",items:[]},{title:"\u624b\u5199\u4f53",items:[]}]}}},{type:c.DELIMITER},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5206\u6570
",icon:"assets/images/toolbar/button/frac.png"},box:{width:332,group:[{title:"\u5206\u6570",items:[{title:"\u5206\u6570",content:[{item:{show:"assets/images/toolbar/frac/1.png",val:"\\frac \\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/frac/2.png",val:"{\\placeholder/\\placeholder}"}}]},{title:"\u5e38\u7528\u5206\u6570",content:[{item:{show:"assets/images/toolbar/frac/c1.png",val:"\\frac {dy}{dx}"}},{item:{show:"assets/images/toolbar/frac/c2.png",val:"\\frac {\\Delta y}{\\Delta x}"}},{item:{show:"assets/images/toolbar/frac/c4.png",val:"\\frac {\\delta y}{\\delta x}"}},{item:{show:"assets/images/toolbar/frac/c5.png",val:"\\frac \\pi 2"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u4e0a\u4e0b\u6807
",icon:"assets/images/toolbar/button/script.png"},box:{width:332,group:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",items:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{show:"assets/images/toolbar/script/1.png",val:"\\placeholder^\\placeholder"}},{item:{show:"assets/images/toolbar/script/2.png",val:"\\placeholder_\\placeholder"}},{item:{show:"assets/images/toolbar/script/3.png",val:"\\placeholder^\\placeholder_\\placeholder"}},{item:{show:"assets/images/toolbar/script/4.png",val:"{^\\placeholder_\\placeholder\\placeholder}"}}]},{title:"\u5e38\u7528\u7684\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{show:"assets/images/toolbar/script/c1.png",val:"e^{-i\\omega t}"}},{item:{show:"assets/images/toolbar/script/c2.png",val:"x^2"}},{item:{show:"assets/images/toolbar/script/c3.png",val:"{}^n_1Y"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u6839\u5f0f
",icon:"assets/images/toolbar/button/sqrt.png"},box:{width:342,group:[{title:"\u6839\u5f0f",items:[{title:"\u6839\u5f0f",content:[{item:{show:"assets/images/toolbar/sqrt/1.png",val:"\\sqrt \\placeholder"}},{item:{show:"assets/images/toolbar/sqrt/2.png",val:"\\sqrt [\\placeholder] \\placeholder"}},{item:{show:"assets/images/toolbar/sqrt/3.png",val:"\\sqrt [2] \\placeholder"}},{item:{show:"assets/images/toolbar/sqrt/4.png",val:"\\sqrt [3] \\placeholder"}}]},{title:"\u5e38\u7528\u6839\u5f0f",content:[{item:{show:"assets/images/toolbar/sqrt/c1.png",val:"\\frac {-b\\pm\\sqrt{b^2-4ac}}{2a}"}},{item:{show:"assets/images/toolbar/sqrt/c2.png",val:"\\sqrt {a^2+b^2}"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u79ef\u5206
",icon:"assets/images/toolbar/button/int.png"},box:{width:332,group:[{title:"\u79ef\u5206",items:[{title:"\u79ef\u5206",content:[{item:{show:"assets/images/toolbar/int/1.png",val:"\\int \\placeholder"}},{item:{show:"assets/images/toolbar/int/2.png",val:"\\int^\\placeholder_\\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/int/3.png",val:"\\iint\\placeholder"}},{item:{show:"assets/images/toolbar/int/4.png",val:"\\iint^\\placeholder_\\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/int/5.png",val:"\\iiint\\placeholder"}},{item:{show:"assets/images/toolbar/int/6.png",val:"\\iiint^\\placeholder_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5927\u578b
\u8fd0\u7b97\u7b26",icon:"assets/images/toolbar/button/sum.png"},box:{width:332,group:[{title:"\u6c42\u548c",items:[{title:"\u6c42\u548c",content:[{item:{show:"assets/images/toolbar/large/1.png",val:"\\sum\\placeholder"}},{item:{show:"assets/images/toolbar/large/2.png",val:"\\sum^\\placeholder_\\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/large/3.png",val:"\\sum_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u62ec\u53f7
",icon:"assets/images/toolbar/button/brackets.png"},box:{width:332,group:[{title:"\u65b9\u62ec\u53f7",items:[{title:"\u65b9\u62ec\u53f7",content:[{item:{show:"assets/images/toolbar/brackets/1.png",val:"\\left(\\placeholder\\right)"}},{item:{show:"assets/images/toolbar/brackets/2.png",val:"\\left[\\placeholder\\right]"}},{item:{show:"assets/images/toolbar/brackets/3.png",val:"\\left\\{\\placeholder\\right\\}"}},{item:{show:"assets/images/toolbar/brackets/4.png",val:"\\left|\\placeholder\\right|"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u51fd\u6570
",icon:"assets/images/toolbar/button/sin.png"},box:{width:340,group:[{title:"\u51fd\u6570",items:[{title:"\u4e09\u89d2\u51fd\u6570",content:[{item:{show:"assets/images/toolbar/func/1.png",val:"\\sin\\placeholder"}},{item:{show:"assets/images/toolbar/func/2.png",val:"\\cos\\placeholder"}},{item:{show:"assets/images/toolbar/func/3.png",val:"\\tan\\placeholder"}},{item:{show:"assets/images/toolbar/func/4.png",val:"\\csc\\placeholder"}},{item:{show:"assets/images/toolbar/func/5.png",val:"\\sec\\placeholder"}},{item:{show:"assets/images/toolbar/func/6.png",val:"\\cot\\placeholder"}}]},{title:"\u5e38\u7528\u51fd\u6570",content:[{item:{show:"assets/images/toolbar/func/c1.png",val:"\\sin\\theta"}},{item:{show:"assets/images/toolbar/func/c2.png",val:"\\sin{2x}"}},{item:{show:"assets/images/toolbar/func/c3.png",val:"\\tan\\theta=\\frac {\\sin\\theta}{\\cos\\theta}"}}]}]}]}}}]; +return function(){var b=["pm","infty",{key:"=",img:"eq"},"sim","times","div",{key:"!",img:"tanhao"},{key:"<",img:"lt"},"ll",{key:">",img:"gt"},"gg","leq","geq","mp","cong","equiv","propto","approx","forall","partial","surd","cup","cap","varnothing",{key:"%",img:"baifenhao"},"circ","exists","nexists","in","ni","gets","uparrow","to","downarrow","leftrightarrow","therefore","because",{key:"+",img:"plus"},{key:"-",img:"minus"},"neg","ast","cdot","vdots","ddots","aleph","beth","blacksquare"],c=f[2].options.box.group[0].items;c.push({title:"\u57fa\u7840\u6570\u5b66",content:a({path:"assets/images/toolbar/char/math/",values:b})})}(),function(){var b=[{title:"\u5c0f\u5199",values:["alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigma","tau","upsilon","phi","chi","psi","omega"]},{title:"\u5927\u5199",values:["Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"]},{title:"\u53d8\u4f53",values:["digamma","varepsilon","varkappa","varphi","varpi","varrho","varsigma","vartheta"]}],c=f[2].options.box.group[1].items;c.push({title:b[0].title,content:a({path:"assets/images/toolbar/char/greek/lower/",values:b[0].values})}),c.push({title:b[1].title,content:a({path:"assets/images/toolbar/char/greek/upper/",values:b[1].values})}),c.push({title:b[2].title,content:a({path:"assets/images/toolbar/char/greek/misc/",values:b[2].values})})}(),function(){var b=[{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",values:["neq","nless","ngtr","nleq","ngeq","nsim","lneqq","gneqq","nprec","nsucc","notin","nsubseteq","nsupseteq","subsetneq","supsetneq","lnsim","gnsim","precnsim","succnsim","ntriangleleft","ntriangleright","ntrianglelefteq","ntrianglerighteq","nmid","nparallel","nvdash",{key:"\\nVdash",img:"nvdash-1"},{key:"\\nvDash",img:"nvdash-2"},{key:"\\nVDash",img:"nvdash-3"},"nexists"]}],c=f[2].options.box.group[2].items;c.push({title:b[0].title,content:a({path:"assets/images/toolbar/char/not/",values:b[0].values})})}(),function(){var b=["aleph","beth","daleth","gimel","complement","ell","eth","hbar","hslash","mho","partial","wp","circledS","Bbbk","Finv","Game","Im","Re"],c=f[2].options.box.group[3].items;c.push({title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",content:a({path:"assets/images/toolbar/alphabetic/",values:b})})}(),function(){var b=["gets","to","uparrow","downarrow","leftrightarrow","updownarrow",{key:"\\Leftarrow",img:"u-leftarrow"},{key:"\\Rightarrow",img:"u-rightarrow"},{key:"\\Uparrow",img:"u-uparrow"},{key:"\\Downarrow",img:"u-downarrow"},{key:"\\Leftrightarrow",img:"u-leftrightarrow"},{key:"\\Updownarrow",img:"u-updownarrow"},"longleftarrow","longrightarrow","longleftrightarrow",{key:"\\Longleftarrow",img:"u-longleftarrow"},{key:"\\Longrightarrow",img:"u-longrightarrow"},{key:"\\Longleftrightarrow",img:"u-longleftrightarrow"},"nearrow","nwarrow","searrow","swarrow","nleftarrow","nrightarrow",{key:"\\nLeftarrow",img:"u-nleftarrow"},{key:"\\nRightarrow",img:"u-nrightarrow"},{key:"\\nLeftrightarrow",img:"u-nleftrightarrow"},"leftharpoonup","leftharpoondown","rightharpoonup","rightharpoondown","upharpoonleft","upharpoonright","downharpoonleft","downharpoonright","leftrightharpoons","rightleftharpoons","leftleftarrows","rightrightarrows","upuparrows","downdownarrows","leftrightarrows","rightleftarrows","looparrowleft","looparrowright","leftarrowtail","rightarrowtail",{key:"\\Lsh",img:"u-lsh"},{key:"\\Rsh",img:"u-rsh"},{key:"\\Lleftarrow",img:"u-lleftarrow"},{key:"\\Rrightarrow",img:"u-rrightarrow"},"curvearrowleft","curvearrowright","circlearrowleft","circlearrowright","multimap","leftrightsquigarrow","twoheadleftarrow","twoheadrightarrow","rightsquigarrow"],c=f[2].options.box.group[4].items;c.push({title:"\u7bad\u5934",content:a({path:"assets/images/toolbar/arrow/",values:b})})}(),function(){var b=[{title:"\u624b\u5199\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u82b1\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]},{title:"\u53cc\u7ebf",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u7f57\u9a6c",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]}],c=f[2].options.box.group[5].items;e.Utils.each(b[0].values,function(a,c){b[0].values[c]={key:"\\mathcal{"+a+"}",img:a.toLowerCase()}}),e.Utils.each(b[1].values,function(a,c){b[1].values[c]={key:"\\mathfrak{"+a+"}",img:a.replace(/[A-Z]/,function(a){return"u"+a.toLowerCase()})}}),e.Utils.each(b[2].values,function(a,c){b[2].values[c]={key:"\\mathbb{"+a+"}",img:a.toLowerCase()}}),e.Utils.each(b[3].values,function(a,c){b[3].values[c]={key:"\\mathrm{"+a+"}",img:a.replace(/[A-Z]/,function(a){return"u"+a.toLowerCase()})}}),c.push({title:b[0].title,content:a({path:"assets/images/toolbar/char/cal/",values:b[0].values})}),c.push({title:b[1].title,content:a({path:"assets/images/toolbar/char/frak/",values:b[1].values})}),c.push({title:b[2].title,content:a({path:"assets/images/toolbar/char/bb/",values:b[2].values})}),c.push({title:b[3].title,content:a({path:"assets/images/toolbar/char/rm/",values:b[3].values})})}(),window.iconConfig=f,f}},b[35]={value:function(){function a(a,b){var c=[];return g.Utils.each(a,function(a){a.length>1&&(a="\\"+a),c.push({key:a,img:b,pos:e[a]})}),c}var c=b.r(41),d=b.r(40),e=b.r(30),f=b.r(33),g=b.r(20),h=[{type:c.DRAPDOWN_BOX,options:{button:{label:"\u9884\u8bbe
",className:"yushe-btn",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:0,y:0},iconSize:{w:40}},box:{width:367,group:[{title:"\u9884\u8bbe\u516c\u5f0f",items:[{title:"\u9884\u8bbe\u516c\u5f0f",content:[{label:"\u4e8c\u6b21\u516c\u5f0f",item:{val:"x=\\frac {-b\\pm\\sqrt {b^2-4ac}}{2a}"}},{label:"\u4e8c\u9879\u5f0f\u5b9a\u7406",item:{val:"{\\left(x+a\\right)}^2=\\sum^n_{k=0}{\\left(^n_k\\right)x^ka^{n-k}}"}},{label:"\u52fe\u80a1\u5b9a\u7406",item:{val:"a^2+b^2=c^2"}}]}]}]}}},{type:c.DELIMITER},{type:c.AREA,options:{box:{fixOffset:!0,width:527,type:d.OVERLAP,group:[{title:"\u57fa\u7840\u6570\u5b66",items:[]},{title:"\u5e0c\u814a\u5b57\u6bcd",items:[]},{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",items:[]},{title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",items:[]},{title:"\u7bad\u5934",items:[]},{title:"\u624b\u5199\u4f53",items:[]}]}}},{type:c.DELIMITER},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5206\u6570
",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:45,y:0}},box:{width:332,group:[{title:"\u5206\u6570",items:[{title:"\u5206\u6570",content:[{item:{val:"\\frac \\placeholder\\placeholder"}},{item:{val:"{\\placeholder/\\placeholder}"}}]},{title:"\u5e38\u7528\u5206\u6570",content:[{item:{val:"\\frac {dy}{dx}"}},{item:{val:"\\frac {\\Delta y}{\\Delta x}"}},{item:{val:"\\frac {\\delta y}{\\delta x}"}},{item:{val:"\\frac \\pi 2"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u4e0a\u4e0b\u6807
",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:82,y:0}},box:{width:332,group:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",items:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{val:"\\placeholder^\\placeholder"}},{item:{val:"\\placeholder_\\placeholder"}},{item:{val:"\\placeholder^\\placeholder_\\placeholder"}},{item:{val:"{^\\placeholder_\\placeholder\\placeholder}"}}]},{title:"\u5e38\u7528\u7684\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{val:"e^{-i\\omega t}"}},{item:{val:"x^2"}},{item:{val:"{}^n_1Y"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u6839\u5f0f
",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:119,y:0}},box:{width:342,group:[{title:"\u6839\u5f0f",items:[{title:"\u6839\u5f0f",content:[{item:{val:"\\sqrt \\placeholder"}},{item:{val:"\\sqrt [\\placeholder] \\placeholder"}},{item:{val:"\\sqrt [2] \\placeholder"}},{item:{val:"\\sqrt [3] \\placeholder"}}]},{title:"\u5e38\u7528\u6839\u5f0f",content:[{item:{val:"\\frac {-b\\pm\\sqrt{b^2-4ac}}{2a}"}},{item:{val:"\\sqrt {a^2+b^2}"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u79ef\u5206
",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:156,y:0}},box:{width:332,group:[{title:"\u79ef\u5206",items:[{title:"\u79ef\u5206",content:[{item:{val:"\\int \\placeholder"}},{item:{val:"\\int^\\placeholder_\\placeholder\\placeholder"}},{item:{val:"\\iint\\placeholder"}},{item:{val:"\\iint^\\placeholder_\\placeholder\\placeholder"}},{item:{val:"\\iiint\\placeholder"}},{item:{val:"\\iiint^\\placeholder_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5927\u578b
\u8fd0\u7b97\u7b26",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:193,y:0}},box:{width:332,group:[{title:"\u6c42\u548c",items:[{title:"\u6c42\u548c",content:[{item:{val:"\\sum\\placeholder"}},{item:{val:"\\sum^\\placeholder_\\placeholder\\placeholder"}},{item:{val:"\\sum_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u62ec\u53f7
",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:230,y:0}},box:{width:332,group:[{title:"\u65b9\u62ec\u53f7",items:[{title:"\u65b9\u62ec\u53f7",content:[{item:{val:"\\left(\\placeholder\\right)"}},{item:{val:"\\left[\\placeholder\\right]"}},{item:{val:"\\left\\{\\placeholder\\right\\}"}},{item:{val:"\\left|\\placeholder\\right|"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u51fd\u6570
",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:267,y:0}},box:{width:340,group:[{title:"\u51fd\u6570",items:[{title:"\u4e09\u89d2\u51fd\u6570",content:[{item:{val:"\\sin\\placeholder"}},{item:{val:"\\cos\\placeholder"}},{item:{val:"\\tan\\placeholder"}},{item:{val:"\\csc\\placeholder"}},{item:{val:"\\sec\\placeholder"}},{item:{val:"\\cot\\placeholder"}}]},{title:"\u5e38\u7528\u51fd\u6570",content:[{item:{val:"\\sin\\theta"}},{item:{val:"\\cos{2x}"}},{item:{val:"\\tan\\theta=\\frac {\\sin\\theta}{\\cos\\theta}"}}]}]}]}}}];return function(){var a=[],b="kityformula/assets/images/toolbar/other.png",d=[];g.Utils.each(h,function(b){b.type!==c.DELIMITER&&(b=b.options.box.group,a=a.concat(b))}),g.Utils.each(a,function(a){a=a.items;for(var b=0,c=a.length;c>b;b++)d=d.concat(a[b].content)}),g.Utils.each(d,function(a){var c=f[a.item.val];c&&(a.item.img=b,a.item.pos=c.pos,a.item.size=c.size)})}(),function(){var b=["pm","infty","=","sim","times","div","!","<","ll",">","gg","leq","geq","mp","cong","equiv","propto","approx","forall","partial","surd","cup","cap","varnothing","%","circ","exists","nexists","in","ni","gets","uparrow","to","downarrow","leftrightarrow","therefore","because","+","-","neg","ast","cdot","vdots","aleph","beth","blacksquare"],c=h[2].options.box.group[0].items;c.push({title:"\u57fa\u7840\u6570\u5b66",content:a(b,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=[{title:"\u5c0f\u5199",values:["alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigma","tau","upsilon","phi","chi","psi","omega"]},{title:"\u5927\u5199",values:["Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"]},{title:"\u53d8\u4f53",values:["digamma","varepsilon","varkappa","varphi","varpi","varrho","varsigma","vartheta"]}],c=h[2].options.box.group[1].items;c.push({title:b[0].title,content:a(b[0].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[1].title,content:a(b[1].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[2].title,content:a(b[2].values,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=[{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",values:["neq","nless","ngtr","nleq","ngeq","nsim","lneqq","gneqq","nprec","nsucc","notin","nsubseteq","nsupseteq","subsetneq","supsetneq","lnsim","gnsim","precnsim","succnsim","ntriangleleft","ntriangleright","ntrianglelefteq","ntrianglerighteq","nmid","nparallel","nvdash","nVdash","nvDash","nVDash","nexists"]}],c=h[2].options.box.group[2].items;c.push({title:b[0].title,content:a(b[0].values,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=["aleph","beth","daleth","gimel","complement","ell","eth","hbar","hslash","mho","partial","wp","circledS","Bbbk","Finv","Game","Im","Re"],c=h[2].options.box.group[3].items;c.push({title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",content:a(b,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=["gets","to","uparrow","downarrow","leftrightarrow","updownarrow","Leftarrow","Rightarrow","Uparrow","Downarrow","Leftrightarrow","Updownarrow","longleftarrow","longrightarrow","longleftrightarrow","Longleftarrow","Longrightarrow","Longleftrightarrow","nearrow","nwarrow","searrow","swarrow","nleftarrow","nrightarrow","nLeftarrow","nRightarrow","nLeftrightarrow","leftharpoonup","leftharpoondown","rightharpoonup","rightharpoondown","upharpoonleft","upharpoonright","downharpoonleft","downharpoonright","leftrightharpoons","rightleftharpoons","leftleftarrows","rightrightarrows","upuparrows","downdownarrows","leftrightarrows","rightleftarrows","looparrowleft","looparrowright","leftarrowtail","rightarrowtail","Lsh","Rsh","Lleftarrow","Rrightarrow","curvearrowleft","curvearrowright","circlearrowleft","circlearrowright","multimap","leftrightsquigarrow","twoheadleftarrow","twoheadrightarrow","rightsquigarrow"],c=h[2].options.box.group[4].items;c.push({title:"\u7bad\u5934",content:a(b,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=[{title:"\u624b\u5199\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u82b1\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]},{title:"\u53cc\u7ebf",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u7f57\u9a6c",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]}],c=h[2].options.box.group[5].items;g.Utils.each(b[0].values,function(a,c){b[0].values[c]="mathcal{"+a+"}"}),g.Utils.each(b[1].values,function(a,c){b[1].values[c]="mathfrak{"+a+"}"}),g.Utils.each(b[2].values,function(a,c){b[2].values[c]="mathbb{"+a+"}"}),g.Utils.each(b[3].values,function(a,c){b[3].values[c]="mathrm{"+a+"}"}),c.push({title:b[0].title,content:a(b[0].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[1].title,content:a(b[1].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[2].title,content:a(b[2].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[3].title,content:a(b[3].values,"kityformula/assets/images/toolbar/char.png")})}(),h}},b[36]={value:function(){function a(a,b,f){switch(a){case i.DRAPDOWN_BOX:return c(b,f);case i.DELIMITER:return d(b);case i.AREA:return e(b,f)}}function c(a,b){return new g.DrapdownBox(a,b)}function d(a){return new g.Delimiter(a)}function e(a,b){return new g.Area(a,b)}var f=b.r(20),g=b.r(48),h=b.r(47),i=b.r(41),j=f.createClass("Tollbar",{constructor:function(a,b,c){this.kfEditor=b,this.uiComponent=a,this.elementList=c,this.elements=[],this.initToolbarElements(),this.initServices(),this.initEvent()},initServices:function(){this.kfEditor.registerService("ui.toolbar.disable",this,{disableToolbar:this.disableToolbar}),this.kfEditor.registerService("ui.toolbar.enable",this,{enableToolbar:this.enableToolbar}),this.kfEditor.registerService("ui.toolbar.close",this,{closeToolbar:this.closeToolbar})},initEvent:function(){var a=this;h.on(this.uiComponent.toolbarContainer,"mousedown",function(a){a.preventDefault()}),h.on(this.uiComponent.toolbarContainer,"mousewheel",function(a){a.preventDefault()}),h.on(this.kfEditor.getContainer(),"mousedown",function(){a.notify("closeAll")}),h.subscribe("data.select",function(b){a.insertSource(b)})},insertSource:function(a){this.kfEditor.requestService("control.insert.string",a)},disableToolbar:function(){f.Utils.each(this.elements,function(a){a.disable&&a.disable()})},enableToolbar:function(){f.Utils.each(this.elements,function(a){a.enable&&a.enable()})},getContainer:function(){return this.kfEditor.requestService("ui.get.canvas.container")},closeToolbar:function(){this.closeElement()},notify:function(a){switch(a){case"closeAll":case"closeOther":return void this.closeElement(arguments[1])}},closeElement:function(a){f.Utils.each(this.elements,function(b){b!=a&&b.hide&&b.hide()})},initToolbarElements:function(){var b=this.elements,c=this.uiComponent.toolbarContainer.ownerDocument,d=this;f.Utils.each(this.elementList,function(e){var f=a(e.type,c,e.options);b.push(f),d.appendElement(f)})},appendElement:function(a){a.setToolbar(this),a.attachTo(this.uiComponent.toolbarContainer)}});return j}},b[37]={value:function(){var a=b.r(20),c="kf-editor-ui-",d=66,e=b.r(47),f=b.r(38),g=a.createClass("Area",{constructor:function(a,b){this.options=b,this.doc=a,this.toolbar=null,this.disabled=!0,this.panelIndex=0,this.maxPanelIndex=0,this.currentItemCount=0,this.lineMaxCount=9,this.element=this.createArea(),this.container=this.createContainer(),this.panel=this.createPanel(),this.buttonContainer=this.createButtonContainer(),this.button=this.createButton(),this.mountPoint=this.createMountPoint(),this.moveDownButton=this.createMoveDownButton(),this.moveUpButton=this.createMoveUpButton(),this.boxObject=this.createBox(),this.mergeElement(),this.mount(),this.setListener(),this.initEvent()},initEvent:function(){var a=this;e.on(this.button,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1!==b.which||a.disabled||(a.showMount(),a.toolbar.notify("closeOther",a))}),e.on(this.moveDownButton,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1!==b.which||a.disabled||(a.nextPanel(),a.toolbar.notify("closeOther",a))}),e.on(this.moveUpButton,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1!==b.which||a.disabled||(a.prevPanel(),a.toolbar.notify("closeOther",a))}),e.delegate(this.container,".kf-editor-ui-area-item","mousedown",function(b){b.preventDefault(),1!==b.which||a.disabled||e.publish("data.select",this.getAttribute("data-value"))}),this.boxObject.initEvent()},disable:function(){this.disabled=!0,this.boxObject.disable(),e.getClassList(this.element).remove(c+"enabled")},enable:function(){this.disabled=!1,this.boxObject.enable(),e.getClassList(this.element).add(c+"enabled")},setListener:function(){var a=this;this.boxObject.setSelectHandler(function(b){e.publish("data.select",b),a.hide()}),this.boxObject.setChangeHandler(function(){a.updateContent()})},createArea:function(){var a=e.ele(this.doc,"div",{className:c+"area"});return"width"in this.options&&(a.style.width=this.options.width+"px"),a},checkMaxPanelIndex:function(){this.maxPanelIndex=Math.ceil(this.currentItemCount/this.lineMaxCount/2)},updateContent:function(){var b=this.boxObject.getOverlapContent(),d=0,e=null,f=0,g=0,h=this.lineMaxCount,i=[];this.panel.innerHTML="",a.Utils.each(b,function(b){var j=b.content;a.Utils.each(j,function(a){f=Math.floor(d/h),g=d%h,d++,e="top: "+(33*f+5)+"px; left: "+(32*g+5)+"px;",i.push('
')})}),this.currentItemCount=d,this.panelIndex=0,this.panel.style.top=0,this.panel.innerHTML=i.join(""),this.checkMaxPanelIndex(),this.updatePanelButtonState()},mount:function(){this.boxObject.mountTo(this.mountPoint)},showMount:function(){this.mountPoint.style.display="block",this.boxObject.updateSize()},hideMount:function(){this.mountPoint.style.display="none"},hide:function(){this.hideMount(),this.boxObject.hide()},createButton:function(){return e.ele(this.doc,"div",{className:c+"area-button"})},createMoveDownButton:function(){return e.ele(this.doc,"div",{className:c+"movedown-button",content:""})},createMoveUpButton:function(){return e.ele(this.doc,"div",{className:c+"moveup-button",content:""})},createMountPoint:function(){return e.ele(this.doc,"div",{className:c+"area-mount"})},createBox:function(){return new f(this.doc,this.options.box)},createContainer:function(){return e.ele(this.doc,"div",{className:c+"area-container"})},createPanel:function(){return e.ele(this.doc,"div",{className:c+"area-panel"})},createButtonContainer:function(){return e.ele(this.doc,"div",{className:c+"area-button-container"})},mergeElement:function(){this.buttonContainer.appendChild(this.moveUpButton),this.buttonContainer.appendChild(this.moveDownButton),this.buttonContainer.appendChild(this.button),this.container.appendChild(this.panel),this.element.appendChild(this.container),this.element.appendChild(this.buttonContainer),this.element.appendChild(this.mountPoint)},disablePanelUp:function(){this.disabledUp=!0,e.getClassList(this.moveUpButton).add("kf-editor-ui-disabled")},enablePanelUp:function(){this.disabledUp=!1,e.getClassList(this.moveUpButton).remove("kf-editor-ui-disabled")},disablePanelDown:function(){this.disabledDown=!0,e.getClassList(this.moveDownButton).add("kf-editor-ui-disabled")},enablePanelDown:function(){this.disabledDown=!1,e.getClassList(this.moveDownButton).remove("kf-editor-ui-disabled")},updatePanelButtonState:function(){0===this.panelIndex?this.disablePanelUp():this.enablePanelUp(),this.panelIndex+1>=this.maxPanelIndex?this.disablePanelDown():this.enablePanelDown()},nextPanel:function(){this.disabledDown||this.panelIndex+1>=this.maxPanelIndex||(this.panelIndex++,this.panel.style.top=-this.panelIndex*d+"px",this.updatePanelButtonState())},prevPanel:function(){this.disabledUp||0!==this.panelIndex&&(this.panelIndex--,this.panel.style.top=-this.panelIndex*d+"px",this.updatePanelButtonState())},setToolbar:function(a){this.toolbar=a,this.boxObject.setToolbar(a)},attachTo:function(a){a.appendChild(this.element),this.updateContent(),this.updatePanelButtonState()}});return g}},b[38]={value:function(){function a(a,b,c){var d=[];return h.Utils.each(b,function(b){d.push(new q(c,a,b))}),d}function c(a){return j.ele(a,"div",{className:i+"overlap-container"})}function d(a,b){return new m(a,{className:"overlap-button",label:"",fixOffset:b.fixOffset})}function e(a,b){return new n(a,b)}function f(a){return a.getBoundingClientRect()}function g(a){var b="background: url( "+a.img+" ) no-repeat ";return b+=-a.pos.x+"px ",b+=-a.pos.y+"px;",b+=" width: "+a.size.width+"px;",b+=" height: "+a.size.height+"px;"}var h=b.r(20),i="kf-editor-ui-",j=b.r(47),k=b.r(40),l=b.r(42),m=b.r(39),n=b.r(45),o=20,p=h.createClass("Box",{constructor:function(a,b){this.options=b,this.toolbar=null,this.options.type=this.options.type||k.DETACHED,this.doc=a,this.itemPanels=null,this.overlapButtonObject=null,this.overlapIndex=-1,this.element=this.createBox(),this.groupContainer=this.createGroupContainer(),this.itemGroups=this.createItemGroup(),this.mergeElement()},createBox:function(){var a=j.ele(this.doc,"div",{className:i+"box"});return"width"in this.options&&(a.style.width=this.options.width+"px"),a},setToolbar:function(a){this.toolbar=a,this.overlapButtonObject&&this.overlapButtonObject.setToolbar(a)},updateSize:function(){var a=j.getRectBox(this.toolbar.getContainer()),b=30,c=j.getRectBox(this.element);if(this.options.type===k.DETACHED){if(c.bottom<=a.bottom)return void(this.element.scrollTop=0);this.element.style.height=c.height-(c.bottom-a.bottom+b)+"px"}else{var d=this.getCurrentItemPanel(),e=null;if(d.scrollTop=0,c.bottom<=a.bottom)return;e=f(d),d.style.height=a.bottom-e.top-b+"px"}},initEvent:function(){var a="."+i+"box-item",b=this;j.delegate(this.groupContainer,a,"mousedown",function(a){a.preventDefault(),1===a.which&&b.onselectHandler&&b.onselectHandler(this.getAttribute("data-value"))}),j.on(this.element,"mousedown",function(a){a.stopPropagation(),a.preventDefault()}),j.on(this.element,"mousewheel",function(a){a.preventDefault(),a.stopPropagation(),b.scroll(a.originalEvent.wheelDelta)})},getNode:function(){return this.element},setSelectHandler:function(a){this.onselectHandler=a},scroll:function(a){0>a?this.scrollDown():(this.scrollUp(),this.element.scrollTop-=20)},scrollDown:function(){this.options.type===k.DETACHED?this.element.scrollTop+=o:this.getCurrentItemPanel().scrollTop+=o},scrollUp:function(){this.options.type===k.DETACHED?this.element.scrollTop-=o:this.getCurrentItemPanel().scrollTop-=o},setChangeHandler:function(a){this.onchangeHandler=a},onchangeHandler:function(){},createGroupContainer:function(){return j.ele(this.doc,"div",{className:i+"box-container"})},getPositionInfo:function(){return j.getRectBox(this.element)},createItemGroup:function(){var a=this.createGroup();switch(this.options.type){case k.DETACHED:return a.items[0];case k.OVERLAP:return this.createOverlapGroup(a)}return null},enable:function(){this.overlapButtonObject&&this.overlapButtonObject.enable()},disable:function(){this.overlapButtonObject&&this.overlapButtonObject.disable()},hide:function(){this.overlapButtonObject&&this.overlapButtonObject.hideMount()},getOverlapContent:function(){return this.options.type!==k.OVERLAP?null:this.options.group[this.overlapIndex].items},createOverlapGroup:function(a){var b=a.title,f=this,g=c(this.doc),k=d(this.doc,{fixOffset:this.options.fixOffset}),l=e(this.doc,{width:150,items:b}),m=j.ele(this.doc,"div",{className:i+"wrap-group"});return this.overlapButtonObject=k,k.mount(l),k.initEvent(),l.initEvent(),h.Utils.each(a.items,function(b,c){var d=m.cloneNode(!1);h.Utils.each(b,function(a){d.appendChild(a)}),a.items[c]=d}),this.itemPanels=a.items,l.setSelectHandler(function(c,d){f.overlapIndex=c,k.setLabel(b[c]),k.hideMount(),a.items[d].style.display="none",a.items[c].style.display="block",c!==d&&f.updateSize(),f.onchangeHandler(c)}),g.appendChild(k.getNode()),h.Utils.each(a.items,function(a,b){b>0&&(a.style.display="none"),g.appendChild(a)}),l.select(0),[g]},getCurrentItemPanel:function(){return this.itemPanels[this.overlapIndex]},getGroupList:function(){var a=[];return h.Utils.each(this.options.group,function(b){a.push(b.title)}),{width:150,items:a}},createGroup:function(){var b=this.doc,c=[],d={title:[],items:[]},e=null,f=null,g=k.DETACHED===this.options.type?l.BIG:l.SMALL,m=null;return e=j.ele(this.doc,"div",{className:i+"box-group"}),m=e.cloneNode(!1),m.className=i+"box-group-item-container",h.Utils.each(this.options.group,function(k){d.title.push(k.title||""),c=[],h.Utils.each(k.items,function(d){e=e.cloneNode(!1),m=m.cloneNode(!1),f=j.ele(b,"div",{className:i+"box-group-title",content:d.title}),e.appendChild(f),e.appendChild(m),h.Utils.each(a(b,d.content,g),function(a){a.appendTo(m)}),c.push(e)}),d.items.push(c)}),d},mergeElement:function(){var a=this.groupContainer;this.element.appendChild(a),h.Utils.each(this.itemGroups,function(b){a.appendChild(b)})},mountTo:function(a){a.appendChild(this.element)},appendTo:function(a){a.appendChild(this.element)}}),q=h.createClass("BoxItem",{constructor:function(a,b,c){this.type=a,this.doc=b,this.options=c,this.element=this.createItem(),this.labelNode=this.createLabel(),this.contentNode=this.createContent(),this.mergeElement()},getNode:function(){return this.element},createItem:function(){var a=j.ele(this.doc,"div",{className:i+"box-item"});return a},createLabel:function(){var a=null;if("label"in this.options)return a=j.ele(this.doc,"div",{className:i+"box-item-label",content:this.options.label})},getContent:function(){},createContent:function(){switch(this.type){case l.BIG:return this.createBigContent();case l.SMALL:return this.createSmallContent()}},createBigContent:function(){var a=this.doc,b=j.ele(a,"div",{className:i+"box-item-content"}),c=i+"box-item-val",d=this.options.item,e=null,f=g(d);return e=j.ele(a,"div",{className:c}),e.innerHTML='
',this.element.setAttribute("data-value",d.val),b.appendChild(e),b},createSmallContent:function(){var a=this.doc,b=j.ele(a,"div",{className:i+"box-item-content"}),c=i+"box-item-val",d=this.options,e=null;return e=j.ele(a,"div",{className:c}),e.style.background="url( "+d.img+" )",e.style.backgroundPosition=-d.pos.x+"px "+-d.pos.y+"px",this.element.setAttribute("data-value",d.key),b.appendChild(e),b},mergeElement:function(){this.labelNode&&this.element.appendChild(this.labelNode),this.element.appendChild(this.contentNode)},appendTo:function(a){a.appendChild(this.element)}});return p}},b[39]={value:function(){function a(a){var b="url( "+a.src+" ) no-repeat ";return b+=-a.x+"px ",b+=-a.y+"px"}var c=b.r(20),d="kf-editor-ui-",e=7,f={iconSize:{w:32,h:32}},g=b.r(47),h=c.createClass("Button",{constructor:function(a,b){this.options=c.Utils.extend({},f,b),this.eventState=!1,this.toolbar=null,this.displayState=!1,this.fixOffset=b.fixOffset||!1,this.doc=a,this.element=this.createButton(),this.disabled=!0,this.mountElement=null,this.icon=this.createIcon(),this.label=this.createLabel(),this.sign=this.createSign(),this.mountPoint=this.createMountPoint(),this.mergeElement()},initEvent:function(){var a=this;this.eventState||(this.eventState=!0,g.on(this.element,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1===b.which&&(a.disabled||(a.toggleSelect(),a.toggleMountElement()))}))},setToolbar:function(a){this.toolbar=a},toggleMountElement:function(){this.displayState?this.hideMount():this.showMount()},setLabel:function(a){var b="";this.sign&&(b='
'),this.label.innerHTML=a+b},toggleSelect:function(){g.getClassList(this.element).toggle(d+"button-in")},unselect:function(){g.getClassList(this.element).remove(d+"button-in")},select:function(){g.getClassList(this.element).add(d+"button-in")},show:function(){this.select(),this.showMount()},hide:function(){this.unselect(),this.hideMount()},showMount:function(){if(this.displayState=!0,this.mountPoint.style.display="block",this.fixOffset){var a=this.element.getBoundingClientRect();this.mountElement.setOffset(a.left+e,a.bottom)}var b=this.toolbar.getContainer(),c=null,d=g.getRectBox(b),f=this.mountElement.getPositionInfo();f.right>d.right&&(c=g.getRectBox(this.element),this.mountPoint.style.left=c.right-f.right-1+"px"),this.mountElement.updateSize&&this.mountElement.updateSize()},hideMount:function(){this.displayState=!1,this.mountPoint.style.display="none"},getNode:function(){return this.element},mount:function(a){this.mountElement=a,a.mountTo(this.mountPoint)},createButton:function(){var a=g.ele(this.doc,"div",{className:d+"button"});return this.options.className&&(a.className+=" "+d+this.options.className),a},createIcon:function(){if(!this.options.icon)return null;var b=g.ele(this.doc,"div",{className:d+"button-icon"});return"string"==typeof this.options.icon?b.style.backgroundImage="url("+this.options.icon+") no-repeat":b.style.background=a(this.options.icon),this.options.iconSize.w&&(b.style.width=this.options.iconSize.w+"px"),this.options.iconSize.h&&(b.style.height=this.options.iconSize.h+"px"),b},createLabel:function(){var a=g.ele(this.doc,"div",{className:d+"button-label",content:this.options.label});return a},createSign:function(){return this.options.sign===!1?null:g.ele(this.doc,"div",{className:d+"button-sign"})},createMountPoint:function(){return g.ele(this.doc,"div",{className:d+"button-mount-point"})},disable:function(){this.disabled=!0,g.getClassList(this.element).remove(d+"enabled") +},enable:function(){this.disabled=!1,g.getClassList(this.element).add(d+"enabled")},mergeElement:function(){this.icon&&this.element.appendChild(this.icon),this.element.appendChild(this.label),this.sign&&this.label.appendChild(this.sign),this.element.appendChild(this.mountPoint)}});return h}},b[40]={value:function(){return{DETACHED:1,OVERLAP:2}}},b[41]={value:function(){return{DRAPDOWN_BOX:1,AREA:2,DELIMITER:3}}},b[42]={value:function(){return{BIG:1,SMALL:2}}},b[43]={value:function(){var a=b.r(20),c="kf-editor-ui-",d=b.r(47),e=a.createClass("Delimiter",{constructor:function(a){this.doc=a,this.element=this.createDilimiter()},setToolbar:function(){},createDilimiter:function(){var a=d.ele(this.doc,"div",{className:c+"delimiter"});return a.appendChild(d.ele(this.doc,"div",{className:c+"delimiter-line"})),a},attachTo:function(a){a.appendChild(this.element)}});return e}},b[44]={value:function(){var a=b.r(20),c=b.r(47),d=b.r(39),e=b.r(38),f=a.createClass("DrapdownBox",{constructor:function(a,b){this.options=b,this.toolbar=null,this.doc=a,this.buttonElement=this.createButton(),this.element=this.buttonElement.getNode(),this.boxElement=this.createBox(),this.buttonElement.mount(this.boxElement),this.initEvent()},initEvent:function(){var a=this;c.on(this.element,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),a.toolbar.notify("closeOther",a)}),this.buttonElement.initEvent(),this.boxElement.initEvent(),this.boxElement.setSelectHandler(function(b){c.publish("data.select",b),a.buttonElement.hide()})},disable:function(){this.buttonElement.disable()},enable:function(){this.buttonElement.enable()},setToolbar:function(a){this.toolbar=a,this.buttonElement.setToolbar(a),this.boxElement.setToolbar(a)},createButton:function(){return new d(this.doc,this.options.button)},show:function(){this.buttonElement.show()},hide:function(){this.buttonElement.hide()},createBox:function(){return new e(this.doc,this.options.box)},attachTo:function(a){a.appendChild(this.element)}});return f}},b[45]={value:function(){var a=b.r(20),c="kf-editor-ui-",d=b.r(47),e=a.createClass("List",{constructor:function(a,b){this.options=b,this.doc=a,this.onselectHandler=null,this.currentSelect=-1,this.element=this.createBox(),this.itemGroups=this.createItems(),this.mergeElement()},onselectHandler:function(){},setSelectHandler:function(a){this.onselectHandler=a},createBox:function(){var a=d.ele(this.doc,"div",{className:c+"list"}),b=d.ele(this.doc,"div",{className:c+"list-bg"});return"width"in this.options&&(a.style.width=this.options.width+"px"),a.appendChild(b),a},select:function(a){var b=this.currentSelect;-1===b&&(b=a),this.unselect(b),this.currentSelect=a,d.getClassList(this.itemGroups.items[a]).add(c+"list-item-select"),this.onselectHandler(a,b)},unselect:function(a){d.getClassList(this.itemGroups.items[a]).remove(c+"list-item-select")},setOffset:function(a,b){this.element.style.left=a+"px",this.element.style.top=b+"px"},initEvent:function(){var a="."+c+"list-item",b=this;d.delegate(this.itemGroups.container,a,"mousedown",function(a){a.preventDefault(),1===a.which&&b.select(this.getAttribute("data-index"))}),d.on(this.element,"mousedown",function(a){a.stopPropagation(),a.preventDefault()})},getPositionInfo:function(){return d.getRectBox(this.element)},createItems:function(){var b=this.doc,e=null,f=null,g=null,h=[],i=null;return e=d.ele(this.doc,"div",{className:c+"list-item"}),i=e.cloneNode(!1),i.className=c+"list-item-container",a.Utils.each(this.options.items,function(a,j){f=e.cloneNode(!1),g=e.cloneNode(!1),g.className=c+"list-item-icon",f.appendChild(g),f.appendChild(d.ele(b,"text",a)),f.setAttribute("data-index",j),h.push(f),i.appendChild(f)}),{container:i,items:h}},mergeElement:function(){this.element.appendChild(this.itemGroups.container)},mountTo:function(a){a.appendChild(this.element)}});return e}},b[46]={value:function(){function a(a,b,c){var d=a.createElement(b),e='
';return d.className=r+c,"thumb"===c&&(c=r+c,d.innerHTML=e.replace("$1",c+"-left").replace("$2",c+"-right")),d}function c(a){return a.getBoundingClientRect()}function d(a){q.addEvent(a,"mousedown",function(a){a.preventDefault()})}function d(a){q.addEvent(a.container,"mousedown",function(a){a.preventDefault()})}function e(a){q.addEvent(a.widgets.track,"mousedown",function(b){h(this,a,b)})}function f(a){q.addEvent(a.widgets.leftButton,"mousedown",function(){j(a,-p.step)}),q.addEvent(a.widgets.rightButton,"mousedown",function(){j(a,p.step)})}function g(a){var b=!1,c=0,d=0,e=a.values.trackWidth;q.addEvent(a.widgets.thumb,"mousedown",function(e){e.preventDefault(),e.stopPropagation(),b=!0,c=e.clientX,d=a.thumbLocationX}),q.addEvent(a.container.ownerDocument,"mouseup",function(){b=!1,c=0,d=0}),q.addEvent(a.container.ownerDocument,"mousemove",function(f){if(b){var g=f.clientX-c,h=d+g,j=a.values.thumbWidth;0>h?h=0:h+j>e&&(h=e-j),i(a,h)}})}function h(a,b,d){var e=c(a),f=b.values,g=f.viewWidth/(f.contentWidth-f.viewWidth)*f.trackWidth,h=d.clientX-e.left;h>f.offset?f.offset+g>f.trackWidth?k(b,f.trackWidth):k(b,f.offset+g):f.offset-g<0?k(b,0):k(b,f.offset-g)}function i(a,b){var c=a.values,d=c.trackWidth-c.thumbWidth,e=Math.floor(b/d*c.trackWidth);a.updateOffset(e),a.thumbLocationX=b,a.widgets.thumb.style.left=b+"px"}function j(a,b){var c=a.leftOverflow+b;0>c?c=0:c>a.values.scrollWidth&&(c=a.values.scrollWidth),m(a,c)}function k(a,b){var c=a.values,d=b/c.trackWidth,e=c.trackWidth-c.thumbWidth,f=0;f=Math.floor(d*e),0>b&&(b=0,f=0),a.updateOffset(b),a.widgets.thumb.style.left=f+"px",a.thumbLocationX=f}function l(a,b){var c=a.values,d=0,e=0;d=b/(c.contentWidth-c.viewWidth),e=Math.floor(d*c.trackWidth),k(a,e)}function m(a,b){var c=a.values,d=b/(c.contentWidth-c.viewWidth);k(a,d*c.trackWidth)}var n=b.r(20),o=b.r(32).scrollbar,p=b.r(29).scrollbar,q=b.r(4),r="kf-editor-ui-";return n.createClass("Scrollbar",{constructor:function(a,b){this.uiComponent=a,this.kfEditor=b,this.widgets=null,this.container=this.uiComponent.scrollbarContainer,this.state=!1,this.values={offset:0,left:0,viewWidth:0,contentWidth:0,trackWidth:0,thumbWidth:0,scrollWidth:0},this.thumbLocationX=0,this.leftOverflow=0,this.rightOverflow=0,this.isExpand=!0,this.initWidget(),this.mountWidget(),this.initSize(),this.hide(),this.initServices(),this.initEvent(),this.updateHandler=function(){}},initWidget:function(){var b=this.container.ownerDocument;this.widgets={leftButton:a(b,"div","left-button"),rightButton:a(b,"div","right-button"),track:a(b,"div","track"),thumb:a(b,"div","thumb"),thumbBody:a(b,"div","thumb-body")}},initSize:function(){var a=c(this.widgets.leftButton).width,b=c(this.widgets.rightButton).width;this.values.viewWidth=c(this.container).width,this.values.trackWidth=this.values.viewWidth-a-b,this.widgets.track.style.width=this.values.trackWidth+"px"},initServices:function(){this.kfEditor.registerService("ui.show.scrollbar",this,{showScrollbar:this.show}),this.kfEditor.registerService("ui.hide.scrollbar",this,{hideScrollbar:this.hide}),this.kfEditor.registerService("ui.update.scrollbar",this,{updateScrollbar:this.update}),this.kfEditor.registerService("ui.set.scrollbar.update.handler",this,{setUpdateHandler:this.setUpdateHandler}),this.kfEditor.registerService("ui.relocation.scrollbar",this,{relocation:this.relocation})},initEvent:function(){d(this),e(this),g(this),f(this)},mountWidget:function(){var a=this.widgets,b=this.container;for(var c in a)a.hasOwnProperty(c)&&b.appendChild(a[c]);a.thumb.appendChild(a.thumbBody),a.track.appendChild(a.thumb)},show:function(){this.state=!0,this.container.style.display="block"},hide:function(){this.state=!1,this.container.style.display="none"},update:function(a){var b=this.values.trackWidth,c=0;return this.isExpand=a>this.values.contentWidth,this.values.contentWidth=a,this.values.scrollWidth=a-this.values.viewWidth,b>=a?void this.hide():(c=Math.max(Math.ceil(b*b/a),o.thumbMinSize),this.values.thumbWidth=c,this.widgets.thumb.style.width=c+"px",void(this.widgets.thumbBody.style.width=c-10+"px"))},setUpdateHandler:function(a){this.updateHandler=a},updateOffset:function(a){var b=this.values;b.offset=a,b.left=a/b.trackWidth,this.leftOverflow=b.left*(b.contentWidth-b.viewWidth),this.rightOverflow=b.contentWidth-b.viewWidth-this.leftOverflow,this.updateHandler(b.left,b.offset,b)},relocation:function(){var a=this.kfEditor.requestService("control.get.cursor.location"),b=p.padding,c=this.values.contentWidth,d=this.values.viewWidth,e=this.values.left*(c-d),f=0;a.xe+d?(a.x+=b,a.x>c&&(a.x=c),f=a.x-d,l(this,f)):this.isExpand?m(this,this.leftOverflow):m(this,c-d-this.rightOverflow)}})}},b[47]={value:function(){function a(a){this.node=a,this.classes=a.className.replace(/^\s+|\s+$/g,"").split(/\s+/)}var c=b.r(14),d=b.r(20),e={},f={ele:function(a,b,c){var d=null;return"text"===b?a.createTextNode(c):(d=a.createElement(b),c.className&&(d.className=c.className),c.content&&(d.innerHTML=c.content),d)},getRectBox:function(a){return a.getBoundingClientRect()},on:function(a,b,d){return c(a).on(b,d),this},delegate:function(a,b,d,e){return c(a).delegate(b,d,e),this},publish:function(a,b){var c=e[a];c&&(b=[].slice.call(arguments,1),d.Utils.each(c,function(a){a.apply(null,b)}))},subscribe:function(a,b){e[a]||(e[a]=[]),e[a].push(b)},getClassList:function(b){return b.classList||new a(b)}};return a.prototype={constructor:a,contains:function(a){return-1!==this.classes.indexOf(a)},add:function(a){return-1==this.classes.indexOf(a)&&this.classes.push(a),this._update(),this},remove:function(a){var b=this.classes.indexOf(a);return-1!==b&&(this.classes.splice(b,1),this._update()),this},toggle:function(a){var b=this.contains(a)?"remove":"add";return this[b](a)},_update:function(){this.node.className=this.classes.join(" ")}},f}},b[48]={value:function(){return{DrapdownBox:b.r(44),Delimiter:b.r(43),Area:b.r(37)}}},b[49]={value:function(){function a(a){return h.ele(a,"div",{className:"kf-editor-toolbar"})}function c(a){return h.ele(a,"div",{className:"kf-editor-inner-toolbar"})}function d(a){var b=a.createElement("div");return b.className="kf-editor-edit-area",b.style.width="80%",b.style.height="800px",b}function e(a){var b=a.createElement("div");return b.className="kf-editor-canvas-container",b}function f(a){var b=a.createElement("div");return b.className="kf-editor-edit-scrollbar",b}var g=b.r(20),h=b.r(47),i=b.r(4),j=b.r(32).VIEW_STATE,k=b.r(46),l=b.r(36),m=(b.r(31),b.r(35)),n=g.createClass("UIComponent",{constructor:function(b,g){var h=null;this.options=g,this.container=b.getContainer(),h=this.container.ownerDocument,this.components={},this.canvasRect=null,this.viewState=j.NO_OVERFLOW,this.kfEditor=b,this.toolbarWrap=a(h),this.toolbarContainer=c(h),this.editArea=d(h),this.canvasContainer=e(h),this.scrollbarContainer=f(h),this.toolbarWrap.appendChild(this.toolbarContainer),this.container.appendChild(this.toolbarWrap),this.editArea.appendChild(this.canvasContainer),this.container.appendChild(this.editArea),this.container.appendChild(this.scrollbarContainer),this.initComponents(),this.initServices(),this.initEvent(),this.updateContainerSize(this.container,this.toolbarWrap,this.editArea,this.canvasContainer),this.initScrollEvent()},initComponents:function(){this.components.toolbar=new l(this,this.kfEditor,m),this.components.scrollbar=new k(this,this.kfEditor)},updateContainerSize:function(a,b,c){var d=a.getBoundingClientRect(),e=b.getBoundingClientRect();c.style.width=d.width+"px",c.style.height=d.bottom-e.bottom+"px"},initServices:function(){this.kfEditor.registerService("ui.get.canvas.container",this,{getCanvasContainer:this.getCanvasContainer}),this.kfEditor.registerService("ui.update.canvas.view",this,{updateCanvasView:this.updateCanvasView}),this.kfEditor.registerService("ui.canvas.container.event",this,{on:this.addEvent,off:this.removeEvent,trigger:this.trigger,fire:this.trigger})},initEvent:function(){},initScrollEvent:function(){var a=this;this.kfEditor.requestService("ui.set.scrollbar.update.handler",function(b,c,d){c=Math.floor(b*(d.contentWidth-d.viewWidth)),a.kfEditor.requestService("render.set.canvas.offset",c)})},getCanvasContainer:function(){return this.canvasContainer},addEvent:function(a,b){i.addEvent(this.canvasContainer,a,b)},removeEvent:function(){},trigger:function(a){i.trigger(this.canvasContainer,a)},updateCanvasView:function(){var a=this.kfEditor.requestService("render.get.canvas"),b=a.getContentContainer(),c=null;null===this.canvasRect&&(this.canvasRect=this.canvasContainer.getBoundingClientRect()),c=b.getRenderBox("paper"),c.width>this.canvasRect.width?(this.viewState===j.NO_OVERFLOW&&(this.toggleViewState(),this.kfEditor.requestService("ui.show.scrollbar"),this.kfEditor.requestService("render.disable.relocation")),this.kfEditor.requestService("render.relocation"),this.kfEditor.requestService("ui.update.scrollbar",c.width),this.kfEditor.requestService("ui.relocation.scrollbar")):(this.viewState===j.OVERFLOW&&(this.toggleViewState(),this.kfEditor.requestService("ui.hide.scrollbar"),this.kfEditor.requestService("render.enable.relocation")),this.kfEditor.requestService("render.relocation"))},toggleViewState:function(){this.viewState=this.viewState===j.NO_OVERFLOW?j.OVERFLOW:j.NO_OVERFLOW}});return n}},b[50]={value:function(){var a=b.r(12),c=b.r(13);a.registerComponents("ui",b.r(49)),a.registerComponents("parser",b.r(21)),a.registerComponents("render",b.r(25)),a.registerComponents("position",b.r(23)),a.registerComponents("syntax",b.r(28)),a.registerComponents("control",b.r(5)),a.registerComponents("print",b.r(24)),kf.EditorFactory=c}};var c={"kf.start":50};!function(){try{a("kf.start")}catch(b){}}(this)}(); \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js new file mode 100644 index 0000000..153d6e1 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js @@ -0,0 +1,8572 @@ +/*! + * ==================================================== + * kity - v2.0.5 - 2015-11-12 + * https://github.com/fex-team/kity + * GitHub: https://github.com/fex-team/kity.git + * Copyright (c) 2015 Baidu FEX; Licensed BSD + * ==================================================== + */ + +(function () { +var _p = { + r: function(index) { + if (_p[index].inited) { + return _p[index].value; + } + if (typeof _p[index].value === "function") { + var module = { + exports: {} + }, returnValue = _p[index].value(null, module.exports, module); + _p[index].inited = true; + _p[index].value = returnValue; + if (returnValue !== undefined) { + return returnValue; + } else { + for (var key in module.exports) { + if (module.exports.hasOwnProperty(key)) { + _p[index].inited = true; + _p[index].value = module.exports; + return module.exports; + } + } + } + } else { + _p[index].inited = true; + return _p[index].value; + } + } +}; + +//src/animate/animator.js +/** + * @fileOverview + * + * 提供基本的动画支持 + */ +_p[0] = { + value: function(require) { + function parseTime(str) { + var value = parseFloat(str, 10); + if (/ms/.test(str)) { + return value; + } + if (/s/.test(str)) { + return value * 1e3; + } + if (/min/.test(str)) { + return value * 60 * 1e3; + } + return value; + } + var Timeline = _p.r(8); + var easingTable = _p.r(1); + /** + * @class kity.Animator + * @catalog animate + * @description 表示一个动画启动器,可以作用于不同的对象进行动画 + */ + var Animator = _p.r(11).createClass("Animator", { + /** + * @constructor + * @for kity.Animator + * @catalog animate + * + * @grammar new kity.Animator(beginValue, finishValue, setter) + * @grammar new kity.Animator(option) + * + * @param {any} beginValue|opt.beginValue + * 动画的起始值,允许的类型有数字、数组、字面量、kity.Point、kity.Vector、kity.Box、kity.Matrix + * + * @param {any} finishValue|opt.beginValue + * 动画的结束值,类型应于起始值相同 + * + * @param {Function} setter|opt.setter + * 值的使用函数,接受三个参数: function(target, value, timeline) + * target {object} 动画的目标 + * value {any} 动画的当前值 + * timeline {kity.Timeline} 动画当前的时间线对象 + */ + constructor: function(beginValue, finishValue, setter) { + if (arguments.length == 1) { + var opt = arguments[0]; + this.beginValue = opt.beginValue; + this.finishValue = opt.finishValue; + this.setter = opt.setter; + } else { + this.beginValue = beginValue; + this.finishValue = finishValue; + this.setter = setter; + } + }, + /** + * @method start() + * @for kity.Animator + * @description 使用当前的动画器启动在指定目标上启动动画 + * + * @grammar start(target, duration, easing, delay, callback) => {kity.Timeline} + * @grammar start(target, option) => {kity.Timeline} + * + * @param {object} target + * 启动动画的目标 + * + * @param {Number|String} duration|option.duration + * [Optional] 动画的持续时间,如 300、"300ms"、"1.5min" + * + * @param {String|Function} easing|option.easing + * [Optional] 动画使用的缓动函数,如 "ease"、"linear"、"swing" + * + * @param {Number|String} delay|option.delay + * [Optional] 动画的播放延迟时间 + * + * @param {Function} callback|option.callback + * [Optional] 动画结束后的回调函数 + * + * @example + * + * ```js + * var turnRed = new kity.Animator( + * new kity.Color('yellow'), + * new kity.Color('red'), + * function(target, value) { + * target.fill(value); + * }); + * + * turnRed.start(rect, 300, 'ease', function() { + * console.log('I am red!'); + * }); + * ``` + */ + start: function(target, duration, easing, delay, callback) { + if (arguments.length === 2 && typeof duration == "object") { + easing = duration.easing; + delay = duration.delay; + callback = duration.callback; + duration = duration.duration; + } + if (arguments.length === 4 && typeof delay == "function") { + callback = delay; + delay = 0; + } + var timeline = this.create(target, duration, easing, callback); + delay = parseTime(delay); + if (delay > 0) { + setTimeout(function() { + timeline.play(); + }, delay); + } else { + timeline.play(); + } + return timeline; + }, + /** + * @method create() + * @for kity.Animator + * @description 使用当前的动画器为指定目标创建时间线 + * + * @grammar create(target, duration, easing, callback) => {kity.Timeline} + * + * @param {object} target 要创建的时间线的目标 + * @param {Number|String} duration 要创建的时间线的长度,如 300、"5s"、"0.5min" + * @param {String|Function} easing 要创建的时间线的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 时间线播放结束之后的回调函数 + * + * @example + * + * ```js + * var expand = new kity.Animator({ + * beginValue: function(target) { + * return target.getBox(); + * }, + * finishValue: function(target) { + * return target.getBox().expand(100, 100, 100, 100); + * }, + * setter: function(target, value) { + * target.setBox(value) + * } + * }); + * + * var timeline = expand.create(rect, 300); + * timeline.repeat(3).play(); + * ``` + */ + create: function(target, duration, easing, callback) { + var timeline; + duration = duration && parseTime(duration) || Animator.DEFAULT_DURATION; + easing = easing || Animator.DEFAULT_EASING; + if (typeof easing == "string") { + easing = easingTable[easing]; + } + timeline = new Timeline(this, target, duration, easing); + if (typeof callback == "function") { + timeline.on("finish", callback); + } + return timeline; + }, + /** + * @method reverse() + * @for kity.Animator + * @grammar reverse() => {kity.Animator} + * @description 创建一个与当前动画器相反的动画器 + * + * @example + * + * ```js + * var turnYellow = turnRed.reverse(); + * ``` + */ + reverse: function() { + return new Animator(this.finishValue, this.beginValue, this.setter); + } + }); + Animator.DEFAULT_DURATION = 300; + Animator.DEFAULT_EASING = "linear"; + var Shape = _p.r(60); + _p.r(11).extendClass(Shape, { + /** + * @method animate() + * @for kity.Shape + * @description 在图形上播放使用指定的动画器播放动画,如果图形当前有动画正在播放,则会加入播放队列 + * + * @grammar animate(animator, duration, easing, delay, callback) + * + * @param {object} animator 播放动画使用的动画器 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + * + * @example + * + * ```js + * rect.animate(turnRed, 300); // turnRect 是一个动画器 + * rect.animate(expand, 500); // turnRect 播放结束后播放 expand + * ``` + */ + animate: function(animator, duration, easing, delay, callback) { + var queue = this._KityAnimateQueue = this._KityAnimateQueue || []; + var timeline = animator.create(this, duration, easing, callback); + function dequeue() { + queue.shift(); + if (queue.length) { + setTimeout(queue[0].t.play.bind(queue[0].t), queue[0].d); + } + } + timeline.on("finish", dequeue); + queue.push({ + t: timeline, + d: delay + }); + if (queue.length == 1) { + setTimeout(timeline.play.bind(timeline), delay); + } + return this; + }, + /** + * @method timeline() + * @for kity.Shape + * @description 获得当前正在播放的动画的时间线 + * + * @grammar timeline() => {kity.Timeline} + * + * @example + * + * ```js + * rect.timeline().repeat(2); + * ``` + */ + timeline: function() { + return this._KityAnimateQueue[0].t; + }, + /** + * @method stop() + * @for kity.Shape + * @description 停止当前正在播放的动画 + * + * @grammar stop() => {this} + * + * @example + * + * ```js + * rect.stop(); // 停止 rect 上的动画 + * ``` + */ + stop: function() { + var queue = this._KityAnimateQueue; + if (queue) { + while (queue.length) { + queue.shift().t.stop(); + } + } + return this; + } + }); + return Animator; + } +}; + +//src/animate/easing.js +/** + * Kity Animate Easing modified from jQuery Easing + * Author: techird + * Changes: + * 1. make easing functions standalone + * 2. remove the 'x' parameter + */ +/* ============================================================ + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Open source under the BSD License. + * + * Copyright © 2008 George McGinley Smith + * All rights reserved. + * https://raw.github.com/danro/jquery-easing/master/LICENSE + * ======================================================== */ +_p[1] = { + value: function(require, exports, module) { + var easings = { + // t: current_time, b: begin_value, c: change_value, d: duration + linear: function(t, b, c, d) { + return c * (t / d) + b; + }, + swing: function(t, b, c, d) { + return easings.easeOutQuad(t, b, c, d); + }, + ease: function(t, b, c, d) { + return easings.easeInOutCubic(t, b, c, d); + }, + easeInQuad: function(t, b, c, d) { + return c * (t /= d) * t + b; + }, + easeOutQuad: function(t, b, c, d) { + return -c * (t /= d) * (t - 2) + b; + }, + easeInOutQuad: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t + b; + return -c / 2 * (--t * (t - 2) - 1) + b; + }, + easeInCubic: function(t, b, c, d) { + return c * (t /= d) * t * t + b; + }, + easeOutCubic: function(t, b, c, d) { + return c * ((t = t / d - 1) * t * t + 1) + b; + }, + easeInOutCubic: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; + return c / 2 * ((t -= 2) * t * t + 2) + b; + }, + easeInQuart: function(t, b, c, d) { + return c * (t /= d) * t * t * t + b; + }, + easeOutQuart: function(t, b, c, d) { + return -c * ((t = t / d - 1) * t * t * t - 1) + b; + }, + easeInOutQuart: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b; + return -c / 2 * ((t -= 2) * t * t * t - 2) + b; + }, + easeInQuint: function(t, b, c, d) { + return c * (t /= d) * t * t * t * t + b; + }, + easeOutQuint: function(t, b, c, d) { + return c * ((t = t / d - 1) * t * t * t * t + 1) + b; + }, + easeInOutQuint: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b; + return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; + }, + easeInSine: function(t, b, c, d) { + return -c * Math.cos(t / d * (Math.PI / 2)) + c + b; + }, + easeOutSine: function(t, b, c, d) { + return c * Math.sin(t / d * (Math.PI / 2)) + b; + }, + easeInOutSine: function(t, b, c, d) { + return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; + }, + easeInExpo: function(t, b, c, d) { + return t === 0 ? b : c * Math.pow(2, 10 * (t / d - 1)) + b; + }, + easeOutExpo: function(t, b, c, d) { + return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; + }, + easeInOutExpo: function(t, b, c, d) { + if (t === 0) return b; + if (t == d) return b + c; + if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function(t, b, c, d) { + return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; + }, + easeOutCirc: function(t, b, c, d) { + return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; + }, + easeInOutCirc: function(t, b, c, d) { + if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; + }, + easeInElastic: function(t, b, c, d) { + var s = 1.70158; + var p = 0; + var a = c; + if (t === 0) return b; + if ((t /= d) == 1) return b + c; + if (!p) p = d * .3; + if (a < Math.abs(c)) { + a = c; + s = p / 4; + } else s = p / (2 * Math.PI) * Math.asin(c / a); + return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; + }, + easeOutElastic: function(t, b, c, d) { + var s = 1.70158; + var p = 0; + var a = c; + if (t === 0) return b; + if ((t /= d) == 1) return b + c; + if (!p) p = d * .3; + if (a < Math.abs(c)) { + a = c; + s = p / 4; + } else s = p / (2 * Math.PI) * Math.asin(c / a); + return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b; + }, + easeInOutElastic: function(t, b, c, d) { + var s = 1.70158; + var p = 0; + var a = c; + if (t === 0) return b; + if ((t /= d / 2) == 2) return b + c; + if (!p) p = d * (.3 * 1.5); + if (a < Math.abs(c)) { + a = c; + var s = p / 4; + } else var s = p / (2 * Math.PI) * Math.asin(c / a); + if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; + return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b; + }, + easeInBack: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c * (t /= d) * t * ((s + 1) * t - s) + b; + }, + easeOutBack: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; + }, + easeInOutBack: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b; + return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b; + }, + easeInBounce: function(t, b, c, d) { + return c - easings.easeOutBounce(d - t, 0, c, d) + b; + }, + easeOutBounce: function(t, b, c, d) { + if ((t /= d) < 1 / 2.75) { + return c * (7.5625 * t * t) + b; + } else if (t < 2 / 2.75) { + return c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b; + } else if (t < 2.5 / 2.75) { + return c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b; + } else { + return c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b; + } + }, + easeInOutBounce: function(t, b, c, d) { + if (t < d / 2) return easings.easeInBounce(t * 2, 0, c, d) * .5 + b; + return easings.easeOutBounce(t * 2 - d, 0, c, d) * .5 + c * .5 + b; + } + }; + return easings; + } +}; + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright © 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +//src/animate/frame.js +/** + * @fileOverview + * + * 提供动画帧的基本支持 + */ +_p[2] = { + value: function(require, exports) { + // 原生动画帧方法 polyfill + var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function(fn) { + return setTimeout(fn, 1e3 / 60); + }; + var cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.msCancelAnimationFrame || window.clearTimeout; + // 上一个请求的原生动画帧 id + var frameRequestId; + // 等待执行的帧动作的集合,这些帧的方法将在下个原生动画帧同步执行 + var pendingFrames = []; + /** + * 添加一个帧到等待集合中 + * + * 如果添加的帧是序列的第一个,至少有一个帧需要被执行,则会请求一个原生动画帧来执行 + */ + function pushFrame(frame) { + if (pendingFrames.push(frame) === 1) { + frameRequestId = requestAnimationFrame(executePendingFrames); + } + } + /** + * 执行所有等待帧 + */ + function executePendingFrames() { + var frames = pendingFrames; + pendingFrames = []; + while (frames.length) { + executeFrame(frames.pop()); + } + frameRequestId = 0; + } + /** + * @method kity.requestFrame + * @catalog animate + * @grammar kity.requestFrame(action) => {frame} + * @description 请求一个帧,执行指定的动作。动作回调提供一些有用的信息 + * + * @param {Function} action + * + * 要执行的动作,该动作回调有一个参数 frame,其中: + * + * frame.time {Number} + * 动作执行时的时间戳(ms) + * + * frame.index {Number} + * 当前执行的帧的编号(首帧为 0) + * + * frame.dur {Number} + * 上一帧至当前帧经过的时间,单位 ms + * + * frame.elapsed {Number} + * 从首帧开始到当前帧经过的时间,单位 ms + * + * frame.action {Number} + * 指向当前的帧处理函数 + * + * frame.next() + * 表示下一帧继续执行。如果不调用该方法,将不会执行下一帧。 + * + * @example + * + * ```js + * kity.requestFrame(function(frame) { + * console.log('平均帧率:' + frame.elapsed / (frame.index + 1)); + * + * // 更新或渲染动作 + * + * frame.next(); //继续执行下一帧 + * }); + * ``` + */ + function requestFrame(action) { + var frame = initFrame(action); + pushFrame(frame); + return frame; + } + /** + * @method kity.releaseFrame + * @catalog animate + * @grammar kity.releaseFrame(frame) + * @description 释放一个已经请求过的帧,如果该帧在等待集合里,将移除,下个动画帧不会执行释放的帧 + * + * @param {frame} frame 使用 kity.requestFrame() 返回的帧 + * + * @example + * + * ```js + * var frame = kity.requestFrame(function() {....}); + * kity.releaseFrame(frame); + * ``` + */ + function releaseFrame(frame) { + var index = pendingFrames.indexOf(frame); + if (~index) { + pendingFrames.splice(index, 1); + } + if (pendingFrames.length === 0) { + cancelAnimationFrame(frameRequestId); + } + } + /** + * 初始化一个帧,主要用于后续计算 + */ + function initFrame(action) { + var frame = { + index: 0, + time: +new Date(), + elapsed: 0, + action: action, + next: function() { + pushFrame(frame); + } + }; + return frame; + } + /** + * 执行一个帧动作 + */ + function executeFrame(frame) { + // 当前帧时间错 + var time = +new Date(); + // 当上一帧到当前帧经过的时间 + var dur = time - frame.time; + // + // http://stackoverflow.com/questions/13133434/requestanimationframe-detect-stop + // 浏览器最小化或切换标签,requestAnimationFrame 不会执行。 + // 检测时间超过 200 ms(频率小于 5Hz ) 判定为计时器暂停,重置为一帧长度 + // + if (dur > 200) { + dur = 1e3 / 60; + } + frame.dur = dur; + frame.elapsed += dur; + frame.time = time; + frame.action.call(null, frame); + frame.index++; + } + // 暴露 + exports.requestFrame = requestFrame; + exports.releaseFrame = releaseFrame; + } +}; + +//src/animate/motionanimator.js +/** + * @fileOverview + * + * 路径动画器,可以让一个物体沿着某个轨迹运动 + */ +_p[3] = { + value: function(require) { + var Animator = _p.r(0); + var g = _p.r(34); + var Path = _p.r(46); + var Shape = _p.r(60); + /** + * @class kity.MotionAnimator + * @catalog animate + * @base kity.Animator + * @description 路径动画器,可以让一个物体沿着某个轨迹运动 + * + * @example + * + * ```js + * var motionAnimator = new MotionAnimator('M0,0C100,0,100,0,100,100L200,200'); + * motionAnimator.start(rect, 3000); + * ``` + */ + var MotionAnimator = _p.r(11).createClass("MotionAnimator", { + base: Animator, + /** + * @constructor + * @for kity.MotionAnimator + * @grammar new kity.MotionAnimator(path, doRotate) + * @param {kity.Path|String|PathSegment} path 运动的轨迹,或者是 kity.Path 对象 + * @param {boolean} doRotate 是否让运动的目标沿着路径的切线方向旋转 + */ + constructor: function(path, doRotate) { + var me = this; + this.callBase({ + beginValue: 0, + finishValue: 1, + setter: function(target, value) { + var path = me.motionPath instanceof Path ? me.motionPath.getPathData() : me.motionPath; + var point = g.pointAtPath(path, value); + target.setTranslate(point.x, point.y); + if (this.doRotate) target.setRotate(point.tan.getAngle()); + } + }); + /** + * @property doRotate + * @for kity.MotionAnimator + * @type {boolean} + * @description 是否让运动的目标沿着路径的切线方向旋转 + * + * @example + * + * ```js + * motionAnimator.doRotate = true; // 目标沿着切线方向旋转 + * ``` + */ + this.doRotate = doRotate; + /** + * @property motionPath + * @for kity.MotionAnimator + * @type {kity.Path|String|PathSegment} + * @description 运动沿着的路径,可以在动画过程中更新 + */ + this.motionPath = path; + } + }); + _p.r(11).extendClass(Shape, { + /** + * @method motion() + * @catalog animate + * @for kity.Shape + * @description 让图形沿着指定的路径运动 + * + * @grammar motion(path, duration, easing, delay, callback) => this + * + * @param {kity.Path|String|PathSegment} path 运动的轨迹,或者是 kity.Path 对象 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + motion: function(path, duration, easing, delay, callback) { + return this.animate(new MotionAnimator(path), duration, easing, delay, callback); + } + }); + return MotionAnimator; + } +}; + +//src/animate/opacityanimator.js +/** + * @fileOverview + * + * 透明度动画器,让图形动画过度到指定的透明度。 + */ +_p[4] = { + value: function(require) { + var Animator = _p.r(0); + /** + * @class kity.OpacityAnimator + * @catalog animate + * @base kity.Animator + * @description 透明度动画器,让图形动画过度到指定的透明度 + */ + var OpacityAnimator = _p.r(11).createClass("OpacityAnimator", { + base: Animator, + /** + * @constructor + * @for kity.OpacityAnimator + * @grammar new kity.OpacityAnimator(opacity) + * + * @param {Number} opacity 目标透明度,取值范围 0 - 1 + */ + constructor: function(opacity) { + this.callBase({ + beginValue: function(target) { + return target.getOpacity(); + }, + finishValue: opacity, + setter: function(target, value) { + target.setOpacity(value); + } + }); + } + }); + var Shape = _p.r(60); + _p.r(11).extendClass(Shape, { + /** + * @method fxOpacity() + * @catalog animate + * @for kity.Shape + * @description 让图形的透明度以动画的形式过渡到指定的值 + * + * @grammar fxOpacity(opacity, duration, easing, delay, callback) => {this} + * + * @param {Number} opacity 动画的目标透明度 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fxOpacity: function(opacity, duration, easing, delay, callback) { + return this.animate(new OpacityAnimator(opacity), duration, easing, delay, callback); + }, + /** + * @method fadeTo() + * @catalog animate + * @for kity.Shape + * @description 让图形的透明度以动画的形式过渡到指定的值 + * + * @grammar fadeTo(opacity, duration, easing, delay, callback) => {this} + * + * @param {Number} opacity 动画的目标透明度 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fadeTo: function() { + return this.fxOpacity.apply(this, arguments); + }, + /** + * @method fadeIn() + * @catalog animate + * @for kity.Shape + * @description 让图形淡入 + * + * @grammar fadeIn(duration, easing, delay, callback) => {this} + * + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fadeIn: function() { + return this.fxOpacity.apply(this, [ 1 ].concat([].slice.call(arguments))); + }, + /** + * @method fadeOut() + * @catalog animate + * @for kity.Shape + * @description 让图形淡出 + * + * @grammar fadeIn(duration, easing, delay, callback) => {this} + * + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fadeOut: function() { + return this.fxOpacity.apply(this, [ 0 ].concat([].slice.call(arguments))); + } + }); + return OpacityAnimator; + } +}; + +//src/animate/pathanimator.js +/** + * @fileOverview + * + * 路径补间动画器,让图形从一个形状变为另一个形状 + */ +_p[5] = { + value: function(require) { + var Animator = _p.r(0); + var g = _p.r(34); + /** + * @catalog animate + * + * @class kity.PathAnimator + * @base kity.Animator + * @description 路径补间动画器,让图形从一个形状变为另一个形状 + * + * @example + * + * ```js + * var path = new kity.Path('M0,0L0,100'); + * var pa = new kity.PathAnimator('M0,0C100,0,100,0,100,100'); + * pa.start(path, 300); + * ``` + */ + var PathAnimator = _p.r(11).createClass("OpacityAnimator", { + base: Animator, + /** + * @constructor + * @for kity.PathAnimator + * + * @grammar new kity.Path.Animator(path) + * + * @param {String|PathSegment} path 目标形状的路径数据 + * + */ + constructor: function(path) { + this.callBase({ + beginValue: function(target) { + this.beginPath = target.getPathData(); + return 0; + }, + finishValue: 1, + setter: function(target, value) { + target.setPathData(g.pathTween(this.beginPath, path, value)); + } + }); + } + }); + var Path = _p.r(46); + _p.r(11).extendClass(Path, { + /** + * @catalog animate + * + * @method fxPath() + * @for kity.Shape + * @description 以动画的形式把路径变换为新路径 + * + * @grammar fxPath(path, duration, easing, delay, callback) => {this} + * + * @param {String|PathSegment} path 要变换新路径 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fxPath: function(path, duration, easing, delay, callback) { + return this.animate(new PathAnimator(path), duration, easing, delay, callback); + } + }); + return PathAnimator; + } +}; + +//src/animate/rotateanimator.js +/** + * @fileOverview + * + * 提供支持目标旋转的动画器 + */ +_p[6] = { + value: function(require) { + var Animator = _p.r(0); + /** + * @class kity.RotateAnimator + * @base Animator + * @description 提供支持目标旋转的动画器 + */ + var RotateAnimator = _p.r(11).createClass("RotateAnimator", { + base: Animator, + /** + * @constructor + * @for kity.RotateAnimator + * + * @grammar new kity.RotateAnimator(deg, ax, ay) + * + * @param {Number} deg 要旋转的角度 + */ + constructor: function(deg) { + this.callBase({ + beginValue: 0, + finishValue: deg, + setter: function(target, value, timeline) { + var delta = timeline.getDelta(); + target.rotate(delta, ax, ay); + } + }); + } + }); + var Shape = _p.r(60); + _p.r(11).extendClass(Shape, { + /** + * @method fxRotate() + * @for kity.Shape + * @description 让目标以动画旋转指定的角度 + * + * @grammar fxRotate(deg, duration, easing, delay) => {this} + * + * @param {Number} deg 要旋转的角度 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fxRotate: function(deg, duration, easing, delay, callback) { + return this.animate(new RotateAnimator(deg), duration, easing, delay, callback); + } + }); + return RotateAnimator; + } +}; + +//src/animate/scaleanimator.js +/** + * @fileOverview + * + * 提供支持目标缩放的动画器 + */ +_p[7] = { + value: function(require) { + var Animator = _p.r(0); + /** + * @class kity.ScaleAnimator + * @base kity.Animator + * @description 提供支持目标缩放的动画器 + */ + var ScaleAnimator = _p.r(11).createClass("ScaleAnimator", { + base: Animator, + /** + * @constructor + * @for kity.ScaleAnimator + * + * @grammar new kity.ScaleAnimator(sx, sy) + * @param {Number} sx x 轴的缩放比例 + * @param {Number} sy y 轴的缩放比例 + */ + constructor: function(sx, sy) { + this.callBase({ + beginValue: 0, + finishValue: 1, + setter: function(target, value, timeline) { + var delta = timeline.getDelta(); + var kx = Math.pow(sx, delta); + var ky = Math.pow(sy, delta); + target.scale(ky, kx); + } + }); + } + }); + var Shape = _p.r(60); + _p.r(11).extendClass(Shape, { + /** + * @method fxScale + * @for kity.Shape + * @description 动画缩放当前的图形 + * + * @grammar fxScale(sx, sy, duration, easing, delay, callback) => {this} + * + * @param {Number} sx x 轴的缩放比例 + * @param {Number} sy y 轴的缩放比例 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fxScale: function(sx, sy, duration, easing, delay, callback) { + return this.animate(new ScaleAnimator(sx, sy), duration, easing, delay, callback); + } + }); + return ScaleAnimator; + } +}; + +//src/animate/timeline.js +/** + * @fileOverview + * + * 动画时间线的实现 + */ +_p[8] = { + value: function(require) { + var EventHandler = _p.r(33); + var utils = _p.r(12); + var frame = _p.r(2); + function getPercentValue(b, f, p) { + return utils.paralle(b, f, function(b, f) { + return b + (f - b) * p; + }); + } + function getDelta(v1, v2) { + return utils.paralle(v1, v2, function(v1, v2) { + return v2 - v1; + }); + } + function TimelineEvent(timeline, type, param) { + this.timeline = timeline; + this.target = timeline.target; + this.type = type; + for (var name in param) { + if (param.hasOwnProperty(name)) { + this[name] = param[name]; + } + } + } + /** + * @class kity.Timeline + * @catalog animate + * @mixins EventHandler + * @description 动画时间线 + */ + var Timeline = _p.r(11).createClass("Timeline", { + mixins: [ EventHandler ], + /** + * @constructor + * @for kity.Timeline + * @private + * @description 时间线应该由动画器进行构造,不应手动创建 + * + */ + constructor: function(animator, target, duration, easing) { + this.callMixin(); + this.target = target; + this.time = 0; + this.duration = duration; + this.easing = easing; + this.animator = animator; + this.beginValue = animator.beginValue; + this.finishValue = animator.finishValue; + this.setter = animator.setter; + this.status = "ready"; + }, + /** + * @private + * + * 让时间线进入下一帧 + */ + nextFrame: function(frame) { + if (this.status != "playing") { + return; + } + this.time += frame.dur; + this.setValue(this.getValue()); + if (this.time >= this.duration) { + this.timeUp(); + } + frame.next(); + }, + /** + * @method getPlayTime() + * @for kity.Timeline + * @grammar getPlayTime() => {Number} + * @description 获得当前播放的时间,取值区间为 [0, duration] + */ + getPlayTime: function() { + return this.rollbacking ? this.duration - this.time : this.time; + }, + /** + * @method getTimeProportion() + * @for kity.Timeline + * @grammar getTimeProportion() => {Number} + * @description 获得当前播放时间的比例,取值区间为 [0, 1] + */ + getTimeProportion: function() { + return this.getPlayTime() / this.duration; + }, + /** + * @method getValueProportion() + * @for kity.Timeline + * @grammar getValueProportion() => {Number} + * @description 获得当前播放时间对应值的比例,取值区间为 [0, 1];该值实际上是时间比例值经过缓动函数计算之后的值。 + */ + getValueProportion: function() { + return this.easing(this.getPlayTime(), 0, 1, this.duration); + }, + /** + * @method getValue() + * @for kity.Timeline + * @grammar getValue() => {any} + * @description 返回当前播放时间对应的值。 + */ + getValue: function() { + var b = this.beginValue; + var f = this.finishValue; + var p = this.getValueProportion(); + return getPercentValue(b, f, p); + }, + /** + * @private + * + * 把值通过动画器的 setter 设置到目标上 + */ + setValue: function(value) { + this.lastValue = this.currentValue; + this.currentValue = value; + this.setter.call(this.target, this.target, value, this); + }, + /** + * @method getDelta() + * @for kity.Timeline + * @grammar getDelta() => {any} + * @description 返回当前值和上一帧的值的差值 + */ + getDelta: function() { + this.lastValue = this.lastValue === undefined ? this.beginValue : this.lastValue; + return getDelta(this.lastValue, this.currentValue); + }, + /** + * @method play() + * @for kity.Timeline + * @grammar play() => {this} + * @description 让时间线播放,如果时间线还没开始,或者已停止、已结束,则重头播放;如果是已暂停,从暂停的位置继续播放 + */ + play: function() { + var lastStatus = this.status; + this.status = "playing"; + switch (lastStatus) { + case "ready": + if (utils.isFunction(this.beginValue)) { + this.beginValue = this.beginValue.call(this.target, this.target); + } + if (utils.isFunction(this.finishValue)) { + this.finishValue = this.finishValue.call(this.target, this.target); + } + this.time = 0; + this.setValue(this.beginValue); + this.frame = frame.requestFrame(this.nextFrame.bind(this)); + break; + + case "finished": + case "stoped": + this.time = 0; + this.frame = frame.requestFrame(this.nextFrame.bind(this)); + break; + + case "paused": + this.frame.next(); + } + /** + * @event play + * @for kity.Timeline + * @description 在时间线播放后触发 + * + * @param {String} event.lastStatus + * 表示播放前的上一个状态,可能取值为 'ready'、'finished'、'stoped'、'paused' + */ + this.fire("play", new TimelineEvent(this, "play", { + lastStatus: lastStatus + })); + return this; + }, + /** + * @method pause() + * @for kity.Timeline + * @description 暂停当前的时间线 + * + * @grammar pause() => {this} + */ + pause: function() { + this.status = "paused"; + /** + * @event pause + * @for kity.Timeline + * @description 暂停事件,在时间线暂停时触发 + */ + this.fire("pause", new TimelineEvent(this, "pause")); + frame.releaseFrame(this.frame); + return this; + }, + /** + * @method stop() + * @for kity.Timeline + * @description 停止当前时间线 + * + * @grammar stop() => {this} + */ + stop: function() { + this.status = "stoped"; + this.setValue(this.finishValue); + this.rollbacking = false; + /** + * @event stop + * @for kity.Timeline + * @description 停止时间,在时间线停止时触发 + */ + this.fire("stop", new TimelineEvent(this, "stop")); + frame.releaseFrame(this.frame); + return this; + }, + /** + * @private + * + * 播放结束之后的处理 + */ + timeUp: function() { + if (this.repeatOption) { + this.time = 0; + if (this.rollback) { + if (this.rollbacking) { + this.decreaseRepeat(); + this.rollbacking = false; + } else { + this.rollbacking = true; + /** + * @event rollback + * @for kity.Timeline + * @description 回滚事件,在时间线回滚播放开始的时候触发 + */ + this.fire("rollback", new TimelineEvent(this, "rollback")); + } + } else { + this.decreaseRepeat(); + } + if (!this.repeatOption) { + this.finish(); + } else { + /** + * @event repeat + * @for kity.Timeline + * @description 循环事件,在时间线循环播放开始的时候触发 + */ + this.fire("repeat", new TimelineEvent(this, "repeat")); + } + } else { + this.finish(); + } + }, + /** + * @private + * + * 决定播放结束的处理 + */ + finish: function() { + this.setValue(this.finishValue); + this.status = "finished"; + /** + * @event finish + * @for kity.Timeline + * @description 结束事件,在时间线播放结束后触发(包括重复和回滚都结束) + */ + this.fire("finish", new TimelineEvent(this, "finish")); + frame.releaseFrame(this.frame); + }, + /** + * @private + * + * 循环次数递减 + */ + decreaseRepeat: function() { + if (this.repeatOption !== true) { + this.repeatOption--; + } + }, + /** + * @method repeat() + * @for kity.Timeline + * @description 设置时间线的重复选项 + * + * @grammar repeat(repeat, rollback) => {this} + * + * @param {Number|Boolean} repeat + * 是否重复播放,设置为 true 无限循环播放,设置数值则循环指定的次数 + * @param {Boolean} rollback + * 指示是否要回滚播放。 + * 如果设置为真,一次事件到 duration 则一个来回算一次循环次数,否则播放完成一次算一次循环次数 + * + */ + repeat: function(repeat, rollback) { + this.repeatOption = repeat; + this.rollback = rollback; + return this; + } + }); + Timeline.requestFrame = frame.requestFrame; + Timeline.releaseFrame = frame.releaseFrame; + return Timeline; + } +}; + +//src/animate/translateanimator.js +/** + * @fileOverview + * + * 提供让图形移动的动画器 + */ +_p[9] = { + value: function(require) { + var Animator = _p.r(0); + /** + * @class kity.TranslateAnimator + * @base kity.Animator + * @description 提供让图形移动的动画器 + */ + var TranslateAnimator = _p.r(11).createClass("TranslateAnimator", { + base: Animator, + /** + * @constructor + * @for kity.TranslateAnimator + * @grammar new kity.TranslateAnimator(x, y) + * @param {Number} x x 方向上需要移动的距离 + * @param {Number} y y 方向上需要移动的距离 + */ + constructor: function(x, y) { + this.callBase({ + x: 0, + y: 0 + }, { + x: x, + y: y + }, function(target, value, timeline) { + var delta = timeline.getDelta(); + target.translate(delta.x, delta.y); + }); + } + }); + var Shape = _p.r(60); + _p.r(11).extendClass(Shape, { + /** + * @method fxTranslate() + * @for kity.Shape + * @description 让目标以动画平移指定的距离 + * + * @grammar fxTranslate(x, y, duration, easing, delay, callback) => {this} + * + * @param {Number} x x 方向上需要移动的距离 + * @param {Number} y y 方向上需要移动的距离 + * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" + * @param {Number|String} delay 动画播放前的延时 + * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' + * @param {Function} callback 播放结束之后的回调函数 + */ + fxTranslate: function(x, y, duration, easing, delay, callback) { + return this.animate(new TranslateAnimator(x, y), duration, easing, delay, callback); + } + }); + return TranslateAnimator; + } +}; + +//src/core/browser.js +/** + * @fileOverview + * + * 提供浏览器判断的一些字段 + */ +_p[10] = { + value: function() { + /** + * @class kity.Browser + * @catalog core + * @static + * @description 提供浏览器信息 + */ + var browser = function() { + var agent = navigator.userAgent.toLowerCase(), opera = window.opera, browser; + // 浏览器对象 + browser = { + /** + * @property platform + * @description 获取浏览器所在系统,"Win"->Windows;"Mac"->Mac;"Lux"->Linux + * @type {String} + */ + platform: function(navigator) { + var _p = { + win32: "Win", + macintel: "Mac" + }; + return _p[navigator.platform.toLowerCase()] || "Lux"; + }(navigator), + /** + * 猎豹,区分两种不同内核 + */ + lb: function(agent) { + if (~agent.indexOf("lbbrowser")) { + return ~agent.indexOf("msie") ? "ie" : "chrome"; + } + return false; + }(agent), + /** + * 搜狗 + */ + sg: /se[\s\S]+metasr/.test(agent), + /** + * 百度 + */ + bd: !!~agent.indexOf("bidubrowser"), + /** + * edge浏览器 + */ + edge: !!~agent.indexOf("edge"), + /** + * chrome初始化为false + * @type {Boolean} + */ + chrome: false, + /** + * @property opera + * @for kity.Browser + * @description 判断是否为 Opera 浏览器 + * @type {boolean} + */ + opera: !!opera && opera.version, + /** + * @property webkit + * @for kity.Browser + * @description 判断是否为 Webkit 内核的浏览器 + * @type {boolean} + */ + webkit: agent.indexOf(" applewebkit/") > -1, + /** + * @property mac + * @for kity.Browser + * @description 判断是否为 Mac 下的浏览器 + * @type {boolean} + */ + mac: agent.indexOf("macintosh") > -1 + }; + /** + * @property ie + * @for kity.Browser + * @description 判断是否为 IE 浏览器 + * @type {boolean} + */ + browser.ie = !browser.lb && /(msie\s|trident.*rv:)([\w.]+)/.test(agent); + browser.gecko = navigator.product == "Gecko" && !browser.webkit && !browser.opera && !browser.ie; + var version = 0; + // Internet Explorer 6.0+ + if (browser.ie) { + version = (agent.match(/(msie\s|trident.*rv:)([\w.]+)/)[2] || 0) * 1; + browser.ie11Compat = document.documentMode == 11; + browser.ie9Compat = document.documentMode == 9; + } + // Gecko. + if (browser.gecko) { + var geckoRelease = agent.match(/rv:([\d\.]+)/); + if (geckoRelease) { + geckoRelease = geckoRelease[1].split("."); + version = geckoRelease[0] * 1e4 + (geckoRelease[1] || 0) * 100 + (geckoRelease[2] || 0) * 1; + } + } + // 排除其他chrome内核的浏览器的干扰 + if (/chrome\/(\d+\.\d)/i.test(agent) && !browser.bd && !browser.opera && !browser.lb && !browser.sg && !browser.edge) { + /** + * @property chrome + * @for kity.Browser + * @description 判断是否为 Chrome 浏览器 + * @type {boolean} + */ + browser.chrome = +RegExp["$1"]; + } + if (/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(agent) && !/chrome/i.test(agent)) { + browser.safari = +(RegExp["$1"] || RegExp["$2"]); + } + // Opera 9.50+ + if (browser.opera) version = parseFloat(opera.version()); + // WebKit 522+ (Safari 3+) + if (browser.webkit) version = parseFloat(agent.match(/ applewebkit\/(\d+)/)[1]); + // 搜狗版本号无从得知 + // 猎豹版本号无从得知 + // 百度 + if (browser.bd) version = parseFloat(agent.match(/bidubrowser\/(\d+)/)[1]); + // Opera 9.50+ + if (browser.opera) version = parseFloat(agent.match(/opr\/(\d+)/)[1]); + // edge + if (browser.edge) version = parseFloat(agent.match(/edge\/(\d+)/)[1]); + /** + * @property version + * @for kity.Browser + * @description 获取当前浏览器的版本 + * @type {Number} + */ + browser.version = version; + browser.isCompatible = !browser.mobile && (browser.ie && version >= 6 || browser.gecko && version >= 10801 || browser.opera && version >= 9.5 || browser.air && version >= 1 || browser.webkit && version >= 522 || false); + return browser; + }(); + return browser; + } +}; + +//src/core/class.js +/** + * @fileOverview + * + * 提供 Kity 的 OOP 支持 + */ +_p[11] = { + value: function(require, exports) { + /** + * @class kity.Class + * @catalog core + * @description 所有 kity 类的基类 + * @abstract + */ + function Class() {} + exports.Class = Class; + Class.__KityClassName = "Class"; + /** + * @method base() + * @for kity.Class + * @protected + * @grammar base(name, args...) => {any} + * @description 调用父类指定名称的函数 + * @param {string} name 函数的名称 + * @param {parameter} args... 传递给父类函数的参数 + * + * @example + * + * ```js + * var Person = kity.createClass('Person', { + * toString: function() { + * return 'I am a person'; + * } + * }); + * + * var Male = kity.createClass('Male', { + * base: Person, + * + * toString: function() { + * return 'I am a man'; + * }, + * + * speak: function() { + * return this.base('toString') + ',' + this.toString(); + * } + * }) + * ``` + */ + Class.prototype.base = function(name) { + var caller = arguments.callee.caller; + var method = caller.__KityMethodClass.__KityBaseClass.prototype[name]; + return method.apply(this, Array.prototype.slice.call(arguments, 1)); + }; + /** + * @method callBase() + * @for kity.Class + * @protected + * @grammar callBase(args...) => {any} + * @description 调用父类同名函数 + * @param {parameter} args... 传递到父类同名函数的参数 + * + * @example + * + * ```js + * var Animal = kity.createClass('Animal', { + * constructor: function(name) { + * this.name = name; + * }, + * toString: function() { + * return 'I am an animal name ' + this.name; + * } + * }); + * + * var Dog = kity.createClass('Dog', { + * constructor: function(name) { + * this.callBase(name); + * }, + * toString: function() { + * return this.callBase() + ', a dog'; + * } + * }); + * + * var dog = new Dog('Dummy'); + * console.log(dog.toString()); // "I am an animal name Dummy, a dog"; + * ``` + */ + Class.prototype.callBase = function() { + var caller = arguments.callee.caller; + var method = caller.__KityMethodClass.__KityBaseClass.prototype[caller.__KityMethodName]; + return method.apply(this, arguments); + }; + Class.prototype.mixin = function(name) { + var caller = arguments.callee.caller; + var mixins = caller.__KityMethodClass.__KityMixins; + if (!mixins) { + return this; + } + var method = mixins[name]; + return method.apply(this, Array.prototype.slice.call(arguments, 1)); + }; + Class.prototype.callMixin = function() { + var caller = arguments.callee.caller; + var methodName = caller.__KityMethodName; + var mixins = caller.__KityMethodClass.__KityMixins; + if (!mixins) { + return this; + } + var method = mixins[methodName]; + if (methodName == "constructor") { + for (var i = 0, l = method.length; i < l; i++) { + method[i].call(this); + } + return this; + } else { + return method.apply(this, arguments); + } + }; + /** + * @method pipe() + * @for kity.Class + * @grammar pipe() => {this} + * @description 以当前对象为上线文以及管道函数的第一个参数,执行一个管道函数 + * @param {Function} fn 进行管道操作的函数 + * + * @example + * + * ```js + * var rect = new kity.Rect().pipe(function() { + * this.setWidth(500); + * this.setHeight(300); + * }); + * ``` + */ + Class.prototype.pipe = function(fn) { + if (typeof fn == "function") { + fn.call(this, this); + } + return this; + }; + /** + * @method getType() + * @for kity.Class + * @grammar getType() => {string} + * @description 获得对象的类型 + * + * @example + * + * ```js + * var rect = new kity.Rect(); + * var circle = new kity.Circle(); + * + * console.log(rect.getType()); // "Rect" + * console.log(rect.getType()); // "Circle" + * ``` + */ + Class.prototype.getType = function() { + return this.__KityClassName; + }; + /** + * @method getClass() + * @for kity.Class + * @grammar getClass() => {Class} + * @description 获得对象的类 + * + * @example + * + * ```js + * var rect = new kity.Rect(); + * + * console.log(rect.getClass() === kity.Rect); // true + * console.log(rect instanceof kity.Rect); // true + * ``` + */ + Class.prototype.getClass = function() { + return this.constructor; + }; + // 检查基类是否调用了父类的构造函数 + // 该检查是弱检查,假如调用的代码被注释了,同样能检查成功(这个特性可用于知道建议调用,但是出于某些原因不想调用的情况) + function checkBaseConstructorCall(targetClass, classname) { + var code = targetClass.toString(); + if (!/this\.callBase/.test(code)) { + throw new Error(classname + " : 类构造函数没有调用父类的构造函数!为了安全,请调用父类的构造函数"); + } + } + var KITY_INHERIT_FLAG = "__KITY_INHERIT_FLAG_" + +new Date(); + function inherit(constructor, BaseClass, classname) { + var KityClass = eval("(function " + classname + "( __inherit__flag ) {" + "if( __inherit__flag != KITY_INHERIT_FLAG ) {" + "KityClass.__KityConstructor.apply(this, arguments);" + "}" + "this.__KityClassName = KityClass.__KityClassName;" + "})"); + KityClass.__KityConstructor = constructor; + KityClass.prototype = new BaseClass(KITY_INHERIT_FLAG); + for (var methodName in BaseClass.prototype) { + if (BaseClass.prototype.hasOwnProperty(methodName) && methodName.indexOf("__Kity") !== 0) { + KityClass.prototype[methodName] = BaseClass.prototype[methodName]; + } + } + KityClass.prototype.constructor = KityClass; + return KityClass; + } + function mixin(NewClass, mixins) { + if (false === mixins instanceof Array) { + return NewClass; + } + var i, length = mixins.length, proto, method; + NewClass.__KityMixins = { + constructor: [] + }; + for (i = 0; i < length; i++) { + proto = mixins[i].prototype; + for (method in proto) { + if (false === proto.hasOwnProperty(method) || method.indexOf("__Kity") === 0) { + continue; + } + if (method === "constructor") { + // constructor 特殊处理 + NewClass.__KityMixins.constructor.push(proto[method]); + } else { + NewClass.prototype[method] = NewClass.__KityMixins[method] = proto[method]; + } + } + } + return NewClass; + } + function extend(BaseClass, extension) { + if (extension.__KityClassName) { + extension = extension.prototype; + } + for (var methodName in extension) { + if (extension.hasOwnProperty(methodName) && methodName.indexOf("__Kity") && methodName != "constructor") { + var method = BaseClass.prototype[methodName] = extension[methodName]; + method.__KityMethodClass = BaseClass; + method.__KityMethodName = methodName; + } + } + return BaseClass; + } + /** + * @method kity.createClass() + * @grammar kity.createClass(classname, defines) => {Class} + * @description 创建一个类 + * @param {string} classname 类名,用于调试的时候查看,可选 + * @param {object} defines 类定义 + * defines.base {Class} + * 定义的类的基类,如果不配置,则表示基类为 kity.Class + * defines.mixins {Class[]} + * 定义的类要融合的类列表 + * defines.constructor {Function} + * 定义类的构造函数,如果父类显式定义了构造函数,需要在构造函数中使用 callBase() 方法调用父类的构造函数 + * defines.* {Function} + * 定义类的其它函数 + * + * @example 创建一个类 + * + * ```js + * var Animal = kity.createClass('Animal', { + * constructor: function(name) { + * this.name = name; + * }, + * toString: function() { + * return this.name; + * } + * }); + * + * var a = new Animal('kity'); + * console.log(a.toString()); // "kity" + * ``` + * + * @example 继承一个类 + * + * ```js + * var Cat = kity.createClass('Cat', { + * base: Animal, + * constructor: function(name, color) { + * // 调用父类构造函数 + * this.callBase(name); + * }, + * toString: function() { + * return 'A ' + this.color + ' cat, ' + this.callBase(); + * } + * }); + * + * var cat = new Cat('kity', 'black'); + * console.log(cat.toString()); // "A black cat, kity" + * ``` + * + * @example 混合类的能力 + * ```js + * var Walkable = kity.createClass('Walkable', { + * constructor: function() { + * this.speed = 'fast'; + * }, + * walk: function() { + * console.log('I am walking ' + this.speed); + * } + * }); + * + * var Dog = kity.createClass('Dog', { + * base: Animal, + * mixins: [Walkable], + * constructor: function(name) { + * this.callBase(name); + * this.callMixins(); + * } + * }); + * + * var dog = new Dog('doggy'); + * console.log(dog.toString() + ' say:'); + * dog.walk(); + * ``` + */ + exports.createClass = function(classname, defines) { + var constructor, NewClass, BaseClass; + if (arguments.length === 1) { + defines = arguments[0]; + classname = "AnonymousClass"; + } + BaseClass = defines.base || Class; + if (defines.hasOwnProperty("constructor")) { + constructor = defines.constructor; + if (BaseClass != Class) { + checkBaseConstructorCall(constructor, classname); + } + } else { + constructor = function() { + this.callBase.apply(this, arguments); + this.callMixin.apply(this, arguments); + }; + } + NewClass = inherit(constructor, BaseClass, classname); + NewClass = mixin(NewClass, defines.mixins); + NewClass.__KityClassName = constructor.__KityClassName = classname; + NewClass.__KityBaseClass = constructor.__KityBaseClass = BaseClass; + NewClass.__KityMethodName = constructor.__KityMethodName = "constructor"; + NewClass.__KityMethodClass = constructor.__KityMethodClass = NewClass; + // 下面这些不需要拷贝到原型链上 + delete defines.mixins; + delete defines.constructor; + delete defines.base; + NewClass = extend(NewClass, defines); + return NewClass; + }; + /** + * @method kity.extendClass() + * @grammar kity.extendClass(clazz, extension) => {Class} + * @description 拓展一个已有的类 + * + * @example + * + * ```js + * kity.extendClass(Dog, { + * spark: function() { + * console.log('wao wao wao!'); + * } + * }); + * + * new Dog().spark(); // "wao wao wao!"; + * ``` + */ + exports.extendClass = extend; + } +}; + +//src/core/utils.js +/** + * @fileOverview + * + * 一些常用的工具方法 + */ +_p[12] = { + value: function() { + /** + * @class kity.Utils + * @catalog core + * @static + * @description 提供常用的工具方法 + */ + var utils = { + /** + * @method each() + * @for kity.Utils + * @grammar each(obj, interator, context) + * @param {Object|Array} obj 要迭代的对象或数组 + * @param {Function} iterator 迭代函数 + * @param {Any} context 迭代函数的上下文 + * + * @example 迭代数组 + * + * ```js + * kity.Utils.each([1, 2, 3, 4, 5], function(value, index, array) { + * console.log(value, index); + * }); + * // 1, 0 + * // 2, 1 + * // 3, 2 + * // 4, 3 + * // 5, 4 + * ``` + * + * @example 迭代对象 + * + * ```js + * var obj = { + * name: 'kity', + * version: '1.2.1' + * }; + * var param = []; + * kity.Utils.each(obj, function(value, key, obj) { + * param.push(key + '=' + value); + * }); + * console.log(param.join('&')); // "name=kity&version=1.2.1" + * ``` + */ + each: function each(obj, iterator, context) { + if (obj === null) { + return; + } + if (obj.length === +obj.length) { + for (var i = 0, l = obj.length; i < l; i++) { + if (iterator.call(context, obj[i], i, obj) === false) { + return false; + } + } + } else { + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + if (iterator.call(context, obj[key], key, obj) === false) { + return false; + } + } + } + } + }, + /** + * @method extend() + * @for kity.Utils + * @grammar extend(target, sources..., notCover) => {object} + * @description 把源对象的属性合并到目标对象上 + * @param {object} target 目标对象 + * @param {parameter} sources 源对象 + * @param {boolean} notCover 是否不要覆盖源对象已有的属性 + * + * @example + * + * ```js + * var a = { + * key1: 'a1', + * key2: 'a2' + * }; + * + * var b = { + * key2: 'b2', + * key3: 'b3' + * }; + * + * var c = { + * key4: 'c4' + * }; + * + * var d = kity.extend(a, b, c); + * + * console.log(d === a); // true + * console.log(a); // {key1: 'a1', key2: 'b2', key3: 'b3', key4: 'c4'} + * ``` + */ + extend: function extend(t) { + var a = arguments, notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false, len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length; + for (var i = 1; i < len; i++) { + var x = a[i]; + for (var k in x) { + if (!notCover || !t.hasOwnProperty(k)) { + t[k] = x[k]; + } + } + } + return t; + }, + /** + * @method deepExtend() + * @for kity.Utils + * @grammar deepExtend(target, sources..., notCover) + * @description 把源对象的属性合并到目标对象上,如果属性是对象,会递归合并 + * @param {object} target 目标对象 + * @param {parameter} sources 源对象 + * @param {boolean} notCover 是否不要覆盖源对象已有的属性 + */ + deepExtend: function(t, s) { + var a = arguments, notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false, len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length; + for (var i = 1; i < len; i++) { + var x = a[i]; + for (var k in x) { + if (!notCover || !t.hasOwnProperty(k)) { + if (this.isObject(t[k]) && this.isObject(x[k])) { + this.deepExtend(t[k], x[k], notCover); + } else { + t[k] = x[k]; + } + } + } + } + return t; + }, + /** + * @method clone() + * @for kity.Utils + * @grammar clone(obj) => {object} + * @description 返回一个对象的克隆副本(非深度复制) + * @param {object} obj 要克隆的对象 + * + * @example + * + * ```js + * var source = { + * key1: { + * key2: 'value2' + * }, + * key3: 'value3' + * }; + * + * var target = kity.Utils.clone(source); + * + * console.log(target === source); // false + * console.log(target.key1 === source.key1); // true + * console.log(target.key3 === source.key3); // true + * ``` + */ + clone: function clone(obj) { + var cloned = {}; + for (var m in obj) { + if (obj.hasOwnProperty(m)) { + cloned[m] = obj[m]; + } + } + return cloned; + }, + /** + * @method copy() + * @for kity.Utils + * @grammar copy(obj) => {object} + * @description 返回一个对象的拷贝副本(深度复制) + * @param {object} obj 要拷贝的对象 + * + * @example + * + * ```js + * var source = { + * key1: { + * key2: 'value2' + * }, + * key3: 'value3' + * }; + * + * var target = kity.Utils.copy(source); + * + * console.log(target === source); // false + * console.log(target.key1 === source.key1); // false + * console.log(target.key3 === source.key3); // true,因为是值类型 + * ``` + */ + copy: function copy(obj) { + if (typeof obj !== "object") return obj; + if (typeof obj === "function") return null; + return JSON.parse(JSON.stringify(obj)); + }, + queryPath: function(path, obj) { + var arr = path.split("."); + var i = 0, tmp = obj, l = arr.length; + while (i < l) { + if (arr[i] in tmp) { + tmp = tmp[arr[i]]; + i++; + if (i >= l || tmp === undefined) { + return tmp; + } + } else { + return undefined; + } + } + }, + getValue: function(value, defaultValue) { + return value !== undefined ? value : defaultValue; + }, + /** + * @method flatten() + * @for kity.Utils + * @grammar flatten(arr) => {Array} + * @description 返回给定数组的扁平化版本 + * @param {Array} arr 要扁平化的数组 + * + * @example + * + * ```js + * var flattened = kity.Utils.flatten([[1, 2], [2, 3], [[4, 5], [6, 7]]]); + * console.log(flattened); // [1, 2, 3, 4, 5, 6, 7]; + * ``` + */ + flatten: function flatten(arr) { + var result = [], length = arr.length, i; + for (i = 0; i < length; i++) { + if (arr[i] instanceof Array) { + result = result.concat(utils.flatten(arr[i])); + } else { + result.push(arr[i]); + } + } + return result; + }, + /** + * @method paralle() + * @for kity.Utils + * @grammar paralle() => {Any} + * + * @description 平行地对 v1 和 v2 进行指定的操作 + * + * 如果 v1 是数字,那么直接进行 op 操作 + * 如果 v1 是对象,那么返回一个对象,其元素是 v1 和 v2 同键值的每个元素平行地进行 op 操作的结果 + * 如果 v1 是数组,那么返回一个数组,其元素是 v1 和 v2 同索引的每个元素平行地进行 op 操作的结果 + * + * @param {Number|Object|Array} v1 第一个操作数 + * @param {Number|Object|Array} v2 第二个操作数 + * @param {Function} op 操作函数 + * + * + * + * @example + * + * ```js + * var a = { + * value1: 1, + * value2: 2, + * value3: [3, 4, 5] + * }; + * + * var b = { + * value1: 2, + * value2: 3, + * value3: [4, 5, 6] + * }; + * + * var c = kity.Utils.paralle(a, b, function(v1, v2) { + * return v1 + v2; + * }); + * + * console.log(c.value1); // 3 + * console.log(c.value2); // 5 + * console.log(c.value3); // [7, 9, 11] + * + * ``` + */ + paralle: function paralle(v1, v2, op) { + var Class, field, index, name, value; + // 数组 + if (v1 instanceof Array) { + value = []; + for (index = 0; index < v1.length; index++) { + value.push(utils.paralle(v1[index], v2[index], op)); + } + return value; + } + // 对象 + if (v1 instanceof Object) { + // 如果值是一个支持原始表示的实例,获取其原始表示 + Class = v1.getClass && v1.getClass(); + if (Class && Class.parse) { + v1 = v1.valueOf(); + v2 = v2.valueOf(); + value = utils.paralle(v1, v2, op); + value = Class.parse(value); + } else { + value = {}; + for (name in v1) { + if (v1.hasOwnProperty(name) && v2.hasOwnProperty(name)) { + value[name] = utils.paralle(v1[name], v2[name], op); + } + } + } + return value; + } + // 是否数字 + if (false === isNaN(parseFloat(v1))) { + return op(v1, v2); + } + return value; + }, + /** + * 创建 op 操作的一个平行化版本 + */ + parallelize: function parallelize(op) { + return function(v1, v2) { + return utils.paralle(v1, v2, op); + }; + } + }; + /** + * @method isString() + * @for kity.Utils + * @grammar isString(unknown) => {boolean} + * @description 判断一个值是否为字符串类型 + * @param {any} unknown 要判断的值 + */ + /** + * @method isFunction() + * @for kity.Utils + * @grammar isFunction(unknown) => {boolean} + * @description 判断一个值是否为函数类型 + * @param {any} unknown 要判断的值 + */ + /** + * @method isArray() + * @for kity.Utils + * @grammar isArray(unknown) => {boolean} + * @description 判断一个值是否为数组类型 + * @param {any} unknown 要判断的值 + */ + /** + * @method isNumber() + * @for kity.Utils + * @grammar isNumber(unknown) => {boolean} + * @description 判断一个值是否为数字类型 + * @param {any} unknown 要判断的值 + */ + /** + * @method isRegExp() + * @for kity.Utils + * @grammar isRegExp(unknown) => {boolean} + * @description 判断一个值是否为正则表达式类型 + * @param {any} unknown 要判断的值 + */ + /** + * @method isObject() + * @for kity.Utils + * @grammar isObject(unknown) => {boolean} + * @description 判断一个值是否为对象类型 + * @param {any} unknown 要判断的值 + */ + /** + * @method isBoolean() + * @for kity.Utils + * @grammar isBoolean(unknown) => {boolean} + * @description 判断一个值是否为布尔类型 + * @param {any} unknown 要判断的值 + */ + utils.each([ "String", "Function", "Array", "Number", "RegExp", "Object", "Boolean" ], function(v) { + utils["is" + v] = function typeCheck(obj) { + return Object.prototype.toString.apply(obj) == "[object " + v + "]"; + }; + }); + return utils; + } +}; + +//src/filter/effect/colormatrixeffect.js +/** + * 颜色矩阵运算效果封装 + */ +_p[13] = { + value: function(require, exports, module) { + var Effect = _p.r(16), Utils = _p.r(12); + var ColorMatrixEffect = _p.r(11).createClass("ColorMatrixEffect", { + base: Effect, + constructor: function(type, input) { + this.callBase(Effect.NAME_COLOR_MATRIX); + this.set("type", Utils.getValue(type, ColorMatrixEffect.TYPE_MATRIX)); + this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); + } + }); + Utils.extend(ColorMatrixEffect, { + // 类型常量 + TYPE_MATRIX: "matrix", + TYPE_SATURATE: "saturate", + TYPE_HUE_ROTATE: "hueRotate", + TYPE_LUMINANCE_TO_ALPHA: "luminanceToAlpha", + // 矩阵常量 + MATRIX_ORIGINAL: "10000010000010000010".split("").join(" "), + MATRIX_EMPTY: "00000000000000000000".split("").join(" ") + }); + return ColorMatrixEffect; + } +}; + +//src/filter/effect/compositeeffect.js +/** + * 高斯模糊效果封装 + */ +_p[14] = { + value: function(require, exports, module) { + var Effect = _p.r(16), Utils = _p.r(12); + var CompositeEffect = _p.r(11).createClass("CompositeEffect", { + base: Effect, + constructor: function(operator, input, input2) { + this.callBase(Effect.NAME_COMPOSITE); + this.set("operator", Utils.getValue(operator, CompositeEffect.OPERATOR_OVER)); + if (input) { + this.set("in", input); + } + if (input2) { + this.set("in2", input2); + } + } + }); + Utils.extend(CompositeEffect, { + // operator 常量 + OPERATOR_OVER: "over", + OPERATOR_IN: "in", + OPERATOR_OUT: "out", + OPERATOR_ATOP: "atop", + OPERATOR_XOR: "xor", + OPERATOR_ARITHMETIC: "arithmetic" + }); + return CompositeEffect; + } +}; + +//src/filter/effect/convolvematrixeffect.js +/** + * 像素级别的矩阵卷积运算效果封装 + */ +_p[15] = { + value: function(require, exports, module) { + var Effect = _p.r(16), Utils = _p.r(12); + var ConvolveMatrixEffect = _p.r(11).createClass("ConvolveMatrixEffect", { + base: Effect, + constructor: function(edgeMode, input) { + this.callBase(Effect.NAME_CONVOLVE_MATRIX); + this.set("edgeMode", Utils.getValue(edgeMode, ConvolveMatrixEffect.MODE_DUPLICATE)); + this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); + } + }); + Utils.extend(ConvolveMatrixEffect, { + MODE_DUPLICATE: "duplicate", + MODE_WRAP: "wrap", + MODE_NONE: "none" + }); + return ConvolveMatrixEffect; + } +}; + +//src/filter/effect/effect.js +/* + * 效果类 + * 该类型的对象不存储任何内部属性, 所有操作都是针对该类对象所维护的节点进行的 + */ +_p[16] = { + value: function(require, exports, module) { + var svg = _p.r(67), Effect = _p.r(11).createClass("Effect", { + constructor: function(type) { + this.node = svg.createNode(type); + }, + getId: function() { + return this.node.id; + }, + setId: function(id) { + this.node.id = id; + return this; + }, + set: function(key, value) { + this.node.setAttribute(key, value); + return this; + }, + get: function(key) { + return this.node.getAttribute(key); + }, + getNode: function() { + return this.node; + }, + // 返回该效果的result + toString: function() { + return this.node.getAttribute("result") || ""; + } + }); + _p.r(12).extend(Effect, { + // 特效名称常量 + NAME_GAUSSIAN_BLUR: "feGaussianBlur", + NAME_OFFSET: "feOffset", + NAME_COMPOSITE: "feComposite", + NAME_COLOR_MATRIX: "feColorMatrix", + NAME_CONVOLVE_MATRIX: "feConvolveMatrix", + // 输入常量 + INPUT_SOURCE_GRAPHIC: "SourceGraphic", + INPUT_SOURCE_ALPHA: "SourceAlpha", + INPUT_BACKGROUND_IMAGE: "BackgroundImage", + INPUT_BACKGROUND_ALPHA: "BackgroundAlpha", + INPUT_FILL_PAINT: "FillPaint", + INPUT_STROKE_PAINT: "StrokePaint" + }); + return Effect; + } +}; + +//src/filter/effect/gaussianblureffect.js +/** + * 高斯模糊效果封装 + */ +_p[17] = { + value: function(require, exports, module) { + var Effect = _p.r(16), Utils = _p.r(12); + return _p.r(11).createClass("GaussianblurEffect", { + base: Effect, + constructor: function(stdDeviation, input) { + this.callBase(Effect.NAME_GAUSSIAN_BLUR); + this.set("stdDeviation", Utils.getValue(stdDeviation, 1)); + this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); + } + }); + } +}; + +//src/filter/effect/offseteffect.js +/** + * 偏移效果封装 + */ +_p[18] = { + value: function(require, exports, module) { + var Effect = _p.r(16), Utils = _p.r(12); + return _p.r(11).createClass("OffsetEffect", { + base: Effect, + constructor: function(dx, dy, input) { + this.callBase(Effect.NAME_OFFSET); + this.set("dx", Utils.getValue(dx, 0)); + this.set("dy", Utils.getValue(dy, 0)); + this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); + } + }); + } +}; + +//src/filter/effectcontainer.js +/* + * Effect所用的container + */ +_p[19] = { + value: function(require) { + return _p.r(11).createClass("EffectContainer", { + base: _p.r(29), + addEffect: function(point, pos) { + return this.addItem.apply(this, arguments); + }, + prependEffect: function() { + return this.prependItem.apply(this, arguments); + }, + appendEffect: function() { + return this.appendItem.apply(this, arguments); + }, + removeEffect: function(pos) { + return this.removeItem.apply(this, arguments); + }, + addEffects: function() { + return this.addItems.apply(this, arguments); + }, + setEffects: function() { + return this.setItems.apply(this, arguments); + }, + getEffect: function() { + return this.getItem.apply(this, arguments); + }, + getEffects: function() { + return this.getItems.apply(this, arguments); + }, + getFirstEffect: function() { + return this.getFirstItem.apply(this, arguments); + }, + getLastEffect: function() { + return this.getLastItem.apply(this, arguments); + }, + handleAdd: function(effectItem, pos) { + var count = this.getEffects().length, nextEffectItem = this.getItem(pos + 1); + // 最后一个节点, 直接追加 + if (count === pos + 1) { + this.node.appendChild(effectItem.getNode()); + return; + } + this.node.insertBefore(effectItem.getNode(), nextEffectItem.getNode()); + } + }); + } +}; + +//src/filter/filter.js +/** + * Filter 基类 + */ +_p[20] = { + value: function(require, exports, module) { + var svg = _p.r(67); + var Class = _p.r(11); + var Filter = Class.createClass("Filter", { + mixins: [ _p.r(19) ], + constructor: function(x, y, width, height) { + this.node = svg.createNode("filter"); + if (x !== undefined) { + this.set("x", x); + } + if (y !== undefined) { + this.set("y", y); + } + if (width !== undefined) { + this.set("width", width); + } + if (height !== undefined) { + this.set("height", height); + } + }, + getId: function() { + return this.id; + }, + setId: function(id) { + this.node.id = id; + return this; + }, + set: function(key, value) { + this.node.setAttribute(key, value); + return this; + }, + get: function(key) { + return this.node.getAttribute(key); + }, + getNode: function() { + return this.node; + } + }); + var Shape = _p.r(60); + Class.extendClass(Shape, { + applyFilter: function(filter) { + var filterId = filter.get("id"); + if (filterId) { + this.node.setAttribute("filter", "url(#" + filterId + ")"); + } + return this; + } + }); + return Filter; + } +}; + +//src/filter/gaussianblurfilter.js +/* + * 高斯模糊滤镜 + */ +_p[21] = { + value: function(require, exports, module) { + var GaussianblurEffect = _p.r(17); + return _p.r(11).createClass("GaussianblurFilter", { + base: _p.r(20), + constructor: function(stdDeviation) { + this.callBase(); + this.addEffect(new GaussianblurEffect(stdDeviation)); + } + }); + } +}; + +//src/filter/projectionfilter.js +/* + * 投影滤镜 + */ +_p[22] = { + value: function(require, exports, module) { + var GaussianblurEffect = _p.r(17), Effect = _p.r(16), ColorMatrixEffect = _p.r(13), Color = _p.r(28), Utils = _p.r(12), CompositeEffect = _p.r(14), OffsetEffect = _p.r(18); + return _p.r(11).createClass("ProjectionFilter", { + base: _p.r(20), + constructor: function(stdDeviation, dx, dy) { + this.callBase(); + this.gaussianblurEffect = new GaussianblurEffect(stdDeviation, Effect.INPUT_SOURCE_ALPHA); + this.gaussianblurEffect.set("result", "gaussianblur"); + this.addEffect(this.gaussianblurEffect); + this.offsetEffect = new OffsetEffect(dx, dy, this.gaussianblurEffect); + this.offsetEffect.set("result", "offsetBlur"); + this.addEffect(this.offsetEffect); + this.colorMatrixEffect = new ColorMatrixEffect(ColorMatrixEffect.TYPE_MATRIX, this.offsetEffect); + this.colorMatrixEffect.set("values", ColorMatrixEffect.MATRIX_ORIGINAL); + this.colorMatrixEffect.set("result", "colorOffsetBlur"); + this.addEffect(this.colorMatrixEffect); + this.compositeEffect = new CompositeEffect(CompositeEffect.OPERATOR_OVER, Effect.INPUT_SOURCE_GRAPHIC, this.colorMatrixEffect); + this.addEffect(this.compositeEffect); + }, + // 设置投影颜色 + setColor: function(color) { + var matrix = null, originMatrix = null, colorValue = []; + if (Utils.isString(color)) { + color = Color.parse(color); + } + if (!color) { + return this; + } + matrix = ColorMatrixEffect.MATRIX_EMPTY.split(" "); + colorValue.push(color.get("r")); + colorValue.push(color.get("g")); + colorValue.push(color.get("b")); + // rgb 分量更改 + for (var i = 0, len = colorValue.length; i < len; i++) { + matrix[i * 5 + 3] = colorValue[i] / 255; + } + // alpha 分量更改 + matrix[18] = color.get("a"); + this.colorMatrixEffect.set("values", matrix.join(" ")); + return this; + }, + // 设置投影透明度 + setOpacity: function(opacity) { + var matrix = this.colorMatrixEffect.get("values").split(" "); + matrix[18] = opacity; + this.colorMatrixEffect.set("values", matrix.join(" ")); + return this; + }, + // 设置阴影偏移量 + setOffset: function(dx, dy) { + this.setOffsetX(dx); + this.setOffsetY(dy); + }, + setOffsetX: function(dx) { + this.offsetEffect.set("dx", dx); + }, + setOffsetY: function(dy) { + this.offsetEffect.set("dy", dy); + }, + setDeviation: function(deviation) { + this.gaussianblurEffect.set("stdDeviation", deviation); + } + }); + } +}; + +//src/graphic/bezier.js +/** + * @fileOverview + * + * 贝塞尔曲线 + */ +_p[23] = { + value: function(require, exports, module) { + /** + * @class kity.Bezier + * @mixins kity.PointContainer + * @base kity.Path + * @description 绘制和使用贝塞尔曲线。贝塞尔曲线作为一个贝塞尔点的容器,任何贝塞尔点的改变都会更改贝塞尔曲线的外观 + */ + return _p.r(11).createClass("Bezier", { + mixins: [ _p.r(51) ], + base: _p.r(46), + /** + * @constructor + * @for kity.Bezier + * + * @grammar new kity.Bezier(bezierPoints) + * + * @param {kity.BezierPoints[]} bezierPoints 贝塞尔点集合,每个元素应该是 {kity.BezierPoint} 类型 + * + * @example + * + * ```js + * var bezier = new kity.Bezier([ + * new kity.BezierPoint(0, 0).setForward(100, 0), + * new kity.BezierPoint(100, 100).setBackward(100, 0) + * ]); + * ``` + */ + constructor: function(bezierPoints) { + this.callBase(); + bezierPoints = bezierPoints || []; + this.changeable = true; + this.setBezierPoints(bezierPoints); + }, + /** + * @method getBezierPoints() + * @for kity.Bezier + * @description 返回当前贝塞尔曲线的贝塞尔点集合 + * + * @grammar getBezierPoints() => {kity.BezierPoints[]} + * + */ + getBezierPoints: function() { + return this.getPoints(); + }, + /** + * @method setBezierPoints() + * @for kity.Bezier + * @description 设置当前贝塞尔曲线的贝塞尔点集合 + * + * @grammar setBeizerPoints(bezierPoints) => {this} + * + * @param {kity.BezierPoint[]} bezierPoints 贝塞尔点集合 + */ + setBezierPoints: function(bezierPoints) { + return this.setPoints(bezierPoints); + }, + //当点集合发生变化时采取的动作 + onContainerChanged: function() { + if (this.changeable) { + this.update(); + } + }, + update: function() { + var drawer = null, bezierPoints = this.getBezierPoints(); + //单独的一个点不画任何图形 + if (bezierPoints.length < 2) { + return; + } + drawer = this.getDrawer(); + drawer.clear(); + var vertex = bezierPoints[0].getVertex(), forward = null, backward = null; + drawer.moveTo(vertex.x, vertex.y); + for (var i = 1, len = bezierPoints.length; i < len; i++) { + vertex = bezierPoints[i].getVertex(); + backward = bezierPoints[i].getBackward(); + forward = bezierPoints[i - 1].getForward(); + drawer.bezierTo(forward.x, forward.y, backward.x, backward.y, vertex.x, vertex.y); + } + return this; + } + }); + } +}; + +//src/graphic/bezierpoint.js +/** + * @fileOverview + * + * 表示一个贝塞尔点 + */ +_p[24] = { + value: function(require, exports, module) { + var ShapePoint = _p.r(63); + var Vector = _p.r(73); + /** + * @class kity.BezierPoint + * + * @description 表示一个贝塞尔点 + * 一个贝塞尔点由顶点坐标(曲线经过的点)、前方控制点、后方控制点表示 + */ + var BezierPoint = _p.r(11).createClass("BezierPoint", { + /** + * @constructor + * @for kity.BezierPoint + * + * @description 创建一个具有默认顶点坐标的贝塞尔点,两个控制点的坐标和顶点一致 + * + * @param {Number} x 顶点的 x 坐标 + * @param {Number} y 顶点的 y 坐标 + * @param {Boolean} isSmooth 指示当前贝塞尔点是否光滑,光滑会约束顶点和两个控制点共线 + */ + constructor: function(x, y, isSmooth) { + //顶点 + this.vertex = new ShapePoint(x, y); + //控制点 + this.forward = new ShapePoint(x, y); + this.backward = new ShapePoint(x, y); + //是否平滑 + this.setSmooth(isSmooth === undefined || isSmooth); + this.setSymReflaction(true); + }, + /** + * @method clone() + * @for kity.BezierPoint + * @description 返回贝塞尔点的一份拷贝 + * + * @grammar clone() => {kity.BezierPoint} + */ + clone: function() { + var newPoint = new BezierPoint(), tmp = null; + tmp = this.getVertex(); + newPoint.setVertex(tmp.x, tmp.y); + tmp = this.getForward(); + newPoint.setForward(tmp.x, tmp.y); + tmp = this.getBackward(); + newPoint.setBackward(tmp.x, tmp.y); + newPoint.setSymReflaction(this.isSymReflaction); + newPoint.setSmooth(this.isSmooth()); + return newPoint; + }, + /** + * @method setVertex() + * @for kity.BezierPoint + * @description 设置贝塞尔点的顶点坐标,注意,控制点的坐标不会跟着变化。希望控制点的坐标跟着变化,请用 moveTo() 方法 + * + * @grammar setVertex(x, y) => {this} + * + * @param {Number} x 顶点的 x 坐标 + * @param {Number} y 顶点的 y 坐标 + */ + setVertex: function(x, y) { + this.vertex.setPoint(x, y); + this.update(); + return this; + }, + /** + * @method moveTo() + * @for kity.BezierPoint + * @description 同步移动整个贝塞尔点,使顶点的移动到指定的坐标中。控制点的位置相对顶点坐标固定。 + * + * @grammar moveTo() => {this} + * + * @param {Number} x 顶点的目标 x 坐标 + * @param {Number} y 顶点的目标 y 坐标 + * + */ + moveTo: function(x, y) { + var oldForward = this.forward.getPoint(), oldBackward = this.backward.getPoint(), oldVertex = this.vertex.getPoint(), //移动距离 + distance = { + left: x - oldVertex.x, + top: y - oldVertex.y + }; + // 更新 + this.forward.setPoint(oldForward.x + distance.left, oldForward.y + distance.top); + this.backward.setPoint(oldBackward.x + distance.left, oldBackward.y + distance.top); + this.vertex.setPoint(x, y); + this.update(); + }, + /** + * @method setForward() + * @for kity.BezierPoint + * @description 设置前方控制点的位置,如果贝塞尔点光滑,后方控制点会跟着联动 + * + * @grammar setForward(x, y) => {this} + * + * @param {Number} x 前方控制点的 x 坐标 + * @param {Number} y 前方控制点的 y 坐标 + */ + setForward: function(x, y) { + this.forward.setPoint(x, y); + //更新后置点 + if (this.smooth) { + this.updateAnother(this.forward, this.backward); + } + this.update(); + this.lastControlPointSet = this.forward; + return this; + }, + /** + * @method setBackward() + * @for kity.BezierPoint + * @description 设置后方控制点的位置,如果贝塞尔点光滑,前方控制点会跟着联动 + * + * @grammar setBackward(x, y) => {this} + * + * @param {Number} x 后方控制点的 x 坐标 + * @param {Number} y 后方控制点的 y 坐标 + */ + setBackward: function(x, y) { + this.backward.setPoint(x, y); + //更新前置点 + if (this.smooth) { + this.updateAnother(this.backward, this.forward); + } + this.update(); + this.lastControlPointSet = this.backward; + return this; + }, + /** + * @method setSymReflaction() + * @for kity.BezierPoint + * @description 设定是否镜像两个控制点的位置 + * + * @grammar setSymReflaction(value) => {this} + * + * @param {boolean} value 如果设置为 true,且贝塞尔点光滑,两个控制点离顶点的距离相等 + */ + setSymReflaction: function(value) { + this.symReflaction = value; + if (this.smooth) this.setSmooth(true); + return this; + }, + /** + * @method isSymReflaction() + * @for kity.BezierPoint + * @description 当前贝塞尔点的两个控制点是否被镜像约束 + * + * @grammar isSymReflaction() => {boolean} + */ + isSymReflaction: function() { + return this.symReflaction; + }, + /** + * @private + * + * 根据前方控制点或后方控制点更新另一方 + */ + updateAnother: function(p, q) { + var v = this.getVertex(), pv = Vector.fromPoints(p.getPoint(), v), vq = Vector.fromPoints(v, q.getPoint()); + vq = pv.normalize(this.isSymReflaction() ? pv.length() : vq.length()); + q.setPoint(v.x + vq.x, v.y + vq.y); + return this; + }, + /** + * @method setSmooth() + * @for kity.BezierPoint + * @description 设置贝塞尔点是否光滑,光滑会约束顶点和两个控制点共线 + * + * @param {Boolean} isSmooth 设置为 true 让贝塞尔点光滑 + */ + setSmooth: function(isSmooth) { + var lc; + this.smooth = !!isSmooth; + if (this.smooth && (lc = this.lastControlPointSet)) { + this.updateAnother(lc, lc == this.forward ? this.backward : this.forward); + } + return this; + }, + /** + * @method isSmooth() + * @for kity.BezierPoint + * @description 判断贝塞尔点是否光滑 + * + * @grammar isSmooth() => {boolean} + */ + isSmooth: function() { + return this.smooth; + }, + /** + * @method getVertex() + * @for kity.BezierPoint + * @description 获得当前贝塞尔点的顶点 + * + * @grammar getVertex() => {kity.ShapePoint} + */ + getVertex: function() { + return this.vertex.getPoint(); + }, + /** + * @method getForward() + * @for kity.BezierPoint + * @description 获得当前贝塞尔点的前方控制点 + * + * @grammar getForward() => {kity.ShapePoint} + */ + getForward: function() { + return this.forward.getPoint(); + }, + /** + * @method getBackward() + * @for kity.BezierPoint + * @description 获得当前贝塞尔点的后方控制点 + * + * @grammar getBackward() => {kity.ShapePoint} + */ + getBackward: function() { + return this.backward.getPoint(); + }, + /** + * @private + * + * 联动更新相关的贝塞尔曲线 + */ + update: function() { + if (!this.container) { + return this; + } + //新增参数 this, 把当前引起变化的点传递过去, 以便有需要的地方可以获取到引起变化的源 + if (this.container.update) this.container.update(this); + } + }); + return BezierPoint; + } +}; + +//src/graphic/box.js +/** + * @fileOverview + * + * 表示一个矩形区域 + */ +_p[25] = { + value: function(require, exports, module) { + /** + * @class kity.Box + * @description 表示一个矩形区域 + */ + var Box = _p.r(11).createClass("Box", { + /** + * @constructor + * @for kity.Box + * + * @grammar new kity.Box(x, y, width, height) + * @grammar new kity.Box(box) + * + * @param {Number} x|box.x 矩形区域的 x 坐标 + * @param {Number} y|box.y 矩形区域的 y 坐标 + * @param {Number} width|box.width 矩形区域的宽度 + * @param {Number} height|box.height 矩形区域的高度 + * + * @example + * + * ```js + * var box = new kity.Box(10, 20, 50, 50); + * var box2 = new kity.Box({x: 10, y: 20, width: 50, height: 50}); + * ``` + */ + constructor: function(x, y, width, height) { + var box = arguments[0]; + if (box && typeof box === "object") { + x = box.x; + y = box.y; + width = box.width; + height = box.height; + } + if (width < 0) { + x -= width = -width; + } + if (height < 0) { + y -= height = -height; + } + /** + * @property x + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的 x 坐标 + */ + this.x = x || 0; + /** + * @property y + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的 y 坐标 + */ + this.y = y || 0; + /** + * @property width + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的宽度 + */ + this.width = width || 0; + /** + * @property height + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的高度 + */ + this.height = height || 0; + /** + * @property left + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的最左侧坐标,等价于 x 的值 + */ + this.left = this.x; + /** + * @property right + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的最右侧坐标,等价于 x + width 的值 + */ + this.right = this.x + this.width; + /** + * @property top + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的最上侧坐标,等价于 y 的值 + */ + this.top = this.y; + /** + * @property bottom + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的最下侧坐标,等价于 y + height 的值 + */ + this.bottom = this.y + this.height; + /** + * @property cx + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的中心 x 坐标 + */ + this.cx = this.x + this.width / 2; + /** + * @property cy + * @for kity.Box + * @type {Number} + * @readOnly + * @description 矩形区域的中心 y 坐标 + */ + this.cy = this.y + this.height / 2; + }, + /** + * @method getRangeX() + * @for kity.Box + * @description 获得矩形区域的 x 值域 + * + * @grammar getRangeX() => {Number[]} + * + * @example + * + * var box = new kity.Box(10, 10, 30, 50); + * console.log(box.getRangeX()); // [10, 40] + */ + getRangeX: function() { + return [ this.left, this.right ]; + }, + /** + * @method getRangeY() + * @for kity.Box + * @description 获得矩形区域的 y 值域 + * + * @grammar getRangeY() => {Number[]} + * + * @example + * + * var box = new kity.Box(10, 10, 30, 50); + * console.log(box.getRangeY()); // [10, 60] + */ + getRangeY: function() { + return [ this.top, this.bottom ]; + }, + /** + * @method merge() + * @for kity.Box + * @description 把当前矩形区域和指定的矩形区域合并,返回一个新的矩形区域(即包含两个源矩形区域的最小矩形区域) + * + * @grammar merge(another) => {kity.Box} + * @param {kity.Box} another 要合并的矩形区域 + * + * @example + * + * ```js + * var box1 = new kity.Box(10, 10, 50, 50); + * var box2 = new kity.Box(30, 30, 50, 50); + * var box3 = box1.merge(box2); + * console.log(box3.valueOf()); // [10, 10, 70, 70] + * ``` + */ + merge: function(another) { + if (this.isEmpty()) { + return new Box(another.x, another.y, another.width, another.height); + } + var left = Math.min(this.left, another.left), right = Math.max(this.right, another.right), top = Math.min(this.top, another.top), bottom = Math.max(this.bottom, another.bottom); + return new Box(left, top, right - left, bottom - top); + }, + /** + * @method intersect() + * @for kity.Box + * @description 求当前矩形区域和指定的矩形区域重叠的矩形区域 + * + * @grammar intersect(another) => {kity.Box} + * @param {kity.Box} another 要求重叠的矩形区域 + * + * @example + * + * ```js + * var box1 = new kity.Box(10, 10, 50, 50); + * var box2 = new kity.Box(30, 30, 50, 50); + * var box3 = box1.intersect(box2); + * console.log(box3.valueOf()); // [30, 30, 20, 20] + * ``` + */ + intersect: function(another) { + if (!another instanceof Box) { + another = new Box(another); + } + var left = Math.max(this.left, another.left), right = Math.min(this.right, another.right), top = Math.max(this.top, another.top), bottom = Math.min(this.bottom, another.bottom); + if (left > right || top > bottom) return new Box(); + return new Box(left, top, right - left, bottom - top); + }, + /** + * @method expand() + * @for kity.Box + * @description 扩展(或收缩)当前的盒子,返回新的盒子 + * + * @param {Number} top + * 矩形区域的上边界往上扩展的值;如果是负数,则上边界往下收缩 + * + * @param {Number} right + * [Optional] 矩形区域的右边界往右拓展的值; + * 如果是负数,则右边界往左收缩; + * 如果不设置该值,使用和 top 同样的值。 + * + * @param {Number} bottom + * [Optional] 矩形区域的下边界往下拓展的值; + * 如果是负数,则下边界往上收缩; + * 如果不设置该值,使用和 top 同样的值。 + * + * @param {Number} left + * [Optional] 矩形区域的左边界往左拓展的值; + * 如果是负数,则左边界往右收缩; + * 如果不设置该值,使用和 right 同样的值。 + * + * @example + * + * ```js + * var box = new kity.Box(10, 10, 20, 20); + * var box1 = box.expand(10); // [0, 0, 40, 40] + * var box2 = box.expand(10, 20); // [0, -10, 40, 60] + * var box3 = box.expand(1, 2, 3, 4); // [9, 8, 24, 26] + * ``` + */ + expand: function(top, right, bottom, left) { + if (arguments.length < 1) { + return new Box(this); + } + if (arguments.length < 2) { + right = top; + } + if (arguments.length < 3) { + bottom = top; + } + if (arguments.length < 4) { + left = right; + } + var x = this.left - left, y = this.top - top, width = this.width + right, height = this.height + top; + return new Box(x, y, width, height); + }, + /** + * @method valueOf() + * @for kity.Box + * @description 返回当前盒子的数组表示 + * + * @grammar valueOf() => {Number[]} + * + * @example + * + * ```js + * var box = new kity.Box(0, 0, 200, 50); + * console.log(box.valueOf()); // [0, 0, 200, 50] + * ``` + */ + valueOf: function() { + return [ this.x, this.y, this.width, this.height ]; + }, + /** + * @method toString() + * @for kity.Box + * @description 返回当前盒子的字符串表示 + * + * @grammar toString() => {String} + * + * @example + * + * ```js + * var box = new kity.Box(0, 0, 200, 50); + * console.log(box.toString()); // "0 0 200 50" + */ + toString: function() { + return this.valueOf().join(" "); + }, + /** + * @method isEmpty() + * @for kity.Box + * @description 判断当前盒子是否具有尺寸(面积大 + * + * @grammar isEmpty() => {boolean} + * + * @example + * ```js + * var box = new kity.Box(0, 0, 0, 100000); + * console.log(box.isEmpty()); // true + * ``` + */ + isEmpty: function() { + return !this.width || !this.height; + } + }); + /** + * @method parse() + * @static + * @for kity.Box + * @description 解析一个字符串或数组为 kity.Box 对象 + * + * @grammar kity.Box.parse(any) => {kity.Box} + * + * @param {Number[]|String} any 要解析的字符串或数组 + * + * @example + * + * ```js + * console.log(kity.Box.parse('0 0 100 200')); + * console.log(kity.Box.parse([0, 0, 100, 200])); + * ``` + */ + Box.parse = function(any) { + if (typeof any == "string") { + return Box.parse(any.split(/[\s,]+/).map(parseFloat)); + } + if (any instanceof Array) { + return new Box(any[0], any[1], any[2], any[3]); + } + if ("x" in any) return new Box(any); + return null; + }; + return Box; + } +}; + +//src/graphic/circle.js +/** + * @fileOverview + * + * 绘制和使用圆形 + */ +_p[26] = { + value: function(require, exports, module) { + /** + * @class kity.Circle + * @base kity.Ellipse + * @description 表示一个圆形 + */ + return _p.r(11).createClass("Circle", { + base: _p.r(32), + /** + * @constructor + * @for kity.Circle + * + * @grammar new kity.Circle(radius, cx, cy) + * + * @param {Number} radius 半径 + * @param {Number} cx 圆心 x 坐标 + * @param {Number} cy 圆心 y 坐标 + */ + constructor: function(radius, cx, cy) { + this.callBase(radius, radius, cx, cy); + }, + /** + * @method + * @for kity.Circle + * @description 获取圆形的半径 + * + * @grammar getRadius() => {Number} + */ + getRadius: function() { + return this.getRadiusX(); + }, + /** + * @method + * @for kity.Circle + * @description 设置圆形的半径 + * + * @grammar setRadius() => {this} + * + * @param {Number} radius 半径大小 + */ + setRadius: function(radius) { + return this.callBase(radius, radius); + } + }); + } +}; + +//src/graphic/clip.js +/** + * @fileOverview + * + * 支持图形裁切 + */ +_p[27] = { + value: function(require, exports, module) { + var Class = _p.r(11); + var Shape = _p.r(60); + /** + * @class kity.Clip + * @base kity.Resource + * @mixins kity.ShapeContainer + * + * @description 创建图形裁切,用于裁切目标图形 + */ + var Clip = Class.createClass("Clip", { + base: Shape, + mixins: [ _p.r(61) ], + /** + * @constructor + * @for kity.Clip + * + * @grammar new kity.Clip(paper) + * + * @param {kity.Paper} paper 资源所属的文档 + * + * @example + * + * ```js + * var circle = paper.put(new kity.Circle(100).fill('yellow')); + * var clip = new kity.Clip(paper); + * clip.addShape(new kity.Circle(100, 50, 0)); + * clip.clip(circle); + * ``` + */ + constructor: function(paper) { + this.callBase("clipPath", paper); + }, + /** + * @method clip() + * @for kity.Clip + * @description 将裁切应用到指定的图形上,应用之后,目标图形将显示与裁切形状重合的部分 + * + * @grammar clip(shape) => {this} + * + * @param {kity.Shape} shape 要应用裁切的图形 + */ + clip: function(shape) { + shape.getNode().setAttribute("clip-path", this); + return this; + } + }); + Class.extendClass(Shape, { + /** + * @method clipWidth() + * @for kity.Shape + * + * @grammar clipWidth(clip) => {this} + * + * @param {kity.Clip|kity.Shape} clip 要用于裁切当前图形的图形; + * 如果 clip 本身是一个裁切对象(kity.Clip 类型),则直接裁切; + * 否则将创建新的裁切包含给定的图形,然后对当前图形进行裁切 + * + * @example + * + * ```js + * var circle = paper.put(new kity.Circle(100)); + * var rect = paper.put(new kity.Rect(100, 100, -100, 0)); + * + * circle.clipWidth(rect); + * ``` + */ + clipWith: function(clip) { + if (clip instanceof Shape) { + clip = new Clip(clip.getPaper()).addShape(clip); + } + clip.clip(this); + return this; + } + }); + return Clip; + } +}; + +//src/graphic/color.js +/** + * @fileOverview + * + * 提供颜色支持 + */ +_p[28] = { + value: function(require, exports, module) { + var Utils = _p.r(12), StandardColor = _p.r(64), ColorUtils = {}, /** + * @class kity.Color + * @description 表示一个颜色 + */ + Color = _p.r(11).createClass("Color", { + /** + * @constructor + * @for kity.Color + * + * @grammar new kity.Color(r, g, b) + * @grammar new kity.Color(r, g, b, a) + * @grammar new kity.Color(colorString) + * + * @param {Number} r 红色分量,取值 0 - 255 + * @param {Number} g 绿色分量,取值 0 - 255 + * @param {Number} b 蓝色分量,取值 0 - 255 + * @param {Number} a 透明度(可选),取值 0 - 100 + * @param {String} colorString 一个代表颜色的字符串,可以是: + * 熟知颜色表:如 'red', 'yellow' + * HEX 表示:如 '#368', '#123456' + * RGB 表示:如 'RGB(200, 200, 0)', 'RGBA(200, 200, 200, .5)' + * HSL 表示:如 'HSL(100, 60%, 80%)', 'HSLA(100, 60%, 80%, .5)' + */ + constructor: function() { + var colorValue = null; + //parse构造 + if (typeof arguments[0] === "string") { + colorValue = ColorUtils.parseToValue(arguments[0]); + //解析失败 + if (colorValue === null) { + colorValue = { + r: 0, + g: 0, + b: 0, + h: 0, + s: 0, + l: 0, + a: 1 + }; + } + } else { + colorValue = { + r: arguments[0] | 0, + g: arguments[1] | 0, + b: arguments[2] | 0, + //alpha 默认为1 + a: arguments[3] === undefined ? 1 : parseFloat(arguments[3]) + }; + colorValue = ColorUtils.overflowFormat(colorValue); + //获取hsl分量 + colorValue = Utils.extend(colorValue, ColorUtils.rgbValueToHslValue(colorValue)); + } + this._color = colorValue; + }, + /** + * @method set() + * @for kity.Color + * + * @description 设置当前颜色某个分量的值 + * + * @grammar set(name, value) => {this} + * + * @param {string} name 要设置的颜色通道的名称 + * r: 红色(Red),取值范围 [0, 255] + * g: 绿色(Green),取值范围 [0, 255] + * b: 蓝色(Blue),取值范围 [0, 255] + * a: 透明度(Alpha),取值范围 [0, 1] + * h: 色环角度(Hue),取值范围 [0, 359] + * s: 饱和度(Saturation),取值范围 [0, 100] + * l: 亮度(Lightness),取值范围 [0, 100] + * r、g、b 值和 h、s、l 值会联动修改 + * @param {number} value 要设置的值 + */ + set: function(name, value) { + var values = null; + //设置的值非法 + if (!Color._MAX_VALUE[name]) { + throw new Error("Color set(): Illegal parameter"); + } + if (name !== "a") { + value = Math.floor(value); + } + if (name == "h") { + value = (value + 360) % 360; + } + this._color[name] = Math.max(Color._MIN_VALUE[name], Math.min(Color._MAX_VALUE[name], value)); + if ("rgb".indexOf(name) !== -1) { + this._color = Utils.extend(this._color, ColorUtils.rgbValueToHslValue(this._color)); + } else if ("hsl".indexOf(name) !== -1) { + this._color = Utils.extend(this._color, ColorUtils.hslValueToRGBValue(this._color)); + } + return this; + }, + /** + * @method inc() + * + * @description 返回新的颜色,表示当前颜色增加指定通道的值之后的颜色 + * + * @grammar inc(name, value) => {this} + * + * @param {string} name 要增加的通道的名称,具体含义请查看 set 方法 + * @param {number} value 增量值 + */ + inc: function(name, value) { + value = this.get(name) + value; + if (name == "h") { + value = (value + 360) % 360; + } else { + value = Math.min(Color._MAX_VALUE[name], value); + value = Math.max(Color._MIN_VALUE[name], value); + } + return this.clone().set(name, value); + }, + /** + * @method dec() + * @for kity.Color + * + * @description 返回新的颜色,表示当前颜色减少指定通道的值之后的颜色 + * + * @grammar dec(name, value) => {this} + * + * @param {string} name 要减少值的通道的名称,具体含义请查看 set 方法 + * @param {number} value 减量值 + */ + dec: function(name, value) { + return this.inc(name, -value); + }, + /** + * @method clone() + * @for kity.Color + * + * @description 返回当前颜色的一个拷贝 + * + * @grammar clone() => {kity.Color} + */ + clone: function() { + return new Color(this.toRGBA()); + }, + /** + * @method get() + * @for kity.Color + * + * @description 返回当前颜色指定的分量 + * + * @grammar get() => {number} + */ + get: function(name) { + if (!Color._MAX_VALUE[name]) { + return null; + } + return this._color[name]; + }, + getValues: function() { + return Utils.clone(this._color); + }, + /** + * @method valueOf() + * @for kity.Color + * + * @description 返回当前颜色的一个字面量表示 + * + * @return {plain} 颜色字面量,其结构为: + * { + * r: 0, + * g: 0, + * b: 0, + * a: 0, + * h: 0, + * s: 0, + * l: 0 + * } + */ + valueOf: function() { + return this.getValues(); + }, + /** + * @method toRGB() + * @for kity.Color + * + * @description 返回当前颜色的 RGB 表示,如果颜色有透明度,将抛弃透明度属性(想要保留请使用 toRGBA())方法。 + * + * @grammar toRGB() => {string} + */ + toRGB: function() { + return ColorUtils.toString(this._color, "rgb"); + }, + /** + * @method toRGBA() + * @for kity.Color + * + * @description 返回当前颜色的 RGBA 表示 + * + * @grammar toRGBA() => {string} + */ + toRGBA: function() { + return ColorUtils.toString(this._color, "rgba"); + }, + /** + * @method toHEX() + * @for kity.Color + * + * @description 返回当前颜色的 HEX 表示,如果颜色有透明度,将抛弃透明度属性(想要保留请使用 toRGBA())方法。 + * + * @grammar toHEX() => {string} + */ + toHEX: function() { + return ColorUtils.toString(this._color, "hex"); + }, + /** + * @method toHSL() + * @for kity.Color + * + * @description 返回当前颜色的 HSL 表示,如果颜色有透明度,将抛弃透明度属性(想要保留请使用 toHSLA())方法。 + * + * @grammar toHSL() => {string} + */ + toHSL: function() { + return ColorUtils.toString(this._color, "hsl"); + }, + /** + * @method toHSLA() + * @for kity.Color + * + * @description 返回当前颜色的 HSLA 表示 + * + * @grammar toHSLA() => {string} + */ + toHSLA: function() { + return ColorUtils.toString(this._color, "hsla"); + }, + /** + * @method toString() + * @for kity.Color + * + * @description 返回当前颜色的 RGB 或 RGBA 表示,如果颜色有透明度,将使用 RGBA 形式,否则是 RGB 形式 + * @grammar toString() => {string} + */ + toString: function() { + if (this._color.a === 1) { + return this.toRGB(); + } + return this.toRGBA(); + } + }); + //Color 静态方法 + Utils.extend(Color, { + //各分量可表示的最大值 + _MAX_VALUE: { + r: 255, + g: 255, + b: 255, + h: 360, + s: 100, + l: 100, + a: 1 + }, + //各分量最小值 + _MIN_VALUE: { + r: 0, + g: 0, + b: 0, + h: 0, + s: 0, + l: 0, + a: 0 + }, + //分量常量 + R: "r", + G: "g", + B: "b", + H: "h", + S: "s", + L: "l", + A: "a", + /** + * @method parse() + * @static + * @for kity.Color + * + * @description 解析一个颜色字符串为 kity.Color 对象 + * + * @grammar kity.Color.parse(valStr) + * + * @param {string} valStr 一个代表颜色的字符串,可以是: + * 熟知颜色表:如 'red', 'yellow' + * HEX 表示:如 '#368', '#123456' + * RGB 表示:如 'RGB(200, 200, 0)', 'RGBA(200, 200, 200, .5)' + * HSL 表示:如 'HSL(100, 60%, 80%)', 'HSLA(100, 60%, 80%, .5)' + */ + parse: function(valStr) { + var rgbValue; + if (Utils.isString(valStr)) { + rgbValue = ColorUtils.parseToValue(valStr); + } + if (Utils.isObject(valStr) && "r" in valStr) { + rgbValue = valStr; + } + //解析失败, 返回一个默认color实例 + if (rgbValue === null) { + return new Color(); + } + return new Color(rgbValue.r, rgbValue.g, rgbValue.b, rgbValue.a); + }, + /** + * @method createHSL() + * @for kity.Color + * @static + * + * @description 创建一个 HSL 颜色 + * + * @grammar kity.Color.createHSL(h, s, l) => {kity.Color} + * + * @param {number} h 色环(Hue)分量值,取值范围 [0, 359] + * @param {number} s 饱和度(Saturation)分量值,取值范围 [0, 100] + * @param {number} l 亮度(Lighteness)分量值,取值范围 [0, 100] + */ + createHSL: function(h, s, l) { + return Color.createHSLA(h, s, l, 1); + }, + /** + * @method createHSLA() + * @for kity.Color + * @static + * + * @description 创建一个 HSLA 颜色 + * + * @grammar kity.Color.createHSLA(h, s, l, a) => {kity.Color} + * + * @param {number} h 色环(Hue)分量值,取值范围 [0, 359] + * @param {number} s 饱和度(Saturation)分量值,取值范围 [0, 100] + * @param {number} l 亮度(Lighteness)分量值,取值范围 [0, 100] + * @param {number} a 透明度(Alpha)分量值,取值范围 [0, 1] + */ + createHSLA: function(h, s, l, a) { + var colorValue = null; + s += "%"; + l += "%"; + colorValue = [ "hsla(" + h, s, l, a + ")" ]; + return Color.parse(colorValue.join(", ")); + }, + /** + * @method createRGB() + * @for kity.Color + * @static + * + * @description 创建一个 RGB 颜色 + * + * @grammar kity.Color.createRGB(r, g, b) => {kity.Color} + * + * @param {number} r 红色(Red)分量值,取值范围 [0, 255] + * @param {number} g 绿色(Green)分量值,取值范围 [0, 255] + * @param {number} b 蓝色(Blue)分量值,取值范围 [0, 255] + */ + createRGB: function(r, g, b) { + return Color.createRGBA(r, g, b, 1); + }, + /** + * @method createRGBA() + * @for kity.Color + * @static + * + * @description 创建一个 RGBA 颜色 + * + * @grammar kity.Color.createRGBA(r, g, b, a) => {kity.Color} + * + * @param {number} r 红色(Red)分量值,取值范围 [0, 255] + * @param {number} g 绿色(Green)分量值,取值范围 [0, 255] + * @param {number} b 蓝色(Blue)分量值,取值范围 [0, 255] + * @param {number} a 透明度(Alpha)分量值,取值范围 [0, 1] + */ + createRGBA: function(r, g, b, a) { + return new Color(r, g, b, a); + } + }); + //内部工具对象 + Utils.extend(ColorUtils, { + parseToValue: function(valStr) { + var rgbaValue = {}; + /* 优先检测在调色板中是否有对应的颜色 */ + valStr = StandardColor.EXTEND_STANDARD[valStr] || StandardColor.COLOR_STANDARD[valStr] || valStr; + /* 颜色转换 */ + //hex格式 + if (/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(valStr)) { + rgbaValue = ColorUtils.hexToValue(valStr); + } else if (/^(rgba?)/i.test(valStr)) { + rgbaValue = ColorUtils.rgbaToValue(valStr); + } else if (/^(hsla?)/i.test(valStr)) { + rgbaValue = ColorUtils.hslaToValue(valStr); + } else { + return null; + } + return ColorUtils.overflowFormat(rgbaValue); + }, + hexToValue: function(hexStr) { + var result = {}, keys = [ "r", "g", "b" ]; + if (/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(hexStr)) { + hexStr = RegExp.$1.split(""); + Utils.each(keys, function(key, index) { + if (hexStr.length === 3) { + result[key] = ColorUtils.toNumber(hexStr[index] + hexStr[index]); + } else { + result[key] = ColorUtils.toNumber(hexStr[index * 2] + hexStr[index * 2 + 1]); + } + }); + //转换出hsl值 + result = Utils.extend(result, ColorUtils.rgbValueToHslValue(result)); + result.a = 1; + return result; + } + return null; + }, + rgbaToValue: function(rgbaStr) { + var result = {}, hasAlpha = false, keys = [ "r", "g", "b" ]; + if (/^(rgba?)/i.test(rgbaStr)) { + hasAlpha = RegExp.$1.length === 4; + rgbaStr = rgbaStr.replace(/^rgba?/i, "").replace(/\s+/g, "").replace(/[^0-9,.]/g, "").split(","); + Utils.each(keys, function(key, index) { + result[key] = rgbaStr[index] | 0; + }); + //转换出hsl值 + result = Utils.extend(result, ColorUtils.rgbValueToHslValue(result)); + result.a = hasAlpha ? parseFloat(rgbaStr[3]) : 1; + return result; + } + return null; + }, + hslaToValue: function(hslaStr) { + var result = {}, hasAlpha = false; + if (/^(hsla?)/i.test(hslaStr)) { + hasAlpha = RegExp.$1.length === 4; + hslaStr = hslaStr.replace(/^hsla?/i, "").replace(/\s+/g, "").replace(/[^0-9,.]/g, "").split(","); + //记录hsl值 + result.h = hslaStr[0] | 0; + result.s = hslaStr[1] | 0; + result.l = hslaStr[2] | 0; + //转换出rgb值 + result = Utils.extend(result, ColorUtils.hslValueToRGBValue(result)); + //hsl值转换为rgb值 + result = ColorUtils.hslValueToRGBValue(result); + result.a = hasAlpha ? parseFloat(hslaStr[3]) : 1; + return result; + } + return null; + }, + //hsl值对象转换为rgb值对象 + hslValueToRGBValue: function(hslValue) { + function trans(v1, v2, vH) { + if (vH < 0) { + vH += 1; + } else if (vH > 1) { + vH -= 1; + } + if (6 * vH < 1) { + return v1 + (v2 - v1) * 6 * vH; + } else if (2 * vH < 1) { + return v2; + } else if (3 * vH < 2) { + return v1 + (v2 - v1) * ((2 / 3 - vH) * 6); + } + return v1; + } + var q = null, p = null, result = {}; + hslValue = Utils.extend({}, hslValue); + hslValue.h = hslValue.h / 360; + hslValue.s = hslValue.s / 100; + hslValue.l = hslValue.l / 100; + //分量计算 + if (hslValue.s === 0) { + result.r = result.g = result.b = hslValue.l; + } else { + if (hslValue.l < .5) { + q = hslValue.l * (1 + hslValue.s); + } else { + q = hslValue.l + hslValue.s - hslValue.l * hslValue.s; + } + p = 2 * hslValue.l - q; + result.r = trans(p, q, hslValue.h + 1 / 3); + result.g = trans(p, q, hslValue.h); + result.b = trans(p, q, hslValue.h - 1 / 3); + } + result.r = Math.min(Math.round(result.r * 255), 255); + result.g = Math.min(Math.round(result.g * 255), 255); + result.b = Math.min(Math.round(result.b * 255), 255); + return result; + }, + //rgb值对象转换为hsl值对象 + rgbValueToHslValue: function(rgbValue) { + var max = null, min = null, result = {}; + rgbValue = Utils.extend({}, rgbValue); + rgbValue.r = rgbValue.r / 255; + rgbValue.g = rgbValue.g / 255; + rgbValue.b = rgbValue.b / 255; + max = Math.max(rgbValue.r, rgbValue.g, rgbValue.b); + min = Math.min(rgbValue.r, rgbValue.g, rgbValue.b); + //h分量计算 + if (max === min) { + result.h = 0; + } else if (max === rgbValue.r) { + if (rgbValue.g >= rgbValue.b) { + result.h = 60 * (rgbValue.g - rgbValue.b) / (max - min); + } else { + result.h = 60 * (rgbValue.g - rgbValue.b) / (max - min) + 360; + } + } else if (max === rgbValue.g) { + result.h = 60 * (rgbValue.b - rgbValue.r) / (max - min) + 120; + } else if (max === rgbValue.b) { + result.h = 60 * (rgbValue.r - rgbValue.g) / (max - min) + 240; + } + //l分量计算 + result.l = (max + min) / 2; + //s分量计算 + if (result.l === 0 || max === min) { + result.s = 0; + } else if (result.l > 0 && result.l <= .5) { + result.s = (max - min) / (max + min); + } else { + result.s = (max - min) / (2 - max - min); + } + //格式化hsl结果 + result.h = Math.round(result.h); + result.s = Math.round(result.s * 100); + result.l = Math.round(result.l * 100); + return result; + }, + toString: function(colorValue, type) { + var vals = []; + colorValue = Utils.extend({}, colorValue); + if (type.indexOf("hsl") !== -1) { + colorValue.s += "%"; + colorValue.l += "%"; + } + if (type !== "hex") { + Utils.each(type.split(""), function(key) { + vals.push(colorValue[key]); + }); + return (type + "(" + vals.join(", ") + ")").toLowerCase(); + } else { + vals.push(ColorUtils.toHexValue(+colorValue.r)); + vals.push(ColorUtils.toHexValue(+colorValue.g)); + vals.push(ColorUtils.toHexValue(+colorValue.b)); + return ("#" + vals.join("")).toLowerCase(); + } + }, + //16进制的2个数字转化为10进制, 如果转化失败, 返回0 + toNumber: function(value) { + return Number("0x" + value) | 0; + }, + toHexValue: function(value) { + var result = value.toString(16); + return result.length === 1 ? "0" + result : result; + }, + //溢出控制 + overflowFormat: function(value) { + var tmpValue = Utils.extend({}, value), keys = "rgba"; + Utils.each(keys.split(""), function(key) { + if (!tmpValue.hasOwnProperty(key)) { + return; + } + //上溢出 + tmpValue[key] = Math.min(Color._MAX_VALUE[key], tmpValue[key]); + //下溢出 + tmpValue[key] = Math.max(Color._MIN_VALUE[key], tmpValue[key]); + }); + return tmpValue; + } + }); + return Color; + } +}; + +//src/graphic/container.js +_p[29] = { + value: function(require, exports, module) { + function itemRemove() { + this.container.removeItem(this); + return this; + } + return _p.r(11).createClass("Container", { + getItems: function() { + return this.items || (this.items = []); + }, + getItem: function(index) { + return this.getItems()[index]; + }, + getFirstItem: function() { + return this.getItem(0); + }, + getLastItem: function() { + return this.getItem(this.getItems().length - 1); + }, + indexOf: function(item) { + return this.getItems().indexOf(item); + }, + eachItem: function(fn) { + var items = this.getItems(), length = items.length, i; + for (i = 0; i < length; i++) { + fn.call(this, i, items[i]); + } + return this; + }, + addItem: function(item, pos, noEvent) { + var items = this.getItems(), length = items.length; + if (~items.indexOf(item)) { + return this; + } + if (!(pos >= 0 && pos < length)) { + pos = length; + } + items.splice(pos, 0, item); + if (typeof item === "object") { + item.container = this; + item.remove = itemRemove; + } + this.handleAdd(item, pos); + if (!noEvent) { + this.onContainerChanged("add", [ item ]); + } + return this; + }, + addItems: function(items) { + for (var i = 0, l = items.length; i < l; i++) { + this.addItem(items[i], -1, true); + } + this.onContainerChanged("add", items); + return this; + }, + setItems: function(items) { + return this.clear().addItems(items); + }, + appendItem: function(item) { + return this.addItem(item); + }, + prependItem: function(item) { + return this.addItem(item, 0); + }, + removeItem: function(pos, noEvent) { + if (typeof pos !== "number") { + return this.removeItem(this.indexOf(pos)); + } + var items = this.getItems(), length = items.length, item = items[pos]; + if (item === undefined) { + return this; + } + items.splice(pos, 1); + if (item.container) { + delete item.container; + } + if (item.remove) { + delete item.remove; + } + this.handleRemove(item, pos); + if (!noEvent) { + this.onContainerChanged("remove", [ item ]); + } + return this; + }, + clear: function() { + var removed = []; + var item; + while (item = this.getFirstItem()) { + removed.push(item); + this.removeItem(0, true); + } + this.onContainerChanged("remove", removed); + return this; + }, + onContainerChanged: function(type, items) {}, + handleAdd: function(item, index) {}, + handleRemove: function(item, index) {} + }); + } +}; + +//src/graphic/curve.js +/* + * 曲线 + * */ +_p[30] = { + value: function(require, exports, module) { + var Utils = _p.r(12), CurveUtil = { + /* + * 获取由两个以上的点组成的曲线的平移线 + * @param points 曲线上的点的集合, 集合中的点的数量必须大于2 + * @return 平移线数组 + */ + getCurvePanLines: function(points, smoothFactor) { + //计算原始点的中点坐标 + var centerPoints = CurveUtil.getCenterPoints(points), //注意:计算中点连线的中点坐标, 得出平移线 + panLines = CurveUtil.getPanLine(points.length, centerPoints); + //平移线移动到顶点 + return CurveUtil.getMovedPanLines(points, panLines, smoothFactor); + }, + /* + * 计算给定点集合的连线的中点 + * @param points + */ + getCenterPoints: function(points) { + var centerPoints = {}, key = null; + for (var i = 0, j = 0, len = points.length; i < len; i++) { + //j是下一个点的索引 + j = i === len - 1 ? 0 : i + 1; + key = i + "," + j; + //计算中点坐标 + centerPoints[key] = { + x: (points[i].x + points[j].y) / 2, + y: (points[i].x + points[j].y) / 2 + }; + } + return centerPoints; + }, + /* + * 对getCenterPoints()接口获取到的数据做处理, 计算出各个顶点对应的平移线数据 + * @param length 集合中点的个数 + * @param points 点集合, 该集合应该是getCenterPoints()接口返回的数据 + */ + getPanLine: function(length, points) { + var result = {}, //顶点索引 + pointIndex = null; + for (var i = 0, j; i < length; i++) { + var point1 = null, point2 = null; + //计算当前点 + j = (i + 1) % length; + //保存当前处理的顶点索引 + pointIndex = j; + point1 = points[i + "," + j]; + //计算下一个点 + i = j; + j = (i + 1) % length; + point2 = points[i + "," + j]; + result[pointIndex] = { + points: [ { + x: point1.x, + y: point1.y + }, { + x: point2.x, + y: point2.y + } ], + center: { + x: (point1.x + point2.x) / 2, + y: (point1.y + point2.y) / 2 + } + }; + //还原i值 + i = (pointIndex + length - 1) % length; + } + return result; + }, + /* + * 计算平移线移动到顶点后的位置 + * @param points 顶点集合 + * @param panLines 平移线集合 + */ + getMovedPanLines: function(points, panLines, smoothFactor) { + var result = {}; + Utils.each(points, function(point, index) { + //当前平移线 + var currentPanLine = panLines[index], //平移线中点 + center = currentPanLine.center, //移动距离 + distance = { + x: center.x - point.x, + y: center.y - point.y + }; + var currentResult = result[index] = { + points: [], + center: { + x: point.x, + y: point.y + } + }; + //计算控制点到顶点的距离, 并且应用平滑系数到距离上 + Utils.each(currentPanLine.points, function(controlPoint, index) { + var moved = { + x: controlPoint.x - distance.x, + y: controlPoint.y - distance.y + }; + var vertex = currentResult.center; + var dx = moved.x - vertex.x; + var dy = moved.y - vertex.y; + moved.x = vertex.x + smoothFactor * dx; + moved.y = vertex.y + smoothFactor * dy; + currentResult.points.push(moved); + }); + }); + return result; + } + }; + return _p.r(11).createClass("Curve", { + base: _p.r(46), + mixins: [ _p.r(51) ], + constructor: function(points, isColse) { + this.callBase(); + this.setPoints(points || []); + this.closeState = !!isColse; + this.changeable = true; + this.smoothFactor = 1; + this.update(); + }, + //当点集合发生变化时采取的动作 + onContainerChanged: function() { + if (this.changeable) { + this.update(); + } + }, + setSmoothFactor: function(factor) { + this.smoothFactor = factor < 0 ? 0 : factor; + this.update(); + return this; + }, + getSmoothFactor: function() { + return this.smoothFactor; + }, + update: function() { + var points = this.getPoints(), withControlPoints = null, drawer = this.getDrawer(), curPoint = null, curControlPoint = null, prevControlPoint = null; + drawer.clear(); + if (points.length === 0) { + return this; + } else { + drawer.moveTo(points[0]); + } + if (points.length === 1) { + return this; + } + if (points.length === 2) { + drawer.lineTo(points[1]); + return this; + } + //获取已转换过后的带控制点的所有点 + withControlPoints = CurveUtil.getCurvePanLines(points, this.getSmoothFactor()); + for (var i = 1, len = points.length; i < len; i++) { + //当前顶点 + curPoint = withControlPoints[i].center; + //当前控制点 + if (this.closeState || i != len - 1) { + curControlPoint = withControlPoints[i].points[0]; + } else { + //非闭合状态下最后一个点的处理 + curControlPoint = withControlPoints[i].center; + } + if (this.closeState || i != 1) { + prevControlPoint = withControlPoints[i - 1].points[1]; + } else { + //非闭合状态下第一个点的处理 + prevControlPoint = withControlPoints[i - 1].center; + } + drawer.bezierTo(prevControlPoint.x, prevControlPoint.y, curControlPoint.x, curControlPoint.y, curPoint.x, curPoint.y); + } + //处理闭合 + if (this.closeState) { + curPoint = withControlPoints[0].center; + curControlPoint = withControlPoints[0].points[0]; + prevControlPoint = withControlPoints[points.length - 1].points[1]; + drawer.bezierTo(prevControlPoint.x, prevControlPoint.y, curControlPoint.x, curControlPoint.y, curPoint.x, curPoint.y); + } + return this; + }, + close: function() { + this.closeState = true; + return this.update(); + }, + open: function() { + this.closeState = false; + return this.update(); + }, + isClose: function() { + return !!this.closeState; + } + }); + } +}; + +//src/graphic/data.js +_p[31] = { + value: function(require, exports, module) { + return _p.r(11).createClass("Data", { + constructor: function() { + this._data = {}; + }, + setData: function(name, value) { + this._data[name] = value; + return this; + }, + getData: function(name) { + return this._data[name]; + }, + removeData: function(name) { + delete this._data[name]; + return this; + } + }); + } +}; + +//src/graphic/ellipse.js +_p[32] = { + value: function(require, exports, module) { + var Utils = _p.r(12), Point = _p.r(50); + return _p.r(11).createClass("Ellipse", { + base: _p.r(46), + constructor: function(rx, ry, cx, cy) { + this.callBase(); + this.rx = rx || 0; + this.ry = ry || 0; + this.cx = cx || 0; + this.cy = cy || 0; + this.update(); + }, + update: function() { + var rx = this.rx, ry = this.ry, x1 = this.cx + rx, x2 = this.cx - rx, y = this.cy; + var drawer = this.getDrawer(); + drawer.clear(); + drawer.moveTo(x1, y); + drawer.arcTo(rx, ry, 0, 1, 1, x2, y); + drawer.arcTo(rx, ry, 0, 1, 1, x1, y); + return this; + }, + getRadius: function() { + return { + x: this.rx, + y: this.ry + }; + }, + getRadiusX: function() { + return this.rx; + }, + getRadiusY: function() { + return this.ry; + }, + getCenter: function() { + return new Point(this.cx, this.cy); + }, + getCenterX: function() { + return this.cx; + }, + getCenterY: function() { + return this.cy; + }, + setRadius: function(rx, ry) { + this.rx = rx; + this.ry = ry; + return this.update(); + }, + setRadiusX: function(rx) { + this.rx = rx; + return this.update(); + }, + setRadiusY: function(ry) { + this.ry = ry; + return this.update(); + }, + setCenter: function(cx, cy) { + if (arguments.length == 1) { + var p = Point.parse(arguments[0]); + cx = p.x; + cy = p.y; + } + this.cx = cx; + this.cy = cy; + return this.update(); + }, + setCenterX: function(cx) { + this.cx = cx; + return this.update(); + }, + setCenterY: function(cy) { + this.cy = cy; + return this.update(); + } + }); + } +}; + +//src/graphic/eventhandler.js +/* + * kity event 实现 + */ +_p[33] = { + value: function(require, exports, module) { + // polyfill + (function() { + function CustomEvent(event, params) { + params = params || { + bubbles: false, + cancelable: false, + detail: undefined + }; + var evt = document.createEvent("CustomEvent"); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + } + CustomEvent.prototype = window.Event.prototype; + window.CustomEvent = CustomEvent; + })(); + var Utils = _p.r(12), ShapeEvent = _p.r(62); + // 内部处理器缓存 + var INNER_HANDLER_CACHE = {}, // 用户处理器缓存 + USER_HANDLER_CACHE = {}, guid = 0; + // 添加事件统一入口 + function _addEvent(type, handler, isOnce) { + isOnce = !!isOnce; + if (Utils.isString(type)) { + type = type.match(/\S+/g); + } + Utils.each(type, function(currentType) { + listen.call(this, this.node, currentType, handler, isOnce); + }, this); + return this; + } + // 移除事件统一入口 + function _removeEvent(type, handler) { + var userHandlerList = null, eventId = this._EVNET_UID, isRemoveAll = handler === undefined; + userHandlerList = USER_HANDLER_CACHE[eventId][type]; + //移除指定的监听器 + if (!isRemoveAll) { + isRemoveAll = true; + Utils.each(userHandlerList, function removeKityEvent(fn, index) { + if (fn === handler) { + // 不能结束, 需要查找完整个list, 避免丢失移除多次绑定同一个处理器的情况 + delete userHandlerList[index]; + } else { + isRemoveAll = false; + } + }); + } + //删除所有监听器 + if (isRemoveAll) { + deleteDomEvent(this.node, type, INNER_HANDLER_CACHE[eventId][type]); + delete USER_HANDLER_CACHE[eventId][type]; + delete INNER_HANDLER_CACHE[eventId][type]; + } + return this; + } + // 执行绑定, 该方法context为shape或者mixin了eventhandler的对象 + function listen(node, type, handler, isOnce) { + var eid = this._EVNET_UID, targetObject = this; + // 初始化内部监听器 + if (!INNER_HANDLER_CACHE[eid]) { + INNER_HANDLER_CACHE[eid] = {}; + } + if (!INNER_HANDLER_CACHE[eid][type]) { + // 内部监听器 + INNER_HANDLER_CACHE[eid][type] = function kityEventHandler(e) { + e = new ShapeEvent(e || window.event); + Utils.each(USER_HANDLER_CACHE[eid][type], function executeKityEvent(fn) { + var result; + if (fn) { + result = fn.call(targetObject, e); + //once 绑定, 执行完后删除 + if (isOnce) { + targetObject.off(type, fn); + } + } + // 如果用户handler里return了false, 则该节点上的此后的同类型事件将不再执行 + return result; + }, targetObject); + }; + } + // 初始化用户监听器列表 + if (!USER_HANDLER_CACHE[eid]) { + USER_HANDLER_CACHE[eid] = {}; + } + if (!USER_HANDLER_CACHE[eid][type]) { + USER_HANDLER_CACHE[eid][type] = [ handler ]; + // 绑定对应类型的事件 + // dom对象利用dom event进行处理, 非dom对象, 由消息分发机制处理 + if (!!node && "on" + type in node) { + bindDomEvent(node, type, INNER_HANDLER_CACHE[eid][type]); + } + } else { + USER_HANDLER_CACHE[eid][type].push(handler); + } + } + // 绑定dom事件 + function bindDomEvent(node, type, handler) { + if (node.addEventListener) { + node.addEventListener(type, handler, false); + } else { + node.attachEvent("on" + type, handler); + } + } + // 删除dom事件 + function deleteDomEvent(node, type, handler) { + if (node.removeEventListener) { + node.removeEventListener(type, handler, false); + } else { + node.detachEvent(type, handler); + } + } + // 触发dom事件 + function triggerDomEvent(node, type, params) { + var event = new CustomEvent(type, { + bubbles: true, + cancelable: true + }); + event._kityParam = params; + node.dispatchEvent(event); + } + // 发送消息 + function sendMessage(messageObj, type, msg) { + var event = null, handler = null; + var handlers = INNER_HANDLER_CACHE[messageObj._EVNET_UID]; + if (!handlers) return; + handler = handlers[type]; + if (!handler) { + return; + } + event = Utils.extend({ + type: type, + target: messageObj + }, msg || {}); + handler.call(messageObj, event); + } + // 对外接口 + return _p.r(11).createClass("EventHandler", { + constructor: function() { + this._EVNET_UID = ++guid; + }, + addEventListener: function(type, handler) { + return _addEvent.call(this, type, handler, false); + }, + addOnceEventListener: function(type, handler) { + return _addEvent.call(this, type, handler, true); + }, + removeEventListener: function(type, handler) { + return _removeEvent.call(this, type, handler); + }, + on: function(type, handler) { + return this.addEventListener.apply(this, arguments); + }, + once: function(type, handler) { + return this.addOnceEventListener.apply(this, arguments); + }, + off: function() { + return this.removeEventListener.apply(this, arguments); + }, + fire: function(type, params) { + return this.trigger.apply(this, arguments); + }, + trigger: function(type, params) { + sendMessage(this, type, params); + return this; + } + }); + } +}; + +//src/graphic/geometry.js +_p[34] = { + value: function(require) { + var utils = _p.r(12); + var Point = _p.r(50); + var Vector = _p.r(73); + var Matrix = _p.r(43); + var g = {}; + var pathCommand = /([achlmrqstvz])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\s]*,?\s*)+)/gi, pathValues = /(-?\d*\.?\d*(?:e[\-+]?\d+)?)\s*,?\s*/gi, paramCounts = { + a: 7, + c: 6, + h: 1, + l: 2, + m: 2, + q: 4, + s: 4, + t: 2, + v: 1, + z: 0 + }; + function pathClone(path) { + var result, i, j, segment, segmentCopy; + result = []; + for (i = 0; i < path.length; i++) { + segment = path[i]; + result.push(segmentCopy = []); + for (j = 0; j < segment.length; j++) { + segmentCopy.push(segment[j]); + } + } + if (path.isUniform) result.isUniform = true; + if (path.isAbsolute) result.isAbsolute = true; + if (path.isCurve) result.isCurve = true; + return result; + } + // 缓存函数 + // from raphael.js + function cacher(f, scope, postprocessor) { + function repush(array, item) { + for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) { + return array.push(array.splice(i, 1)[0]); + } + } + function newf() { + var arg = Array.prototype.slice.call(arguments, 0), args = arg.join("␀"), cache = newf.cache = newf.cache || {}, count = newf.count = newf.count || []; + if (cache.hasOwnProperty(args)) { + repush(count, args); + return postprocessor ? postprocessor(cache[args]) : cache[args]; + } + if (count.length >= 1e3) { + delete cache[count.shift()]; + } + count.push(args); + cache[args] = f.apply(scope, arg); + return postprocessor ? postprocessor(cache[args]) : cache[args]; + } + return newf; + } + /** + * + * kity.g.pathToString(pathSegment) + * + * 返回表示 PathSegment 的字符串 + * + * @param {Array} pathSegment + * 要表示的 Path Segment + * + * @return {String} 表示该 Path 的字符串 + * + * @example + * + * var pathSegment = [['M', 0, 0], ['L', 10, 10]] + * var pathString = kity.g.pathToString(pathSegment); + * // 返回 'M0,0L10,10' + */ + g.pathToString = function(pathSegment) { + pathSegment = pathSegment || this; + if (typeof pathSegment == "string") return pathSegment; + if (pathSegment instanceof Array) { + pathSegment = utils.flatten(pathSegment); + return pathSegment.join(",").replace(/,?([achlmqrstvxz]),?/gi, "$1"); + } + }; + /** + * kity.g.parsePathString(pathString) + * + * 解析 Path 字符串成 PathSegment + * + * @copyright rapheal.js + * + * @example + * + * var seg = kity.g.parsePathString('M10,12l21-23-21.5,11z'); + * // 返回: [['M', 10, 12], ['l', 21, -23], ['l', -21.5, 11], ['z']] + * + * @param {String} pathString Path 字符串 + * @return {Array} + */ + g.parsePathString = cacher(function(pathString) { + var data = []; + pathString.replace(pathCommand, function(a, b, c) { + var params = [], name = b.toLowerCase(); + c.replace(pathValues, function(a, b) { + if (b) params.push(+b); + }); + if (name == "m" && params.length > 2) { + data.push([ b ].concat(params.splice(0, 2))); + name = "l"; + b = b == "m" ? "l" : "L"; + } + if (name == "r") { + data.push([ b ].concat(params)); + } else { + while (params.length >= paramCounts[name]) { + data.push([ b ].concat(params.splice(0, paramCounts[name]))); + if (!paramCounts[name]) { + break; + } + } + } + }); + data.isUniform = true; + data.toString = g.pathToString; + return data; + }); + /** + * kity.g.pathToAbsolute(path) + * + * 把路径转换为绝对路径的形式 + * + * @param {Array|String} path + * 要转换的 path 路径或者数组 + * + * @return {Array} + * 转换后的 Path Segment + * + * @example + * + * var path = 'M10,10l50,50'; + * var absPath = kity.g.pathToAbsolute(path); + * // 返回 [['M', 10, 10], ['L', 60, 60]] + */ + g.pathToAbsolute = cacher(function(path) { + var pathArray = path.isUniform ? path : g.parsePathString(g.pathToString(path)); + var res = [], x = 0, y = 0, mx = 0, my = 0, start = 0; + var r, pa, i, j, k, ii, jj, kk; + if (pathArray[0][0] == "M") { + x = +pathArray[0][1]; + y = +pathArray[0][2]; + mx = x; + my = y; + start++; + res[0] = [ "M", x, y ]; + } + for (r, pa, i = start, ii = pathArray.length; i < ii; i++) { + res.push(r = []); + pa = pathArray[i]; + if (pa[0] != pa[0].toUpperCase()) { + r[0] = pa[0].toUpperCase(); + switch (r[0]) { + case "A": + r[1] = pa[1]; + r[2] = pa[2]; + r[3] = pa[3]; + r[4] = pa[4]; + r[5] = pa[5]; + r[6] = +(pa[6] + x); + r[7] = +(pa[7] + y); + break; + + case "V": + r[1] = +pa[1] + y; + break; + + case "H": + r[1] = +pa[1] + x; + break; + + case "M": + mx = +pa[1] + x; + my = +pa[2] + y; + break; + + default: + for (j = 1, jj = pa.length; j < jj; j++) { + r[j] = +pa[j] + (j % 2 ? x : y); + } + } + } else { + for (k = 0, kk = pa.length; k < kk; k++) { + r[k] = pa[k]; + } + } + switch (r[0]) { + case "Z": + x = mx; + y = my; + break; + + case "H": + x = r[1]; + break; + + case "V": + y = r[1]; + break; + + case "M": + mx = r[r.length - 2]; + my = r[r.length - 1]; + break; + + default: + x = r[r.length - 2]; + y = r[r.length - 1]; + } + } + res.isUniform = true; + res.isAbsolute = true; + res.toString = g.pathToString; + return res; + }); + // 把圆弧绘制的曲线转化为对应的三次贝塞尔形式 + function a2c(x1, y1, rx, ry, angle, laf, sf, x2, y2, recursive) { + // copy from raphael.js + // for more information of where this math came from visit: + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + var math = Math, PI = math.PI, abs = Math.abs, _120 = PI * 120 / 180, rad = PI / 180 * (+angle || 0), res = [], xy, rotate = function(x, y, rad) { + var X = x * math.cos(rad) - y * math.sin(rad), Y = x * math.sin(rad) + y * math.cos(rad); + return { + x: X, + y: Y + }; + }; + var cos, sin, h, x, y, rx2, ry2, k, cx, cy, f1, f2, df, f2old, x2old, y2old, c1, s1, c2, s2, t, hx, hy, m1, m2, m3, m4, newres, i, ii; + if (!recursive) { + xy = rotate(x1, y1, -rad); + x1 = xy.x; + y1 = xy.y; + xy = rotate(x2, y2, -rad); + x2 = xy.x; + y2 = xy.y; + cos = math.cos(PI / 180 * angle); + sin = math.sin(PI / 180 * angle); + x = (x1 - x2) / 2; + y = (y1 - y2) / 2; + h = x * x / (rx * rx) + y * y / (ry * ry); + if (h > 1) { + h = math.sqrt(h); + rx = h * rx; + ry = h * ry; + } + rx2 = rx * rx; + ry2 = ry * ry; + k = (laf == sf ? -1 : 1) * math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))); + cx = k * rx * y / ry + (x1 + x2) / 2; + cy = k * -ry * x / rx + (y1 + y2) / 2; + f1 = math.asin(((y1 - cy) / ry).toFixed(9)); + f2 = math.asin(((y2 - cy) / ry).toFixed(9)); + f1 = x1 < cx ? PI - f1 : f1; + f2 = x2 < cx ? PI - f2 : f2; + if (f1 < 0) f1 = PI * 2 + f1; + if (f2 < 0) f2 = PI * 2 + f2; + if (sf && f1 > f2) { + f1 = f1 - PI * 2; + } + if (!sf && f2 > f1) { + f2 = f2 - PI * 2; + } + } else { + f1 = recursive[0]; + f2 = recursive[1]; + cx = recursive[2]; + cy = recursive[3]; + } + df = f2 - f1; + if (abs(df) > _120) { + f2old = f2; + x2old = x2; + y2old = y2; + f2 = f1 + _120 * (sf && f2 > f1 ? 1 : -1); + x2 = cx + rx * math.cos(f2); + y2 = cy + ry * math.sin(f2); + res = a2c(x2, y2, rx, ry, angle, 0, sf, x2old, y2old, [ f2, f2old, cx, cy ]); + } + df = f2 - f1; + c1 = math.cos(f1); + s1 = math.sin(f1); + c2 = math.cos(f2); + s2 = math.sin(f2); + t = math.tan(df / 4); + hx = 4 / 3 * rx * t; + hy = 4 / 3 * ry * t; + m1 = [ x1, y1 ]; + m2 = [ x1 + hx * s1, y1 - hy * c1 ]; + m3 = [ x2 + hx * s2, y2 - hy * c2 ]; + m4 = [ x2, y2 ]; + m2[0] = 2 * m1[0] - m2[0]; + m2[1] = 2 * m1[1] - m2[1]; + if (recursive) { + return [ m2, m3, m4 ].concat(res); + } else { + res = [ m2, m3, m4 ].concat(res).join().split(","); + newres = []; + for (i = 0, ii = res.length; i < ii; i++) { + newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x; + } + return newres; + } + } + // 把二次贝塞尔曲线参数转化为三次贝塞尔曲线参数 + function q2c(x1, y1, ax, ay, x2, y2) { + // copy from raphael.js + var _13 = 1 / 3, _23 = 2 / 3; + return [ _13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2 ]; + } + /** + * kity.g.pathToCurve(path) + * + * 把路径转换为贝塞尔路径 + * + * @param {Array|String} path + * 要转换的 path 路径或数组 + * + * @return {Array} + * 转换后的 PathSegment,每一段都是 'C' + */ + g.pathToCurve = cacher(function(path) { + var i, j, command, param; + var initPoint, currentPoint, endPoint, shouldClose, lastControlPoint, aussumedControlPoint; + var controlPoint1, controlPoint2; + var res = []; + // 处理的路径要求是一个绝对路径 + if (!path.isAbsolute) path = g.pathToAbsolute(path); + for (i = 0; i < path.length; i++) { + command = path[i][0]; + param = path[i].slice(1); + // 画笔移动 + if (command == "M") { + initPoint = lastControlPoint = currentPoint = param; + res.push(path[i]); + continue; + } + // 路径闭合 + if (command == "Z") { + shouldClose = true; + command = "L"; + param = initPoint; + } + // 绘制命令的目的位置 + endPoint = param.slice(param.length - 2); + // 对 'H' 命令的修正 + if (command == "H") { + endPoint = [ param[0], currentPoint[1] ]; + command = "L"; + } + // 对 'V' 命令的修正 + if (command == "V") { + endPoint = [ currentPoint[0], param[0] ]; + command = "L"; + } + // 对 'S' 命令求出隐含的控制点位置 + if (command == "S" || command == "T") { + // 隐含控制点是上一个控制点关于当前位置的镜像 + aussumedControlPoint = [ currentPoint[0] + (currentPoint[0] - lastControlPoint[0]), currentPoint[1] + (currentPoint[1] - lastControlPoint[1]) ]; + } + // 针对不同的命令求控制点 + switch (command) { + case "L": + controlPoint1 = currentPoint; + controlPoint2 = endPoint; + break; + + case "C": + controlPoint1 = param.slice(0, 2); + controlPoint2 = param.slice(2, 4); + break; + + case "S": + controlPoint1 = aussumedControlPoint.slice(); + controlPoint2 = param.slice(0, 2); + break; + + case "Q": + lastControlPoint = param.slice(0, 2); + param = q2c.apply(null, currentPoint.concat(param)); + controlPoint1 = param.slice(0, 2); + controlPoint2 = param.slice(2, 4); + break; + + case "T": + param = q2c.apply(null, currentPoint.concat(aussumedControlPoint).concat(param)); + controlPoint1 = param.slice(0, 2); + controlPoint2 = param.slice(2, 4); + break; + + case "A": + param = a2c.apply(null, currentPoint.concat(param)); + j = 0; + while (j in param) { + controlPoint1 = param.slice(j, j + 2); + controlPoint2 = param.slice(j + 2, j + 4); + endPoint = param.slice(j + 4, j + 6); + // 写入当前一段曲线 + res.push([ "C" ].concat(controlPoint1).concat(controlPoint2).concat(endPoint)); + j += 6; + } + break; + } + if (command != "A") { + // 写入当前一段曲线 + res.push([ "C" ].concat(controlPoint1).concat(controlPoint2).concat(endPoint)); + } + // 为下次循环准备当前位置 + currentPoint = endPoint; + // 二次贝塞尔曲线自己已经记录了上个控制点的位置,其它的记录控制点 2 的位置 + if (command != "Q") { + lastControlPoint = controlPoint2; + } + if (shouldClose) { + res.push([ "Z" ]); + shouldClose = false; + } + } + res.isUniform = true; + res.isAbsolute = true; + res.isCurve = true; + res.toString = g.pathToString; + return res; + }); + /** + * 将贝塞尔曲线切成两部分 + * + * @see http://stackoverflow.com/questions/18655135/divide-bezier-curve-into-two-equal-halves + */ + function cutBezier(bezierArray, t) { + function __(t) { + return function(p, q) { + return p + t * (q - p); + }; + } + var _ = __(t || .5), ba = bezierArray, ax = ba[0], ay = ba[1], bx = ba[2], by = ba[3], cx = ba[4], cy = ba[5], dx = ba[6], dy = ba[7], ex = _(ax, bx), ey = _(ay, by), fx = _(bx, cx), fy = _(by, cy), gx = _(cx, dx), gy = _(cy, dy), hx = _(ex, fx), hy = _(ey, fy), jx = _(fx, gx), jy = _(fy, gy), kx = _(hx, jx), ky = _(hy, jy); + return [ [ ax, ay, ex, ey, hx, hy, kx, ky ], [ kx, ky, jx, jy, gx, gy, dx, dy ] ]; + } + /** + * kity.g.cutBezier(bezierArray, t) + * + * 在指定位置把贝塞尔曲线切割为两部分 + * + * @param {Array} bezierArray + * 表示贝塞尔曲线的一个数组 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] + * p1 和 p2 是贝塞尔曲线的起点和终点,c1 和 c2 是两个控制点 + * + * @param {Number} t + * 切割的位置(0 到 1) + * + * @return {Array} + * 切割的两个贝塞尔曲线:[ + * [p1x1, p1y1, c1x1, c1y1, c2x1, c2y1, p2x1, p2y1], + * [p1x2, p1y2, c1x2, c1y2, c2x2, c2y2, p2x2, p2y2] + * ] + * + */ + g.cutBezier = cacher(cutBezier); + /** + * 求一段贝塞尔曲线的子段 + * + * @param {Array} bezierArray + * 长度为 8 的数组,表示 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] + * + * @param {Number} t + * 子段的结束位置(0 到 1) + * + * @param {Number} t0 + * 字段的开始位置(0 到 t),可不传,默认为 0 + * + * @return {Array} + * 长度为 8 的数组,表示给定贝塞尔曲线的子段 + */ + g.subBezier = function(bezierArray, t, t0) { + var b2t = cutBezier(bezierArray, t)[0]; + return t0 ? cutBezier(b2t, t0 / t)[1] : b2t; + }; + /** + * 求贝塞尔曲线上的一个点 + * + * @param {Array} bezierArray + * 长度为 8 的数组,表示 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] + * + * @param {Number} t + * 所求点的开始位置(0 到 1) + * + * @return {Point} p + * p.x: x 坐标 + * p.y: y 坐标 + * p.tan: 在 t 处的切线方向(类型为 kity.Vector,模为 1) + */ + g.pointAtBezier = function(bezierArray, t) { + var b2t = cutBezier(bezierArray, t)[0]; + var p = Point.parse(b2t.slice(6)), c = Point.parse(b2t.slice(4, 2)), v = Vector.fromPoints(c, p); + if (t === 0) { + p.tan = g.pointAtBezier(bezierArray, .01).tan; + } else { + p.tan = v.normalize(); + } + return p; + }; + /** + * 求贝塞尔曲线的长度 + * + * @param {Array} bezierArray + * 长度为 8 的数组,表示 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] + * + * @param {Number} tolerate + * 允许的误差,默认是 0.1 + * + * @return {Number} 贝塞尔曲线的长度 + */ + g.bezierLength = cacher(function bezierLength(bezierArray) { + // 表示(c[0]*t^4 + c[1]*t^3 + c[2]*t^2 + c[3]*t^1 + c[4])^(1/2)的函数 + function f(x) { + var m = c0 * Math.pow(x, 4) + c1 * Math.pow(x, 3) + c2 * Math.pow(x, 2) + c3 * x + c4; + if (m < 0) { + m = 0; + } + return Math.pow(m, .5); + } + // 用Newton-Cotes型求积公式 + var arr = bezierArray; + // 三次贝塞尔曲线函数求导后,求出对应的方程系数,用cx[],cy[]表示x`(t)和y`(t)的系数 + var cx0, cx1, cx2; + var cy0, cy1, cy2; + // 用c[]表示x`(t)^2 + y`(t)^2的结果的系数 + var c0, c1, c2, c3, c4; + // 求x`(t) 和 y`(t)的系数 + cx0 = -3 * arr[0] + 9 * arr[2] - 9 * arr[4] + 3 * arr[6]; + cx1 = 6 * arr[0] - 12 * arr[2] + 6 * arr[4]; + cx2 = -3 * arr[0] + 3 * arr[2]; + cy0 = -3 * arr[1] + 9 * arr[3] - 9 * arr[5] + 3 * arr[7]; + cy1 = 6 * arr[1] - 12 * arr[3] + 6 * arr[5]; + cy2 = -3 * arr[1] + 3 * arr[3]; + // 求x`(t)^2 + y`(t)^2的结果的系数 c[] + c0 = Math.pow(cx0, 2) + Math.pow(cy0, 2); + c1 = 2 * (cx0 * cx1 + cy0 * cy1); + c2 = 2 * (cx0 * cx2 + cy0 * cy2) + Math.pow(cx1, 2) + Math.pow(cy1, 2); + c3 = 2 * (cx1 * cx2 + cy1 * cy2); + c4 = Math.pow(cx2, 2) + Math.pow(cy2, 2); + // 用cotes积分公式求值 + return (f(0) + f(1) + 4 * (f(.125) + f(.375) + f(.625) + f(.875)) + 2 * (f(.25) + f(.5) + f(.75))) / 24; + }); + // 计算一个 pathSegment 中每一段的在整体中所占的长度范围,以及总长度 + // 方法要求每一段都是贝塞尔曲线 + var getBezierPathSegmentRanges = cacher(function(pathSegment) { + var i, ii, segment, position, bezierLength, segmentRanges, totalLength; + segmentRanges = []; + // 总长度 + totalLength = 0; + for (i = 0, ii = pathSegment.length; i < ii; i++) { + segment = pathSegment[i]; + if (segment[0] == "M") { + position = segment.slice(1); + segmentRanges.push(null); + continue; + } + if (segment[0] == "Z") { + segmentRanges.push(null); + continue; + } + bezierLength = g.bezierLength(position.concat(segment.slice(1))); + segmentRanges.push([ totalLength, totalLength + bezierLength ]); + totalLength += bezierLength; + // 迭代当前位置 + position = segment.slice(4); + } + segmentRanges.totalLength = totalLength; + return segmentRanges; + }); + /** + * 求一段路径的子路径 + * + * @param {Array|String} path + * 原路径 + * + * @param {Number} t1 + * 要求的子路径的结束位置(0 到 1) + * + * @param {Number} t0 + * 要求的子路径的开始位置(0 到 t1),可不传,默认为 0 + * + * @return {Array} + * 子路径的 PathSegment + */ + g.subPath = function(path, t1, t0) { + var dt; + t0 = t0 || 0; + dt = t1 - t0; + dt = dt - (dt | 0); + t0 = t0 - (t0 | 0); + t1 = t0 + dt; + if (t1 > 1) { + return g.subPath(path, 1, t0).concat(g.subPath(path, t1 - 1)); + } + if (!path.isCurve) { + path = g.pathToCurve(path); + } + // path 每一段在整体中的长度区间 + var segmentRanges = getBezierPathSegmentRanges(path); + // path 总长度 + var totalLength = segmentRanges.totalLength; + // t1 和 t0 位置命中的长度位置 + var t1Length = totalLength * t1, t0Length = totalLength * (t0 || 0); + // 产生的子路径 + var subPath = []; + // 迭代变量,a 是一段的长度区间左值,b 是右值,d 是区间长度 + var i, ii, a, b, d; + var position; + var bezier, subBezier, stared; + for (i = 0, ii = path.length; i < ii; i++) { + if (path[i][0] == "M") { + position = path[i].slice(1); + if (stared) { + subPath.push(path[i].slice()); + } + continue; + } + if (path[i][0] == "Z") { + // subpath 路径不闭合 + continue; + } + a = segmentRanges[i][0]; + b = segmentRanges[i][1]; + d = b - a; + bezier = position.concat(path[i].slice(1)); + if (t0Length > b) { + // t0 和 t1 都右溢出 + // ----------------------------------- + // t0 t1 + // |________| + // + // 需要跳过当前块 + position = bezier.slice(bezier.length - 2); + continue; + } else if (t0Length >= a) { + // 命中 t0;t1 可能命中或右溢出 + // ----------------------------------- + // t0 t1 + // |______|__| + // + // or: |_|____|__| + // + // 取当前块 t0 到 t1 的部分 + subBezier = g.subBezier(bezier, Math.min((t1Length - a) / d, 1), (t0Length - a) / d); + stared = true; + position = subBezier.slice(0, 2); + subPath.push([ "M" ].concat(subBezier.slice(0, 2))); + subPath.push([ "C" ].concat(subBezier.slice(2))); + } else if (t1Length >= b) { + // t0 左溢出;t1 右溢出,整个块是需要的 + // ----------------------------------- + // t0 t1 + // |_________| + // + // 此时取整个块 + subPath.push(path[i].slice()); + } else if (t1Length >= a) { + // t0 左溢出;t1 命中,取当前块 t1 之前的部分 + // ----------------------------------- + // t0 t1 + // |__|______| + // 取当前块 t1 之前的部分 + subBezier = g.subBezier(bezier, (t1Length - a) / d); + subPath.push([ "C" ].concat(subBezier.slice(2))); + stared = false; + } else { + // 没有可以再要的了 + break; + } + position = bezier.slice(bezier.length - 2); + } + subPath.isAbsolute = true; + subPath.isCurve = true; + subPath.isUniform = true; + subPath.toString = g.pathToString; + return subPath; + }; + /** + * 求路径上的一个点 + * + * @param {Array|String} path + * 要求点的路径 + * + * @param {Number} t + * 要求的点的位置(0 到 1) + * + * @return {Point} p + * p.x: x 坐标 + * p.y: y 坐标 + * p.tan: 在 t 处的切线方向(类型为 kity.Vector,模为 1) + */ + g.pointAtPath = function(path, t) { + if (!path.isCurve) { + path = g.pathToCurve(path); + } + var subPath = g.subPath(path, t); + var lastCurve = subPath[subPath.length - 1][0] == "Z" ? subPath[subPath.length - 2] : subPath[subPath.length - 1]; + // 跳过 'C' 命令,只留参数 + lastCurve = lastCurve.slice(1); + var p = Point.parse(lastCurve.slice(4)), c = Point.parse(lastCurve.slice(2, 4)); + p.tan = Vector.fromPoints(c, p).normalize(); + return p; + }; + /** + * 求一段路径的长度 + * + * @param {string|Array} path + * 要求的路径 + * + * @return {Number} + * 路径的长度 + */ + g.pathLength = cacher(function(path) { + if (!path.isCurve) { + path = g.pathToCurve(path); + } + // path 每一段在整体中的长度区间 + var segmentRanges = getBezierPathSegmentRanges(path); + return segmentRanges.totalLength; + }); + /** + * 求一段路径的关键点 + * + * @param {string|Array} path + * 要求的路径 + * + * @return {Array} + * 关键点的集合 + */ + g.pathKeyPoints = cacher(function(path) { + var i, ii, command, keyPoints; + if (!path.isCurve) { + path = g.pathToCurve(path); + } + keyPoints = []; + for (i = 0, ii = path.length; i < ii; i++) { + if (path[i][0] == "z") continue; + keyPoints.push(path[i].slice(path[i].length - 2)); + } + return keyPoints; + }); + // 对比两个路径的关键位置,在合适的位置切割合适的路径,使得两个路径的段数一致 + // TODO: 使用插值算法,使对应点更合理 + var alignCurve = cacher(function(path1, path2) { + if (!path1.isCurve) path1 = g.pathToCurve(path1); + if (!path2.isCurve) path2 = g.pathToCurve(path2); + var p1 = pathClone(path1); + var p2 = pathClone(path2); + p1.i = 0; + p2.i = 0; + p1.o = p2; + p2.o = p1; + function command(p, i) { + return p[i || p.i] && p[i || p.i][0]; + } + function param(p, i) { + return p[i || p.i] && p[i || p.i].slice(1); + } + function point(p, i) { + var _param = param(p, i); + return _param && _param.slice(-2); + } + function fixZ(p) { + if (command(p) == "Z") { + p.splice(p.i, 1); + return true; + } + return false; + } + function fixM(p) { + if (command(p) == "M") { + p.o.splice(p.o.i, 0, [ "M" ].concat(point(p.o, p.o.i - 1))); + p.i++; + p.o.i++; + return true; + } + return false; + } + function fill(p) { + var lastPoint; + var i = 1; + while (!lastPoint) { + lastPoint = point(p, p.length - i++); + } + p.o.i = p.i; + while (p.length < p.o.length) { + if (fixZ(p.o)) continue; + if (fixM(p.o)) continue; + p.push([ "C" ].concat(lastPoint).concat(lastPoint).concat(lastPoint)); + p.i++; + p.o.i++; + } + } + while (p1.i < p1.length && p2.i < p2.length) { + if (fixZ(p1) || fixZ(p2)) continue; + if (command(p1) == command(p2)) { + p1.i++; + p2.i++; + continue; + } + if (fixM(p1) || fixM(p2)) continue; + p1.i++; + p2.i++; + } + if (p1.i == p1.length) fill(p1); + if (p2.i == p2.length) fill(p2); + delete p1.i; + delete p1.o; + delete p2.i; + delete p2.o; + return [ p1, p2 ]; + }); + g.alignCurve = alignCurve; + /** + * 获得两个路径的补间结果 + * + * @param {string|Array} path1 + * 补间起始路径 + * + * @param {string|Array} path2 + * 补间结束路径 + * + * @param {Number} t + * 补间比例,0 返回跟 path1 等效的结果;1 返回跟 path2 等效的结果 + * + * @return {PathSegment} + * 补间的结果 + */ + g.pathTween = function(path1, path2, t) { + if (t === 0) return path1; + if (t === 1) return path2; + var aligned = alignCurve(path1, path2); + var result = [], seg, i, j; + path1 = aligned[0]; + path2 = aligned[1]; + for (i = 0; i < path1.length; i++) { + result.push(seg = []); + seg.push(path1[i][0]); + for (j = 1; j < path1[i].length; j++) { + seg.push(path1[i][j] + t * (path2[i][j] - path1[i][j])); + } + } + result.isUniform = result.isCurve = result.isAbsolute = true; + return result; + }; + /** + * 变换指定的路径 + * + * @param {String|Array} path + * 需要变换的路径 + * + * @param {kity.Matrix} matrix + * 使用的变换矩阵 + * + * @return {Array} + * 变换后的路径 + */ + g.transformPath = cacher(function(path, matrix) { + var i, ii, j, result, seg, pair; + if (!path.isCurve) { + path = g.pathToCurve(path); + } + result = []; + for (i = 0, ii = path.length; i < ii; i++) { + result.push(seg = [ path[i][0] ]); + for (j = 1; j < path[i].length; j += 2) { + pair = path[i].slice(j, j + 2); + pair = matrix.transformPoint(Point.parse(pair)); + result.push(pair); + } + } + return result; + }); + // entend + _p.r(11).extendClass(Matrix, { + transformPath: function(path) { + return g.transformPath(path, this); + } + }); + return g; + } +}; + +//src/graphic/gradient.js +_p[35] = { + value: function(require, exports, module) { + var svg = _p.r(67); + var Resource = _p.r(58); + var Color = _p.r(28); + return _p.r(11).createClass("GradientBrush", { + base: Resource, + constructor: function(gradientNodeType, paper) { + this.callBase(gradientNodeType, paper); + this.stops = []; + }, + addStop: function(offset, color, opacity) { + var gstop = svg.createNode("stop"); + if (!(color instanceof Color)) { + color = Color.parse(color); + } + if (opacity === undefined) { + opacity = color.get("a"); + } + gstop.setAttribute("offset", offset); + gstop.setAttribute("stop-color", color.toRGB()); + if (opacity < 1) { + gstop.setAttribute("stop-opacity", opacity); + } + this.node.appendChild(gstop); + return this; + } + }); + } +}; + +//src/graphic/group.js +_p[36] = { + value: function(require, exports, module) { + var ShapeContainer = _p.r(61); + return _p.r(11).createClass("Group", { + mixins: [ ShapeContainer ], + base: _p.r(60), + constructor: function Group() { + this.callBase("g"); + } + }); + } +}; + +//src/graphic/hyperlink.js +_p[37] = { + value: function(require, exports, module) { + var ShapeContainer = _p.r(61); + return _p.r(11).createClass("HyperLink", { + mixins: [ ShapeContainer ], + base: _p.r(60), + constructor: function(url) { + this.callBase("a"); + this.setHref(url); + }, + setHref: function(href) { + this.node.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", href); + return this; + }, + getHref: function() { + return this.node.getAttributeNS("xlink:href"); + }, + setTarget: function(target) { + this.node.setAttribute("target", target); + return this; + }, + getTarget: function() { + return this.node.getAttribute("target"); + } + }); + } +}; + +//src/graphic/image.js +_p[38] = { + value: function(require, exports, module) { + return _p.r(11).createClass("Image", { + base: _p.r(60), + constructor: function(url, width, height, x, y) { + this.callBase("image"); + this.url = url; + this.width = width || 0; + this.height = height || 0; + this.x = x || 0; + this.y = y || 0; + this.update(); + }, + update: function() { + this.node.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", this.url); + this.node.setAttribute("x", this.x); + this.node.setAttribute("y", this.y); + this.node.setAttribute("width", this.width); + this.node.setAttribute("height", this.height); + return this; + }, + setUrl: function(url) { + this.url = url === "" ? null : url; + return this.update(); + }, + getUrl: function() { + return this.url; + }, + setWidth: function(width) { + this.width = width; + return this.update(); + }, + getWidth: function() { + return this.width; + }, + setHeight: function(height) { + this.height = height; + return this.update(); + }, + getHeight: function() { + return this.height; + }, + setX: function(x) { + this.x = x; + return this.update(); + }, + getX: function() { + return this.x; + }, + setY: function(y) { + this.y = y; + return this.update(); + }, + getY: function() { + return this.y; + } + }); + } +}; + +//src/graphic/line.js +_p[39] = { + value: function(require, exports, module) { + return _p.r(11).createClass("Line", { + base: _p.r(46), + constructor: function(x1, y1, x2, y2) { + this.callBase(); + this.point1 = { + x: x1 || 0, + y: y1 || 0 + }; + this.point2 = { + x: x2 || 0, + y: y2 || 0 + }; + this.update(); + }, + setPoint1: function(x, y) { + this.point1.x = x; + this.point1.y = y; + return this.update(); + }, + setPoint2: function(x, y) { + this.point2.x = x; + this.point2.y = y; + return this.update(); + }, + getPoint1: function() { + return { + x: this.point1.x, + y: this.point1.y + }; + }, + getPoint2: function() { + return { + x: this.point2.x, + y: this.point2.y + }; + }, + update: function() { + var drawer = this.getDrawer(); + drawer.clear(); + drawer.moveTo(this.point1.x, this.point1.y); + drawer.lineTo(this.point2.x, this.point2.y); + return this; + } + }); + } +}; + +//src/graphic/lineargradient.js +_p[40] = { + value: function(require, exports, module) { + var svg = _p.r(67); + var Gradient = _p.r(35); + return _p.r(11).createClass("LinearGradientBrush", { + base: Gradient, + constructor: function(paper) { + this.callBase("linearGradient", paper); + this.setStartPosition(0, 0); + this.setEndPosition(1, 0); + }, + setStartPosition: function(px, py) { + this.node.setAttribute("x1", px); + this.node.setAttribute("y1", py); + return this; + }, + setEndPosition: function(px, py) { + this.node.setAttribute("x2", px); + this.node.setAttribute("y2", py); + return this; + }, + getStartPosition: function() { + return { + x: +this.node.getAttribute("x1"), + y: +this.node.getAttribute("y1") + }; + }, + getEndPosition: function() { + return { + x: +this.node.getAttribute("x2"), + y: +this.node.getAttribute("y2") + }; + } + }); + } +}; + +//src/graphic/marker.js +_p[41] = { + value: function(require, exports, module) { + var Point = _p.r(50); + var Marker = _p.r(11).createClass("Marker", { + base: _p.r(58), + mixins: [ _p.r(61), _p.r(75) ], + constructor: function() { + this.callBase("marker"); + this.setOrient("auto"); + }, + setRef: function(x, y) { + if (arguments.length === 1) { + y = x.y; + x = x.x; + } + this.node.setAttribute("refX", x); + this.node.setAttribute("refY", y); + return this; + }, + getRef: function() { + return new Point(+this.node.getAttribute("refX"), +this.node.getAttribute("refY")); + }, + setWidth: function(width) { + this.node.setAttribute("markerWidth", this.width = width); + return this; + }, + setOrient: function(orient) { + this.node.setAttribute("orient", this.orient = orient); + return this; + }, + getOrient: function() { + return this.orient; + }, + getWidth: function() { + return +this.width; + }, + setHeight: function(height) { + this.node.setAttribute("markerHeight", this.height = height); + return this; + }, + getHeight: function() { + return +this.height; + } + }); + var Path = _p.r(46); + _p.r(11).extendClass(Path, { + setMarker: function(marker, pos) { + pos = pos || "end"; + if (!marker) { + this.node.removeAttribute("marker-" + pos); + } else { + this.node.setAttribute("marker-" + pos, marker.toString()); + } + return this; + } + }); + return Marker; + } +}; + +//src/graphic/mask.js +/** + * 蒙板 + */ +_p[42] = { + value: function(require, exports, module) { + var Class = _p.r(11); + var Shape = _p.r(60); + var Mask = Class.createClass("Mask", { + base: Shape, + mixins: [ _p.r(61) ], + constructor: function() { + this.callBase("mask"); + }, + mask: function(shape) { + shape.getNode().setAttribute("mask", "url(#" + this.getId() + ")"); + return this; + } + }); + Class.extendClass(Shape, { + maskWith: function(mask) { + mask.mask(this); + return this; + } + }); + return Mask; + } +}; + +//src/graphic/matrix.js +_p[43] = { + value: function(require, exports, module) { + var utils = _p.r(12); + var Box = _p.r(25); + var mPattern = /matrix\s*\((.+)\)/i; + var Point = _p.r(50); + // 注意,合并的结果是先执行m2,再执行m1的结果 + function mergeMatrixData(m2, m1) { + return { + a: m1.a * m2.a + m1.c * m2.b, + b: m1.b * m2.a + m1.d * m2.b, + c: m1.a * m2.c + m1.c * m2.d, + d: m1.b * m2.c + m1.d * m2.d, + e: m1.a * m2.e + m1.c * m2.f + m1.e, + f: m1.b * m2.e + m1.d * m2.f + m1.f + }; + } + function d2r(deg) { + return deg * Math.PI / 180; + } + var Matrix = _p.r(11).createClass("Matrix", { + constructor: function() { + if (arguments.length) { + this.setMatrix.apply(this, arguments); + } else { + this.setMatrix(1, 0, 0, 1, 0, 0); + } + }, + translate: function(x, y) { + this.m = mergeMatrixData(this.m, { + a: 1, + c: 0, + e: x, + b: 0, + d: 1, + f: y + }); + return this; + }, + rotate: function(deg) { + var rad = d2r(deg); + var sin = Math.sin(rad), cos = Math.cos(rad); + this.m = mergeMatrixData(this.m, { + a: cos, + c: -sin, + e: 0, + b: sin, + d: cos, + f: 0 + }); + return this; + }, + scale: function(sx, sy) { + if (sy === undefined) { + sy = sx; + } + this.m = mergeMatrixData(this.m, { + a: sx, + c: 0, + e: 0, + b: 0, + d: sy, + f: 0 + }); + return this; + }, + skew: function(degX, degY) { + if (degY === undefined) { + degY = degX; + } + var tx = Math.tan(d2r(degX)), ty = Math.tan(d2r(degY)); + this.m = mergeMatrixData(this.m, { + a: 1, + c: tx, + e: 0, + b: ty, + d: 1, + f: 0 + }); + return this; + }, + /** + * 获得反转矩阵 + * + * 这是我解方程算出来的 + */ + inverse: function() { + var m = this.m, a = m.a, b = m.b, c = m.c, d = m.d, e = m.e, f = m.f, k, aa, bb, cc, dd, ee, ff; + k = a * d - b * c; + aa = d / k; + bb = -b / k; + cc = -c / k; + dd = a / k; + ee = (c * f - e * d) / k; + ff = (b * e - a * f) / k; + return new Matrix(aa, bb, cc, dd, ee, ff); + }, + setMatrix: function(a, b, c, d, e, f) { + if (arguments.length === 1) { + this.m = utils.clone(arguments[0]); + } else { + this.m = { + a: a, + b: b, + c: c, + d: d, + e: e, + f: f + }; + } + return this; + }, + getMatrix: function() { + return utils.clone(this.m); + }, + getTranslate: function() { + var m = this.m; + return { + x: m.e / m.a, + y: m.f / m.d + }; + }, + mergeMatrix: function(matrix) { + return new Matrix(mergeMatrixData(this.m, matrix.m)); + }, + merge: function(matrix) { + return this.mergeMatrix(matrix); + }, + toString: function() { + return this.valueOf().join(" "); + }, + valueOf: function() { + var m = this.m; + return [ m.a, m.b, m.c, m.d, m.e, m.f ]; + }, + equals: function(matrix) { + var m1 = this.m, m2 = matrix.m; + return m1.a == m2.a && m1.b == m2.b && m1.c == m2.c && m1.d == m2.d && m1.e == m2.e && m1.f == m2.f; + }, + transformPoint: function() { + return Matrix.transformPoint.apply(null, [].slice.call(arguments).concat([ this.m ])); + }, + transformBox: function(box) { + return Matrix.transformBox(box, this.m); + }, + clone: function() { + return new Matrix(this.m); + } + }); + Matrix.parse = function(str) { + var match; + var f = parseFloat; + if (str instanceof Array) { + return new Matrix({ + a: str[0], + b: str[1], + c: str[2], + d: str[3], + e: str[4], + f: str[5] + }); + } + if (match = mPattern.exec(str)) { + var values = match[1].split(","); + if (values.length != 6) { + values = match[1].split(" "); + } + return new Matrix({ + a: f(values[0]), + b: f(values[1]), + c: f(values[2]), + d: f(values[3]), + e: f(values[4]), + f: f(values[5]) + }); + } + return new Matrix(); + }; + Matrix.transformPoint = function(x, y, m) { + if (arguments.length === 2) { + m = y; + y = x.y; + x = x.x; + } + return new Point(m.a * x + m.c * y + m.e, m.b * x + m.d * y + m.f); + }; + Matrix.transformBox = function(box, matrix) { + var xMin = Number.MAX_VALUE, xMax = -Number.MAX_VALUE, yMin = Number.MAX_VALUE, yMax = -Number.MAX_VALUE; + var bps = [ [ box.x, box.y ], [ box.x + box.width, box.y ], [ box.x, box.y + box.height ], [ box.x + box.width, box.y + box.height ] ]; + var bp, rp, rps = []; + while (bp = bps.pop()) { + rp = Matrix.transformPoint(bp[0], bp[1], matrix); + rps.push(rp); + xMin = Math.min(xMin, rp.x); + xMax = Math.max(xMax, rp.x); + yMin = Math.min(yMin, rp.y); + yMax = Math.max(yMax, rp.y); + } + box = new Box({ + x: xMin, + y: yMin, + width: xMax - xMin, + height: yMax - yMin + }); + utils.extend(box, { + closurePoints: rps + }); + return box; + }; + // 获得从 node 到 refer 的变换矩阵 + Matrix.getCTM = function(target, refer) { + var ctm = { + a: 1, + b: 0, + c: 0, + d: 1, + e: 0, + f: 0 + }; + var node = target.shapeNode || target.node; + refer = refer || "parent"; + /** + * 由于新版chrome(dev 48.0)移除了getTransformToElement这个方法可能导致报错,这里做兼容处理 + * @Date 2015-11-12 + * @Editor Naixor + */ + function getTransformToElement(target, source) { + var matrix; + try { + matrix = source.getScreenCTM().inverse(); + } catch (e) { + throw new Error("Can not inverse source element' ctm."); + } + return matrix.multiply(target.getScreenCTM()); + } + // 根据参照坐标系选区的不一样,返回不同的结果 + switch (refer) { + case "screen": + // 以浏览器屏幕为参照坐标系 + ctm = node.getScreenCTM(); + break; + + case "doc": + case "paper": + // 以文档(Paper)为参照坐标系 + ctm = node.getCTM(); + break; + + case "view": + case "top": + // 以顶层绘图容器(视野)为参照坐标系 + if (target.getPaper()) { + ctm = node.getTransformToElement !== undefined ? node.getTransformToElement(target.getPaper().shapeNode) : getTransformToElement(node, target.getPaper().shapeNode); + } + break; + + case "parent": + // 以父容器为参照坐标系 + if (target.node.parentNode) { + ctm = node.getTransformToElement !== undefined ? node.getTransformToElement(target.node.parentNode) : getTransformToElement(node, target.node.parentNode); + } + break; + + default: + // 其他情况,指定参照物 + if (refer.node) { + ctm = node.getTransformToElement !== undefined ? node.getTransformToElement(refer.shapeNode || refer.node) : getTransformToElement(node, refer.shapeNode || refer.node); + } + } + return ctm ? new Matrix(ctm.a, ctm.b, ctm.c, ctm.d, ctm.e, ctm.f) : new Matrix(); + }; + return Matrix; + } +}; + +//src/graphic/palette.js +/** + * 调色板 + */ +_p[44] = { + value: function(require, exports, module) { + //标准color + var StandardColor = _p.r(64), Color = _p.r(28), Utils = _p.r(12); + var Palette = _p.r(11).createClass("Palette", { + constructor: function() { + this.color = {}; + }, + /* + * 获取颜色名称所对应的颜色值的Color对象 + * @param name 需要获取的颜色名称 + * @return 对应颜色名称的color对象, 如果未找到对应的名称, 则返回null + */ + get: function(name) { + var colorValue = this.color[name] || StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name] || ""; + if (colorValue) { + return new Color(colorValue); + } + return null; + }, + /* + * 获取给定名称的颜色的hex值表示 + * @param name 需要获取的颜色名称 + * @return 如果找到对应的名称, 则返回该名称所对应的hex格式的值, 否则, 返回一个空字符串 + */ + getColorValue: function(name) { + return this.color[name] || StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name] || ""; + }, + /* + * 向调色板实例添加自己独有的颜色名称,对已存在的颜色名称, 将会覆盖掉 + * @param name 新添加的颜色名称 + * @param value 新添加的颜色名称所对应的值, 可以是一个合法的颜色字符串或者是一个color对象 + * @return 新添加的颜色的值 + */ + add: function(name, value) { + if (typeof value === "string") { + this.color[name] = new Color(value).toRGBA(); + } else { + this.color[name] = value.toRGBA(); + } + return value; + }, + /* + * 删除调色板实例上用户自己添加的颜色, 该方法不能删除内置的颜色 + * @param name 需要删除的颜色名称 + * @return 删除是否成功的bool值 + */ + remove: function(name) { + if (this.color.hasOwnProperty(name)) { + delete this.color[name]; + return true; + } + return false; + } + }); + Utils.extend(Palette, { + getColor: function(name) { + var colorValue = StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name]; + if (colorValue) { + return new Color(colorValue); + } + return null; + }, + /* + * 通过给定的名字获取标准的颜色值表示, 返回的值以hex的方式提供 + * @param name 需要获取的标准颜色名称 + * @return 名字所对应的颜色值的hex表示, 如果未找到对应名称的值, 则返回一个空字符串 + */ + getColorValue: function(name) { + return StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name] || ""; + }, + /* + * 向调色板添加颜色名称,新添加的颜色对所有的调色板对象都可见 + * 对已存在的颜色名称, 将会覆盖掉 + * @param name 新添加的颜色名称 + * @param value 新添加的颜色名称所对于的值, 应该是一个hex格式的颜色字符串, 如: ”#ff0000“ + * @return 新添加的颜色的值 + */ + addColor: function(name, value) { + if (typeof value === "string") { + StandardColor.EXTEND_STANDARD[name] = new Color(value).toRGBA(); + } else { + StandardColor.EXTEND_STANDARD[name] = value.toRGBA(); + } + return value; + }, + /* + * 删除用户自己添加的颜色, 该方法不能删除内置的颜色, 该方法不会影响调色板实例自由的颜色 + * @param name 需要删除的颜色名称 + * @return 删除是否成功的bool值 + */ + removeColor: function(name) { + if (StandardColor.EXTEND_STANDARD.hasOwnProperty(name)) { + delete StandardColor.EXTEND_STANDARD[name]; + return true; + } + return false; + } + }); + return Palette; + } +}; + +//src/graphic/paper.js +_p[45] = { + value: function(require, exports, module) { + var Class = _p.r(11); + var utils = _p.r(12); + var svg = _p.r(67); + var Container = _p.r(29); + var ShapeContainer = _p.r(61); + var ViewBox = _p.r(75); + var EventHandler = _p.r(33); + var Styled = _p.r(66); + var Matrix = _p.r(43); + var Paper = Class.createClass("Paper", { + mixins: [ ShapeContainer, EventHandler, Styled, ViewBox ], + constructor: function(container) { + this.callBase(); + this.node = this.createSVGNode(); + this.node.paper = this; + this.node.appendChild(this.resourceNode = svg.createNode("defs")); + this.node.appendChild(this.shapeNode = svg.createNode("g")); + this.resources = new Container(); + this.setWidth("100%").setHeight("100%"); + if (container) { + this.renderTo(container); + } + this.callMixin(); + }, + renderTo: function(container) { + if (utils.isString(container)) { + container = document.getElementById(container); + } + this.container = container; + container.appendChild(this.node); + }, + createSVGNode: function() { + var node = svg.createNode("svg"); + node.setAttribute("xmlns", "http://www.w3.org/2000/svg"); + node.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + node.setAttribute("version", "1.1"); + return node; + }, + getNode: function() { + return this.node; + }, + getContainer: function() { + return this.container; + }, + getWidth: function() { + return this.node.clientWidth; + }, + setWidth: function(width) { + this.node.setAttribute("width", width); + return this; + }, + getHeight: function() { + return this.node.clientHeight; + }, + setHeight: function(height) { + this.node.setAttribute("height", height); + return this; + }, + setViewPort: function(cx, cy, zoom) { + var viewport, box; + if (arguments.length == 1) { + viewport = arguments[0]; + cx = viewport.center.x; + cy = viewport.center.y; + zoom = viewport.zoom; + } + zoom = zoom || 1; + box = this.getViewBox(); + var matrix = new Matrix(); + var dx = box.x + box.width / 2 - cx, dy = box.y + box.height / 2 - cy; + matrix.translate(-cx, -cy); + matrix.scale(zoom); + matrix.translate(cx, cy); + matrix.translate(dx, dy); + this.shapeNode.setAttribute("transform", "matrix(" + matrix + ")"); + this.viewport = { + center: { + x: cx, + y: cy + }, + offset: { + x: dx, + y: dy + }, + zoom: zoom + }; + return this; + }, + getViewPort: function() { + if (!this.viewport) { + var box = this.getViewBox(); + return { + zoom: 1, + center: { + x: box.x + box.width / 2, + y: box.y + box.height / 2 + }, + offset: { + x: 0, + y: 0 + } + }; + } + return this.viewport; + }, + getViewPortMatrix: function() { + return Matrix.parse(this.shapeNode.getAttribute("transform")); + }, + getViewPortTransform: function() { + var m = this.shapeNode.getCTM(); + return new Matrix(m.a, m.b, m.c, m.d, m.e, m.f); + }, + getTransform: function() { + return this.getViewPortTransform().reverse(); + }, + addResource: function(resource) { + this.resources.appendItem(resource); + if (resource.node) { + this.resourceNode.appendChild(resource.node); + } + return this; + }, + removeResource: function(resource) { + if (resource.remove) { + resource.remove(); + } + if (resource.node) { + this.resourceNode.removeChild(resource.node); + } + return this; + }, + getPaper: function() { + return this; + } + }); + var Shape = _p.r(60); + Class.extendClass(Shape, { + getPaper: function() { + var parent = this.container; + while (parent && parent instanceof Paper === false) { + parent = parent.container; + } + return parent; + }, + isAttached: function() { + return !!this.getPaper(); + }, + whenPaperReady: function(fn) { + var me = this; + function check() { + var paper = me.getPaper(); + if (paper && fn) { + fn.call(me, paper); + } + return paper; + } + if (!check()) { + this.on("add treeadd", function listen() { + if (check()) { + me.off("add", listen); + me.off("treeadd", listen); + } + }); + } + return this; + } + }); + return Paper; + } +}; + +//src/graphic/path.js +_p[46] = { + value: function(require, exports, module) { + var Utils = _p.r(12); + var createClass = _p.r(11).createClass; + var Shape = _p.r(60); + var svg = _p.r(67); + var g = _p.r(34); + var slice = Array.prototype.slice, flatten = Utils.flatten; + var PathDrawer = createClass("PathDrawer", { + constructor: function(path) { + this.segment = []; + this.path = path; + this.__clear = false; + }, + getPath: function() { + return this.path; + }, + redraw: function() { + this._transation = this._transation || []; + return this.clear(); + }, + done: function() { + var transation = this._transation; + this._transation = null; + this.push(transation); + return this; + }, + clear: function() { + if (this._transation) { + this._transation = []; + } else { + this.path.setPathData("M 0 0"); + } + this._clear = true; + return this; + }, + push: function() { + var segment = slice.call(arguments); + var originData; + if (this._transation) { + this._transation.push(segment); + return this; + } + if (this._clear) { + originData = ""; + this._clear = false; + } else { + originData = this.path.getPathData(); + } + originData = originData || ""; + this.path.setPathData(originData + g.pathToString(segment)); + return this; + }, + moveTo: function(x, y) { + return this.push("M", slice.call(arguments)); + }, + moveBy: function(dx, dy) { + return this.push("m", slice.call(arguments)); + }, + lineTo: function(x, y) { + return this.push("L", slice.call(arguments)); + }, + lineBy: function(dx, dy) { + return this.push("l", slice.call(arguments)); + }, + arcTo: function(rx, ry, xr, laf, sf, x, y) { + return this.push("A", slice.call(arguments)); + }, + arcBy: function(rx, ry, xr, laf, sf, dx, dy) { + return this.push("a", arguments); + }, + carcTo: function(r, laf, sf, x, y) { + return this.push("A", [ r, r, 0 ].concat(slice.call(arguments, 1))); + }, + carcBy: function(r, laf, sf, dx, dy) { + return this.push("a", [ r, r, 0 ].concat(slice.call(arguments, 1))); + }, + bezierTo: function(x1, y1, x2, y2, x, y) { + return this.push("C", slice.call(arguments)); + }, + bezierBy: function(dx1, dy1, dx2, dy2, dx, dy) { + return this.push("c", slice.call(arguments)); + }, + close: function() { + return this.push("z"); + } + }); + return createClass("Path", { + base: Shape, + constructor: function(data) { + this.callBase("path"); + if (data) { + this.setPathData(data); + } + this.node.setAttribute("fill", svg.defaults.fill); + this.node.setAttribute("stroke", svg.defaults.stroke); + }, + setPathData: function(data) { + data = data || "M0,0"; + this.pathdata = g.pathToString(data); + this.node.setAttribute("d", this.pathdata); + this.trigger("shapeupdate", { + type: "pathdata" + }); + return this; + }, + getPathData: function() { + return this.pathdata || ""; + }, + getDrawer: function() { + return new PathDrawer(this); + }, + isClosed: function() { + var data = this.getPathData(); + return !!~data.indexOf("z") || !!~data.indexOf("Z"); + } + }); + } +}; + +//src/graphic/pattern.js +_p[47] = { + value: function(require, exports, module) { + var Resource = _p.r(58); + var ShapeContainer = _p.r(61); + var svg = _p.r(67); + return _p.r(11).createClass("PatternBrush", { + base: Resource, + mixins: [ ShapeContainer ], + constructor: function(paper) { + this.callBase("pattern", paper); + this.node.setAttribute("patternUnits", "userSpaceOnUse"); + }, + setX: function(x) { + this.x = x; + this.node.setAttribute("x", x); + return this; + }, + setY: function(y) { + this.y = y; + this.node.setAttribute("y", y); + return this; + }, + setWidth: function(width) { + this.width = width; + this.node.setAttribute("width", width); + return this; + }, + setHeight: function(height) { + this.height = height; + this.node.setAttribute("height", height); + return this; + }, + getWidth: function() { + return this.width; + }, + getHeight: function() { + return this.height; + } + }); + } +}; + +//src/graphic/pen.js +_p[48] = { + value: function(require, exports, module) { + var Color = _p.r(28); + return _p.r(11).createClass("Pen", { + constructor: function(brush, width) { + this.brush = brush; + this.width = width || 1; + this.linecap = null; + this.linejoin = null; + this.dashArray = null; + this.opacity = 1; + }, + getBrush: function() { + return this.brush; + }, + setBrush: function(brush) { + this.brush = brush; + return this; + }, + setColor: function(color) { + return this.setBrush(color); + }, + getColor: function() { + return this.brush instanceof Color ? this.brush : null; + }, + getWidth: function() { + return this.width; + }, + setWidth: function(width) { + this.width = width; + return this; + }, + getOpacity: function() { + return this.opacity; + }, + setOpacity: function(opacity) { + this.opacity = opacity; + }, + getLineCap: function() { + return this.linecap; + }, + setLineCap: function(linecap) { + this.linecap = linecap; + return this; + }, + getLineJoin: function() { + return this.linejoin; + }, + setLineJoin: function(linejoin) { + this.linejoin = linejoin; + return this; + }, + getDashArray: function() { + return this.dashArray; + }, + setDashArray: function(dashArray) { + this.dashArray = dashArray; + return this; + }, + stroke: function(shape) { + var node = shape.node; + node.setAttribute("stroke", this.brush.toString()); + node.setAttribute("stroke-width", this.getWidth()); + if (this.getOpacity() < 1) { + node.setAttribute("stroke-opacity", this.getOpacity()); + } + if (this.getLineCap()) { + node.setAttribute("stroke-linecap", this.getLineCap()); + } + if (this.getLineJoin()) { + node.setAttribute("stroke-linejoin", this.getLineJoin()); + } + if (this.getDashArray()) { + node.setAttribute("stroke-dasharray", this.getDashArray()); + } + } + }); + } +}; + +//src/graphic/pie.js +_p[49] = { + value: function(require, exports, module) { + return _p.r(11).createClass({ + base: _p.r(68), + constructor: function(radius, angle, angleOffset) { + this.callBase([ 0, radius ], angle, angleOffset); + }, + getRadius: function() { + return this.getSectionArray()[1]; + }, + setRadius: function(radius) { + this.setSectionArray([ 0, radius ]); + } + }); + } +}; + +//src/graphic/point.js +/* + * 点对象抽象 + */ +_p[50] = { + value: function(require, exports, module) { + /** + * @class kity.Point + * @description 表示一个点 + */ + var Point = _p.r(11).createClass("Point", { + /** + * @constructor + * @for kity.Point + * @description 指定默认的 x 和 y 创建一个点 + * + * @param {Number} x 点的 x 坐标 + * @param {Number} y 点的 y 坐标 + */ + constructor: function(x, y) { + /** + * @property + * @for kity.Point + * @description 表示点的 x 坐标 + * @type {Number} + */ + this.x = x || 0; + /** + * @property + * @for kity.Point + * @description 表示点的 y 坐标 + * @type {Number} + */ + this.y = y || 0; + }, + offset: function(dx, dy) { + if (arguments.length == 1) { + dy = dx.y; + dx = dx.x; + } + return new Point(this.x + dx, this.y + dy); + }, + valueOf: function() { + return [ this.x, this.y ]; + }, + toString: function() { + return this.valueOf().join(" "); + }, + spof: function() { + return new Point((this.x | 0) + .5, (this.y | 0) + .5); + }, + round: function() { + return new Point(this.x | 0, this.y | 0); + }, + isOrigin: function() { + return this.x === 0 && this.y === 0; + } + }); + /** + * @static + * @method fromPolar() + * @for kity.Point + * @grammar kity.Point.fromPolar(radius, angle, unit) => kity.Point + * @param {Number} radius 极坐标中的半径 + * @param {Number} angle 极坐标中的角度 + * @param {String} unit 角度使用的单位,默认为 'deg' (角度),可以取值为 'rad',表示传入的是弧度值 + */ + Point.fromPolar = function(radius, angle, unit) { + if (unit != "rad") { + // deg to rad + angle = angle / 180 * Math.PI; + } + return new Point(radius * Math.cos(angle), radius * Math.sin(angle)); + }; + Point.parse = function(unknown) { + if (!unknown) return new Point(); + if (unknown instanceof Point) { + return unknown; + } + if (typeof unknown == "string") { + return Point.parse(unknown.split(/\s*[\s,]\s*/)); + } + if ("0" in unknown && "1" in unknown) { + return new Point(unknown[0], unknown[1]); + } + }; + return Point; + } +}; + +//src/graphic/pointcontainer.js +/** + * 点集合容器 + */ +_p[51] = { + value: function(require, exports, module) { + return _p.r(11).createClass("PointContainer", { + base: _p.r(29), + constructor: function() { + this.callBase(); + }, + addPoint: function(point, pos) { + return this.addItem.apply(this, arguments); + }, + prependPoint: function() { + return this.prependItem.apply(this, arguments); + }, + appendPoint: function() { + return this.appendItem.apply(this, arguments); + }, + removePoint: function(pos) { + return this.removeItem.apply(this, arguments); + }, + addPoints: function() { + return this.addItems.apply(this, arguments); + }, + setPoints: function() { + return this.setItems.apply(this, arguments); + }, + getPoint: function() { + return this.getItem.apply(this, arguments); + }, + getPoints: function() { + return this.getItems.apply(this, arguments); + }, + getFirstPoint: function() { + return this.getFirstItem.apply(this, arguments); + }, + getLastPoint: function() { + return this.getLastItem.apply(this, arguments); + } + }); + } +}; + +//src/graphic/poly.js +/* + * 通过点来决定图形的公共父类 + */ +_p[52] = { + value: function(require, exports, module) { + var Utils = _p.r(12); + return _p.r(11).createClass("Poly", { + base: _p.r(46), + mixins: [ _p.r(51) ], + constructor: function(points, closeable) { + this.callBase(); + //是否可闭合 + this.closeable = !!closeable; + this.setPoints(points || []); + this.changeable = true; + this.update(); + }, + //当点集合发生变化时采取的动作 + onContainerChanged: function() { + if (this.changeable) { + this.update(); + } + }, + update: function() { + var drawer = this.getDrawer(), points = this.getPoints(); + drawer.clear(); + if (!points.length) { + return this; + } + drawer.moveTo(points[0]); + for (var i = 1, point, len = points.length; i < len; i++) { + point = points[i]; + drawer.lineTo(point); + } + if (this.closeable && points.length > 2) { + drawer.close(); + } + return this; + } + }); + } +}; + +//src/graphic/polygon.js +_p[53] = { + value: function(require, exports, module) { + return _p.r(11).createClass("Polygon", { + base: _p.r(52), + constructor: function(points) { + this.callBase(points, true); + } + }); + } +}; + +//src/graphic/polyline.js +_p[54] = { + value: function(require, exports, module) { + return _p.r(11).createClass("Polyline", { + base: _p.r(52), + constructor: function(points) { + this.callBase(points); + } + }); + } +}; + +//src/graphic/radialgradient.js +_p[55] = { + value: function(require, exports, module) { + var Gradient = _p.r(35); + return _p.r(11).createClass("RadialGradientBrush", { + base: Gradient, + constructor: function(paper) { + this.callBase("radialGradient", paper); + this.setCenter(.5, .5); + this.setFocal(.5, .5); + this.setRadius(.5); + }, + setCenter: function(cx, cy) { + this.node.setAttribute("cx", cx); + this.node.setAttribute("cy", cy); + return this; + }, + getCenter: function() { + return { + x: +this.node.getAttribute("cx"), + y: +this.node.getAttribute("cy") + }; + }, + setFocal: function(fx, fy) { + this.node.setAttribute("fx", fx); + this.node.setAttribute("fy", fy); + return this; + }, + getFocal: function() { + return { + x: +this.node.getAttribute("fx"), + y: +this.node.getAttribute("fy") + }; + }, + setRadius: function(r) { + this.node.setAttribute("r", r); + return this; + }, + getRadius: function() { + return +this.node.getAttribute("r"); + } + }); + } +}; + +//src/graphic/rect.js +_p[56] = { + value: function(require, exports, module) { + var RectUtils = {}, Utils = _p.r(12), Point = _p.r(50), Box = _p.r(25); + Utils.extend(RectUtils, { + //根据传递进来的width、height和radius属性, + //获取最适合的radius值 + formatRadius: function(width, height, radius) { + var minValue = Math.floor(Math.min(width / 2, height / 2)); + return Math.min(minValue, radius); + } + }); + /** + * @class kity.Rect + * @description 表示一个矩形 + * @base kity.Path + */ + var Rect = _p.r(11).createClass("Rect", { + base: _p.r(46), + /** + * @constructor + * @for kity.Rect + * @grammar new kity.Rect(width, height, x, y, radius) + * @param {Number} width 矩形的初始化宽度 + * @param {Number} height 矩形的初始化高度 + * @param {Number} x 矩形的初始化 x 坐标 + * @param {Number} y 矩形的初始化 y 坐标 + * @param {Number} radius 矩形的初始化圆角大小 + */ + constructor: function(width, height, x, y, radius) { + this.callBase(); + this.x = x || 0; + this.y = y || 0; + this.width = width || 0; + this.height = height || 0; + this.radius = RectUtils.formatRadius(this.width, this.height, radius || 0); + this.update(); + }, + update: function() { + var x = this.x, y = this.y, w = this.width, h = this.height, r = this.radius; + var drawer = this.getDrawer().redraw(); + if (!r) { + // 直角 + drawer.push("M", x, y); + drawer.push("h", w); + drawer.push("v", h); + drawer.push("h", -w); + drawer.push("z"); + } else { + //圆角 + w -= 2 * r; + h -= 2 * r; + drawer.push("M", x + r, y); + drawer.push("h", w); + drawer.push("a", r, r, 0, 0, 1, r, r); + drawer.push("v", h); + drawer.push("a", r, r, 0, 0, 1, -r, r); + drawer.push("h", -w); + drawer.push("a", r, r, 0, 0, 1, -r, -r); + drawer.push("v", -h); + drawer.push("a", r, r, 0, 0, 1, r, -r); + drawer.push("z"); + } + drawer.done(); + return this; + }, + /** + * @method setWidth + * @for kity.Rect + * @grammar setWidth(width) => kity.Rect + * @description 设置矩形的宽度,设置后返回矩形实例本身 + * @param {Number} width 宽度值 + * + * @example + * ```js + * rect.setWidth(300); + * ``` + */ + setWidth: function(width) { + this.width = width; + return this.update(); + }, + /** + * @method setHeight + * @for kity.Rect + * @grammar setHeight(height) => kity.Rect + * @description 设置矩形的高度,设置后返回矩形实例本身 + * @param {Number} height 高度值 + * + * @example + * ```js + * rect.setHeight(200); + * ``` + */ + setHeight: function(height) { + this.height = height; + return this.update(); + }, + /** + * @method setSize + * @for kity.Rect + * @grammar setSize(width, height) => kity.Rect + * @description 设置矩形的尺寸,设置后返回矩形本身 + * @param {Number} width 矩形的宽度值 + * @param {Number} height 矩形的高度值 + * + * @example + * ```js + * rect.setSize(300, 200); + * ``` + */ + setSize: function(width, height) { + this.width = width; + this.height = height; + return this.update(); + }, + /** + * @method setBox + * @for kity.Rect + * @grammar setBox(box) => kity.Rect + * @description 使用一个 kity 的盒子数据, + * @param {kity.Box} box 盒子数据 + */ + setBox: function(box) { + this.x = box.x; + this.y = box.y; + this.width = box.width; + this.height = box.height; + return this.update(); + }, + getBox: function() { + return new Box(this.x, this.y, this.width, this.height); + }, + getRadius: function() { + return this.radius; + }, + setRadius: function(radius) { + this.radius = RectUtils.formatRadius(this.width, this.height, radius || 0); + return this.update(); + }, + getPosition: function() { + return new Point(this.x, this.y); + }, + setPosition: function(x, y) { + if (arguments.length == 1) { + var p = Point.parse(arguments[0]); + y = p.y; + x = p.x; + } + this.x = x; + this.y = y; + return this.update(); + }, + getWidth: function() { + return this.width; + }, + getHeight: function() { + return this.height; + }, + getPositionX: function() { + return this.x; + }, + getPositionY: function() { + return this.y; + }, + setPositionX: function(x) { + this.x = x; + return this.update(); + }, + setPositionY: function(y) { + this.y = y; + return this.update(); + } + }); + return Rect; + } +}; + +//src/graphic/regularpolygon.js +_p[57] = { + value: function(require, exports, module) { + var Point = _p.r(50); + return _p.r(11).createClass("RegularPolygon", { + base: _p.r(46), + constructor: function(side, radius, x, y) { + this.callBase(); + this.radius = radius || 0; + this.side = Math.max(side || 3, 3); + if (arguments.length > 2) { + if (arguments.length == 3) { + y = x.y; + x = x.x; + } + } + this.center = new Point(x, y); + this.draw(); + }, + getSide: function() { + return this.side; + }, + setSide: function(side) { + this.side = side; + return this.draw(); + }, + getRadius: function() { + return this.radius; + }, + setRadius: function(radius) { + this.radius = radius; + return this.draw(); + }, + draw: function() { + var radius = this.radius, side = this.side, step = Math.PI * 2 / side, drawer = this.getDrawer(), i; + drawer.clear(); + drawer.moveTo(Point.fromPolar(radius, Math.PI / 2, "rad").offset(this.center)); + for (i = 0; i <= side; i++) { + drawer.lineTo(Point.fromPolar(radius, step * i + Math.PI / 2, "rad").offset(this.center)); + } + drawer.close(); + return this; + } + }); + } +}; + +//src/graphic/resource.js +/** + * @fileOverview + * + * 资源节点基类 + * + * @author: techird + * @copyright: Baidu FEX, 2014 + */ +_p[58] = { + value: function(require, exports, module) { + var svg = _p.r(67); + return _p.r(11).createClass("Resource", { + constructor: function(nodeType, paper) { + this.callBase(); + this.node = svg.createNode(nodeType); + if (paper) { + paper.addResource(this); + } + }, + toString: function() { + return "url(#" + this.node.id + ")"; + } + }); + } +}; + +//src/graphic/ring.js +_p[59] = { + value: function(require, exports, module) { + return _p.r(11).createClass({ + base: _p.r(68), + constructor: function(innerRadius, outerRadius) { + this.callBase([ innerRadius, outerRadius ], 360, 0); + }, + getInnerRadius: function() { + return this.getSectionArray()[0]; + }, + getOuterRadius: function() { + return this.getSectionArray()[1]; + }, + setInnerRadius: function(value) { + this.setSectionArray([ value, this.getOuterRadius() ]); + }, + setOuterRadius: function(value) { + this.setSectionArray([ this.getInnerRadius(), value ]); + } + }); + } +}; + +//src/graphic/shape.js +_p[60] = { + value: function(require, exports, module) { + var svg = _p.r(67); + var utils = _p.r(12); + var EventHandler = _p.r(33); + var Styled = _p.r(66); + var Data = _p.r(31); + var Matrix = _p.r(43); + var Pen = _p.r(48); + var slice = Array.prototype.slice; + var Box = _p.r(25); + var Shape = _p.r(11).createClass("Shape", { + mixins: [ EventHandler, Styled, Data ], + constructor: function Shape(tagName) { + this.node = svg.createNode(tagName); + this.node.shape = this; + this.transform = { + translate: null, + rotate: null, + scale: null, + matrix: null + }; + this.callMixin(); + }, + getId: function() { + return this.node.id; + }, + setId: function(id) { + this.node.id = id; + return this; + }, + getNode: function() { + return this.node; + }, + getBoundaryBox: function() { + var box; + try { + box = this.node.getBBox(); + } catch (e) { + box = { + x: this.node.clientLeft, + y: this.node.clientTop, + width: this.node.clientWidth, + height: this.node.clientHeight + }; + } + return new Box(box); + }, + getRenderBox: function(refer) { + var box = this.getBoundaryBox(); + var matrix = this.getTransform(refer); + return matrix.transformBox(box); + }, + getWidth: function() { + return this.getRenderBox().width; + }, + getHeight: function() { + return this.getRenderBox().height; + }, + getSize: function() { + var box = this.getRenderBox(); + delete box.x; + delete box.y; + return box; + }, + setOpacity: function(value) { + this.node.setAttribute("opacity", value); + return this; + }, + getOpacity: function() { + var opacity = this.node.getAttribute("opacity"); + return opacity ? +opacity : 1; + }, + setVisible: function(value) { + if (value) { + this.node.removeAttribute("display"); + } else { + this.node.setAttribute("display", "none"); + } + return this; + }, + getVisible: function() { + this.node.getAttribute("display"); + }, + hasAncestor: function(node) { + var parent = this.container; + while (parent) { + if (parent === node) { + return true; + } + parent = parent.container; + } + return false; + }, + getTransform: function(refer) { + return Matrix.getCTM(this, refer); + }, + clearTransform: function() { + this.node.removeAttribute("transform"); + this.transform = { + translate: null, + rotate: null, + scale: null, + matrix: null + }; + this.trigger("shapeupdate", { + type: "transform" + }); + return this; + }, + _applyTransform: function() { + var t = this.transform, result = []; + if (t.translate) { + result.push([ "translate(", t.translate, ")" ]); + } + if (t.rotate) { + result.push([ "rotate(", t.rotate, ")" ]); + } + if (t.scale) { + result.push([ "scale(", t.scale, ")" ]); + } + if (t.matrix) { + result.push([ "matrix(", t.matrix, ")" ]); + } + this.node.setAttribute("transform", utils.flatten(result).join(" ")); + return this; + }, + setMatrix: function(m) { + this.transform.matrix = m; + return this._applyTransform(); + }, + setTranslate: function(t) { + this.transform.translate = t !== null && slice.call(arguments) || null; + return this._applyTransform(); + }, + setRotate: function(r) { + this.transform.rotate = r !== null && slice.call(arguments) || null; + return this._applyTransform(); + }, + setScale: function(s) { + this.transform.scale = s !== null && slice.call(arguments) || null; + return this._applyTransform(); + }, + translate: function(dx, dy) { + var m = this.transform.matrix || new Matrix(); + if (dy === undefined) { + dy = 0; + } + this.transform.matrix = m.translate(dx, dy); + return this._applyTransform(); + }, + rotate: function(deg) { + var m = this.transform.matrix || new Matrix(); + this.transform.matrix = m.rotate(deg); + return this._applyTransform(); + }, + scale: function(sx, sy) { + var m = this.transform.matrix || new Matrix(); + if (sy === undefined) { + sy = sx; + } + this.transform.matrix = m.scale(sx, sy); + return this._applyTransform(); + }, + skew: function(sx, sy) { + var m = this.transform.matrix || new Matrix(); + if (sy === undefined) { + sy = sx; + } + this.transform.matrix = m.skew(sx, sy); + return this._applyTransform(); + }, + stroke: function(pen, width) { + if (pen && pen.stroke) { + pen.stroke(this); + } else if (pen) { + // 字符串或重写了 toString 的对象 + this.node.setAttribute("stroke", pen.toString()); + if (width) { + this.node.setAttribute("stroke-width", width); + } + } else if (pen === null) { + this.node.removeAttribute("stroe"); + } + return this; + }, + fill: function(brush) { + // 字符串或重写了 toString 的对象 + if (brush) { + this.node.setAttribute("fill", brush.toString()); + } + if (brush === null) { + this.node.removeAttribute("fill"); + } + return this; + }, + setAttr: function(a, v) { + var me = this; + if (utils.isObject(a)) { + utils.each(a, function(val, key) { + me.setAttr(key, val); + }); + } + if (v === undefined || v === null || v === "") { + this.node.removeAttribute(a); + } else { + this.node.setAttribute(a, v); + } + return this; + }, + getAttr: function(a) { + return this.node.getAttribute(a); + } + }); + return Shape; + } +}; + +//src/graphic/shapecontainer.js +_p[61] = { + value: function(require, exports, module) { + var Container = _p.r(29); + var utils = _p.r(12); + var ShapeContainer = _p.r(11).createClass("ShapeContainer", { + base: Container, + isShapeContainer: true, + /* private */ + handleAdd: function(shape, index) { + var parent = this.getShapeNode(); + parent.insertBefore(shape.node, parent.childNodes[index] || null); + shape.trigger("add", { + container: this + }); + if (shape.notifyTreeModification) { + shape.notifyTreeModification("treeadd", this); + } + }, + /* private */ + handleRemove: function(shape, index) { + var parent = this.getShapeNode(); + parent.removeChild(shape.node); + shape.trigger("remove", { + container: this + }); + if (shape.notifyTreeModification) { + shape.notifyTreeModification("treeremove", this); + } + }, + /* private */ + notifyTreeModification: function(type, container) { + this.eachItem(function(index, shape) { + if (shape.notifyTreeModification) { + shape.notifyTreeModification(type, container); + } + shape.trigger(type, { + container: container + }); + }); + }, + /* public */ + getShape: function(index) { + return this.getItem(index); + }, + /* public */ + addShape: function(shape, index) { + return this.addItem(shape, index); + }, + put: function(shape) { + this.addShape(shape); + return shape; + }, + appendShape: function(shape) { + return this.addShape(shape); + }, + prependShape: function(shape) { + return this.addShape(shape, 0); + }, + replaceShape: function(replacer, origin) { + var index = this.indexOf(origin); + if (index === -1) { + return; + } + this.removeShape(index); + this.addShape(replacer, index); + return this; + }, + addShapeBefore: function(shape, refer) { + var index = this.indexOf(refer); + return this.addShape(shape, index); + }, + addShapeAfter: function(shape, refer) { + var index = this.indexOf(refer); + return this.addShape(shape, index === -1 ? undefined : index + 1); + }, + /* public */ + addShapes: function(shapes) { + return this.addItems(shapes); + }, + /* public */ + removeShape: function(index) { + return this.removeItem(index); + }, + getShapes: function() { + return this.getItems(); + }, + getShapesByType: function(name) { + var shapes = []; + function getShapes(shape) { + if (name.toLowerCase() == shape.getType().toLowerCase()) { + shapes.push(shape); + } + if (shape.isShapeContainer) { + utils.each(shape.getShapes(), function(n) { + getShapes(n); + }); + } + } + getShapes(this); + return shapes; + }, + /* public */ + getShapeById: function(id) { + return this.getShapeNode().getElementById(id).shape; + }, + arrangeShape: function(shape, index) { + return this.removeShape(shape).addShape(shape, index); + }, + /* protected */ + getShapeNode: function() { + return this.shapeNode || this.node; + } + }); + var Shape = _p.r(60); + _p.r(11).extendClass(Shape, { + bringTo: function(index) { + this.container.arrangeShape(this, index); + return this; + }, + bringFront: function() { + return this.bringTo(this.container.indexOf(this) + 1); + }, + bringBack: function() { + return this.bringTo(this.container.indexOf(this) - 1); + }, + bringTop: function() { + this.container.removeShape(this).addShape(this); + return this; + }, + bringRear: function() { + return this.bringTo(0); + }, + bringRefer: function(referShape, offset) { + if (referShape.container) { + if (this.remove) { + this.remove(); + } + referShape.container.addShape(this, referShape.container.indexOf(referShape) + (offset || 0)); + } + return this; + }, + bringAbove: function(referShape) { + return this.bringRefer(referShape); + }, + bringBelow: function(referShape) { + return this.bringRefer(referShape, 1); + }, + replaceBy: function(newShape) { + if (this.container) { + newShape.bringAbove(this); + this.remove(); + } + return this; + } + }); + return ShapeContainer; + } +}; + +//src/graphic/shapeevent.js +/* + * 图形事件包装类 + * */ +_p[62] = { + value: function(require, exprots, module) { + var Matrix = _p.r(43), Utils = _p.r(12), Point = _p.r(50); + return _p.r(11).createClass("ShapeEvent", { + constructor: function(event) { + var target = null; + // dom 事件封装对象 + if (!Utils.isObject(event.target)) { + this.type = event.type; + target = event.target; + // use标签有特殊属性, 需要区别对待 + if (target.correspondingUseElement) { + target = target.correspondingUseElement; + } + this.originEvent = event; + this.targetShape = target.shape || target.paper || event.currentTarget && (event.currentTarget.shape || event.currentTarget.paper); + if (event._kityParam) { + Utils.extend(this, event._kityParam); + } + } else { + Utils.extend(this, event); + } + }, + preventDefault: function() { + var evt = this.originEvent; + if (!evt) { + return true; + } + if (evt.preventDefault) { + evt.preventDefault(); + return evt.cancelable; + } else { + evt.returnValue = false; + return true; + } + }, + //当前鼠标事件在用户坐标系中点击的点的坐标位置 + getPosition: function(refer, touchIndex) { + if (!this.originEvent) { + return null; + } + var eventClient = this.originEvent.touches ? this.originEvent.touches[touchIndex || 0] : this.originEvent; + var target = this.targetShape; + var targetNode = target.shapeNode || target.node; + var pScreen = new Point(eventClient && eventClient.clientX || 0, eventClient && eventClient.clientY || 0); + var pTarget = Matrix.transformPoint(pScreen, targetNode.getScreenCTM().inverse()); + var pRefer = Matrix.getCTM(target, refer || "view").transformPoint(pTarget); + return pRefer; + }, + stopPropagation: function() { + var evt = this.originEvent; + if (!evt) { + return true; + } + if (evt.stopPropagation) { + evt.stopPropagation(); + } else { + evt.cancelBubble = false; + } + } + }); + } +}; + +//src/graphic/shapepoint.js +/* + * 图形上的点抽象 + */ +_p[63] = { + value: function(require, exports, module) { + return _p.r(11).createClass("ShapePoint", { + base: _p.r(50), + constructor: function(px, py) { + this.callBase(px, py); + }, + setX: function(x) { + return this.setPoint(x, this.y); + }, + setY: function(y) { + return this.setPoint(this.x, y); + }, + setPoint: function(x, y) { + this.x = x; + this.y = y; + this.update(); + return this; + }, + getPoint: function() { + return this; + }, + update: function() { + if (this.container && this.container.update) { + this.container.update(); + } + return this; + } + }); + } +}; + +//src/graphic/standardcolor.js +/** + * 标准颜色映射 + */ +_p[64] = { + value: { + COLOR_STANDARD: { + aliceblue: "#f0f8ff", + antiquewhite: "#faebd7", + aqua: "#00ffff", + aquamarine: "#7fffd4", + azure: "#f0ffff", + beige: "#f5f5dc", + bisque: "#ffe4c4", + black: "#000000", + blanchedalmond: "#ffebcd", + blue: "#0000ff", + blueviolet: "#8a2be2", + brown: "#a52a2a", + burlywood: "#deb887", + cadetblue: "#5f9ea0", + chartreuse: "#7fff00", + chocolate: "#d2691e", + coral: "#ff7f50", + cornflowerblue: "#6495ed", + cornsilk: "#fff8dc", + crimson: "#dc143c", + cyan: "#00ffff", + darkblue: "#00008b", + darkcyan: "#008b8b", + darkgoldenrod: "#b8860b", + darkgray: "#a9a9a9", + darkgreen: "#006400", + darkgrey: "#a9a9a9", + darkkhaki: "#bdb76b", + darkmagenta: "#8b008b", + darkolivegreen: "#556b2f", + darkorange: "#ff8c00", + darkorchid: "#9932cc", + darkred: "#8b0000", + darksalmon: "#e9967a", + darkseagreen: "#8fbc8f", + darkslateblue: "#483d8b", + darkslategray: "#2f4f4f", + darkslategrey: "#2f4f4f", + darkturquoise: "#00ced1", + darkviolet: "#9400d3", + deeppink: "#ff1493", + deepskyblue: "#00bfff", + dimgray: "#696969", + dimgrey: "#696969", + dodgerblue: "#1e90ff", + firebrick: "#b22222", + floralwhite: "#fffaf0", + forestgreen: "#228b22", + fuchsia: "#ff00ff", + gainsboro: "#dcdcdc", + ghostwhite: "#f8f8ff", + gold: "#ffd700", + goldenrod: "#daa520", + gray: "#808080", + green: "#008000", + greenyellow: "#adff2f", + grey: "#808080", + honeydew: "#f0fff0", + hotpink: "#ff69b4", + indianred: "#cd5c5c", + indigo: "#4b0082", + ivory: "#fffff0", + khaki: "#f0e68c", + lavender: "#e6e6fa", + lavenderblush: "#fff0f5", + lawngreen: "#7cfc00", + lemonchiffon: "#fffacd", + lightblue: "#add8e6", + lightcoral: "#f08080", + lightcyan: "#e0ffff", + lightgoldenrodyellow: "#fafad2", + lightgray: "#d3d3d3", + lightgreen: "#90ee90", + lightgrey: "#d3d3d3", + lightpink: "#ffb6c1", + lightsalmon: "#ffa07a", + lightseagreen: "#20b2aa", + lightskyblue: "#87cefa", + lightslategray: "#778899", + lightslategrey: "#778899", + lightsteelblue: "#b0c4de", + lightyellow: "#ffffe0", + lime: "#00ff00", + limegreen: "#32cd32", + linen: "#faf0e6", + magenta: "#ff00ff", + maroon: "#800000", + mediumaquamarine: "#66cdaa", + mediumblue: "#0000cd", + mediumorchid: "#ba55d3", + mediumpurple: "#9370db", + mediumseagreen: "#3cb371", + mediumslateblue: "#7b68ee", + mediumspringgreen: "#00fa9a", + mediumturquoise: "#48d1cc", + mediumvioletred: "#c71585", + midnightblue: "#191970", + mintcream: "#f5fffa", + mistyrose: "#ffe4e1", + moccasin: "#ffe4b5", + navajowhite: "#ffdead", + navy: "#000080", + oldlace: "#fdf5e6", + olive: "#808000", + olivedrab: "#6b8e23", + orange: "#ffa500", + orangered: "#ff4500", + orchid: "#da70d6", + palegoldenrod: "#eee8aa", + palegreen: "#98fb98", + paleturquoise: "#afeeee", + palevioletred: "#db7093", + papayawhip: "#ffefd5", + peachpuff: "#ffdab9", + peru: "#cd853f", + pink: "#ffc0cb", + plum: "#dda0dd", + powderblue: "#b0e0e6", + purple: "#800080", + red: "#ff0000", + rosybrown: "#bc8f8f", + royalblue: "#4169e1", + saddlebrown: "#8b4513", + salmon: "#fa8072", + sandybrown: "#f4a460", + seagreen: "#2e8b57", + seashell: "#fff5ee", + sienna: "#a0522d", + silver: "#c0c0c0", + skyblue: "#87ceeb", + slateblue: "#6a5acd", + slategray: "#708090", + slategrey: "#708090", + snow: "#fffafa", + springgreen: "#00ff7f", + steelblue: "#4682b4", + tan: "#d2b48c", + teal: "#008080", + thistle: "#d8bfd8", + tomato: "#ff6347", + turquoise: "#40e0d0", + violet: "#ee82ee", + wheat: "#f5deb3", + white: "#ffffff", + whitesmoke: "#f5f5f5", + yellow: "#ffff00" + }, + //标准扩展 + EXTEND_STANDARD: {} + } +}; + +//src/graphic/star.js +_p[65] = { + value: function(require, exports, module) { + /** + * @see http://www.jdawiseman.com/papers/easymath/surds_star_inner_radius.html + */ + var defaultRatioForStar = { + "3": .2, + // yy + "5": .38196601125, + "6": .57735026919, + "8": .541196100146, + "10": .726542528005, + "12": .707106781187 + }; + var Point = _p.r(50); + return _p.r(11).createClass("Star", { + base: _p.r(46), + constructor: function(vertex, radius, shrink, offset, angleOffset) { + this.callBase(); + this.vertex = vertex || 3; + this.radius = radius || 0; + this.shrink = shrink; + this.offset = offset || new Point(0, 0); + this.angleOffset = angleOffset || 0; + this.draw(); + }, + getVertex: function() { + return this.vertex; + }, + setVertex: function(value) { + this.vertex = value; + return this.draw(); + }, + getRadius: function() { + return this.radius; + }, + setRadius: function(value) { + this.radius = value; + return this.draw(); + }, + getShrink: function() { + return this.shrink; + }, + setShrink: function(value) { + this.shrink = value; + return this.draw(); + }, + getOffset: function() { + return this.offset; + }, + setOffset: function(value) { + this.offset = value; + return this.draw(); + }, + getAngleOffset: function() { + return this.angleOffset; + }, + setAngleOffset: function(value) { + this.angleOffset = value; + return this.draw(); + }, + draw: function() { + var innerRadius = this.radius, outerRadius = this.radius * (this.shrink || defaultRatioForStar[this.vertex] || .5), vertex = this.vertex, offset = this.offset, angleStart = 90, angleStep = 180 / vertex, angleOffset = this.angleOffset, drawer = this.getDrawer(), i, angle; + drawer.clear(); + drawer.moveTo(Point.fromPolar(outerRadius, angleStart)); + for (i = 1; i <= vertex * 2; i++) { + angle = angleStart + angleStep * i; + // 绘制内点 + if (i % 2) { + drawer.lineTo(Point.fromPolar(innerRadius, angle + angleOffset).offset(offset)); + } else { + drawer.lineTo(Point.fromPolar(outerRadius, angle)); + } + } + drawer.close(); + } + }); + } +}; + +//src/graphic/styled.js +_p[66] = { + value: function(require, exports, module) { + // polyfill for ie + var ClassList = _p.r(11).createClass("ClassList", { + constructor: function(node) { + this._node = node; + this._list = node.className.toString().split(" "); + }, + _update: function() { + this._node.className = this._list.join(" "); + }, + add: function(name) { + this._list.push(name); + this._update(); + }, + remove: function(name) { + var index = this._list.indexOf(name); + if (~index) { + this._list.splice(index, 1); + } + this._update(); + }, + contains: function(name) { + return !!~this._list.indexOf(name); + } + }); + function getClassList(node) { + if (!node.classList) { + node.classList = new ClassList(node); + } + return node.classList; + } + return _p.r(11).createClass("Styled", { + addClass: function(name) { + getClassList(this.node).add(name); + return this; + }, + removeClass: function(name) { + getClassList(this.node).remove(name); + return this; + }, + hasClass: function(name) { + return getClassList(this.node).contains(name); + }, + setStyle: function(styles) { + if (arguments.length == 2) { + this.node.style[arguments[0]] = arguments[1]; + return this; + } + for (var name in styles) { + if (styles.hasOwnProperty(name)) { + this.node.style[name] = styles[name]; + } + } + return this; + } + }); + } +}; + +//src/graphic/svg.js +_p[67] = { + value: function(require, exports, module) { + var doc = document; + var id = 0; + var svg = { + createNode: function(name) { + var node = doc.createElementNS(svg.ns, name); + node.id = "kity_" + name + "_" + id++; + return node; + }, + defaults: { + stroke: "none", + fill: "none" + }, + xlink: "http://www.w3.org/1999/xlink", + ns: "http://www.w3.org/2000/svg" + }; + return svg; + } +}; + +//src/graphic/sweep.js +_p[68] = { + value: function(require, exports, module) { + var Point = _p.r(50); + return _p.r(11).createClass("Sweep", { + base: _p.r(46), + constructor: function(sectionArray, angle, angleOffset) { + this.callBase(); + this.sectionArray = sectionArray || []; + this.angle = angle || 0; + this.angleOffset = angleOffset || 0; + this.draw(); + }, + getSectionArray: function() { + return this.sectionArray; + }, + setSectionArray: function(value) { + this.sectionArray = value; + return this.draw(); + }, + getAngle: function() { + return this.angle; + }, + setAngle: function(value) { + this.angle = value; + return this.draw(); + }, + getAngleOffset: function() { + return this.angleOffset; + }, + setAngleOffset: function(value) { + this.angleOffset = value; + return this.draw(); + }, + draw: function() { + var sectionArray = this.sectionArray, i; + for (i = 0; i < sectionArray.length; i += 2) { + this.drawSection(sectionArray[i], sectionArray[i + 1]); + } + return this; + }, + drawSection: function(from, to) { + var angleLength = this.angle && (this.angle % 360 ? this.angle % 360 : 360), angleStart = this.angleOffset, angleHalf = angleStart + angleLength / 2, angleEnd = angleStart + angleLength, sweepFlag = angleLength < 0 ? 0 : 1, drawer = this.getDrawer(); + drawer.redraw(); + if (angleLength === 0) { + drawer.done(); + return; + } + drawer.moveTo(Point.fromPolar(from, angleStart)); + drawer.lineTo(Point.fromPolar(to, angleStart)); + if (to) { + drawer.carcTo(to, 0, sweepFlag, Point.fromPolar(to, angleHalf)); + drawer.carcTo(to, 0, sweepFlag, Point.fromPolar(to, angleEnd)); + } + drawer.lineTo(Point.fromPolar(from, angleEnd)); + if (from) { + drawer.carcTo(from, 0, sweepFlag, Point.fromPolar(from, angleHalf)); + drawer.carcTo(from, 0, sweepFlag, Point.fromPolar(from, angleStart)); + } + drawer.close(); + drawer.done(); + } + }); + } +}; + +//src/graphic/text.js +_p[69] = { + value: function(require, exports, module) { + var TextContent = _p.r(70); + var ShapeContainer = _p.r(61); + var svg = _p.r(67); + var utils = _p.r(12); + var offsetHash = {}; + function getTextBoundOffset(text) { + var font = text._cachedFontHash; + if (offsetHash[font]) { + return offsetHash[font]; + } + var textContent = text.getContent(); + text.setContent("百度Fex"); + var bbox = text.getBoundaryBox(), y = text.getY(); + if (!bbox.height) return { + top: 0, + bottom: 0, + middle: 0 + }; + var topOffset = y - bbox.y + +text.node.getAttribute("dy"), bottomOffset = topOffset - bbox.height; + text.setContent(textContent); + return offsetHash[font] = { + top: topOffset, + bottom: bottomOffset, + middle: (topOffset + bottomOffset) / 2 + }; + } + return _p.r(11).createClass("Text", { + base: TextContent, + mixins: [ ShapeContainer ], + constructor: function(content) { + this.callBase("text"); + if (content !== undefined) { + this.setContent(content); + } + this._buildFontHash(); + }, + fixPosition: function() { + if (!this.__fixedPosition) { + this.setVerticalAlign(this.getVerticalAlign()); + } + }, + _buildFontHash: function() { + var style = window.getComputedStyle(this.node); + this._cachedFontHash = [ style.fontFamily, style.fontSize, style.fontStretch, style.fontStyle, style.fontVariant, style.fontWeight ].join("-"); + }, + _fontChanged: function(font) { + var last = this._lastFont; + var current = utils.extend({}, last, font); + if (!last) { + this._lastFont = font; + return true; + } + var changed = last.family != current.family || last.size != current.size || last.style != current.style || last.weight != current.weight; + this._lastFont = current; + return changed; + }, + setX: function(x) { + this.node.setAttribute("x", x); + return this; + }, + setPosition: function(x, y) { + return this.setX(x).setY(y); + }, + setY: function(y) { + this.node.setAttribute("y", y); + return this; + }, + getX: function() { + return +this.node.getAttribute("x") || 0; + }, + getY: function() { + return +this.node.getAttribute("y") || 0; + }, + setFont: function(font) { + this.callBase(font); + if (this._fontChanged(font)) { + this._buildFontHash(); + this.setVerticalAlign(this.getVerticalAlign()); + } + return this; + }, + setTextAnchor: function(anchor) { + this.node.setAttribute("text-anchor", anchor); + return this; + }, + getTextAnchor: function() { + return this.node.getAttribute("text-anchor") || "start"; + }, + // top/bottom/middle/baseline + setVerticalAlign: function(align) { + this.whenPaperReady(function() { + var dy; + switch (align) { + case "top": + dy = getTextBoundOffset(this).top; + break; + + case "bottom": + dy = getTextBoundOffset(this).bottom; + break; + + case "middle": + dy = getTextBoundOffset(this).middle; + break; + + default: + dy = 0; + } + if (dy) this.__fixedPosition = true; + this.node.setAttribute("dy", dy); + }); + this.verticalAlign = align; + return this; + }, + getVerticalAlign: function() { + return this.verticalAlign || "baseline"; + }, + setStartOffset: function(offset) { + // only for text path + if (this.shapeNode != this.node) { + this.shapeNode.setAttribute("startOffset", offset * 100 + "%"); + } + }, + addSpan: function(span) { + this.addShape(span); + return this; + }, + setPath: function(path) { + var textpath = this.shapeNode; + if (this.shapeNode == this.node) { + // 当前还不是 textpath + textpath = this.shapeNode = svg.createNode("textPath"); + while (this.node.firstChild) { + this.shapeNode.appendChild(this.node.firstChild); + } + this.node.appendChild(textpath); + } + textpath.setAttributeNS(svg.xlink, "xlink:href", "#" + path.node.id); + this.setTextAnchor(this.getTextAnchor()); + return this; + } + }); + } +}; + +//src/graphic/textcontent.js +_p[70] = { + value: function(require, exports, module) { + var Shape = _p.r(60); + return _p.r(11).createClass("TextContent", { + base: Shape, + constructor: function(nodeType) { + // call shape constructor + this.callBase(nodeType); + this.shapeNode = this.shapeNode || this.node; + this.shapeNode.setAttribute("text-rendering", "geometricPrecision"); + }, + clearContent: function() { + while (this.shapeNode.firstChild) { + this.shapeNode.removeChild(this.shapeNode.firstChild); + } + return this; + }, + setContent: function(content) { + this.shapeNode.textContent = content; + return this; + }, + getContent: function() { + return this.shapeNode.textContent; + }, + appendContent: function(content) { + this.shapeNode.textContent += content; + return this; + }, + setSize: function(value) { + return this.setFontSize(value); + }, + setFontSize: function(value) { + return this.setFont({ + size: value + }); + }, + setFontFamily: function(value) { + return this.setFont({ + family: value + }); + }, + setFontBold: function(bold) { + return this.setFont({ + weight: bold ? "bold" : "normal" + }); + }, + setFontItalic: function(italic) { + return this.setFont({ + style: italic ? "italic" : "normal" + }); + }, + setFont: function(font) { + var node = this.node; + [ "family", "size", "weight", "style" ].forEach(function(section) { + if (font[section] === null) { + node.removeAttribute("font-" + section); + } else if (font[section]) { + node.setAttribute("font-" + section, font[section]); + } + }); + return this; + }, + getExtentOfChar: function(index) { + return this.node.getExtentOfChar(index); + }, + getRotationOfChar: function(index) { + return this.node.getRotationOfChar(index); + }, + getCharNumAtPosition: function(x, y) { + return this.node.getCharNumAtPosition(this.node.viewportElement.createSVGPoint(x, y)); + } + }); + } +}; + +//src/graphic/textspan.js +_p[71] = { + value: function(require, exports, module) { + var TextContent = _p.r(70); + var Styled = _p.r(66); + return _p.r(11).createClass("TextSpan", { + base: TextContent, + mixins: [ Styled ], + constructor: function(content) { + this.callBase("tspan"); + this.setContent(content); + } + }); + } +}; + +//src/graphic/use.js +/* + * USE 功能 + */ +_p[72] = { + value: function(require, exports, module) { + var Svg = _p.r(67); + var Class = _p.r(11); + var Use = Class.createClass("Use", { + base: _p.r(60), + constructor: function(shape) { + this.callBase("use"); + this.ref(shape); + }, + ref: function(shape) { + if (!shape) { + this.node.removeAttributeNS(Svg.xlink, "xlink:href"); + return this; + } + var shapeId = shape.getId(); + if (shapeId) { + this.node.setAttributeNS(Svg.xlink, "xlink:href", "#" + shapeId); + } + // by techird + // 作为 Use 的图形,如果没有 fill 和 stroke,移除默认的 'none' 值,用于 Use 覆盖 + if (shape.node.getAttribute("fill") === "none") { + shape.node.removeAttribute("fill"); + } + if (shape.node.getAttribute("stroke") === "none") { + shape.node.removeAttribute("stroke"); + } + return this; + } + }); + var Shape = _p.r(60); + Class.extendClass(Shape, { + // fast-use + use: function() { + return new Use(this); + } + }); + return Use; + } +}; + +//src/graphic/vector.js +_p[73] = { + value: function(require, exports, module) { + var Point = _p.r(50); + var Matrix = _p.r(43); + var Vector = _p.r(11).createClass("Vector", { + base: Point, + constructor: function(x, y) { + this.callBase(x, y); + }, + square: function() { + return this.x * this.x + this.y * this.y; + }, + length: function() { + return Math.sqrt(this.square()); + }, + add: function(q) { + return new Vector(this.x + q.x, this.y + q.y); + }, + minus: function(q) { + return new Vector(this.x - q.x, this.y - q.y); + }, + dot: function(q) { + return this.x * q.x + this.y * q.y; + }, + project: function(q) { + return q.multipy(this.dot(q) / q.square()); + }, + normalize: function(length) { + if (length === undefined) { + length = 1; + } + return this.multipy(length / this.length()); + }, + multipy: function(scale) { + return new Vector(this.x * scale, this.y * scale); + }, + rotate: function(angle, unit) { + if (unit == "rad") { + angle = angle / Math.PI * 180; + } + var p = new Matrix().rotate(angle).transformPoint(this); + return new Vector(p.x, p.y); + }, + vertical: function() { + return new Vector(this.y, -this.x); + }, + reverse: function() { + return this.multipy(-1); + }, + getAngle: function() { + var length = this.length(); + if (length === 0) return 0; + var rad = Math.acos(this.x / length); + var sign = this.y > 0 ? 1 : -1; + return sign * 180 * rad / Math.PI; + } + }); + Vector.fromPoints = function(p1, p2) { + return new Vector(p2.x - p1.x, p2.y - p1.y); + }; + Vector.fromPolar = function() { + var p = Point.fromPolar.apply(Point, arguments); + return new Vector(p.x, p.y); + }; + _p.r(11).extendClass(Point, { + asVector: function() { + return new Vector(this.x, this.y); + } + }); + return Vector; + } +}; + +//src/graphic/view.js +_p[74] = { + value: function(require, exports, module) { + var ShapeContainer = _p.r(61); + var ViewBox = _p.r(75); + return _p.r(11).createClass("View", { + mixins: [ ShapeContainer, ViewBox ], + base: _p.r(74), + constructor: function() { + this.callBase("view"); + } + }); + } +}; + +//src/graphic/viewbox.js +_p[75] = { + value: function(require, exports, module) { + return _p.r(11).createClass("ViewBox", { + getViewBox: function() { + var attr = this.node.getAttribute("viewBox"); + if (attr === null) { + // firefox: + // 1. viewBox 没有设置过的时候获得的是 null + // 2. svg 标签没有指定绝对大小的时候 clientWidth 和 clientHeigt 为 0,需要在父容器上查找 + // TODO: 第 2 条取得的不准确(假如有 padding 之类的) + return { + x: 0, + y: 0, + width: this.node.clientWidth || this.node.parentNode.clientWidth, + height: this.node.clientHeight || this.node.parentNode.clientHeight + }; + } else { + attr = attr.split(" "); + return { + x: +attr[0], + y: +attr[1], + width: +attr[2], + height: +attr[3] + }; + } + }, + setViewBox: function(x, y, width, height) { + this.node.setAttribute("viewBox", [ x, y, width, height ].join(" ")); + return this; + } + }); + } +}; + +//src/kity.js +/** + * @fileOverview kity 暴露的方法或对象 + */ +_p[76] = { + value: function(require, exports, module) { + var kity = {}, utils = _p.r(12); + kity.version = "2.0.0"; + utils.extend(kity, { + // core + createClass: _p.r(11).createClass, + extendClass: _p.r(11).extendClass, + Utils: utils, + Browser: _p.r(10), + // shape + Box: _p.r(25), + Bezier: _p.r(23), + BezierPoint: _p.r(24), + Circle: _p.r(26), + Clip: _p.r(27), + Color: _p.r(28), + Container: _p.r(29), + Curve: _p.r(30), + Ellipse: _p.r(32), + Group: _p.r(36), + Gradient: _p.r(35), + HyperLink: _p.r(37), + Image: _p.r(38), + Line: _p.r(39), + LinearGradient: _p.r(40), + Mask: _p.r(42), + Matrix: _p.r(43), + Marker: _p.r(41), + Palette: _p.r(44), + Paper: _p.r(45), + Path: _p.r(46), + Pattern: _p.r(47), + Pen: _p.r(48), + Point: _p.r(50), + PointContainer: _p.r(51), + Polygon: _p.r(53), + Polyline: _p.r(54), + Pie: _p.r(49), + RadialGradient: _p.r(55), + Resource: _p.r(58), + Rect: _p.r(56), + RegularPolygon: _p.r(57), + Ring: _p.r(59), + Shape: _p.r(60), + ShapePoint: _p.r(63), + ShapeContainer: _p.r(61), + Sweep: _p.r(68), + Star: _p.r(65), + Text: _p.r(69), + TextSpan: _p.r(71), + Use: _p.r(72), + Vector: _p.r(73), + g: _p.r(34), + // animate + Animator: _p.r(0), + Easing: _p.r(1), + OpacityAnimator: _p.r(4), + RotateAnimator: _p.r(6), + ScaleAnimator: _p.r(7), + Timeline: _p.r(8), + TranslateAnimator: _p.r(9), + PathAnimator: _p.r(5), + MotionAnimator: _p.r(3), + requestFrame: _p.r(2).requestFrame, + releaseFrame: _p.r(2).releaseFrame, + // filter + Filter: _p.r(20), + GaussianblurFilter: _p.r(21), + ProjectionFilter: _p.r(22), + // effect + ColorMatrixEffect: _p.r(13), + CompositeEffect: _p.r(14), + ConvolveMatrixEffect: _p.r(15), + Effect: _p.r(16), + GaussianblurEffect: _p.r(17), + OffsetEffect: _p.r(18) + }); + return window.kity = kity; + } +}; + +var moduleMapping = { + kity: 76 +}; + +function use(name) { + _p.r([ moduleMapping[name] ]); +} +/* global use, inc: true */ + +/** + * 模块暴露 + */ +use('kity'); +})(); \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/loading.gif b/public/resource/tinymce/plugins/kityformula-editor/kityformula/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bb90fd6a49107a321c35b9cee4a7b810314b51f GIT binary patch literal 1787 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 WKVS!lK#me95g4F$!-{Avfd2tyqRXcM literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_CAL.woff b/public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_CAL.woff new file mode 100644 index 0000000000000000000000000000000000000000..f433b03af6a9396146bc669df2a4f74c58b6e61a GIT binary patch literal 5576 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 literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_FRAK.woff b/public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_FRAK.woff new file mode 100644 index 0000000000000000000000000000000000000000..9c7e9d68e6d48f0e1d67c77d62af1d485cfbeff4 GIT binary patch literal 9956 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 HXaoEo5^4Yf literal 0 HcmV?d00001 diff --git a/public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_MAIN.woff b/public/resource/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_MAIN.woff new file mode 100644 index 0000000000000000000000000000000000000000..ed93f8e84f307c523934cfea59c18569ec257e4b GIT binary patch literal 52540 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 nW;8e`EH$yetlVMM`B/g; + var path2=/data-latex="(.*?)"/g; + + if(sel.search(path)==0){ + sel.replace(path2,function($0,$1){ + var param=encodeURIComponent($1); + openDialog(param); + return $0; + }); + }; + }); + + var openDialog = function(param) { + return editor.windowManager.openUrl({ + title: '插入公式', + size: 'large', + width: 785, + height: 475, + url:param?baseURL+"?c="+param:baseURL, + buttons: [ + { + type: 'cancel', + text: 'Close' + }, + { + type: 'custom', + text: 'Save', + name: 'save', + primary: true + }, + ], + onAction: function (api, details) { + switch (details.name) { + case 'save': + api.sendMessage("save"); + break; + default: + break; + }; + } + }); + }; + + + editor.ui.registry.addButton('kityformula-editor', { + text: '公式', + tooltip: '插入公式', + onAction: function() { + openDialog(); + } + }); + editor.ui.registry.addMenuItem('kityformula-editor', { + text: '公式', + onAction: function() { + openDialog(); + } + }); + return { + getMetadata: function() { + return { + name: "公式", + url: "http://hgcserver.gitee.io", + }; + } + }; +}); \ No newline at end of file diff --git a/public/resource/tinymce/plugins/kityformula-editor/plugin.min.js b/public/resource/tinymce/plugins/kityformula-editor/plugin.min.js new file mode 100644 index 0000000..d36fe97 --- /dev/null +++ b/public/resource/tinymce/plugins/kityformula-editor/plugin.min.js @@ -0,0 +1,73 @@ +tinymce.PluginManager.add('kityformula-editor', function(editor, url) { + + // var baseURL = tinymce.baseURL+'/resource/tinymce/plugins/kityformula-editor/kityFormula.html'; + var baseURL = document.location.origin + window._CONFIG.publicPath +'/resource/tinymce/plugins/kityformula-editor/kityFormula.html'; + + editor.on('dblclick',function(){ + var sel=editor.selection.getContent(); + var path=/\/g; + var path2=/data-latex="(.*?)"/g; + + if(sel.search(path)==0){ + sel.replace(path2,function($0,$1){ + var param=encodeURIComponent($1); + openDialog(param); + return $0; + }); + }; + }); + + var openDialog = function(param) { + return editor.windowManager.openUrl({ + title: '插入公式', + size: 'large', + width: 785, + height: 475, + url:param?baseURL+"?c="+param:baseURL, + buttons: [ + { + type: 'cancel', + text: 'Close' + }, + { + type: 'custom', + text: 'Save', + name: 'save', + primary: true + }, + ], + onAction: function (api, details) { + switch (details.name) { + case 'save': + api.sendMessage("save"); + break; + default: + break; + }; + } + }); + }; + + + editor.ui.registry.addButton('kityformula-editor', { + text: '公式', + tooltip: '插入公式', + onAction: function() { + openDialog(); + } + }); + editor.ui.registry.addMenuItem('kityformula-editor', { + text: '公式', + onAction: function() { + openDialog(); + } + }); + return { + getMetadata: function() { + return { + name: "公式", + url: "http://hgcserver.gitee.io", + }; + } + }; +}); \ No newline at end of file diff --git a/src/components/Tinymce/src/Editor.vue b/src/components/Tinymce/src/Editor.vue index 61a495b..06a5892 100644 --- a/src/components/Tinymce/src/Editor.vue +++ b/src/components/Tinymce/src/Editor.vue @@ -51,6 +51,7 @@ import 'tinymce/plugins/table'; import 'tinymce/plugins/textcolor'; import 'tinymce/plugins/contextmenu'; +// import '/@/components/Tinymce/plugins/kityformula-editor'; import { defineComponent, computed, nextTick, ref, unref, watch, onDeactivated, onBeforeUnmount } from 'vue'; import ImgUpload from './ImgUpload.vue'; import { toolbar, plugins, simplePlugins, simpleToolbar, menubar } from './tinymce'; @@ -147,6 +148,9 @@ toolbar, menubar: menubar, plugins, + // external_plugins: { + // 'kityformula-editor': publicPath + 'resource/tinymce/plugins/kityformula-editor/plugin.min.js' + // }, language_url: publicPath + 'resource/tinymce/langs/' + langName.value + '.js', language: langName.value, branding: false, diff --git a/src/components/Tinymce/src/Editor2.vue b/src/components/Tinymce/src/Editor2.vue index 309730e..dd732a4 100644 --- a/src/components/Tinymce/src/Editor2.vue +++ b/src/components/Tinymce/src/Editor2.vue @@ -6,10 +6,12 @@