var svgEditorExtension_imagelib = (function () { 
 | 
  'use strict'; 
 | 
  
 | 
  function _typeof(obj) { 
 | 
    if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { 
 | 
      _typeof = function (obj) { 
 | 
        return typeof obj; 
 | 
      }; 
 | 
    } else { 
 | 
      _typeof = function (obj) { 
 | 
        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; 
 | 
      }; 
 | 
    } 
 | 
  
 | 
    return _typeof(obj); 
 | 
  } 
 | 
  
 | 
  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-imagelib.js 
 | 
   * 
 | 
   * @license MIT 
 | 
   * 
 | 
   * @copyright 2010 Alexis Deveria 
 | 
   * 
 | 
   */ 
 | 
  var extImagelib = { 
 | 
    name: 'imagelib', 
 | 
    init: function () { 
 | 
      var _init = _asyncToGenerator( 
 | 
      /*#__PURE__*/ 
 | 
      regeneratorRuntime.mark(function _callee(_ref) { 
 | 
        var decode64, importLocale, dropXMLInternalSubset, imagelibStrings, modularVersion, svgEditor, $, uiStrings, svgCanvas, extIconsPath, allowedImageLibOrigins, closeBrowser, importImage, pending, mode, multiArr, transferStopped, preview, submit, toggleMulti, showBrowser, buttons; 
 | 
        return regeneratorRuntime.wrap(function _callee$(_context) { 
 | 
          while (1) { 
 | 
            switch (_context.prev = _context.next) { 
 | 
              case 0: 
 | 
                showBrowser = function _ref9() { 
 | 
                  var browser = $('#imgbrowse'); 
 | 
  
 | 
                  if (!browser.length) { 
 | 
                    $('<div id=imgbrowse_holder><div id=imgbrowse class=toolbar_button>' + '</div></div>').insertAfter('#svg_docprops'); 
 | 
                    browser = $('#imgbrowse'); 
 | 
                    var allLibs = imagelibStrings.select_lib; 
 | 
                    var libOpts = $('<ul id=imglib_opts>').appendTo(browser); 
 | 
                    var frame = $('<iframe/>').prependTo(browser).hide().wrap('<div id=lib_framewrap>'); 
 | 
                    var header = $('<h1>').prependTo(browser).text(allLibs).css({ 
 | 
                      position: 'absolute', 
 | 
                      top: 0, 
 | 
                      left: 0, 
 | 
                      width: '100%' 
 | 
                    }); 
 | 
                    var cancel = $('<button>' + uiStrings.common.cancel + '</button>').appendTo(browser).on('click touchend', function () { 
 | 
                      $('#imgbrowse_holder').hide(); 
 | 
                    }).css({ 
 | 
                      position: 'absolute', 
 | 
                      top: 5, 
 | 
                      right: -10 
 | 
                    }); 
 | 
                    var leftBlock = $('<span>').css({ 
 | 
                      position: 'absolute', 
 | 
                      top: 5, 
 | 
                      left: 10 
 | 
                    }).appendTo(browser); 
 | 
                    var back = $('<button hidden>' + imagelibStrings.show_list + '</button>').appendTo(leftBlock).on('click touchend', function () { 
 | 
                      frame.attr('src', 'about:blank').hide(); 
 | 
                      libOpts.show(); 
 | 
                      header.text(allLibs); 
 | 
                      back.hide(); 
 | 
                    }).css({ 
 | 
                      'margin-right': 5 
 | 
                    }).hide(); 
 | 
                    /* const type = */ 
 | 
  
 | 
                    $('<select><option value=s>' + imagelibStrings.import_single + '</option><option value=m>' + imagelibStrings.import_multi + '</option><option value=o>' + imagelibStrings.open + '</option></select>').appendTo(leftBlock).change(function () { 
 | 
                      mode = $(this).val(); 
 | 
  
 | 
                      switch (mode) { 
 | 
                        case 's': 
 | 
                        case 'o': 
 | 
                          toggleMulti(false); 
 | 
                          break; 
 | 
  
 | 
                        case 'm': 
 | 
                          // Import multiple 
 | 
                          toggleMulti(true); 
 | 
                          break; 
 | 
                      } 
 | 
                    }).css({ 
 | 
                      'margin-top': 10 
 | 
                    }); 
 | 
                    cancel.prepend($.getSvgIcon('cancel', true)); 
 | 
                    back.prepend($.getSvgIcon('tool_imagelib', true)); 
 | 
                    imagelibStrings.imgLibs.forEach(function (_ref5) { 
 | 
                      var name = _ref5.name, 
 | 
                          url = _ref5.url, 
 | 
                          description = _ref5.description; 
 | 
                      $('<li>').appendTo(libOpts).text(name).on('click touchend', function () { 
 | 
                        frame.attr('src', url).show(); 
 | 
                        header.text(name); 
 | 
                        libOpts.hide(); 
 | 
                        back.show(); 
 | 
                      }).append("<span>".concat(description, "</span>")); 
 | 
                    }); 
 | 
                  } else { 
 | 
                    $('#imgbrowse_holder').show(); 
 | 
                  } 
 | 
                }; 
 | 
  
 | 
                toggleMulti = function _ref8(show) { 
 | 
                  $('#lib_framewrap, #imglib_opts').css({ 
 | 
                    right: show ? 200 : 10 
 | 
                  }); 
 | 
  
 | 
                  if (!preview) { 
 | 
                    preview = $('<div id=imglib_preview>').css({ 
 | 
                      position: 'absolute', 
 | 
                      top: 45, 
 | 
                      right: 10, 
 | 
                      width: 180, 
 | 
                      bottom: 45, 
 | 
                      background: '#fff', 
 | 
                      overflow: 'auto' 
 | 
                    }).insertAfter('#lib_framewrap'); 
 | 
                    submit = $('<button disabled>Import selected</button>').appendTo('#imgbrowse').on('click touchend', function () { 
 | 
                      $.each(multiArr, function (i) { 
 | 
                        var type = this[0]; 
 | 
                        var data = this[1]; 
 | 
  
 | 
                        if (type === 'svg') { 
 | 
                          svgCanvas.importSvgString(data); 
 | 
                        } else { 
 | 
                          importImage(data); 
 | 
                        } 
 | 
  
 | 
                        svgCanvas.moveSelectedElements(i * 20, i * 20, false); 
 | 
                      }); 
 | 
                      preview.empty(); 
 | 
                      multiArr = []; 
 | 
                      $('#imgbrowse_holder').hide(); 
 | 
                    }).css({ 
 | 
                      position: 'absolute', 
 | 
                      bottom: 10, 
 | 
                      right: -10 
 | 
                    }); 
 | 
                  } 
 | 
  
 | 
                  preview.toggle(show); 
 | 
                  submit.toggle(show); 
 | 
                }; 
 | 
  
 | 
                importImage = function _ref7(url) { 
 | 
                  var newImage = svgCanvas.addSVGElementFromJson({ 
 | 
                    element: 'image', 
 | 
                    attr: { 
 | 
                      x: 0, 
 | 
                      y: 0, 
 | 
                      width: 0, 
 | 
                      height: 0, 
 | 
                      id: svgCanvas.getNextId(), 
 | 
                      style: 'pointer-events:inherit' 
 | 
                    } 
 | 
                  }); 
 | 
                  svgCanvas.clearSelection(); 
 | 
                  svgCanvas.addToSelection([newImage]); 
 | 
                  svgCanvas.setImageURL(url); 
 | 
                }; 
 | 
  
 | 
                closeBrowser = function _ref6() { 
 | 
                  $('#imgbrowse_holder').hide(); 
 | 
                }; 
 | 
  
 | 
                decode64 = _ref.decode64, importLocale = _ref.importLocale, dropXMLInternalSubset = _ref.dropXMLInternalSubset; 
 | 
                _context.next = 7; 
 | 
                return importLocale(); 
 | 
  
 | 
              case 7: 
 | 
                imagelibStrings = _context.sent; 
 | 
                modularVersion = !('svgEditor' in window) || !window.svgEditor || window.svgEditor.modules !== false; 
 | 
                svgEditor = this; 
 | 
                $ = jQuery; 
 | 
                uiStrings = svgEditor.uiStrings, svgCanvas = svgEditor.canvas, extIconsPath = svgEditor.curConfig.extIconsPath; 
 | 
                imagelibStrings.imgLibs = imagelibStrings.imgLibs.map(function (_ref2) { 
 | 
                  var name = _ref2.name, 
 | 
                      url = _ref2.url, 
 | 
                      description = _ref2.description; 
 | 
                  // Todo: Adopt some standard formatting library like `fluent.js` instead 
 | 
                  url = url.replace(/\{path\}/g, extIconsPath).replace(/\{modularVersion\}/g, modularVersion ? imagelibStrings.moduleEnding || '-es' : ''); 
 | 
                  return { 
 | 
                    name: name, 
 | 
                    url: url, 
 | 
                    description: description 
 | 
                  }; 
 | 
                }); 
 | 
                allowedImageLibOrigins = imagelibStrings.imgLibs.map(function (_ref3) { 
 | 
                  var url = _ref3.url; 
 | 
  
 | 
                  try { 
 | 
                    return new URL(url).origin; 
 | 
                  } catch (err) { 
 | 
                    return location.origin; 
 | 
                  } 
 | 
                }); 
 | 
                pending = {}; 
 | 
                mode = 's'; 
 | 
                multiArr = []; 
 | 
                transferStopped = false; 
 | 
                // Receive `postMessage` data 
 | 
                window.addEventListener('message', function (_ref4) { 
 | 
                  var origin = _ref4.origin, 
 | 
                      response = _ref4.data; 
 | 
  
 | 
                  if (!response || !['string', 'object'].includes(_typeof(response))) { 
 | 
                    // Do nothing 
 | 
                    return; 
 | 
                  } 
 | 
  
 | 
                  var id; 
 | 
                  var type; 
 | 
  
 | 
                  try { 
 | 
                    // Todo: This block can be removed (and the above check changed to 
 | 
                    //   insist on an object) if embedAPI moves away from a string to 
 | 
                    //   an object (if IE9 support not needed) 
 | 
                    response = _typeof(response) === 'object' ? response : JSON.parse(response); 
 | 
  
 | 
                    if (response.namespace !== 'imagelib') { 
 | 
                      return; 
 | 
                    } 
 | 
  
 | 
                    if (!allowedImageLibOrigins.includes('*') && !allowedImageLibOrigins.includes(origin)) { 
 | 
                      console.log("Origin ".concat(origin, " not whitelisted for posting to ").concat(window.origin)); 
 | 
                      return; 
 | 
                    } 
 | 
  
 | 
                    var hasName = 'name' in response; 
 | 
                    var hasHref = 'href' in response; 
 | 
  
 | 
                    if (!hasName && transferStopped) { 
 | 
                      transferStopped = false; 
 | 
                      return; 
 | 
                    } 
 | 
  
 | 
                    if (hasHref) { 
 | 
                      id = response.href; 
 | 
                      response = response.data; 
 | 
                    } // Hide possible transfer dialog box 
 | 
  
 | 
  
 | 
                    $('#dialog_box').hide(); 
 | 
                    type = hasName ? 'meta' : response.charAt(0); 
 | 
                  } catch (e) { 
 | 
                    // This block is for backward compatibility (for IAN and Openclipart); 
 | 
                    //   should otherwise return 
 | 
                    if (typeof response === 'string') { 
 | 
                      var char1 = response.charAt(0); 
 | 
  
 | 
                      if (char1 !== '{' && transferStopped) { 
 | 
                        transferStopped = false; 
 | 
                        return; 
 | 
                      } 
 | 
  
 | 
                      if (char1 === '|') { 
 | 
                        var secondpos = response.indexOf('|', 1); 
 | 
                        id = response.substr(1, secondpos - 1); 
 | 
                        response = response.substr(secondpos + 1); 
 | 
                        type = response.charAt(0); 
 | 
                      } 
 | 
                    } 
 | 
                  } 
 | 
  
 | 
                  var entry, curMeta, svgStr, imgStr; 
 | 
  
 | 
                  switch (type) { 
 | 
                    case 'meta': 
 | 
                      { 
 | 
                        // Metadata 
 | 
                        transferStopped = false; 
 | 
                        curMeta = response; // Should be safe to add dynamic property as passed metadata 
 | 
  
 | 
                        pending[curMeta.id] = curMeta; // lgtm [js/remote-property-injection] 
 | 
  
 | 
                        var name = curMeta.name || 'file'; 
 | 
                        var message = uiStrings.notification.retrieving.replace('%s', name); 
 | 
  
 | 
                        if (mode !== 'm') { 
 | 
                          $.process_cancel(message, function () { 
 | 
                            transferStopped = true; // Should a message be sent back to the frame? 
 | 
  
 | 
                            $('#dialog_box').hide(); 
 | 
                          }); 
 | 
                        } else { 
 | 
                          entry = $('<div>').text(message).data('id', curMeta.id); 
 | 
                          preview.append(entry); 
 | 
                          curMeta.entry = entry; 
 | 
                        } 
 | 
  
 | 
                        return; 
 | 
                      } 
 | 
  
 | 
                    case '<': 
 | 
                      svgStr = true; 
 | 
                      break; 
 | 
  
 | 
                    case 'd': 
 | 
                      { 
 | 
                        if (response.startsWith('data:image/svg+xml')) { 
 | 
                          var pre = 'data:image/svg+xml;base64,'; 
 | 
                          var src = response.substring(pre.length); 
 | 
                          response = decode64(src); 
 | 
                          svgStr = true; 
 | 
                          break; 
 | 
                        } else if (response.startsWith('data:image/')) { 
 | 
                          imgStr = true; 
 | 
                          break; 
 | 
                        } 
 | 
                      } 
 | 
                    // Else fall through 
 | 
  
 | 
                    default: 
 | 
                      // TODO: See if there's a way to base64 encode the binary data stream 
 | 
                      // const str = 'data:;base64,' + svgedit.utilities.encode64(response, true); 
 | 
                      // Assume it's raw image data 
 | 
                      // importImage(str); 
 | 
                      // Don't give warning as postMessage may have been used by something else 
 | 
                      if (mode !== 'm') { 
 | 
                        closeBrowser(); 
 | 
                      } else { 
 | 
                        pending[id].entry.remove(); 
 | 
                      } // $.alert('Unexpected data was returned: ' + response, function() { 
 | 
                      //   if (mode !== 'm') { 
 | 
                      //     closeBrowser(); 
 | 
                      //   } else { 
 | 
                      //     pending[id].entry.remove(); 
 | 
                      //   } 
 | 
                      // }); 
 | 
  
 | 
  
 | 
                      return; 
 | 
                  } 
 | 
  
 | 
                  switch (mode) { 
 | 
                    case 's': 
 | 
                      // Import one 
 | 
                      if (svgStr) { 
 | 
                        svgCanvas.importSvgString(response); 
 | 
                      } else if (imgStr) { 
 | 
                        importImage(response); 
 | 
                      } 
 | 
  
 | 
                      closeBrowser(); 
 | 
                      break; 
 | 
  
 | 
                    case 'm': 
 | 
                      // Import multiple 
 | 
                      multiArr.push([svgStr ? 'svg' : 'img', response]); 
 | 
                      curMeta = pending[id]; 
 | 
                      var title; 
 | 
  
 | 
                      if (svgStr) { 
 | 
                        if (curMeta && curMeta.name) { 
 | 
                          title = curMeta.name; 
 | 
                        } else { 
 | 
                          // Try to find a title 
 | 
                          // `dropXMLInternalSubset` is to help prevent the billion laughs attack 
 | 
                          var xml = new DOMParser().parseFromString(dropXMLInternalSubset(response), 'text/xml').documentElement; // lgtm [js/xml-bomb] 
 | 
  
 | 
                          title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')'; 
 | 
                        } 
 | 
  
 | 
                        if (curMeta) { 
 | 
                          preview.children().each(function () { 
 | 
                            if ($(this).data('id') === id) { 
 | 
                              if (curMeta.preview_url) { 
 | 
                                $(this).html($('<span>').append($('<img>').attr('src', curMeta.preview_url), document.createTextNode(title))); 
 | 
                              } else { 
 | 
                                $(this).text(title); 
 | 
                              } 
 | 
  
 | 
                              submit.removeAttr('disabled'); 
 | 
                            } 
 | 
                          }); 
 | 
                        } else { 
 | 
                          preview.append($('<div>').text(title)); 
 | 
                          submit.removeAttr('disabled'); 
 | 
                        } 
 | 
                      } else { 
 | 
                        if (curMeta && curMeta.preview_url) { 
 | 
                          title = curMeta.name || ''; 
 | 
                        } 
 | 
  
 | 
                        if (curMeta && curMeta.preview_url) { 
 | 
                          entry = $('<span>').append($('<img>').attr('src', curMeta.preview_url), document.createTextNode(title)); 
 | 
                        } else { 
 | 
                          entry = $('<img>').attr('src', response); 
 | 
                        } 
 | 
  
 | 
                        if (curMeta) { 
 | 
                          preview.children().each(function () { 
 | 
                            if ($(this).data('id') === id) { 
 | 
                              $(this).html(entry); 
 | 
                              submit.removeAttr('disabled'); 
 | 
                            } 
 | 
                          }); 
 | 
                        } else { 
 | 
                          preview.append($('<div>').append(entry)); 
 | 
                          submit.removeAttr('disabled'); 
 | 
                        } 
 | 
                      } 
 | 
  
 | 
                      break; 
 | 
  
 | 
                    case 'o': 
 | 
                      // Open 
 | 
                      if (!svgStr) { 
 | 
                        break; 
 | 
                      } 
 | 
  
 | 
                      svgEditor.openPrep(function (ok) { 
 | 
                        if (!ok) { 
 | 
                          return; 
 | 
                        } 
 | 
  
 | 
                        svgCanvas.clear(); 
 | 
                        svgCanvas.setSvgString(response); // updateCanvas(); 
 | 
                      }); 
 | 
                      closeBrowser(); 
 | 
                      break; 
 | 
                  } 
 | 
                }, true); 
 | 
                buttons = [{ 
 | 
                  id: 'tool_imagelib', 
 | 
                  type: 'app_menu', 
 | 
                  // _flyout 
 | 
                  icon: extIconsPath + 'imagelib.png', 
 | 
                  position: 4, 
 | 
                  events: { 
 | 
                    mouseup: showBrowser 
 | 
                  } 
 | 
                }]; 
 | 
                return _context.abrupt("return", { 
 | 
                  svgicons: extIconsPath + 'ext-imagelib.xml', 
 | 
                  buttons: imagelibStrings.buttons.map(function (button, i) { 
 | 
                    return Object.assign(buttons[i], button); 
 | 
                  }), 
 | 
                  callback: function callback() { 
 | 
                    $('<style>').text('#imgbrowse_holder {' + 'position: absolute;' + 'top: 0;' + 'left: 0;' + 'width: 100%;' + 'height: 100%;' + 'background-color: rgba(0, 0, 0, .5);' + 'z-index: 5;' + '}' + '#imgbrowse {' + 'position: absolute;' + 'top: 25px;' + 'left: 25px;' + 'right: 25px;' + 'bottom: 25px;' + 'min-width: 300px;' + 'min-height: 200px;' + 'background: #B0B0B0;' + 'border: 1px outset #777;' + '}' + '#imgbrowse h1 {' + 'font-size: 20px;' + 'margin: .4em;' + 'text-align: center;' + '}' + '#lib_framewrap,' + '#imgbrowse > ul {' + 'position: absolute;' + 'top: 45px;' + 'left: 10px;' + 'right: 10px;' + 'bottom: 10px;' + 'background: white;' + 'margin: 0;' + 'padding: 0;' + '}' + '#imgbrowse > ul {' + 'overflow: auto;' + '}' + '#imgbrowse > div {' + 'border: 1px solid #666;' + '}' + '#imglib_preview > div {' + 'padding: 5px;' + 'font-size: 12px;' + '}' + '#imglib_preview img {' + 'display: block;' + 'margin: 0 auto;' + 'max-height: 100px;' + '}' + '#imgbrowse li {' + 'list-style: none;' + 'padding: .5em;' + 'background: #E8E8E8;' + 'border-bottom: 1px solid #B0B0B0;' + 'line-height: 1.2em;' + 'font-style: sans-serif;' + '}' + '#imgbrowse li > span {' + 'color: #666;' + 'font-size: 15px;' + 'display: block;' + '}' + '#imgbrowse li:hover {' + 'background: #FFC;' + 'cursor: pointer;' + '}' + '#imgbrowse iframe {' + 'width: 100%;' + 'height: 100%;' + 'border: 0;' + '}').appendTo('head'); 
 | 
                  } 
 | 
                }); 
 | 
  
 | 
              case 21: 
 | 
              case "end": 
 | 
                return _context.stop(); 
 | 
            } 
 | 
          } 
 | 
        }, _callee, this); 
 | 
      })); 
 | 
  
 | 
      return function init(_x) { 
 | 
        return _init.apply(this, arguments); 
 | 
      }; 
 | 
    }() 
 | 
  }; 
 | 
  
 | 
  return extImagelib; 
 | 
  
 | 
}()); 
 |