var svgEditorExtension_foreignobject = (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); 
 | 
      }); 
 | 
    }; 
 | 
  } 
 | 
  
 | 
  /* globals jQuery */ 
 | 
  
 | 
  /** 
 | 
   * ext-foreignobject.js 
 | 
   * 
 | 
   * @license Apache-2.0 
 | 
   * 
 | 
   * @copyright 2010 Jacques Distler, 2010 Alexis Deveria 
 | 
   * 
 | 
   */ 
 | 
  var extForeignobject = { 
 | 
    name: 'foreignobject', 
 | 
    init: function () { 
 | 
      var _init = _asyncToGenerator( 
 | 
      /*#__PURE__*/ 
 | 
      regeneratorRuntime.mark(function _callee(S) { 
 | 
        var svgEditor, text2xml, NS, importLocale, $, svgCanvas, svgdoc, strings, properlySourceSizeTextArea, showPanel, toggleSourceButtons, selElems, started, newFO, editingforeign, setForeignString, showForeignEditor, setAttr, buttons, contextTools; 
 | 
        return regeneratorRuntime.wrap(function _callee$(_context) { 
 | 
          while (1) { 
 | 
            switch (_context.prev = _context.next) { 
 | 
              case 0: 
 | 
                setAttr = function _ref5(attr, val) { 
 | 
                  svgCanvas.changeSelectedAttribute(attr, val); 
 | 
                  svgCanvas.call('changed', selElems); 
 | 
                }; 
 | 
  
 | 
                showForeignEditor = function _ref4() { 
 | 
                  var elt = selElems[0]; 
 | 
  
 | 
                  if (!elt || editingforeign) { 
 | 
                    return; 
 | 
                  } 
 | 
  
 | 
                  editingforeign = true; 
 | 
                  toggleSourceButtons(true); 
 | 
                  elt.removeAttribute('fill'); 
 | 
                  var str = svgCanvas.svgToString(elt, 0); 
 | 
                  $('#svg_source_textarea').val(str); 
 | 
                  $('#svg_source_editor').fadeIn(); 
 | 
                  properlySourceSizeTextArea(); 
 | 
                  $('#svg_source_textarea').focus(); 
 | 
                }; 
 | 
  
 | 
                setForeignString = function _ref3(xmlString) { 
 | 
                  var elt = selElems[0]; 
 | 
  
 | 
                  try { 
 | 
                    // convert string into XML document 
 | 
                    var newDoc = text2xml('<svg xmlns="' + NS.SVG + '" xmlns:xlink="' + NS.XLINK + '">' + xmlString + '</svg>'); // run it through our sanitizer to remove anything we do not support 
 | 
  
 | 
                    svgCanvas.sanitizeSvg(newDoc.documentElement); 
 | 
                    elt.replaceWith(svgdoc.importNode(newDoc.documentElement.firstChild, true)); 
 | 
                    svgCanvas.call('changed', [elt]); 
 | 
                    svgCanvas.clearSelection(); 
 | 
                  } catch (e) { 
 | 
                    console.log(e); 
 | 
                    return false; 
 | 
                  } 
 | 
  
 | 
                  return true; 
 | 
                }; 
 | 
  
 | 
                toggleSourceButtons = function _ref2(on) { 
 | 
                  $('#tool_source_save, #tool_source_cancel').toggle(!on); 
 | 
                  $('#foreign_save, #foreign_cancel').toggle(on); 
 | 
                }; 
 | 
  
 | 
                showPanel = function _ref(on) { 
 | 
                  var fcRules = $('#fc_rules'); 
 | 
  
 | 
                  if (!fcRules.length) { 
 | 
                    fcRules = $('<style id="fc_rules"></style>').appendTo('head'); 
 | 
                  } 
 | 
  
 | 
                  fcRules.text(!on ? '' : ' #tool_topath { display: none !important; }'); 
 | 
                  $('#foreignObject_panel').toggle(on); 
 | 
                }; 
 | 
  
 | 
                svgEditor = this; 
 | 
                text2xml = S.text2xml, NS = S.NS, importLocale = S.importLocale; 
 | 
                $ = jQuery; 
 | 
                svgCanvas = svgEditor.canvas; 
 | 
                svgdoc = S.svgroot.parentNode.ownerDocument; 
 | 
                _context.next = 12; 
 | 
                return importLocale(); 
 | 
  
 | 
              case 12: 
 | 
                strings = _context.sent; 
 | 
  
 | 
                properlySourceSizeTextArea = function properlySourceSizeTextArea() { 
 | 
                  // TODO: remove magic numbers here and get values from CSS 
 | 
                  var height = $('#svg_source_container').height() - 80; 
 | 
                  $('#svg_source_textarea').css('height', height); 
 | 
                }; 
 | 
  
 | 
                editingforeign = false; 
 | 
                /** 
 | 
                * This function sets the content of element elt to the input XML. 
 | 
                * @param {string} xmlString - The XML text 
 | 
                * @param {Element} elt - the parent element to append to 
 | 
                * @returns {boolean} This function returns false if the set was unsuccessful, true otherwise. 
 | 
                */ 
 | 
  
 | 
                buttons = [{ 
 | 
                  id: 'tool_foreign', 
 | 
                  icon: svgEditor.curConfig.extIconsPath + 'foreignobject-tool.png', 
 | 
                  type: 'mode', 
 | 
                  events: { 
 | 
                    click: function click() { 
 | 
                      svgCanvas.setMode('foreign'); 
 | 
                    } 
 | 
                  } 
 | 
                }, { 
 | 
                  id: 'edit_foreign', 
 | 
                  icon: svgEditor.curConfig.extIconsPath + 'foreignobject-edit.png', 
 | 
                  type: 'context', 
 | 
                  panel: 'foreignObject_panel', 
 | 
                  events: { 
 | 
                    click: function click() { 
 | 
                      showForeignEditor(); 
 | 
                    } 
 | 
                  } 
 | 
                }]; 
 | 
                contextTools = [{ 
 | 
                  type: 'input', 
 | 
                  panel: 'foreignObject_panel', 
 | 
                  id: 'foreign_width', 
 | 
                  size: 3, 
 | 
                  events: { 
 | 
                    change: function change() { 
 | 
                      setAttr('width', this.value); 
 | 
                    } 
 | 
                  } 
 | 
                }, { 
 | 
                  type: 'input', 
 | 
                  panel: 'foreignObject_panel', 
 | 
                  id: 'foreign_height', 
 | 
                  events: { 
 | 
                    change: function change() { 
 | 
                      setAttr('height', this.value); 
 | 
                    } 
 | 
                  } 
 | 
                }, { 
 | 
                  type: 'input', 
 | 
                  panel: 'foreignObject_panel', 
 | 
                  id: 'foreign_font_size', 
 | 
                  size: 2, 
 | 
                  defval: 16, 
 | 
                  events: { 
 | 
                    change: function change() { 
 | 
                      setAttr('font-size', this.value); 
 | 
                    } 
 | 
                  } 
 | 
                }]; 
 | 
                return _context.abrupt("return", { 
 | 
                  name: strings.name, 
 | 
                  svgicons: svgEditor.curConfig.extIconsPath + 'foreignobject-icons.xml', 
 | 
                  buttons: strings.buttons.map(function (button, i) { 
 | 
                    return Object.assign(buttons[i], button); 
 | 
                  }), 
 | 
                  context_tools: strings.contextTools.map(function (contextTool, i) { 
 | 
                    return Object.assign(contextTools[i], contextTool); 
 | 
                  }), 
 | 
                  callback: function callback() { 
 | 
                    $('#foreignObject_panel').hide(); 
 | 
  
 | 
                    var endChanges = function endChanges() { 
 | 
                      $('#svg_source_editor').hide(); 
 | 
                      editingforeign = false; 
 | 
                      $('#svg_source_textarea').blur(); 
 | 
                      toggleSourceButtons(false); 
 | 
                    }; // TODO: Needs to be done after orig icon loads 
 | 
  
 | 
  
 | 
                    setTimeout(function () { 
 | 
                      // Create source save/cancel buttons 
 | 
  
 | 
                      /* const save = */ 
 | 
                      $('#tool_source_save').clone().hide().attr('id', 'foreign_save').unbind().appendTo('#tool_source_back').click(function () { 
 | 
                        if (!editingforeign) { 
 | 
                          return; 
 | 
                        } 
 | 
  
 | 
                        if (!setForeignString($('#svg_source_textarea').val())) { 
 | 
                          $.confirm('Errors found. Revert to original?', function (ok) { 
 | 
                            if (!ok) { 
 | 
                              return false; 
 | 
                            } 
 | 
  
 | 
                            endChanges(); 
 | 
                          }); 
 | 
                        } else { 
 | 
                          endChanges(); 
 | 
                        } // setSelectMode(); 
 | 
  
 | 
                      }); 
 | 
                      /* const cancel = */ 
 | 
  
 | 
                      $('#tool_source_cancel').clone().hide().attr('id', 'foreign_cancel').unbind().appendTo('#tool_source_back').click(function () { 
 | 
                        endChanges(); 
 | 
                      }); 
 | 
                    }, 3000); 
 | 
                  }, 
 | 
                  mouseDown: function mouseDown(opts) { 
 | 
                    // const e = opts.event; 
 | 
                    if (svgCanvas.getMode() === 'foreign') { 
 | 
                      started = true; 
 | 
                      newFO = svgCanvas.addSVGElementFromJson({ 
 | 
                        element: 'foreignObject', 
 | 
                        attr: { 
 | 
                          x: opts.start_x, 
 | 
                          y: opts.start_y, 
 | 
                          id: svgCanvas.getNextId(), 
 | 
                          'font-size': 16, 
 | 
                          // cur_text.font_size, 
 | 
                          width: '48', 
 | 
                          height: '20', 
 | 
                          style: 'pointer-events:inherit' 
 | 
                        } 
 | 
                      }); 
 | 
                      var m = svgdoc.createElementNS(NS.MATH, 'math'); 
 | 
                      m.setAttributeNS(NS.XMLNS, 'xmlns', NS.MATH); 
 | 
                      m.setAttribute('display', 'inline'); 
 | 
                      var mi = svgdoc.createElementNS(NS.MATH, 'mi'); 
 | 
                      mi.setAttribute('mathvariant', 'normal'); 
 | 
                      mi.textContent = "\u03A6"; 
 | 
                      var mo = svgdoc.createElementNS(NS.MATH, 'mo'); 
 | 
                      mo.textContent = "\u222A"; 
 | 
                      var mi2 = svgdoc.createElementNS(NS.MATH, 'mi'); 
 | 
                      mi2.textContent = "\u2133"; 
 | 
                      m.append(mi, mo, mi2); 
 | 
                      newFO.append(m); 
 | 
                      return { 
 | 
                        started: true 
 | 
                      }; 
 | 
                    } 
 | 
                  }, 
 | 
                  mouseUp: function mouseUp(opts) { 
 | 
                    // const e = opts.event; 
 | 
                    if (svgCanvas.getMode() === 'foreign' && started) { 
 | 
                      var attrs = $(newFO).attr(['width', 'height']); 
 | 
                      var keep = attrs.width !== '0' || attrs.height !== '0'; 
 | 
                      svgCanvas.addToSelection([newFO], true); 
 | 
                      return { 
 | 
                        keep: keep, 
 | 
                        element: newFO 
 | 
                      }; 
 | 
                    } 
 | 
                  }, 
 | 
                  selectedChanged: function selectedChanged(opts) { 
 | 
                    // Use this to update the current selected elements 
 | 
                    selElems = opts.elems; 
 | 
                    var i = selElems.length; 
 | 
  
 | 
                    while (i--) { 
 | 
                      var elem = selElems[i]; 
 | 
  
 | 
                      if (elem && elem.tagName === 'foreignObject') { 
 | 
                        if (opts.selectedElement && !opts.multiselected) { 
 | 
                          $('#foreign_font_size').val(elem.getAttribute('font-size')); 
 | 
                          $('#foreign_width').val(elem.getAttribute('width')); 
 | 
                          $('#foreign_height').val(elem.getAttribute('height')); 
 | 
                          showPanel(true); 
 | 
                        } else { 
 | 
                          showPanel(false); 
 | 
                        } 
 | 
                      } else { 
 | 
                        showPanel(false); 
 | 
                      } 
 | 
                    } 
 | 
                  }, 
 | 
                  elementChanged: function elementChanged(opts) {} 
 | 
                }); 
 | 
  
 | 
              case 18: 
 | 
              case "end": 
 | 
                return _context.stop(); 
 | 
            } 
 | 
          } 
 | 
        }, _callee, this); 
 | 
      })); 
 | 
  
 | 
      return function init(_x) { 
 | 
        return _init.apply(this, arguments); 
 | 
      }; 
 | 
    }() 
 | 
  }; 
 | 
  
 | 
  return extForeignobject; 
 | 
  
 | 
}()); 
 |