UNPKG

@cesium/widgets

Version:

A widgets library for use with CesiumJS. CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.

82 lines (75 loc) 3.25 kB
import { Check, defined } from "@cesium/engine"; import knockout from "../ThirdParty/knockout.js"; import I3SBuildingSceneLayerExplorerViewModel from "./I3SBuildingSceneLayerExplorerViewModel.js"; /** * I3S Building Scene Layer widget * * @alias I3SBuildingSceneLayerExplorer * @constructor * * @param {string} containerId The DOM element ID that will contain the widget. * @param {I3SDataProvider} i3sProvider I3S Data provider instance. * * @demo {@link https://sandcastle.cesium.com/index.html?src=I3S%20Building%20Scene%20Layer.html|I3S Building Scene Layer} */ function I3SBuildingSceneLayerExplorer(containerId, i3sProvider) { const container = document.getElementById(containerId); //>>includeStart('debug', pragmas.debug); Check.defined("container", container); Check.defined("i3sProvider", i3sProvider); //>>includeEnd('debug'); const htmlWrapper = document.createElement("div"); htmlWrapper.classList.add("cesium-viewer-i3s-explorer"); htmlWrapper.innerHTML = ` <h3>Building explorer</h3> <select data-bind="options: topLayers, optionsText: 'name', optionsAfterRender: setOptionDisable, value: currentLayer" ></select> <div id="bsl-wrapper"> <h3>Select Level</h3> <select data-bind="options: levels, value: currentLevel"></select> <h3>Disciplines & Categories</h3> <ul class="layersList" data-bind="foreach: sublayers"> <ul class="layersList" data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })"> <li> <div class="li-wrapper"> <span class="expandItem" data-bind="click: $root.expandClickHandler" >+</span > <input type="checkbox" data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}" /> <label data-bind="attr: { for: name}"> <span data-bind="text: name"></span> </label> </div> <ul class="nested" data-bind="attr: { id: name + '-expander'}"> <li data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })"> <div class="li-wrapper"> <input type="checkbox" data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}" /> <label data-bind="attr: { for: name}"> <span data-bind="text: name"></span> </label> </div> </li> </ul> </li> </ul> </ul> </div>`; container.appendChild(htmlWrapper); const viewModel = new I3SBuildingSceneLayerExplorerViewModel(i3sProvider); knockout.track(viewModel); knockout.applyBindings(viewModel, container); if (defined(viewModel.defaultLayer)) { // Select a model by default viewModel.currentLayer = viewModel.defaultLayer; } } export default I3SBuildingSceneLayerExplorer;