Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
giswqs
GitHub Repository: giswqs/geemap
Path: blob/master/js/layer_manager.ts
2313 views
1
import type { RenderProps } from "@anywidget/types";
2
import { html, css, TemplateResult } from "lit";
3
import { property } from "lit/decorators.js";
4
5
import { legacyStyles } from "./ipywidgets_styles";
6
import { LitWidget } from "./lit_widget";
7
import { loadFonts, updateChildren } from "./utils";
8
9
import "./container";
10
11
export interface LayerManagerModel {
12
children: any;
13
visible: boolean;
14
}
15
16
export class LayerManager extends LitWidget<LayerManagerModel, LayerManager> {
17
static get componentName() {
18
return `layer-manager`;
19
}
20
21
static override styles = [
22
legacyStyles,
23
css`
24
.row {
25
align-items: center;
26
display: flex;
27
gap: 4px;
28
height: 28px;
29
}
30
31
.visibility-checkbox {
32
margin: 2px;
33
}
34
35
.layer-manager-rows {
36
display: flex;
37
flex-direction: column;
38
gap: 10px;
39
}
40
`,
41
];
42
43
@property() visible: boolean = false;
44
@property() override tabIndex: number = 0;
45
@property() collapsed: boolean = true;
46
47
modelNameToViewName(): Map<
48
keyof LayerManagerModel,
49
keyof LayerManager | null
50
> {
51
return new Map([
52
["children", null],
53
["visible", "visible"],
54
]);
55
}
56
57
override render(): TemplateResult {
58
return html`
59
<widget-container
60
icon="layers"
61
title=""
62
.collapsed="${this.collapsed}"
63
.hideCloseButton="${true}"
64
.compactMode="${true}"
65
.reverseHeader="${true}"
66
>
67
<div class="container">
68
<div class="layer-manager-rows">
69
<div class="row">
70
<input
71
type="checkbox"
72
class="visibility-checkbox"
73
.checked="${this.visible}"
74
@change="${this.onLayerVisibilityChanged}"
75
/>
76
<span
77
class="legacy-text all-layers-text"
78
@click="${this.onLayerVisibilityChanged}"
79
>
80
All layers on/off</span
81
>
82
</div>
83
<slot></slot>
84
</div>
85
</div>
86
</widget-container>
87
`;
88
}
89
90
private onLayerVisibilityChanged(_event: Event): void {
91
this.visible = !this.visible;
92
}
93
}
94
95
// Without this check, there's a component registry issue when developing locally.
96
if (!customElements.get(LayerManager.componentName)) {
97
customElements.define(LayerManager.componentName, LayerManager);
98
}
99
100
async function render({ model, el }: RenderProps<LayerManagerModel>) {
101
loadFonts();
102
const manager = <LayerManager>(
103
document.createElement(LayerManager.componentName)
104
);
105
manager.model = model;
106
el.appendChild(manager);
107
108
updateChildren(manager, model);
109
model.on("change:children", () => {
110
updateChildren(manager, model);
111
});
112
}
113
114
export default { render };
115
116