| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | import DOMPurify from "../ThirdParty/dompurify.js";import Check from "./Check.js";import defaultValue from "./defaultValue.js";import defined from "./defined.js";let nextCreditId = 0;const creditToId = {};/** * A credit contains data pertaining to how to display attributions/credits for certain content on the screen. * @param {String} html An string representing an html code snippet * @param {Boolean} [showOnScreen=false] If true, the credit will be visible in the main credit container.  Otherwise, it will appear in a popover * * @alias Credit * @constructor * * @exception {DeveloperError} html is required. * * @example * //Create a credit with a tooltip, image and link * const credit = new Cesium.Credit('<a href="https://cesium.com/" target="_blank"><img src="/images/cesium_logo.png" title="Cesium"/></a>'); */function Credit(html, showOnScreen) {  //>>includeStart('debug', pragmas.debug);  Check.typeOf.string("html", html);  //>>includeEnd('debug');  let id;  const key = html;  if (defined(creditToId[key])) {    id = creditToId[key];  } else {    id = nextCreditId++;    creditToId[key] = id;  }  showOnScreen = defaultValue(showOnScreen, false);  // Credits are immutable so generate an id to use to optimize equal()  this._id = id;  this._html = html;  this._showOnScreen = showOnScreen;  this._element = undefined;}Object.defineProperties(Credit.prototype, {  /**   * The credit content   * @memberof Credit.prototype   * @type {String}   * @readonly   */  html: {    get: function () {      return this._html;    },  },  /**   * @memberof Credit.prototype   * @type {Number}   * @readonly   *   * @private   */  id: {    get: function () {      return this._id;    },  },  /**   * Whether the credit should be displayed on screen or in a lightbox   * @memberof Credit.prototype   * @type {Boolean}   */  showOnScreen: {    get: function () {      return this._showOnScreen;    },    set: function (value) {      this._showOnScreen = value;    },  },  /**   * Gets the credit element   * @memberof Credit.prototype   * @type {HTMLElement}   * @readonly   */  element: {    get: function () {      if (!defined(this._element)) {        const html = DOMPurify.sanitize(this._html);        const div = document.createElement("div");        div._creditId = this._id;        div.style.display = "inline";        div.innerHTML = html;        const links = div.querySelectorAll("a");        for (let i = 0; i < links.length; i++) {          links[i].setAttribute("target", "_blank");        }        this._element = div;      }      return this._element;    },  },});/** * 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 &&      left._showOnScreen === right._showOnScreen)  );};/** * Returns true if the credits are equal * * @param {Credit} credit 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);};/** * @private * @param attribution * @return {Credit} */Credit.getIonCredit = function (attribution) {  const showOnScreen =    defined(attribution.collapsible) && !attribution.collapsible;  const credit = new Credit(attribution.html, showOnScreen);  credit._isIon = credit.html.indexOf("ion-credit.png") !== -1;  return credit;};/** * Duplicates a Credit instance. * * @param {Credit} [credit] The Credit to duplicate. * @returns {Credit} A new Credit instance that is a duplicate of the one provided. (Returns undefined if the credit is undefined) */Credit.clone = function (credit) {  if (defined(credit)) {    return new Credit(credit.html, credit.showOnScreen);  }};export default Credit;
 |