UNPKG

cesium

Version:

Cesium is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.

159 lines (141 loc) 4.26 kB
/*global define*/ define([ './defined', './defineProperties', './DeveloperError' ], function( defined, defineProperties, DeveloperError) { 'use strict'; var nextCreditId = 0; var creditToId = {}; /** * A credit contains data pertaining to how to display attributions/credits for certain content on the screen. * * @param {String} [text] The text to be displayed on the screen if no imageUrl is specified. * @param {String} [imageUrl] The source location for an image * @param {String} [link] A URL location for which the credit will be hyperlinked * * @alias Credit * @constructor * * @example * //Create a credit with a tooltip, image and link * var credit = new Cesium.Credit('Cesium', '/images/cesium_logo.png', 'http://cesiumjs.org/'); */ function Credit(text, imageUrl, link) { var hasLink = (defined(link)); var hasImage = (defined(imageUrl)); var hasText = (defined(text)); //>>includeStart('debug', pragmas.debug); if (!hasText && !hasImage && !hasLink) { throw new DeveloperError('text, imageUrl or link is required'); } //>>includeEnd('debug'); if (!hasText && !hasImage) { text = link; } this._text = text; this._imageUrl = imageUrl; this._link = link; this._hasLink = hasLink; this._hasImage = hasImage; // Credits are immutable so generate an id to use to optimize equal() var id; var key = JSON.stringify([text, imageUrl, link]); if (defined(creditToId[key])) { id = creditToId[key]; } else { id = nextCreditId++; creditToId[key] = id; } this._id = id; } defineProperties(Credit.prototype, { /** * The credit text * @memberof Credit.prototype * @type {String} * @readonly */ text : { get : function() { return this._text; } }, /** * The source location for the image. * @memberof Credit.prototype * @type {String} * @readonly */ imageUrl : { get : function() { return this._imageUrl; } }, /** * A URL location for the credit hyperlink * @memberof Credit.prototype * @type {String} * @readonly */ link : { get : function() { return this._link; } }, /** * @memberof Credit.prototype * @type {Number} * @readonly * * @private */ id : { get : function() { return this._id; } } }); /** * Returns true if the credit has an imageUrl * * @returns {Boolean} */ Credit.prototype.hasImage = function() { return this._hasImage; }; /** * Returns true if the credit has a link * * @returns {Boolean} */ Credit.prototype.hasLink = function() { return this._hasLink; }; /** * Returns true if the credits are equal * * @param {Credit} left The first credit * @param {Credit} right The second credit * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise. */ Credit.equals = function(left, right) { return (left === right) || ((defined(left)) && (defined(right)) && (left._id === right._id)); }; /** * Returns true if the credits are equal * * @param {Credit} credits The credit to compare to. * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise. */ Credit.prototype.equals = function(credit) { return Credit.equals(this, credit); }; return Credit; });