UNPKG

terriajs

Version:

Geospatial data visualization platform.

73 lines (66 loc) 2.85 kB
'use strict'; var mapping = []; /** * Creates a type derived from {@link CatalogMember} based on a given URL. * * @param {String} url The derived type name. * @param {Terria} terria The Terria instance. * @param {Boolean} allowLoad Whether it's ok to attempt to load the URL and detect failures. We generally do this for WMS type services, but not for local files. * @returns {CatalogMember} The constructed data item or promise, or undefined if the URL is not supported. */ var createCatalogItemFromUrl = function(url, terria, allowLoad, index) { index = index || 0; if (index >= mapping.length) { return undefined; } if (mapping[index].matcher && !mapping[index].matcher(url) || (mapping[index].requiresLoad && !allowLoad)) { return createCatalogItemFromUrl(url, terria, allowLoad, index + 1); } else { var item = new mapping[index].constructor(terria); if (!allowLoad) { return item; } item.url = url; item.name = url; return item.load().yield(item).otherwise(function(e) { console.log(e); return createCatalogItemFromUrl(url, terria, allowLoad, index + 1); }); } }; /** * Registers a constructor for a given type of {@link CatalogMember}. * * @param {createCatalogItemFromUrl~Matcher} matcher A function that is given a URL to match as its only parameter. If the function returns true, The type name for which to register a constructor. * @param {createCatalogItemFromUrl~Constructor} constructor The constructor for data items that match the given matcher. * @param {createCatalogItemFromUrl~requiresLoad} requiresLoad A boolean indicating whether the URL must be actually loaded in order to really determine if it matches. */ createCatalogItemFromUrl.register = function(matcher, constructor, requiresLoad) { mapping.push({ matcher: matcher, constructor: constructor, requiresLoad: requiresLoad }); }; /** * Function interface for matching a URL to a {@link CatalogMember} constructor * for that URL. * @callback createCatalogItemFromUrl~Matcher * @param {String} url The URL to match. * @returns {Boolean} True if the constructor can be used with this URL; otherwise, false. * * @example * var czmlExtensionRegex = /\.czml$/i; * function isCzml(url) { * return url.match(czmlExtensionRegex); * } */ /** * Function interface for matching a URL to a {@link CatalogMember} constructor * for that URL. * @callback createCatalogItemFromUrl~Constructor * @param {Terria} terria The Terria instance. * @param {String} url The URL from which to obtain the data. * @returns {CatalogMember} The created data item. */ module.exports = createCatalogItemFromUrl;