| var svgEditorExtension_markers = (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-markers.js | 
|    * | 
|    * @license Apache-2.0 | 
|    * | 
|    * @copyright 2010 Will Schleter based on ext-arrows.js by Copyright(c) 2010 Alexis Deveria | 
|    * | 
|    * This extension provides for the addition of markers to the either end | 
|    * or the middle of a line, polyline, path, polygon. | 
|    * | 
|    * Markers may be either a graphic or arbitary text | 
|    * | 
|    * to simplify the coding and make the implementation as robust as possible, | 
|    * markers are not shared - every object has its own set of markers. | 
|    * this relationship is maintained by a naming convention between the | 
|    * ids of the markers and the ids of the object | 
|    * | 
|    * The following restrictions exist for simplicty of use and programming | 
|    *    objects and their markers to have the same color | 
|    *    marker size is fixed | 
|    *    text marker font, size, and attributes are fixed | 
|    *    an application specific attribute - se_type - is added to each marker element | 
|    *        to store the type of marker | 
|    * | 
|    * @todo | 
|    *    remove some of the restrictions above | 
|    *    add option for keeping text aligned to horizontal | 
|    *    add support for dimension extension lines | 
|    * | 
|   */ | 
|   var extMarkers = { | 
|     name: 'markers', | 
|     init: function () { | 
|       var _init = _asyncToGenerator( | 
|       /*#__PURE__*/ | 
|       regeneratorRuntime.mark(function _callee2(S) { | 
|         var strings, svgEditor, $, svgCanvas, addElem, mtypes, markerPrefix, idPrefix, markerTypes, getLinked, setIcon, selElems, showPanel, addMarker, convertline, setMarker, colorChanged, updateReferences, triggerTextEntry, showTextPrompt, setArrowFromButton, getTitle, buildButtonList, contextTools; | 
|         return regeneratorRuntime.wrap(function _callee2$(_context2) { | 
|           while (1) { | 
|             switch (_context2.prev = _context2.next) { | 
|               case 0: | 
|                 buildButtonList = function _ref14(lang) { | 
|                   var buttons = []; // const i = 0; | 
|   | 
|                   /* | 
|                   buttons.push({ | 
|                     id: idPrefix + 'markers_off', | 
|                     title: 'Turn off all markers', | 
|                     type: 'context', | 
|                     events: { click: setMarkerSet }, | 
|                     panel: 'marker_panel' | 
|                   }); | 
|                   buttons.push({ | 
|                     id: idPrefix + 'markers_dimension', | 
|                     title: 'Dimension', | 
|                     type: 'context', | 
|                     events: { click: setMarkerSet }, | 
|                     panel: 'marker_panel' | 
|                   }); | 
|                   buttons.push({ | 
|                     id: idPrefix + 'markers_label', | 
|                     title: 'Label', | 
|                     type: 'context', | 
|                     events: { click: setMarkerSet }, | 
|                     panel: 'marker_panel' | 
|                   }); | 
|                   */ | 
|   | 
|                   $.each(mtypes, function (k, pos) { | 
|                     var listname = pos + '_marker_list'; | 
|                     var def = true; | 
|                     Object.keys(markerTypes).forEach(function (id) { | 
|                       var title = getTitle(String(id)); | 
|                       buttons.push({ | 
|                         id: idPrefix + pos + '_' + id, | 
|                         svgicon: id, | 
|                         icon: svgEditor.curConfig.extIconsPath + 'markers-' + id + '.png', | 
|                         title: title, | 
|                         type: 'context', | 
|                         events: { | 
|                           click: setArrowFromButton | 
|                         }, | 
|                         panel: 'marker_panel', | 
|                         list: listname, | 
|                         isDefault: def | 
|                       }); | 
|                       def = false; | 
|                     }); | 
|                   }); | 
|                   return buttons; | 
|                 }; | 
|   | 
|                 getTitle = function _ref13(id) { | 
|                   var langList = strings.langList; | 
|                   var item = langList.find(function (item) { | 
|                     return item.id === id; | 
|                   }); | 
|                   return item ? item.title : id; | 
|                 }; | 
|   | 
|                 setArrowFromButton = function _ref12(obj) { | 
|                   var parts = this.id.split('_'); | 
|                   var pos = parts[1]; | 
|                   var val = parts[2]; | 
|   | 
|                   if (parts[3]) { | 
|                     val += '_' + parts[3]; | 
|                   } | 
|   | 
|                   if (val !== 'textmarker') { | 
|                     triggerTextEntry(pos, '\\' + val); | 
|                   } else { | 
|                     showTextPrompt(pos); | 
|                   } | 
|                 }; | 
|   | 
|                 showTextPrompt = function _ref11(pos) { | 
|                   var def = $('#' + pos + '_marker').val(); | 
|   | 
|                   if (def.substr(0, 1) === '\\') { | 
|                     def = ''; | 
|                   } | 
|   | 
|                   $.prompt('Enter text for ' + pos + ' marker', def, function (txt) { | 
|                     if (txt) { | 
|                       triggerTextEntry(pos, txt); | 
|                     } | 
|                   }); | 
|                 }; | 
|   | 
|                 triggerTextEntry = function _ref10(pos, val) { | 
|                   $('#' + pos + '_marker').val(val); | 
|                   $('#' + pos + '_marker').change(); // const txtbox = $('#'+pos+'_marker'); | 
|                   // if (val.substr(0,1)=='\\') {txtbox.hide();} | 
|                   // else {txtbox.show();} | 
|                 }; | 
|   | 
|                 updateReferences = function _ref9(el) { | 
|                   $.each(mtypes, function (i, pos) { | 
|                     var id = markerPrefix + pos + '_' + el.id; | 
|                     var markerName = 'marker-' + pos; | 
|                     var marker = getLinked(el, markerName); | 
|   | 
|                     if (!marker || !marker.attributes.se_type) { | 
|                       return; | 
|                     } // not created by this extension | 
|   | 
|   | 
|                     var url = el.getAttribute(markerName); | 
|   | 
|                     if (url) { | 
|                       var len = el.id.length; | 
|                       var linkid = url.substr(-len - 1, len); | 
|   | 
|                       if (el.id !== linkid) { | 
|                         var val = $('#' + pos + '_marker').attr('value'); | 
|                         addMarker(id, val); | 
|                         svgCanvas.changeSelectedAttribute(markerName, 'url(#' + id + ')'); | 
|   | 
|                         if (el.tagName === 'line' && pos === 'mid') { | 
|                           el = convertline(el); | 
|                         } | 
|   | 
|                         svgCanvas.call('changed', selElems); | 
|                       } | 
|                     } | 
|                   }); | 
|                 }; | 
|   | 
|                 colorChanged = function _ref8(elem) { | 
|                   var color = elem.getAttribute('stroke'); | 
|                   $.each(mtypes, function (i, pos) { | 
|                     var marker = getLinked(elem, 'marker-' + pos); | 
|   | 
|                     if (!marker) { | 
|                       return; | 
|                     } | 
|   | 
|                     if (!marker.attributes.se_type) { | 
|                       return; | 
|                     } // not created by this extension | 
|   | 
|   | 
|                     var ch = marker.lastElementChild; | 
|   | 
|                     if (!ch) { | 
|                       return; | 
|                     } | 
|   | 
|                     var curfill = ch.getAttribute('fill'); | 
|                     var curstroke = ch.getAttribute('stroke'); | 
|   | 
|                     if (curfill && curfill !== 'none') { | 
|                       ch.setAttribute('fill', color); | 
|                     } | 
|   | 
|                     if (curstroke && curstroke !== 'none') { | 
|                       ch.setAttribute('stroke', color); | 
|                     } | 
|                   }); | 
|                 }; | 
|   | 
|                 setMarker = function _ref7() { | 
|                   var poslist = { | 
|                     start_marker: 'start', | 
|                     mid_marker: 'mid', | 
|                     end_marker: 'end' | 
|                   }; | 
|                   var pos = poslist[this.id]; | 
|                   var markerName = 'marker-' + pos; | 
|                   var el = selElems[0]; | 
|                   var marker = getLinked(el, markerName); | 
|   | 
|                   if (marker) { | 
|                     $(marker).remove(); | 
|                   } | 
|   | 
|                   el.removeAttribute(markerName); | 
|                   var val = this.value; | 
|   | 
|                   if (val === '') { | 
|                     val = '\\nomarker'; | 
|                   } | 
|   | 
|                   if (val === '\\nomarker') { | 
|                     setIcon(pos, val); | 
|                     svgCanvas.call('changed', selElems); | 
|                     return; | 
|                   } // Set marker on element | 
|   | 
|   | 
|                   var id = markerPrefix + pos + '_' + el.id; | 
|                   addMarker(id, val); | 
|                   svgCanvas.changeSelectedAttribute(markerName, 'url(#' + id + ')'); | 
|   | 
|                   if (el.tagName === 'line' && pos === 'mid') { | 
|                     convertline(el); | 
|                   } | 
|   | 
|                   svgCanvas.call('changed', selElems); | 
|                   setIcon(pos, val); | 
|                 }; | 
|   | 
|                 convertline = function _ref6(elem) { | 
|                   // this routine came from the connectors extension | 
|                   // it is needed because midpoint markers don't work with line elements | 
|                   if (!(elem.tagName === 'line')) { | 
|                     return elem; | 
|                   } // Convert to polyline to accept mid-arrow | 
|   | 
|   | 
|                   var x1 = Number(elem.getAttribute('x1')); | 
|                   var x2 = Number(elem.getAttribute('x2')); | 
|                   var y1 = Number(elem.getAttribute('y1')); | 
|                   var y2 = Number(elem.getAttribute('y2')); | 
|                   var id = elem.id; | 
|                   var midPt = ' ' + (x1 + x2) / 2 + ',' + (y1 + y2) / 2 + ' '; | 
|                   var pline = addElem({ | 
|                     element: 'polyline', | 
|                     attr: { | 
|                       points: x1 + ',' + y1 + midPt + x2 + ',' + y2, | 
|                       stroke: elem.getAttribute('stroke'), | 
|                       'stroke-width': elem.getAttribute('stroke-width'), | 
|                       fill: 'none', | 
|                       opacity: elem.getAttribute('opacity') || 1 | 
|                     } | 
|                   }); | 
|                   $.each(mtypes, function (i, pos) { | 
|                     // get any existing marker definitions | 
|                     var nam = 'marker-' + pos; | 
|                     var m = elem.getAttribute(nam); | 
|   | 
|                     if (m) { | 
|                       pline.setAttribute(nam, elem.getAttribute(nam)); | 
|                     } | 
|                   }); | 
|                   var batchCmd = new S.BatchCommand(); | 
|                   batchCmd.addSubCommand(new S.RemoveElementCommand(elem, elem.parentNode)); | 
|                   batchCmd.addSubCommand(new S.InsertElementCommand(pline)); | 
|                   $(elem).after(pline).remove(); | 
|                   svgCanvas.clearSelection(); | 
|                   pline.id = id; | 
|                   svgCanvas.addToSelection([pline]); | 
|                   S.addCommandToHistory(batchCmd); | 
|                   return pline; | 
|                 }; | 
|   | 
|                 addMarker = function _ref5(id, val) { | 
|                   var txtBoxBg = '#ffffff'; | 
|                   var txtBoxBorder = 'none'; | 
|                   var txtBoxStrokeWidth = 0; | 
|                   var marker = svgCanvas.getElem(id); | 
|   | 
|                   if (marker) { | 
|                     return; | 
|                   } | 
|   | 
|                   if (val === '' || val === '\\nomarker') { | 
|                     return; | 
|                   } | 
|   | 
|                   var el = selElems[0]; | 
|                   var color = el.getAttribute('stroke'); // NOTE: Safari didn't like a negative value in viewBox | 
|                   // so we use a standardized 0 0 100 100 | 
|                   // with 50 50 being mapped to the marker position | 
|   | 
|                   var strokeWidth = 10; | 
|                   var refX = 50; | 
|                   var refY = 50; | 
|                   var viewBox = '0 0 100 100'; | 
|                   var markerWidth = 5; | 
|                   var markerHeight = 5; | 
|                   var seType; | 
|   | 
|                   if (val.substr(0, 1) === '\\') { | 
|                     seType = val.substr(1); | 
|                   } else { | 
|                     seType = 'textmarker'; | 
|                   } | 
|   | 
|                   if (!markerTypes[seType]) { | 
|                     return; | 
|                   } // an unknown type! | 
|                   // create a generic marker | 
|   | 
|   | 
|                   marker = addElem({ | 
|                     element: 'marker', | 
|                     attr: { | 
|                       id: id, | 
|                       markerUnits: 'strokeWidth', | 
|                       orient: 'auto', | 
|                       style: 'pointer-events:none', | 
|                       se_type: seType | 
|                     } | 
|                   }); | 
|   | 
|                   if (seType !== 'textmarker') { | 
|                     var mel = addElem(markerTypes[seType]); | 
|                     var fillcolor = seType.substr(-2) === '_o' ? 'none' : color; | 
|                     mel.setAttribute('fill', fillcolor); | 
|                     mel.setAttribute('stroke', color); | 
|                     mel.setAttribute('stroke-width', strokeWidth); | 
|                     marker.append(mel); | 
|                   } else { | 
|                     var text = addElem(markerTypes[seType]); // have to add text to get bounding box | 
|   | 
|                     text.textContent = val; | 
|                     var tb = text.getBBox(); // alert(tb.x + ' ' + tb.y + ' ' + tb.width + ' ' + tb.height); | 
|   | 
|                     var pad = 1; | 
|                     var bb = tb; | 
|                     bb.x = 0; | 
|                     bb.y = 0; | 
|                     bb.width += pad * 2; | 
|                     bb.height += pad * 2; // shift text according to its size | 
|   | 
|                     text.setAttribute('x', pad); | 
|                     text.setAttribute('y', bb.height - pad - tb.height / 4); // kludge? | 
|   | 
|                     text.setAttribute('fill', color); | 
|                     refX = bb.width / 2 + pad; | 
|                     refY = bb.height / 2 + pad; | 
|                     viewBox = bb.x + ' ' + bb.y + ' ' + bb.width + ' ' + bb.height; | 
|                     markerWidth = bb.width / 10; | 
|                     markerHeight = bb.height / 10; | 
|                     var box = addElem({ | 
|                       element: 'rect', | 
|                       attr: { | 
|                         x: bb.x, | 
|                         y: bb.y, | 
|                         width: bb.width, | 
|                         height: bb.height, | 
|                         fill: txtBoxBg, | 
|                         stroke: txtBoxBorder, | 
|                         'stroke-width': txtBoxStrokeWidth | 
|                       } | 
|                     }); | 
|                     marker.setAttribute('orient', 0); | 
|                     marker.append(box, text); | 
|                   } | 
|   | 
|                   marker.setAttribute('viewBox', viewBox); | 
|                   marker.setAttribute('markerWidth', markerWidth); | 
|                   marker.setAttribute('markerHeight', markerHeight); | 
|                   marker.setAttribute('refX', refX); | 
|                   marker.setAttribute('refY', refY); | 
|                   svgCanvas.findDefs().append(marker); | 
|                   return marker; | 
|                 }; | 
|   | 
|                 showPanel = function _ref4(on) { | 
|                   $('#marker_panel').toggle(on); | 
|   | 
|                   if (on) { | 
|                     var el = selElems[0]; | 
|                     var val, ci; | 
|                     $.each(mtypes, function (i, pos) { | 
|                       var m = getLinked(el, 'marker-' + pos); | 
|                       var txtbox = $('#' + pos + '_marker'); | 
|   | 
|                       if (!m) { | 
|                         val = '\\nomarker'; | 
|                         ci = val; | 
|                         txtbox.hide(); // hide text box | 
|                       } else { | 
|                         if (!m.attributes.se_type) { | 
|                           return; | 
|                         } // not created by this extension | 
|   | 
|   | 
|                         val = '\\' + m.attributes.se_type.textContent; | 
|                         ci = val; | 
|   | 
|                         if (val === '\\textmarker') { | 
|                           val = m.lastChild.textContent; // txtbox.show(); // show text box | 
|                         } else { | 
|                           txtbox.hide(); // hide text box | 
|                         } | 
|                       } | 
|   | 
|                       txtbox.val(val); | 
|                       setIcon(pos, ci); | 
|                     }); | 
|                   } | 
|                 }; | 
|   | 
|                 setIcon = function _ref3(pos, id) { | 
|                   if (id.substr(0, 1) !== '\\') { | 
|                     id = '\\textmarker'; | 
|                   } | 
|   | 
|                   var ci = '#' + idPrefix + pos + '_' + id.substr(1); | 
|                   svgEditor.setIcon('#cur_' + pos + '_marker_list', $(ci).children()); | 
|                   $(ci).addClass('current').siblings().removeClass('current'); | 
|                 }; | 
|   | 
|                 getLinked = function _ref2(elem, attr) { | 
|                   var str = elem.getAttribute(attr); | 
|   | 
|                   if (!str) { | 
|                     return null; | 
|                   } | 
|   | 
|                   var m = str.match(/\(#(.*)\)/); | 
|   | 
|                   if (!m || m.length !== 2) { | 
|                     return null; | 
|                   } | 
|   | 
|                   return svgCanvas.getElem(m[1]); | 
|                 }; | 
|   | 
|                 _context2.next = 15; | 
|                 return S.importLocale(); | 
|   | 
|               case 15: | 
|                 strings = _context2.sent; | 
|                 svgEditor = this; | 
|                 $ = jQuery; | 
|                 svgCanvas = svgEditor.canvas; | 
|                 addElem = svgCanvas.addSVGElementFromJson; | 
|                 mtypes = ['start', 'mid', 'end']; | 
|                 markerPrefix = 'se_marker_'; | 
|                 idPrefix = 'mkr_'; // note - to add additional marker types add them below with a unique id | 
|                 // and add the associated icon(s) to marker-icons.svg | 
|                 // the geometry is normalized to a 100x100 box with the origin at lower left | 
|                 // Safari did not like negative values for low left of viewBox | 
|                 // remember that the coordinate system has +y downward | 
|   | 
|                 markerTypes = { | 
|                   nomarker: {}, | 
|                   leftarrow: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M0,50 L100,90 L70,50 L100,10 Z' | 
|                     } | 
|                   }, | 
|                   rightarrow: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M100,50 L0,90 L30,50 L0,10 Z' | 
|                     } | 
|                   }, | 
|                   textmarker: { | 
|                     element: 'text', | 
|                     attr: { | 
|                       x: 0, | 
|                       y: 0, | 
|                       'stroke-width': 0, | 
|                       stroke: 'none', | 
|                       'font-size': 75, | 
|                       'font-family': 'serif', | 
|                       'text-anchor': 'left', | 
|                       'xml:space': 'preserve' | 
|                     } | 
|                   }, | 
|                   forwardslash: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M30,100 L70,0' | 
|                     } | 
|                   }, | 
|                   reverseslash: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M30,0 L70,100' | 
|                     } | 
|                   }, | 
|                   verticalslash: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M50,0 L50,100' | 
|                     } | 
|                   }, | 
|                   box: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M20,20 L20,80 L80,80 L80,20 Z' | 
|                     } | 
|                   }, | 
|                   star: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M10,30 L90,30 L20,90 L50,10 L80,90 Z' | 
|                     } | 
|                   }, | 
|                   xmark: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M20,80 L80,20 M80,80 L20,20' | 
|                     } | 
|                   }, | 
|                   triangle: { | 
|                     element: 'path', | 
|                     attr: { | 
|                       d: 'M10,80 L50,20 L80,80 Z' | 
|                     } | 
|                   }, | 
|                   mcircle: { | 
|                     element: 'circle', | 
|                     attr: { | 
|                       r: 30, | 
|                       cx: 50, | 
|                       cy: 50 | 
|                     } | 
|                   } | 
|                 }; // duplicate shapes to support unfilled (open) marker types with an _o suffix | 
|   | 
|                 ['leftarrow', 'rightarrow', 'box', 'star', 'mcircle', 'triangle'].forEach(function (v) { | 
|                   markerTypes[v + '_o'] = markerTypes[v]; | 
|                 }); | 
|                 /** | 
|                 * @param {Element} elem - A graphic element will have an attribute like marker-start | 
|                 * @param {"marker-start"|"marker-mid"|"marker-end"} attr | 
|                 * @returns {Element} The marker element that is linked to the graphic element | 
|                 */ | 
|   | 
|                 contextTools = [{ | 
|                   type: 'input', | 
|                   panel: 'marker_panel', | 
|                   id: 'start_marker', | 
|                   size: 3, | 
|                   events: { | 
|                     change: setMarker | 
|                   } | 
|                 }, { | 
|                   type: 'button-select', | 
|                   panel: 'marker_panel', | 
|                   id: 'start_marker_list', | 
|                   colnum: 3, | 
|                   events: { | 
|                     change: setArrowFromButton | 
|                   } | 
|                 }, { | 
|                   type: 'input', | 
|                   panel: 'marker_panel', | 
|                   id: 'mid_marker', | 
|                   defval: '', | 
|                   size: 3, | 
|                   events: { | 
|                     change: setMarker | 
|                   } | 
|                 }, { | 
|                   type: 'button-select', | 
|                   panel: 'marker_panel', | 
|                   id: 'mid_marker_list', | 
|                   colnum: 3, | 
|                   events: { | 
|                     change: setArrowFromButton | 
|                   } | 
|                 }, { | 
|                   type: 'input', | 
|                   panel: 'marker_panel', | 
|                   id: 'end_marker', | 
|                   size: 3, | 
|                   events: { | 
|                     change: setMarker | 
|                   } | 
|                 }, { | 
|                   type: 'button-select', | 
|                   panel: 'marker_panel', | 
|                   id: 'end_marker_list', | 
|                   colnum: 3, | 
|                   events: { | 
|                     change: setArrowFromButton | 
|                   } | 
|                 }]; | 
|                 return _context2.abrupt("return", { | 
|                   name: strings.name, | 
|                   svgicons: svgEditor.curConfig.extIconsPath + 'markers-icons.xml', | 
|                   callback: function callback() { | 
|                     $('#marker_panel').addClass('toolset').hide(); | 
|                   }, | 
|                   addLangData: function () { | 
|                     var _addLangData = _asyncToGenerator( | 
|                     /*#__PURE__*/ | 
|                     regeneratorRuntime.mark(function _callee(_ref) { | 
|                       var importLocale, lang; | 
|                       return regeneratorRuntime.wrap(function _callee$(_context) { | 
|                         while (1) { | 
|                           switch (_context.prev = _context.next) { | 
|                             case 0: | 
|                               importLocale = _ref.importLocale, lang = _ref.lang; | 
|                               return _context.abrupt("return", { | 
|                                 data: strings.langList | 
|                               }); | 
|   | 
|                             case 2: | 
|                             case "end": | 
|                               return _context.stop(); | 
|                           } | 
|                         } | 
|                       }, _callee, this); | 
|                     })); | 
|   | 
|                     return function addLangData(_x2) { | 
|                       return _addLangData.apply(this, arguments); | 
|                     }; | 
|                   }(), | 
|                   selectedChanged: function selectedChanged(opts) { | 
|                     // Use this to update the current selected elements | 
|                     // console.log('selectChanged',opts); | 
|                     selElems = opts.elems; | 
|                     var markerElems = ['line', 'path', 'polyline', 'polygon']; | 
|                     var i = selElems.length; | 
|   | 
|                     while (i--) { | 
|                       var elem = selElems[i]; | 
|   | 
|                       if (elem && markerElems.includes(elem.tagName)) { | 
|                         if (opts.selectedElement && !opts.multiselected) { | 
|                           showPanel(true); | 
|                         } else { | 
|                           showPanel(false); | 
|                         } | 
|                       } else { | 
|                         showPanel(false); | 
|                       } | 
|                     } | 
|                   }, | 
|                   elementChanged: function elementChanged(opts) { | 
|                     // console.log('elementChanged',opts); | 
|                     var elem = opts.elems[0]; | 
|   | 
|                     if (elem && (elem.getAttribute('marker-start') || elem.getAttribute('marker-mid') || elem.getAttribute('marker-end'))) { | 
|                       colorChanged(elem); | 
|                       updateReferences(elem); | 
|                     } // changing_flag = false; // Not apparently in use | 
|   | 
|                   }, | 
|                   buttons: buildButtonList(), | 
|                   context_tools: strings.contextTools.map(function (contextTool, i) { | 
|                     return Object.assign(contextTools[i], contextTool); | 
|                   }) | 
|                 }); | 
|   | 
|               case 27: | 
|               case "end": | 
|                 return _context2.stop(); | 
|             } | 
|           } | 
|         }, _callee2, this); | 
|       })); | 
|   | 
|       return function init(_x) { | 
|         return _init.apply(this, arguments); | 
|       }; | 
|     }() | 
|   }; | 
|   | 
|   return extMarkers; | 
|   | 
| }()); |