{"version":3,"file":"umw.personalized-product-view.min.js","sources":["umw.personalized-product-view.js"],"sourcesContent":["(function ($, root) {\r\n 'use strict';\r\n\r\n // Requires: webFont, jCanvas\r\n\r\n // Notes:\r\n // 1. Docs:\r\n // webFont - https://github.com/typekit/webfontloader\r\n // jCanvas - https://projects.calebevans.me/jcanvas/docs/\r\n // 2. Only Google Fonts supported for now\r\n\r\n $.widget('umw.personalizedproductview', {\r\n $canvas: null,\r\n loadedFonts: [],\r\n render: function(model, successCallback, errCallback, drawGrid) {\r\n var self = this;\r\n\r\n if(!self.$canvas){\r\n root.require(['jcanvas/jcanvas.min'], function() {\r\n self.$canvas = $('Canvas not supported');\r\n self.element.empty();\r\n self.element.append(self.$canvas);\r\n\r\n loadFontsAndDrawLayers();\r\n });\r\n } else {\r\n self.$canvas.attr('width', model.imageWidth);\r\n self.$canvas.attr('height', model.imageHeight);\r\n loadFontsAndDrawLayers();\r\n }\r\n\r\n function drawLayers(layersToDraw) {\r\n self.$canvas.removeLayers();\r\n\r\n layersToDraw.forEach(function(layer) {\r\n self.$canvas.addLayer(layer);\r\n });\r\n self.$canvas.drawLayers({ complete: function() {\r\n if (drawGrid) {\r\n self._drawGrid(model);\r\n }\r\n raiseSuccess();\r\n } });\r\n }\r\n\r\n function loadFontsAndDrawLayers() { \r\n if (!model.layers || !model.layers.length) {\r\n self.$canvas.removeLayers();\r\n self.$canvas.drawLayers({ complete: function() {\r\n if (drawGrid) {\r\n self._drawGrid(model);\r\n }\r\n raiseSuccess();\r\n } });\r\n return;\r\n }\r\n\r\n var fontsAreValid = model.layers.every(function(layer) {\r\n if (layer.type === 'text' && !layer.fontFamily) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n if (!fontsAreValid) {\r\n raiseError('Can not render text layer if familyName(font) is not defined');\r\n return;\r\n }\r\n\r\n var fontsToLoad = [];\r\n model.layers.forEach(function(layer) {\r\n if (layer.fontFamily && self.loadedFonts.indexOf(layer.fontFamily) < 0) {\r\n fontsToLoad.push(layer.fontFamily);\r\n }\r\n });\r\n\r\n if (fontsToLoad.length) {\r\n root.require(['webfont/webfont'],\r\n function(webFont) {\r\n webFont.load({\r\n google: { families: fontsToLoad, },\r\n //loading: function() {},\r\n active: function() {\r\n drawLayers(model.layers);\r\n },\r\n inactive: function() {\r\n raiseError('Can not load some of Google fonts');\r\n },\r\n //fontloading: function(familyName, fvd) {},\r\n fontactive: function(familyName, fvd) {\r\n self.loadedFonts.push(familyName);\r\n },\r\n fontinactive: function(familyName, fvd) {\r\n raiseError('Can not load Google font: ' + familyName);\r\n }\r\n });\r\n });\r\n } else {\r\n drawLayers(model.layers);\r\n }\r\n }\r\n\r\n function raiseSuccess() {\r\n if (successCallback && typeof successCallback === 'function') {\r\n successCallback();\r\n }\r\n }\r\n\r\n function raiseError(message) {\r\n if (errCallback && typeof errCallback === 'function') {\r\n errCallback(message);\r\n }\r\n }\r\n },\r\n _drawGrid: function(model) {\r\n var self = this;\r\n if (self.$canvas) {\r\n\r\n // Note: gridColor and gridStep (as well as strokeWidth, strokeDash and border's properties) can be added to model later to be able configure\r\n var gridColor = '#888';\r\n var gridStep = 4;\r\n var vx = model.imageWidth / gridStep;\r\n var vy = model.imageHeight / gridStep;\r\n\r\n // draw grid\r\n for (var i = 1; i < gridStep; ++i){\r\n self.$canvas.drawVector({\r\n layer: true,\r\n strokeStyle: gridColor,\r\n strokeWidth: 1,\r\n strokeDash: [4],\r\n strokeDashOffset: 0,\r\n x: i * vx, y: 0, a1: 180, l1: model.imageHeight\r\n });\r\n\r\n self.$canvas.drawVector({\r\n layer: true,\r\n strokeStyle: gridColor,\r\n strokeWidth: 1,\r\n strokeDash: [4],\r\n strokeDashOffset: gridStep,\r\n x: 0, y: i * vy, a1: 90, l1: model.imageWidth\r\n });\r\n }\r\n\r\n // draw border\r\n self.$canvas.drawVector({\r\n layer: true,\r\n strokeStyle: gridColor,\r\n x: 0, y: 0, a1: 180, l1: model.imageHeight\r\n });\r\n\r\n self.$canvas.drawVector({\r\n layer: true,\r\n strokeStyle: gridColor,\r\n x: model.imageWidth, y: 0, a1: 180, l1: model.imageHeight\r\n });\r\n\r\n self.$canvas.drawVector({\r\n layer: true,\r\n strokeStyle: gridColor,\r\n x: 0, y: 0, a1: 90, l1: model.imageWidth\r\n });\r\n\r\n self.$canvas.drawVector({\r\n layer: true,\r\n strokeStyle: gridColor,\r\n x: 0, y: model.imageHeight, a1: 90, l1: model.imageWidth\r\n });\r\n }\r\n },\r\n getImageDataUrl: function(imageType, quality) {\r\n var self = this;\r\n if (self.$canvas) {\r\n return self.$canvas.getCanvasImage(imageType, quality);\r\n }\r\n return '';\r\n },\r\n _create: function() {}\r\n });\r\n})(jQuery, window);\r\n"],"names":["$","root","widget","$canvas","loadedFonts","render","model","successCallback","errCallback","drawGrid","self","this","drawLayers","layersToDraw","removeLayers","forEach","layer","addLayer","complete","_drawGrid","raiseSuccess","loadFontsAndDrawLayers","fontsToLoad","layers","length","every","type","fontFamily","indexOf","push","require","webFont","load","google","families","active","inactive","raiseError","fontactive","familyName","fvd","fontinactive","message","attr","imageWidth","imageHeight","element","empty","append","gridColor","vx","vy","i","drawVector","strokeStyle","strokeWidth","strokeDash","strokeDashOffset","x","y","a1","l1","getImageDataUrl","imageType","quality","getCanvasImage","_create","jQuery","window"],"mappings":"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"}