bruce-cesium 5.5.2 → 5.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9713,7 +9713,9 @@
9713
9713
  lineEle.style.display = "none";
9714
9714
  return;
9715
9715
  }
9716
- const lineStartPos2d = Cesium.SceneTransforms.wgs84ToWindowCoordinates(this.viewer.scene, this._pos3d);
9716
+ const CESIUM = Cesium;
9717
+ const _3dTo2D = Cesium.SceneTransforms.hasOwnProperty("wgs84ToWindowCoordinates") ? CESIUM.SceneTransforms.wgs84ToWindowCoordinates : CESIUM.SceneTransforms.worldToWindowCoordinates;
9718
+ const lineStartPos2d = _3dTo2D(this.viewer.scene, this._pos3d);
9717
9719
  // Invalid point.
9718
9720
  if (isNaN(lineStartPos2d === null || lineStartPos2d === void 0 ? void 0 : lineStartPos2d.x)) {
9719
9721
  ele.style.transform = "";
@@ -9767,7 +9769,9 @@
9767
9769
  }
9768
9770
  lineEndPoint.height += addHeight;
9769
9771
  lineEndPos3d = Cesium.Cartographic.toCartesian(lineEndPoint);
9770
- let lineEndPos2d = Cesium.SceneTransforms.wgs84ToWindowCoordinates(this.viewer.scene, lineEndPos3d);
9772
+ const CESIUM = Cesium;
9773
+ const _3dTo2D = Cesium.SceneTransforms.hasOwnProperty("wgs84ToWindowCoordinates") ? CESIUM.SceneTransforms.wgs84ToWindowCoordinates : CESIUM.SceneTransforms.worldToWindowCoordinates;
9774
+ let lineEndPos2d = _3dTo2D(this.viewer.scene, lineEndPos3d);
9771
9775
  // Invalid point.
9772
9776
  if (isNaN(lineEndPos2d === null || lineEndPos2d === void 0 ? void 0 : lineEndPos2d.x)) {
9773
9777
  ele.style.transform = "";
@@ -24021,8 +24025,28 @@
24021
24025
  }
24022
24026
  else if (tileset.type === BModels.Tileset.EType.ExternalTerrain) {
24023
24027
  const settings = tileset.settings;
24024
- url = settings.url;
24025
24028
  vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;
24029
+ if (!settings.terrainType || settings.terrainType === "Default") {
24030
+ url = settings.url;
24031
+ }
24032
+ else if (settings.terrainType == "CesiumIon") {
24033
+ const ionId = settings.externalId;
24034
+ const key = settings.key ? settings.key : await findKey(params.apiGetter, params.apiGetter.accountId, BModels.ProgramKey.EProgramId.CesiumIon);
24035
+ const resource = Cesium.IonResource.fromAssetId(Number(ionId), {
24036
+ accessToken: key
24037
+ });
24038
+ if (Cesium.CesiumTerrainProvider.hasOwnProperty("fromUrl")) {
24039
+ provider = await CESIUM.CesiumTerrainProvider.fromUrl(resource, {
24040
+ requestVertexNormals: vertexes
24041
+ });
24042
+ }
24043
+ else {
24044
+ provider = new CESIUM.CesiumTerrainProvider({
24045
+ url: resource,
24046
+ requestVertexNormals: vertexes
24047
+ });
24048
+ }
24049
+ }
24026
24050
  }
24027
24051
  else {
24028
24052
  console.error("Invalid tileset type.", tileset);
@@ -25369,6 +25393,304 @@
25369
25393
  ViewRenderEngine.FlyTo = FlyTo;
25370
25394
  })(exports.ViewRenderEngine || (exports.ViewRenderEngine = {}));
25371
25395
 
