| Total Complexity | 79 |
| Complexity/F | 3.43 |
| Lines of Code | 613 |
| Function Count | 23 |
| Duplicated Lines | 613 |
| Ratio | 100 % |
| Changes | 1 | ||
| Bugs | 0 | Features | 0 |
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like dist/markerfactory.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
| 1 | View Code Duplication | (function (global, factory) { |
|
|
|
|||
| 2 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : |
||
| 3 | typeof define === 'function' && define.amd ? define(factory) : |
||
| 4 | (global.MarkerFactory = factory()); |
||
| 5 | }(this, function () { 'use strict'; |
||
| 6 | |||
| 7 | var MarkerFactory = {}; |
||
| 8 | |||
| 9 | function compact(array) { |
||
| 10 | var index = -1, |
||
| 11 | length = array ? array.length : 0, |
||
| 12 | resIndex = 0, |
||
| 13 | result = []; |
||
| 14 | |||
| 15 | while (++index < length) { |
||
| 16 | var value = array[index]; |
||
| 17 | if (value) { |
||
| 18 | result[resIndex++] = value; |
||
| 19 | } |
||
| 20 | } |
||
| 21 | return result; |
||
| 22 | } |
||
| 23 | |||
| 24 | |||
| 25 | |||
| 26 | var defaults = { |
||
| 27 | h: 1, |
||
| 28 | s: 78, // constant saturation |
||
| 29 | l: 63, // constant luminance |
||
| 30 | a: 1 |
||
| 31 | }; |
||
| 32 | |||
| 33 | var getColor = function (val, range) { |
||
| 34 | defaults.h = Math.floor((360 / range) * val); |
||
| 35 | return "hsla(" + defaults.h + "," + defaults.s + "%," + defaults.l + "%," + defaults.a + ")"; |
||
| 36 | }; |
||
| 37 | |||
| 38 | var getColor1 = function () { |
||
| 39 | return "hsla(" + defaults.h + "," + defaults.s + "%," + (defaults.l - 30) + "%," + defaults.a + ")"; |
||
| 40 | }; |
||
| 41 | |||
| 42 | var parseHalf = function (foo) { |
||
| 43 | return parseInt(foo / 2, 10); |
||
| 44 | }; |
||
| 45 | |||
| 46 | var darken = function (stringcolor) { |
||
| 47 | var darkercolor = {}; |
||
| 48 | if (stringcolor.fillColor.indexOf('rgb') !== -1) { |
||
| 49 | darkercolor.r = parseHalf(stringcolor.r); |
||
| 50 | darkercolor.g = parseHalf(stringcolor.g); |
||
| 51 | darkercolor.b = parseHalf(stringcolor.b); |
||
| 52 | darkercolor.fillColor = 'rgba(' + darkercolor.r + ',' + darkercolor.g + ',' + darkercolor.b + ',0.99)'; |
||
| 53 | } else if (stringcolor.fillColor.indexOf('hsl') !== -1) { |
||
| 54 | darkercolor.h = stringcolor.h; |
||
| 55 | darkercolor.s = stringcolor.s; |
||
| 56 | darkercolor.l = stringcolor.l - 30; |
||
| 57 | darkercolor.fillColor = 'hsl(' + darkercolor.h + ',' + darkercolor.s + '%,' + darkercolor.l + '%)'; |
||
| 58 | } |
||
| 59 | |||
| 60 | return darkercolor; |
||
| 61 | }; |
||
| 62 | |||
| 63 | var parseHex = function (hexstring, opacity) { |
||
| 64 | var hexcolor = { |
||
| 65 | hex: hexstring |
||
| 66 | }; |
||
| 67 | |||
| 68 | hexstring = hexstring.replace('#', ''); |
||
| 69 | if (hexstring.length === 3) { |
||
| 70 | hexstring = hexstring[0] + hexstring[0] + hexstring[1] + hexstring[1] + hexstring[2] + hexstring[2]; |
||
| 71 | } |
||
| 72 | if (isNaN(parseFloat(opacity, 10))) { |
||
| 73 | opacity = 1; |
||
| 74 | } |
||
| 75 | |||
| 76 | hexcolor.r = parseInt(hexstring.substring(0, 2), 16); |
||
| 77 | hexcolor.g = parseInt(hexstring.substring(2, 4), 16); |
||
| 78 | hexcolor.b = parseInt(hexstring.substring(4, 6), 16); |
||
| 79 | hexcolor.a = opacity; |
||
| 80 | hexcolor.fillColor = 'rgba(' + hexcolor.r + ',' + hexcolor.g + ',' + hexcolor.b + ',' + hexcolor.a + ')'; |
||
| 81 | hexcolor.strokeColor = ['rgba(' + parseHalf(hexcolor.r), parseHalf(hexcolor.g), parseHalf(hexcolor.b), hexcolor.a + ')'].join(','); |
||
| 82 | hexcolor.rgb = hexcolor.fillColor; |
||
| 83 | return hexcolor; |
||
| 84 | }; |
||
| 85 | |||
| 86 | var parseHSL = function (hslstring, opacity) { |
||
| 87 | var hslcolor = {}, |
||
| 88 | hslparts = compact(hslstring.split(/hsla?\(|\,|\)|\%/)); |
||
| 89 | |||
| 90 | if (hslparts[3] === undefined) { |
||
| 91 | hslparts[3] = 1; |
||
| 92 | } |
||
| 93 | if (isNaN(parseFloat(opacity, 10))) { |
||
| 94 | opacity = 1; |
||
| 95 | } |
||
| 96 | |||
| 97 | hslcolor.h = parseFloat(hslparts[0], 10); |
||
| 98 | hslcolor.s = parseFloat(hslparts[1], 10); |
||
| 99 | hslcolor.l = parseFloat(hslparts[2], 10); |
||
| 100 | hslcolor.a = parseFloat(opacity * hslparts[3], 10); |
||
| 101 | |||
| 102 | hslcolor.fillColor = 'hsla(' + hslcolor.h + ',' + hslcolor.s + '%,' + hslcolor.l + '%,' + hslcolor.a + ')'; |
||
| 103 | hslcolor.strokeColor = 'hsla(' + hslcolor.h + ',' + hslcolor.s + '%,' + parseInt(hslcolor.l / 2, 10) + '%,' + hslcolor.a + ')'; |
||
| 104 | hslcolor.hsl = hslcolor.fillColor; |
||
| 105 | return hslcolor; |
||
| 106 | }; |
||
| 107 | |||
| 108 | var parseRGB = function (rgbstring, opacity) { |
||
| 109 | var rgbcolor = {}, |
||
| 110 | rgbparts = compact(rgbstring.split(/rgba?\(|\,|\)/)); |
||
| 111 | |||
| 112 | if (rgbparts[3] === undefined) { |
||
| 113 | rgbparts[3] = 1; |
||
| 114 | } |
||
| 115 | |||
| 116 | if (isNaN(parseFloat(opacity, 10))) { |
||
| 117 | opacity = 1; |
||
| 118 | } |
||
| 119 | |||
| 120 | rgbcolor.r = parseInt(rgbparts[0], 10) % 256; |
||
| 121 | rgbcolor.g = parseInt(rgbparts[1], 10) % 256; |
||
| 122 | rgbcolor.b = parseInt(rgbparts[2], 10) % 256; |
||
| 123 | rgbcolor.a = parseFloat(opacity * rgbparts[3], 10); |
||
| 124 | rgbcolor.fillColor = 'rgba(' + rgbcolor.r + ',' + rgbcolor.g + ',' + rgbcolor.b + ',' + rgbcolor.a + ')'; |
||
| 125 | rgbcolor.strokeColor = 'rgba(' + rgbcolor.r / 2 + ',' + rgbcolor.g / 2 + ',' + rgbcolor.b / 2 + ',' + rgbcolor.a + ')'; |
||
| 126 | rgbcolor.rgb = rgbcolor.fillColor; |
||
| 127 | return rgbcolor; |
||
| 128 | }; |
||
| 129 | |||
| 130 | |||
| 131 | var rgbToHSL = function (r, g, b, a) { |
||
| 132 | r = (r % 256) / 255; |
||
| 133 | g = (g % 256) / 255; |
||
| 134 | b = (b % 256) / 255; |
||
| 135 | if (a === undefined) { |
||
| 136 | a = 1; |
||
| 137 | } |
||
| 138 | var max = Math.max(r, g, b), |
||
| 139 | min = Math.min(r, g, b); |
||
| 140 | var h, s, l = (max + min) / 2; |
||
| 141 | |||
| 142 | if (max === min) { |
||
| 143 | h = s = 0; // achromatic |
||
| 144 | } else { |
||
| 145 | var d = max - min; |
||
| 146 | s = l > 0.5 ? d / (2 - max - min) : d / (max + min); |
||
| 147 | switch (max) { |
||
| 148 | case r: |
||
| 149 | h = (g - b) / d + (g < b ? 6 : 0); |
||
| 150 | break; |
||
| 151 | case g: |
||
| 152 | h = (b - r) / d + 2; |
||
| 153 | break; |
||
| 154 | case b: |
||
| 155 | h = (r - g) / d + 4; |
||
| 156 | break; |
||
| 157 | default: |
||
| 158 | h = 0; |
||
| 159 | break; |
||
| 160 | } |
||
| 161 | |||
| 162 | h /= 6; |
||
| 163 | } |
||
| 164 | var hsl = { |
||
| 165 | h: Math.round(360 * h), |
||
| 166 | s: Math.round(100 * s), |
||
| 167 | l: Math.round(100 * l), |
||
| 168 | a: Math.round(100 * a) / 100 |
||
| 169 | }; |
||
| 170 | |||
| 171 | hsl.fillColor = 'hsla(' + hsl.h + ',' + hsl.s + '%,' + hsl.l + '%,' + hsl.a + ')'; |
||
| 172 | |||
| 173 | return hsl; |
||
| 174 | }; |
||
| 175 | |||
| 176 | var hslToRGB = function (h, s, l, a) { |
||
| 177 | var r, g, b; |
||
| 178 | |||
| 179 | h = parseFloat(h, 10) / 360; |
||
| 180 | s = parseFloat(s, 10) / 100; |
||
| 181 | l = parseFloat(l, 10) / 100; |
||
| 182 | if (a === undefined) { |
||
| 183 | a = 1; |
||
| 184 | } |
||
| 185 | if (s === 0) { |
||
| 186 | r = g = b = l; // achromatic |
||
| 187 | } else { |
||
| 188 | var hue2rgb = function (p, q, t) { |
||
| 189 | if (t < 0) { |
||
| 190 | t += 1; |
||
| 191 | } |
||
| 192 | if (t > 1) { |
||
| 193 | t -= 1; |
||
| 194 | } |
||
| 195 | if (t < 1 / 6) { |
||
| 196 | return p + (q - p) * 6 * t; |
||
| 197 | } |
||
| 198 | if (t < 1 / 2) { |
||
| 199 | return q; |
||
| 200 | } |
||
| 201 | if (t < 2 / 3) { |
||
| 202 | return p + (q - p) * (2 / 3 - t) * 6; |
||
| 203 | } |
||
| 204 | return p; |
||
| 205 | }; |
||
| 206 | |||
| 207 | var q = l < 0.5 ? l * (1 + s) : l + s - l * s; |
||
| 208 | var p = 2 * l - q; |
||
| 209 | r = hue2rgb(p, q, h + 1 / 3); |
||
| 210 | g = hue2rgb(p, q, h); |
||
| 211 | b = hue2rgb(p, q, h - 1 / 3); |
||
| 212 | } |
||
| 213 | |||
| 214 | if (a === undefined) { |
||
| 215 | a = 1; |
||
| 216 | } |
||
| 217 | |||
| 218 | var rgb = { |
||
| 219 | r: Math.round(r * 255), |
||
| 220 | g: Math.round(g * 255), |
||
| 221 | b: Math.round(b * 255), |
||
| 222 | a: parseFloat(a, 10) |
||
| 223 | }; |
||
| 224 | |||
| 225 | rgb.fillColor = 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')'; |
||
| 226 | |||
| 227 | return rgb; |
||
| 228 | |||
| 229 | }; |
||
| 230 | |||
| 231 | var toDecColor = function (stringcolor) { |
||
| 232 | var parsedcolor = {}; |
||
| 233 | if (!stringcolor) { |
||
| 234 | parsedcolor.fillColor = 'rgba(100,250,50,0.99)'; |
||
| 235 | } else if (stringcolor.indexOf('rgb') !== -1) { |
||
| 236 | parsedcolor = parseRGB(stringcolor); |
||
| 237 | } else if (stringcolor.indexOf('hsl') !== -1) { |
||
| 238 | parsedcolor = parseHSL(stringcolor); |
||
| 239 | } else { |
||
| 240 | parsedcolor = parseHex(stringcolor); |
||
| 241 | } |
||
| 242 | |||
| 243 | return parsedcolor; |
||
| 244 | }; |
||
| 245 | |||
| 246 | |||
| 247 | var createFatMarkerIcon = function (theoptions) { |
||
| 248 | |||
| 249 | var generateFatCanvas = function (options) { |
||
| 250 | var canvas = document.createElement("canvas"); |
||
| 251 | |||
| 252 | canvas.width = 42; |
||
| 253 | canvas.height = 36; |
||
| 254 | |||
| 255 | var anchorX = canvas.width / 2, |
||
| 256 | anchorY = canvas.height - 1, |
||
| 257 | radius = (canvas.width - 18) / 2, |
||
| 258 | angulo = 1.1; |
||
| 259 | |||
| 260 | |||
| 261 | var fontsize = 11; |
||
| 262 | |||
| 263 | var context = canvas.getContext("2d"); |
||
| 264 | |||
| 265 | context.clearRect(0, 0, canvas.width, canvas.height); |
||
| 266 | |||
| 267 | var grad = context.createLinearGradient(0, 0, 0, canvas.height), |
||
| 268 | color0, color1; |
||
| 269 | |||
| 270 | if (options.index !== undefined && options.count > 0) { |
||
| 271 | color0 = getColor(options.index, options.count); |
||
| 272 | color1 = getColor1(); |
||
| 273 | } else { |
||
| 274 | var deccolor = toDecColor(options.color); |
||
| 275 | color0 = deccolor.fillColor; |
||
| 276 | color1 = darken(deccolor).fillColor; |
||
| 277 | } |
||
| 278 | |||
| 279 | |||
| 280 | grad.addColorStop(0, color0); |
||
| 281 | grad.addColorStop(1, color1); |
||
| 282 | |||
| 283 | context.fillStyle = grad; |
||
| 284 | context.strokeStyle = color1; |
||
| 285 | context.beginPath(); |
||
| 286 | |||
| 287 | context.moveTo(anchorX, anchorY); |
||
| 288 | |||
| 289 | |||
| 290 | // arco superior |
||
| 291 | context.arc(anchorX, 2 + (0.50 * anchorY), radius, angulo, Math.PI - angulo, true); |
||
| 292 | |||
| 293 | //arco derecho |
||
| 294 | context.lineTo(anchorX, anchorY); |
||
| 295 | |||
| 296 | context.fill(); |
||
| 297 | context.stroke(); |
||
| 298 | |||
| 299 | |||
| 300 | // Círculo blanco |
||
| 301 | context.beginPath(); |
||
| 302 | context.arc(anchorX, 2 + (0.50 * anchorY), (radius - 3), 0, 2 * Math.PI, false); |
||
| 303 | context.fillStyle = 'white'; |
||
| 304 | context.fill(); |
||
| 305 | |||
| 306 | |||
| 307 | context.beginPath(); |
||
| 308 | // Render Label |
||
| 309 | //context.font = "11pt Arial"; |
||
| 310 | // |
||
| 311 | var font = "'" + options.font + "'" || 'fontello'; |
||
| 312 | |||
| 313 | context.font = fontsize + "pt " + font; |
||
| 314 | context.fillStyle = color1; |
||
| 315 | |||
| 316 | context.textBaseline = "top"; |
||
| 317 | |||
| 318 | var textWidth = context.measureText(options.label); |
||
| 319 | |||
| 320 | |||
| 321 | // centre the text. |
||
| 322 | context.fillText(options.label, |
||
| 323 | 1 + Math.floor((canvas.width / 2) - (textWidth.width / 2)), |
||
| 324 | 49 - canvas.height |
||
| 325 | ); |
||
| 326 | |||
| 327 | return canvas; |
||
| 328 | |||
| 329 | }; |
||
| 330 | theoptions.scale = theoptions.scale || 1; |
||
| 331 | var markerCanvas = generateFatCanvas(theoptions); |
||
| 332 | |||
| 333 | var iconObj = { |
||
| 334 | url: markerCanvas.toDataURL() |
||
| 335 | }; |
||
| 336 | if (window.google && window.google.maps) { |
||
| 337 | Object.assign(iconObj, { |
||
| 338 | size: new google.maps.Size(42, 36), |
||
| 339 | origin: new google.maps.Point(0, 0), |
||
| 340 | anchor: new google.maps.Point(21, 36), |
||
| 341 | scaledSize: new google.maps.Size(42, 36) |
||
| 342 | }); |
||
| 343 | } |
||
| 344 | return iconObj; |
||
| 345 | }; |
||
| 346 | |||
| 347 | |||
| 348 | var createTextMarker = function (theoptions) { |
||
| 349 | |||
| 350 | var generateCanvas = function (options) { |
||
| 351 | var canvas = document.createElement("canvas"); |
||
| 352 | var ancho = 30, |
||
| 353 | alto = 40; |
||
| 354 | canvas.width = ancho + 18; |
||
| 355 | canvas.height = alto; |
||
| 356 | var x = canvas.width / 2, |
||
| 357 | y = canvas.height - 2, |
||
| 358 | radius = ancho / 2, |
||
| 359 | angulo = 0.6; |
||
| 360 | |||
| 361 | var font = "'" + options.font + "'" || 'Arial'; |
||
| 362 | var fontsize = options.fontsize || 11; |
||
| 363 | |||
| 364 | var context = canvas.getContext("2d"); |
||
| 365 | |||
| 366 | context.clearRect(0, 0, canvas.width, canvas.height); |
||
| 367 | |||
| 368 | var radius0 = 2 * radius, |
||
| 369 | cx = x + 0.95 * radius0, |
||
| 370 | cy = y + 0.45 * radius0; |
||
| 371 | |||
| 372 | var grad = context.createLinearGradient(0, 0, 0, canvas.height), |
||
| 373 | color0, color1; |
||
| 374 | if (options.index !== undefined && options.count > 0) { |
||
| 375 | color0 = getColor(options.index, options.count); |
||
| 376 | color1 = getColor1(); |
||
| 377 | } else { |
||
| 378 | var deccolor = toDecColor(options.color); |
||
| 379 | color0 = deccolor.fillColor; |
||
| 380 | color1 = darken(deccolor).fillColor; |
||
| 381 | } |
||
| 382 | |||
| 383 | |||
| 384 | grad.addColorStop(0, color0); |
||
| 385 | grad.addColorStop(1, color1); |
||
| 386 | |||
| 387 | context.fillStyle = grad; |
||
| 388 | context.strokeStyle = 'rgba(200,200,200,0.7)'; |
||
| 389 | |||
| 390 | context.beginPath(); |
||
| 391 | |||
| 392 | //arco izquierdo |
||
| 393 | context.arc(cx - 1, cy, radius0, 9 * Math.PI / 8, -6 * Math.PI / 8, false); |
||
| 394 | |||
| 395 | // arco superior |
||
| 396 | context.arc(x, (y - 7) / 2, radius, angulo, Math.PI - angulo, true); |
||
| 397 | |||
| 398 | //arco derecho |
||
| 399 | context.arc(2 * x - cx + 1, cy, radius0, -0.95 * Math.PI / 3, -Math.PI / 8, false); |
||
| 400 | context.fill(); |
||
| 401 | context.stroke(); |
||
| 402 | |||
| 403 | |||
| 404 | context.beginPath(); |
||
| 405 | context.arc(x, 0.40 * y, 2 * radius / 3, 0, 2 * Math.PI, false); |
||
| 406 | context.fillStyle = 'white'; |
||
| 407 | context.fill(); |
||
| 408 | |||
| 409 | context.beginPath(); |
||
| 410 | |||
| 411 | // Render Label |
||
| 412 | //context.font = "11pt Arial"; |
||
| 413 | context.font = fontsize + "pt " + font; |
||
| 414 | context.textBaseline = "top"; |
||
| 415 | |||
| 416 | var textWidth = context.measureText(options.label); |
||
| 417 | |||
| 418 | if (textWidth.width > ancho || String(options.label).length > 3) { |
||
| 419 | context.rect(x - 2 - textWidth.width / 2, y - 30, x - 2 + textWidth.width / 2, y - 23); |
||
| 420 | context.fillStyle = '#F7F0F0'; |
||
| 421 | context.fill(); |
||
| 422 | context.stroke(); |
||
| 423 | } |
||
| 424 | |||
| 425 | |||
| 426 | context.fillStyle = "black"; |
||
| 427 | context.strokeStyle = "black"; |
||
| 428 | // centre the text. |
||
| 429 | context.fillText(options.label, 1 + Math.floor((canvas.width / 2) - (textWidth.width / 2)), 8); |
||
| 430 | |||
| 431 | return canvas; |
||
| 432 | |||
| 433 | }; |
||
| 434 | theoptions.scale = theoptions.scale || 0.75; |
||
| 435 | var markerCanvas = generateCanvas(theoptions); |
||
| 436 | |||
| 437 | var iconObj = { |
||
| 438 | url: markerCanvas.toDataURL() |
||
| 439 | }; |
||
| 440 | if (window.google && window.google.maps) { |
||
| 441 | Object.assign(iconObj, { |
||
| 442 | size: new google.maps.Size(48, 40), |
||
| 443 | origin: new google.maps.Point(0, 0), |
||
| 444 | anchor: new google.maps.Point(24 * theoptions.scale, 40 * theoptions.scale), |
||
| 445 | scaledSize: new google.maps.Size(48 * theoptions.scale, 40 * theoptions.scale) |
||
| 446 | }); |
||
| 447 | } |
||
| 448 | |||
| 449 | return iconObj; |
||
| 450 | }; |
||
| 451 | |||
| 452 | |||
| 453 | var createTransparentMarkerIcon = function (theoptions) { |
||
| 454 | |||
| 455 | var generateTransparentCanvas = function (options) { |
||
| 456 | var canvas = document.createElement("canvas"); |
||
| 457 | |||
| 458 | canvas.width = 54; |
||
| 459 | canvas.height = 48; |
||
| 460 | var context = canvas.getContext("2d"); |
||
| 461 | |||
| 462 | context.clearRect(0, 0, canvas.width, canvas.height); |
||
| 463 | |||
| 464 | |||
| 465 | var color0; |
||
| 466 | |||
| 467 | if (options.index !== undefined && options.count > 0) { |
||
| 468 | color0 = getColor(options.index, options.count); |
||
| 469 | } else { |
||
| 470 | var deccolor = toDecColor(options.color); |
||
| 471 | color0 = deccolor.fillColor; |
||
| 472 | } |
||
| 473 | |||
| 474 | |||
| 475 | context.beginPath(); |
||
| 476 | // Render Label |
||
| 477 | //context.font = "11pt Arial"; |
||
| 478 | |||
| 479 | context.font = "40px '" + options.font + "'"; |
||
| 480 | context.fillStyle = color0; |
||
| 481 | |||
| 482 | context.textBaseline = "top"; |
||
| 483 | |||
| 484 | var textWidth = context.measureText(options.label); |
||
| 485 | |||
| 486 | |||
| 487 | // centre the text. |
||
| 488 | context.fillText(options.label, |
||
| 489 | 1 + Math.floor((canvas.width / 2) - (textWidth.width / 2)), |
||
| 490 | 49 - canvas.height |
||
| 491 | ); |
||
| 492 | |||
| 493 | canvas.fillColor = color0; |
||
| 494 | |||
| 495 | return canvas; |
||
| 496 | |||
| 497 | }; |
||
| 498 | var markerCanvas = generateTransparentCanvas(theoptions); |
||
| 499 | theoptions.scale = theoptions.scale || 1; |
||
| 500 | |||
| 501 | |||
| 502 | var iconObj = { |
||
| 503 | url: markerCanvas.toDataURL(), |
||
| 504 | fillColor: markerCanvas.fillColor |
||
| 505 | }; |
||
| 506 | if (window.google && window.google.maps) { |
||
| 507 | Object.assign(iconObj, { |
||
| 508 | size: new google.maps.Size(54 * theoptions.scale, 48 * theoptions.scale), |
||
| 509 | origin: new google.maps.Point(0, 0), |
||
| 510 | anchor: new google.maps.Point(27 * theoptions.scale, 48 * theoptions.scale), |
||
| 511 | scaledSize: new google.maps.Size(54 * theoptions.scale, 48 * theoptions.scale) |
||
| 512 | }); |
||
| 513 | } |
||
| 514 | |||
| 515 | return iconObj; |
||
| 516 | }; |
||
| 517 | MarkerFactory.toDecColor = toDecColor; |
||
| 518 | |||
| 519 | MarkerFactory.parseColorString = function (somecolor, opacity) { |
||
| 520 | var parsedcolor = { |
||
| 521 | original: somecolor |
||
| 522 | }, |
||
| 523 | hsl, rgb; |
||
| 524 | |||
| 525 | opacity = opacity || 1; |
||
| 526 | |||
| 527 | if (somecolor.indexOf('hsl') !== -1) { |
||
| 528 | hsl = parseHSL(somecolor, opacity); |
||
| 529 | rgb = hslToRGB(hsl.h, hsl.s, hsl.l, hsl.a); |
||
| 530 | |||
| 531 | } else { |
||
| 532 | if (somecolor.indexOf('rgb') !== -1) { |
||
| 533 | rgb = parseRGB(somecolor, opacity); |
||
| 534 | } else { |
||
| 535 | rgb = parseHex(somecolor, opacity); |
||
| 536 | } |
||
| 537 | hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a); |
||
| 538 | |||
| 539 | } |
||
| 540 | |||
| 541 | parsedcolor.hsl = { |
||
| 542 | h: hsl.h, |
||
| 543 | s: hsl.s, |
||
| 544 | l: hsl.l, |
||
| 545 | a: hsl.a |
||
| 546 | }; |
||
| 547 | parsedcolor.rgb = { |
||
| 548 | r: rgb.r, |
||
| 549 | g: rgb.g, |
||
| 550 | b: rgb.b, |
||
| 551 | a: rgb.a |
||
| 552 | }; |
||
| 553 | |||
| 554 | parsedcolor.fillColor = rgb.fillColor; |
||
| 555 | parsedcolor.strokeColor = rgb.strokeColor; |
||
| 556 | parsedcolor.hex = ['#', rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16)].join(''); |
||
| 557 | return parsedcolor; |
||
| 558 | }; |
||
| 559 | |||
| 560 | var getHexColor = function (color) { |
||
| 561 | var hexcolor = color; |
||
| 562 | if (color.indexOf('rgb') !== -1) { |
||
| 563 | var rgbArr = color.split(/[\(,\)]/ig); |
||
| 564 | hexcolor = [ |
||
| 565 | (1 * rgbArr[1]).toString(16), (1 * rgbArr[2]).toString(16), (1 * rgbArr[3]).toString(16) |
||
| 566 | ].join(''); |
||
| 567 | } else if (color.indexOf('#') !== -1) { |
||
| 568 | hexcolor = color.replace(/#/g, ''); |
||
| 569 | } |
||
| 570 | return hexcolor; |
||
| 571 | }; |
||
| 572 | |||
| 573 | MarkerFactory.autoIcon = function (options) { |
||
| 574 | |||
| 575 | |||
| 576 | if (typeof (options) !== 'object') { |
||
| 577 | console.warn('autoIcon expects an object as its only parameter'); |
||
| 578 | return null; |
||
| 579 | } |
||
| 580 | |||
| 581 | |||
| 582 | |||
| 583 | options.label = options.label || 'A'; |
||
| 584 | options.color = options.color || '#FF0000'; |
||
| 585 | options.fontsize = options.fontsize || 11; |
||
| 586 | options.font = options.font || 'Arial'; |
||
| 587 | |||
| 588 | |||
| 589 | options.hexcolor = getHexColor(options.color); |
||
| 590 | |||
| 591 | if (String(options.label).substring(0, 2) === '0x') { |
||
| 592 | // This is a charcode specified as an octal number, so I'll decode it |
||
| 593 | options.label = String.fromCharCode(String(options.label)); |
||
| 594 | |||
| 595 | if (options.transparent_background === true) { |
||
| 596 | // Estilo frontdev |
||
| 597 | return createTransparentMarkerIcon(options); |
||
| 598 | } else { |
||
| 599 | return createFatMarkerIcon(options); |
||
| 600 | } |
||
| 601 | |||
| 602 | |||
| 603 | } else { |
||
| 604 | // This is text I should print literally |
||
| 605 | return createTextMarker(options); |
||
| 606 | } |
||
| 607 | |||
| 608 | |||
| 609 | }; |
||
| 610 | |||
| 611 | return MarkerFactory; |
||
| 612 | |||
| 613 | })); |
||
| 614 | //# sourceMappingURL=markerfactory.js.map |