123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /*global define*/
- define([
- '../../Core/defined',
- '../../Core/defineProperties',
- '../../Core/destroyObject',
- '../../Core/DeveloperError',
- '../../ThirdParty/knockout',
- '../getElement',
- './InfoBoxViewModel'
- ], function(
- defined,
- defineProperties,
- destroyObject,
- DeveloperError,
- knockout,
- getElement,
- InfoBoxViewModel) {
- "use strict";
- /**
- * A widget for displaying information or a description.
- *
- * @alias InfoBox
- * @constructor
- *
- * @param {Element|String} container The DOM element or ID that will contain the widget.
- *
- * @exception {DeveloperError} Element with id "container" does not exist in the document.
- */
- var InfoBox = function(container) {
- //>>includeStart('debug', pragmas.debug);
- if (!defined(container)) {
- throw new DeveloperError('container is required.');
- }
- //>>includeEnd('debug')
- container = getElement(container);
- this._container = container;
- var infoElement = document.createElement('div');
- infoElement.className = 'cesium-infoBox';
- infoElement.setAttribute('data-bind', '\
- css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }');
- container.appendChild(infoElement);
- this._element = infoElement;
- var titleElement = document.createElement('div');
- titleElement.className = 'cesium-infoBox-title';
- titleElement.setAttribute('data-bind', 'text: titleText');
- infoElement.appendChild(titleElement);
- var cameraElement = document.createElement('button');
- cameraElement.type = 'button';
- cameraElement.className = 'cesium-button cesium-infoBox-camera';
- cameraElement.setAttribute('data-bind', '\
- attr: { title: "Focus camera on object" },\
- click: function () { cameraClicked.raiseEvent(); },\
- enable: enableCamera,\
- cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }');
- infoElement.appendChild(cameraElement);
- var closeElement = document.createElement('button');
- closeElement.type = 'button';
- closeElement.className = 'cesium-infoBox-close';
- closeElement.setAttribute('data-bind', '\
- click: function () { closeClicked.raiseEvent(); }');
- closeElement.innerHTML = '×';
- infoElement.appendChild(closeElement);
- var infoBodyElement = document.createElement('div');
- infoBodyElement.className = 'cesium-infoBox-body';
- infoElement.appendChild(infoBodyElement);
- var descriptionElement = document.createElement('div');
- descriptionElement.className = 'cesium-infoBox-description';
- descriptionElement.setAttribute('data-bind', '\
- html: descriptionSanitizedHtml,\
- style : { maxHeight : maxHeightOffset(40) }');
- infoBodyElement.appendChild(descriptionElement);
- var viewModel = new InfoBoxViewModel();
- this._viewModel = viewModel;
- knockout.applyBindings(this._viewModel, infoElement);
- };
- defineProperties(InfoBox.prototype, {
- /**
- * Gets the parent container.
- * @memberof InfoBox.prototype
- *
- * @type {Element}
- */
- container : {
- get : function() {
- return this._container;
- }
- },
- /**
- * Gets the view model.
- * @memberof InfoBox.prototype
- *
- * @type {SelectionIndicatorViewModel}
- */
- viewModel : {
- get : function() {
- return this._viewModel;
- }
- }
- });
- /**
- * @returns {Boolean} true if the object has been destroyed, false otherwise.
- */
- InfoBox.prototype.isDestroyed = function() {
- return false;
- };
- /**
- * Destroys the widget. Should be called if permanently
- * removing the widget from layout.
- */
- InfoBox.prototype.destroy = function() {
- var container = this._container;
- knockout.cleanNode(this._element);
- container.removeChild(this._element);
- return destroyObject(this);
- };
- return InfoBox;
- });
|