var svgEditorExtension_mathjax = (function () { 
 | 
  'use strict'; 
 | 
  
 | 
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { 
 | 
    try { 
 | 
      var info = gen[key](arg); 
 | 
      var value = info.value; 
 | 
    } catch (error) { 
 | 
      reject(error); 
 | 
      return; 
 | 
    } 
 | 
  
 | 
    if (info.done) { 
 | 
      resolve(value); 
 | 
    } else { 
 | 
      Promise.resolve(value).then(_next, _throw); 
 | 
    } 
 | 
  } 
 | 
  
 | 
  function _asyncToGenerator(fn) { 
 | 
    return function () { 
 | 
      var self = this, 
 | 
          args = arguments; 
 | 
      return new Promise(function (resolve, reject) { 
 | 
        var gen = fn.apply(self, args); 
 | 
  
 | 
        function _next(value) { 
 | 
          asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); 
 | 
        } 
 | 
  
 | 
        function _throw(err) { 
 | 
          asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); 
 | 
        } 
 | 
  
 | 
        _next(undefined); 
 | 
      }); 
 | 
    }; 
 | 
  } 
 | 
  
 | 
  function addScriptAtts(script, atts) { 
 | 
    ['id', 'class', 'type'].forEach(function (prop) { 
 | 
      if (prop in atts) { 
 | 
        script[prop] = atts[prop]; 
 | 
      } 
 | 
    }); 
 | 
  } // Additions by Brett 
 | 
  
 | 
  function importScript(url) { 
 | 
    var atts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 
 | 
  
 | 
    if (Array.isArray(url)) { 
 | 
      return Promise.all(url.map(function (u) { 
 | 
        return importScript(u, atts); 
 | 
      })); 
 | 
    } 
 | 
  
 | 
    return new Promise(function (resolve, reject) { 
 | 
      var script = document.createElement('script'); 
 | 
  
 | 
      var destructor = function destructor() { 
 | 
        script.onerror = null; 
 | 
        script.onload = null; 
 | 
        script.remove(); 
 | 
        script.src = ''; 
 | 
      }; 
 | 
  
 | 
      script.defer = 'defer'; 
 | 
      addScriptAtts(script, atts); 
 | 
  
 | 
      script.onerror = function () { 
 | 
        reject(new Error("Failed to import: ".concat(url))); 
 | 
        destructor(); 
 | 
      }; 
 | 
  
 | 
      script.onload = function () { 
 | 
        resolve(); 
 | 
        destructor(); 
 | 
      }; 
 | 
  
 | 
      script.src = url; 
 | 
      document.head.append(script); 
 | 
    }); 
 | 
  } 
 | 
  
 | 
  var extMathjax = { 
 | 
    name: 'mathjax', 
 | 
    init: function () { 
 | 
      var _init = _asyncToGenerator( 
 | 
      /*#__PURE__*/ 
 | 
      regeneratorRuntime.mark(function _callee(_ref) { 
 | 
        var importLocale, strings, svgEditor, $, svgCanvas, mathjaxSrcSecure, uiStrings, math, locationX, locationY, mathjaxLoaded, saveMath, buttons; 
 | 
        return regeneratorRuntime.wrap(function _callee$(_context) { 
 | 
          while (1) { 
 | 
            switch (_context.prev = _context.next) { 
 | 
              case 0: 
 | 
                saveMath = function _ref2() { 
 | 
                  var code = $('#mathjax_code_textarea').val(); // displaystyle to force MathJax NOT to use the inline style. Because it is 
 | 
                  // less fancy! 
 | 
  
 | 
                  MathJax.Hub.queue.Push(['Text', math, '\\displaystyle{' + code + '}']); 
 | 
                  /* 
 | 
                   * The MathJax library doesn't want to bloat your webpage so it creates 
 | 
                   * every symbol (glymph) you need only once. These are saved in a `<svg>` on 
 | 
                   * the top of your html document, just under the body tag. Each glymph has 
 | 
                   * its unique id and is saved as a `<path>` in the `<defs>` tag of the `<svg>` 
 | 
                   * 
 | 
                   * Then when the symbols are needed in the rest of your html document they 
 | 
                   * are refferd to by a `<use>` tag. 
 | 
                   * Because of bug 1076 we can't just grab the defs tag on the top and add it 
 | 
                   * to your formula's `<svg>` and copy the lot. So we have to replace each 
 | 
                   * `<use>` tag by its `<path>`. 
 | 
                   */ 
 | 
  
 | 
                  MathJax.Hub.queue.Push(function () { 
 | 
                    var mathjaxMath = $('.MathJax_SVG'); 
 | 
                    var svg = $(mathjaxMath.html()); 
 | 
                    svg.find('use').each(function () { 
 | 
                      // TODO: find a less pragmatic and more elegant solution to this. 
 | 
                      var id = $(this).attr('href') ? $(this).attr('href').slice(1) // Works in Chrome. 
 | 
                      : $(this).attr('xlink:href').slice(1); // Works in Firefox. 
 | 
  
 | 
                      var glymph = $('#' + id).clone().removeAttr('id'); 
 | 
                      var x = $(this).attr('x'); 
 | 
                      var y = $(this).attr('y'); 
 | 
                      var transform = $(this).attr('transform'); 
 | 
  
 | 
                      if (transform && (x || y)) { 
 | 
                        glymph.attr('transform', transform + ' translate(' + x + ',' + y + ')'); 
 | 
                      } else if (transform) { 
 | 
                        glymph.attr('transform', transform); 
 | 
                      } else if (x || y) { 
 | 
                        glymph.attr('transform', 'translate(' + x + ',' + y + ')'); 
 | 
                      } 
 | 
  
 | 
                      $(this).replaceWith(glymph); 
 | 
                    }); // Remove the style tag because it interferes with SVG-Edit. 
 | 
  
 | 
                    svg.removeAttr('style'); 
 | 
                    svg.attr('xmlns', 'http://www.w3.org/2000/svg'); 
 | 
                    svgCanvas.importSvgString($('<div>').append(svg.clone()).html(), true); 
 | 
                    svgCanvas.ungroupSelectedElement(); // TODO: To undo the adding of the Formula you now have to undo twice. 
 | 
                    // This should only be once! 
 | 
  
 | 
                    svgCanvas.moveSelectedElements(locationX, locationY, true); 
 | 
                  }); 
 | 
                }; 
 | 
  
 | 
                importLocale = _ref.importLocale; 
 | 
                _context.next = 4; 
 | 
                return importLocale(); 
 | 
  
 | 
              case 4: 
 | 
                strings = _context.sent; 
 | 
                svgEditor = this; 
 | 
                $ = jQuery; 
 | 
                svgCanvas = svgEditor.canvas; // Configuration of the MathJax extention. 
 | 
                // This will be added to the head tag before MathJax is loaded. 
 | 
  
 | 
                /* mathjaxConfiguration = `<script type="text/x-mathjax-config"> 
 | 
                MathJax.Hub.Config({ 
 | 
                extensions: ['tex2jax.js'], 
 | 
                jax: ['input/TeX', 'output/SVG'], 
 | 
                showProcessingMessages: true, 
 | 
                showMathMenu: false, 
 | 
                showMathMenuMSIE: false, 
 | 
                errorSettings: { 
 | 
                  message: ['[Math Processing Error]'], 
 | 
                  style: {color: '#CC0000', 'font-style': 'italic'} 
 | 
                }, 
 | 
                elements: [], 
 | 
                  tex2jax: { 
 | 
                  ignoreClass: 'tex2jax_ignore2', processClass: 'tex2jax_process2', 
 | 
                }, 
 | 
                TeX: { 
 | 
                  extensions: ['AMSmath.js', 'AMSsymbols.js', 'noErrors.js', 'noUndefined.js'] 
 | 
                }, 
 | 
                SVG: { 
 | 
                } 
 | 
                }); 
 | 
                </script>`, */ 
 | 
                // mathjaxSrc = 'http://cdn.mathjax.org/mathjax/latest/MathJax.js', 
 | 
                // Had been on https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_SVG.js 
 | 
                // Obtained Text-AMS-MML_SVG.js from https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.3/config/TeX-AMS-MML_SVG.js 
 | 
                mathjaxSrcSecure = 'mathjax/MathJax.min.js?config=TeX-AMS-MML_SVG.js', uiStrings = svgEditor.uiStrings; 
 | 
                mathjaxLoaded = false; // TODO: Implement language support. Move these uiStrings to the locale files and the code to the langReady callback. 
 | 
  
 | 
                $.extend(uiStrings, { 
 | 
                  mathjax: { 
 | 
                    embed_svg: 'Save as mathematics', 
 | 
                    embed_mathml: 'Save as figure', 
 | 
                    svg_save_warning: 'The math will be transformed into a figure is manipulatable like everything else. You will not be able to manipulate the TeX-code anymore. ', 
 | 
                    mathml_save_warning: 'Advised. The math will be saved as a figure.', 
 | 
                    title: 'Mathematics code editor' 
 | 
                  } 
 | 
                }); 
 | 
                buttons = [{ 
 | 
                  id: 'tool_mathjax', 
 | 
                  type: 'mode', 
 | 
                  icon: svgEditor.curConfig.extIconsPath + 'mathjax.png', 
 | 
                  events: { 
 | 
                    click: function click() { 
 | 
                      // Only load Mathjax when needed, we don't want to strain Svg-Edit any more. 
 | 
                      // From this point on it is very probable that it will be needed, so load it. 
 | 
                      if (mathjaxLoaded === false) { 
 | 
                        $('<div id="mathjax">' + '<!-- Here is where MathJax creates the math -->' + '<div id="mathjax_creator" class="tex2jax_process" style="display:none">' + '$${}$$' + '</div>' + '<div id="mathjax_overlay"></div>' + '<div id="mathjax_container">' + '<div id="tool_mathjax_back" class="toolbar_button">' + '<button id="tool_mathjax_save">OK</button>' + '<button id="tool_mathjax_cancel">Cancel</button>' + '</div>' + '<fieldset>' + '<legend id="mathjax_legend">Mathematics Editor</legend>' + '<label>' + '<span id="mathjax_explication">Please type your mathematics in ' + '<a href="https://en.wikipedia.org/wiki/Help:Displaying_a_formula" target="_blank">TeX</a> code.</span></label>' + '<textarea id="mathjax_code_textarea" spellcheck="false"></textarea>' + '</fieldset>' + '</div>' + '</div>').insertAfter('#svg_prefs').hide(); // Make the MathEditor draggable. 
 | 
  
 | 
                        $('#mathjax_container').draggable({ 
 | 
                          cancel: 'button,fieldset', 
 | 
                          containment: 'window' 
 | 
                        }); // Add functionality and picture to cancel button. 
 | 
  
 | 
                        $('#tool_mathjax_cancel').prepend($.getSvgIcon('cancel', true)).on('click touched', function () { 
 | 
                          $('#mathjax').hide(); 
 | 
                        }); // Add functionality and picture to the save button. 
 | 
  
 | 
                        $('#tool_mathjax_save').prepend($.getSvgIcon('ok', true)).on('click touched', function () { 
 | 
                          saveMath(); 
 | 
                          $('#mathjax').hide(); 
 | 
                        }); // MathJax preprocessing has to ignore most of the page. 
 | 
  
 | 
                        $('body').addClass('tex2jax_ignore'); // Now get (and run) the MathJax Library. 
 | 
                        // Todo: insert script with modules once widely supported 
 | 
                        //   and if MathJax (and its `TeX-AMS-MML_SVG.js` dependency) ends up 
 | 
                        //   providing an ES6 module export: https://github.com/mathjax/MathJax/issues/1998 
 | 
  
 | 
                        /* 
 | 
                        const modularVersion = !('svgEditor' in window) || 
 | 
                          !window.svgEditor || 
 | 
                          window.svgEditor.modules !== false; 
 | 
                        // Add as second argument to `importScript` 
 | 
                        { 
 | 
                          type: modularVersion 
 | 
                            ? 'module' // Make this the default when widely supported 
 | 
                            : 'text/javascript' 
 | 
                        } 
 | 
                        // If only using modules, just use this: 
 | 
                        const {default: MathJax} = await importModule( // or `import()` when widely supported 
 | 
                          svgEditor.curConfig.extIconsPath + mathjaxSrcSecure 
 | 
                        ); 
 | 
                        */ 
 | 
                        // We use `extIconsPath` here for now as it does not vary with 
 | 
                        //  the modular type as does `extPath` 
 | 
  
 | 
                        importScript(svgEditor.curConfig.extIconsPath + mathjaxSrcSecure).then(function () { 
 | 
                          // When MathJax is loaded get the div where the math will be rendered. 
 | 
                          MathJax.Hub.queue.Push(function () { 
 | 
                            math = MathJax.Hub.getAllJax('#mathjax_creator')[0]; 
 | 
                            console.log(math); 
 | 
                            mathjaxLoaded = true; 
 | 
                            console.log('MathJax Loaded'); 
 | 
                          }); 
 | 
                        }).catch(function () { 
 | 
                          console.log('Failed loadeing MathJax.'); 
 | 
                          $.alert('Failed loading MathJax. You will not be able to change the mathematics.'); 
 | 
                        }); 
 | 
                      } // Set the mode. 
 | 
  
 | 
  
 | 
                      svgCanvas.setMode('mathjax'); 
 | 
                    } 
 | 
                  } 
 | 
                }]; 
 | 
                return _context.abrupt("return", { 
 | 
                  name: strings.name, 
 | 
                  svgicons: svgEditor.curConfig.extIconsPath + 'mathjax-icons.xml', 
 | 
                  buttons: strings.buttons.map(function (button, i) { 
 | 
                    return Object.assign(buttons[i], button); 
 | 
                  }), 
 | 
                  mouseDown: function mouseDown() { 
 | 
                    if (svgCanvas.getMode() === 'mathjax') { 
 | 
                      return { 
 | 
                        started: true 
 | 
                      }; 
 | 
                    } 
 | 
                  }, 
 | 
                  mouseUp: function mouseUp(opts) { 
 | 
                    if (svgCanvas.getMode() === 'mathjax') { 
 | 
                      // Get the coordinates from your mouse. 
 | 
                      var zoom = svgCanvas.getZoom(); // Get the actual coordinate by dividing by the zoom value 
 | 
  
 | 
                      locationX = opts.mouse_x / zoom; 
 | 
                      locationY = opts.mouse_y / zoom; 
 | 
                      $('#mathjax').show(); 
 | 
                      return { 
 | 
                        started: false 
 | 
                      }; // Otherwise the last selected object dissapears. 
 | 
                    } 
 | 
                  }, 
 | 
                  callback: function callback() { 
 | 
                    $('<style>').text('#mathjax fieldset{' + 'padding: 5px;' + 'margin: 5px;' + 'border: 1px solid #DDD;' + '}' + '#mathjax label{' + 'display: block;' + 'margin: .5em;' + '}' + '#mathjax legend {' + 'max-width:195px;' + '}' + '#mathjax_overlay {' + 'position: absolute;' + 'top: 0;' + 'left: 0;' + 'right: 0;' + 'bottom: 0;' + 'background-color: black;' + 'opacity: 0.6;' + 'z-index: 20000;' + '}' + '#mathjax_container {' + 'position: absolute;' + 'top: 50px;' + 'padding: 10px;' + 'background-color: #B0B0B0;' + 'border: 1px outset #777;' + 'opacity: 1.0;' + 'font-family: Verdana, Helvetica, sans-serif;' + 'font-size: .8em;' + 'z-index: 20001;' + '}' + '#tool_mathjax_back {' + 'margin-left: 1em;' + 'overflow: auto;' + '}' + '#mathjax_legend{' + 'font-weight: bold;' + 'font-size:1.1em;' + '}' + '#mathjax_code_textarea {\\n' + 'margin: 5px .7em;' + 'overflow: hidden;' + 'width: 416px;' + 'display: block;' + 'height: 100px;' + '}').appendTo('head'); // Add the MathJax configuration. 
 | 
                    // $(mathjaxConfiguration).appendTo('head'); 
 | 
                  } 
 | 
                }); 
 | 
  
 | 
              case 13: 
 | 
              case "end": 
 | 
                return _context.stop(); 
 | 
            } 
 | 
          } 
 | 
        }, _callee, this); 
 | 
      })); 
 | 
  
 | 
      return function init(_x) { 
 | 
        return _init.apply(this, arguments); 
 | 
      }; 
 | 
    }() 
 | 
  }; 
 | 
  
 | 
  return extMathjax; 
 | 
  
 | 
}()); 
 |