{"version":3,"file":"ext-grid.js","sources":["../../../src/editor/extensions/ext-grid.js"],"sourcesContent":["/**\n * @file ext-grid.js\n *\n * @license Apache-2.0\n *\n * @copyright 2010 Redou Mine, 2010 Alexis Deveria\n *\n */\n\nexport default {\n name: 'grid',\n async init ({$, NS, getTypeMap, importLocale}) {\n const strings = await importLocale();\n const svgEditor = this;\n const svgCanvas = svgEditor.canvas;\n const svgdoc = document.getElementById('svgcanvas').ownerDocument,\n {assignAttributes} = svgCanvas,\n hcanvas = document.createElement('canvas'),\n canvBG = $('#canvasBackground'),\n units = getTypeMap(), // Assumes prior `init()` call on `units.js` module\n intervals = [0.01, 0.1, 1, 10, 100, 1000];\n let showGrid = svgEditor.curConfig.showGrid || false;\n\n $(hcanvas).hide().appendTo('body');\n\n const canvasGrid = svgdoc.createElementNS(NS.SVG, 'svg');\n assignAttributes(canvasGrid, {\n id: 'canvasGrid',\n width: '100%',\n height: '100%',\n x: 0,\n y: 0,\n overflow: 'visible',\n display: 'none'\n });\n canvBG.append(canvasGrid);\n const gridDefs = svgdoc.createElementNS(NS.SVG, 'defs');\n // grid-pattern\n const gridPattern = svgdoc.createElementNS(NS.SVG, 'pattern');\n assignAttributes(gridPattern, {\n id: 'gridpattern',\n patternUnits: 'userSpaceOnUse',\n x: 0, // -(value.strokeWidth / 2), // position for strokewidth\n y: 0, // -(value.strokeWidth / 2), // position for strokewidth\n width: 100,\n height: 100\n });\n\n const gridimg = svgdoc.createElementNS(NS.SVG, 'image');\n assignAttributes(gridimg, {\n x: 0,\n y: 0,\n width: 100,\n height: 100\n });\n gridPattern.append(gridimg);\n gridDefs.append(gridPattern);\n $('#canvasGrid').append(gridDefs);\n\n // grid-box\n const gridBox = svgdoc.createElementNS(NS.SVG, 'rect');\n assignAttributes(gridBox, {\n width: '100%',\n height: '100%',\n x: 0,\n y: 0,\n 'stroke-width': 0,\n stroke: 'none',\n fill: 'url(#gridpattern)',\n style: 'pointer-events: none; display:visible;'\n });\n $('#canvasGrid').append(gridBox);\n\n /**\n *\n * @param {Float} zoom\n * @returns {void}\n */\n function updateGrid (zoom) {\n // TODO: Try this with elements, then compare performance difference\n const unit = units[svgEditor.curConfig.baseUnit]; // 1 = 1px\n const uMulti = unit * zoom;\n // Calculate the main number interval\n const rawM = 100 / uMulti;\n let multi = 1;\n intervals.some((num) => {\n multi = num;\n return rawM <= num;\n });\n const bigInt = multi * uMulti;\n\n // Set the canvas size to the width of the container\n hcanvas.width = bigInt;\n hcanvas.height = bigInt;\n const ctx = hcanvas.getContext('2d');\n const curD = 0.5;\n const part = bigInt / 10;\n\n ctx.globalAlpha = 0.2;\n ctx.strokeStyle = svgEditor.curConfig.gridColor;\n for (let i = 1; i < 10; i++) {\n const subD = Math.round(part * i) + 0.5;\n // const lineNum = (i % 2)?12:10;\n const lineNum = 0;\n ctx.moveTo(subD, bigInt);\n ctx.lineTo(subD, lineNum);\n ctx.moveTo(bigInt, subD);\n ctx.lineTo(lineNum, subD);\n }\n ctx.stroke();\n ctx.beginPath();\n ctx.globalAlpha = 0.5;\n ctx.moveTo(curD, bigInt);\n ctx.lineTo(curD, 0);\n\n ctx.moveTo(bigInt, curD);\n ctx.lineTo(0, curD);\n ctx.stroke();\n\n const datauri = hcanvas.toDataURL('image/png');\n gridimg.setAttribute('width', bigInt);\n gridimg.setAttribute('height', bigInt);\n gridimg.parentNode.setAttribute('width', bigInt);\n gridimg.parentNode.setAttribute('height', bigInt);\n svgCanvas.setHref(gridimg, datauri);\n }\n\n /**\n *\n * @returns {void}\n */\n function gridUpdate () {\n if (showGrid) {\n updateGrid(svgCanvas.getZoom());\n }\n $('#canvasGrid').toggle(showGrid);\n $('#view_grid').toggleClass('push_button_pressed tool_button');\n }\n const buttons = [{\n id: 'view_grid',\n icon: 'grid.png',\n type: 'context',\n panel: 'editor_panel',\n events: {\n click () {\n svgEditor.curConfig.showGrid = showGrid = !showGrid;\n gridUpdate();\n }\n }\n }];\n return {\n name: strings.name,\n svgicons: 'grid-icon.xml',\n\n zoomChanged (zoom) {\n if (showGrid) { updateGrid(zoom); }\n },\n callback () {\n if (showGrid) {\n gridUpdate();\n }\n },\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n })\n };\n }\n};\n"],"names":["name","init","updateGrid","gridUpdate","showGrid","svgCanvas","getZoom","$","toggle","toggleClass","zoom","unit","units","svgEditor","curConfig","baseUnit","uMulti","rawM","multi","intervals","some","num","bigInt","hcanvas","width","height","ctx","getContext","curD","part","globalAlpha","strokeStyle","gridColor","i","subD","Math","round","lineNum","moveTo","lineTo","stroke","beginPath","datauri","toDataURL","gridimg","setAttribute","parentNode","setHref","NS","getTypeMap","importLocale","strings","canvas","svgdoc","document","getElementById","ownerDocument","assignAttributes","createElement","canvBG","hide","appendTo","canvasGrid","createElementNS","SVG","id","x","y","overflow","display","append","gridDefs","gridPattern","patternUnits","gridBox","fill","style","buttons","icon","type","panel","events","click","svgicons","zoomChanged","callback","map","button","Object","assign"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}