Map/LegendUrl.js

"use strict";

/* A lookup map for displayable mime types */
var DISPLAYABLE_MIME_TYPES = [
  "image/jpeg",
  "image/gif",
  "image/png",
  "image/svg+xml",
  "image/bmp",
  "image/x-bmp"
].reduce(function(acc, mimeType) {
  acc[mimeType] = true;
  return acc;
}, {});
var IMAGE_URL_REGEX = /[.\/](png|jpg|jpeg|gif|svg)/i;

/**
 * A simple object that represents a legend for a map layer.
 *
 * @param url The URL of the legend
 * @param mimeType The mime type of the legend - this will be used by the UI to determine how the legend should be shown
 *      (usually an img tag or a link)
 * @constructor
 */
var LegendUrl = function(url, mimeType) {
  this.url = url;
  this.mimeType = mimeType;
  this.safeSvgContent = undefined; // content generated by us that we're willing to insert directly into a DOM.
};

/**
 * Determines whether this url links to an image by inspecting the mime type, or if none is specified, the file
 * extension.
 *
 * @returns {boolean}
 */
LegendUrl.prototype.isImage = function() {
  if (this.mimeType) {
    return !!DISPLAYABLE_MIME_TYPES[this.mimeType];
  }

  return !!this.url.match(IMAGE_URL_REGEX);
};

/** Simple check for whether the url is valid - currently valid is simply defined and length > 0. */
LegendUrl.prototype.isValid = function() {
  return this.url && this.url.length;
};

module.exports = LegendUrl;