ig_markerfactory
Advanced tools
Comparing version 2.9.4 to 2.9.5
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : | ||
typeof define === 'function' && define.amd ? define(factory) : | ||
(global.MarkerFactory = factory()); | ||
}(this, function () { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
(factory((global = global || {}))); | ||
}(this, (function (exports) { 'use strict'; | ||
var MarkerFactory = {}; | ||
var MarkerFactory = {}; | ||
function compact(array) { | ||
var index = -1, | ||
length = array ? array.length : 0, | ||
resIndex = 0, | ||
result = []; | ||
function compact(array) { | ||
var index = -1, | ||
length = array ? array.length : 0, | ||
resIndex = 0, | ||
result = []; | ||
while (++index < length) { | ||
var value = array[index]; | ||
if (value) { | ||
result[resIndex++] = value; | ||
} | ||
while (++index < length) { | ||
var value = array[index]; | ||
if (value) { | ||
result[resIndex++] = value; | ||
} | ||
return result; | ||
} | ||
return result; | ||
} | ||
var defaults = { | ||
h: 1, | ||
s: 78, // constant saturation | ||
l: 63, // constant luminance | ||
a: 1 | ||
}; | ||
var defaults = { | ||
h: 1, | ||
s: 78, // constant saturation | ||
l: 63, // constant luminance | ||
a: 1 | ||
}; | ||
var getColor = function (val, range) { | ||
defaults.h = Math.floor((360 / range) * val); | ||
return "hsla(" + defaults.h + "," + defaults.s + "%," + defaults.l + "%," + defaults.a + ")"; | ||
}; | ||
var getColor = function (val, range) { | ||
defaults.h = Math.floor((360 / range) * val); | ||
return "hsla(" + defaults.h + "," + defaults.s + "%," + defaults.l + "%," + defaults.a + ")"; | ||
}; | ||
var getColor1 = function () { | ||
return "hsla(" + defaults.h + "," + defaults.s + "%," + (defaults.l - 30) + "%," + defaults.a + ")"; | ||
}; | ||
var getColor1 = function () { | ||
return "hsla(" + defaults.h + "," + defaults.s + "%," + (defaults.l - 30) + "%," + defaults.a + ")"; | ||
}; | ||
var parseHalf = function (foo) { | ||
return parseInt(foo / 2, 10); | ||
}; | ||
var parseHalf = function (foo) { | ||
return parseInt(foo / 2, 10); | ||
}; | ||
var darken = function (stringcolor, factor) { | ||
var darkercolor = {}; | ||
if (!factor) { | ||
factor = 1; | ||
} | ||
if (stringcolor.fillColor.indexOf('rgb') !== -1) { | ||
darkercolor.r = factor * parseHalf(stringcolor.r); | ||
darkercolor.g = factor * parseHalf(stringcolor.g); | ||
darkercolor.b = factor * parseHalf(stringcolor.b); | ||
darkercolor.fillColor = 'rgba(' + darkercolor.r + ',' + darkercolor.g + ',' + darkercolor.b + ',0.99)'; | ||
} else if (stringcolor.fillColor.indexOf('hsl') !== -1) { | ||
darkercolor.h = stringcolor.h; | ||
darkercolor.s = stringcolor.s; | ||
darkercolor.l = factor * stringcolor.l - 30; | ||
darkercolor.fillColor = 'hsl(' + darkercolor.h + ',' + darkercolor.s + '%,' + darkercolor.l + '%)'; | ||
} | ||
var darken = function (stringcolor, factor) { | ||
var darkercolor = {}; | ||
if (!factor) { | ||
factor = 1; | ||
} | ||
if (stringcolor.fillColor.indexOf('rgb') !== -1) { | ||
darkercolor.r = factor * parseHalf(stringcolor.r); | ||
darkercolor.g = factor * parseHalf(stringcolor.g); | ||
darkercolor.b = factor * parseHalf(stringcolor.b); | ||
darkercolor.fillColor = 'rgba(' + darkercolor.r + ',' + darkercolor.g + ',' + darkercolor.b + ',0.99)'; | ||
} else if (stringcolor.fillColor.indexOf('hsl') !== -1) { | ||
darkercolor.h = stringcolor.h; | ||
darkercolor.s = stringcolor.s; | ||
darkercolor.l = factor * stringcolor.l - 30; | ||
darkercolor.fillColor = 'hsl(' + darkercolor.h + ',' + darkercolor.s + '%,' + darkercolor.l + '%)'; | ||
} | ||
return darkercolor; | ||
return darkercolor; | ||
}; | ||
var parseHex = function (hexstring, opacity) { | ||
var hexcolor = { | ||
hex: hexstring | ||
}; | ||
var parseHex = function (hexstring, opacity) { | ||
var hexcolor = { | ||
hex: hexstring | ||
}; | ||
hexstring = hexstring.replace('#', ''); | ||
if (hexstring.length === 3) { | ||
hexstring = hexstring[0] + hexstring[0] + hexstring[1] + hexstring[1] + hexstring[2] + hexstring[2]; | ||
} | ||
if (isNaN(parseFloat(opacity, 10))) { | ||
opacity = 1; | ||
} | ||
hexstring = hexstring.replace('#', ''); | ||
if (hexstring.length === 3) { | ||
hexstring = hexstring[0] + hexstring[0] + hexstring[1] + hexstring[1] + hexstring[2] + hexstring[2]; | ||
} | ||
if (isNaN(parseFloat(opacity, 10))) { | ||
opacity = 1; | ||
} | ||
hexcolor.r = parseInt(hexstring.substring(0, 2), 16); | ||
hexcolor.g = parseInt(hexstring.substring(2, 4), 16); | ||
hexcolor.b = parseInt(hexstring.substring(4, 6), 16); | ||
hexcolor.a = opacity; | ||
hexcolor.fillColor = 'rgba(' + hexcolor.r + ',' + hexcolor.g + ',' + hexcolor.b + ',' + hexcolor.a + ')'; | ||
hexcolor.strokeColor = ['rgba(' + parseHalf(hexcolor.r), parseHalf(hexcolor.g), parseHalf(hexcolor.b), hexcolor.a + ')'].join(','); | ||
hexcolor.rgb = hexcolor.fillColor; | ||
return hexcolor; | ||
}; | ||
hexcolor.r = parseInt(hexstring.substring(0, 2), 16); | ||
hexcolor.g = parseInt(hexstring.substring(2, 4), 16); | ||
hexcolor.b = parseInt(hexstring.substring(4, 6), 16); | ||
hexcolor.a = opacity; | ||
hexcolor.fillColor = 'rgba(' + hexcolor.r + ',' + hexcolor.g + ',' + hexcolor.b + ',' + hexcolor.a + ')'; | ||
hexcolor.strokeColor = ['rgba(' + parseHalf(hexcolor.r), parseHalf(hexcolor.g), parseHalf(hexcolor.b), hexcolor.a + ')'].join(','); | ||
hexcolor.rgb = hexcolor.fillColor; | ||
return hexcolor; | ||
}; | ||
var parseHSL = function (hslstring, opacity) { | ||
var hslcolor = {}, | ||
hslparts = compact(hslstring.split(/hsla?\(|\,|\)|\%/)); | ||
var parseHSL = function (hslstring, opacity) { | ||
var hslcolor = {}, | ||
hslparts = compact(hslstring.split(/hsla?\(|\,|\)|\%/)); | ||
if (hslparts[3] === undefined) { | ||
hslparts[3] = 1; | ||
} | ||
if (isNaN(parseFloat(opacity, 10))) { | ||
opacity = 1; | ||
} | ||
if (hslparts[3] === undefined) { | ||
hslparts[3] = 1; | ||
} | ||
if (isNaN(parseFloat(opacity, 10))) { | ||
opacity = 1; | ||
} | ||
hslcolor.h = parseFloat(hslparts[0], 10); | ||
hslcolor.s = parseFloat(hslparts[1], 10); | ||
hslcolor.l = parseFloat(hslparts[2], 10); | ||
hslcolor.a = parseFloat(opacity * hslparts[3], 10); | ||
hslcolor.h = parseFloat(hslparts[0], 10); | ||
hslcolor.s = parseFloat(hslparts[1], 10); | ||
hslcolor.l = parseFloat(hslparts[2], 10); | ||
hslcolor.a = parseFloat(opacity * hslparts[3], 10); | ||
hslcolor.fillColor = 'hsla(' + hslcolor.h + ',' + hslcolor.s + '%,' + hslcolor.l + '%,' + hslcolor.a + ')'; | ||
hslcolor.strokeColor = 'hsla(' + hslcolor.h + ',' + hslcolor.s + '%,' + parseInt(hslcolor.l / 2, 10) + '%,' + hslcolor.a + ')'; | ||
hslcolor.hsl = hslcolor.fillColor; | ||
return hslcolor; | ||
}; | ||
hslcolor.fillColor = 'hsla(' + hslcolor.h + ',' + hslcolor.s + '%,' + hslcolor.l + '%,' + hslcolor.a + ')'; | ||
hslcolor.strokeColor = 'hsla(' + hslcolor.h + ',' + hslcolor.s + '%,' + parseInt(hslcolor.l / 2, 10) + '%,' + hslcolor.a + ')'; | ||
hslcolor.hsl = hslcolor.fillColor; | ||
return hslcolor; | ||
}; | ||
var parseRGB = function (rgbstring, opacity) { | ||
var rgbcolor = {}, | ||
rgbparts = compact(rgbstring.split(/rgba?\(|\,|\)/)); | ||
var parseRGB = function (rgbstring, opacity) { | ||
var rgbcolor = {}, | ||
rgbparts = compact(rgbstring.split(/rgba?\(|\,|\)/)); | ||
if (rgbparts[3] === undefined) { | ||
rgbparts[3] = 1; | ||
} | ||
if (rgbparts[3] === undefined) { | ||
rgbparts[3] = 1; | ||
} | ||
if (isNaN(parseFloat(opacity, 10))) { | ||
opacity = 1; | ||
} | ||
if (isNaN(parseFloat(opacity, 10))) { | ||
opacity = 1; | ||
rgbcolor.r = parseInt(rgbparts[0], 10) % 256; | ||
rgbcolor.g = parseInt(rgbparts[1], 10) % 256; | ||
rgbcolor.b = parseInt(rgbparts[2], 10) % 256; | ||
rgbcolor.a = parseFloat(opacity * rgbparts[3], 10); | ||
rgbcolor.fillColor = 'rgba(' + rgbcolor.r + ',' + rgbcolor.g + ',' + rgbcolor.b + ',' + rgbcolor.a + ')'; | ||
rgbcolor.strokeColor = 'rgba(' + rgbcolor.r / 2 + ',' + rgbcolor.g / 2 + ',' + rgbcolor.b / 2 + ',' + rgbcolor.a + ')'; | ||
rgbcolor.rgb = rgbcolor.fillColor; | ||
return rgbcolor; | ||
}; | ||
var rgbToHSL = function (r, g, b, a) { | ||
r = (r % 256) / 255; | ||
g = (g % 256) / 255; | ||
b = (b % 256) / 255; | ||
if (a === undefined) { | ||
a = 1; | ||
} | ||
var max = Math.max(r, g, b), | ||
min = Math.min(r, g, b); | ||
var h, s, l = (max + min) / 2; | ||
if (max === min) { | ||
h = s = 0; // achromatic | ||
} else { | ||
var d = max - min; | ||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | ||
switch (max) { | ||
case r: | ||
h = (g - b) / d + (g < b ? 6 : 0); | ||
break; | ||
case g: | ||
h = (b - r) / d + 2; | ||
break; | ||
case b: | ||
h = (r - g) / d + 4; | ||
break; | ||
default: | ||
h = 0; | ||
break; | ||
} | ||
rgbcolor.r = parseInt(rgbparts[0], 10) % 256; | ||
rgbcolor.g = parseInt(rgbparts[1], 10) % 256; | ||
rgbcolor.b = parseInt(rgbparts[2], 10) % 256; | ||
rgbcolor.a = parseFloat(opacity * rgbparts[3], 10); | ||
rgbcolor.fillColor = 'rgba(' + rgbcolor.r + ',' + rgbcolor.g + ',' + rgbcolor.b + ',' + rgbcolor.a + ')'; | ||
rgbcolor.strokeColor = 'rgba(' + rgbcolor.r / 2 + ',' + rgbcolor.g / 2 + ',' + rgbcolor.b / 2 + ',' + rgbcolor.a + ')'; | ||
rgbcolor.rgb = rgbcolor.fillColor; | ||
return rgbcolor; | ||
h /= 6; | ||
} | ||
var hsl = { | ||
h: Math.round(360 * h), | ||
s: Math.round(100 * s), | ||
l: Math.round(100 * l), | ||
a: Math.round(100 * a) / 100 | ||
}; | ||
hsl.fillColor = 'hsla(' + hsl.h + ',' + hsl.s + '%,' + hsl.l + '%,' + hsl.a + ')'; | ||
var rgbToHSL = function (r, g, b, a) { | ||
r = (r % 256) / 255; | ||
g = (g % 256) / 255; | ||
b = (b % 256) / 255; | ||
if (a === undefined) { | ||
a = 1; | ||
} | ||
var max = Math.max(r, g, b), | ||
min = Math.min(r, g, b); | ||
var h, s, l = (max + min) / 2; | ||
return hsl; | ||
}; | ||
if (max === min) { | ||
h = s = 0; // achromatic | ||
} else { | ||
var d = max - min; | ||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | ||
switch (max) { | ||
case r: | ||
h = (g - b) / d + (g < b ? 6 : 0); | ||
break; | ||
case g: | ||
h = (b - r) / d + 2; | ||
break; | ||
case b: | ||
h = (r - g) / d + 4; | ||
break; | ||
default: | ||
h = 0; | ||
break; | ||
var hslToRGB = function (h, s, l, a) { | ||
var r, g, b; | ||
h = parseFloat(h, 10) / 360; | ||
s = parseFloat(s, 10) / 100; | ||
l = parseFloat(l, 10) / 100; | ||
if (a === undefined) { | ||
a = 1; | ||
} | ||
if (s === 0) { | ||
r = g = b = l; // achromatic | ||
} else { | ||
var hue2rgb = function (p, q, t) { | ||
if (t < 0) { | ||
t += 1; | ||
} | ||
h /= 6; | ||
} | ||
var hsl = { | ||
h: Math.round(360 * h), | ||
s: Math.round(100 * s), | ||
l: Math.round(100 * l), | ||
a: Math.round(100 * a) / 100 | ||
if (t > 1) { | ||
t -= 1; | ||
} | ||
if (t < 1 / 6) { | ||
return p + (q - p) * 6 * t; | ||
} | ||
if (t < 1 / 2) { | ||
return q; | ||
} | ||
if (t < 2 / 3) { | ||
return p + (q - p) * (2 / 3 - t) * 6; | ||
} | ||
return p; | ||
}; | ||
hsl.fillColor = 'hsla(' + hsl.h + ',' + hsl.s + '%,' + hsl.l + '%,' + hsl.a + ')'; | ||
var q = l < 0.5 ? l * (1 + s) : l + s - l * s; | ||
var p = 2 * l - q; | ||
r = hue2rgb(p, q, h + 1 / 3); | ||
g = hue2rgb(p, q, h); | ||
b = hue2rgb(p, q, h - 1 / 3); | ||
} | ||
return hsl; | ||
if (a === undefined) { | ||
a = 1; | ||
} | ||
var rgb = { | ||
r: Math.round(r * 255), | ||
g: Math.round(g * 255), | ||
b: Math.round(b * 255), | ||
a: parseFloat(a, 10) | ||
}; | ||
var hslToRGB = function (h, s, l, a) { | ||
var r, g, b; | ||
rgb.fillColor = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')'; | ||
h = parseFloat(h, 10) / 360; | ||
s = parseFloat(s, 10) / 100; | ||
l = parseFloat(l, 10) / 100; | ||
if (a === undefined) { | ||
a = 1; | ||
} | ||
if (s === 0) { | ||
r = g = b = l; // achromatic | ||
} else { | ||
var hue2rgb = function (p, q, t) { | ||
if (t < 0) { | ||
t += 1; | ||
} | ||
if (t > 1) { | ||
t -= 1; | ||
} | ||
if (t < 1 / 6) { | ||
return p + (q - p) * 6 * t; | ||
} | ||
if (t < 1 / 2) { | ||
return q; | ||
} | ||
if (t < 2 / 3) { | ||
return p + (q - p) * (2 / 3 - t) * 6; | ||
} | ||
return p; | ||
}; | ||
return rgb; | ||
var q = l < 0.5 ? l * (1 + s) : l + s - l * s; | ||
var p = 2 * l - q; | ||
r = hue2rgb(p, q, h + 1 / 3); | ||
g = hue2rgb(p, q, h); | ||
b = hue2rgb(p, q, h - 1 / 3); | ||
} | ||
}; | ||
if (a === undefined) { | ||
a = 1; | ||
} | ||
var toDecColor = function (stringcolor) { | ||
var parsedcolor = {}; | ||
if (!stringcolor) { | ||
parsedcolor.fillColor = 'rgba(100,250,50,0.99)'; | ||
} else if (stringcolor.indexOf('rgb') !== -1) { | ||
parsedcolor = parseRGB(stringcolor); | ||
} else if (stringcolor.indexOf('hsl') !== -1) { | ||
parsedcolor = parseHSL(stringcolor); | ||
} else { | ||
parsedcolor = parseHex(stringcolor); | ||
} | ||
var rgb = { | ||
r: Math.round(r * 255), | ||
g: Math.round(g * 255), | ||
b: Math.round(b * 255), | ||
a: parseFloat(a, 10) | ||
}; | ||
return parsedcolor; | ||
}; | ||
rgb.fillColor = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')'; | ||
return rgb; | ||
var createTextMarker = function (theoptions) { | ||
}; | ||
var generateCanvas = function (options) { | ||
var canvas = document.createElement("canvas"); | ||
var ancho = 30, | ||
alto = 40; | ||
canvas.width = ancho + 18; | ||
canvas.height = alto; | ||
var x = canvas.width / 2, | ||
y = canvas.height - 2, | ||
radius = ancho / 2, | ||
angulo = 0.6; | ||
var toDecColor = function (stringcolor) { | ||
var parsedcolor = {}; | ||
if (!stringcolor) { | ||
parsedcolor.fillColor = 'rgba(100,250,50,0.99)'; | ||
} else if (stringcolor.indexOf('rgb') !== -1) { | ||
parsedcolor = parseRGB(stringcolor); | ||
} else if (stringcolor.indexOf('hsl') !== -1) { | ||
parsedcolor = parseHSL(stringcolor); | ||
} else { | ||
parsedcolor = parseHex(stringcolor); | ||
} | ||
var font = "'" + options.font + "'" || 'Arial'; | ||
var fontsize = options.fontsize || 11; | ||
return parsedcolor; | ||
}; | ||
var context = canvas.getContext("2d"); | ||
context.clearRect(0, 0, canvas.width, canvas.height); | ||
var createTextMarker = function (theoptions) { | ||
var radius0 = 2 * radius, | ||
cx = x + 0.95 * radius0, | ||
cy = y + 0.45 * radius0; | ||
var generateCanvas = function (options) { | ||
var canvas = document.createElement("canvas"); | ||
var ancho = 30, | ||
alto = 40; | ||
canvas.width = ancho + 18; | ||
canvas.height = alto; | ||
var x = canvas.width / 2, | ||
y = canvas.height - 2, | ||
radius = ancho / 2, | ||
angulo = 0.6; | ||
var grad = context.createLinearGradient(0, 0, 0, canvas.height), | ||
color0, color1; | ||
if (options.index !== undefined && options.count > 0) { | ||
color0 = getColor(options.index, options.count); | ||
color1 = getColor1(); | ||
} else { | ||
var deccolor = toDecColor(options.color); | ||
color0 = deccolor.fillColor; | ||
color1 = darken(deccolor).fillColor; | ||
} | ||
var font = "'" + options.font + "'" || 'Arial'; | ||
var fontsize = options.fontsize || 11; | ||
var context = canvas.getContext("2d"); | ||
grad.addColorStop(0, color0); | ||
grad.addColorStop(1, color1); | ||
context.clearRect(0, 0, canvas.width, canvas.height); | ||
context.fillStyle = grad; | ||
context.strokeStyle = 'rgba(200,200,200,0.7)'; | ||
var radius0 = 2 * radius, | ||
cx = x + 0.95 * radius0, | ||
cy = y + 0.45 * radius0; | ||
context.beginPath(); | ||
var grad = context.createLinearGradient(0, 0, 0, canvas.height), | ||
color0, color1; | ||
if (options.index !== undefined && options.count > 0) { | ||
color0 = getColor(options.index, options.count); | ||
color1 = getColor1(); | ||
} else { | ||
var deccolor = toDecColor(options.color); | ||
color0 = deccolor.fillColor; | ||
color1 = darken(deccolor).fillColor; | ||
} | ||
//arco izquierdo | ||
context.arc(cx - 1, cy, radius0, 9 * Math.PI / 8, -6 * Math.PI / 8, false); | ||
// arco superior | ||
context.arc(x, (y - 7) / 2, radius, angulo, Math.PI - angulo, true); | ||
grad.addColorStop(0, color0); | ||
grad.addColorStop(1, color1); | ||
//arco derecho | ||
context.arc(2 * x - cx + 1, cy, radius0, -0.95 * Math.PI / 3, -Math.PI / 8, false); | ||
context.fill(); | ||
context.stroke(); | ||
context.fillStyle = grad; | ||
context.strokeStyle = 'rgba(200,200,200,0.7)'; | ||
context.beginPath(); | ||
context.beginPath(); | ||
context.arc(x, 0.40 * y, 2 * radius / 3, 0, 2 * Math.PI, false); | ||
context.fillStyle = 'white'; | ||
context.fill(); | ||
//arco izquierdo | ||
context.arc(cx - 1, cy, radius0, 9 * Math.PI / 8, -6 * Math.PI / 8, false); | ||
context.beginPath(); | ||
// arco superior | ||
context.arc(x, (y - 7) / 2, radius, angulo, Math.PI - angulo, true); | ||
// Render Label | ||
//context.font = "11pt Arial"; | ||
context.font = fontsize + "pt " + font; | ||
context.textBaseline = "top"; | ||
//arco derecho | ||
context.arc(2 * x - cx + 1, cy, radius0, -0.95 * Math.PI / 3, -Math.PI / 8, false); | ||
var textWidth = context.measureText(options.label); | ||
if (textWidth.width > ancho || String(options.label).length > 3) { | ||
context.rect(x - 2 - textWidth.width / 2, y - 30, x - 2 + textWidth.width / 2, y - 23); | ||
context.fillStyle = '#F7F0F0'; | ||
context.fill(); | ||
context.stroke(); | ||
} | ||
context.beginPath(); | ||
context.arc(x, 0.40 * y, 2 * radius / 3, 0, 2 * Math.PI, false); | ||
context.fillStyle = 'white'; | ||
context.fill(); | ||
context.fillStyle = "black"; | ||
context.strokeStyle = "black"; | ||
// centre the text. | ||
context.fillText(options.label, 1 + Math.floor((canvas.width / 2) - (textWidth.width / 2)), 8); | ||
context.beginPath(); | ||
return canvas; | ||
// Render Label | ||
//context.font = "11pt Arial"; | ||
context.font = fontsize + "pt " + font; | ||
context.textBaseline = "top"; | ||
}; | ||
theoptions.scale = theoptions.scale || 0.75; | ||
var markerCanvas = generateCanvas(theoptions); | ||
var textWidth = context.measureText(options.label); | ||
var iconObj = { | ||
url: markerCanvas.toDataURL() | ||
}; | ||
if (window.google && window.google.maps) { | ||
Object.assign(iconObj, { | ||
size: new google.maps.Size(48, 40), | ||
origin: new google.maps.Point(0, 0), | ||
anchor: new google.maps.Point(24 * theoptions.scale, 40 * theoptions.scale), | ||
scaledSize: new google.maps.Size(48 * theoptions.scale, 40 * theoptions.scale) | ||
}); | ||
} | ||
if (textWidth.width > ancho || String(options.label).length > 3) { | ||
context.rect(x - 2 - textWidth.width / 2, y - 30, x - 2 + textWidth.width / 2, y - 23); | ||
context.fillStyle = '#F7F0F0'; | ||
context.fill(); | ||
context.stroke(); | ||
} | ||
return iconObj; | ||
}; | ||
var createFatMarkerIcon = function (theoptions) { | ||
context.fillStyle = "black"; | ||
context.strokeStyle = "black"; | ||
// centre the text. | ||
context.fillText(options.label, 1 + Math.floor((canvas.width / 2) - (textWidth.width / 2)), 8); | ||
var generateFatCanvas = function (options) { | ||
var canvas = options.canvas || document.createElement("canvas"), | ||
anchorX = 27, | ||
anchorY = 53, | ||
radius = (anchorX - 9), | ||
angulo = 1.1, | ||
font = options.font || 'fontello', | ||
fontsize = options.fontsize || 20, | ||
context = canvas.getContext("2d"), | ||
grad = context.createLinearGradient(0, 0, 0, anchorY), | ||
color0, color1; | ||
return canvas; | ||
canvas.width = anchorX * 2; | ||
canvas.height = anchorY + 1; | ||
}; | ||
theoptions.scale = theoptions.scale || 0.75; | ||
var markerCanvas = generateCanvas(theoptions); | ||
var iconObj = { | ||
url: markerCanvas.toDataURL() | ||
}; | ||
if (window.google && window.google.maps) { | ||
Object.assign(iconObj, { | ||
size: new google.maps.Size(48, 40), | ||
origin: new google.maps.Point(0, 0), | ||
anchor: new google.maps.Point(24 * theoptions.scale, 40 * theoptions.scale), | ||
scaledSize: new google.maps.Size(48 * theoptions.scale, 40 * theoptions.scale) | ||
}); | ||
if (options.index !== undefined && options.count > 0) { | ||
color0 = getColor(options.index, options.count); | ||
color1 = getColor1(); | ||
} else { | ||
var deccolor = toDecColor(options.color); | ||
color0 = deccolor.fillColor; | ||
color1 = darken(deccolor).fillColor; | ||
} | ||
return iconObj; | ||
}; | ||
context.clearRect(0, 0, canvas.width, canvas.height); | ||
var createFatMarkerIcon = function (theoptions) { | ||
grad.addColorStop(0, color0); | ||
grad.addColorStop(1, color1); | ||
var generateFatCanvas = function (options) { | ||
var canvas = options.canvas || document.createElement("canvas"), | ||
anchorX = 27, | ||
anchorY = 53, | ||
radius = (anchorX - 9), | ||
angulo = 1.1, | ||
font = options.font || 'fontello', | ||
fontsize = options.fontsize || 14, | ||
context = canvas.getContext("2d"), | ||
grad = context.createLinearGradient(0, 0, 0, anchorY), | ||
color0, color1; | ||
context.fillStyle = grad; | ||
context.strokeStyle = color1; | ||
context.beginPath(); | ||
canvas.width = anchorX * 2; | ||
canvas.height = anchorY + 1; | ||
context.moveTo(anchorX, anchorY); | ||
if (options.index !== undefined && options.count > 0) { | ||
color0 = getColor(options.index, options.count); | ||
color1 = getColor1(); | ||
} else { | ||
var deccolor = toDecColor(options.color); | ||
color0 = deccolor.fillColor; | ||
color1 = darken(deccolor).fillColor; | ||
} | ||
// arco superior | ||
context.arc(anchorX, 2 + (0.50 * anchorY), radius, angulo, Math.PI - angulo, true); | ||
context.clearRect(0, 0, canvas.width, canvas.height); | ||
//punta inferior | ||
context.lineTo(anchorX, anchorY); | ||
grad.addColorStop(0, color0); | ||
grad.addColorStop(1, color1); | ||
context.fill(); | ||
context.stroke(); | ||
context.fillStyle = grad; | ||
context.strokeStyle = color1; | ||
context.beginPath(); | ||
// Círculo blanco | ||
context.beginPath(); | ||
context.arc(anchorX, 2 + (0.50 * anchorY), (radius - 3), 0, 2 * Math.PI, false); | ||
context.fillStyle = 'white'; | ||
context.fill(); | ||
context.moveTo(anchorX, anchorY); | ||
// arco superior | ||
context.arc(anchorX, 2 + (0.50 * anchorY), radius, angulo, Math.PI - angulo, true); | ||
context.beginPath(); | ||
//punta inferior | ||
context.lineTo(anchorX, anchorY); | ||
context.font = 'normal normal normal ' + fontsize + 'px ' + font; | ||
console.log('context font', context.font); | ||
context.fillStyle = color1; | ||
context.textBaseline = "top"; | ||
var textWidth = context.measureText(options.unicodelabel); | ||
context.fill(); | ||
context.stroke(); | ||
// Círculo blanco | ||
context.beginPath(); | ||
context.arc(anchorX, 2 + (0.50 * anchorY), (radius - 3), 0, 2 * Math.PI, false); | ||
context.fillStyle = 'white'; | ||
context.fill(); | ||
// centre the text. | ||
context.fillText(options.unicodelabel, Math.floor((canvas.width / 2) - (textWidth.width / 2)), 1 + Math.floor(canvas.height / 2 - fontsize / 2)); | ||
context.beginPath(); | ||
return canvas; | ||
context.font = 'normal normal normal ' + fontsize + 'px ' + font; | ||
console.log('context font', context.font); | ||
context.fillStyle = color1; | ||
context.textBaseline = "top"; | ||
var textWidth = context.measureText(options.unicodelabel); | ||
}; | ||
var scale = theoptions.scale || 1, | ||
markerCanvas = generateFatCanvas(theoptions); | ||
var iconObj = { | ||
url: markerCanvas.toDataURL(), | ||
scale: scale | ||
}; | ||
if (window.google && window.google.maps) { | ||
Object.assign(iconObj, { | ||
size: new google.maps.Size(54, 48), | ||
origin: new google.maps.Point(0, 0), | ||
anchor: new google.maps.Point(21 * scale, 36 * scale), | ||
scaledSize: new google.maps.Size(42 * scale, 36 * scale) | ||
}); | ||
} | ||
return iconObj; | ||
}; | ||
// centre the text. | ||
context.fillText(options.unicodelabel, Math.floor((canvas.width / 2) - (textWidth.width / 2)), 1 + Math.floor(canvas.height / 2 - fontsize / 2)); | ||
return canvas; | ||
}; | ||
var scale = theoptions.scale || 1, | ||
markerCanvas = generateFatCanvas(theoptions); | ||
var createTransparentMarkerIcon = function (theoptions) { | ||
var iconObj = { | ||
url: markerCanvas.toDataURL(), | ||
scale: scale | ||
}; | ||
if (window.google && window.google.maps) { | ||
Object.assign(iconObj, { | ||
size: new google.maps.Size(54, 48), | ||
origin: new google.maps.Point(0, 0), | ||
anchor: new google.maps.Point(21 * scale, 36 * scale), | ||
scaledSize: new google.maps.Size(42 * scale, 36 * scale) | ||
}); | ||
var generateTransparentCanvas = function (options) { | ||
var canvas = options.canvas || document.createElement("canvas"), | ||
context = canvas.getContext("2d"), | ||
font = options.font || 'fontello', | ||
fontsize = options.fontsize || 30, | ||
color0, color1; | ||
canvas.width = 54; | ||
canvas.height = 48; | ||
context.clearRect(0, 0, canvas.width, canvas.height); | ||
/*context.rect(1, 1, canvas.width - 2, canvas.height - 2); | ||
context.lineWidth = 1; | ||
context.strokeStyle = 'black'; | ||
context.stroke();*/ | ||
if (options.index !== undefined && options.count > 0) { | ||
color0 = getColor(options.index, options.count); | ||
color1 = getColor1(); | ||
} else { | ||
var deccolor = toDecColor(options.color); | ||
color0 = deccolor.fillColor; | ||
color1 = darken(deccolor).fillColor; | ||
} | ||
return iconObj; | ||
}; | ||
context.beginPath(); | ||
context.font = 'normal normal normal ' + fontsize + 'px ' + font; | ||
context.textBaseline = "top"; | ||
var textWidth = context.measureText(options.unicodelabel), | ||
text_x = Math.floor((canvas.width / 2) - (textWidth.width / 2)); | ||
var createTransparentMarkerIcon = function (theoptions) { | ||
if (options.shadow) { | ||
var grad = context.createLinearGradient(text_x, 0, canvas.width, canvas.height); | ||
var generateTransparentCanvas = function (options) { | ||
var canvas = options.canvas || document.createElement("canvas"), | ||
context = canvas.getContext("2d"), | ||
font = options.font || 'fontello', | ||
fontsize = options.fontsize || 30, | ||
color0, color1; | ||
grad.addColorStop(0, '#FFFFFF'); | ||
grad.addColorStop(1, color0); | ||
canvas.width = 54; | ||
canvas.height = 48; | ||
context.clearRect(0, 0, canvas.width, canvas.height); | ||
//console.debug('applying shadow'); | ||
context.shadowOffsetX = -2; | ||
context.shadowOffsetY = -2; | ||
context.shadowBlur = 0; | ||
/*context.rect(1, 1, canvas.width - 2, canvas.height - 2); | ||
context.lineWidth = 1; | ||
context.strokeStyle = 'black'; | ||
context.stroke();*/ | ||
context.fillStyle = '#FFFFFF'; | ||
context.shadowColor = '#666666'; | ||
if (options.index !== undefined && options.count > 0) { | ||
color0 = getColor(options.index, options.count); | ||
color1 = getColor1(); | ||
} else { | ||
var deccolor = toDecColor(options.color); | ||
color0 = deccolor.fillColor; | ||
color1 = darken(deccolor).fillColor; | ||
} | ||
context.fillText(options.unicodelabel, text_x - 4, 0); | ||
context.fillText(options.unicodelabel, text_x, 3); | ||
context.fillStyle = grad; | ||
context.fillText(options.unicodelabel, text_x + 4, 6); | ||
context.beginPath(); | ||
context.strokeStyle = '#FFFFFF'; | ||
context.strokeText(options.unicodelabel, text_x + 4, 6); | ||
context.font = 'normal normal normal ' + fontsize + 'px ' + font; | ||
} else { | ||
context.textBaseline = "top"; | ||
var textWidth = context.measureText(options.unicodelabel), | ||
text_x = Math.floor((canvas.width / 2) - (textWidth.width / 2)); | ||
context.shadowOffsetX = 2; | ||
context.shadowOffsetY = 2; | ||
context.shadowBlur = 0; | ||
context.shadowColor = '#FFFFFF'; | ||
context.fillStyle = color0; | ||
context.fillText(options.unicodelabel, text_x + 1, 6); | ||
if (options.shadow) { | ||
var grad = context.createLinearGradient(text_x, 0, canvas.width, canvas.height); | ||
context.shadowOffsetX = 2; | ||
context.shadowOffsetY = 2; | ||
context.shadowBlur = 1; | ||
context.shadowColor = '#FFFFFF'; | ||
context.strokeStyle = color1; | ||
context.strokeText(options.unicodelabel, text_x + 1, 6); | ||
grad.addColorStop(0, '#FFFFFF'); | ||
grad.addColorStop(1, color0); | ||
} | ||
//console.debug('applying shadow'); | ||
context.shadowOffsetX = -2; | ||
context.shadowOffsetY = -2; | ||
context.shadowBlur = 0; | ||
canvas.fillColor = color0; | ||
context.fillStyle = '#FFFFFF'; | ||
context.shadowColor = '#666666'; | ||
return canvas; | ||
context.fillText(options.unicodelabel, text_x - 4, 0); | ||
context.fillText(options.unicodelabel, text_x, 3); | ||
context.fillStyle = grad; | ||
context.fillText(options.unicodelabel, text_x + 4, 6); | ||
}; | ||
context.strokeStyle = '#FFFFFF'; | ||
context.strokeText(options.unicodelabel, text_x + 4, 6); | ||
theoptions.scale = theoptions.scale || 1; | ||
theoptions.fontsize = theoptions.fontsize || 30; | ||
} else { | ||
var markerCanvas = generateTransparentCanvas(theoptions); | ||
context.shadowOffsetX = 2; | ||
context.shadowOffsetY = 2; | ||
context.shadowBlur = 0; | ||
context.shadowColor = '#FFFFFF'; | ||
context.fillStyle = color0; | ||
context.fillText(options.unicodelabel, text_x + 1, 0); | ||
var scale = theoptions.scale; | ||
if (theoptions.shadow) { | ||
scale = 0.9 * scale; | ||
} | ||
var iconObj = { | ||
canvas: markerCanvas, | ||
url: markerCanvas.toDataURL(), | ||
fillColor: markerCanvas.fillColor | ||
}; | ||
context.shadowOffsetX = 2; | ||
context.shadowOffsetY = 2; | ||
context.shadowBlur = 1; | ||
context.shadowColor = '#FFFFFF'; | ||
context.strokeStyle = color1; | ||
context.strokeText(options.unicodelabel, text_x + 1, 0); | ||
Object.assign(iconObj, theoptions); | ||
} | ||
if (window.google && window.google.maps) { | ||
Object.assign(iconObj, { | ||
size: new google.maps.Size(54 * scale, 48 * scale), | ||
origin: new google.maps.Point(0, 0), | ||
anchor: new google.maps.Point(27 * scale, 24 * scale), | ||
scaledSize: new google.maps.Size(54 * scale, 48 * scale) | ||
}); | ||
} | ||
//console.debug('createTransparentMarkerIcon', iconObj); | ||
canvas.fillColor = color0; | ||
return iconObj; | ||
}; | ||
return canvas; | ||
}; | ||
MarkerFactory.toDecColor = toDecColor; | ||
theoptions.scale = theoptions.scale || 1; | ||
theoptions.fontsize = theoptions.fontsize || 30; | ||
MarkerFactory.parseColorString = function (somecolor, opacity) { | ||
var parsedcolor = { | ||
original: somecolor | ||
}, | ||
hsl, rgb; | ||
var markerCanvas = generateTransparentCanvas(theoptions); | ||
opacity = opacity || 1; | ||
var scale = theoptions.scale; | ||
if (theoptions.shadow) { | ||
scale = 0.9 * scale; | ||
if (somecolor.indexOf('hsl') !== -1) { | ||
hsl = parseHSL(somecolor, opacity); | ||
rgb = hslToRGB(hsl.h, hsl.s, hsl.l, hsl.a); | ||
} else { | ||
if (somecolor.indexOf('rgb') !== -1) { | ||
rgb = parseRGB(somecolor, opacity); | ||
} else { | ||
rgb = parseHex(somecolor, opacity); | ||
} | ||
var iconObj = { | ||
canvas: markerCanvas, | ||
url: markerCanvas.toDataURL(), | ||
fillColor: markerCanvas.fillColor | ||
}; | ||
hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a); | ||
Object.assign(iconObj, theoptions); | ||
} | ||
if (window.google && window.google.maps) { | ||
Object.assign(iconObj, { | ||
size: new google.maps.Size(54 * scale, 48 * scale), | ||
origin: new google.maps.Point(0, 0), | ||
anchor: new google.maps.Point(27 * scale, 24 * scale), | ||
scaledSize: new google.maps.Size(54 * scale, 48 * scale) | ||
}); | ||
} | ||
//console.debug('createTransparentMarkerIcon', iconObj); | ||
return iconObj; | ||
parsedcolor.hsl = { | ||
h: hsl.h, | ||
s: hsl.s, | ||
l: hsl.l, | ||
a: hsl.a | ||
}; | ||
parsedcolor.rgb = { | ||
r: rgb.r, | ||
g: rgb.g, | ||
b: rgb.b, | ||
a: rgb.a | ||
}; | ||
parsedcolor.fillColor = rgb.fillColor; | ||
parsedcolor.strokeColor = rgb.strokeColor; | ||
parsedcolor.hex = ['#', rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16)].join(''); | ||
return parsedcolor; | ||
}; | ||
MarkerFactory.toDecColor = toDecColor; | ||
var getHexColor = function (color) { | ||
var hexcolor = color; | ||
if (color.indexOf('rgb') !== -1) { | ||
var rgbArr = color.split(/[\(,\)]/ig); | ||
hexcolor = [ | ||
(1 * rgbArr[1]).toString(16), (1 * rgbArr[2]).toString(16), (1 * rgbArr[3]).toString(16) | ||
].join(''); | ||
} else if (color.indexOf('#') !== -1) { | ||
hexcolor = color.replace(/#/g, ''); | ||
} | ||
return hexcolor; | ||
}; | ||
MarkerFactory.parseColorString = function (somecolor, opacity) { | ||
var parsedcolor = { | ||
original: somecolor | ||
}, | ||
hsl, rgb; | ||
MarkerFactory.autoIcon = function (options) { | ||
opacity = opacity || 1; | ||
if (somecolor.indexOf('hsl') !== -1) { | ||
hsl = parseHSL(somecolor, opacity); | ||
rgb = hslToRGB(hsl.h, hsl.s, hsl.l, hsl.a); | ||
if (typeof (options) !== 'object') { | ||
console.warn('autoIcon expects an object as its only parameter'); | ||
return null; | ||
} | ||
} else { | ||
if (somecolor.indexOf('rgb') !== -1) { | ||
rgb = parseRGB(somecolor, opacity); | ||
} else { | ||
rgb = parseHex(somecolor, opacity); | ||
} | ||
hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a); | ||
} | ||
parsedcolor.hsl = { | ||
h: hsl.h, | ||
s: hsl.s, | ||
l: hsl.l, | ||
a: hsl.a | ||
}; | ||
parsedcolor.rgb = { | ||
r: rgb.r, | ||
g: rgb.g, | ||
b: rgb.b, | ||
a: rgb.a | ||
}; | ||
options.label = String(options.label || 'A'); | ||
options.color = options.color || '#FF0000'; | ||
parsedcolor.fillColor = rgb.fillColor; | ||
parsedcolor.strokeColor = rgb.strokeColor; | ||
parsedcolor.hex = ['#', rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16)].join(''); | ||
return parsedcolor; | ||
}; | ||
var getHexColor = function (color) { | ||
var hexcolor = color; | ||
if (color.indexOf('rgb') !== -1) { | ||
var rgbArr = color.split(/[\(,\)]/ig); | ||
hexcolor = [ | ||
(1 * rgbArr[1]).toString(16), (1 * rgbArr[2]).toString(16), (1 * rgbArr[3]).toString(16) | ||
].join(''); | ||
} else if (color.indexOf('#') !== -1) { | ||
hexcolor = color.replace(/#/g, ''); | ||
} | ||
return hexcolor; | ||
}; | ||
MarkerFactory.autoIcon = function (options) { | ||
options.hexcolor = getHexColor(options.color); | ||
if (options.label.length === 4 || options.label.substring(0, 2) === '0x') { | ||
if (typeof (options) !== 'object') { | ||
console.warn('autoIcon expects an object as its only parameter'); | ||
return null; | ||
} | ||
options.label = options.label.slice(-4); | ||
options.unicodelabel = String.fromCharCode('0x' + options.label); | ||
options.font = options.font || 'fontello'; | ||
options.label = String(options.label || 'A'); | ||
options.color = options.color || '#FF0000'; | ||
options.fontsize = options.fontsize || 11; | ||
options.font = options.font || 'Arial'; | ||
if (options.transparent_background === true) { | ||
// Estilo frontdev | ||
return createTransparentMarkerIcon(options); | ||
} else { | ||
options.hexcolor = getHexColor(options.color); | ||
return createFatMarkerIcon(options); | ||
} | ||
if (options.label.length === 4 || options.label.substring(0, 2) === '0x') { | ||
options.label = options.label.slice(-4); | ||
options.unicodelabel = String.fromCharCode('0x' + options.label); | ||
} else { | ||
options.fontsize = options.fontsize || 11; | ||
options.font = options.font || 'Arial'; | ||
// This is text I should print literally | ||
return createTextMarker(options); | ||
} | ||
if (options.transparent_background === true) { | ||
// Estilo frontdev | ||
return createTransparentMarkerIcon(options); | ||
} else { | ||
return createFatMarkerIcon(options); | ||
} | ||
}; | ||
} else { | ||
// This is text I should print literally | ||
return createTextMarker(options); | ||
} | ||
exports.MarkerFactory = MarkerFactory; | ||
exports['default'] = MarkerFactory; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
}; | ||
return MarkerFactory; | ||
})); | ||
//# sourceMappingURL=markerfactory.js.map | ||
}))); |
@@ -6,3 +6,3 @@ { | ||
"description": "Uses canvas to generate google.maps.Marker Icons from graphic fonts (i.e. font-awesome) on the fly", | ||
"version": "2.9.4", | ||
"version": "2.9.5", | ||
"license": "MIT", | ||
@@ -20,5 +20,9 @@ "repository": { | ||
}, | ||
"files": [ | ||
"README.md", | ||
"dist" | ||
], | ||
"jspm": { | ||
"format": "esm", | ||
"main": "markerfactory.esm.js", | ||
"main": "markerfactory.js", | ||
"directories": { | ||
@@ -29,12 +33,3 @@ "lib": "dist" | ||
"devDependencies": { | ||
"jquery": "npm:jquery@^3.0.0", | ||
"lodash": "npm:lodash@^4.13.1" | ||
}, | ||
"overrides": { | ||
"npm:lodash@4.13.1": { | ||
"map": { | ||
"buffer": "@empty", | ||
"process": "@empty" | ||
} | ||
} | ||
"plugin-babel": "npm:systemjs-plugin-babel@^0.0.25" | ||
} | ||
@@ -48,7 +43,9 @@ }, | ||
"eslint": "^3.0.1", | ||
"jspm": "^0.17.0-beta.13", | ||
"jspm": "^0.17.0-beta.47", | ||
"lodash": "^4", | ||
"mocha": "^2.4", | ||
"rollup": "^0.50.0", | ||
"rollup-plugin-uglify": "^2.0.1", | ||
"serve": "^1.4.0" | ||
} | ||
} |
# Google Maps MarkerFactory | ||
This is a zero dependencies library that uses a canvas element to generate valid [google.maps.Marker](https://developers.google.com/maps/documentation/javascript/3.exp/reference#Marker) Icons from graphic-fonts, such as [Font-Awesome](https://fontawesome.github.io/Font-Awesome/) and [Fontello](http://fontello.com/). | ||
This is a zero dependencies library that uses a canvas element to generate valid [google.maps.Marker](https://developers.google.com/maps/documentation/javascript/3.exp/reference#Marker) Icons from graphic-fonts, such as [Font-Awesome](https://fontawesome.github.io/Font-Awesome/), [Material-Icons](https://material.io/icons/) or [Fontello](http://fontello.com/). | ||
[![Build Status](https://travis-ci.org/HuasoFoundries/ig_markerfactory.svg)](https://travis-ci.org/HuasoFoundries/ig_markerfactory) [![Code Climate](https://codeclimate.com/github/HuasoFoundries/ig_markerfactory/badges/gpa.svg)](https://codeclimate.com/github/HuasoFoundries/ig_markerfactory) [![Codacy Badge](https://api.codacy.com/project/badge/grade/44d15485b93e43cf86356e56a8bfb7d1)](https://www.codacy.com/app/amenadiel/ig_markerfactory) | ||
[![Build Status](https://travis-ci.org/HuasoFoundries/ig_markerfactory.svg)](https://travis-ci.org/HuasoFoundries/ig_markerfactory) | ||
[![Code Climate](https://codeclimate.com/github/HuasoFoundries/ig_markerfactory/badges/gpa.svg)](https://codeclimate.com/github/HuasoFoundries/ig_markerfactory) | ||
[![Codacy Badge](https://api.codacy.com/project/badge/grade/44d15485b93e43cf86356e56a8bfb7d1)](https://www.codacy.com/app/amenadiel/ig_markerfactory) | ||
[![npm](https://img.shields.io/npm/dm/ig_markerfactory.svg?style=plastic)](https://www.npmjs.com/package/ig_markerfactory) | ||
## Why? | ||
@@ -10,0 +12,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
106
87553
8
7
1066
1