bruce-cesium 7.1.0 → 7.1.1
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.
- package/dist/bruce-cesium.es5.js +1767 -131
- package/dist/bruce-cesium.es5.js.map +1 -1
- package/dist/bruce-cesium.umd.js +1878 -245
- package/dist/bruce-cesium.umd.js.map +1 -1
- package/dist/lib/bruce-cesium.js +3 -1
- package/dist/lib/bruce-cesium.js.map +1 -1
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js +427 -63
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js.map +1 -1
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-dashboard.js +507 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-dashboard.js.map +1 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-menu-items.js +704 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-menu-items.js.map +1 -0
- package/dist/lib/widgets/widget-bookmarks.js +9 -7
- package/dist/lib/widgets/widget-bookmarks.js.map +1 -1
- package/dist/lib/widgets/widget-info-view.js +68 -40
- package/dist/lib/widgets/widget-info-view.js.map +1 -1
- package/dist/lib/widgets/widget-left-panel.js +65 -18
- package/dist/lib/widgets/widget-left-panel.js.map +1 -1
- package/dist/types/bruce-cesium.d.ts +3 -1
- package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.d.ts +14 -0
- package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-dashboard.d.ts +44 -0
- package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-menu-items.d.ts +64 -0
- package/dist/types/widgets/widget-left-panel.d.ts +10 -2
- package/package.json +1 -1
package/dist/lib/bruce-cesium.js
CHANGED
|
@@ -69,6 +69,8 @@ __exportStar(require("./widgets/controls-view-bar/widget-control-view-bar"), exp
|
|
|
69
69
|
__exportStar(require("./widgets/controls-view-bar/widget-control-view-bar-search"), exports);
|
|
70
70
|
__exportStar(require("./widgets/tabs-left-panel/widget-left-panel-tab"), exports);
|
|
71
71
|
__exportStar(require("./widgets/tabs-left-panel/widget-left-panel-tab-bookmarks"), exports);
|
|
72
|
+
__exportStar(require("./widgets/tabs-left-panel/widget-left-panel-tab-dashboard"), exports);
|
|
73
|
+
__exportStar(require("./widgets/tabs-left-panel/widget-left-panel-tab-menu-items"), exports);
|
|
72
74
|
__exportStar(require("./widgets/widget"), exports);
|
|
73
75
|
__exportStar(require("./widgets/widget-bookmarks"), exports);
|
|
74
76
|
__exportStar(require("./widgets/widget-branding"), exports);
|
|
@@ -78,7 +80,7 @@ __exportStar(require("./widgets/widget-info-view"), exports);
|
|
|
78
80
|
__exportStar(require("./widgets/widget-left-panel"), exports);
|
|
79
81
|
__exportStar(require("./widgets/widget-nav-compass"), exports);
|
|
80
82
|
__exportStar(require("./widgets/widget-view-bar"), exports);
|
|
81
|
-
exports.VERSION = "7.1.
|
|
83
|
+
exports.VERSION = "7.1.1";
|
|
82
84
|
/**
|
|
83
85
|
* Updates the environment instance used by bruce-cesium to one specified.
|
|
84
86
|
* This can be used to ensure that the instance a parent is referencing is shared between bruce-cesium, bruce-models, and the parent app.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bruce-cesium.js","sourceRoot":"","sources":["../../src/bruce-cesium.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+CAA2C;AAE3C,qEAAmD;AACnD,uEAAqD;AACrD,mEAAiD;AACjD,2EAAyD;AACzD,yEAAuD;AACvD,2EAAyD;AACzD,4EAA0D;AAC1D,gEAA8C;AAC9C,gEAA8C;AAC9C,qFAAmE;AACnE,kFAAgE;AAChE,iFAA+D;AAC/D,oFAAkE;AAClE,yGAAuF;AACvF,uGAAqF;AACrF,mGAAiF;AACjF,sGAAoF;AACpF,+FAA6E;AAC7E,6FAA2E;AAC3E,4FAA0E;AAC1E,iGAA+E;AAC/E,6FAA2E;AAC3E,6EAA2D;AAC3D,kGAAgF;AAChF,kGAAgF;AAChF,uGAAqF;AACrF,4GAA0F;AAC1F,kGAAgF;AAChF,yGAAuF;AACvF,iEAA+C;AAC/C,oEAAkD;AAClD,iEAA+C;AAC/C,qEAAmD;AACnD,+DAA6C;AAC7C,mEAAiD;AACjD,+DAA6C;AAC7C,wDAAsC;AACtC,uDAAqC;AACrC,wDAAsC;AACtC,sDAAoC;AACpC,qDAAmC;AACnC,+DAA6C;AAC7C,4DAA0C;AAC1C,gEAA8C;AAC9C,wDAAsC;AACtC,mEAAiD;AACjD,oEAAkD;AAClD,mEAAiD;AACjD,+DAA6C;AAC7C,sFAAoE;AACpE,6FAA2E;AAC3E,kFAAgE;AAChE,4FAA0E;AAC1E,mDAAiC;AACjC,6DAA2C;AAC3C,4DAA0C;AAC1C,6DAA2C;AAC3C,sEAAoD;AACpD,6DAA2C;AAC3C,8DAA4C;AAC5C,+DAA6C;AAC7C,4DAA0C;AAE7B,QAAA,OAAO,GAAG,OAAO,CAAC;AAE/B;;;;GAIG;AACI,MAAM,cAAc,GAAG,CAAC,MAAW,EAAE,EAAE;IAC1C,0BAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEF;;;GAGG;AACI,MAAM,cAAc,GAAG,GAAG,EAAE;IAC/B,OAAO,0BAAW,CAAC;AACvB,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B"}
|
|
1
|
+
{"version":3,"file":"bruce-cesium.js","sourceRoot":"","sources":["../../src/bruce-cesium.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+CAA2C;AAE3C,qEAAmD;AACnD,uEAAqD;AACrD,mEAAiD;AACjD,2EAAyD;AACzD,yEAAuD;AACvD,2EAAyD;AACzD,4EAA0D;AAC1D,gEAA8C;AAC9C,gEAA8C;AAC9C,qFAAmE;AACnE,kFAAgE;AAChE,iFAA+D;AAC/D,oFAAkE;AAClE,yGAAuF;AACvF,uGAAqF;AACrF,mGAAiF;AACjF,sGAAoF;AACpF,+FAA6E;AAC7E,6FAA2E;AAC3E,4FAA0E;AAC1E,iGAA+E;AAC/E,6FAA2E;AAC3E,6EAA2D;AAC3D,kGAAgF;AAChF,kGAAgF;AAChF,uGAAqF;AACrF,4GAA0F;AAC1F,kGAAgF;AAChF,yGAAuF;AACvF,iEAA+C;AAC/C,oEAAkD;AAClD,iEAA+C;AAC/C,qEAAmD;AACnD,+DAA6C;AAC7C,mEAAiD;AACjD,+DAA6C;AAC7C,wDAAsC;AACtC,uDAAqC;AACrC,wDAAsC;AACtC,sDAAoC;AACpC,qDAAmC;AACnC,+DAA6C;AAC7C,4DAA0C;AAC1C,gEAA8C;AAC9C,wDAAsC;AACtC,mEAAiD;AACjD,oEAAkD;AAClD,mEAAiD;AACjD,+DAA6C;AAC7C,sFAAoE;AACpE,6FAA2E;AAC3E,kFAAgE;AAChE,4FAA0E;AAC1E,4FAA0E;AAC1E,6FAA2E;AAC3E,mDAAiC;AACjC,6DAA2C;AAC3C,4DAA0C;AAC1C,6DAA2C;AAC3C,sEAAoD;AACpD,6DAA2C;AAC3C,8DAA4C;AAC5C,+DAA6C;AAC7C,4DAA0C;AAE7B,QAAA,OAAO,GAAG,OAAO,CAAC;AAE/B;;;;GAIG;AACI,MAAM,cAAc,GAAG,CAAC,MAAW,EAAE,EAAE;IAC1C,0BAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEF;;;GAGG;AACI,MAAM,cAAc,GAAG,GAAG,EAAE;IAC/B,OAAO,0BAAW,CAAC;AACvB,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B"}
|
|
@@ -3,15 +3,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WidgetLeftPanelTabBookmarks = void 0;
|
|
4
4
|
const bruce_models_1 = require("bruce-models");
|
|
5
5
|
const widget_left_panel_tab_1 = require("./widget-left-panel-tab");
|
|
6
|
+
// Icons are inline so the library stays dependency free.
|
|
7
|
+
const ICON_FOLDER = `<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 6C3 5.44772 3.44772 5 4 5H9L11 7.5H20C20.5523 7.5 21 7.94772 21 8.5V18C21 18.5523 20.5523 19 20 19H4C3.44772 19 3 18.5523 3 18V6Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></svg>`;
|
|
8
|
+
const ICON_FOLDER_OPEN = `<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 6C3 5.44772 3.44772 5 4 5H9L11 7.5H20C20.5523 7.5 21 7.94772 21 8.5V10H3V6Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M3 10H21.5L19.5 18.5C19.4 18.8 19.1 19 18.8 19H4C3.44772 19 3 18.5523 3 18V10Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></svg>`;
|
|
9
|
+
const OPEN_STATE_STORAGE_PREFIX = "NextspaceBookmarkGroupOpen_";
|
|
10
|
+
const COMPACT_MODE_STORAGE_KEY = "NextspaceBookmarksCompactMode";
|
|
11
|
+
// Group id used for the synthetic list of bookmarks that belong to no group.
|
|
12
|
+
const UNGROUPED_ID = null;
|
|
6
13
|
class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPanelTab.ATab {
|
|
7
14
|
constructor(params) {
|
|
15
|
+
var _a, _b;
|
|
8
16
|
super(params);
|
|
9
17
|
this.STYLESHEET_ID = "nextspace-left-panel-tab-bookmarks-stylesheet";
|
|
18
|
+
this._compact = false;
|
|
19
|
+
this._compact = this._getStoredCompact();
|
|
10
20
|
this._generateStyles();
|
|
11
21
|
this._generateElement();
|
|
12
22
|
this._widget.Loading.then(() => {
|
|
13
23
|
this._updateBookmarks();
|
|
14
24
|
});
|
|
25
|
+
// The panel can be opened before a view has rendered, so the list has to rebuild when one arrives.
|
|
26
|
+
this._viewIdChangeRemoval = (_b = (_a = this._widget) === null || _a === void 0 ? void 0 : _a.OnViewIdChange) === null || _b === void 0 ? void 0 : _b.Subscribe(() => {
|
|
27
|
+
this._widget.Loading.then(() => {
|
|
28
|
+
this._updateBookmarks();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
15
31
|
// In case another widget messed with the panel width.
|
|
16
32
|
// Probably should just add a SetWidth method to avoid having plugins mess with the container CSS.
|
|
17
33
|
if (this.Container) {
|
|
@@ -19,6 +35,8 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
19
35
|
}
|
|
20
36
|
}
|
|
21
37
|
Dispose() {
|
|
38
|
+
var _a;
|
|
39
|
+
(_a = this._viewIdChangeRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
22
40
|
super.Dispose();
|
|
23
41
|
}
|
|
24
42
|
_generateStyles() {
|
|
@@ -28,11 +46,16 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
28
46
|
const style = document.createElement("style");
|
|
29
47
|
style.id = this.STYLESHEET_ID;
|
|
30
48
|
style.innerHTML = `
|
|
49
|
+
.NextspaceLeftPanelTabBookmarks * {
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
}
|
|
52
|
+
|
|
31
53
|
.NextspaceLeftPanelTabBookmarks {
|
|
32
54
|
display: flex;
|
|
33
55
|
flex-direction: column;
|
|
34
56
|
flex-grow: 1;
|
|
35
57
|
flex-shrink: 1;
|
|
58
|
+
font-family: Arial, sans-serif;
|
|
36
59
|
overflow: hidden;
|
|
37
60
|
width: 100%;
|
|
38
61
|
}
|
|
@@ -58,6 +81,59 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
58
81
|
margin-bottom: 15px;
|
|
59
82
|
}
|
|
60
83
|
|
|
84
|
+
.NextspaceLeftPanelTabBookmarksCompactBar {
|
|
85
|
+
align-items: center;
|
|
86
|
+
color: #fff;
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-shrink: 0;
|
|
89
|
+
font-size: 12px;
|
|
90
|
+
justify-content: flex-end;
|
|
91
|
+
margin-bottom: 10px;
|
|
92
|
+
user-select: none;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.NextspaceLeftPanelTabBookmarksCompactToggle {
|
|
96
|
+
align-items: center;
|
|
97
|
+
cursor: pointer;
|
|
98
|
+
display: flex;
|
|
99
|
+
opacity: .7;
|
|
100
|
+
transition: opacity .3s ease;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.NextspaceLeftPanelTabBookmarksCompactToggle:hover {
|
|
104
|
+
opacity: 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.NextspaceLeftPanelTabBookmarksCompactToggle >.NextspaceLeftPanelTabBookmarksCompactToggleTrack {
|
|
108
|
+
background: rgba(255, 255, 255, .2);
|
|
109
|
+
border-radius: 8px;
|
|
110
|
+
height: 16px;
|
|
111
|
+
margin-right: 8px;
|
|
112
|
+
position: relative;
|
|
113
|
+
transition: background .3s ease;
|
|
114
|
+
width: 30px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.NextspaceLeftPanelTabBookmarksCompactToggle >.NextspaceLeftPanelTabBookmarksCompactToggleTrack:after {
|
|
118
|
+
background: #fff;
|
|
119
|
+
border-radius: 50%;
|
|
120
|
+
content: "";
|
|
121
|
+
height: 12px;
|
|
122
|
+
left: 2px;
|
|
123
|
+
position: absolute;
|
|
124
|
+
top: 2px;
|
|
125
|
+
transition: left .3s ease;
|
|
126
|
+
width: 12px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.NextspaceLeftPanelTabBookmarksCompactToggle[is-on="true"] >.NextspaceLeftPanelTabBookmarksCompactToggleTrack {
|
|
130
|
+
background: #33b1ff;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.NextspaceLeftPanelTabBookmarksCompactToggle[is-on="true"] >.NextspaceLeftPanelTabBookmarksCompactToggleTrack:after {
|
|
134
|
+
left: 16px;
|
|
135
|
+
}
|
|
136
|
+
|
|
61
137
|
.NextspaceLeftPanelTabBookmarksList {
|
|
62
138
|
display: flex;
|
|
63
139
|
flex-direction: column;
|
|
@@ -66,30 +142,110 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
66
142
|
overflow: auto;
|
|
67
143
|
}
|
|
68
144
|
|
|
69
|
-
.
|
|
70
|
-
|
|
145
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader {
|
|
146
|
+
align-items: flex-end;
|
|
147
|
+
border-left: 2px solid rgba(255, 255, 255, .2);
|
|
148
|
+
color: #fff;
|
|
149
|
+
cursor: pointer;
|
|
150
|
+
display: flex;
|
|
151
|
+
font-size: 12px;
|
|
152
|
+
font-weight: 300;
|
|
153
|
+
letter-spacing: .01em;
|
|
154
|
+
padding-left: 8px;
|
|
155
|
+
transition: border-left-color .3s ease;
|
|
156
|
+
user-select: none;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader:hover {
|
|
160
|
+
border-left-color: rgba(255, 255, 255, .5);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader[is-opened="false"] {
|
|
164
|
+
margin-bottom: 10px;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader[is-opened="true"] {
|
|
168
|
+
padding-bottom: 5px;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader >.NextspaceLeftPanelTabBookmarksGroupHeaderIcon {
|
|
71
172
|
align-items: center;
|
|
72
173
|
display: flex;
|
|
174
|
+
flex-shrink: 0;
|
|
175
|
+
height: 20px;
|
|
176
|
+
justify-content: center;
|
|
177
|
+
margin-right: 8px;
|
|
178
|
+
width: 20px;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader >.NextspaceLeftPanelTabBookmarksGroupHeaderIcon >svg {
|
|
182
|
+
height: 20px;
|
|
183
|
+
width: 20px;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader >.NextspaceLeftPanelTabBookmarksGroupHeaderName {
|
|
187
|
+
margin-right: 8px;
|
|
188
|
+
opacity: .7;
|
|
189
|
+
overflow: hidden;
|
|
190
|
+
padding-bottom: 8px;
|
|
191
|
+
text-overflow: ellipsis;
|
|
192
|
+
white-space: nowrap;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.NextspaceLeftPanelTabBookmarksGroupHeader >.NextspaceLeftPanelTabBookmarksGroupHeaderCount {
|
|
196
|
+
margin-right: 3px;
|
|
197
|
+
opacity: .7;
|
|
198
|
+
padding-bottom: 8px;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.NextspaceLeftPanelTabBookmarksGroupBody {
|
|
202
|
+
display: flex;
|
|
203
|
+
flex-direction: column;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.NextspaceLeftPanelTabBookmarksGroupBody[is-grouped="true"] {
|
|
207
|
+
border-left: 2px solid rgba(255, 255, 255, .2);
|
|
208
|
+
margin-bottom: 12px;
|
|
209
|
+
padding-left: 8px;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.NextspaceLeftPanelTabBookmarksListItem {
|
|
213
|
+
background: rgba(255, 255, 255, .05);
|
|
214
|
+
border: 1px solid rgba(255, 255, 255, .1);
|
|
215
|
+
border-radius: 8px;
|
|
216
|
+
cursor: pointer;
|
|
217
|
+
display: flex;
|
|
73
218
|
flex-direction: column;
|
|
219
|
+
margin-bottom: 6px;
|
|
220
|
+
overflow: hidden;
|
|
221
|
+
padding: 12px;
|
|
222
|
+
transition: background .3s ease, border-color .3s ease, transform .3s ease;
|
|
74
223
|
width: 100%;
|
|
75
224
|
}
|
|
76
225
|
|
|
77
|
-
.NextspaceLeftPanelTabBookmarksListItem
|
|
78
|
-
|
|
226
|
+
.NextspaceLeftPanelTabBookmarksListItem:hover {
|
|
227
|
+
background: rgba(255, 255, 255, .08);
|
|
228
|
+
border-color: rgba(255, 255, 255, .2);
|
|
229
|
+
transform: translateY(-2px);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.NextspaceLeftPanelTabBookmarksListItem[is-selected="true"] {
|
|
233
|
+
background: rgba(51, 177, 255, .1);
|
|
234
|
+
border-color: #33b1ff;
|
|
79
235
|
}
|
|
80
236
|
|
|
81
237
|
.NextspaceLeftPanelTabBookmarksListItemImageBox {
|
|
82
|
-
|
|
83
|
-
border-radius:
|
|
238
|
+
background-color: rgba(255, 255, 255, .05);
|
|
239
|
+
border-radius: 6px;
|
|
84
240
|
display: flex;
|
|
85
|
-
|
|
241
|
+
flex-shrink: 0;
|
|
242
|
+
height: 120px;
|
|
86
243
|
margin-bottom: 8px;
|
|
87
244
|
overflow: hidden;
|
|
88
245
|
width: 100%;
|
|
89
246
|
}
|
|
90
247
|
|
|
91
248
|
.NextspaceLeftPanelTabBookmarksListItemImageBoxImage {
|
|
92
|
-
cursor: pointer;
|
|
93
249
|
display: flex;
|
|
94
250
|
flex-direction: column;
|
|
95
251
|
flex-grow: 1;
|
|
@@ -105,25 +261,59 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
105
261
|
width: 100%;
|
|
106
262
|
}
|
|
107
263
|
|
|
108
|
-
.NextspaceLeftPanelTabBookmarksListItemTitle {
|
|
109
|
-
color: #fff;
|
|
110
|
-
display: flex;
|
|
111
|
-
padding-right: 15px;
|
|
112
|
-
text-align: center;
|
|
113
|
-
width: 100%;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
264
|
.NextspaceLeftPanelTabBookmarksListItemTitleText {
|
|
265
|
+
color: #f2f4f8;
|
|
117
266
|
display: block;
|
|
118
|
-
|
|
119
|
-
|
|
267
|
+
font-family: Arial;
|
|
268
|
+
font-size: 13px;
|
|
269
|
+
font-weight: 600;
|
|
120
270
|
overflow: hidden;
|
|
121
|
-
text-align: center;
|
|
122
271
|
text-overflow: ellipsis;
|
|
123
272
|
white-space: nowrap;
|
|
124
273
|
width: 100%;
|
|
125
|
-
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.NextspaceLeftPanelTabBookmarksListItemDescription {
|
|
277
|
+
color: rgba(255, 255, 255, .7);
|
|
278
|
+
font-size: 12px;
|
|
279
|
+
margin-top: 4px;
|
|
280
|
+
overflow: hidden;
|
|
281
|
+
width: 100%;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.NextspaceLeftPanelTabBookmarks[is-compact="true"] .NextspaceLeftPanelTabBookmarksListItem {
|
|
285
|
+
align-items: center;
|
|
286
|
+
flex-direction: row;
|
|
287
|
+
margin-bottom: 4px;
|
|
288
|
+
min-height: 54px;
|
|
289
|
+
padding: 0;
|
|
290
|
+
transform: none;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.NextspaceLeftPanelTabBookmarks[is-compact="true"] .NextspaceLeftPanelTabBookmarksListItemImageBox {
|
|
294
|
+
border-radius: 8px 0 0 8px;
|
|
295
|
+
border-right: 1px solid #6a6a6a;
|
|
296
|
+
height: 60px;
|
|
297
|
+
margin-bottom: 0;
|
|
298
|
+
margin-right: 10px;
|
|
299
|
+
width: 70px;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.NextspaceLeftPanelTabBookmarks[is-compact="true"] .NextspaceLeftPanelTabBookmarksListItemTitleText {
|
|
303
|
+
font-size: 12px;
|
|
304
|
+
font-weight: 400;
|
|
305
|
+
padding-right: 10px;
|
|
306
|
+
text-align: right;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.NextspaceLeftPanelTabBookmarks[is-compact="true"] .NextspaceLeftPanelTabBookmarksListItemDescription {
|
|
310
|
+
display: none;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.NextspaceLeftPanelTabBookmarksEmpty {
|
|
314
|
+
color: #fff;
|
|
126
315
|
font-size: 13px;
|
|
316
|
+
opacity: .7;
|
|
127
317
|
}
|
|
128
318
|
`;
|
|
129
319
|
document.head.appendChild(style);
|
|
@@ -131,6 +321,7 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
131
321
|
_generateElement() {
|
|
132
322
|
const element = document.createElement("div");
|
|
133
323
|
element.className = "NextspaceLeftPanelTabBookmarks";
|
|
324
|
+
element.setAttribute("is-compact", String(this._compact));
|
|
134
325
|
const title = document.createElement("div");
|
|
135
326
|
title.className = "NextspaceLeftPanelTabBookmarksTitleBar";
|
|
136
327
|
title.textContent = "Bookmarks";
|
|
@@ -138,52 +329,224 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
138
329
|
const breaker = document.createElement("div");
|
|
139
330
|
breaker.className = "NextspaceLeftPanelTabBookmarksTitleBreaker";
|
|
140
331
|
element.appendChild(breaker);
|
|
332
|
+
const compactBar = document.createElement("div");
|
|
333
|
+
compactBar.className = "NextspaceLeftPanelTabBookmarksCompactBar";
|
|
334
|
+
const compactToggle = document.createElement("div");
|
|
335
|
+
compactToggle.className = "NextspaceLeftPanelTabBookmarksCompactToggle";
|
|
336
|
+
compactToggle.title = "Compact";
|
|
337
|
+
compactToggle.setAttribute("is-on", String(this._compact));
|
|
338
|
+
const compactTrack = document.createElement("div");
|
|
339
|
+
compactTrack.className = "NextspaceLeftPanelTabBookmarksCompactToggleTrack";
|
|
340
|
+
compactToggle.appendChild(compactTrack);
|
|
341
|
+
const compactLabel = document.createElement("div");
|
|
342
|
+
compactLabel.textContent = "Compact";
|
|
343
|
+
compactToggle.appendChild(compactLabel);
|
|
344
|
+
compactToggle.onclick = () => {
|
|
345
|
+
this._setCompact(!this._compact);
|
|
346
|
+
};
|
|
347
|
+
compactBar.appendChild(compactToggle);
|
|
348
|
+
element.appendChild(compactBar);
|
|
349
|
+
const empty = document.createElement("div");
|
|
350
|
+
empty.className = "NextspaceLeftPanelTabBookmarksEmpty";
|
|
351
|
+
empty.textContent = "No bookmarks in this project view.";
|
|
352
|
+
empty.style.display = "none";
|
|
353
|
+
element.appendChild(empty);
|
|
141
354
|
const list = document.createElement("div");
|
|
142
355
|
list.className = "NextspaceLeftPanelTabBookmarksList";
|
|
143
356
|
element.appendChild(list);
|
|
144
357
|
this.Container.appendChild(element);
|
|
145
358
|
this._element = element;
|
|
146
359
|
}
|
|
360
|
+
_getStoredCompact() {
|
|
361
|
+
try {
|
|
362
|
+
return window.localStorage.getItem(COMPACT_MODE_STORAGE_KEY) === "true";
|
|
363
|
+
}
|
|
364
|
+
catch (e) {
|
|
365
|
+
// Storage can be unavailable (private mode, blocked cookies). The default layout still works.
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
_setCompact(compact) {
|
|
370
|
+
this._compact = compact;
|
|
371
|
+
this._element.setAttribute("is-compact", String(compact));
|
|
372
|
+
const toggle = this._element.querySelector(".NextspaceLeftPanelTabBookmarksCompactToggle");
|
|
373
|
+
if (toggle) {
|
|
374
|
+
toggle.setAttribute("is-on", String(compact));
|
|
375
|
+
}
|
|
376
|
+
try {
|
|
377
|
+
window.localStorage.setItem(COMPACT_MODE_STORAGE_KEY, String(compact));
|
|
378
|
+
}
|
|
379
|
+
catch (e) {
|
|
380
|
+
console.warn(e);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
_getGroupOpen(groupId) {
|
|
384
|
+
try {
|
|
385
|
+
return window.localStorage.getItem(OPEN_STATE_STORAGE_PREFIX + groupId) === "true";
|
|
386
|
+
}
|
|
387
|
+
catch (e) {
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
_setGroupOpen(groupId, open) {
|
|
392
|
+
try {
|
|
393
|
+
window.localStorage.setItem(OPEN_STATE_STORAGE_PREFIX + groupId, String(open));
|
|
394
|
+
}
|
|
395
|
+
catch (e) {
|
|
396
|
+
console.warn(e);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Sorts the bookmarks into their groups, ordering both by display order then name.
|
|
401
|
+
* Bookmarks with no group, or one that no longer exists, land in a trailing ungrouped list.
|
|
402
|
+
*/
|
|
403
|
+
_buildGroupLists() {
|
|
404
|
+
var _a, _b;
|
|
405
|
+
const bookmarks = (_a = this._widget.Bookmarks) !== null && _a !== void 0 ? _a : [];
|
|
406
|
+
const groups = ((_b = this._widget.BookmarkGroups) !== null && _b !== void 0 ? _b : []).slice().sort((a, b) => {
|
|
407
|
+
var _a, _b, _c, _d;
|
|
408
|
+
const orderDiff = ((_a = a.DisplayOrder) !== null && _a !== void 0 ? _a : 0) - ((_b = b.DisplayOrder) !== null && _b !== void 0 ? _b : 0);
|
|
409
|
+
if (orderDiff !== 0) {
|
|
410
|
+
return orderDiff;
|
|
411
|
+
}
|
|
412
|
+
return ((_c = a.Name) !== null && _c !== void 0 ? _c : "").toLowerCase().localeCompare(((_d = b.Name) !== null && _d !== void 0 ? _d : "").toLowerCase());
|
|
413
|
+
});
|
|
414
|
+
const lists = groups.map(group => ({
|
|
415
|
+
groupId: group.ID,
|
|
416
|
+
group,
|
|
417
|
+
bookmarks: []
|
|
418
|
+
}));
|
|
419
|
+
const listsById = new Map(lists.map(list => [list.groupId, list]));
|
|
420
|
+
const ungrouped = {
|
|
421
|
+
groupId: UNGROUPED_ID,
|
|
422
|
+
group: null,
|
|
423
|
+
bookmarks: []
|
|
424
|
+
};
|
|
425
|
+
for (const bookmark of bookmarks) {
|
|
426
|
+
const groupId = bookmark["UI.SlideGroup.ID"];
|
|
427
|
+
const list = groupId ? listsById.get(groupId) : null;
|
|
428
|
+
(list !== null && list !== void 0 ? list : ungrouped).bookmarks.push(bookmark);
|
|
429
|
+
}
|
|
430
|
+
for (const list of lists) {
|
|
431
|
+
list.bookmarks.sort(this._compareBookmarks);
|
|
432
|
+
}
|
|
433
|
+
ungrouped.bookmarks.sort(this._compareBookmarks);
|
|
434
|
+
// Ungrouped always trails the named groups.
|
|
435
|
+
lists.push(ungrouped);
|
|
436
|
+
return lists;
|
|
437
|
+
}
|
|
438
|
+
_compareBookmarks(a, b) {
|
|
439
|
+
var _a, _b, _c, _d;
|
|
440
|
+
const orderDiff = ((_a = a.DisplayOrder) !== null && _a !== void 0 ? _a : 0) - ((_b = b.DisplayOrder) !== null && _b !== void 0 ? _b : 0);
|
|
441
|
+
if (orderDiff !== 0) {
|
|
442
|
+
return orderDiff;
|
|
443
|
+
}
|
|
444
|
+
return ((_c = a.Title) !== null && _c !== void 0 ? _c : "").localeCompare((_d = b.Title) !== null && _d !== void 0 ? _d : "");
|
|
445
|
+
}
|
|
147
446
|
_updateBookmarks() {
|
|
148
|
-
var _a;
|
|
149
|
-
const bookmarks = this._widget.Bookmarks;
|
|
150
|
-
this._element.style.display = bookmarks.length ? "flex" : "none";
|
|
151
|
-
const api = this._widget._getApiGetters().GetBruceApi();
|
|
447
|
+
var _a, _b;
|
|
448
|
+
const bookmarks = (_a = this._widget.Bookmarks) !== null && _a !== void 0 ? _a : [];
|
|
152
449
|
const list = this._element.querySelector(".NextspaceLeftPanelTabBookmarksList");
|
|
450
|
+
const empty = this._element.querySelector(".NextspaceLeftPanelTabBookmarksEmpty");
|
|
451
|
+
const compactBar = this._element.querySelector(".NextspaceLeftPanelTabBookmarksCompactBar");
|
|
153
452
|
list.innerHTML = "";
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
453
|
+
const hasBookmarks = bookmarks.length > 0;
|
|
454
|
+
empty.style.display = hasBookmarks ? "none" : "block";
|
|
455
|
+
compactBar.style.display = hasBookmarks ? "flex" : "none";
|
|
456
|
+
if (!hasBookmarks) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
const api = (_b = this._widget._getApiGetters()) === null || _b === void 0 ? void 0 : _b.GetBruceApi();
|
|
460
|
+
for (const groupList of this._buildGroupLists()) {
|
|
461
|
+
if (!groupList.bookmarks.length) {
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
this._renderGroup(groupList, list, api);
|
|
465
|
+
}
|
|
466
|
+
this._updateBookmark();
|
|
467
|
+
}
|
|
468
|
+
_renderGroup(groupList, parent, api) {
|
|
469
|
+
var _a;
|
|
470
|
+
const isGrouped = groupList.groupId != null;
|
|
471
|
+
// Ungrouped bookmarks have no header, so they're always visible.
|
|
472
|
+
const opened = isGrouped ? this._getGroupOpen(groupList.groupId) : true;
|
|
473
|
+
const body = document.createElement("div");
|
|
474
|
+
body.className = "NextspaceLeftPanelTabBookmarksGroupBody";
|
|
475
|
+
body.setAttribute("is-grouped", String(isGrouped));
|
|
476
|
+
if (isGrouped) {
|
|
477
|
+
const header = document.createElement("div");
|
|
478
|
+
header.className = "NextspaceLeftPanelTabBookmarksGroupHeader";
|
|
479
|
+
header.setAttribute("group-id", String(groupList.groupId));
|
|
480
|
+
header.setAttribute("is-opened", String(opened));
|
|
481
|
+
const icon = document.createElement("div");
|
|
482
|
+
icon.className = "NextspaceLeftPanelTabBookmarksGroupHeaderIcon";
|
|
483
|
+
icon.innerHTML = opened ? ICON_FOLDER_OPEN : ICON_FOLDER;
|
|
484
|
+
header.appendChild(icon);
|
|
485
|
+
const name = document.createElement("div");
|
|
486
|
+
name.className = "NextspaceLeftPanelTabBookmarksGroupHeaderName";
|
|
487
|
+
name.textContent = ((_a = groupList.group) === null || _a === void 0 ? void 0 : _a.Name) || "Unnamed Group";
|
|
488
|
+
header.appendChild(name);
|
|
489
|
+
const count = document.createElement("div");
|
|
490
|
+
count.className = "NextspaceLeftPanelTabBookmarksGroupHeaderCount";
|
|
491
|
+
count.textContent = "(" + groupList.bookmarks.length + ")";
|
|
492
|
+
header.appendChild(count);
|
|
493
|
+
header.onclick = () => {
|
|
494
|
+
this._setGroupOpen(groupList.groupId, !this._getGroupOpen(groupList.groupId));
|
|
495
|
+
this._updateBookmarks();
|
|
496
|
+
};
|
|
497
|
+
parent.appendChild(header);
|
|
498
|
+
body.style.display = opened ? "flex" : "none";
|
|
499
|
+
}
|
|
500
|
+
parent.appendChild(body);
|
|
501
|
+
if (!opened) {
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
for (const bookmark of groupList.bookmarks) {
|
|
505
|
+
this._renderBookmark(bookmark, body, api);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
_renderBookmark(bookmark, parent, api) {
|
|
509
|
+
var _a;
|
|
510
|
+
const item = document.createElement("div");
|
|
511
|
+
item.className = "NextspaceLeftPanelTabBookmarksListItem";
|
|
512
|
+
const imageBox = document.createElement("div");
|
|
513
|
+
imageBox.className = "NextspaceLeftPanelTabBookmarksListItemImageBox";
|
|
514
|
+
item.appendChild(imageBox);
|
|
515
|
+
const image = document.createElement("div");
|
|
516
|
+
image.className = "NextspaceLeftPanelTabBookmarksListItemImageBoxImage";
|
|
517
|
+
imageBox.appendChild(image);
|
|
518
|
+
const previewUrl = bookmark["Screenshot.ClientFile.ID"] ? ((_a = bookmark["Screenshot.URL"]) !== null && _a !== void 0 ? _a : bruce_models_1.ClientFile.GetUrl({
|
|
519
|
+
fileId: bookmark["Screenshot.ClientFile.ID"],
|
|
520
|
+
api,
|
|
521
|
+
viaCdn: true
|
|
522
|
+
})) : "";
|
|
523
|
+
// A bookmark without a screenshot keeps the empty tinted box rather than a broken image.
|
|
524
|
+
if (previewUrl) {
|
|
169
525
|
const img = document.createElement("img");
|
|
170
526
|
img.src = previewUrl;
|
|
527
|
+
img.loading = "lazy";
|
|
171
528
|
image.appendChild(img);
|
|
172
|
-
const title = document.createElement("div");
|
|
173
|
-
title.className = "NextspaceLeftPanelTabBookmarksListItemTitle";
|
|
174
|
-
item.appendChild(title);
|
|
175
|
-
const titleText = document.createElement("div");
|
|
176
|
-
titleText.className = "NextspaceLeftPanelTabBookmarksListItemTitleText";
|
|
177
|
-
titleText.textContent = bookmark.Title ? bookmark.Title : "Untitled Bookmark";
|
|
178
|
-
title.appendChild(titleText);
|
|
179
|
-
item.setAttribute("bookmark-id", bookmark.ID);
|
|
180
|
-
item.setAttribute("is-selected", String(bookmark.ID === this._widget.LastEnabledBookmarkId));
|
|
181
|
-
item.onclick = () => {
|
|
182
|
-
this._selectBookmark(bookmark);
|
|
183
|
-
};
|
|
184
|
-
list.appendChild(item);
|
|
185
529
|
}
|
|
186
|
-
|
|
530
|
+
const content = document.createElement("div");
|
|
531
|
+
content.className = "NextspaceLeftPanelTabBookmarksListItemContent";
|
|
532
|
+
item.appendChild(content);
|
|
533
|
+
const titleText = document.createElement("div");
|
|
534
|
+
titleText.className = "NextspaceLeftPanelTabBookmarksListItemTitleText";
|
|
535
|
+
titleText.textContent = bookmark.Title ? bookmark.Title : "Untitled Bookmark";
|
|
536
|
+
titleText.title = titleText.textContent;
|
|
537
|
+
content.appendChild(titleText);
|
|
538
|
+
if (bookmark.Note) {
|
|
539
|
+
const description = document.createElement("div");
|
|
540
|
+
description.className = "NextspaceLeftPanelTabBookmarksListItemDescription";
|
|
541
|
+
description.textContent = bookmark.Note;
|
|
542
|
+
content.appendChild(description);
|
|
543
|
+
}
|
|
544
|
+
item.setAttribute("bookmark-id", bookmark.ID);
|
|
545
|
+
item.setAttribute("is-selected", String(bookmark.ID === this._widget.LastEnabledBookmarkId));
|
|
546
|
+
item.onclick = () => {
|
|
547
|
+
this._selectBookmark(bookmark);
|
|
548
|
+
};
|
|
549
|
+
parent.appendChild(item);
|
|
187
550
|
}
|
|
188
551
|
_selectBookmark(bookmark) {
|
|
189
552
|
this._widget.SelectBookmark(bookmark);
|
|
@@ -199,19 +562,20 @@ class WidgetLeftPanelTabBookmarks extends widget_left_panel_tab_1.WidgetLeftPane
|
|
|
199
562
|
item.setAttribute("is-selected", "false");
|
|
200
563
|
}
|
|
201
564
|
}
|
|
202
|
-
// Scroll the selected bookmark into view.
|
|
565
|
+
// Scroll the selected bookmark into view. This list is vertical, unlike the bookmark strip widget's.
|
|
203
566
|
const selected = this._element.querySelector(".NextspaceLeftPanelTabBookmarksListItem[is-selected='true']");
|
|
204
567
|
if (selected) {
|
|
205
568
|
const list = this._element.querySelector(".NextspaceLeftPanelTabBookmarksList");
|
|
206
|
-
const
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
569
|
+
const scrollTop = list.scrollTop;
|
|
570
|
+
const scrollBottom = scrollTop + list.clientHeight;
|
|
571
|
+
// Both share the panel container as their offset parent, so this is the item's offset within the list.
|
|
572
|
+
const top = selected.offsetTop - list.offsetTop;
|
|
573
|
+
const bottom = top + selected.clientHeight;
|
|
574
|
+
if (top < scrollTop) {
|
|
575
|
+
list.scrollTop = top;
|
|
576
|
+
}
|
|
577
|
+
else if (bottom > scrollBottom) {
|
|
578
|
+
list.scrollTop = bottom - list.clientHeight;
|
|
215
579
|
}
|
|
216
580
|
}
|
|
217
581
|
}
|