25396
+ class WidgetLeftPanelTabUser extends exports.WidgetLeftPanelTab.ATab {
25397
+ constructor(params) {
25398
+ super(params);
25399
+ this.STYLESHEET_ID = "nextspace-left-panel-tab-user-stylesheet";
25400
+ this.loadedSessionId = null;
25401
+ this.user = null;
25402
+ this.loaded = false;
25403
+ this.loggingOut = false;
25404
+ this.loggingIn = false;
25405
+ this.inputUsername = null;
25406
+ this.inputPassword = null;
25407
+ this._generateStyles();
25408
+ this._generateElement();
25409
+ // In case another widget messed with the panel width.
25410
+ // Probably should just add a SetWidth method to avoid having plugins mess with the container CSS.
25411
+ if (this.Container) {
25412
+ this.Container.style.width = "300px";
25413
+ }
25414
+ this.loadUser();
25415
+ this.paramsChangeRemoval = BModels.ENVIRONMENT.OnParamsChange.Subscribe(() => {
25416
+ this.loadUser();
25417
+ });
25418
+ }
25419
+ async loadUser() {
25420
+ if (this.loadedSessionId === BModels.ENVIRONMENT.PARAMS.sessionId) {
25421
+ return;
25422
+ }
25423
+ let loadingSessionId = BModels.ENVIRONMENT.PARAMS.sessionId;
25424
+ try {
25425
+ this.user = null;
25426
+ if (BModels.ENVIRONMENT.PARAMS.sessionId && BModels.ENVIRONMENT.PARAMS.sessionId !== "anonymous") {
25427
+ const { session } = await BModels.Session.Get({
25428
+ accountId: BModels.ENVIRONMENT.PARAMS.accountId,
25429
+ sessionId: loadingSessionId
25430
+ });
25431
+ if (loadingSessionId !== BModels.ENVIRONMENT.PARAMS.sessionId) {
25432
+ return;
25433
+ }
25434
+ this.user = session === null || session === void 0 ? void 0 : session.User;
25435
+ }
25436
+ }
25437
+ catch (e) {
25438
+ console.error(e);
25439
+ }
25440
+ finally {
25441
+ if (loadingSessionId === BModels.ENVIRONMENT.PARAMS.sessionId) {
25442
+ this.loaded = true;
25443
+ this._generateElement();
25444
+ }
25445
+ }
25446
+ }
25447
+ /**
25448
+ * Returns if the user can logout.
25449
+ * If the session is part of URL, we don't want to show the logout button.
25450
+ * @returns {boolean}
25451
+ */
25452
+ canLogout() {
25453
+ if (!this.user || this.user.ID === "anonymous") {
25454
+ return false;
25455
+ }
25456
+ const url = new URL(window.location.href);
25457
+ let sessionId = url.searchParams.get("sessionId");
25458
+ if (!sessionId) {
25459
+ sessionId = url.searchParams.get("ssid");
25460
+ }
25461
+ if (sessionId) {
25462
+ return false;
25463
+ }
25464
+ return true;
25465
+ }
25466
+ async logout() {
25467
+ if (this.loggingOut) {
25468
+ return;
25469
+ }
25470
+ else if (!this.canLogout()) {
25471
+ return;
25472
+ }
25473
+ try {
25474
+ await BModels.Session.Logout({});
25475
+ BModels.ENVIRONMENT.SetPageLoadSessionId(null);
25476
+ }
25477
+ catch (e) {
25478
+ console.error(e);
25479
+ }
25480
+ window.location.reload();
25481
+ }
25482
+ Dispose() {
25483
+ super.Dispose();
25484
+ if (this.paramsChangeRemoval) {
25485
+ this.paramsChangeRemoval();
25486
+ this.paramsChangeRemoval = null;
25487
+ }
25488
+ }
25489
+ _generateStyles() {
25490
+ if (document.getElementById(this.STYLESHEET_ID)) {
25491
+ return;
25492
+ }
25493
+ const style = document.createElement("style");
25494
+ style.id = this.STYLESHEET_ID;
25495
+ style.innerHTML = `
25496
+ .NextspaceLeftPanelTabUser * {
25497
+ box-sizing: border-box;
25498
+ font-family: Arial;
25499
+ font-size: 13px;
25500
+ }
25501
+
25502
+ .NextspaceLeftPanelTabUser {
25503
+ display: flex;
25504
+ flex-direction: column;
25505
+ flex-grow: 1;
25506
+ flex-shrink: 1;
25507
+ overflow: hidden;
25508
+ width: 100%;
25509
+ box-sizing: border-box;
25510
+ }
25511
+
25512
+ .NextspaceLeftPanelTabUser >.NextspaceLeftPanelTabUserTitleBar {
25513
+ align-items: center;
25514
+ color: #fff;
25515
+ display: flex;
25516
+ font-size: 17px;
25517
+ font-style: normal;
25518
+ font-weight: 500;
25519
+ justify-content: center;
25520
+ letter-spacing: -.005em;
25521
+ line-height: 20px;
25522
+ margin-bottom: 15px;
25523
+ font-family: Arial;
25524
+ }
25525
+
25526
+ .NextspaceLeftPanelTabUser >.NextspaceLeftPanelTabUserTitleBreaker {
25527
+ background-color: #000;
25528
+ flex-shrink: 0;
25529
+ height: 2px;
25530
+ margin-bottom: 15px;
25531
+ }
25532
+
25533
+ .NextspaceLeftPanelTabUser >.NextspaceLeftPanelTabUserInputRow {
25534
+ display: flex;
25535
+ flex-direction: row;
25536
+ align-items: center;
25537
+ margin-bottom: 8px;
25538
+ width: 100%;
25539
+ }
25540
+
25541
+ .NextspaceLeftPanelTabUser >.NextspaceLeftPanelTabUserInputRow >label {
25542
+ width: 90px;
25543
+ flex-shrink: 0;
25544
+ margin-right: 8px;
25545
+ color: white;
25546
+ }
25547
+
25548
+ .NextspaceLeftPanelTabUser >.NextspaceLeftPanelTabUserInputRow >input {
25549
+ flex-grow: 1;
25550
+ max-width: 220px;
25551
+
25552
+ background-color: #121619;
25553
+ border: 1px solid #ffffff36;
25554
+ color: #fff;
25555
+ flex-grow: 1;
25556
+ flex-shrink: 1;
25557
+ height: 30px;
25558
+ text-align: left;
25559
+ border-radius: .375rem;
25560
+ outline: none;
25561
+ padding: .5rem .75rem;
25562
+ box-sizing: border-box;
25563
+ width: 10px;
25564
+ }
25565
+
25566
+ .NextspaceLeftPanelTabUser button {
25567
+ cursor: pointer;
25568
+ border-radius: .375rem;
25569
+ padding: 4px 9px;
25570
+ transition: opacity 0.3s ease;
25571
+ width: 100px;
25572
+ width: min-content;
25573
+ height: min-content;
25574
+ white-space: nowrap;
25575
+ border: 1px solid grey;
25576
+ color: black;
25577
+ background-color: white;
25578
+ display: flex;
25579
+ align-items: center;
25580
+ justify-content: center;
25581
+ position: relative;
25582
+ background-color: #0072c3;
25583
+ border: 1px solid #0072c3;
25584
+ color: white;
25585
+
25586
+ margin-left: auto;
25587
+ }
25588
+ `;
25589
+ document.head.appendChild(style);
25590
+ }
25591
+ _generateElement() {
25592
+ var _a, _b;
25593
+ if ((_a = this._element) === null || _a === void 0 ? void 0 : _a.parentElement) {
25594
+ this._element.parentElement.removeChild(this._element);
25595
+ }
25596
+ this._element = null;
25597
+ const element = document.createElement("div");
25598
+ element.className = "NextspaceLeftPanelTabUser";
25599
+ const title = document.createElement("div");
25600
+ title.className = "NextspaceLeftPanelTabUserTitleBar";
25601
+ title.textContent = this.loaded ? (this.user ? ((_b = this.user.FullName) !== null && _b !== void 0 ? _b : "#" + this.user.ID) : "Guest") : "Loading..";
25602
+ element.appendChild(title);
25603
+ const breaker = document.createElement("div");
25604
+ breaker.className = "NextspaceLeftPanelTabUserTitleBreaker";
25605
+ element.appendChild(breaker);
25606
+ if (!this.user || this.user.ID === "anonymous") {
25607
+ {
25608
+ const inputRow = document.createElement("div");
25609
+ inputRow.className = "NextspaceLeftPanelTabUserInputRow";
25610
+ const label = document.createElement("label");
25611
+ label.textContent = "Username";
25612
+ inputRow.appendChild(label);
25613
+ const input = document.createElement("input");
25614
+ input.type = "text";
25615
+ input.placeholder = "...";
25616
+ this.inputUsername = input;
25617
+ inputRow.appendChild(this.inputUsername);
25618
+ element.appendChild(inputRow);
25619
+ }
25620
+ {
25621
+ const inputRow = document.createElement("div");
25622
+ inputRow.className = "NextspaceLeftPanelTabUserInputRow";
25623
+ const label = document.createElement("label");
25624
+ label.textContent = "Password";
25625
+ inputRow.appendChild(label);
25626
+ const input = document.createElement("input");
25627
+ input.type = "password";
25628
+ input.placeholder = "...";
25629
+ this.inputPassword = input;
25630
+ inputRow.appendChild(this.inputPassword);
25631
+ element.appendChild(inputRow);
25632
+ }
25633
+ {
25634
+ const button = document.createElement("button");
25635
+ button.textContent = "Login";
25636
+ button.onclick = async () => {
25637
+ var _a, _b, _c, _d, _e, _f;
25638
+ if (this.loggingIn) {
25639
+ return;
25640
+ }
25641
+ button.style.opacity = "0.7";
25642
+ this.loggingIn = true;
25643
+ try {
25644
+ const { session } = await BModels.Session.Login({
25645
+ accountId: BModels.ENVIRONMENT.PARAMS.accountId,
25646
+ username: (_b = (_a = this.inputUsername) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : "",
25647
+ password: (_d = (_c = this.inputPassword) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : ""
25648
+ });
25649
+ BModels.ENVIRONMENT.SetPageLoadSessionId((_e = session === null || session === void 0 ? void 0 : session.ID) !== null && _e !== void 0 ? _e : null);
25650
+ BModels.ENVIRONMENT.Reset({
25651
+ accountId: BModels.ENVIRONMENT.PARAMS.accountId,
25652
+ sessionId: (_f = (session === null || session === void 0 ? void 0 : session.ID)) !== null && _f !== void 0 ? _f : null,
25653
+ });
25654
+ window.location.reload();
25655
+ }
25656
+ catch (e) {
25657
+ console.error(e);
25658
+ }
25659
+ finally {
25660
+ this.loggingIn = false;
25661
+ button.style.opacity = "1";
25662
+ }
25663
+ };
25664
+ element.appendChild(button);
25665
+ }
25666
+ }
25667
+ else {
25668
+ if (this.canLogout()) {
25669
+ const button = document.createElement("button");
25670
+ button.textContent = "Logout";
25671
+ button.onclick = async () => {
25672
+ if (this.loggingOut) {
25673
+ return;
25674
+ }
25675
+ button.style.opacity = "0.7";
25676
+ try {
25677
+ this.logout();
25678
+ }
25679
+ catch (e) {
25680
+ console.error(e);
25681
+ }
25682
+ finally {
25683
+ button.style.opacity = "1";
25684
+ }
25685
+ };
25686
+ element.appendChild(button);
25687
+ }
25688
+ }
25689
+ this.Container.appendChild(element);
25690
+ this._element = element;
25691
+ }
25692
+ }
25693
+
25372
25694
  const VIEWER_LEFT_PANEL_WIDGET_KEY = "_viewerLeftPanelWidget";
25373
25695
  const VIEWER_LEFT_PANEL_CSS_VAR_LEFT = "--nextspace-left-panel-width";
25374
25696
  class WidgetLeftPanel extends exports.Widget.AWidget {
@@ -25737,6 +26059,7 @@
25737
26059
  </svg>
25738
26060
  `;
25739
26061
  buttonBookmarksIcon.innerHTML = LOGGED_OUT_ICON;
26062
+ buttonBookmarksIcon.style.cursor = "pointer";
25740
26063
  tabButton.appendChild(buttonBookmarksIcon);
25741
26064
  this._element.appendChild(tabButton);
25742
26065
  function getInitials(name) {
@@ -25794,6 +26117,16 @@
25794
26117
  buttonBookmarksIcon.innerHTML = LOGGED_OUT_ICON;
25795
26118
  }
25796
26119
  }
26120
+ buttonBookmarksIcon.onclick = () => {
26121
+ if (this._enabledPanelTab === "user") {
26122
+ this._enabledPanelTab = "";
26123
+ }
26124
+ else {
26125
+ this._enabledPanelTab = "user";
26126
+ }
26127
+ this._updatePanelContent();
26128
+ this._updatePanelStyles();
26129
+ };
25797
26130
  if (this.envSubRemoval) {
25798
26131
  this.envSubRemoval();
25799
26132
  this.envSubRemoval = null;
@@ -25843,6 +26176,12 @@
25843
26176
  container: container
25844
26177
  });
25845
26178
  break;
26179
+ case "user":
26180
+ tabContent = new WidgetLeftPanelTabUser({
26181
+ widget: this,
26182
+ container: container
26183
+ });
26184
+ break;
25846
26185
  default:
25847
26186
  if (this.customTabs.has(this._enabledPanelTab) === false) {
25848
26187
  console.error(`Tab ${this._enabledPanelTab} not found.`);
@@ -30782,7 +31121,7 @@
30782
31121
  }
30783
31122
  }
30784
31123
 
30785
- const VERSION = "5.5.2";
31124
+ const VERSION = "5.5.4";
30786
31125
 
30787
31126
  exports.VERSION = VERSION;
30788
31127
  exports.isHistoricMetadataChanged = isHistoricMetadataChanged;