├── .htaccess ├── 3DRoom+ic.html ├── 3dRoom.html ├── LICENSE ├── README.md ├── _book ├── img │ ├── 0 │ │ └── icObjects.png │ ├── 1 │ │ ├── Sans titre2.png │ │ └── echelle_sans_echelle.png │ ├── 2 │ │ ├── main_souris.png │ │ └── zScroll.png │ ├── 3 │ │ ├── first_challenge.png │ │ └── mariobros_operator.png │ ├── 4 │ │ ├── Sans titre.png │ │ ├── Sans titre3.png │ │ ├── Sans titre4.png │ │ ├── Sans titre5.png │ │ └── police_facile.png │ ├── 7 │ │ └── 3droom.png │ ├── 9 │ │ ├── Capture d'écran 2024-01-10 191511.png │ │ ├── Capture d'écran 2024-01-10 191712.png │ │ ├── original_example.png │ │ └── original_example_error2.png │ └── title │ │ ├── aui__AUI__base.png │ │ └── man_aui__nice_yellow.png ├── still_book.md └── still_book.pdf ├── fonts ├── basis33 │ ├── LICENSE.txt │ ├── README.txt │ └── basis33.ttf ├── bpdots │ ├── BPdots.otf │ └── BPdotsSquareBold.otf ├── dpcomic │ ├── dpcomic.ttf │ └── license.txt ├── exepixelperfect │ ├── 1001fonts-exepixelperfect-eula.txt │ └── EXEPixelPerfect.ttf ├── loadFonts.css ├── loadFonts__pixel.css ├── lunchtime-doubly-so │ ├── license.txt │ └── lunchds.ttf ├── medodica │ ├── MedodicaRegular.otf │ └── medodica_license_read_me.txt ├── pixeloid │ ├── License.txt │ ├── PixeloidMono.otf │ ├── PixeloidMono.ttf │ ├── PixeloidSans-Bold.otf │ ├── PixeloidSans-Bold.ttf │ ├── PixeloidSans.otf │ └── PixeloidSans.ttf ├── press-start-2p │ ├── OFL.txt │ └── PressStart2P-Regular.ttf └── return-of-ganon │ ├── license.txt │ └── retganon.ttf ├── ic.html ├── img ├── aui__AUI__base.png ├── aui__AUI__clouds.png ├── aui__base.png ├── ezgif-1-c40d1c86f3.gif ├── ic │ └── cursor__zSegment_64__better.png ├── ic_better_logo2.png ├── ic_better_logo_simple_trans_2.png ├── man_aui__nice_yellow.png ├── oyagame │ ├── grass.png │ ├── mud.png │ ├── sand.png │ ├── soil.png │ ├── tree__big.png │ ├── tree__small.png │ ├── water__deep.png │ └── water__ok.png ├── tbd.png └── zScrollzIndexFreeDraw.png ├── index.html ├── lib ├── 3D │ ├── three-laser-pointer.min.js │ └── three.bundle.min.js ├── CircularBuffer.js ├── Equations.js ├── FileSaver.min.js ├── FunctionCallsQueue.js ├── PriorityQueue.js ├── Queue.js ├── algebrite.bundle-for-browser.js ├── anime.min.js ├── base64.js ├── bluebird.browserified.bundle.js ├── bootstrap │ ├── bootstrap.bundle.min.js │ └── bootstrap.min.css ├── color.global.min.js ├── countdown.min.js ├── curve │ ├── bezier.js │ ├── curve.min.js │ ├── curve_calc.min.js │ ├── curve_func.min.js │ └── zCurve.js ├── decimal.min.js ├── decoration+infiltration.js ├── epub │ ├── epub-maker │ │ ├── epub-maker.min.js │ │ └── vendor │ │ │ ├── FileSaver.min.js │ │ │ ├── beautify-html.js │ │ │ ├── handlebars.min.js │ │ │ ├── jszip-utils.min.js │ │ │ ├── jszip.min.js │ │ │ └── underscore.string.min.js │ └── epub.min.js ├── fabric+activeSelectionTL.js ├── fabric+brushClone.js ├── fabric+brushPreview.js ├── fabric+canvas2D_willReadFrequently.js ├── fabric+comb.js ├── fabric+contentFlip.js ├── fabric+debug.js ├── fabric+renderZones.js ├── fabric+reverseMouseButtons.js ├── fabric+straightStroke.js ├── fabric+zIndex.js ├── fabric+zIndexPencilBrush.js ├── fabric+zPixel.js ├── fabric+zPixelBrush.js ├── fabric+zPixelPath.js ├── fabric+zPixelRect.js ├── fabric+zPixelRectBrush.js ├── fabric+zPixelRectSelectionBrush.js ├── fabric.531.min.js ├── fabric.min.js ├── fabricjs+curve3.js ├── fabricjs+floodFill.js ├── fabricjs+zCurve3.js ├── ffiilleess │ └── fzstd.min.js ├── gamecontroller.min.js ├── gemini │ └── Gemini_all.js ├── geom │ ├── flatten-js.umd.js │ ├── intersects.min.js │ ├── intersects__decimal.js │ └── rasterize.js ├── hammer.min.js ├── hammer__touch-emulator.js ├── html2canvas.min.js ├── html5-qrcode.min.js ├── iimmgg │ ├── pngtoy.min.js │ └── psd-reader.min.js ├── input │ └── tex │ │ └── extensions │ │ ├── action.js │ │ ├── all-packages.js │ │ ├── ams.js │ │ ├── amscd.js │ │ ├── autoload.js │ │ ├── bbox.js │ │ ├── boldsymbol.js │ │ ├── braket.js │ │ ├── bussproofs.js │ │ ├── cancel.js │ │ ├── centernot.dtx │ │ ├── color.js │ │ ├── colorv2.js │ │ ├── configmacros.js │ │ ├── enclose.js │ │ ├── extpfeil.js │ │ ├── html.js │ │ ├── mhchem.js │ │ ├── newcommand.js │ │ ├── noerrors.js │ │ ├── noundefined.js │ │ ├── physics.js │ │ ├── require.js │ │ ├── tagformat.js │ │ ├── textmacros.js │ │ ├── unicode.js │ │ └── verb.js ├── instascan.browserified.bundle.js ├── jszip.min.js ├── jwt.browserified.bundle.js ├── loader │ └── loader.js ├── logic │ └── tau-prolog.js ├── math-expressions.browserified.bundle.js ├── math.js ├── mathjax.tex-svg.js ├── mathquill │ ├── font │ │ ├── Symbola-basic.eot │ │ ├── Symbola-basic.ttf │ │ ├── Symbola-basic.woff │ │ ├── Symbola-basic.woff2 │ │ ├── Symbola.eot │ │ ├── Symbola.otf │ │ ├── Symbola.svg │ │ ├── Symbola.ttf │ │ ├── Symbola.woff │ │ └── Symbola.woff2 │ ├── jquery-3.5.1.min.js │ ├── mathquill.css │ └── mathquill.min.js ├── ngraph.graph.min.js ├── nodeqrcode.browserified.bundle.js ├── pdf │ ├── jspdf@2.5.1.umd.min.js │ └── pdfjs │ │ ├── pdf.min.js │ │ └── pdf.worker.min.js ├── peerjs@1.4.7.min.js ├── rxjs.umd.min.js ├── serialize-javascript.browserified.bundle.js ├── text │ └── fontfaceobserver.js ├── uuid.browserified.bundle.js ├── video-js.min.css ├── video.min.js ├── wad.min.js ├── wolkenkit-eventstore │ └── wolkenkit-eventstore.browserified.bundle.js └── written-number.min.js ├── programmaZ.txt ├── programmashute.txt ├── saves └── infinishute_tutorial.json ├── start_peerjs.bat ├── still_book.txt ├── still_shute.js └── still_shute.txt /.htaccess: -------------------------------------------------------------------------------- 1 | RewriteEngine On 2 | RewriteCond %{SERVER_PORT} 80 3 | RewriteRule ^(.*)$ https://www.mathgame.fr/$1 [R,L] 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 teachingbeforedying 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A User Interface 2 | 3 | 4 | ## Drawing demo 5 | 6 | 7 | ## Try it ! 8 | (Keep ² or ` key pressed (right above TAB) and click to draw) 9 | 10 | newest version: 11 | http://zpixeleditor.com 12 | 13 | old version: 14 | https://mathgame.fr/3DRoom+ic.html 15 | 16 | To be very comfortable and precise: 17 | _index finger scrolls mouse wheel_ while middlefinger is clicking 18 | 19 | ## About 20 | Infinite whiteboard with interactive elements. 21 | Originally designed for students to manipulate math objects. 22 | Can be used for making presentations, drawings, games or all at the same time. 23 | Open for any kind of improvement, or degeneration. 24 | 25 | ## Key features 26 | Infinite canvas: space is not constrained in width, height, or depth 27 | Z-scroll: resize your elements in a blink 28 | Z-index: bring this in front of that 29 | Create and save/load presentations with text, images, videos, ... 30 | _Easy yet awesome freeDraw UX_ (zPencil, comb, zPixel, ...) 31 | Batch paste 32 | Interactive objects 33 | Operators 34 | _Math objects_ 35 | _Composites_ 36 | _Conveyors_ 37 | _Vessels_ 38 | _Pathmade operators_ 39 | _Platform operators_ 40 | _Cores_ 41 | Povs (replacement for 'slides') 42 | ...and many others, scattered here and there 43 | 44 | ## Video 45 | https://www.youtube.com/watch?v=ZGPzRM4oQSw 46 | 47 | ## Try it offline ! 48 | 1. Download project : [Code] (green button) > [Download ZIP] 49 | OR more simply: ![iC.zip](https://github.com/teachingbeforedying/infiniteCanvas/releases/download/v0.0.0-alpha/iC.zip) 50 | 2. Open ic.html 51 | (3. Mess around with objects and keyboard shortcuts) 52 | 53 | For math stuff: https://mathgame.fr (or index.html in offline mode) 54 |
55 | 56 | ## Vision 57 | The vision is to create a galaxy of interactive objects to teach/learn differently. 58 | But, to be pragmatic, it's all about z-ifying all that can be z-ified 59 | (i.e. what if all software were made with infinite canvas as a principle) 60 | 61 | A ton of ideas still remain in ![still_shute](./still_shute.txt) 62 | Some are written in English and some in French. 63 | Ideas rating: from *** (very good idea) to * (nice idea) 64 |
Interested by an idea? Go on and code it yourself! 65 | 66 |
There is some (huge) refactoring to do (Reduce loc nb, create lib(s) with separate files, improve performance, ...) 67 |
See this as the first version of something bigger 68 | 69 |
70 |
71 |
72 | 73 | ## Development routine 74 | 3 tabs in VSCode: 75 | programmashute: day-to-day low-level technical issues and progresses 76 | 3DRoom+ic.html: code 77 | ![still_shute](./still_shute.txt): "ideas worth coding" 78 | -------------------------------------------------------------------------------- /_book/img/0/icObjects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/0/icObjects.png -------------------------------------------------------------------------------- /_book/img/1/Sans titre2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/1/Sans titre2.png -------------------------------------------------------------------------------- /_book/img/1/echelle_sans_echelle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/1/echelle_sans_echelle.png -------------------------------------------------------------------------------- /_book/img/2/main_souris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/2/main_souris.png -------------------------------------------------------------------------------- /_book/img/2/zScroll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/2/zScroll.png -------------------------------------------------------------------------------- /_book/img/3/first_challenge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/3/first_challenge.png -------------------------------------------------------------------------------- /_book/img/3/mariobros_operator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/3/mariobros_operator.png -------------------------------------------------------------------------------- /_book/img/4/Sans titre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/4/Sans titre.png -------------------------------------------------------------------------------- /_book/img/4/Sans titre3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/4/Sans titre3.png -------------------------------------------------------------------------------- /_book/img/4/Sans titre4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/4/Sans titre4.png -------------------------------------------------------------------------------- /_book/img/4/Sans titre5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/4/Sans titre5.png -------------------------------------------------------------------------------- /_book/img/4/police_facile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/4/police_facile.png -------------------------------------------------------------------------------- /_book/img/7/3droom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/7/3droom.png -------------------------------------------------------------------------------- /_book/img/9/Capture d'écran 2024-01-10 191511.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/9/Capture d'écran 2024-01-10 191511.png -------------------------------------------------------------------------------- /_book/img/9/Capture d'écran 2024-01-10 191712.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/9/Capture d'écran 2024-01-10 191712.png -------------------------------------------------------------------------------- /_book/img/9/original_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/9/original_example.png -------------------------------------------------------------------------------- /_book/img/9/original_example_error2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/9/original_example_error2.png -------------------------------------------------------------------------------- /_book/img/title/aui__AUI__base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/title/aui__AUI__base.png -------------------------------------------------------------------------------- /_book/img/title/man_aui__nice_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/img/title/man_aui__nice_yellow.png -------------------------------------------------------------------------------- /_book/still_book.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/_book/still_book.pdf -------------------------------------------------------------------------------- /fonts/basis33/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2004, 2005 Tristan Grimmer 4 | Copyright (c) 2014 Manchson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /fonts/basis33/README.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/basis33/README.txt -------------------------------------------------------------------------------- /fonts/basis33/basis33.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/basis33/basis33.ttf -------------------------------------------------------------------------------- /fonts/bpdots/BPdots.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/bpdots/BPdots.otf -------------------------------------------------------------------------------- /fonts/bpdots/BPdotsSquareBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/bpdots/BPdotsSquareBold.otf -------------------------------------------------------------------------------- /fonts/dpcomic/dpcomic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/dpcomic/dpcomic.ttf -------------------------------------------------------------------------------- /fonts/dpcomic/license.txt: -------------------------------------------------------------------------------- 1 | Thanks for downloading one of codeman38's retro video game fonts, as seen on Memepool, BoingBoing, and all around the blogosphere. 2 | 3 | So, you're wondering what the license is for these fonts? Pretty simple; it's based upon that used for Bitstream's Vera font set . 4 | 5 | Basically, here are the key points summarized, in as little legalese as possible; I hate reading license agreements as much as you probably do: 6 | 7 | With one specific exception, you have full permission to bundle these fonts in your own free or commercial projects-- and by projects, I'm referring to not just software but also electronic documents and print publications. 8 | 9 | So what's the exception? Simple: you can't re-sell these fonts in a commercial font collection. I've seen too many font CDs for sale in stores that are just a repackaging of thousands of freeware fonts found on the internet, and in my mind, that's quite a bit like highway robbery. Note that this *only* applies to products that are font collections in and of themselves; you may freely bundle these fonts with an operating system, application program, or the like. 10 | 11 | Feel free to modify these fonts and even to release the modified versions, as long as you change the original font names (to ensure consistency among people with the font installed) and as long as you give credit somewhere in the font file to codeman38 or zone38.net. I may even incorporate these changes into a later version of my fonts if you wish to send me the modifed fonts via e-mail. 12 | 13 | Also, feel free to mirror these fonts on your own site, as long as you make it reasonably clear that these fonts are not your own work. I'm not asking for much; linking to zone38.net or even just mentioning the nickname codeman38 should be enough. 14 | 15 | Well, that pretty much sums it up... so without further ado, install and enjoy these fonts from the golden age of video games. 16 | 17 | [ codeman38 | cody@zone38.net | http://www.zone38.net/ ] -------------------------------------------------------------------------------- /fonts/exepixelperfect/1001fonts-exepixelperfect-eula.txt: -------------------------------------------------------------------------------- 1 | 1001Fonts Free For Commercial Use License (FFC) 2 | 3 | Preamble 4 | In this license, 'EXEPixelPerfect' refers to the given .zip file, which may contain one or numerous fonts. These fonts can be of any type (.ttf, .otf, ...) and together they form a 'font family' or in short a 'typeface'. 5 | 6 | 1. Copyright 7 | EXEPixelPerfect is the intellectual property of its respective author, provided it is original, and is protected by copyright laws in many parts of the world. 8 | 9 | 2. Usage 10 | EXEPixelPerfect may be downloaded and used free of charge for both personal and commercial use, as long as the usage is not racist or illegal. Personal use refers to all usage that does not generate financial income in a business manner, for instance: 11 | 12 | - personal scrapbooking for yourself 13 | - recreational websites and blogs for friends and family 14 | - prints such as flyers, posters, t-shirts for churches, charities, and non-profit organizations 15 | 16 | Commercial use refers to usage in a business environment, including: 17 | 18 | - business cards, logos, advertising, websites, mobile apps for companies 19 | - t-shirts, books, apparel that will be sold for money 20 | - flyers, posters for events that charge admission 21 | - freelance graphic design work 22 | - anything that will generate direct or indirect income 23 | 24 | 3. Modification 25 | EXEPixelPerfect may not be modified, altered, adapted or built upon without written permission by its respective author. This pertains all files within the downloadable font zip-file. 26 | 27 | 4. Conversion 28 | EXEPixelPerfect may be converted to other formats such as WOFF, SVG or EOT webfonts, as long as the font is not modified in any other way, such as changing names or altering individual glyphs. 29 | 30 | 5. Distribution 31 | While EXEPixelPerfect may freely be copied and passed along to other individuals for private use as its original downloadable zip-file, it may not be sold or published without written permission by its respective author. 32 | 33 | 6. Embedding 34 | EXEPixelPerfect may be embedded into an application such as a web- or mobile app, independant of the number of the application users, as long as the application does not distribute EXEPixelPerfect, such as offering it as a download. 35 | 36 | 7. Disclaimer 37 | EXEPixelPerfect is offered 'as is' without any warranty. 1001fonts.com and the respective author of EXEPixelPerfect shall not be liable for any damage derived from using this typeface. By using EXEPixelPerfect you agree to the terms of this license. -------------------------------------------------------------------------------- /fonts/exepixelperfect/EXEPixelPerfect.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/exepixelperfect/EXEPixelPerfect.ttf -------------------------------------------------------------------------------- /fonts/loadFonts.css: -------------------------------------------------------------------------------- 1 | /*PIXEL FONTS*/ 2 | 3 | @font-face { 4 | font-family: "basis33"; 5 | src: url("./basis33/basis33.ttf"); 6 | } 7 | 8 | @font-face { 9 | font-family: "bpdots"; 10 | src: url("./bpdots/bpdots.otf"); 11 | } 12 | 13 | @font-face { 14 | font-family: "dpcomic"; 15 | src: url("./dpcomic/dpcomic.ttf"); 16 | } 17 | 18 | @font-face { 19 | font-family: "EXEPixelPerfect"; 20 | src: url("./exepixelperfect/EXEPixelPerfect.ttf"); 21 | } 22 | 23 | @font-face { 24 | font-family: "lunchtime-doubly-so"; 25 | src: url("./basis33/lunchds.ttf"); 26 | } 27 | 28 | @font-face { 29 | font-family: "medodica"; 30 | src: url("./medodica/MedodicaRegular.otf"); 31 | } 32 | 33 | @font-face { 34 | font-family: "pixeloid"; 35 | src: url("./pixeloid/PixeloidSans.ttf"); 36 | } 37 | 38 | @font-face { 39 | font-family: "press-start-2p"; 40 | src: url("./press-start-2p/PressStart2P-Regular.ttf"); 41 | } 42 | 43 | @font-face { 44 | font-family: "return-of-ganon"; 45 | src: url("./return-of-ganon/retganon.ttf"); 46 | } 47 | -------------------------------------------------------------------------------- /fonts/loadFonts__pixel.css: -------------------------------------------------------------------------------- 1 | /*PIXEL FONTS*/ 2 | 3 | @font-face { 4 | font-family: "medodica"; 5 | src: url("./medodica/MedodicaRegular.otf"); 6 | } 7 | 8 | @font-face { 9 | font-family: "basis33"; 10 | src: url("./basis33/basis33.ttf"); 11 | } 12 | 13 | @font-face { 14 | font-family: "bpdots"; 15 | src: url("./bpdots/BPdotsSquareBold.otf"); 16 | } 17 | 18 | @font-face { 19 | font-family: "dpcomic"; 20 | src: url("./dpcomic/dpcomic.ttf"); 21 | } 22 | 23 | @font-face { 24 | font-family: "EXEPixelPerfect"; 25 | src: url("./exepixelperfect/EXEPixelPerfect.ttf"); 26 | } 27 | 28 | @font-face { 29 | font-family: "lunchtime-doubly-so"; 30 | src: url("./lunchtime-doubly-so/lunchds.ttf"); 31 | } 32 | 33 | @font-face { 34 | font-family: "pixeloid"; 35 | src: url("./pixeloid/PixeloidSans.ttf"); 36 | } 37 | 38 | @font-face { 39 | font-family: "press-start-2p"; 40 | src: url("./press-start-2p/PressStart2P-Regular.ttf"); 41 | } 42 | 43 | @font-face { 44 | font-family: "return-of-ganon"; 45 | src: url("./return-of-ganon/retganon.ttf"); 46 | } 47 | -------------------------------------------------------------------------------- /fonts/lunchtime-doubly-so/license.txt: -------------------------------------------------------------------------------- 1 | Thanks for downloading one of codeman38's retro video game fonts, as seen on Memepool, BoingBoing, and all around the blogosphere. 2 | 3 | So, you're wondering what the license is for these fonts? Pretty simple; it's based upon that used for Bitstream's Vera font set . 4 | 5 | Basically, here are the key points summarized, in as little legalese as possible; I hate reading license agreements as much as you probably do: 6 | 7 | With one specific exception, you have full permission to bundle these fonts in your own free or commercial projects-- and by projects, I'm referring to not just software but also electronic documents and print publications. 8 | 9 | So what's the exception? Simple: you can't re-sell these fonts in a commercial font collection. I've seen too many font CDs for sale in stores that are just a repackaging of thousands of freeware fonts found on the internet, and in my mind, that's quite a bit like highway robbery. Note that this *only* applies to products that are font collections in and of themselves; you may freely bundle these fonts with an operating system, application program, or the like. 10 | 11 | Feel free to modify these fonts and even to release the modified versions, as long as you change the original font names (to ensure consistency among people with the font installed) and as long as you give credit somewhere in the font file to codeman38 or zone38.net. I may even incorporate these changes into a later version of my fonts if you wish to send me the modifed fonts via e-mail. 12 | 13 | Also, feel free to mirror these fonts on your own site, as long as you make it reasonably clear that these fonts are not your own work. I'm not asking for much; linking to zone38.net or even just mentioning the nickname codeman38 should be enough. 14 | 15 | Well, that pretty much sums it up... so without further ado, install and enjoy these fonts from the golden age of video games. 16 | 17 | [ codeman38 | cody@zone38.net | http://www.zone38.net/ ] -------------------------------------------------------------------------------- /fonts/lunchtime-doubly-so/lunchds.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/lunchtime-doubly-so/lunchds.ttf -------------------------------------------------------------------------------- /fonts/medodica/MedodicaRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/medodica/MedodicaRegular.otf -------------------------------------------------------------------------------- /fonts/medodica/medodica_license_read_me.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2024, Roberto Mocci (< postocarattere@gmail.com | https://patreon.com/rmocci >), 2 | with Reserved Font Name Medodica. 3 | 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- /fonts/pixeloid/License.txt: -------------------------------------------------------------------------------- 1 | Copyright © 2020-2023 GGBotNet (https://ggbot.net/fonts/), with Reserved Font Name "Pixeloid". 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | ----------------------------------------------------------- 8 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 9 | ----------------------------------------------------------- 10 | 11 | PREAMBLE 12 | The goals of the Open Font License (OFL) are to stimulate worldwide 13 | development of collaborative font projects, to support the font creation 14 | efforts of academic and linguistic communities, and to provide a free and 15 | open framework in which fonts may be shared and improved in partnership 16 | with others. 17 | 18 | The OFL allows the licensed fonts to be used, studied, modified and 19 | redistributed freely as long as they are not sold by themselves. The 20 | fonts, including any derivative works, can be bundled, embedded, 21 | redistributed and/or sold with any software provided that any reserved 22 | names are not used by derivative works. The fonts and derivatives, 23 | however, cannot be released under any other type of license. The 24 | requirement for fonts to remain under this license does not apply 25 | to any document created using the fonts or their derivatives. 26 | 27 | DEFINITIONS 28 | "Font Software" refers to the set of files released by the Copyright 29 | Holder(s) under this license and clearly marked as such. This may 30 | include source files, build scripts and documentation. 31 | 32 | "Reserved Font Name" refers to any names specified as such after the 33 | copyright statement(s). 34 | 35 | "Original Version" refers to the collection of Font Software components as 36 | distributed by the Copyright Holder(s). 37 | 38 | "Modified Version" refers to any derivative made by adding to, deleting, 39 | or substituting -- in part or in whole -- any of the components of the 40 | Original Version, by changing formats or by porting the Font Software to a 41 | new environment. 42 | 43 | "Author" refers to any designer, engineer, programmer, technical 44 | writer or other person who contributed to the Font Software. 45 | 46 | PERMISSION & CONDITIONS 47 | Permission is hereby granted, free of charge, to any person obtaining 48 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 49 | redistribute, and sell modified and unmodified copies of the Font 50 | Software, subject to the following conditions: 51 | 52 | 1) Neither the Font Software nor any of its individual components, 53 | in Original or Modified Versions, may be sold by itself. 54 | 55 | 2) Original or Modified Versions of the Font Software may be bundled, 56 | redistributed and/or sold with any software, provided that each copy 57 | contains the above copyright notice and this license. These can be 58 | included either as stand-alone text files, human-readable headers or 59 | in the appropriate machine-readable metadata fields within text or 60 | binary files as long as those fields can be easily viewed by the user. 61 | 62 | 3) No Modified Version of the Font Software may use the Reserved Font 63 | Name(s) unless explicit written permission is granted by the corresponding 64 | Copyright Holder. This restriction only applies to the primary font name as 65 | presented to the users. 66 | 67 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 68 | Software shall not be used to promote, endorse or advertise any 69 | Modified Version, except to acknowledge the contribution(s) of the 70 | Copyright Holder(s) and the Author(s) or with their explicit written 71 | permission. 72 | 73 | 5) The Font Software, modified or unmodified, in part or in whole, 74 | must be distributed entirely under this license, and must not be 75 | distributed under any other license. The requirement for fonts to 76 | remain under this license does not apply to any document created 77 | using the Font Software. 78 | 79 | TERMINATION 80 | This license becomes null and void if any of the above conditions are 81 | not met. 82 | 83 | DISCLAIMER 84 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 85 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 86 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 87 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 88 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 89 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 90 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 91 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 92 | OTHER DEALINGS IN THE FONT SOFTWARE. 93 | -------------------------------------------------------------------------------- /fonts/pixeloid/PixeloidMono.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/pixeloid/PixeloidMono.otf -------------------------------------------------------------------------------- /fonts/pixeloid/PixeloidMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/pixeloid/PixeloidMono.ttf -------------------------------------------------------------------------------- /fonts/pixeloid/PixeloidSans-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/pixeloid/PixeloidSans-Bold.otf -------------------------------------------------------------------------------- /fonts/pixeloid/PixeloidSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/pixeloid/PixeloidSans-Bold.ttf -------------------------------------------------------------------------------- /fonts/pixeloid/PixeloidSans.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/pixeloid/PixeloidSans.otf -------------------------------------------------------------------------------- /fonts/pixeloid/PixeloidSans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/pixeloid/PixeloidSans.ttf -------------------------------------------------------------------------------- /fonts/press-start-2p/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012, Cody "CodeMan38" Boisclair (cody@zone38.net), with Reserved Font Name "Press Start 2P" 2 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 3 | This license is copied below, and is also available with a FAQ at: 4 | http://scripts.sil.org/OFL 5 | 6 | 7 | ----------------------------------------------------------- 8 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 9 | ----------------------------------------------------------- 10 | 11 | PREAMBLE 12 | The goals of the Open Font License (OFL) are to stimulate worldwide 13 | development of collaborative font projects, to support the font creation 14 | efforts of academic and linguistic communities, and to provide a free and 15 | open framework in which fonts may be shared and improved in partnership 16 | with others. 17 | 18 | The OFL allows the licensed fonts to be used, studied, modified and 19 | redistributed freely as long as they are not sold by themselves. The 20 | fonts, including any derivative works, can be bundled, embedded, 21 | redistributed and/or sold with any software provided that any reserved 22 | names are not used by derivative works. The fonts and derivatives, 23 | however, cannot be released under any other type of license. The 24 | requirement for fonts to remain under this license does not apply 25 | to any document created using the fonts or their derivatives. 26 | 27 | DEFINITIONS 28 | "Font Software" refers to the set of files released by the Copyright 29 | Holder(s) under this license and clearly marked as such. This may 30 | include source files, build scripts and documentation. 31 | 32 | "Reserved Font Name" refers to any names specified as such after the 33 | copyright statement(s). 34 | 35 | "Original Version" refers to the collection of Font Software components as 36 | distributed by the Copyright Holder(s). 37 | 38 | "Modified Version" refers to any derivative made by adding to, deleting, 39 | or substituting -- in part or in whole -- any of the components of the 40 | Original Version, by changing formats or by porting the Font Software to a 41 | new environment. 42 | 43 | "Author" refers to any designer, engineer, programmer, technical 44 | writer or other person who contributed to the Font Software. 45 | 46 | PERMISSION & CONDITIONS 47 | Permission is hereby granted, free of charge, to any person obtaining 48 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 49 | redistribute, and sell modified and unmodified copies of the Font 50 | Software, subject to the following conditions: 51 | 52 | 1) Neither the Font Software nor any of its individual components, 53 | in Original or Modified Versions, may be sold by itself. 54 | 55 | 2) Original or Modified Versions of the Font Software may be bundled, 56 | redistributed and/or sold with any software, provided that each copy 57 | contains the above copyright notice and this license. These can be 58 | included either as stand-alone text files, human-readable headers or 59 | in the appropriate machine-readable metadata fields within text or 60 | binary files as long as those fields can be easily viewed by the user. 61 | 62 | 3) No Modified Version of the Font Software may use the Reserved Font 63 | Name(s) unless explicit written permission is granted by the corresponding 64 | Copyright Holder. This restriction only applies to the primary font name as 65 | presented to the users. 66 | 67 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 68 | Software shall not be used to promote, endorse or advertise any 69 | Modified Version, except to acknowledge the contribution(s) of the 70 | Copyright Holder(s) and the Author(s) or with their explicit written 71 | permission. 72 | 73 | 5) The Font Software, modified or unmodified, in part or in whole, 74 | must be distributed entirely under this license, and must not be 75 | distributed under any other license. The requirement for fonts to 76 | remain under this license does not apply to any document created 77 | using the Font Software. 78 | 79 | TERMINATION 80 | This license becomes null and void if any of the above conditions are 81 | not met. 82 | 83 | DISCLAIMER 84 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 85 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 86 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 87 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 88 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 89 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 90 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 91 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 92 | OTHER DEALINGS IN THE FONT SOFTWARE. 93 | -------------------------------------------------------------------------------- /fonts/press-start-2p/PressStart2P-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/press-start-2p/PressStart2P-Regular.ttf -------------------------------------------------------------------------------- /fonts/return-of-ganon/license.txt: -------------------------------------------------------------------------------- 1 | Thanks for downloading one of codeman38's retro video game fonts, as seen on Memepool, BoingBoing, and all around the blogosphere. 2 | 3 | So, you're wondering what the license is for these fonts? Pretty simple; it's based upon that used for Bitstream's Vera font set . 4 | 5 | Basically, here are the key points summarized, in as little legalese as possible; I hate reading license agreements as much as you probably do: 6 | 7 | With one specific exception, you have full permission to bundle these fonts in your own free or commercial projects-- and by projects, I'm referring to not just software but also electronic documents and print publications. 8 | 9 | So what's the exception? Simple: you can't re-sell these fonts in a commercial font collection. I've seen too many font CDs for sale in stores that are just a repackaging of thousands of freeware fonts found on the internet, and in my mind, that's quite a bit like highway robbery. Note that this *only* applies to products that are font collections in and of themselves; you may freely bundle these fonts with an operating system, application program, or the like. 10 | 11 | Feel free to modify these fonts and even to release the modified versions, as long as you change the original font names (to ensure consistency among people with the font installed) and as long as you give credit somewhere in the font file to codeman38 or zone38.net. I may even incorporate these changes into a later version of my fonts if you wish to send me the modifed fonts via e-mail. 12 | 13 | Also, feel free to mirror these fonts on your own site, as long as you make it reasonably clear that these fonts are not your own work. I'm not asking for much; linking to zone38.net or even just mentioning the nickname codeman38 should be enough. 14 | 15 | Well, that pretty much sums it up... so without further ado, install and enjoy these fonts from the golden age of video games. 16 | 17 | [ codeman38 | cody@zone38.net | http://www.zone38.net/ ] -------------------------------------------------------------------------------- /fonts/return-of-ganon/retganon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/fonts/return-of-ganon/retganon.ttf -------------------------------------------------------------------------------- /img/aui__AUI__base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/aui__AUI__base.png -------------------------------------------------------------------------------- /img/aui__AUI__clouds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/aui__AUI__clouds.png -------------------------------------------------------------------------------- /img/aui__base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/aui__base.png -------------------------------------------------------------------------------- /img/ezgif-1-c40d1c86f3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/ezgif-1-c40d1c86f3.gif -------------------------------------------------------------------------------- /img/ic/cursor__zSegment_64__better.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/ic/cursor__zSegment_64__better.png -------------------------------------------------------------------------------- /img/ic_better_logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/ic_better_logo2.png -------------------------------------------------------------------------------- /img/ic_better_logo_simple_trans_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/ic_better_logo_simple_trans_2.png -------------------------------------------------------------------------------- /img/man_aui__nice_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/man_aui__nice_yellow.png -------------------------------------------------------------------------------- /img/oyagame/grass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/grass.png -------------------------------------------------------------------------------- /img/oyagame/mud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/mud.png -------------------------------------------------------------------------------- /img/oyagame/sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/sand.png -------------------------------------------------------------------------------- /img/oyagame/soil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/soil.png -------------------------------------------------------------------------------- /img/oyagame/tree__big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/tree__big.png -------------------------------------------------------------------------------- /img/oyagame/tree__small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/tree__small.png -------------------------------------------------------------------------------- /img/oyagame/water__deep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/water__deep.png -------------------------------------------------------------------------------- /img/oyagame/water__ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/oyagame/water__ok.png -------------------------------------------------------------------------------- /img/tbd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/tbd.png -------------------------------------------------------------------------------- /img/zScrollzIndexFreeDraw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teachingbeforedying/a-user-interface/bfe00f26398883d3c538681a9dfa6a31a0ed5d9e/img/zScrollzIndexFreeDraw.png -------------------------------------------------------------------------------- /lib/FileSaver.min.js: -------------------------------------------------------------------------------- 1 | (function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,a=/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),"string"==typeof b)return c(b,d,e);var h="application/octet-stream"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\/[\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&"undefined"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,"undefined"!=typeof module&&(module.exports=g)}); 2 | 3 | //# sourceMappingURL=FileSaver.min.js.map -------------------------------------------------------------------------------- /lib/FunctionCallsQueue.js: -------------------------------------------------------------------------------- 1 | class FunctionCallsQueue { 2 | constructor(autorun = true, queue = []) { 3 | this.running = false; 4 | this.autorun = autorun; 5 | this.queue = queue; 6 | 7 | this.dict_cancelable = {}; 8 | } 9 | 10 | add(cb) { 11 | this.queue.push((value) => { 12 | const finished = new Promise((resolve, reject) => { 13 | const callbackResponse = cb(value); 14 | 15 | if (callbackResponse !== false) { 16 | resolve(callbackResponse); 17 | } else { 18 | reject(callbackResponse); 19 | } 20 | }); 21 | 22 | finished.then(this.dequeue.bind(this), (() => {})); 23 | }); 24 | 25 | if (this.autorun && !this.running) { 26 | this.dequeue(); 27 | } 28 | 29 | return this; 30 | } 31 | 32 | add_promise(cb_p) { 33 | this.queue.push((value) => { 34 | cb_p.then(this.dequeue.bind(this), (() => {})); 35 | }); 36 | 37 | if (this.autorun && !this.running) { 38 | this.dequeue(); 39 | } 40 | 41 | return this; 42 | } 43 | 44 | dequeue(value) { 45 | this.running = this.queue.shift(); 46 | 47 | if (this.running) { 48 | this.running(value); 49 | } 50 | 51 | return this.running; 52 | } 53 | 54 | get next() { 55 | return this.dequeue; 56 | } 57 | 58 | 59 | 60 | 61 | 62 | remove(cb__toBeRemoved) { 63 | var outBool; 64 | 65 | if(this.running == cb__toBeRemoved) { 66 | //too late to be removed 67 | outBool = false; 68 | } else { 69 | const index = this.queue.indexOf(cb__toBeRemoved); 70 | if (index > -1) { // only splice array when item is found 71 | const queue__new = this.queue.splice(index, 1); // 2nd parameter means remove one item only 72 | this.queue = queue__new; 73 | } 74 | outBool = true; 75 | } 76 | 77 | return outBool; 78 | } 79 | 80 | 81 | } -------------------------------------------------------------------------------- /lib/PriorityQueue.js: -------------------------------------------------------------------------------- 1 | class PriorityQueueElement { 2 | 3 | constructor(payload, priority) { 4 | this.payload = payload; 5 | this.priority = priority; 6 | } 7 | 8 | } 9 | 10 | class PriorityQueue { 11 | /* 12 | /!\ element with high priority will be treated last 13 | */ 14 | constructor() { 15 | this.arr_priority = []; 16 | this.dict_pqe = {}; 17 | } 18 | 19 | 20 | 21 | indexLowestPriority() { 22 | const index__priority = this.arr_priority.findIndex(elt => elt != null); 23 | return index__priority; 24 | } 25 | 26 | lowestPriority() { 27 | const index__priority = this.indexLowestPriority(); 28 | const priority = this.arr_priority[index__priority]; 29 | return priority; 30 | } 31 | 32 | 33 | 34 | enqueue(pqe) { 35 | const priority = pqe.priority; 36 | 37 | const isPriorityExisting = this.arr_priority.includes(priority); 38 | if(!isPriorityExisting) { 39 | const index_insertion = this.arr_priority.reduce((acc,priority_i) => { 40 | if(priority_i < priority) { 41 | acc += 1; 42 | } 43 | return acc; 44 | }, 0); 45 | 46 | //insert priority in array 47 | this.arr_priority.splice(index_insertion, 0, priority); 48 | 49 | //initialize list in dict 50 | this.dict_pqe[priority] = []; 51 | } 52 | 53 | //insert pqe in list in dict 54 | this.dict_pqe[priority].push(pqe); 55 | 56 | return this; 57 | } 58 | 59 | dequeue() { 60 | // logger.log("arr_priority", this.arr_priority); 61 | // logger.log("dict_pqe", this.dict_pqe); 62 | 63 | //find first non-null priority 64 | const index__priority = this.indexLowestPriority(); 65 | const priority = this.arr_priority[index__priority]; 66 | // logger.log("priority", priority); 67 | 68 | //remove pqe from list in dict 69 | const pqe_last = this.dict_pqe[priority].pop(); 70 | // logger.log("pqe_last", pqe_last); 71 | // logger.log("this.dict_pqe[priority]", this.dict_pqe[priority]); 72 | 73 | //clean dict and array if needed 74 | if(this.dict_pqe[priority].length == 0) { 75 | delete this.dict_pqe[priority]; 76 | this.arr_priority.splice(index__priority, 1); 77 | } 78 | // logger.log("this.arr_priority", this.arr_priority); 79 | 80 | return pqe_last; 81 | } 82 | 83 | peek() { 84 | const priority = this.lowestPriority(); 85 | const pqe_last = this.dict_pqe[priority][(this.dict_pqe[priority].length - 1)]; 86 | return pqe_last; 87 | } 88 | 89 | remove(pqe) { 90 | 91 | const priority = pqe.priority; 92 | 93 | //remove pqe from list in dict 94 | const index__pqe = this.dict_pqe[priority].findIndex(elt => elt == pqe); 95 | this.dict_pqe[priority].splice(index__pqe, 1); 96 | 97 | //clean dict and array if needed 98 | if(this.dict_pqe[priority].length == 0) { 99 | delete this.dict_pqe[priority]; 100 | 101 | const index__priority = this.arr_priority.findIndex(elt => elt == priority); 102 | this.arr_priority.splice(index__priority, 1); 103 | } 104 | 105 | return this; 106 | } 107 | 108 | 109 | 110 | 111 | clear() { 112 | this.count = 0; 113 | this.arr_priority = []; 114 | this.dict_pqe = {}; 115 | } 116 | 117 | isEmpty() { 118 | return (this.arr_priority.length == 0); 119 | } 120 | 121 | } 122 | -------------------------------------------------------------------------------- /lib/Queue.js: -------------------------------------------------------------------------------- 1 | //code.iamkate.com 2 | function Queue() { 3 | var a=[],b=0; 4 | this.getArr=function(){return a;}; 5 | this.getLength=function(){return a.length-b}; 6 | this.isEmpty=function(){return 0==a.length}; 7 | this.enqueue=function(b){a.push(b)}; 8 | this.dequeue=function(){if(0!=a.length){var c=a[b];2*++b>=a.length&&(a=a.slice(b),b=0);return c}}; 9 | this.peek=function(){return 0> 2; 61 | var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 62 | var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 63 | var enc4 = chr3 & 63; 64 | 65 | if (isNaN(chr2)) 66 | { 67 | enc3 = enc4 = 64; 68 | } 69 | else if (isNaN(chr3)) 70 | { 71 | enc4 = 64; 72 | } 73 | 74 | output.append(this.codex.charAt(enc1) + this.codex.charAt(enc2) + this.codex.charAt(enc3) + this.codex.charAt(enc4)); 75 | } 76 | 77 | return output.toString(); 78 | }, 79 | 80 | decode : function (input) 81 | { 82 | var output = new StringBuffer(); 83 | 84 | var enumerator = new Base64DecodeEnumerator(input); 85 | while (enumerator.moveNext()) 86 | { 87 | var charCode = enumerator.current; 88 | 89 | if (charCode < 128) 90 | output.append(String.fromCharCode(charCode)); 91 | else if ((charCode > 191) && (charCode < 224)) 92 | { 93 | enumerator.moveNext(); 94 | var charCode2 = enumerator.current; 95 | 96 | output.append(String.fromCharCode(((charCode & 31) << 6) | (charCode2 & 63))); 97 | } 98 | else 99 | { 100 | enumerator.moveNext(); 101 | var charCode2 = enumerator.current; 102 | 103 | enumerator.moveNext(); 104 | var charCode3 = enumerator.current; 105 | 106 | output.append(String.fromCharCode(((charCode & 15) << 12) | ((charCode2 & 63) << 6) | (charCode3 & 63))); 107 | } 108 | } 109 | 110 | return output.toString(); 111 | } 112 | } 113 | 114 | 115 | function Utf8EncodeEnumerator(input) 116 | { 117 | this._input = input; 118 | this._index = -1; 119 | this._buffer = []; 120 | } 121 | 122 | Utf8EncodeEnumerator.prototype = 123 | { 124 | current: Number.NaN, 125 | 126 | moveNext: function() 127 | { 128 | if (this._buffer.length > 0) 129 | { 130 | this.current = this._buffer.shift(); 131 | return true; 132 | } 133 | else if (this._index >= (this._input.length - 1)) 134 | { 135 | this.current = Number.NaN; 136 | return false; 137 | } 138 | else 139 | { 140 | var charCode = this._input.charCodeAt(++this._index); 141 | 142 | // "\r\n" -> "\n" 143 | // 144 | if ((charCode == 13) && (this._input.charCodeAt(this._index + 1) == 10)) 145 | { 146 | charCode = 10; 147 | this._index += 2; 148 | } 149 | 150 | if (charCode < 128) 151 | { 152 | this.current = charCode; 153 | } 154 | else if ((charCode > 127) && (charCode < 2048)) 155 | { 156 | this.current = (charCode >> 6) | 192; 157 | this._buffer.push((charCode & 63) | 128); 158 | } 159 | else 160 | { 161 | this.current = (charCode >> 12) | 224; 162 | this._buffer.push(((charCode >> 6) & 63) | 128); 163 | this._buffer.push((charCode & 63) | 128); 164 | } 165 | 166 | return true; 167 | } 168 | } 169 | } 170 | 171 | function Base64DecodeEnumerator(input) 172 | { 173 | this._input = input; 174 | this._index = -1; 175 | this._buffer = []; 176 | } 177 | 178 | Base64DecodeEnumerator.prototype = 179 | { 180 | current: 64, 181 | 182 | moveNext: function() 183 | { 184 | if (this._buffer.length > 0) 185 | { 186 | this.current = this._buffer.shift(); 187 | return true; 188 | } 189 | else if (this._index >= (this._input.length - 1)) 190 | { 191 | this.current = 64; 192 | return false; 193 | } 194 | else 195 | { 196 | var enc1 = Base64.codex.indexOf(this._input.charAt(++this._index)); 197 | var enc2 = Base64.codex.indexOf(this._input.charAt(++this._index)); 198 | var enc3 = Base64.codex.indexOf(this._input.charAt(++this._index)); 199 | var enc4 = Base64.codex.indexOf(this._input.charAt(++this._index)); 200 | 201 | var chr1 = (enc1 << 2) | (enc2 >> 4); 202 | var chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 203 | var chr3 = ((enc3 & 3) << 6) | enc4; 204 | 205 | this.current = chr1; 206 | 207 | if (enc3 != 64) 208 | this._buffer.push(chr2); 209 | 210 | if (enc4 != 64) 211 | this._buffer.push(chr3); 212 | 213 | return true; 214 | } 215 | } 216 | }; 217 | -------------------------------------------------------------------------------- /lib/countdown.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | countdown.js v2.6.0 http://countdownjs.org 3 | Copyright (c)2006-2014 Stephen M. McKamey. 4 | Licensed under The MIT License. 5 | */ 6 | var module,countdown=function(v){function A(a,b){var c=a.getTime();a.setMonth(a.getMonth()+b);return Math.round((a.getTime()-c)/864E5)}function w(a){var b=a.getTime(),c=new Date(b);c.setMonth(a.getMonth()+1);return Math.round((c.getTime()-b)/864E5)}function x(a,b){b=b instanceof Date||null!==b&&isFinite(b)?new Date(+b):new Date;if(!a)return b;var c=+a.value||0;if(c)return b.setTime(b.getTime()+c),b;(c=+a.milliseconds||0)&&b.setMilliseconds(b.getMilliseconds()+c);(c=+a.seconds||0)&&b.setSeconds(b.getSeconds()+ 7 | c);(c=+a.minutes||0)&&b.setMinutes(b.getMinutes()+c);(c=+a.hours||0)&&b.setHours(b.getHours()+c);(c=+a.weeks||0)&&(c*=7);(c+=+a.days||0)&&b.setDate(b.getDate()+c);(c=+a.months||0)&&b.setMonth(b.getMonth()+c);(c=+a.millennia||0)&&(c*=10);(c+=+a.centuries||0)&&(c*=10);(c+=+a.decades||0)&&(c*=10);(c+=+a.years||0)&&b.setFullYear(b.getFullYear()+c);return b}function D(a,b){return y(a)+(1===a?p[b]:q[b])}function n(){}function k(a,b,c,e,l,d){0<=a[c]&&(b+=a[c],delete a[c]);b/=l;if(1>=b+1)return 0;if(0<=a[e]){a[e]= 8 | +(a[e]+b).toFixed(d);switch(e){case "seconds":if(60!==a.seconds||isNaN(a.minutes))break;a.minutes++;a.seconds=0;case "minutes":if(60!==a.minutes||isNaN(a.hours))break;a.hours++;a.minutes=0;case "hours":if(24!==a.hours||isNaN(a.days))break;a.days++;a.hours=0;case "days":if(7!==a.days||isNaN(a.weeks))break;a.weeks++;a.days=0;case "weeks":if(a.weeks!==w(a.refMonth)/7||isNaN(a.months))break;a.months++;a.weeks=0;case "months":if(12!==a.months||isNaN(a.years))break;a.years++;a.months=0;case "years":if(10!== 9 | a.years||isNaN(a.decades))break;a.decades++;a.years=0;case "decades":if(10!==a.decades||isNaN(a.centuries))break;a.centuries++;a.decades=0;case "centuries":if(10!==a.centuries||isNaN(a.millennia))break;a.millennia++;a.centuries=0}return 0}return b}function B(a,b,c,e,l,d){var f=new Date;a.start=b=b||f;a.end=c=c||f;a.units=e;a.value=c.getTime()-b.getTime();0>a.value&&(f=c,c=b,b=f);a.refMonth=new Date(b.getFullYear(),b.getMonth(),15,12,0,0);try{a.millennia=0;a.centuries=0;a.decades=0;a.years=c.getFullYear()- 10 | b.getFullYear();a.months=c.getMonth()-b.getMonth();a.weeks=0;a.days=c.getDate()-b.getDate();a.hours=c.getHours()-b.getHours();a.minutes=c.getMinutes()-b.getMinutes();a.seconds=c.getSeconds()-b.getSeconds();a.milliseconds=c.getMilliseconds()-b.getMilliseconds();var g;0>a.milliseconds?(g=s(-a.milliseconds/1E3),a.seconds-=g,a.milliseconds+=1E3*g):1E3<=a.milliseconds&&(a.seconds+=m(a.milliseconds/1E3),a.milliseconds%=1E3);0>a.seconds?(g=s(-a.seconds/60),a.minutes-=g,a.seconds+=60*g):60<=a.seconds&&(a.minutes+= 11 | m(a.seconds/60),a.seconds%=60);0>a.minutes?(g=s(-a.minutes/60),a.hours-=g,a.minutes+=60*g):60<=a.minutes&&(a.hours+=m(a.minutes/60),a.minutes%=60);0>a.hours?(g=s(-a.hours/24),a.days-=g,a.hours+=24*g):24<=a.hours&&(a.days+=m(a.hours/24),a.hours%=24);for(;0>a.days;)a.months--,a.days+=A(a.refMonth,1);7<=a.days&&(a.weeks+=m(a.days/7),a.days%=7);0>a.months?(g=s(-a.months/12),a.years-=g,a.months+=12*g):12<=a.months&&(a.years+=m(a.months/12),a.months%=12);10<=a.years&&(a.decades+=m(a.years/10),a.years%= 12 | 10,10<=a.decades&&(a.centuries+=m(a.decades/10),a.decades%=10,10<=a.centuries&&(a.millennia+=m(a.centuries/10),a.centuries%=10)));b=0;!(e&1024)||b>=l?(a.centuries+=10*a.millennia,delete a.millennia):a.millennia&&b++;!(e&512)||b>=l?(a.decades+=10*a.centuries,delete a.centuries):a.centuries&&b++;!(e&256)||b>=l?(a.years+=10*a.decades,delete a.decades):a.decades&&b++;!(e&128)||b>=l?(a.months+=12*a.years,delete a.years):a.years&&b++;!(e&64)||b>=l?(a.months&&(a.days+=A(a.refMonth,a.months)),delete a.months, 13 | 7<=a.days&&(a.weeks+=m(a.days/7),a.days%=7)):a.months&&b++;!(e&32)||b>=l?(a.days+=7*a.weeks,delete a.weeks):a.weeks&&b++;!(e&16)||b>=l?(a.hours+=24*a.days,delete a.days):a.days&&b++;!(e&8)||b>=l?(a.minutes+=60*a.hours,delete a.hours):a.hours&&b++;!(e&4)||b>=l?(a.seconds+=60*a.minutes,delete a.minutes):a.minutes&&b++;!(e&2)||b>=l?(a.milliseconds+=1E3*a.seconds,delete a.seconds):a.seconds&&b++;if(!(e&1)||b>=l){var h=k(a,0,"milliseconds","seconds",1E3,d);if(h&&(h=k(a,h,"seconds","minutes",60,d))&&(h= 14 | k(a,h,"minutes","hours",60,d))&&(h=k(a,h,"hours","days",24,d))&&(h=k(a,h,"days","weeks",7,d))&&(h=k(a,h,"weeks","months",w(a.refMonth)/7,d))){e=h;var n,p=a.refMonth,q=p.getTime(),r=new Date(q);r.setFullYear(p.getFullYear()+1);n=Math.round((r.getTime()-q)/864E5);if(h=k(a,e,"months","years",n/w(a.refMonth),d))if(h=k(a,h,"years","decades",10,d))if(h=k(a,h,"decades","centuries",10,d))if(h=k(a,h,"centuries","millennia",10,d))throw Error("Fractional unit overflow");}}}finally{delete a.refMonth}return a} 15 | function d(a,b,c,e,d){var f;c=+c||222;e=0d?Math.round(d):20:0;var k=null;"function"===typeof a?(f=a,a=null):a instanceof Date||(null!==a&&isFinite(a)?a=new Date(+a):("object"===typeof k&&(k=a),a=null));var g=null;"function"===typeof b?(f=b,b=null):b instanceof Date||(null!==b&&isFinite(b)?b=new Date(+b):("object"===typeof b&&(g=b),b=null));k&&(a=x(k,b));g&&(b=x(g,a));if(!a&&!b)return new n;if(!f)return B(new n,a,b,c,e,d);var k=c&1?1E3/30:c&2?1E3:c&4?6E4:c&8?36E5:c&16?864E5:6048E5, 16 | h,g=function(){f(B(new n,a,b,c,e,d),h)};g();return h=setInterval(g,k)}var s=Math.ceil,m=Math.floor,p,q,r,t,u,f,y,z;n.prototype.toString=function(a){var b=z(this),c=b.length;if(!c)return a?""+a:u;if(1===c)return b[0];a=r+b.pop();return b.join(t)+a};n.prototype.toHTML=function(a,b){a=a||"span";var c=z(this),e=c.length;if(!e)return(b=b||u)?"\x3c"+a+"\x3e"+b+"\x3c/"+a+"\x3e":b;for(var d=0;d=d;d++)p[d]=b[d]||p[d],q[d]=c[d]||q[d]}"string"===typeof a.last&&(r=a.last);"string"===typeof a.delim&&(t=a.delim);"string"===typeof a.empty&&(u=a.empty);"function"===typeof a.formatNumber&&(y=a.formatNumber);"function"===typeof a.formatter&&(f=a.formatter)}},C=d.resetFormat= 19 | function(){p=" millisecond; second; minute; hour; day; week; month; year; decade; century; millennium".split(";");q=" milliseconds; seconds; minutes; hours; days; weeks; months; years; decades; centuries; millennia".split(";");r=" and ";t=", ";u="";y=function(a){return a};f=D};d.setLabels=function(a,b,c,d,f,k,m){E({singular:a,plural:b,last:c,delim:d,empty:f,formatNumber:k,formatter:m})};d.resetLabels=C;C();v&&v.exports?v.exports=d:"function"===typeof window.define&&"undefined"!==typeof window.define.amd&& 20 | window.define("countdown",[],function(){return d});return d}(module); -------------------------------------------------------------------------------- /lib/curve/curve.min.js: -------------------------------------------------------------------------------- 1 | /* Curve extension for canvas 2.3.1 2 | * Epistemex (c) 2013-2014 3 | * License: MIT 4 | */ 5 | CanvasRenderingContext2D.prototype.curve=CanvasRenderingContext2D.prototype.curve||function(h,t,f,c){t=(typeof t==="number")?t:0.5;f=f?f:25;var j,d=1,e=h.length,n=0,m=(e-2)*f+2+(c?2*f:0),k=new Float32Array(m),a=new Float32Array((f+2)*4),b=4;j=h.slice(0);if(c){j.unshift(h[e-1]);j.unshift(h[e-2]);j.push(h[0],h[1])}else{j.unshift(h[1]);j.unshift(h[0]);j.push(h[e-2],h[e-1])}a[0]=1;for(;d 5 | 6 | (c) 2014 Stuart Knightley, David Duponchel 7 | Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. 8 | 9 | */ 10 | !function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g 1) { 49 | const options = Object.assign({canvas: this}, this.__dict_activeSelectionTL); 50 | aGroup = new fabric.ActiveSelection(group.reverse(), options); 51 | // aGroup = new fabric.ActiveSelectionTL(group.reverse(), options); 52 | this.setActiveObject(aGroup, e); 53 | } 54 | }).bind(fabricCanvas); 55 | 56 | 57 | 58 | 59 | 60 | 61 | //easy 62 | fabricCanvas.createEasyActiveSelectionTL = (function(arr_fObj) { 63 | logger.log("logFabric", "createEasyActiveSelectionTL"); 64 | 65 | const options = Object.assign({canvas: this}, this.__dict_activeSelectionTL); 66 | return new fabric.ActiveSelection(arr_fObj, options); 67 | // return new fabric.ActiveSelectionTL(arr_fObj, options); 68 | 69 | }).bind(fabricCanvas); 70 | 71 | } 72 | 73 | -------------------------------------------------------------------------------- /lib/fabric+brushClone.js: -------------------------------------------------------------------------------- 1 | fabric.BaseBrush.prototype.deepClone = function() { 2 | 3 | const brush__src = this; 4 | 5 | //remove circular dependencies before serializing 6 | const canvas = this.canvas; 7 | brush__src.canvas = null; 8 | 9 | const parentBrush = brush__src.parentBrush; 10 | brush__src.parentBrush = null; 11 | 12 | var dict_infiltration = {}; 13 | if("setInfiltration" in brush__src) { 14 | dict_infiltration = Object.assign({}, brush__src.dict_infiltration); //SHU TODO: deep copy here too 15 | Object.entries(dict_infiltration).forEach(([k,v]) => { 16 | brush__src.removeInfiltration(k); 17 | }); 18 | } 19 | 20 | // logger.log("logComb", "deepClone", "before JSON(JSON())", "brush__src:", brush__src); 21 | 22 | //deep clone 23 | const proto = Object.getPrototypeOf(brush__src); 24 | const brush__clone = Object.create(proto); 25 | Object.assign(brush__clone, JSON.parse(JSON.stringify(brush__src))); 26 | 27 | const arr_method = Utils.getMethods(brush__clone); 28 | const arr_native = Object.entries(new Object()).filter(([k,v]) => { 29 | return !(v instanceof Function); 30 | }); 31 | arr_method.filter(funcName => { 32 | return arr_native.includes(funcName); 33 | }).forEach(funcName => { 34 | const func = brush__src[funcName]; 35 | brush__clone[funcName] = deserialize(serialize(func)); 36 | }); 37 | 38 | if("setInfiltration" in brush__src) { 39 | DecoratorUtils.upgrade_decorator__with_infiltration(brush__clone); 40 | } 41 | 42 | 43 | 44 | //restore circular dependencies 45 | Object.entries(dict_infiltration).forEach(([k,v]) => { 46 | brush__src.setInfiltration(k,v); 47 | brush__clone.setInfiltration(k,v); 48 | }); 49 | 50 | brush__clone.canvas = canvas; 51 | brush__src.canvas = canvas; 52 | 53 | brush__clone.parentBrush = parentBrush; 54 | brush__src.parentBrush = parentBrush; 55 | 56 | 57 | return brush__clone; 58 | }; -------------------------------------------------------------------------------- /lib/fabric+brushPreview.js: -------------------------------------------------------------------------------- 1 | function installFabricBrushPreviewUpgrade(fabricCanvas) { 2 | logger.log("logFabric", "installFabricBrushPreviewUpgrade"); 3 | 4 | fabricCanvas._onMouseMoveInDrawingMode = (function(e) { 5 | // logger.log("logBrushPreview", "_onMouseMoveInDrawingMode", "this:", this, "e:", e); 6 | 7 | const fabricCanvas = this; 8 | 9 | var pointer = this.getPointer(e); 10 | if (fabricCanvas._isCurrentlyDrawing) { 11 | fabricCanvas.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer }); 12 | } else { 13 | // logger.log("logPreview", "_onMouseMoveInDrawingMode", e, this.freeDrawingBrush); 14 | if("onMouseMove__preview" in fabricCanvas.freeDrawingBrush) { 15 | fabricCanvas.freeDrawingBrush.onMouseMove__preview(pointer, { e: e, pointer: pointer }); 16 | } 17 | } 18 | fabricCanvas.setCursor(fabricCanvas.freeDrawingCursor); 19 | fabricCanvas._handleEvent(e, 'move'); 20 | }).bind(fabricCanvas); 21 | 22 | } 23 | 24 | class PreviewBrush { 25 | 26 | static decorate(brush__src) { 27 | 28 | //get class of brush 29 | const class__src = brush__src.constructor; 30 | // logger.log("logBrushUpgrade", "class__src:", class__src); 31 | 32 | class PreviewXBrush extends DecorationUtils.createDecoratorClass(class__src, { 33 | 34 | getOpacity__preview: function() { 35 | return 0.32; 36 | }, 37 | 38 | getColor__preview: function() { 39 | // logger.log("logPreview", this.debug__name, "this.color", this.color); 40 | const fColor__clone = new fabric.Color(this.color); 41 | 42 | const opacity__preview = this.getOpacity__preview(); 43 | const fColor__preview = fColor__clone.setAlpha(opacity__preview); 44 | 45 | const color__preview = fColor__preview.toRgba(); 46 | 47 | return color__preview; 48 | }, 49 | 50 | _setBrushStyles__preview: function(ctx) { 51 | // logger.log("logComb", "_setBrushStyles__preview", this); 52 | this._setBrushStyles(ctx); 53 | 54 | ctx.strokeStyle = this.getColor__preview(); 55 | // ctx.fillStyle = this.getColor__preview(); 56 | }, 57 | 58 | onMouseMove__preview: function(pointer, options) { 59 | // logger.log("logPreview", "onMouseMove__preview", brush, pointer, options); 60 | 61 | // if(DecorationUtils.getWrappedObj(this).onMouseMove__preview != null) { 62 | // DecorationUtils.getWrappedObj(this).onMouseMove__preview(pointer, options); 63 | // } else { 64 | var p = new fabric.Point(pointer.x, pointer.y); 65 | 66 | // const ctx = this.canvas.contextContainer; 67 | const ctx = this.canvas.contextTop; 68 | 69 | if(this.parentBrush == null) { 70 | this.canvas.clearContext(ctx); 71 | } 72 | 73 | // ctx.save(); 74 | 75 | this._setBrushStyles__preview(ctx); 76 | 77 | ctx.beginPath(); 78 | ctx.moveTo(p.x, p.y); 79 | ctx.lineTo(p.x, p.y); 80 | ctx.stroke(); 81 | 82 | // ctx.restore(); 83 | // } 84 | 85 | }, 86 | 87 | clearPreview: function() { 88 | const ctx = this.canvas.contextTop; 89 | if(this.parentBrush == null) { 90 | this.canvas.clearContext(ctx); 91 | } 92 | }, 93 | 94 | _prepareForDrawing: function(pointer) { 95 | // logger.log("logPreview", "_prepareForDrawing", pointer); 96 | const brush = this; 97 | 98 | brush.clearPreview(); 99 | DecorationUtils.getWrappedObj(brush)._prepareForDrawing(pointer); 100 | }, 101 | 102 | }, PreviewBrush) {} 103 | 104 | const brush__preview = PreviewXBrush.decorate(brush__src); 105 | return brush__preview; 106 | } 107 | 108 | } -------------------------------------------------------------------------------- /lib/fabric+canvas2D_willReadFrequently.js: -------------------------------------------------------------------------------- 1 | function installFabricUpgrade_Canvas2DWillReadFrequently(fabric) { 2 | //logger.log("logFabric", "installFabricUpgrade_Canvas2DWillReadFrequently"); 3 | 4 | //rewrite all initial calls to getContext(...) to getContext(..., { willReadFrequently: true }) 5 | 6 | fabric.StaticCanvas.prototype._createLowerCanvas = function (canvasEl) { 7 | // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node 8 | if (canvasEl && canvasEl.getContext) { 9 | this.lowerCanvasEl = canvasEl; 10 | } 11 | else { 12 | this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement(); 13 | } 14 | 15 | fabric.util.addClass(this.lowerCanvasEl, 'lower-canvas'); 16 | this._originalCanvasStyle = this.lowerCanvasEl.style; 17 | if (this.interactive) { 18 | this._applyCanvasStyle(this.lowerCanvasEl); 19 | } 20 | 21 | //--- 22 | // this.contextContainer = this.lowerCanvasEl.getContext('2d'); 23 | //--- 24 | //+++ 25 | this.contextContainer = this.lowerCanvasEl.getContext('2d', { willReadFrequently: true }); 26 | //+++ 27 | }; 28 | 29 | fabric.Canvas.prototype._createUpperCanvas = function () { 30 | var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/, ''), 31 | lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl; 32 | 33 | // there is no need to create a new upperCanvas element if we have already one. 34 | if (upperCanvasEl) { 35 | upperCanvasEl.className = ''; 36 | } 37 | else { 38 | upperCanvasEl = this._createCanvasElement(); 39 | this.upperCanvasEl = upperCanvasEl; 40 | } 41 | fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass); 42 | 43 | this.wrapperEl.appendChild(upperCanvasEl); 44 | 45 | this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl); 46 | this._applyCanvasStyle(upperCanvasEl); 47 | 48 | //--- 49 | // this.contextTop = upperCanvasEl.getContext('2d'); 50 | //--- 51 | //+++ 52 | this.contextTop = upperCanvasEl.getContext('2d', { willReadFrequently: true }); 53 | //+++ 54 | }; 55 | 56 | fabric.Canvas.prototype._createCacheCanvas = function () { 57 | this.cacheCanvasEl = this._createCanvasElement(); 58 | this.cacheCanvasEl.setAttribute('width', this.width); 59 | this.cacheCanvasEl.setAttribute('height', this.height); 60 | 61 | //--- 62 | // this.contextCache = this.cacheCanvasEl.getContext('2d'); 63 | //--- 64 | //+++ 65 | this.contextCache = this.cacheCanvasEl.getContext('2d', { desynchronized: true, willReadFrequently: true }); 66 | //+++ 67 | }; 68 | 69 | //a fabric object 'is' a cached canvas 70 | fabric.Object.prototype._createCacheCanvas = function() { 71 | this._cacheProperties = {}; 72 | this._cacheCanvas = fabric.util.createCanvasElement(); 73 | 74 | //--- 75 | // this._cacheContext = this._cacheCanvas.getContext('2d'); 76 | //--- 77 | //+++ 78 | this._cacheContext = this._cacheCanvas.getContext('2d', { desynchronized: true, willReadFrequently: true }); 79 | //+++ 80 | 81 | this._updateCacheCanvas(); 82 | // if canvas gets created, is empty, so dirty. 83 | this.dirty = true; 84 | }; 85 | 86 | //debug 87 | // const isTransparent__orig = fabric.util.isTransparent; 88 | // fabric.util.isTransparent = function(ctx, x, y, tolerance) { 89 | // // logger.log("logFabricUtil", "isTransparent", "ctx:", ctx); 90 | 91 | // const isContextContainer = (ctx == fabricIntegration.fabricCanvas.contextContainer); 92 | // const isContextTop = (ctx == fabricIntegration.fabricCanvas.contextTop); 93 | // const isContextCache = (ctx == fabricIntegration.fabricCanvas.contextCache); 94 | // logger.log("logFabricUtil", "isTransparent", "isContextContainer:", isContextContainer); 95 | // logger.log("logFabricUtil", "isTransparent", "isContextTop:", isContextTop); 96 | // logger.log("logFabricUtil", "isTransparent", "isContextCache:", isContextCache); 97 | 98 | // if(!isContextContainer && !isContextTop && !isContextCache) { 99 | // logger.trace("logFabricUtil", "isTransparent", "ctx:", ctx); 100 | // } 101 | 102 | // isTransparent__orig(ctx, x, y, tolerance); 103 | // }; 104 | 105 | 106 | /* 107 | fabric.WebglFilterBackend.prototype.createWebGLCanvas = function(width, height) { 108 | var canvas = fabric.util.createCanvasElement(); 109 | canvas.width = width; 110 | canvas.height = height; 111 | var glOptions = { 112 | alpha: true, 113 | premultipliedAlpha: false, 114 | depth: false, 115 | stencil: false, 116 | antialias: false 117 | }, 118 | gl = canvas.getContext('webgl', glOptions); 119 | if (!gl) { 120 | gl = canvas.getContext('experimental-webgl', glOptions); 121 | } 122 | if (!gl) { 123 | return; 124 | } 125 | gl.clearColor(0, 0, 0, 0); 126 | // this canvas can fire webglcontextlost and webglcontextrestored 127 | this.canvas = canvas; 128 | this.gl = gl; 129 | }; 130 | */ 131 | 132 | 133 | } 134 | 135 | -------------------------------------------------------------------------------- /lib/fabric+contentFlip.js: -------------------------------------------------------------------------------- 1 | function installFabricUpgrade_fabricXcontentFlip(fabric) { 2 | //logger.log("logFabric", "installFabricUpgrade_fabricXcontentFlip"); 3 | 4 | //contentFlip: flip what is inside object, don't change object's transform 5 | 6 | fabric.Object.prototype.transform = function(ctx) { 7 | var needFullTransform = (this.group && !this.group._transformDone) || 8 | (this.group && this.canvas && ctx === this.canvas.contextTop); 9 | var m = this.calcTransformMatrix(!needFullTransform); 10 | 11 | //+++ 12 | if(this.contentFlipX) { 13 | const m__contentFlipX = [-1, 0 , 0 , 1 , 0, 0]; 14 | m = fabric.util.multiplyTransformMatrices(m, m__contentFlipX); 15 | } 16 | if(this.contentFlipY) { 17 | const m__contentFlipY = [1, 0 , 0 , -1 , 0, 0]; 18 | m = fabric.util.multiplyTransformMatrices(m, m__contentFlipY); 19 | } 20 | //+++ 21 | 22 | ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); 23 | }; 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /lib/fabric+debug.js: -------------------------------------------------------------------------------- 1 | function installFabricUpgrade_fabricXdebug(fabric) { 2 | //logger.log("logFabric", "installFabricUpgrade_fabricXdebug"); 3 | 4 | //sometimes you need to log even more stuff 5 | 6 | // fabric.Canvas.prototype._fireSelectionEvents__old = fabric.Canvas.prototype._fireSelectionEvents; 7 | // fabric.Canvas.prototype._fireSelectionEvents = function(oldObjects, e) { 8 | // logger.trace("logFabricDebug", "fabric.Canvas.prototype._fireSelectionEvents", oldObjects, e); 9 | // this._fireSelectionEvents__old(oldObjects, e); 10 | // }; 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /lib/fabric+renderZones.js: -------------------------------------------------------------------------------- 1 | function installFabricUpgrade_fabricXrenderZones(fabric) { 2 | //logger.log("logFabric", "installFabricUpgrade_fabricXrenderZones"); 3 | 4 | //selection X renderZones: 5 | // give top priority to current zLevel 6 | // if nothing at current zLevel, search in neighboring zLevels 7 | // but don't go too deep or too high 8 | 9 | fabric.Canvas.prototype.findTarget = function (e, skipGroup) { 10 | if (this.skipTargetFind) { 11 | return; 12 | } 13 | 14 | var ignoreZoom = true, 15 | pointer = this.getPointer(e, ignoreZoom), 16 | activeObject = this._activeObject, 17 | aObjects = this.getActiveObjects(), 18 | activeTarget, activeTargetSubs, 19 | isTouch = fabric.util.isTouchEvent(e), 20 | shouldLookForActive = (aObjects.length > 1 && !skipGroup) || aObjects.length === 1; 21 | 22 | // first check current group (if one exists) 23 | // active group does not check sub targets like normal groups. 24 | // if active group just exits. 25 | this.targets = []; 26 | 27 | // if we hit the corner of an activeObject, let's return that. 28 | if (shouldLookForActive && activeObject._findTargetCorner(pointer, isTouch)) { 29 | return activeObject; 30 | } 31 | if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) { 32 | return activeObject; 33 | } 34 | if (aObjects.length === 1 && 35 | activeObject === this._searchPossibleTargets([activeObject], pointer)) { 36 | if (!this.preserveObjectStacking) { 37 | return activeObject; 38 | } 39 | else { 40 | activeTarget = activeObject; 41 | activeTargetSubs = this.targets; 42 | this.targets = []; 43 | } 44 | } 45 | //--- 46 | // var target = this._searchPossibleTargets(this._objects, pointer); 47 | //--- 48 | //+++ 49 | const arr_fObj__candidateSelectable = this.getArr_fObj__candidateSelectable(); 50 | var target = this._searchPossibleTargets(arr_fObj__candidateSelectable, pointer); 51 | //+++ 52 | if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) { 53 | target = activeTarget; 54 | this.targets = activeTargetSubs; 55 | } 56 | return target; 57 | }; 58 | 59 | fabric.Canvas.prototype.getArr_fObj__candidateSelectable = function () { 60 | var outArr; 61 | 62 | const dZLevel_number__deep = 5; 63 | const dZLevel_number__high = 0; 64 | 65 | if(fabricIntegration) { //SHU: /!\ global var 66 | 67 | const infiniteCanvas = fabricIntegration.infiniteCanvas; 68 | const zLevel_number__current = infiniteCanvas.range__zLevel_number__existing.current; 69 | 70 | const zLevel_number__min = zLevel_number__current - dZLevel_number__deep; 71 | const zLevel_number__max = zLevel_number__current + dZLevel_number__high; 72 | 73 | const arr_dict_zPixel__existing = Object.values(infiniteCanvas.dict_dict_zPixel__existing__nonPooled); 74 | 75 | const arr_dict_zPixel__filtered = arr_dict_zPixel__existing.filter((dict_zPixel) => { 76 | const zPixelCoords = dict_zPixel.zPixelCoords; 77 | const zLevel_number = zPixelCoords.zLevel.toNumber(); 78 | 79 | const isInteresting = (zLevel_number__min <= zLevel_number) && (zLevel_number < zLevel_number__max); 80 | return isInteresting; 81 | }); 82 | 83 | const dict_icObj__candidateSelectable = arr_dict_zPixel__filtered.reduce((acc, dict_zPixel) => { 84 | const zPixelCoords = dict_zPixel.zPixelCoords; 85 | const key__zPixelCoords = zPixelUtils.createKeyForZPixelCoords(zPixelCoords); 86 | const dict_renderZone = infiniteCanvas.dict_dict_renderZone__nonPooled[key__zPixelCoords]; 87 | 88 | if(dict_renderZone) { 89 | const dict_icObj = dict_renderZone.dict_icObj; 90 | Object.assign(acc, dict_icObj); 91 | } 92 | 93 | return acc; 94 | }, {}); 95 | 96 | const arr_icObj__candidateSelectable = Object.values(dict_icObj__candidateSelectable) 97 | //bugfix: rectangle selection breaks zChallenge (temporary) 98 | .filter((icObj) => !icObj.isLocked); 99 | 100 | // const arr_icObj__perfect = Object.values(infiniteCanvas.dict_icObj__perfect); 101 | // const arr_icObj__candidateSelectable = [...Object.values(dict_icObj__candidateSelectable) , ...arr_icObj__perfect]; 102 | 103 | const arr_fObj__candidateSelectable = arr_icObj__candidateSelectable.map((id__icObj) => { 104 | const fObj = fabricIntegration.getFObjFor_id__icObj(id__icObj); 105 | return fObj; 106 | }).filter((fObj) => (fObj != null)); 107 | 108 | outArr = arr_fObj__candidateSelectable; 109 | 110 | } else { 111 | outArr = this._objects; 112 | } 113 | 114 | return outArr; 115 | }; 116 | 117 | 118 | // fabric.Canvas.prototype._searchPossibleTargets = function(objects, pointer) { 119 | // // Cache all targets where their bounding box contains point. 120 | // var target, i = objects.length, subTarget; 121 | // // Do not check for currently grouped objects, since we check the parent group itself. 122 | // // until we call this function specifically to search inside the activeGroup 123 | // while (i--) { 124 | // var objToCheck = objects[i]; 125 | // var pointerToUse = objToCheck.group ? 126 | // this._normalizePointer(objToCheck.group, pointer) : pointer; 127 | // if (this._checkTarget(pointerToUse, objToCheck, pointer)) { 128 | // target = objects[i]; 129 | // if (target.subTargetCheck && target instanceof fabric.Group) { 130 | // subTarget = this._searchPossibleTargets(target._objects, pointer); 131 | // subTarget && this.targets.push(subTarget); 132 | // } 133 | // break; 134 | // } 135 | // } 136 | // return target; 137 | // }; 138 | 139 | // /** 140 | // * Checks point is inside the object. 141 | // * @param {Object} [pointer] x,y object of point coordinates we want to check. 142 | // * @param {fabric.Object} obj Object to test against 143 | // * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target. 144 | // * @return {Boolean} true if point is contained within an area of given object 145 | // * @private 146 | // */ 147 | // _checkTarget: function(pointer, obj, globalPointer) { 148 | // if (obj && 149 | // obj.visible && 150 | // obj.evented && 151 | // // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html 152 | // // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html 153 | // obj.containsPoint(pointer) 154 | // ) { 155 | // if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) { 156 | // var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y); 157 | // if (!isTransparent) { 158 | // return true; 159 | // } 160 | // } 161 | // else { 162 | // return true; 163 | // } 164 | // } 165 | // }, 166 | 167 | } 168 | -------------------------------------------------------------------------------- /lib/fabric+straightStroke.js: -------------------------------------------------------------------------------- 1 | function installFabricStraightStrokeUpgrade(fabricCanvas) { 2 | 3 | 4 | } 5 | 6 | (function () { 7 | /** 8 | * StraightStrokePencilBrush class (decorator) 9 | * @class fabric.StraightStrokePencilBrush 10 | * @extends fabric.PencilBrush 11 | * 12 | */ 13 | class StraightStrokePencilBrush extends DecorationUtils.createDecoratorClass(fabric.PencilBrush, { 14 | 15 | 16 | // drawStraightLine: true, 17 | // straightLineKey: "shiftKey", 18 | 19 | createMouseEvent__masquerade: function(eType, mouseEvent) { 20 | // logger.log("logSSPencilBrush", "createMouseEvent__masquerade", eType, mouseEvent); 21 | 22 | const straightLineKey = DecorationUtils.getWrappedObj(this).straightLineKey; 23 | // logger.log("logSSPencilBrush", "straightLineKey:", straightLineKey); 24 | 25 | //------DOES NOT WORK-------- 26 | // const dict__masquerade = Object.entries(mouseEvent).reduce((acc, [k, v]) => { 27 | // logger.log("logSSPencilBrush", "[k, v]:", [k, v]); 28 | 29 | // if(k == straightLineKey) { 30 | // logger.log("logSSPencilBrush", "k == straightLineKey"); 31 | // acc[k] = true; 32 | // } else { 33 | // acc[k] = v; 34 | // } 35 | 36 | // return acc; 37 | // }, {}); 38 | 39 | // const mouseEvent__masquerade = new MouseEvent(eType, dict__masquerade); 40 | // logger.log("logSSPencilBrush", "mouseEvent__masquerade:", mouseEvent__masquerade); 41 | //---------------------------- 42 | 43 | //WORKS 44 | const mouseEvent__masquerade = new MouseEvent(eType, { 45 | // isTrusted: false, 46 | isTrusted: true, 47 | 48 | altKey : mouseEvent.altKey, 49 | bubbles : mouseEvent.bubbles, 50 | button : mouseEvent.button, 51 | buttons : mouseEvent.buttons, 52 | cancelBubble : mouseEvent.cancelBubble, 53 | cancelable : mouseEvent.cancelable, 54 | clientX: mouseEvent.clientX, 55 | clientY: mouseEvent.clientY, 56 | composed: mouseEvent.composed, 57 | ctrlKey: mouseEvent.ctrlKey, 58 | currentTarget: mouseEvent.currentTarget, 59 | defaultPrevented: mouseEvent.defaultPrevented, 60 | detail: mouseEvent.detail, 61 | eventPhase: mouseEvent.eventPhase, 62 | fromElement: mouseEvent.fromElement, 63 | layerX: mouseEvent.layerX, 64 | layerY: mouseEvent.layerY, 65 | metaKey: mouseEvent.metaKey, 66 | movementX: mouseEvent.movementX, 67 | movementY: mouseEvent.movementY, 68 | offsetX: mouseEvent.offsetX, 69 | offsetY: mouseEvent.offsetY, 70 | pageX: mouseEvent.pageX, 71 | pageY: mouseEvent.pageY, 72 | relatedTarget: mouseEvent.relatedTarget, 73 | returnValue: mouseEvent.returnValue, 74 | screenX: mouseEvent.screenX, 75 | screenY: mouseEvent.screenY, 76 | shiftKey: mouseEvent.shiftKey, 77 | sourceCapabilities: mouseEvent.sourceCapabilities, 78 | srcElement: mouseEvent.srcElement, 79 | target: mouseEvent.target, 80 | timeStamp: mouseEvent.timeStamp, 81 | toElement: mouseEvent.toElement, 82 | view: mouseEvent.view, 83 | which: mouseEvent.which, 84 | x: mouseEvent.x, 85 | y: mouseEvent.y, 86 | 87 | //injection 88 | [straightLineKey]: true, 89 | }); 90 | 91 | return mouseEvent__masquerade; 92 | }, 93 | 94 | 95 | onMouseDown: function(pointer, options) { 96 | // logger.log("logSSPencilBrush", "onMouseDown:", pointer, options); 97 | 98 | //force options.e[this.straightLineKey]:true 99 | const mouseEvent__src = options.e; 100 | const mouseEvent__masquerade = this.createMouseEvent__masquerade(mouseEvent__src.type, mouseEvent__src); 101 | 102 | const options__masquerade = Object.assign({}, options); 103 | options__masquerade.e = mouseEvent__masquerade; 104 | 105 | DecorationUtils.getWrappedObj(this).onMouseDown(pointer, options__masquerade); 106 | }, 107 | 108 | onMouseMove: function(pointer, options) { 109 | 110 | //force options.e[this.straightLineKey]:true 111 | const mouseEvent__src = options.e; 112 | const mouseEvent__masquerade = this.createMouseEvent__masquerade(mouseEvent__src.type, mouseEvent__src); 113 | 114 | const options__masquerade = Object.assign({}, options); 115 | options__masquerade.e = mouseEvent__masquerade; 116 | 117 | DecorationUtils.getWrappedObj(this).onMouseMove(pointer, options__masquerade); 118 | }, 119 | 120 | // onMouseUp: function(options) { 121 | // DecorationUtils.getWrappedObj(this).onMouseUp(options); 122 | // }, 123 | 124 | 125 | }) {} 126 | 127 | StraightStrokePencilBrush.createInstance = function(fabricCanvas) { 128 | const brush__pencil = new fabric.PencilBrush(fabricCanvas); 129 | 130 | const brush__ssPencil = StraightStrokePencilBrush.decorate(brush__pencil, DecorationUtils.createInitializationDict({})); 131 | 132 | return brush__ssPencil; 133 | }; 134 | 135 | fabric.StraightStrokePencilBrush = StraightStrokePencilBrush; 136 | 137 | })(); -------------------------------------------------------------------------------- /lib/fabric+zIndex.js: -------------------------------------------------------------------------------- 1 | function installFabricCanvasUpgrade__zIndex(fabricCanvas) { 2 | // logger.log("logFabric", "installFabricCanvasUpgrade__zIndex"); 3 | 4 | fabricCanvas.render_below_zIndex = (function(ctx, zIndex__fabric) { 5 | // logger.trace("logFDZ", "fabricCanvas.render_below_zIndex", ctx, zIndex__fabric); 6 | 7 | const arr_fObj = this._objects; 8 | 9 | arr_fObj.slice(0,zIndex__fabric).forEach((fObj) => { 10 | fObj.render(ctx); 11 | }); 12 | 13 | }).bind(fabricCanvas); 14 | 15 | fabricCanvas.render_above_zIndex = (function(ctx, zIndex__fabric) { 16 | // logger.trace("logFDZ", "fabricCanvas.render_above_zIndex", ctx, zIndex__fabric); 17 | 18 | const arr_fObj = this._objects; 19 | 20 | arr_fObj.slice(zIndex__fabric).forEach((fObj) => { 21 | fObj.render(ctx); 22 | }); 23 | 24 | }).bind(fabricCanvas); 25 | 26 | fabricCanvas.render_between_zIndexes = (function(ctx, zIndex__fabric__1, zIndex__fabric__2) { 27 | // logger.trace("logFDZ", "fabricCanvas.render_between_zIndexes", ctx, zIndex__fabric__1, zIndex__fabric__2); 28 | 29 | const arr_fObj = this._objects; 30 | 31 | arr_fObj.slice(zIndex__fabric__1,zIndex__fabric__2).forEach((fObj) => { 32 | fObj.render(ctx); 33 | }); 34 | 35 | }).bind(fabricCanvas); 36 | 37 | } -------------------------------------------------------------------------------- /lib/fabric+zIndexPencilBrush.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 3 | class ZIndexPencilBrush extends DecorationUtils.createDecoratorClass(fabric.PencilBrush, { 4 | 5 | // zIndex: 0, 6 | 7 | zIndexWrapAround: function(ctx, dict_brushAndFunc) { 8 | const fabricCanvas = this.canvas; 9 | 10 | const brush = dict_brushAndFunc.brush; 11 | const func_in_between = dict_brushAndFunc.func; 12 | 13 | fabricCanvas.clearContext(ctx); 14 | fabricCanvas._renderBackground(ctx); 15 | fabricCanvas.render_below_zIndex(ctx, brush.zIndex); 16 | brush._setBrushStyles(ctx); 17 | func_in_between(ctx, brush); 18 | fabricCanvas.render_above_zIndex(ctx, brush.zIndex); 19 | }, 20 | 21 | onMouseDown: function (pointer, options) { 22 | const brush = this; 23 | 24 | const ctx = brush.canvas.contextContainer; 25 | brush.zIndexWrapAround(ctx, { 26 | brush: brush, 27 | func: function(ctx, brush) { 28 | DecorationUtils.getWrappedObj(brush).onMouseDown(pointer, options); 29 | }, 30 | }); 31 | 32 | //bugfix: remove little dots on contextTop 33 | brush.canvas.clearContext(brush.canvas.contextTop); 34 | }, 35 | 36 | onMouseMove: function (pointer, options) { 37 | 38 | //brush.canvas.contextTop has been replaced with brush.canvas.contextContainer 39 | function onMouseMove__old(brush, pointer, options) { 40 | if (!brush.canvas._isMainEvent(options.e)) { 41 | return; 42 | } 43 | brush.drawStraightLine = options.e[brush.straightLineKey]; 44 | if (brush.limitedToCanvasSize === true && brush._isOutSideCanvas(pointer)) { 45 | return; 46 | } 47 | if (brush._captureDrawingPath(pointer) && brush._points.length > 1) { 48 | if (brush.needsFullRender()) { 49 | //redraw curve 50 | //clear bottom canvas 51 | brush.canvas.clearContext(brush.canvas.contextContainer); 52 | brush._render(); 53 | } 54 | else { 55 | var points = brush._points, length = points.length, ctx = brush.canvas.contextContainer; 56 | // draw the curve update 57 | brush._saveAndTransform(ctx); 58 | if (brush.oldEnd) { 59 | ctx.beginPath(); 60 | ctx.moveTo(brush.oldEnd.x, brush.oldEnd.y); 61 | } 62 | brush.oldEnd = brush._drawSegment(ctx, points[length - 2], points[length - 1], true); 63 | ctx.stroke(); 64 | ctx.restore(); 65 | } 66 | } 67 | } 68 | 69 | //new routine 70 | const brush = this; 71 | const ctx = brush.canvas.contextContainer; 72 | brush.zIndexWrapAround(ctx, { 73 | brush: brush, 74 | func: function(ctx, brush) { 75 | onMouseMove__old(brush, pointer, options); 76 | }, 77 | }); 78 | 79 | }, 80 | 81 | needsFullRender: function() { 82 | return true; 83 | }, 84 | 85 | //same as fabric.PencilBrush but with a different ctx 86 | _prepareForDrawing: function (pointer) { 87 | logger.log("logZIndexPencilBrush", "_prepareForDrawing", pointer); 88 | const ctx = this.canvas.contextContainer; 89 | 90 | var p = new fabric.Point(pointer.x, pointer.y); 91 | this._reset(); 92 | this._addPoint(p); 93 | ctx.moveTo(p.x, p.y); 94 | }, 95 | 96 | 97 | _reset: function() { 98 | function func_reset(ctx, brush) { 99 | brush._points = []; 100 | brush._setBrushStyles(ctx); 101 | brush._setShadow(); 102 | brush._hasStraightLine = false; 103 | } 104 | 105 | const ctx = this.canvas.contextContainer; 106 | func_reset(ctx, this); 107 | }, 108 | 109 | 110 | _render: function (ctx_ignored) { 111 | logger.log("logFD", "ZIndexPencilBrush::_render"); 112 | 113 | const brush = this; 114 | const ctx = this.canvas.contextContainer; 115 | brush.zIndexWrapAround(ctx, { 116 | brush: brush, 117 | func: function(ctx, brush) { 118 | brush._saveAndTransform(ctx); 119 | DecorationUtils.getWrappedObj(brush)._render(ctx); 120 | ctx.restore(); 121 | }, 122 | }); 123 | }, 124 | 125 | 126 | _finalizeAndAddPath: function () { 127 | logger.trace("logFD", "ZIndexPencilBrush", "_finalizeAndAddPath"); 128 | const brush = this; 129 | 130 | if(brush.drawingBout != null) { 131 | logger.log("logComb", "Brush__DrawingBout__raw__freeDrawing::_finalizeAndAddPath:", "(", brush.drawingBout.session.id, ",", brush.drawingBout.id,")"); 132 | } 133 | 134 | var ctx = this.canvas.contextContainer; 135 | ctx.closePath(); 136 | if (this.decimate) { 137 | this._points = this.decimatePoints(this._points, this.decimate); 138 | } 139 | 140 | var pathData = this.convertPointsToSVGPath(this._points); 141 | if (this._isEmptySVGPath(pathData)) { 142 | // do not create 0 width/height paths, as they are 143 | // rendered inconsistently across browsers 144 | // Firefox 4, for example, renders a dot, 145 | // whereas Chrome 10 renders nothing 146 | this.canvas.requestRenderAll(); 147 | return; 148 | } 149 | 150 | var path = this.createPath(pathData); 151 | this.canvas.clearContext(ctx); 152 | // this.canvas.fire('before:path:created', { path: path, brush: brush, }); 153 | this.canvas.add(path); 154 | this.canvas.requestRenderAll(); 155 | path.setCoords(); 156 | this._resetShadow(); 157 | 158 | // fire event 'path' created 159 | // this.canvas.fire('path:created', { path: path, brush: brush, }); 160 | 161 | const dict__atomic = { path: path, brush: brush, }; 162 | return dict__atomic; 163 | }, 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | _addPoint: function(point) { 172 | logger.log("logFD", "ZIndexPencilBrush::_addPoint"); 173 | 174 | const result = DecorationUtils.getWrappedObj(this)._addPoint(point); 175 | if(result) { 176 | this.storeLatestPoint(point); 177 | } 178 | return result; 179 | }, 180 | 181 | storeLatestPoint: function(point) { 182 | logger.log("logFD", "ZIndexPencilBrush::storeLatestPoint"); 183 | this.__point__latest = point; 184 | }, 185 | 186 | 187 | 188 | 189 | }) {} 190 | 191 | ZIndexPencilBrush.createInstance = function(fabricCanvas) { 192 | const brush__pencil = new fabric.PencilBrush(fabricCanvas); 193 | const brush__zPencil = ZIndexPencilBrush.decorate(brush__pencil); 194 | return brush__zPencil; 195 | }; 196 | 197 | fabric.ZIndexPencilBrush = ZIndexPencilBrush; 198 | 199 | })(); -------------------------------------------------------------------------------- /lib/fabric+zPixelRect.js: -------------------------------------------------------------------------------- 1 | (function(global) { 2 | 3 | 'use strict'; 4 | 5 | var fabric = global.fabric || (global.fabric = { }); 6 | 7 | if (fabric.ZPixelRect) { 8 | fabric.warn('fabric.ZPixelRect is already defined.'); 9 | return; 10 | } 11 | 12 | /** 13 | * ZPixelRect class 14 | * @class fabric.ZPixelRect 15 | * @extends fabric.Rect 16 | * @see {@link fabric.ZPixelRect#initialize} for constructor definition 17 | */ 18 | fabric.ZPixelRect = fabric.util.createClass(fabric.Rect, /** @lends fabric.ZPixelRect.prototype */ { 19 | 20 | /** 21 | * Type of an object 22 | * @type String 23 | * @default 24 | */ 25 | type: 'zPixelRect', 26 | 27 | /** 28 | * zLevel of this zPixelRect 29 | * @type Number 30 | * @default 31 | */ 32 | zLevel: 0, 33 | 34 | /** 35 | * ix of this zPixelRect 36 | * @type Number 37 | * @default 38 | */ 39 | ix: 0, 40 | 41 | /** 42 | * iy of this zPixelRect 43 | * @type Number 44 | * @default 45 | */ 46 | iy: 0, 47 | 48 | /** 49 | * iwidth of this zPixelRect 50 | * @type Number 51 | * @default 52 | */ 53 | iwidth: 0, 54 | 55 | /** 56 | * iheight of this zPixelRect 57 | * @type Number 58 | * @default 59 | */ 60 | iheight: 0, 61 | 62 | 63 | 64 | cacheProperties: fabric.Rect.prototype.cacheProperties.concat('zLevel', 'ix','iy', 'iwidth', 'iheight'), 65 | 66 | /** 67 | * Constructor 68 | * @param {Object} [options] Options object 69 | * @return {Object} thisArg 70 | */ 71 | initialize: function(options) { 72 | this.callSuper('initialize', options); 73 | this._initStrokeWidth(); 74 | }, 75 | 76 | /** 77 | * Initializes strokeWidth attribute 78 | * @private 79 | */ 80 | _initStrokeWidth: function() { 81 | this.strokeWidth = 0; 82 | }, 83 | 84 | /** 85 | * @private 86 | * @param {String} key 87 | * @param {*} value 88 | * @return {fabric.ZPixelRect} thisArg 89 | */ 90 | _set: function(key, value) { 91 | this.callSuper('_set', key, value); 92 | 93 | if (key === 'zLevel') { 94 | this.setZLevel(value); 95 | } 96 | if (key === 'ix') { 97 | this.setIx(value); 98 | } 99 | if (key === 'iy') { 100 | this.setIy(value); 101 | } 102 | if (key === 'iwidth') { 103 | this.setIwidth(value); 104 | } 105 | if (key === 'iheight') { 106 | this.setIheight(value); 107 | } 108 | 109 | return this; 110 | }, 111 | 112 | /** 113 | * Returns object representation of an instance 114 | * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output 115 | * @return {Object} object representation of an instance 116 | */ 117 | toObject: function(propertiesToInclude) { 118 | return this.callSuper('toObject', ['zLevel','ix','iy','iwidth','iheight'].concat(propertiesToInclude)); 119 | }, 120 | 121 | /* _TO_SVG_START_ */ 122 | 123 | /** 124 | * Returns svg representation of an instance 125 | * @return {Array} an array of strings with the specific svg representation 126 | * of the instance 127 | */ 128 | _toSVG: function() { 129 | var svgString = ""; 130 | 131 | throw new Error("zPixelRect._toSVG", "not implemented yet (TODO)"); 132 | 133 | return svgString; 134 | }, 135 | /* _TO_SVG_END_ */ 136 | 137 | /** 138 | * @private 139 | * @param {CanvasRenderingContext2D} ctx context to render on 140 | */ 141 | _render: function(ctx) { 142 | // ctx.fillRect(this.x, this.y, this.width, this.height); 143 | // this._renderPaintInOrder(ctx); 144 | 145 | this.callSuper('_render', ctx); 146 | }, 147 | 148 | /** 149 | * Sets zLevel of an object 150 | * @return {fabric.ZPixelRect} thisArg 151 | */ 152 | setZLevel: function(value) { 153 | this.zLevel = value; 154 | return true; 155 | }, 156 | 157 | /** 158 | * Sets ix of an object 159 | * @return {fabric.ZPixelRect} thisArg 160 | */ 161 | setIx: function(value) { 162 | this.ix = value; 163 | return true; 164 | }, 165 | 166 | /** 167 | * Sets iy of an object 168 | * @return {fabric.ZPixelRect} thisArg 169 | */ 170 | setIy: function(value) { 171 | this.iy = value; 172 | return true; 173 | }, 174 | 175 | /** 176 | * Sets iwidth of an object 177 | * @return {fabric.ZPixelRect} thisArg 178 | */ 179 | setIwidth: function(value) { 180 | this.iwidth = value; 181 | return true; 182 | }, 183 | 184 | /** 185 | * Sets iheight of an object 186 | * @return {fabric.ZPixelRect} thisArg 187 | */ 188 | setIheight: function(value) { 189 | this.iheight = value; 190 | return true; 191 | }, 192 | 193 | /** 194 | * prevents strokeWidth from being changed 195 | * @return {fabric.ZPixelRect} thisArg 196 | */ 197 | setStrokeWidth: function(value) { 198 | //ignore 199 | return false; 200 | }, 201 | 202 | }); 203 | 204 | /* _FROM_SVG_START_ */ 205 | /** 206 | * List of attribute names to account for when parsing SVG element (used by {@link fabric.ZPixelRect.fromElement}) 207 | * @static 208 | * @memberOf fabric.ZPixelRect 209 | */ 210 | fabric.ZPixelRect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' ')); 211 | 212 | /** 213 | * Returns {@link fabric.ZPixelRect} instance from an SVG element 214 | * @static 215 | * @memberOf fabric.ZPixelRect 216 | * @param {SVGElement} element Element to parse 217 | * @param {Function} [callback] Options callback invoked after parsing is finished 218 | * @param {Object} [options] Options object 219 | * @throws {Error} If value of `r` attribute is missing or invalid 220 | */ 221 | fabric.ZPixelRect.fromElement = function(element, callback) { 222 | var parsedAttributes = fabric.parseAttributes(element, fabric.ZPixelRect.ATTRIBUTE_NAMES); 223 | 224 | if (!isValidRadius(parsedAttributes)) { 225 | throw new Error('value of `r` attribute is required and can not be negative'); 226 | } 227 | 228 | parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius; 229 | parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius; 230 | callback(new fabric.ZPixelRect(parsedAttributes)); 231 | }; 232 | /* _FROM_SVG_END_ */ 233 | 234 | /** 235 | * Returns {@link fabric.ZPixelRect} instance from an object representation 236 | * @static 237 | * @memberOf fabric.ZPixelRect 238 | * @param {Object} object Object to create an instance from 239 | * @param {function} [callback] invoked with new instance as first argument 240 | * @return {void} 241 | */ 242 | fabric.ZPixelRect.fromObject = function(object, callback) { 243 | fabric.Object._fromObject('ZPixelRect', object, callback); 244 | }; 245 | 246 | })(typeof exports !== 'undefined' ? exports : this); -------------------------------------------------------------------------------- /lib/fabricjs+curve3.js: -------------------------------------------------------------------------------- 1 | fabric.Curve3 = fabric.util.createClass(fabric.Object, { 2 | type: 'curve3', 3 | initialize: function (arr_point) { 4 | logger.log("logFabric+Curve3", "initialize", arr_point); 5 | 6 | this.arr_point = arr_point; 7 | 8 | // this.canvas.renderAll(); 9 | }, 10 | _render: function (ctx_in) { 11 | logger.log("logFabric+Curve3", "_render", ctx_in); 12 | 13 | const arr_x_y_x_y = this.arr_point.reduce((acc,point) => { 14 | acc.push(point.x); 15 | acc.push(point.y); 16 | return acc; 17 | }, []); 18 | 19 | const rgbaColor__stroke = new fabric.Color(this.stroke).toRgba(); 20 | 21 | function myRender(ctx) { 22 | 23 | //set width 24 | ctx.lineWidth = 3; 25 | // ctx.lineWidth = 2; 26 | 27 | //set color 28 | ctx.strokeStyle = rgbaColor__stroke; 29 | 30 | //bugfix: prevent canvas border being drawn 31 | ctx.beginPath(); 32 | ctx.closePath(); 33 | 34 | //draw curve 35 | ctx.moveTo(arr_x_y_x_y[0], arr_x_y_x_y[1]); // optionally move to first point 36 | ctx.curve(arr_x_y_x_y); // add cardinal spline to path 37 | ctx.stroke(); 38 | 39 | //draw zCurve 40 | // ctx.moveTo(arr_x_y_x_y[0], arr_x_y_x_y[1]); // optionally move to first point 41 | // ctx.zCurve(arr_x_y_x_y); 42 | } 43 | 44 | //raster render //SHU: it seems that this 'raster effect' is because this context is kinda copy/pasted 45 | const ctx__top = ctx_in; 46 | myRender(ctx__top); 47 | 48 | //vector render 49 | const ctx__container = this.canvas.contextContainer; 50 | myRender(ctx__container); 51 | 52 | }, 53 | }); -------------------------------------------------------------------------------- /lib/fabricjs+zCurve3.js: -------------------------------------------------------------------------------- 1 | fabric.Curve3 = fabric.util.createClass(fabric.Object, { 2 | type: 'curve3', 3 | initialize: function (arr_point) { 4 | logger.log("logFabric+Curve3", "initialize", arr_point); 5 | 6 | this.arr_point = arr_point; 7 | 8 | // this.canvas.renderAll(); 9 | }, 10 | _render: function (ctx_in) { 11 | logger.log("logFabric+Curve3", "_render", ctx_in); 12 | 13 | const arr_x_y_x_y = this.arr_point.reduce((acc,point) => { 14 | acc.push(point.x); 15 | acc.push(point.y); 16 | return acc; 17 | }, []); 18 | 19 | const rgbaColor__stroke = new fabric.Color(this.stroke).toRgba(); 20 | 21 | function myRender(ctx) { 22 | 23 | //set width 24 | ctx.lineWidth = 3; 25 | // ctx.lineWidth = 2; 26 | 27 | //set color 28 | ctx.strokeStyle = rgbaColor__stroke; 29 | 30 | //bugfix: prevent canvas border being drawn 31 | ctx.beginPath(); 32 | ctx.closePath(); 33 | 34 | //draw curve 35 | // ctx.moveTo(arr_x_y_x_y[0], arr_x_y_x_y[1]); // optionally move to first point 36 | // ctx.curve(arr_x_y_x_y); // add cardinal spline to path 37 | // ctx.stroke(); 38 | 39 | //draw zCurve 40 | ctx.moveTo(arr_x_y_x_y[0], arr_x_y_x_y[1]); // optionally move to first point 41 | ctx.zCurve(arr_x_y_x_y); 42 | } 43 | 44 | //raster render //SHU: it seems that this 'raster effect' is because this context is kinda copy/pasted 45 | const ctx__top = ctx_in; 46 | myRender(ctx__top); 47 | 48 | //vector render 49 | const ctx__container = this.canvas.contextContainer; 50 | myRender(ctx__container); 51 | 52 | }, 53 | }); -------------------------------------------------------------------------------- /lib/gamecontroller.min.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function n(o){if(e[o])return e[o].exports;var i=e[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(o,i,function(e){return t[e]}.bind(null,i));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";n.r(e);const o=(t,e="log")=>{"error"===e?console&&"function"==typeof console.error&&console.error(t):console&&"function"==typeof console.info&&console.info(t)},i=t=>o(t,"error"),s=()=>navigator.getGamepads&&"function"==typeof navigator.getGamepads||navigator.getGamepads&&"function"==typeof navigator.webkitGetGamepads||!1,a="Gamepad detected.",r="Gamepad disconnected.",c="Invalid property.",u="Invalid value. It must be a number between 0.00 and 1.00.",f="Button does not exist.",h="Unknown event name.",d="Your web browser does not support the Gamepad API.";var l={init:function(t){let e={id:t.index,buttons:t.buttons.length,axes:Math.floor(t.axes.length/2),axeValues:[],axeThreshold:[1],hapticActuator:null,vibrationMode:-1,vibration:!1,mapping:t.mapping,buttonActions:{},axesActions:{},pressed:{},set:function(t,e){if(["axeThreshold"].indexOf(t)>=0){if("axeThreshold"===t&&(!parseFloat(e)||e<0||e>1))return void i(u);this[t]=e}else i(c)},vibrate:function(t=.75,e=500){if(this.hapticActuator)switch(this.vibrationMode){case 0:return this.hapticActuator.pulse(t,e);case 1:return this.hapticActuator.playEffect("dual-rumble",{duration:e,strongMagnitude:t,weakMagnitude:t})}},triggerDirectionalAction:function(t,e,n,o,i){n&&o%2===i?(this.pressed[`${t}${e}`]||(this.pressed[`${t}${e}`]=!0,this.axesActions[e][t].before()),this.axesActions[e][t].action()):this.pressed[`${t}${e}`]&&o%2===i&&(delete this.pressed[`${t}${e}`],this.axesActions[e][t].after())},checkStatus:function(){let t={};const e=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():[];if(e.length){if(t=e[this.id],t.buttons)for(let e=0;e=this.axeThreshold[0],n,0),this.triggerDirectionalAction("left",i,o<=-this.axeThreshold[0],n,0),this.triggerDirectionalAction("down",i,o>=this.axeThreshold[0],n,1),this.triggerDirectionalAction("up",i,o<=-this.axeThreshold[0],n,1)}}}},associateEvent:function(t,e,n){if(t.match(/^button\d+$/)){const o=parseInt(t.match(/^button(\d+)$/)[1]);o>=0&&o=17?this.buttonActions[16][n]=e:i(f);else if(t.match(/^(up|down|left|right)(\d+)$/)){const o=t.match(/^(up|down|left|right)(\d+)$/),s=o[1],a=parseInt(o[2]);a>=0&&a{},after:()=>{},before:()=>{}};for(let t=0;t{},after:()=>{},before:()=>{}},left:{action:()=>{},after:()=>{},before:()=>{}},right:{action:()=>{},after:()=>{},before:()=>{}},up:{action:()=>{},after:()=>{},before:()=>{}}},e.axeValues[t]=[0,0];return t.hapticActuators?"function"==typeof t.hapticActuators.pulse?(e.hapticActuator=t.hapticActuators,e.vibrationMode=0,e.vibration=!0):t.hapticActuators[0]&&"function"==typeof t.hapticActuators[0].pulse&&(e.hapticActuator=t.hapticActuators[0],e.vibrationMode=0,e.vibration=!0):t.vibrationActuator&&"function"==typeof t.vibrationActuator.playEffect&&(e.hapticActuator=t.vibrationActuator,e.vibrationMode=1,e.vibration=!0),e}};const p={gamepads:{},axeThreshold:[1],isReady:s(),onConnect:function(){},onDisconnect:function(){},onBeforeCycle:function(){},onAfterCycle:function(){},getGamepads:function(){return this.gamepads},getGamepad:function(t){return this.gamepads[t]?this.gamepads[t]:null},set:function(t,e){if(["axeThreshold"].indexOf(t)>=0){if("axeThreshold"===t&&(!parseFloat(e)||e<0||e>1))return void i(u);if(this[t]=e,"axeThreshold"===t){const t=this.getGamepads(),e=Object.keys(t);for(let n=0;n0&&t(p.checkStatus)},init:function(){window.addEventListener("gamepadconnected",t=>{const e=t.gamepad||t.detail.gamepad;if(o(a),window.gamepads||(window.gamepads={}),e){if(!window.gamepads[e.index]){window.gamepads[e.index]=e;const t=l.init(e);t.set("axeThreshold",this.axeThreshold),this.gamepads[t.id]=t,this.onConnect(this.gamepads[t.id])}1===Object.keys(this.gamepads).length&&this.checkStatus()}}),window.addEventListener("gamepaddisconnected",t=>{const e=t.gamepad||t.detail.gamepad;o(r),e&&(delete window.gamepads[e.index],delete this.gamepads[e.index],this.onDisconnect(e.index))})},on:function(t,e){switch(t){case"connect":this.onConnect=e;break;case"disconnect":this.onDisconnect=e;break;case"beforeCycle":case"beforecycle":this.onBeforeCycle=e;break;case"afterCycle":case"aftercycle":this.onAfterCycle=e;break;default:i(h)}return this},off:function(t){switch(t){case"connect":this.onConnect=function(){};break;case"disconnect":this.onDisconnect=function(){};break;case"beforeCycle":case"beforecycle":this.onBeforeCycle=function(){};break;case"afterCycle":case"aftercycle":this.onAfterCycle=function(){};break;default:i(h)}return this}};p.init();var b=p;s()?window.gameControl=b:i(d)}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/action.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function a(o){if(e[o])return e[o].exports;var n=e[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,o){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(a.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)a.d(o,n,function(e){return t[e]}.bind(null,n));return o},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=6)}([function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ActionConfiguration=e.ActionMethods=void 0;var o=a(2),n=a(3),i=a(4),r=a(5);e.ActionMethods={},e.ActionMethods.Macro=r.default.Macro,e.ActionMethods.Toggle=function(t,e){for(var a,o=[];"\\endtoggle"!==(a=t.GetArgument(e));)o.push(new n.default(a,t.stack.env,t.configuration).mml());t.Push(t.create("node","maction",o,{actiontype:"toggle"}))},e.ActionMethods.Mathtip=function(t,e){var a=t.ParseArg(e),o=t.ParseArg(e);t.Push(t.create("node","maction",[a,o],{actiontype:"tooltip"}))},new i.CommandMap("action-macros",{toggle:"Toggle",mathtip:"Mathtip",texttip:["Macro","\\mathtip{#1}{\\text{#2}}",2]},e.ActionMethods),e.ActionConfiguration=o.Configuration.create("action",{handler:{macro:["action-macros"]}})},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.TexParser.default},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.base.BaseMethods.default},function(t,e,a){"use strict";a.r(e);var o=a(0),n=a(1);Object(o.combineWithMathJax)({_:{input:{tex:{action:{ActionConfiguration:n}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/amscd.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=11)}([function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(7),r=a(8),o=a(9),i=a(10),c={CD:function(e,t){e.Push(t);var a=e.itemFactory.create("array"),n=e.configuration.options.amscd;return a.setProperties({minw:e.stack.env.CD_minw||n.harrowsize,minh:e.stack.env.CD_minh||n.varrowsize}),a.arraydef={columnalign:"center",columnspacing:n.colspace,rowspacing:n.rowspace,displaystyle:!0},a},arrow:function(e,t){var a=e.string.charAt(e.i);if(!a.match(/[>":"\u2192","<":"\u2190",V:"\u2193",A:"\u2191"}[a],h=e.GetUpTo(t+a,a),b=e.GetUpTo(t+a,a);if(">"===a||"<"===a){if(s=e.create("token","mo",p,M),h||(h="\\kern "+u.getProperty("minw")),h||b){var _={width:".67em",lspace:".33em"};if(s=e.create("node","munderover",[s]),h){var x=new n.default(h,e.stack.env,e.configuration).mml(),g=e.create("node","mpadded",[x],_);i.default.setAttribute(g,"voffset",".1em"),i.default.setChild(s,s.over,g)}if(b){var v=new n.default(b,e.stack.env,e.configuration).mml();i.default.setChild(s,s.under,e.create("node","mpadded",[v],_))}e.configuration.options.amscd.hideHorizontalLabels&&(s=e.create("node","mpadded",s,{depth:0,height:".67em"}))}}else{var C=e.create("token","mo",f,M);s=C,(h||b)&&(s=e.create("node","mrow"),h&&i.default.appendChildren(s,[new n.default("\\scriptstyle\\llap{"+h+"}",e.stack.env,e.configuration).mml()]),C.texClass=o.TEXCLASS.ORD,i.default.appendChildren(s,[C]),b&&i.default.appendChildren(s,[new n.default("\\scriptstyle\\rlap{"+b+"}",e.stack.env,e.configuration).mml()]))}}s&&e.Push(s),c.cell(e,t)},cell:function(e,t){var a=e.stack.Top();(a.table||[]).length%2==0&&0===(a.row||[]).length&&e.Push(e.create("node","mpadded",[],{height:"8.5pt",depth:"2pt"})),e.Push(e.itemFactory.create("cell").setProperties({isEntry:!0,name:t}))},minCDarrowwidth:function(e,t){e.stack.env.CD_minw=e.GetDimen(t)},minCDarrowheight:function(e,t){e.stack.env.CD_minh=e.GetDimen(t)}};t.default=c},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AmsCdConfiguration=void 0;var n=a(3);a(4),t.AmsCdConfiguration=n.Configuration.create("amscd",{handler:{character:["amscd_special"],macro:["amscd_macros"],environment:["amscd_environment"]},options:{amscd:{colspace:"5pt",rowspace:"5pt",harrowsize:"2.75em",varrowsize:"1.75em",hideHorizontalLabels:!1}}})},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(5),r=a(6),o=a(1);new n.EnvironmentMap("amscd_environment",r.default.environment,{CD:"CD"},o.default),new n.CommandMap("amscd_macros",{minCDarrowwidth:"minCDarrowwidth",minCDarrowheight:"minCDarrowheight"},o.default),new n.MacroMap("amscd_special",{"@":"arrow"},o.default)},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.ParseMethods.default},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.TexParser.default},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Other=MathJax._.input.tex.base.BaseConfiguration.Other,t.BaseTags=MathJax._.input.tex.base.BaseConfiguration.BaseTags,t.BaseConfiguration=MathJax._.input.tex.base.BaseConfiguration.BaseConfiguration},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,t.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,t.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,t.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,t.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,t.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,t.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,t.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,t.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,t.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.NodeUtil.default},function(e,t,a){"use strict";a.r(t);var n=a(0),r=a(2),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{amscd:{AmsCdConfiguration:r,AmsCdMethods:o}}}}}),function(e,t,a){var r,o,i,c=MathJax.config.tex;if(c&&c.packages){var l=c.packages,s=l.indexOf(e);s>=0&&(l[s]=t),a&&c[e]&&(Object(n.combineConfig)(c,(r={},o=t,i=c[e],o in r?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i,r)),delete c[e])}}("amsCd","amscd",!0)}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/autoload.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function o(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,t,a){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(a,r,function(t){return e[t]}.bind(null,r));return a},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=8)}([function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,o){"use strict";var a=this&&this.__read||function(e,t){var o="function"==typeof Symbol&&e[Symbol.iterator];if(!o)return e;var a,r,n=o.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(a=n.next()).done;)i.push(a.value)}catch(e){r={error:e}}finally{try{a&&!a.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}return i},r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,o=t&&e[t],a=0;if(o)return o.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&a>=e.length&&(e=void 0),{value:e&&e[a++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.AutoloadConfiguration=void 0;var n=o(2),i=o(3),l=o(4),u=o(5),c=o(6),s=o(7);function p(e,t,o,n){var i,l,s,p;if(c.Package.packages.has(e.options.require.prefix+o)){var x=e.options.autoload[o],M=a(2===x.length&&Array.isArray(x[0])?x:[x,[]],2),b=M[0],h=M[1];try{for(var y=r(b),m=y.next();!m.done;m=y.next()){var _=m.value;f.remove(_)}}catch(e){i={error:e}}finally{try{m&&!m.done&&(l=y.return)&&l.call(y)}finally{if(i)throw i.error}}try{for(var g=r(h),v=g.next();!v.done;v=g.next()){var O=v.value;d.remove(O)}}catch(e){s={error:e}}finally{try{v&&!v.done&&(p=g.return)&&p.call(g)}finally{if(s)throw s.error}}e.string=(n?t:"\\begin{"+t.slice(1)+"}")+e.string.slice(e.i),e.i=0}u.RequireLoad(e,o)}var f=new i.CommandMap("autoload-macros",{},{}),d=new i.CommandMap("autoload-environments",{},{});t.AutoloadConfiguration=n.Configuration.create("autoload",{handler:{macro:["autoload-macros"],environment:["autoload-environments"]},options:{autoload:s.expandable({action:["toggle","mathtip","texttip"],amscd:[[],["CD"]],bbox:["bbox"],boldsymbol:["boldsymbol"],braket:["bra","ket","braket","set","Bra","Ket","Braket","Set","ketbra","Ketbra"],bussproofs:[[],["prooftree"]],cancel:["cancel","bcancel","xcancel","cancelto"],color:["color","definecolor","textcolor","colorbox","fcolorbox"],enclose:["enclose"],extpfeil:["xtwoheadrightarrow","xtwoheadleftarrow","xmapsto","xlongequal","xtofrom","Newextarrow"],html:["href","class","style","cssId"],mhchem:["ce","pu"],newcommand:["newcommand","renewcommand","newenvironment","renewenvironment","def","let"],unicode:["unicode"],verb:["verb"]})},config:function(e,t){var o,n,i,c,s,x,M=t.parseOptions,b=M.handlers.get("macro"),h=M.handlers.get("environment"),y=M.options.autoload;M.packageData.set("autoload",{Autoload:p});try{for(var m=r(Object.keys(y)),_=m.next();!_.done;_=m.next()){var g=_.value,v=y[g],O=a(2===v.length&&Array.isArray(v[0])?v:[v,[]],2),J=O[0],C=O[1];try{for(var P=(i=void 0,r(J)),S=P.next();!S.done;S=P.next()){var w=S.value;b.lookup(w)&&"color"!==w||f.add(w,new l.Macro(w,p,[g,!0]))}}catch(e){i={error:e}}finally{try{S&&!S.done&&(c=P.return)&&c.call(P)}finally{if(i)throw i.error}}try{for(var k=(s=void 0,r(C)),q=k.next();!q.done;q=k.next()){var j=q.value;h.lookup(j)||d.add(j,new l.Macro(j,p,[g,!1]))}}catch(e){s={error:e}}finally{try{q&&!q.done&&(x=k.return)&&x.call(k)}finally{if(s)throw s.error}}}}catch(e){o={error:e}}finally{try{_&&!_.done&&(n=m.return)&&n.call(m)}finally{if(o)throw o.error}}M.packageData.get("require")||u.RequireConfiguration.config(e,t)},init:function(e){e.options.require||s.defaultOptions(e.options,u.RequireConfiguration.options)},priority:10})},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Symbol=MathJax._.input.tex.Symbol.Symbol,t.Macro=MathJax._.input.tex.Symbol.Macro},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RequireLoad=MathJax._.input.tex.require.RequireConfiguration.RequireLoad,t.RequireMethods=MathJax._.input.tex.require.RequireConfiguration.RequireMethods,t.options=MathJax._.input.tex.require.RequireConfiguration.options,t.RequireConfiguration=MathJax._.input.tex.require.RequireConfiguration.RequireConfiguration},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PackageError=MathJax._.components.package.PackageError,t.Package=MathJax._.components.package.Package},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APPEND=MathJax._.util.Options.APPEND,t.REMOVE=MathJax._.util.Options.REMOVE,t.Expandable=MathJax._.util.Options.Expandable,t.expandable=MathJax._.util.Options.expandable,t.makeArray=MathJax._.util.Options.makeArray,t.keys=MathJax._.util.Options.keys,t.copy=MathJax._.util.Options.copy,t.insert=MathJax._.util.Options.insert,t.defaultOptions=MathJax._.util.Options.defaultOptions,t.userOptions=MathJax._.util.Options.userOptions,t.selectOptions=MathJax._.util.Options.selectOptions,t.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,t.separateOptions=MathJax._.util.Options.separateOptions},function(e,t,o){"use strict";o.r(t);var a=o(0),r=o(1);Object(a.combineWithMathJax)({_:{input:{tex:{autoload:{AutoloadConfiguration:r}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/bbox.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function a(o){if(e[o])return e[o].exports;var n=e[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,o){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(a.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)a.d(o,n,function(e){return t[e]}.bind(null,n));return o},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=5)}([function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BboxConfiguration=e.BboxMethods=void 0;var o=a(2),n=a(3),i=a(4);e.BboxMethods={},e.BboxMethods.BBox=function(t,e){for(var a,o,n,l=t.GetBrackets(e,""),c=t.ParseArg(e),p=l.split(/,/),f=0,s=p.length;f=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.BoldsymbolConfiguration=e.rewriteBoldTokens=e.createBoldToken=e.BoldsymbolMethods=void 0;var n=o(2),r=o(3),i=o(4),l=o(5),u=o(6),s={};function c(t,e,o,a){var n=u.NodeFactory.createToken(t,e,o,a);return"mtext"!==e&&t.configuration.parser.stack.env.boldsymbol&&(r.default.setProperty(n,"fixBold",!0),t.configuration.addNode("fixBold",n)),n}function d(t){var e,o;try{for(var n=a(t.data.getList("fixBold")),l=n.next();!l.done;l=n.next()){var u=l.value;if(r.default.getProperty(u,"fixBold")){var c=r.default.getAttribute(u,"mathvariant");null==c?r.default.setAttribute(u,"mathvariant",i.TexConstant.Variant.BOLD):r.default.setAttribute(u,"mathvariant",s[c]||c),r.default.removeProperties(u,"fixBold")}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(o=n.return)&&o.call(n)}finally{if(e)throw e.error}}}s[i.TexConstant.Variant.NORMAL]=i.TexConstant.Variant.BOLD,s[i.TexConstant.Variant.ITALIC]=i.TexConstant.Variant.BOLDITALIC,s[i.TexConstant.Variant.FRAKTUR]=i.TexConstant.Variant.BOLDFRAKTUR,s[i.TexConstant.Variant.SCRIPT]=i.TexConstant.Variant.BOLDSCRIPT,s[i.TexConstant.Variant.SANSSERIF]=i.TexConstant.Variant.BOLDSANSSERIF,s["-tex-calligraphic"]="-tex-bold-calligraphic",s["-tex-oldstyle"]="-tex-bold-oldstyle",e.BoldsymbolMethods={},e.BoldsymbolMethods.Boldsymbol=function(t,e){var o=t.stack.env.boldsymbol;t.stack.env.boldsymbol=!0;var a=t.ParseArg(e);t.stack.env.boldsymbol=o,t.Push(a)},new l.CommandMap("boldsymbol",{boldsymbol:"Boldsymbol"},e.BoldsymbolMethods),e.createBoldToken=c,e.rewriteBoldTokens=d,e.BoldsymbolConfiguration=n.Configuration.create("boldsymbol",{handler:{macro:["boldsymbol"]},nodes:{token:c},postprocessors:[d]})},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NodeFactory=MathJax._.input.tex.NodeFactory.NodeFactory},function(t,e,o){"use strict";o.r(e);var a=o(0),n=o(1);Object(a.combineWithMathJax)({_:{input:{tex:{boldsymbol:{BoldsymbolConfiguration:n}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/braket.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function r(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,a){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(a,o,function(t){return e[t]}.bind(null,o));return a},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=12)}([function(e,t,r){"use strict";var a,o=this&&this.__extends||(a=function(e,t){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.BraketItem=void 0;var n=r(6),i=r(2),c=r(7),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),Object.defineProperty(t.prototype,"kind",{get:function(){return"braket"},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isOpen",{get:function(){return!0},enumerable:!1,configurable:!0}),t.prototype.checkItem=function(t){return t.isKind("close")?[[this.factory.create("mml",this.toMml())],!0]:t.isKind("mml")?(this.Push(t.toMml()),this.getProperty("single")?[[this.toMml()],!0]:n.BaseItem.fail):e.prototype.checkItem.call(this,t)},t.prototype.toMml=function(){var t=e.prototype.toMml.call(this),r=this.getProperty("open"),a=this.getProperty("close");if(this.getProperty("stretchy"))return c.default.fenced(this.factory.configuration,r,t,a);var o={fence:!0,stretchy:!1,symmetric:!0,texClass:i.TEXCLASS.OPEN},n=this.create("token","mo",o,r);o.texClass=i.TEXCLASS.CLOSE;var u=this.create("token","mo",o,a);return this.create("node","mrow",[n,t,u],{open:r,close:a,texClass:i.TEXCLASS.INNER})},t}(n.BaseItem);t.BraketItem=u},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=r(10),o=r(2),n=r(11),i={};i.Macro=a.default.Macro,i.Braket=function(e,t,r,a,o,i){var c=e.GetNext();if(""===c)throw new n.default("MissingArgFor","Missing argument for %1",e.currentCS);var u=!0;"{"===c&&(e.i++,u=!1),e.Push(e.itemFactory.create("braket").setProperties({barmax:i,barcount:0,open:r,close:a,stretchy:o,single:u}))},i.Bar=function(e,t){var r="|"===t?"|":"\u2225",a=e.stack.Top();if("braket"!==a.kind||a.getProperty("barcount")>=a.getProperty("barmax")){var n=e.create("token","mo",{texClass:o.TEXCLASS.ORD,stretchy:!1},r);e.Push(n)}else{if("|"===r&&"|"===e.GetNext()&&(e.i++,r="\u2225"),a.getProperty("stretchy")){var i=e.create("node","TeXAtom",[],{texClass:o.TEXCLASS.CLOSE});e.Push(i),a.setProperty("barcount",a.getProperty("barcount")+1),i=e.create("token","mo",{stretchy:!0,braketbar:!0},r),e.Push(i),i=e.create("node","TeXAtom",[],{texClass:o.TEXCLASS.OPEN}),e.Push(i)}else{var c=e.create("token","mo",{stretchy:!1,braketbar:!0},r);e.Push(c)}}},t.default=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,t.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,t.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,t.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,t.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,t.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,t.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,t.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,t.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,t.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,r){"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.BraketConfiguration=void 0;var o=r(5),n=r(0);r(8),t.BraketConfiguration=o.Configuration.create("braket",{handler:{character:["Braket-characters"],macro:["Braket-macros"]},items:(a={},a[n.BraketItem.prototype.kind]=n.BraketItem,a)})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MmlStack=MathJax._.input.tex.StackItem.MmlStack,t.BaseItem=MathJax._.input.tex.StackItem.BaseItem},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=r(9),o=r(1);new a.CommandMap("Braket-macros",{bra:["Macro","{\\langle {#1} \\vert}",1],ket:["Macro","{\\vert {#1} \\rangle}",1],braket:["Braket","\u27e8","\u27e9",!1,1/0],set:["Braket","{","}",!1,1],Bra:["Macro","{\\left\\langle {#1} \\right\\vert}",1],Ket:["Macro","{\\left\\vert {#1} \\right\\rangle}",1],Braket:["Braket","\u27e8","\u27e9",!0,1/0],Set:["Braket","{","}",!0,1],ketbra:["Macro","{\\vert {#1} \\rangle\\langle {#2} \\vert}",2],Ketbra:["Macro","{\\left\\vert {#1} \\right\\rangle\\left\\langle {#2} \\right\\vert}",2],"|":"Bar"},o.default),new a.MacroMap("Braket-characters",{"|":"Bar"},o.default)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.base.BaseMethods.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.TexError.default},function(e,t,r){"use strict";r.r(t);var a=r(3),o=r(4),n=r(0),i=r(1);Object(a.combineWithMathJax)({_:{input:{tex:{braket:{BraketConfiguration:o,BraketItems:n,BraketMethods:i}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/cancel.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(a,o,function(t){return e[t]}.bind(null,o));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CancelConfiguration=t.CancelMethods=void 0;var a=n(2),o=n(3),i=n(4),r=n(5),c=n(6);t.CancelMethods={},t.CancelMethods.Cancel=function(e,t,n){var a=e.GetBrackets(t,""),o=e.ParseArg(t),i=r.default.keyvalOptions(a,c.ENCLOSE_OPTIONS);i.notation=n,e.Push(e.create("node","menclose",[o],i))},t.CancelMethods.CancelTo=function(e,t){var n=e.GetBrackets(t,""),a=e.ParseArg(t),i=e.ParseArg(t),u=r.default.keyvalOptions(n,c.ENCLOSE_OPTIONS);u.notation=[o.TexConstant.Notation.UPDIAGONALSTRIKE,o.TexConstant.Notation.UPDIAGONALARROW,o.TexConstant.Notation.NORTHEASTARROW].join(" "),a=e.create("node","mpadded",[a],{depth:"-.1em",height:"+.1em",voffset:".1em"}),e.Push(e.create("node","msup",[e.create("node","menclose",[i],u),a]))},new i.CommandMap("cancel",{cancel:["Cancel",o.TexConstant.Notation.UPDIAGONALSTRIKE],bcancel:["Cancel",o.TexConstant.Notation.DOWNDIAGONALSTRIKE],xcancel:["Cancel",o.TexConstant.Notation.UPDIAGONALSTRIKE+" "+o.TexConstant.Notation.DOWNDIAGONALSTRIKE],cancelto:"CancelTo"},t.CancelMethods),t.CancelConfiguration=a.Configuration.create("cancel",{handler:{macro:["cancel"]}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ENCLOSE_OPTIONS=MathJax._.input.tex.enclose.EncloseConfiguration.ENCLOSE_OPTIONS,t.EncloseMethods=MathJax._.input.tex.enclose.EncloseConfiguration.EncloseMethods,t.EncloseConfiguration=MathJax._.input.tex.enclose.EncloseConfiguration.EncloseConfiguration},function(e,t,n){"use strict";n.r(t);var a=n(0),o=n(1);Object(a.combineWithMathJax)({_:{input:{tex:{cancel:{CancelConfiguration:o}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/colorv2.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function o(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=t,o.c=e,o.d=function(t,e,a){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)o.d(a,n,function(e){return t[e]}.bind(null,n));return a},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=4)}([function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorConfiguration=e.ColorV2Methods=void 0;var a=o(2),n=o(3);e.ColorV2Methods={Color:function(t,e){var o=t.GetArgument(e),a=t.stack.env.color;t.stack.env.color=o;var n=t.ParseArg(e);a?t.stack.env.color=a:delete t.stack.env.color;var r=t.create("node","mstyle",[n],{mathcolor:o});t.Push(r)}},new a.CommandMap("colorv2",{color:"Color"},e.ColorV2Methods),e.ColorConfiguration=n.Configuration.create("colorv2",{handler:{macro:["colorv2"]}})},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,o){"use strict";o.r(e);var a=o(0),n=o(1);Object(a.combineWithMathJax)({_:{input:{tex:{colorv2:{ColorV2Configuration:n}}}}}),function(t,e,o){var n,r,i,c=MathJax.config.tex;if(c&&c.packages){var l=c.packages,u=l.indexOf(t);u>=0&&(l[u]=e),o&&c[t]&&(Object(a.combineConfig)(c,(n={},r=e,i=c[t],r in n?Object.defineProperty(n,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[r]=i,n)),delete c[t])}}("colorV2","colorv2",!1)}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/configmacros.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function a(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)a.d(n,o,function(e){return t[e]}.bind(null,o));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=7)}([function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){"use strict";var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,a=e&&t[e],n=0;if(a)return a.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.ConfigMacrosConfiguration=void 0;var o=a(2),i=a(3),r=a(4),u=a(5),c=a(6);e.ConfigMacrosConfiguration=o.Configuration.create("configmacros",{init:function(t){new r.CommandMap("configmacros-map",{},{}),t.append(o.Configuration.local({handler:{macro:["configmacros-map"]},priority:3}))},config:function(t,e){var a,o,i=e.parseOptions.handlers.retrieve("configmacros-map"),r=e.parseOptions.options.macros;try{for(var l=n(Object.keys(r)),p=l.next();!p.done;p=l.next()){var s=p.value,f="string"==typeof r[s]?[r[s]]:r[s],M=Array.isArray(f[2])?new u.Macro(s,c.default.MacroWithTemplate,f.slice(0,2).concat(f[2])):new u.Macro(s,c.default.Macro,f);i.add(s,M)}}catch(t){a={error:t}}finally{try{p&&!p.done&&(o=l.return)&&o.call(l)}finally{if(a)throw a.error}}},options:{macros:i.expandable({})}})},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Symbol=MathJax._.input.tex.Symbol.Symbol,e.Macro=MathJax._.input.tex.Symbol.Macro},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.newcommand.NewcommandMethods.default},function(t,e,a){"use strict";a.r(e);var n=a(0),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{configmacros:{ConfigMacrosConfiguration:o}}}}}),function(t,e,a){var o,i,r,u=MathJax.config.tex;if(u&&u.packages){var c=u.packages,l=c.indexOf(t);l>=0&&(c[l]=e),a&&u[t]&&(Object(n.combineConfig)(u,(o={},i=e,r=u[t],i in o?Object.defineProperty(o,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):o[i]=r,o)),delete u[t])}}("configMacros","configmacros",!1)}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/enclose.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function a(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)a.d(n,o,function(t){return e[t]}.bind(null,o));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=5)}([function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EncloseConfiguration=t.EncloseMethods=t.ENCLOSE_OPTIONS=void 0;var n=a(2),o=a(3),r=a(4);t.ENCLOSE_OPTIONS={"data-arrowhead":1,color:1,mathcolor:1,background:1,mathbackground:1,"data-padding":1,"data-thickness":1},t.EncloseMethods={},t.EncloseMethods.Enclose=function(e,a){var n=e.GetArgument(a).replace(/,/g," "),o=e.GetBrackets(a,""),i=e.ParseArg(a),u=r.default.keyvalOptions(o,t.ENCLOSE_OPTIONS);u.notation=n,e.Push(e.create("node","menclose",[i],u))},new o.CommandMap("enclose",{enclose:"Enclose"},t.EncloseMethods),t.EncloseConfiguration=n.Configuration.create("enclose",{handler:{macro:["enclose"]}})},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,a){"use strict";a.r(t);var n=a(0),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{enclose:{EncloseConfiguration:o}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/extpfeil.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function a(o){if(e[o])return e[o].exports;var n=e[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,o){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(a.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)a.d(o,n,function(e){return t[e]}.bind(null,n));return o},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=8)}([function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ExtpfeilConfiguration=e.ExtpfeilMethods=void 0;var o=a(2),n=a(3),r=a(4),i=a(5),u=a(6),l=a(7);e.ExtpfeilMethods={},e.ExtpfeilMethods.xArrow=r.AmsMethods.xArrow,e.ExtpfeilMethods.NewExtArrow=function(t,a){var o=t.GetArgument(a),n=t.GetArgument(a),r=t.GetArgument(a);if(!o.match(/^\\([a-z]+|.)$/i))throw new l.default("NewextarrowArg1","First argument to %1 must be a control sequence name",a);if(!n.match(/^(\d+),(\d+)$/))throw new l.default("NewextarrowArg2","Second argument to %1 must be two integers separated by a comma",a);if(!r.match(/^(\d+|0x[0-9A-F]+)$/i))throw new l.default("NewextarrowArg3","Third argument to %1 must be a unicode character number",a);o=o.substr(1);var u=n.split(",");i.default.addMacro(t,o,e.ExtpfeilMethods.xArrow,[parseInt(r),parseInt(u[0]),parseInt(u[1])])},new n.CommandMap("extpfeil",{xtwoheadrightarrow:["xArrow",8608,12,16],xtwoheadleftarrow:["xArrow",8606,17,13],xmapsto:["xArrow",8614,6,7],xlongequal:["xArrow",61,7,7],xtofrom:["xArrow",8644,12,12],Newextarrow:"NewExtArrow"},e.ExtpfeilMethods);e.ExtpfeilConfiguration=o.Configuration.create("extpfeil",{handler:{macro:["extpfeil"]},init:function(t){u.NewcommandConfiguration.init(t)}})},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AmsMethods=MathJax._.input.tex.ams.AmsMethods.AmsMethods,e.NEW_OPS=MathJax._.input.tex.ams.AmsMethods.NEW_OPS},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.newcommand.NewcommandUtil.default},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NewcommandConfiguration=MathJax._.input.tex.newcommand.NewcommandConfiguration.NewcommandConfiguration},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){"use strict";a.r(e);var o=a(0),n=a(1);Object(o.combineWithMathJax)({_:{input:{tex:{extpfeil:{ExtpfeilConfiguration:n}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/html.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function a(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)a.d(n,r,function(e){return t[e]}.bind(null,r));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=6)}([function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(5),r={Href:function(t,e){var a=t.GetArgument(e),r=o(t,e);n.default.setAttribute(r,"href",a),t.Push(r)},Class:function(t,e){var a=t.GetArgument(e),r=o(t,e),u=n.default.getAttribute(r,"class");u&&(a=u+" "+a),n.default.setAttribute(r,"class",a),t.Push(r)},Style:function(t,e){var a=t.GetArgument(e),r=o(t,e),u=n.default.getAttribute(r,"style");u&&(";"!==a.charAt(a.length-1)&&(a+=";"),a=u+" "+a),n.default.setAttribute(r,"style",a),t.Push(r)},Id:function(t,e){var a=t.GetArgument(e),r=o(t,e);n.default.setAttribute(r,"id",a),t.Push(r)}},o=function(t,e){var a=t.ParseArg(e);if(!n.default.isInferred(a))return a;var r=n.default.getChildren(a);if(1===r.length)return r[0];var o=t.create("node","mrow");return n.default.copyChildren(a,o),n.default.copyAttributes(a,o),o};e.default=r},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlConfiguration=void 0;var n=a(3),r=a(4),o=a(0);new r.CommandMap("html_macros",{href:"Href",class:"Class",style:"Style",cssId:"Id"},o.default),e.HtmlConfiguration=n.Configuration.create("html",{handler:{macro:["html_macros"]}})},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,a){"use strict";a.r(e);var n=a(1),r=a(2),o=a(0);Object(n.combineWithMathJax)({_:{input:{tex:{html:{HtmlConfiguration:r,HtmlMethods:o}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/noerrors.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=3)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NoErrorsConfiguration=void 0;var o=n(2);t.NoErrorsConfiguration=o.Configuration.create("noerrors",{nodes:{error:function(e,t,n,o){var r=e.create("token","mtext",{},o.replace(/\n/g," "));return e.create("node","merror",[r],{"data-mjx-error":t,title:t})}}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,n){"use strict";n.r(t);var o=n(0),r=n(1);Object(o.combineWithMathJax)({_:{input:{tex:{noerrors:{NoErrorsConfiguration:r}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/noundefined.js: -------------------------------------------------------------------------------- 1 | !function(e){var n={};function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:o})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)t.d(o,r,function(n){return e[n]}.bind(null,r));return o},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=3)}([function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.isObject=MathJax._.components.global.isObject,n.combineConfig=MathJax._.components.global.combineConfig,n.combineDefaults=MathJax._.components.global.combineDefaults,n.combineWithMathJax=MathJax._.components.global.combineWithMathJax,n.MathJax=MathJax._.components.global.MathJax},function(e,n,t){"use strict";var o=this&&this.__values||function(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],o=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0}),n.NoUndefinedConfiguration=void 0;var r=t(2);n.NoUndefinedConfiguration=r.Configuration.create("noundefined",{fallback:{macro:function(e,n){var t,r,i=e.create("text","\\"+n),a=e.options.noundefined||{},u={};try{for(var f=o(["color","background","size"]),c=f.next();!c.done;c=f.next()){var l=c.value;a[l]&&(u["math"+l]=a[l])}}catch(e){t={error:e}}finally{try{c&&!c.done&&(r=f.return)&&r.call(f)}finally{if(t)throw t.error}}e.Push(e.create("node","mtext",[],u,i))}},options:{noundefined:{color:"red",background:"",size:""}},priority:3})},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Configuration=MathJax._.input.tex.Configuration.Configuration,n.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,n.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,n,t){"use strict";t.r(n);var o=t(0),r=t(1);Object(o.combineWithMathJax)({_:{input:{tex:{noundefined:{NoUndefinedConfiguration:r}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/require.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function a(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=e,a.c=t,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)a.d(r,o,function(t){return e[t]}.bind(null,o));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=9)}([function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,a){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,a=t&&e[t],r=0;if(a)return a.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var r,o,n=a.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=n.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(a=n.return)&&a.call(n)}finally{if(o)throw o.error}}return i},n=this&&this.__spread||function(){for(var e=[],t=0;t=0&&(s[f]=n),o&&u[t]&&(Object(e.combineConfig)(u,(a={},r=n,i=u[t],r in a?Object.defineProperty(a,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):a[r]=i,a)),delete u[t])}}("tagFormat","tagformat",!0)}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/unicode.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function a(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)a.d(n,o,function(e){return t[e]}.bind(null,o));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=8)}([function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UnicodeConfiguration=e.UnicodeMethods=void 0;var n=a(2),o=a(3),i=a(4),r=a(5),u=a(6),c=a(7);e.UnicodeMethods={};var l={};e.UnicodeMethods.Unicode=function(t,e){var a=t.GetBrackets(e),n=null,i=null;a&&(a.replace(/ /g,"").match(/^(\d+(\.\d*)?|\.\d+),(\d+(\.\d*)?|\.\d+)$/)?(n=a.replace(/ /g,"").split(/,/),i=t.GetBrackets(e)):i=a);var d=r.default.trimSpaces(t.GetArgument(e)).replace(/^0x/,"x");if(!d.match(/^(x[0-9A-Fa-f]+|[0-9]+)$/))throw new o.default("BadUnicode","Argument to \\unicode must be a number");var p=parseInt(d.match(/^x/)?"0"+d:d);l[p]?i||(i=l[p][2]):l[p]=[800,200,i,p],n&&(l[p][0]=Math.floor(1e3*parseFloat(n[0])),l[p][1]=Math.floor(1e3*parseFloat(n[1])));var s=t.stack.env.font,f={};i?(l[p][2]=f.fontfamily=i.replace(/'/g,"'"),s&&(s.match(/bold/)&&(f.fontweight="bold"),s.match(/italic|-mathit/)&&(f.fontstyle="italic"))):s&&(f.mathvariant=s);var M=t.create("token","mtext",f,c.numeric(d));u.default.setProperty(M,"unicode",!0),t.Push(M)},new i.CommandMap("unicode",{unicode:"Unicode"},e.UnicodeMethods),e.UnicodeConfiguration=n.Configuration.create("unicode",{handler:{macro:["unicode"]}})},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(t,e,a){"use strict";a.r(e);var n=a(0),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{unicode:{UnicodeConfiguration:o}}}}})}]); -------------------------------------------------------------------------------- /lib/input/tex/extensions/verb.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function n(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,a){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(a,r,function(e){return t[e]}.bind(null,r));return a},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=6)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.VerbConfiguration=e.VerbMethods=void 0;var a=n(2),r=n(3),o=n(4),i=n(5);e.VerbMethods={},e.VerbMethods.Verb=function(t,e){var n=t.GetNext(),a=++t.i;if(""===n)throw new i.default("MissingArgFor","Missing argument for %1",e);for(;t.iparseInt(a[1],10)):F=!1);return F}function M(a){null===H&&(H=!!a.document.fonts);return H} 8 | function N(a,c){var b=a.style,g=a.weight;if(null===G){var e=document.createElement("div");try{e.style.font="condensed 100px sans-serif"}catch(q){}G=""!==e.style.font}return[b,g,G?a.stretch:"","100px",c].join(" ")} 9 | D.prototype.load=function(a,c){var b=this,g=a||"BESbswy",e=0,q=c||3E3,J=(new Date).getTime();return new Promise(function(K,L){if(M(b.context)&&!I(b.context)){var O=new Promise(function(r,t){function h(){(new Date).getTime()-J>=q?t(Error(""+q+"ms timeout exceeded")):b.context.document.fonts.load(N(b,'"'+b.family+'"'),g).then(function(n){1<=n.length?r():setTimeout(h,25)},t)}h()}),P=new Promise(function(r,t){e=setTimeout(function(){t(Error(""+q+"ms timeout exceeded"))},q)});Promise.race([P,O]).then(function(){clearTimeout(e); 10 | K(b)},L)}else u(function(){function r(){var d;if(d=-1!=k&&-1!=l||-1!=k&&-1!=m||-1!=l&&-1!=m)(d=k!=l&&k!=m&&l!=m)||(null===E&&(d=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),E=!!d&&(536>parseInt(d[1],10)||536===parseInt(d[1],10)&&11>=parseInt(d[2],10))),d=E&&(k==y&&l==y&&m==y||k==z&&l==z&&m==z||k==A&&l==A&&m==A)),d=!d;d&&(null!==f.parentNode&&f.parentNode.removeChild(f),clearTimeout(e),K(b))}function t(){if((new Date).getTime()-J>=q)null!==f.parentNode&&f.parentNode.removeChild(f), 11 | L(Error(""+q+"ms timeout exceeded"));else{var d=b.context.document.hidden;if(!0===d||void 0===d)k=h.g.offsetWidth,l=n.g.offsetWidth,m=v.g.offsetWidth,r();e=setTimeout(t,50)}}var h=new w(g),n=new w(g),v=new w(g),k=-1,l=-1,m=-1,y=-1,z=-1,A=-1,f=document.createElement("div");f.dir="ltr";x(h,N(b,"sans-serif"));x(n,N(b,"serif"));x(v,N(b,"monospace"));f.appendChild(h.g);f.appendChild(n.g);f.appendChild(v.g);b.context.document.body.appendChild(f);y=h.g.offsetWidth;z=n.g.offsetWidth;A=v.g.offsetWidth;t(); 12 | C(h,function(d){k=d;r()});x(h,N(b,'"'+b.family+'",sans-serif'));C(n,function(d){l=d;r()});x(n,N(b,'"'+b.family+'",serif'));C(v,function(d){m=d;r()});x(v,N(b,'"'+b.family+'",monospace'))})})};"object"===typeof module?module.exports=D:(window.FontFaceObserver=D,window.FontFaceObserver.prototype.load=D.prototype.load);}()); 13 | -------------------------------------------------------------------------------- /start_peerjs.bat: -------------------------------------------------------------------------------- 1 | start /b peerjs --port 9000 --key peerjs --path /myapp 2 | start chrome http://127.0.0.1:9000/myapp --------------------------------------------------------------------------------