@edifice.io/client 2.0.5-develop-pedago.20250204132346 → 2.0.5
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/globals.d.ts +0 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +364 -441
- package/dist/resources/interface.d.ts +0 -10
- package/package.json +3 -3
- package/dist/resources/services/CollaborativeEditorResourceService.d.ts +0 -14
- package/dist/resources/services/HomeworksResourceService.d.ts +0 -14
- package/dist/resources/services/TimelineGeneratorResourceService.d.ts +0 -14
package/dist/index.js
CHANGED
|
@@ -1,18 +1,90 @@
|
|
|
1
1
|
var v = Object.defineProperty;
|
|
2
2
|
var T = (o, e, t) => e in o ? v(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
|
|
3
|
-
var
|
|
3
|
+
var n = (o, e, t) => T(o, typeof e != "symbol" ? e + "" : e, t);
|
|
4
4
|
import axios from "axios";
|
|
5
5
|
import { MimeTypeUtils } from "@edifice.io/utilities";
|
|
6
6
|
const ERROR_CODE = {
|
|
7
|
+
SUCCESS: "0000",
|
|
7
8
|
UNKNOWN: "0010",
|
|
9
|
+
NOT_INITIALIZED: "0020",
|
|
8
10
|
NOT_SUPPORTED: "0030",
|
|
9
11
|
APP_NOT_FOUND: "0040",
|
|
12
|
+
AGENT_NOT_FOUND: "0050",
|
|
13
|
+
TRANSPORT_ERROR: "0060",
|
|
10
14
|
TIME_OUT: "0070",
|
|
11
15
|
MALFORMED_DATA: "0080",
|
|
12
16
|
NOT_LOGGED_IN: "0090"
|
|
13
|
-
}, APP$
|
|
17
|
+
}, APP$1 = {
|
|
18
|
+
ADMIN: "admin",
|
|
19
|
+
ARCHIVE: "archive",
|
|
20
|
+
AUTH: "auth",
|
|
21
|
+
CAS: "cas",
|
|
22
|
+
COMMUNICATION: "communication",
|
|
23
|
+
CONVERSATION: "conversation",
|
|
24
|
+
DIRECTORY: "directory",
|
|
25
|
+
// FIXME userbook OR directory : the choice may impact some configurations, @see IXitiTrackingParams.NOM_PAGE for example
|
|
26
|
+
USERBOOK: "userbook",
|
|
27
|
+
INFRA: "infra",
|
|
28
|
+
PORTAL: "portal",
|
|
14
29
|
TIMELINE: "timeline",
|
|
15
|
-
|
|
30
|
+
WORKSPACE: "workspace",
|
|
31
|
+
// -- a few others commonly used apps
|
|
32
|
+
EXPLORER: "explorer",
|
|
33
|
+
VIDEO: "video",
|
|
34
|
+
MINDMAP: "mindmap",
|
|
35
|
+
SCRAPBOOK: "scrapbook",
|
|
36
|
+
COLLABORATIVEWALL: "collaborativewall",
|
|
37
|
+
WIKI: "wiki"
|
|
38
|
+
// TODO compléter/trier les apps suivantes
|
|
39
|
+
/*
|
|
40
|
+
"competences"
|
|
41
|
+
"cahier-textes"
|
|
42
|
+
"poll"
|
|
43
|
+
"rack"
|
|
44
|
+
"rbs"
|
|
45
|
+
"searchengine"
|
|
46
|
+
"sharebigfiles"
|
|
47
|
+
"schoolbook"
|
|
48
|
+
"archive"
|
|
49
|
+
"admin"
|
|
50
|
+
"cahier-de-texte"
|
|
51
|
+
"wiki"
|
|
52
|
+
"cns"
|
|
53
|
+
"conversation"
|
|
54
|
+
"paths"
|
|
55
|
+
"parcours"
|
|
56
|
+
"notebook"
|
|
57
|
+
"account"
|
|
58
|
+
"support"
|
|
59
|
+
"workspace"
|
|
60
|
+
"admin-portal"
|
|
61
|
+
"stats"
|
|
62
|
+
"userbook" // FIXME userbook OR directory : the choice may impact some configurations, @see IXitiTrackingParams.NOM_PAGE for example
|
|
63
|
+
"directory" // FIXME Keep in mind that ode-ts-client MUST not access the locationPath of the window !
|
|
64
|
+
"mindmap"
|
|
65
|
+
"timelinegenerator"
|
|
66
|
+
"actualites"
|
|
67
|
+
"pad"
|
|
68
|
+
"collaborativeeditor"
|
|
69
|
+
"settings-class"
|
|
70
|
+
"library"
|
|
71
|
+
"visioconf"
|
|
72
|
+
"Web-conference"
|
|
73
|
+
"notes"
|
|
74
|
+
"attendance"
|
|
75
|
+
"calendar"
|
|
76
|
+
"canal-numerique"
|
|
77
|
+
"collaborative-wall"
|
|
78
|
+
"statistics"
|
|
79
|
+
"polls"
|
|
80
|
+
"community"
|
|
81
|
+
"forum"
|
|
82
|
+
"pages"
|
|
83
|
+
"website"
|
|
84
|
+
"parametrage"
|
|
85
|
+
"kne"
|
|
86
|
+
"sacoche"
|
|
87
|
+
*/
|
|
16
88
|
}, USER_PREFS = {
|
|
17
89
|
APPS: "apps",
|
|
18
90
|
WIDGETS: "widgets",
|
|
@@ -25,7 +97,7 @@ const ERROR_CODE = {
|
|
|
25
97
|
};
|
|
26
98
|
class Subscription {
|
|
27
99
|
constructor(e, t) {
|
|
28
|
-
|
|
100
|
+
n(this, "revoke");
|
|
29
101
|
this._channel = e, this.revoke = this.setReceiver(
|
|
30
102
|
(s) => t == null ? void 0 : t(s.data)
|
|
31
103
|
);
|
|
@@ -43,7 +115,7 @@ class Subject {
|
|
|
43
115
|
* => We maintain here channels for *sending* messages.
|
|
44
116
|
* *Receiving* channels will be instantiated while subscribing.
|
|
45
117
|
*/
|
|
46
|
-
|
|
118
|
+
n(this, "publishChannels", /* @__PURE__ */ new Map());
|
|
47
119
|
}
|
|
48
120
|
getChannelName(e) {
|
|
49
121
|
return "Subject:" + e;
|
|
@@ -78,9 +150,9 @@ const ASYNC_DATA_NAME = {
|
|
|
78
150
|
class Promisified {
|
|
79
151
|
constructor() {
|
|
80
152
|
//-------------------------------------
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
153
|
+
n(this, "_resolution");
|
|
154
|
+
n(this, "_rejection");
|
|
155
|
+
n(this, "_promise", new Promise((e, t) => {
|
|
84
156
|
this._resolution = e, this._rejection = t;
|
|
85
157
|
}));
|
|
86
158
|
}
|
|
@@ -97,8 +169,8 @@ class Promisified {
|
|
|
97
169
|
class NotifyFramework {
|
|
98
170
|
constructor() {
|
|
99
171
|
//-------------------------------------
|
|
100
|
-
|
|
101
|
-
|
|
172
|
+
n(this, "promises", {});
|
|
173
|
+
n(this, "subject", new Subject());
|
|
102
174
|
}
|
|
103
175
|
asyncData(e) {
|
|
104
176
|
return typeof this.promises[e] > "u" && (this.promises[e] = new Promisified()), this.promises[e];
|
|
@@ -129,8 +201,8 @@ const notify = new NotifyFramework(), loadedScripts$1 = {};
|
|
|
129
201
|
class Http {
|
|
130
202
|
constructor(e) {
|
|
131
203
|
// Axios automatically manages the XSRF-TOKEN cookie and the X-XSRF-TOKEN HTTP header.
|
|
132
|
-
|
|
133
|
-
|
|
204
|
+
n(this, "axios");
|
|
205
|
+
n(this, "_latestResponse");
|
|
134
206
|
this.axios = axios.create(e);
|
|
135
207
|
}
|
|
136
208
|
setCdn(e) {
|
|
@@ -208,15 +280,15 @@ class Http {
|
|
|
208
280
|
}
|
|
209
281
|
getScript(e, t, s) {
|
|
210
282
|
const r = s ?? "exports", i = this.toAxiosConfig(t);
|
|
211
|
-
return i.headers && (i.headers.Accept = "application/javascript"), this.axios.get(this.toCdnUrl(e), i).then((
|
|
283
|
+
return i.headers && (i.headers.Accept = "application/javascript"), this.axios.get(this.toCdnUrl(e), i).then((u) => this.mapAxiosResponse(u, t)).then((u) => {
|
|
212
284
|
try {
|
|
213
|
-
const a = `"use strict";var ${r.split(".")[0]}={};${
|
|
285
|
+
const a = `"use strict";var ${r.split(".")[0]}={};${u};return ${r};`;
|
|
214
286
|
return Function(a)();
|
|
215
287
|
} catch {
|
|
216
|
-
return
|
|
288
|
+
return u;
|
|
217
289
|
}
|
|
218
|
-
}).catch((
|
|
219
|
-
throw this.mapAxiosError(
|
|
290
|
+
}).catch((u) => {
|
|
291
|
+
throw this.mapAxiosError(u, t), u;
|
|
220
292
|
});
|
|
221
293
|
}
|
|
222
294
|
loadScript(e, t) {
|
|
@@ -227,7 +299,7 @@ class Http {
|
|
|
227
299
|
}
|
|
228
300
|
class TransportFramework {
|
|
229
301
|
constructor() {
|
|
230
|
-
|
|
302
|
+
n(this, "_http", new Http());
|
|
231
303
|
}
|
|
232
304
|
get http() {
|
|
233
305
|
return this._http;
|
|
@@ -246,11 +318,11 @@ class ConfigurationFrameworkFactory {
|
|
|
246
318
|
const http$2 = transport.http;
|
|
247
319
|
class Session {
|
|
248
320
|
constructor() {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
321
|
+
n(this, "_me", null);
|
|
322
|
+
n(this, "_currentLanguage", "");
|
|
323
|
+
n(this, "_notLoggedIn", !0);
|
|
324
|
+
n(this, "_description");
|
|
325
|
+
n(this, "_profile");
|
|
254
326
|
}
|
|
255
327
|
get currentLanguage() {
|
|
256
328
|
return this._currentLanguage;
|
|
@@ -295,8 +367,8 @@ class Session {
|
|
|
295
367
|
hasRight(e, t) {
|
|
296
368
|
if (t === "owner")
|
|
297
369
|
return e.owner && e.owner.userId === this._me.userId;
|
|
298
|
-
const s = t.right || t, i = e.shared.filter((a) => (this._me.groupsIds || []).indexOf(a.groupId) !== -1 || a.userId === this._me.userId).find((a) => a[s] || a.manager) !== void 0,
|
|
299
|
-
return i &&
|
|
370
|
+
const s = t.right || t, i = e.shared.filter((a) => (this._me.groupsIds || []).indexOf(a.groupId) !== -1 || a.userId === this._me.userId).find((a) => a[s] || a.manager) !== void 0, u = t.workflow ? this.hasWorkflow(t.workflow) : !0;
|
|
371
|
+
return i && u;
|
|
300
372
|
}
|
|
301
373
|
////////////////////////////////////////////////////////// Storage management
|
|
302
374
|
get latestQuotaAndUsage() {
|
|
@@ -368,7 +440,7 @@ class Session {
|
|
|
368
440
|
}
|
|
369
441
|
class SessionFramework {
|
|
370
442
|
constructor() {
|
|
371
|
-
|
|
443
|
+
n(this, "session", new Session());
|
|
372
444
|
}
|
|
373
445
|
initialize() {
|
|
374
446
|
return this.session.initialize();
|
|
@@ -392,22 +464,22 @@ class SessionFramework {
|
|
|
392
464
|
const session = new SessionFramework();
|
|
393
465
|
class Theme {
|
|
394
466
|
constructor() {
|
|
395
|
-
|
|
396
|
-
|
|
467
|
+
n(this, "_conf");
|
|
468
|
+
n(this, "_loaded");
|
|
397
469
|
// legacy (readonly)
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
470
|
+
n(this, "skinName", "");
|
|
471
|
+
n(this, "themeName", "");
|
|
472
|
+
n(this, "skin", "raw");
|
|
473
|
+
n(this, "themeUrl", "/assets/themes/raw/default/");
|
|
474
|
+
n(this, "templateOverrides", {});
|
|
475
|
+
n(this, "portalTemplate", "/assets/themes/raw/portal.html");
|
|
476
|
+
n(this, "basePath", "");
|
|
477
|
+
n(this, "logoutCallback", "/");
|
|
478
|
+
n(this, "skins", []);
|
|
479
|
+
n(this, "is1D", !1);
|
|
480
|
+
n(this, "is2D", !1);
|
|
481
|
+
n(this, "_onSkinReady", notify.onSkinReady());
|
|
482
|
+
n(this, "_onOverrideReady", notify.onOverridesReady());
|
|
411
483
|
}
|
|
412
484
|
initialize(e) {
|
|
413
485
|
return notify.onSessionReady().promise.then(() => this.load(e));
|
|
@@ -740,8 +812,8 @@ class Idiom {
|
|
|
740
812
|
else {
|
|
741
813
|
const i = new Promisified();
|
|
742
814
|
promises$1[t] = i.promise;
|
|
743
|
-
const
|
|
744
|
-
e && (
|
|
815
|
+
const u = {};
|
|
816
|
+
e && (u["Accept-Language"] = e), transport.http.get(t, { headers: u }).then((a) => {
|
|
745
817
|
Object.assign(bundle$1, a), typeof s == "function" && s(), i.resolve();
|
|
746
818
|
}).catch((a) => {
|
|
747
819
|
typeof s == "function" && s(), i.reject();
|
|
@@ -779,7 +851,7 @@ class Idiom {
|
|
|
779
851
|
class UserPreferences {
|
|
780
852
|
constructor() {
|
|
781
853
|
//-------------------------------------
|
|
782
|
-
|
|
854
|
+
n(this, "data", {});
|
|
783
855
|
}
|
|
784
856
|
get(e) {
|
|
785
857
|
return this.data[e];
|
|
@@ -806,10 +878,10 @@ class UserPreferences {
|
|
|
806
878
|
class User {
|
|
807
879
|
constructor() {
|
|
808
880
|
//-------------------------------------
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
881
|
+
n(this, "_me", null);
|
|
882
|
+
n(this, "_keepOpenOnLogout", !1);
|
|
883
|
+
n(this, "_preferences", new UserPreferences());
|
|
884
|
+
n(this, "_bookmarkedApps", []);
|
|
813
885
|
}
|
|
814
886
|
get keepOpenOnLogout() {
|
|
815
887
|
return this._keepOpenOnLogout;
|
|
@@ -841,7 +913,7 @@ class User {
|
|
|
841
913
|
let s;
|
|
842
914
|
if (t && t.length && typeof t.concat == "function") {
|
|
843
915
|
this._bookmarkedApps = t, s = {
|
|
844
|
-
bookmarks: t.map((
|
|
916
|
+
bookmarks: t.map((u) => u.name),
|
|
845
917
|
applications: []
|
|
846
918
|
}, transport.http.putJson("/userbook/preference/apps", s);
|
|
847
919
|
return;
|
|
@@ -853,15 +925,15 @@ class User {
|
|
|
853
925
|
});
|
|
854
926
|
let r = !0;
|
|
855
927
|
const i = [];
|
|
856
|
-
s.bookmarks.forEach((
|
|
857
|
-
const c = this._me.apps.find((h) => h.name ===
|
|
928
|
+
s.bookmarks.forEach((u, a) => {
|
|
929
|
+
const c = this._me.apps.find((h) => h.name === u);
|
|
858
930
|
if (c) {
|
|
859
931
|
const h = Object.assign({}, c);
|
|
860
932
|
this._bookmarkedApps.push(h);
|
|
861
933
|
} else
|
|
862
|
-
i.push(
|
|
863
|
-
}), i.forEach((
|
|
864
|
-
const a = s.bookmarks.indexOf(
|
|
934
|
+
i.push(u), r = !1;
|
|
935
|
+
}), i.forEach((u) => {
|
|
936
|
+
const a = s.bookmarks.indexOf(u);
|
|
865
937
|
a !== -1 && s.bookmarks.splice(a, 1);
|
|
866
938
|
}), r || transport.http.putJson("/userbook/preference/apps", s);
|
|
867
939
|
});
|
|
@@ -883,9 +955,9 @@ const http$1 = transport == null ? void 0 : transport.http;
|
|
|
883
955
|
class AppConf {
|
|
884
956
|
constructor() {
|
|
885
957
|
//-------------------------------------
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
958
|
+
n(this, "_publicConf", {});
|
|
959
|
+
n(this, "_currentApp");
|
|
960
|
+
n(this, "_appConf", {});
|
|
889
961
|
}
|
|
890
962
|
/**
|
|
891
963
|
* Get the currently initialized App.
|
|
@@ -923,8 +995,8 @@ class AppConf {
|
|
|
923
995
|
class Analytics {
|
|
924
996
|
constructor() {
|
|
925
997
|
//-------------------------------------
|
|
926
|
-
|
|
927
|
-
|
|
998
|
+
n(this, "_status", "void");
|
|
999
|
+
n(this, "_params");
|
|
928
1000
|
}
|
|
929
1001
|
get status() {
|
|
930
1002
|
return this._status;
|
|
@@ -976,8 +1048,8 @@ class Analytics {
|
|
|
976
1048
|
configure.Platform.apps.currentApp
|
|
977
1049
|
);
|
|
978
1050
|
if (!i) return;
|
|
979
|
-
const
|
|
980
|
-
if (!
|
|
1051
|
+
const u = i.xiti;
|
|
1052
|
+
if (!u || !u.LIBELLE_SERVICE || !r.UAI) return;
|
|
981
1053
|
function a(h) {
|
|
982
1054
|
let l = "";
|
|
983
1055
|
for (let E = 0; E < h.length; E++)
|
|
@@ -992,10 +1064,10 @@ class Analytics {
|
|
|
992
1064
|
Guest: "AUTRE"
|
|
993
1065
|
};
|
|
994
1066
|
return {
|
|
995
|
-
LIBELLE_SERVICE:
|
|
1067
|
+
LIBELLE_SERVICE: u.LIBELLE_SERVICE,
|
|
996
1068
|
// Which property of LIBELLE_SERVICE to use depends on the frontend.
|
|
997
|
-
TYPE:
|
|
998
|
-
OUTIL:
|
|
1069
|
+
TYPE: u.OUTIL ? "TIERS" : "NATIF",
|
|
1070
|
+
OUTIL: u.OUTIL ? u.OUTIL : "",
|
|
999
1071
|
STRUCT_ID: r.collectiviteId,
|
|
1000
1072
|
STRUCT_UAI: r.UAI,
|
|
1001
1073
|
PROJET: r.projetId ? r.projetId : e.ID_PROJET,
|
|
@@ -1009,7 +1081,7 @@ class Analytics {
|
|
|
1009
1081
|
class ConfigurationFramework {
|
|
1010
1082
|
constructor() {
|
|
1011
1083
|
//-------------------------------------
|
|
1012
|
-
|
|
1084
|
+
n(this, "Platform", {
|
|
1013
1085
|
deploymentTag: "",
|
|
1014
1086
|
cdnDomain: "",
|
|
1015
1087
|
apps: new AppConf(),
|
|
@@ -1018,15 +1090,15 @@ class ConfigurationFramework {
|
|
|
1018
1090
|
idiom: new Idiom(),
|
|
1019
1091
|
listLanguages: () => transport.http.get("/languages")
|
|
1020
1092
|
});
|
|
1021
|
-
|
|
1093
|
+
n(this, "School", {
|
|
1022
1094
|
//apps; -> pinnedApps;
|
|
1023
1095
|
});
|
|
1024
|
-
|
|
1096
|
+
n(this, "User", new User());
|
|
1025
1097
|
}
|
|
1026
1098
|
async initialize(e, t) {
|
|
1027
1099
|
if (!e) {
|
|
1028
|
-
const r = (h) => (h < 10 ? "0" : "") + h.toFixed(0), i = /* @__PURE__ */ new Date(),
|
|
1029
|
-
e = `${
|
|
1100
|
+
const r = (h) => (h < 10 ? "0" : "") + h.toFixed(0), i = /* @__PURE__ */ new Date(), u = i.getFullYear(), a = i.getMonth() + 1, c = i.getDate();
|
|
1101
|
+
e = `${u}${r(a)}${r(c)}`;
|
|
1030
1102
|
}
|
|
1031
1103
|
const s = e;
|
|
1032
1104
|
this.Platform.deploymentTag = e, typeof t == "string" && t.length > 0 && (this.Platform.cdnDomain = t), transport.http.setCdn(this.Platform.cdnDomain), await Promise.all([
|
|
@@ -1068,8 +1140,8 @@ var _;
|
|
|
1068
1140
|
const me = (_ = session == null ? void 0 : session.session) == null ? void 0 : _.user;
|
|
1069
1141
|
class Notification {
|
|
1070
1142
|
constructor(e) {
|
|
1071
|
-
|
|
1072
|
-
|
|
1143
|
+
n(this, "_id");
|
|
1144
|
+
n(this, "model");
|
|
1073
1145
|
e.reported = e.reporters && e.reporters.length > 0, this._id = e._id, this.model = e;
|
|
1074
1146
|
}
|
|
1075
1147
|
isUnread() {
|
|
@@ -1089,14 +1161,14 @@ class Notification {
|
|
|
1089
1161
|
class TimelineApp {
|
|
1090
1162
|
constructor() {
|
|
1091
1163
|
//-------------------------------------
|
|
1092
|
-
|
|
1093
|
-
|
|
1164
|
+
n(this, "_notifications", []);
|
|
1165
|
+
n(this, "_notificationTypes", []);
|
|
1094
1166
|
// ex: ["BLOG"]
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1167
|
+
n(this, "_flashMessages", []);
|
|
1168
|
+
n(this, "_pageNumber", 0);
|
|
1169
|
+
n(this, "_lastPage", !1);
|
|
1170
|
+
n(this, "_loading", !1);
|
|
1171
|
+
n(this, "showMine", !1);
|
|
1100
1172
|
}
|
|
1101
1173
|
get notifications() {
|
|
1102
1174
|
return this._notifications;
|
|
@@ -1117,20 +1189,20 @@ class TimelineApp {
|
|
|
1117
1189
|
return this.preferences.type = this.preferences.type || [], this.preferences.type;
|
|
1118
1190
|
}
|
|
1119
1191
|
get preferences() {
|
|
1120
|
-
return configure.User.preferences.get(APP$
|
|
1192
|
+
return configure.User.preferences.get(APP$1.TIMELINE);
|
|
1121
1193
|
}
|
|
1122
1194
|
get flashMessages() {
|
|
1123
1195
|
return this._flashMessages;
|
|
1124
1196
|
}
|
|
1125
1197
|
savePreferences() {
|
|
1126
|
-
return configure.User.saveAppPrefs(APP$
|
|
1198
|
+
return configure.User.saveAppPrefs(APP$1.TIMELINE);
|
|
1127
1199
|
}
|
|
1128
1200
|
resetPagination() {
|
|
1129
1201
|
this._pageNumber = 0, this._lastPage = !1, this._loading = !1;
|
|
1130
1202
|
}
|
|
1131
1203
|
initialize() {
|
|
1132
1204
|
return Promise.all([
|
|
1133
|
-
configure.User.loadAppPrefs(APP$
|
|
1205
|
+
configure.User.loadAppPrefs(APP$1.TIMELINE),
|
|
1134
1206
|
transport.http.get("/timeline/types")
|
|
1135
1207
|
]).then((e) => {
|
|
1136
1208
|
this._notificationTypes = e[1];
|
|
@@ -1154,10 +1226,10 @@ class TimelineApp {
|
|
|
1154
1226
|
if (this._loading = !1, r.status === "ok")
|
|
1155
1227
|
if (r.number && r.results) {
|
|
1156
1228
|
const i = r.results.filter(
|
|
1157
|
-
(
|
|
1158
|
-
(a) => a._id ===
|
|
1229
|
+
(u) => this._notifications.findIndex(
|
|
1230
|
+
(a) => a._id === u._id
|
|
1159
1231
|
) === -1
|
|
1160
|
-
).map((
|
|
1232
|
+
).map((u) => new Notification(u));
|
|
1161
1233
|
this._notifications = this._notifications.concat(i), this._pageNumber++;
|
|
1162
1234
|
} else
|
|
1163
1235
|
this._lastPage = !0;
|
|
@@ -1194,10 +1266,12 @@ class NotifyFrameworkFactory {
|
|
|
1194
1266
|
}
|
|
1195
1267
|
const LAYER_NAME = {
|
|
1196
1268
|
WIDGETS: "widgets",
|
|
1269
|
+
EXPLORER: "explorer",
|
|
1197
1270
|
TRANSPORT: "transport",
|
|
1198
1271
|
WEB_DATA: "webDataPipeline"
|
|
1199
1272
|
}, EVENT_NAME = {
|
|
1200
1273
|
USERPREF_CHANGED: "userprefChanged",
|
|
1274
|
+
SEARCH_RESULTED: "searchResulted",
|
|
1201
1275
|
ERROR_OCCURED: "error",
|
|
1202
1276
|
DATA_TRACKED: "track"
|
|
1203
1277
|
};
|
|
@@ -1243,7 +1317,7 @@ const f = class f {
|
|
|
1243
1317
|
//
|
|
1244
1318
|
// PROTECTED HELPERS
|
|
1245
1319
|
//
|
|
1246
|
-
|
|
1320
|
+
n(this, "checkHttpResponse", (e) => {
|
|
1247
1321
|
if (this.http.latestResponse.status >= 300)
|
|
1248
1322
|
throw this.http.latestResponse.statusText;
|
|
1249
1323
|
return e;
|
|
@@ -1395,7 +1469,7 @@ const f = class f {
|
|
|
1395
1469
|
});
|
|
1396
1470
|
return t.map((r) => {
|
|
1397
1471
|
const i = s.resources.find(
|
|
1398
|
-
(
|
|
1472
|
+
(u) => u.assetId === r
|
|
1399
1473
|
);
|
|
1400
1474
|
if (i === void 0)
|
|
1401
1475
|
throw "explorer.assetid.notfound";
|
|
@@ -1461,10 +1535,10 @@ const f = class f {
|
|
|
1461
1535
|
//
|
|
1462
1536
|
// STATIC REGISTRY
|
|
1463
1537
|
//
|
|
1464
|
-
|
|
1465
|
-
|
|
1538
|
+
n(f, "registry", new ServiceRegistry()), // Expose some useful functions
|
|
1539
|
+
n(f, "register", f.registry.register.bind(f.registry)), n(f, "findService", f.registry.findService.bind(f.registry)), n(f, "findMainService", f.registry.findMainService.bind(f.registry)), n(f, "isRegistered", f.registry.isRegistered.bind(f.registry));
|
|
1466
1540
|
let ResourceService = f;
|
|
1467
|
-
const APP
|
|
1541
|
+
const APP = "scrapbook", RESOURCE = "scrapbook";
|
|
1468
1542
|
class ScrapbookResourceService extends ResourceService {
|
|
1469
1543
|
create(e) {
|
|
1470
1544
|
throw new Error("Method not implemented.");
|
|
@@ -1482,10 +1556,10 @@ class ScrapbookResourceService extends ResourceService {
|
|
|
1482
1556
|
return this.checkHttpResponse(s), { thumbnail: t, entId: e.entId };
|
|
1483
1557
|
}
|
|
1484
1558
|
getResourceType() {
|
|
1485
|
-
return RESOURCE
|
|
1559
|
+
return RESOURCE;
|
|
1486
1560
|
}
|
|
1487
1561
|
getApplication() {
|
|
1488
|
-
return APP
|
|
1562
|
+
return APP;
|
|
1489
1563
|
}
|
|
1490
1564
|
getFormUrl(e) {
|
|
1491
1565
|
return e ? `/scrapbook?folderid=${e}#/create-scrapbook/` : "/scrapbook#/create-scrapbook/";
|
|
@@ -1503,160 +1577,9 @@ class ScrapbookResourceService extends ResourceService {
|
|
|
1503
1577
|
return `/scrapbook/exportHtml/${e}`;
|
|
1504
1578
|
}
|
|
1505
1579
|
}
|
|
1506
|
-
ResourceService.register(
|
|
1507
|
-
{ application: RESOURCE$3, resourceType: RESOURCE$3 },
|
|
1508
|
-
(o) => new ScrapbookResourceService(o)
|
|
1509
|
-
);
|
|
1510
|
-
const APP$2 = "homeworks", RESOURCE$2 = "homeworks";
|
|
1511
|
-
class HomeworksResourceService extends ResourceService {
|
|
1512
|
-
async create(e) {
|
|
1513
|
-
const t = await this.getThumbnailPath(e.thumbnail), s = await this.http.post("/homeworks", {
|
|
1514
|
-
title: e.name,
|
|
1515
|
-
thumbnail: t,
|
|
1516
|
-
description: e.description,
|
|
1517
|
-
repeats: e.repeats
|
|
1518
|
-
});
|
|
1519
|
-
return this.checkHttpResponse(s), { thumbnail: t, entId: s._id };
|
|
1520
|
-
}
|
|
1521
|
-
async update(e) {
|
|
1522
|
-
const t = await this.getThumbnailPath(e.thumbnail), s = await this.http.put(
|
|
1523
|
-
`/homeworks/${e.entId}`,
|
|
1524
|
-
{
|
|
1525
|
-
title: e.name,
|
|
1526
|
-
thumbnail: t,
|
|
1527
|
-
repeats: e.repeats
|
|
1528
|
-
}
|
|
1529
|
-
);
|
|
1530
|
-
return this.checkHttpResponse(s), { thumbnail: t, entId: e.entId };
|
|
1531
|
-
}
|
|
1532
|
-
getResourceType() {
|
|
1533
|
-
return RESOURCE$2;
|
|
1534
|
-
}
|
|
1535
|
-
getApplication() {
|
|
1536
|
-
return APP$2;
|
|
1537
|
-
}
|
|
1538
|
-
getFormUrl(e) {
|
|
1539
|
-
return e ? `/homeworks?folderid=${e}#/create-homeworks/` : "/homeworks#/create-homeworks/";
|
|
1540
|
-
}
|
|
1541
|
-
getViewUrl(e) {
|
|
1542
|
-
return `/homeworks#/view-homeworks/${e}`;
|
|
1543
|
-
}
|
|
1544
|
-
getPrintUrl(e) {
|
|
1545
|
-
return `/homeworks/print#/print-homeworks/${e}`;
|
|
1546
|
-
}
|
|
1547
|
-
getEditUrl(e) {
|
|
1548
|
-
return `/homeworks#/edit-homeworks/${e}`;
|
|
1549
|
-
}
|
|
1550
|
-
getExportUrl() {
|
|
1551
|
-
throw new Error("Export not implemented.");
|
|
1552
|
-
}
|
|
1553
|
-
}
|
|
1554
|
-
ResourceService.register(
|
|
1555
|
-
{ application: RESOURCE$2, resourceType: RESOURCE$2 },
|
|
1556
|
-
(o) => new HomeworksResourceService(o)
|
|
1557
|
-
);
|
|
1558
|
-
const APP$1 = "timelinegenerator", RESOURCE$1 = "timelinegenerator";
|
|
1559
|
-
class TimelineGeneratorResourceService extends ResourceService {
|
|
1560
|
-
async create(e) {
|
|
1561
|
-
const t = e.thumbnail ? await this.getThumbnailPath(e.thumbnail) : "", s = await this.http.post(
|
|
1562
|
-
"/timelinegenerator/timelines",
|
|
1563
|
-
{
|
|
1564
|
-
headline: e.name,
|
|
1565
|
-
text: e.description,
|
|
1566
|
-
icon: t,
|
|
1567
|
-
type: "default",
|
|
1568
|
-
folder: e.folder
|
|
1569
|
-
}
|
|
1570
|
-
);
|
|
1571
|
-
return this.checkHttpResponse(s), s;
|
|
1572
|
-
}
|
|
1573
|
-
async update(e) {
|
|
1574
|
-
const t = await this.getThumbnailPath(e.thumbnail), s = await this.http.put(
|
|
1575
|
-
`/timelinegenerator/timeline/${e.entId}`,
|
|
1576
|
-
{
|
|
1577
|
-
headline: e.name,
|
|
1578
|
-
text: e.description,
|
|
1579
|
-
icon: t,
|
|
1580
|
-
trashed: !!e.trashed,
|
|
1581
|
-
_id: e.entId,
|
|
1582
|
-
type: "default"
|
|
1583
|
-
}
|
|
1584
|
-
);
|
|
1585
|
-
return this.checkHttpResponse(s), { thumbnail: t, entId: e.entId };
|
|
1586
|
-
}
|
|
1587
|
-
getResourceType() {
|
|
1588
|
-
return RESOURCE$1;
|
|
1589
|
-
}
|
|
1590
|
-
getApplication() {
|
|
1591
|
-
return APP$1;
|
|
1592
|
-
}
|
|
1593
|
-
getFormUrl() {
|
|
1594
|
-
throw new Error("Method not implemented.");
|
|
1595
|
-
}
|
|
1596
|
-
getViewUrl(e) {
|
|
1597
|
-
return `/timelinegenerator#/view/${e}`;
|
|
1598
|
-
}
|
|
1599
|
-
getPrintUrl(e) {
|
|
1600
|
-
return `/timelinegenerator/print#/print/${e}`;
|
|
1601
|
-
}
|
|
1602
|
-
getEditUrl() {
|
|
1603
|
-
throw new Error("Method not implemented.");
|
|
1604
|
-
}
|
|
1605
|
-
getExportUrl() {
|
|
1606
|
-
throw new Error("Method not implemented.");
|
|
1607
|
-
}
|
|
1608
|
-
}
|
|
1609
|
-
ResourceService.register(
|
|
1610
|
-
{ application: RESOURCE$1, resourceType: RESOURCE$1 },
|
|
1611
|
-
(o) => new TimelineGeneratorResourceService(o)
|
|
1612
|
-
);
|
|
1613
|
-
const APP = "collaborativeeditor", RESOURCE = "collaborativeeditor";
|
|
1614
|
-
class CollaborativeEditorResourceService extends ResourceService {
|
|
1615
|
-
async create(e) {
|
|
1616
|
-
const { name: t, description: s, thumbnail: r, folder: i } = e, n = r ? await this.getThumbnailPath(r) : "", a = await this.http.post("/collaborativeeditor", {
|
|
1617
|
-
name: t,
|
|
1618
|
-
description: s,
|
|
1619
|
-
thumbnail: n,
|
|
1620
|
-
folder: i
|
|
1621
|
-
});
|
|
1622
|
-
return this.checkHttpResponse(a), a;
|
|
1623
|
-
}
|
|
1624
|
-
async update(e) {
|
|
1625
|
-
const { name: t, description: s, thumbnail: r, entId: i } = e, n = await this.getThumbnailPath(r), a = await this.http.put(
|
|
1626
|
-
`/collaborativeeditor/${i}`,
|
|
1627
|
-
{
|
|
1628
|
-
name: t,
|
|
1629
|
-
description: s,
|
|
1630
|
-
thumbnail: n
|
|
1631
|
-
}
|
|
1632
|
-
);
|
|
1633
|
-
return this.checkHttpResponse(a), { thumbnail: n, entId: i };
|
|
1634
|
-
}
|
|
1635
|
-
getResourceType() {
|
|
1636
|
-
return RESOURCE;
|
|
1637
|
-
}
|
|
1638
|
-
getApplication() {
|
|
1639
|
-
return APP;
|
|
1640
|
-
}
|
|
1641
|
-
getFormUrl() {
|
|
1642
|
-
throw new Error("Method not implemented.");
|
|
1643
|
-
}
|
|
1644
|
-
getViewUrl(e) {
|
|
1645
|
-
return `/collaborativeeditor#/view/${e}`;
|
|
1646
|
-
}
|
|
1647
|
-
getPrintUrl() {
|
|
1648
|
-
throw new Error("Method not implemented.");
|
|
1649
|
-
}
|
|
1650
|
-
getEditUrl() {
|
|
1651
|
-
throw new Error("Method not implemented.");
|
|
1652
|
-
}
|
|
1653
|
-
getExportUrl() {
|
|
1654
|
-
throw new Error("Method not implemented.");
|
|
1655
|
-
}
|
|
1656
|
-
}
|
|
1657
1580
|
ResourceService.register(
|
|
1658
1581
|
{ application: RESOURCE, resourceType: RESOURCE },
|
|
1659
|
-
(o) => new
|
|
1582
|
+
(o) => new ScrapbookResourceService(o)
|
|
1660
1583
|
);
|
|
1661
1584
|
const globalCache = {}, mutexPromise = {};
|
|
1662
1585
|
class CacheService {
|
|
@@ -1725,14 +1648,14 @@ class ConfService {
|
|
|
1725
1648
|
]), [r, i] = await Promise.all([
|
|
1726
1649
|
this.getTheme({ conf: t, publicTheme: s === void 0 }),
|
|
1727
1650
|
this.getWebAppConf({ app: e, applications: s ?? [] })
|
|
1728
|
-
]),
|
|
1651
|
+
]), u = {
|
|
1729
1652
|
app: e,
|
|
1730
1653
|
applications: s ?? [],
|
|
1731
1654
|
conf: t,
|
|
1732
1655
|
currentApp: i,
|
|
1733
1656
|
theme: r
|
|
1734
1657
|
};
|
|
1735
|
-
return this.notify.onAppConfReady().resolve(
|
|
1658
|
+
return this.notify.onAppConfReady().resolve(u), u;
|
|
1736
1659
|
}
|
|
1737
1660
|
async getPublicConf(e) {
|
|
1738
1661
|
const { response: t, value: s } = await this.cache.httpGet(
|
|
@@ -1784,23 +1707,23 @@ class ConfService {
|
|
|
1784
1707
|
conf: t,
|
|
1785
1708
|
publicTheme: s
|
|
1786
1709
|
}) {
|
|
1787
|
-
const r = await this.http.get("/theme"), i = s ? null : r,
|
|
1710
|
+
const r = await this.http.get("/theme"), i = s ? null : r, u = t == null ? void 0 : t.overriding.find(
|
|
1788
1711
|
(p) => (
|
|
1789
1712
|
// Public access => simply use the 1st override
|
|
1790
1713
|
i === null || p.child === i.themeName
|
|
1791
1714
|
)
|
|
1792
|
-
), a = (i == null ? void 0 : i.skinName) ||
|
|
1715
|
+
), a = (i == null ? void 0 : i.skinName) || u.skins[0], c = (i == null ? void 0 : i.skin) || `/assets/themes/${u.child}/skins/${a}/`, h = u.skins, l = u.bootstrapVersion.split("-").slice(-1)[0], E = u.parent === "panda";
|
|
1793
1716
|
return {
|
|
1794
1717
|
basePath: `${this.cdnDomain}${c}../../`,
|
|
1795
1718
|
bootstrapVersion: l,
|
|
1796
1719
|
is1d: E,
|
|
1797
1720
|
logoutCallback: (i == null ? void 0 : i.logoutCallback) || "/",
|
|
1798
|
-
skin:
|
|
1721
|
+
skin: u.child,
|
|
1799
1722
|
skinName: a,
|
|
1800
1723
|
skins: h,
|
|
1801
|
-
themeName:
|
|
1724
|
+
themeName: u.child,
|
|
1802
1725
|
themeUrl: c,
|
|
1803
|
-
npmTheme:
|
|
1726
|
+
npmTheme: u.npmTheme ?? void 0
|
|
1804
1727
|
};
|
|
1805
1728
|
}
|
|
1806
1729
|
async getLogoutCallback(e) {
|
|
@@ -1845,13 +1768,13 @@ class DirectoryService {
|
|
|
1845
1768
|
return {
|
|
1846
1769
|
id: s,
|
|
1847
1770
|
displayName: r,
|
|
1848
|
-
groups: t.map(({ name:
|
|
1849
|
-
displayName:
|
|
1771
|
+
groups: t.map(({ name: u, id: a }) => ({
|
|
1772
|
+
displayName: u,
|
|
1850
1773
|
id: a
|
|
1851
1774
|
})),
|
|
1852
|
-
users: i.map(({ displayName:
|
|
1775
|
+
users: i.map(({ displayName: u, id: a, profile: c }) => ({
|
|
1853
1776
|
profile: c,
|
|
1854
|
-
displayName:
|
|
1777
|
+
displayName: u,
|
|
1855
1778
|
// these info are missing from api
|
|
1856
1779
|
firstName: "",
|
|
1857
1780
|
lastName: "",
|
|
@@ -1866,19 +1789,19 @@ class DirectoryService {
|
|
|
1866
1789
|
users: r
|
|
1867
1790
|
}) {
|
|
1868
1791
|
this.cache.clearCache("/directory/sharebookmark/all");
|
|
1869
|
-
const i = r.map((p) => typeof p == "string" ? p : p.id),
|
|
1792
|
+
const i = r.map((p) => typeof p == "string" ? p : p.id), u = s.map((p) => typeof p == "string" ? p : p.id), a = t.map(async (p) => {
|
|
1870
1793
|
if (typeof p == "string") {
|
|
1871
|
-
const { displayName: d, groups: g, id: A, users: m } = await this.getBookMarkById(p), b = m.map((F) => F.id),
|
|
1794
|
+
const { displayName: d, groups: g, id: A, users: m } = await this.getBookMarkById(p), b = m.map((F) => F.id), R = g.map((F) => F.id);
|
|
1872
1795
|
return {
|
|
1873
1796
|
displayName: d,
|
|
1874
1797
|
id: A,
|
|
1875
|
-
members: [...
|
|
1798
|
+
members: [...R, ...b]
|
|
1876
1799
|
};
|
|
1877
1800
|
} else
|
|
1878
1801
|
return Promise.resolve(p);
|
|
1879
1802
|
}), h = (await Promise.all(a)).map((p) => p.members).reduce((p, d) => [...p, ...d], []), l = {
|
|
1880
1803
|
name: e,
|
|
1881
|
-
members: [...i, ...
|
|
1804
|
+
members: [...i, ...u, ...h]
|
|
1882
1805
|
}, { id: E } = await this.http.postJson(
|
|
1883
1806
|
"/directory/sharebookmark",
|
|
1884
1807
|
l
|
|
@@ -1894,10 +1817,10 @@ const loadedScripts = {};
|
|
|
1894
1817
|
class HttpService {
|
|
1895
1818
|
constructor(e, t) {
|
|
1896
1819
|
// Axios automatically manages the XSRF-TOKEN cookie and the X-XSRF-TOKEN HTTP header.
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1820
|
+
n(this, "axios");
|
|
1821
|
+
n(this, "baseUrl");
|
|
1822
|
+
n(this, "headers", {});
|
|
1823
|
+
n(this, "_latestResponse");
|
|
1901
1824
|
this.context = e, this.axios = axios.create(t);
|
|
1902
1825
|
}
|
|
1903
1826
|
fixBaseUrl(e) {
|
|
@@ -1942,15 +1865,15 @@ class HttpService {
|
|
|
1942
1865
|
status: 500,
|
|
1943
1866
|
statusText: ERROR_CODE.UNKNOWN
|
|
1944
1867
|
};
|
|
1945
|
-
const { status: s, statusText: r, headers: i, data:
|
|
1868
|
+
const { status: s, statusText: r, headers: i, data: u } = this._latestResponse;
|
|
1946
1869
|
return t != null && t.disableNotifications || notify.events().publish(LAYER_NAME.TRANSPORT, {
|
|
1947
1870
|
name: EVENT_NAME.ERROR_OCCURED,
|
|
1948
1871
|
data: {
|
|
1949
1872
|
params: t,
|
|
1950
1873
|
response: { status: s, statusText: r, headers: i },
|
|
1951
|
-
payload:
|
|
1874
|
+
payload: u
|
|
1952
1875
|
}
|
|
1953
|
-
}),
|
|
1876
|
+
}), u;
|
|
1954
1877
|
}
|
|
1955
1878
|
mapAxiosResponse(e, t) {
|
|
1956
1879
|
return this._latestResponse = e, e.data;
|
|
@@ -2073,15 +1996,15 @@ class HttpService {
|
|
|
2073
1996
|
}
|
|
2074
1997
|
getScript(e, t, s) {
|
|
2075
1998
|
const r = s ?? "exports", i = this.toAxiosConfig(t);
|
|
2076
|
-
return i.headers && (i.headers.Accept = "application/javascript"), this.axios.get(this.toCdnUrl(e), i).then((
|
|
1999
|
+
return i.headers && (i.headers.Accept = "application/javascript"), this.axios.get(this.toCdnUrl(e), i).then((u) => this.mapAxiosResponse(u, t)).then((u) => {
|
|
2077
2000
|
try {
|
|
2078
|
-
const a = `"use strict";var ${r.split(".")[0]}={};${
|
|
2001
|
+
const a = `"use strict";var ${r.split(".")[0]}={};${u};return ${r};`;
|
|
2079
2002
|
return Function(a)();
|
|
2080
2003
|
} catch {
|
|
2081
|
-
return
|
|
2004
|
+
return u;
|
|
2082
2005
|
}
|
|
2083
|
-
}).catch((
|
|
2084
|
-
throw this.mapAxiosError(
|
|
2006
|
+
}).catch((u) => {
|
|
2007
|
+
throw this.mapAxiosError(u, t), u;
|
|
2085
2008
|
});
|
|
2086
2009
|
}
|
|
2087
2010
|
loadScript(e, t) {
|
|
@@ -2141,13 +2064,13 @@ class RightService {
|
|
|
2141
2064
|
* @returns true if has rights
|
|
2142
2065
|
*/
|
|
2143
2066
|
hasResourceRight({ id: e, groupIds: t }, s, r) {
|
|
2144
|
-
const i = r.map((
|
|
2145
|
-
for (const
|
|
2146
|
-
if (
|
|
2067
|
+
const i = r.map((u) => typeof u == "string" ? this.parseResourceRight(u) : u).filter((u) => u !== void 0);
|
|
2068
|
+
for (const u of i) {
|
|
2069
|
+
if (u.id === e && u.type === "creator")
|
|
2147
2070
|
return !0;
|
|
2148
|
-
if (
|
|
2071
|
+
if (u.id === e && u.type === "user" && u.right === s)
|
|
2149
2072
|
return !0;
|
|
2150
|
-
if (t.includes(
|
|
2073
|
+
if (t.includes(u.id) && u.type === "group" && u.right === s)
|
|
2151
2074
|
return !0;
|
|
2152
2075
|
}
|
|
2153
2076
|
return !1;
|
|
@@ -2284,7 +2207,7 @@ class SessionService {
|
|
|
2284
2207
|
s,
|
|
2285
2208
|
r,
|
|
2286
2209
|
i,
|
|
2287
|
-
|
|
2210
|
+
u
|
|
2288
2211
|
] = await Promise.all([
|
|
2289
2212
|
this.getCurrentLanguage(e),
|
|
2290
2213
|
this.latestQuotaAndUsage(e),
|
|
@@ -2298,7 +2221,7 @@ class SessionService {
|
|
|
2298
2221
|
currentLanguage: t,
|
|
2299
2222
|
userDescription: r,
|
|
2300
2223
|
userProfile: i,
|
|
2301
|
-
bookmarkedApps:
|
|
2224
|
+
bookmarkedApps: u
|
|
2302
2225
|
};
|
|
2303
2226
|
}
|
|
2304
2227
|
login(e, t, s, r) {
|
|
@@ -2392,9 +2315,9 @@ class SessionService {
|
|
|
2392
2315
|
applications: []
|
|
2393
2316
|
});
|
|
2394
2317
|
const i = [];
|
|
2395
|
-
return r.bookmarks.forEach((
|
|
2318
|
+
return r.bookmarks.forEach((u, a) => {
|
|
2396
2319
|
const c = ((e == null ? void 0 : e.apps) || []).find(
|
|
2397
|
-
(h) => h.name ===
|
|
2320
|
+
(h) => h.name === u
|
|
2398
2321
|
);
|
|
2399
2322
|
if (c) {
|
|
2400
2323
|
const h = Object.assign({}, c);
|
|
@@ -2404,8 +2327,8 @@ class SessionService {
|
|
|
2404
2327
|
}
|
|
2405
2328
|
async getUserProfile(e = {}) {
|
|
2406
2329
|
var c, h;
|
|
2407
|
-
const { options: t = {}, params: s = {} } = e, r = new URLSearchParams(s).toString(), i = `/userbook/api/person${r ? `?${r}` : ""}`, { response:
|
|
2408
|
-
return
|
|
2330
|
+
const { options: t = {}, params: s = {} } = e, r = new URLSearchParams(s).toString(), i = `/userbook/api/person${r ? `?${r}` : ""}`, { response: u, value: a } = await this.cache.httpGet(i, t);
|
|
2331
|
+
return u.status < 200 || u.status >= 300 || typeof a == "string" ? ["Guest"] : ((h = (c = a == null ? void 0 : a.result) == null ? void 0 : c[0]) == null ? void 0 : h.type) || ["Guest"];
|
|
2409
2332
|
}
|
|
2410
2333
|
async isAdml() {
|
|
2411
2334
|
const e = await this.getUser();
|
|
@@ -2669,8 +2592,8 @@ class IdiomService {
|
|
|
2669
2592
|
else {
|
|
2670
2593
|
const i = new Promisified();
|
|
2671
2594
|
promises[t] = i.promise;
|
|
2672
|
-
const
|
|
2673
|
-
e && (
|
|
2595
|
+
const u = {};
|
|
2596
|
+
e && (u["Accept-Language"] = e), this.http.get(t, { headers: u }).then((a) => {
|
|
2674
2597
|
Object.assign(bundle, a), typeof s == "function" && s(), i.resolve();
|
|
2675
2598
|
}).catch((a) => {
|
|
2676
2599
|
typeof s == "function" && s(), i.reject();
|
|
@@ -2734,7 +2657,7 @@ class ShareService {
|
|
|
2734
2657
|
async searchShareSubjects(e, t, s) {
|
|
2735
2658
|
const r = StringUtils.removeAccents(s).toLowerCase(), i = await this.cache.httpGetJson(
|
|
2736
2659
|
`/${e}/share/json/${t}?search=${s}`
|
|
2737
|
-
),
|
|
2660
|
+
), u = i.users.visibles.filter(({ username: l, firstName: E, lastName: p, login: d }) => {
|
|
2738
2661
|
const g = StringUtils.removeAccents(
|
|
2739
2662
|
p || ""
|
|
2740
2663
|
).toLowerCase(), A = StringUtils.removeAccents(
|
|
@@ -2767,7 +2690,7 @@ class ShareService {
|
|
|
2767
2690
|
displayName: l.displayName,
|
|
2768
2691
|
id: l.id,
|
|
2769
2692
|
type: "sharebookmark"
|
|
2770
|
-
})), ...
|
|
2693
|
+
})), ...u, ...a];
|
|
2771
2694
|
}
|
|
2772
2695
|
async getShareMapping(e) {
|
|
2773
2696
|
const t = await this.cache.httpGetJson(
|
|
@@ -2781,15 +2704,15 @@ class ShareService {
|
|
|
2781
2704
|
return t;
|
|
2782
2705
|
}
|
|
2783
2706
|
getActionsAvailableFor({ id: e, type: t }, s, r) {
|
|
2784
|
-
const
|
|
2707
|
+
const u = (t === "user" ? s.users.checked[e] : s.groups.checked[e]) || [], a = Object.keys(r), c = [];
|
|
2785
2708
|
for (const h of a)
|
|
2786
2709
|
r[h].filter(
|
|
2787
|
-
(p) =>
|
|
2710
|
+
(p) => u.includes(p)
|
|
2788
2711
|
).length > 0 && c.push(h);
|
|
2789
2712
|
return c;
|
|
2790
2713
|
}
|
|
2791
2714
|
async getRightsForResource(e, t) {
|
|
2792
|
-
const s = await this.directory.getBookMarks(), r = `/${e}/share/json/${t}?search=`, i = await this.cache.httpGetJson(r),
|
|
2715
|
+
const s = await this.directory.getBookMarks(), r = `/${e}/share/json/${t}?search=`, i = await this.cache.httpGetJson(r), u = await this.getShareMapping(e), a = await this.cache.httpGetJson(
|
|
2793
2716
|
"/infra/public/json/sharing-rights.json"
|
|
2794
2717
|
), c = Object.keys(i.users.checked).map((d) => i.users.visibles.find(
|
|
2795
2718
|
(A) => A.id === d
|
|
@@ -2797,7 +2720,7 @@ class ShareService {
|
|
|
2797
2720
|
const g = this.getActionsAvailableFor(
|
|
2798
2721
|
{ id: d.id, type: "user" },
|
|
2799
2722
|
i,
|
|
2800
|
-
|
|
2723
|
+
u
|
|
2801
2724
|
);
|
|
2802
2725
|
return {
|
|
2803
2726
|
id: d.id,
|
|
@@ -2821,7 +2744,7 @@ class ShareService {
|
|
|
2821
2744
|
const g = this.getActionsAvailableFor(
|
|
2822
2745
|
{ id: d.id, type: "group" },
|
|
2823
2746
|
i,
|
|
2824
|
-
|
|
2747
|
+
u
|
|
2825
2748
|
);
|
|
2826
2749
|
return {
|
|
2827
2750
|
id: d.id,
|
|
@@ -2845,11 +2768,11 @@ class ShareService {
|
|
|
2845
2768
|
id: g
|
|
2846
2769
|
})
|
|
2847
2770
|
), p = i.users.visibles.map(
|
|
2848
|
-
({ id: d, profile: g, username: A, firstName: m, lastName: b, login:
|
|
2771
|
+
({ id: d, profile: g, username: A, firstName: m, lastName: b, login: R }) => ({
|
|
2849
2772
|
displayName: A,
|
|
2850
2773
|
firstName: m,
|
|
2851
2774
|
lastName: b,
|
|
2852
|
-
login:
|
|
2775
|
+
login: R,
|
|
2853
2776
|
profile: g,
|
|
2854
2777
|
id: d
|
|
2855
2778
|
})
|
|
@@ -2871,25 +2794,25 @@ class ShareService {
|
|
|
2871
2794
|
const h = c.actions.map((E) => r[E.id]).reduce((E, p) => Array.isArray(p) ? [...E, ...p] : E, []), l = [...new Set(h)];
|
|
2872
2795
|
l.length > 0 && (c.type === "user" ? i.users[c.id] = l : c.type === "group" ? i.groups[c.id] = l : i.bookmarks[c.id] = l);
|
|
2873
2796
|
}
|
|
2874
|
-
const
|
|
2875
|
-
return this.cache.clearCache(`/${e}/share/json/${t}?search=`), await this.http.putJson(
|
|
2797
|
+
const u = `/${e}/share/resource/${t}`;
|
|
2798
|
+
return this.cache.clearCache(`/${e}/share/json/${t}?search=`), await this.http.putJson(u, i);
|
|
2876
2799
|
}
|
|
2877
2800
|
async getActionsForApp(e) {
|
|
2878
2801
|
const t = await this.cache.httpGetJson(
|
|
2879
2802
|
"/infra/public/json/sharing-rights.json"
|
|
2880
2803
|
), s = await this.getShareMapping(e);
|
|
2881
2804
|
return Object.keys(t).map((i) => {
|
|
2882
|
-
const
|
|
2805
|
+
const u = t[i];
|
|
2883
2806
|
return {
|
|
2884
2807
|
displayName: i,
|
|
2885
2808
|
id: i,
|
|
2886
|
-
priority:
|
|
2887
|
-
requires:
|
|
2809
|
+
priority: u.priority,
|
|
2810
|
+
requires: u.requires
|
|
2888
2811
|
};
|
|
2889
2812
|
}).filter((i) => {
|
|
2890
|
-
var
|
|
2891
|
-
return ((
|
|
2892
|
-
}).sort((i,
|
|
2813
|
+
var u;
|
|
2814
|
+
return ((u = s[i.id]) == null ? void 0 : u.length) > 0;
|
|
2815
|
+
}).sort((i, u) => i.priority - u.priority);
|
|
2893
2816
|
}
|
|
2894
2817
|
}
|
|
2895
2818
|
const defaultMappers = {
|
|
@@ -2926,11 +2849,11 @@ const defaultMappers = {
|
|
|
2926
2849
|
zip: function({ type: o }) {
|
|
2927
2850
|
return o.indexOf("zip") !== -1 || o.indexOf("rar") !== -1 || o.indexOf("tar") !== -1 || o.indexOf("7z") !== -1;
|
|
2928
2851
|
}
|
|
2929
|
-
},
|
|
2852
|
+
}, w = class w {
|
|
2930
2853
|
/* Similar role notion as in infra-front > workspace > Model.ts */
|
|
2931
2854
|
static getRole(e) {
|
|
2932
2855
|
var t, s;
|
|
2933
|
-
return
|
|
2856
|
+
return w.role(
|
|
2934
2857
|
(t = e.metadata) == null ? void 0 : t["content-type"],
|
|
2935
2858
|
!1,
|
|
2936
2859
|
(s = e.metadata) == null ? void 0 : s.extension
|
|
@@ -2942,18 +2865,18 @@ const defaultMappers = {
|
|
|
2942
2865
|
this.roleMappers || console.warn("[DocumentHelper.role] should not have empty roles", this);
|
|
2943
2866
|
const r = { type: e, previewRole: t, extension: s };
|
|
2944
2867
|
for (const i of this.roleMappers) {
|
|
2945
|
-
const
|
|
2946
|
-
if (
|
|
2947
|
-
return
|
|
2868
|
+
const u = i(r);
|
|
2869
|
+
if (u)
|
|
2870
|
+
return u;
|
|
2948
2871
|
}
|
|
2949
2872
|
return "unknown";
|
|
2950
2873
|
}
|
|
2951
2874
|
};
|
|
2952
2875
|
// FIXME add edumedia support
|
|
2953
|
-
|
|
2876
|
+
n(w, "roleMappers", [
|
|
2954
2877
|
(e) => Object.keys(defaultMappers).find((s) => defaultMappers[s](e))
|
|
2955
2878
|
]);
|
|
2956
|
-
let DocumentHelper =
|
|
2879
|
+
let DocumentHelper = w;
|
|
2957
2880
|
class WorkspaceService {
|
|
2958
2881
|
constructor(e) {
|
|
2959
2882
|
this.context = e;
|
|
@@ -2962,22 +2885,22 @@ class WorkspaceService {
|
|
|
2962
2885
|
return this.context.http();
|
|
2963
2886
|
}
|
|
2964
2887
|
extractMetadata(e) {
|
|
2965
|
-
const t = e.name || "", s = t.split("."), r = e.type || "application/octet-stream", i = s.length > 1 ? s[s.length - 1] : "",
|
|
2888
|
+
const t = e.name || "", s = t.split("."), r = e.type || "application/octet-stream", i = s.length > 1 ? s[s.length - 1] : "", u = {
|
|
2966
2889
|
"content-type": r,
|
|
2967
2890
|
filename: t,
|
|
2968
2891
|
size: e.size,
|
|
2969
2892
|
extension: i,
|
|
2970
2893
|
role: DocumentHelper.role(r, !1, i)
|
|
2971
|
-
}, a = t.replace("." +
|
|
2972
|
-
return { basename: a, fullname: c, metadata:
|
|
2894
|
+
}, a = t.replace("." + u.extension, ""), c = u.extension ? a + "." + u.extension : a;
|
|
2895
|
+
return { basename: a, fullname: c, metadata: u };
|
|
2973
2896
|
}
|
|
2974
2897
|
async saveFile(e, t) {
|
|
2975
2898
|
const { fullname: s, metadata: r } = this.extractMetadata(e), i = new FormData();
|
|
2976
2899
|
i.append("file", e, s);
|
|
2977
|
-
const
|
|
2978
|
-
((t == null ? void 0 : t.visibility) === "public" || (t == null ? void 0 : t.visibility) === "protected") &&
|
|
2900
|
+
const u = [];
|
|
2901
|
+
((t == null ? void 0 : t.visibility) === "public" || (t == null ? void 0 : t.visibility) === "protected") && u.push(`${t.visibility}=true`), t != null && t.application && u.push(`application=${t.application}`), r.role === "img" && u.push("quality=1"), t != null && t.parentId && u.push(`parentId=${t.parentId}`);
|
|
2979
2902
|
const a = await this.http.postFile(
|
|
2980
|
-
`/workspace/document?${
|
|
2903
|
+
`/workspace/document?${u.join("&")}`,
|
|
2981
2904
|
i
|
|
2982
2905
|
);
|
|
2983
2906
|
if (this.http.isResponseError())
|
|
@@ -2985,13 +2908,13 @@ class WorkspaceService {
|
|
|
2985
2908
|
return a;
|
|
2986
2909
|
}
|
|
2987
2910
|
async updateFile(e, t, s) {
|
|
2988
|
-
const { fullname: r, metadata: i } = this.extractMetadata(t),
|
|
2989
|
-
|
|
2911
|
+
const { fullname: r, metadata: i } = this.extractMetadata(t), u = new FormData();
|
|
2912
|
+
u.append("file", t, r);
|
|
2990
2913
|
const a = [];
|
|
2991
2914
|
i.role === "img" && a.push("quality=1"), s != null && s.alt && a.push(`alt=${s.alt}`), s != null && s.legend && a.push(`legend=${s.legend}`), s != null && s.name && a.push(`name=${s.name}`);
|
|
2992
2915
|
const c = await this.http.putFile(
|
|
2993
2916
|
`/workspace/document/${e}?${a.join("&")}`,
|
|
2994
|
-
|
|
2917
|
+
u
|
|
2995
2918
|
);
|
|
2996
2919
|
if (this.http.isResponseError())
|
|
2997
2920
|
throw this.http.latestResponse.statusText;
|
|
@@ -3036,17 +2959,17 @@ class WorkspaceService {
|
|
|
3036
2959
|
{
|
|
3037
2960
|
application: t,
|
|
3038
2961
|
visibility: s,
|
|
3039
|
-
ids: r.map((
|
|
2962
|
+
ids: r.map((u) => u._id)
|
|
3040
2963
|
}
|
|
3041
2964
|
);
|
|
3042
2965
|
if (this.http.isResponseError())
|
|
3043
2966
|
throw this.http.latestResponse.statusText;
|
|
3044
|
-
return r.forEach((
|
|
2967
|
+
return r.forEach((u, a) => {
|
|
3045
2968
|
const c = e.findIndex(
|
|
3046
|
-
(h) => h._id ===
|
|
2969
|
+
(h) => h._id === u._id
|
|
3047
2970
|
);
|
|
3048
2971
|
0 <= c && c < e.length && (e[c] = i[a]);
|
|
3049
|
-
}), e.filter((
|
|
2972
|
+
}), e.filter((u) => !!u);
|
|
3050
2973
|
}
|
|
3051
2974
|
return e;
|
|
3052
2975
|
}
|
|
@@ -3055,13 +2978,13 @@ class WorkspaceService {
|
|
|
3055
2978
|
* or `null` if none exists or can be created.
|
|
3056
2979
|
*/
|
|
3057
2980
|
getThumbnailUrl(e, t = 0, s = 0) {
|
|
3058
|
-
var i,
|
|
2981
|
+
var i, u;
|
|
3059
2982
|
const r = t > 0 || s > 0 ? `${t}x${s}` : "120x120";
|
|
3060
2983
|
if (typeof e == "string")
|
|
3061
2984
|
return e.includes("data:image") || e.includes("thumbnail") ? e : `${e}${e.includes("?") ? "&" : "?"}thumbnail=${r}`;
|
|
3062
2985
|
{
|
|
3063
2986
|
const a = `/workspace/${e.public ? "pub/" : ""}document/${e._id}?thumbnail=`, c = e.thumbnails;
|
|
3064
|
-
if ((
|
|
2987
|
+
if ((u = (i = e.metadata) == null ? void 0 : i["content-type"]) != null && u.includes("video")) {
|
|
3065
2988
|
const h = c && Object.keys(c).length > 0 ? Object.keys(c)[0] : null;
|
|
3066
2989
|
return h ? a + h : null;
|
|
3067
2990
|
} else
|
|
@@ -3157,8 +3080,8 @@ class AnalyticsService {
|
|
|
3157
3080
|
if (!r || !r.active) return;
|
|
3158
3081
|
const i = await configure.Platform.apps.getPublicConf(e);
|
|
3159
3082
|
if (!i) return;
|
|
3160
|
-
const
|
|
3161
|
-
if (!
|
|
3083
|
+
const u = i.xiti;
|
|
3084
|
+
if (!u || !u.LIBELLE_SERVICE || !r.UAI) return;
|
|
3162
3085
|
function a(h) {
|
|
3163
3086
|
let l = "";
|
|
3164
3087
|
for (let E = 0; E < h.length; E++)
|
|
@@ -3173,10 +3096,10 @@ class AnalyticsService {
|
|
|
3173
3096
|
Guest: "AUTRE"
|
|
3174
3097
|
};
|
|
3175
3098
|
return {
|
|
3176
|
-
LIBELLE_SERVICE:
|
|
3099
|
+
LIBELLE_SERVICE: u.LIBELLE_SERVICE,
|
|
3177
3100
|
// Which property of LIBELLE_SERVICE to use depends on the frontend.
|
|
3178
|
-
TYPE:
|
|
3179
|
-
OUTIL:
|
|
3101
|
+
TYPE: u.OUTIL ? "TIERS" : "NATIF",
|
|
3102
|
+
OUTIL: u.OUTIL ? u.OUTIL : "",
|
|
3180
3103
|
STRUCT_ID: r.collectiviteId,
|
|
3181
3104
|
STRUCT_UAI: r.UAI,
|
|
3182
3105
|
PROJET: r.projetId ? r.projetId : o.ID_PROJET,
|
|
@@ -3187,7 +3110,7 @@ class AnalyticsService {
|
|
|
3187
3110
|
};
|
|
3188
3111
|
}
|
|
3189
3112
|
}
|
|
3190
|
-
const
|
|
3113
|
+
const C = class C {
|
|
3191
3114
|
// in minutes. Applies to recorded videos.
|
|
3192
3115
|
constructor(e) {
|
|
3193
3116
|
this.context = e;
|
|
@@ -3205,11 +3128,11 @@ const w = class w {
|
|
|
3205
3128
|
async getVideoConf() {
|
|
3206
3129
|
var t;
|
|
3207
3130
|
const e = await this.conf.getPublicConf(
|
|
3208
|
-
APP$
|
|
3131
|
+
APP$1.VIDEO
|
|
3209
3132
|
);
|
|
3210
3133
|
return {
|
|
3211
|
-
maxWeight: (e == null ? void 0 : e["max-videosize-mbytes"]) ??
|
|
3212
|
-
maxDuration: (e == null ? void 0 : e["max-videoduration-minutes"]) ??
|
|
3134
|
+
maxWeight: (e == null ? void 0 : e["max-videosize-mbytes"]) ?? C.MAX_WEIGHT,
|
|
3135
|
+
maxDuration: (e == null ? void 0 : e["max-videoduration-minutes"]) ?? C.MAX_DURATION,
|
|
3213
3136
|
acceptVideoUploadExtensions: ((t = e == null ? void 0 : e["accept-videoupload-extensions"]) == null ? void 0 : t.map(
|
|
3214
3137
|
(s) => s.toUpperCase()
|
|
3215
3138
|
)) ?? []
|
|
@@ -3230,13 +3153,13 @@ const w = class w {
|
|
|
3230
3153
|
throw new Error("Invalid video file.");
|
|
3231
3154
|
if (!e.filename)
|
|
3232
3155
|
throw new Error("Invalid video filename");
|
|
3233
|
-
const i = `${e.browser.name} ${e.browser.version}`,
|
|
3234
|
-
|
|
3156
|
+
const i = `${e.browser.name} ${e.browser.version}`, u = new FormData();
|
|
3157
|
+
u.append("device", e.device || ""), u.append("browser", i), u.append("url", e.url), u.append("app", t), u.append("file", e.file, e.filename), u.append("weight", "" + e.file.size), u.append("captation", "" + s);
|
|
3235
3158
|
let a = `/video/encode?captation=${s}`;
|
|
3236
3159
|
r && (a += `&duration=${r}`);
|
|
3237
3160
|
const c = await this.http.post(
|
|
3238
3161
|
a,
|
|
3239
|
-
|
|
3162
|
+
u,
|
|
3240
3163
|
{ headers: { "Content-Type": "multipart/form-data" } }
|
|
3241
3164
|
);
|
|
3242
3165
|
if (c.state == "running") {
|
|
@@ -3266,9 +3189,9 @@ const w = class w {
|
|
|
3266
3189
|
throw new Error("Video cannot be uploaded.");
|
|
3267
3190
|
}
|
|
3268
3191
|
};
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
let VideoService =
|
|
3192
|
+
n(C, "MAX_WEIGHT", 50), // in Mbytes. Applies to uploaded videos.
|
|
3193
|
+
n(C, "MAX_DURATION", 3);
|
|
3194
|
+
let VideoService = C;
|
|
3272
3195
|
class EmbedderService {
|
|
3273
3196
|
constructor(e) {
|
|
3274
3197
|
this.context = e;
|
|
@@ -3304,9 +3227,9 @@ class EmbedderService {
|
|
|
3304
3227
|
urlIsFromPattern(e, t) {
|
|
3305
3228
|
const s = new RegExp("[^{}]+(?=(?:[^{}]*{[^}]*})*[^}]*$)", "g"), r = new RegExp("{[^}]*}", "g");
|
|
3306
3229
|
let i = !0;
|
|
3307
|
-
const
|
|
3230
|
+
const u = t.match(s) || [], a = [];
|
|
3308
3231
|
return (t.match(r) || []).forEach((h, l) => {
|
|
3309
|
-
h.includes("ignore") || a.push(
|
|
3232
|
+
h.includes("ignore") || a.push(u[l]);
|
|
3310
3233
|
}), a.forEach((h) => {
|
|
3311
3234
|
if (!e.includes(h)) {
|
|
3312
3235
|
i = !1;
|
|
@@ -3337,7 +3260,7 @@ class EmbedderService {
|
|
|
3337
3260
|
for (const s of e.url)
|
|
3338
3261
|
if (this.urlIsFromPattern(t, s)) {
|
|
3339
3262
|
const r = new RegExp("{[a-zA-Z0-9_.]+}", "g"), i = s.match(r) || [];
|
|
3340
|
-
let
|
|
3263
|
+
let u = e.embed;
|
|
3341
3264
|
for (const a of i) {
|
|
3342
3265
|
let c = s.split(a)[0];
|
|
3343
3266
|
const h = c.split("}");
|
|
@@ -3348,9 +3271,9 @@ class EmbedderService {
|
|
|
3348
3271
|
const E = s.split(a)[1].split("{")[0];
|
|
3349
3272
|
E && (l = l.split(E)[0]);
|
|
3350
3273
|
const p = new RegExp("\\" + a.replace(/}/, "\\}"), "g");
|
|
3351
|
-
|
|
3274
|
+
u = u.replace(p, l);
|
|
3352
3275
|
}
|
|
3353
|
-
return
|
|
3276
|
+
return u;
|
|
3354
3277
|
}
|
|
3355
3278
|
return "";
|
|
3356
3279
|
}
|
|
@@ -3363,7 +3286,7 @@ class AbstractBehaviourService {
|
|
|
3363
3286
|
//-----------------
|
|
3364
3287
|
//--- Utilities ---
|
|
3365
3288
|
//-----------------
|
|
3366
|
-
|
|
3289
|
+
n(this, "_cache");
|
|
3367
3290
|
this.context = e, this._cache = new CacheService(this.context);
|
|
3368
3291
|
}
|
|
3369
3292
|
getApplication() {
|
|
@@ -3397,8 +3320,8 @@ class AbstractBehaviourService {
|
|
|
3397
3320
|
class ActualitesBehaviour extends AbstractBehaviourService {
|
|
3398
3321
|
constructor() {
|
|
3399
3322
|
super(...arguments);
|
|
3400
|
-
|
|
3401
|
-
|
|
3323
|
+
n(this, "APP", "actualites");
|
|
3324
|
+
n(this, "RESOURCE", "actualites");
|
|
3402
3325
|
}
|
|
3403
3326
|
async loadResources() {
|
|
3404
3327
|
return (await this.httpGet(
|
|
@@ -3421,24 +3344,24 @@ class ActualitesBehaviour extends AbstractBehaviourService {
|
|
|
3421
3344
|
class BlogBehaviour extends AbstractBehaviourService {
|
|
3422
3345
|
constructor() {
|
|
3423
3346
|
super(...arguments);
|
|
3424
|
-
|
|
3425
|
-
|
|
3347
|
+
n(this, "APP", "blog");
|
|
3348
|
+
n(this, "RESOURCE", "blog");
|
|
3426
3349
|
}
|
|
3427
3350
|
loadResources() {
|
|
3428
3351
|
return new Promise(async (t, s) => {
|
|
3429
3352
|
try {
|
|
3430
3353
|
const r = await this.httpGet("/blog/linker"), i = [];
|
|
3431
|
-
r.forEach((
|
|
3432
|
-
|
|
3433
|
-
const a =
|
|
3434
|
-
owner:
|
|
3435
|
-
ownerName:
|
|
3436
|
-
title: c.title + " [" +
|
|
3437
|
-
_id: `${
|
|
3438
|
-
icon:
|
|
3439
|
-
path: `/blog/id/${
|
|
3440
|
-
shared: !!(
|
|
3441
|
-
modified:
|
|
3354
|
+
r.forEach((u) => {
|
|
3355
|
+
u.thumbnail ? u.thumbnail = u.thumbnail + "?thumbnail=48x48" : u.thumbnail = "/img/illustrations/blog.svg";
|
|
3356
|
+
const a = u.fetchPosts.map((c) => this.dataToResource({
|
|
3357
|
+
owner: u.author.userId,
|
|
3358
|
+
ownerName: u.author.username,
|
|
3359
|
+
title: c.title + " [" + u.title + "]",
|
|
3360
|
+
_id: `${u._id}#${c._id}`,
|
|
3361
|
+
icon: u.thumbnail,
|
|
3362
|
+
path: `/blog/id/${u._id}/post/${c._id}`,
|
|
3363
|
+
shared: !!(u.shared && u.shared.length >= 0),
|
|
3364
|
+
modified: u.modified
|
|
3442
3365
|
}));
|
|
3443
3366
|
i.push(...a);
|
|
3444
3367
|
}), t(i);
|
|
@@ -3451,8 +3374,8 @@ class BlogBehaviour extends AbstractBehaviourService {
|
|
|
3451
3374
|
class CollaborativewallBehaviour extends AbstractBehaviourService {
|
|
3452
3375
|
constructor() {
|
|
3453
3376
|
super(...arguments);
|
|
3454
|
-
|
|
3455
|
-
|
|
3377
|
+
n(this, "APP", "collaborativewall");
|
|
3378
|
+
n(this, "RESOURCE", "collaborativewall");
|
|
3456
3379
|
}
|
|
3457
3380
|
async loadResources() {
|
|
3458
3381
|
return (await this.httpGet(
|
|
@@ -3474,8 +3397,8 @@ class CollaborativewallBehaviour extends AbstractBehaviourService {
|
|
|
3474
3397
|
class CommunityBehaviour extends AbstractBehaviourService {
|
|
3475
3398
|
constructor() {
|
|
3476
3399
|
super(...arguments);
|
|
3477
|
-
|
|
3478
|
-
|
|
3400
|
+
n(this, "APP", "community");
|
|
3401
|
+
n(this, "RESOURCE", "community");
|
|
3479
3402
|
}
|
|
3480
3403
|
async loadResources() {
|
|
3481
3404
|
return (await this.httpGet(
|
|
@@ -3499,24 +3422,24 @@ class CommunityBehaviour extends AbstractBehaviourService {
|
|
|
3499
3422
|
class ExercizerBehaviour extends AbstractBehaviourService {
|
|
3500
3423
|
constructor() {
|
|
3501
3424
|
super(...arguments);
|
|
3502
|
-
|
|
3503
|
-
|
|
3425
|
+
n(this, "APP", "exercizer");
|
|
3426
|
+
n(this, "RESOURCE", "exercizer");
|
|
3504
3427
|
}
|
|
3505
3428
|
async loadResources() {
|
|
3506
3429
|
return (await this.httpGet(
|
|
3507
3430
|
"/exercizer/subjects-scheduled"
|
|
3508
3431
|
)).map((s) => {
|
|
3509
3432
|
const r = s.picture ? s.picture + "?thumbnail=48x48" : "/img/illustrations/exercizer.svg";
|
|
3510
|
-
let i,
|
|
3433
|
+
let i, u = !1;
|
|
3511
3434
|
const a = JSON.parse(s.scheduled_at);
|
|
3512
|
-
return a.groupList.length > 0 ? (
|
|
3435
|
+
return a.groupList.length > 0 ? (u = !0, i = a.groupList[0].name) : a.userList.length > 0 ? (u = !0, i = a.userList[0].name) : i = "", a.groupList.length + a.userList.length > 1 && (i += "..."), this.dataToResource({
|
|
3513
3436
|
title: s.title,
|
|
3514
3437
|
owner: s.owner,
|
|
3515
3438
|
ownerName: i,
|
|
3516
3439
|
icon: r,
|
|
3517
3440
|
path: "/exercizer#/linker/" + s.id,
|
|
3518
3441
|
_id: "" + s.id,
|
|
3519
|
-
shared:
|
|
3442
|
+
shared: u,
|
|
3520
3443
|
modified: s.modified
|
|
3521
3444
|
});
|
|
3522
3445
|
});
|
|
@@ -3525,8 +3448,8 @@ class ExercizerBehaviour extends AbstractBehaviourService {
|
|
|
3525
3448
|
class FormulaireBehaviour extends AbstractBehaviourService {
|
|
3526
3449
|
constructor() {
|
|
3527
3450
|
super(...arguments);
|
|
3528
|
-
|
|
3529
|
-
|
|
3451
|
+
n(this, "APP", "formulaire");
|
|
3452
|
+
n(this, "RESOURCE", "formulaire");
|
|
3530
3453
|
}
|
|
3531
3454
|
async loadResources() {
|
|
3532
3455
|
return (await this.httpGet(
|
|
@@ -3546,8 +3469,8 @@ class FormulaireBehaviour extends AbstractBehaviourService {
|
|
|
3546
3469
|
class ForumBehaviour extends AbstractBehaviourService {
|
|
3547
3470
|
constructor() {
|
|
3548
3471
|
super(...arguments);
|
|
3549
|
-
|
|
3550
|
-
|
|
3472
|
+
n(this, "APP", "forum");
|
|
3473
|
+
n(this, "RESOURCE", "forum");
|
|
3551
3474
|
}
|
|
3552
3475
|
async loadResources() {
|
|
3553
3476
|
return (await this.httpGet("/forum/categories")).map(
|
|
@@ -3567,8 +3490,8 @@ class ForumBehaviour extends AbstractBehaviourService {
|
|
|
3567
3490
|
class HomeworksBehaviour extends AbstractBehaviourService {
|
|
3568
3491
|
constructor() {
|
|
3569
3492
|
super(...arguments);
|
|
3570
|
-
|
|
3571
|
-
|
|
3493
|
+
n(this, "APP", "homeworks");
|
|
3494
|
+
n(this, "RESOURCE", "homeworks");
|
|
3572
3495
|
}
|
|
3573
3496
|
async loadResources() {
|
|
3574
3497
|
return (await this.httpGet("/homeworks/list")).filter((t) => t.owner && t.trashed === 0).map((t) => this.dataToResource({
|
|
@@ -3586,8 +3509,8 @@ class HomeworksBehaviour extends AbstractBehaviourService {
|
|
|
3586
3509
|
class MagnetoBehaviour extends AbstractBehaviourService {
|
|
3587
3510
|
constructor() {
|
|
3588
3511
|
super(...arguments);
|
|
3589
|
-
|
|
3590
|
-
|
|
3512
|
+
n(this, "APP", "magneto");
|
|
3513
|
+
n(this, "RESOURCE", "magneto");
|
|
3591
3514
|
}
|
|
3592
3515
|
async loadResources() {
|
|
3593
3516
|
const { all: t } = await this.httpGet(
|
|
@@ -3608,8 +3531,8 @@ class MagnetoBehaviour extends AbstractBehaviourService {
|
|
|
3608
3531
|
class MindmapBehaviour extends AbstractBehaviourService {
|
|
3609
3532
|
constructor() {
|
|
3610
3533
|
super(...arguments);
|
|
3611
|
-
|
|
3612
|
-
|
|
3534
|
+
n(this, "APP", "mindmap");
|
|
3535
|
+
n(this, "RESOURCE", "mindmap");
|
|
3613
3536
|
}
|
|
3614
3537
|
async loadResources() {
|
|
3615
3538
|
return (await this.httpGet("/mindmap/list/all")).map(
|
|
@@ -3629,13 +3552,13 @@ class MindmapBehaviour extends AbstractBehaviourService {
|
|
|
3629
3552
|
class PagesBehaviour extends AbstractBehaviourService {
|
|
3630
3553
|
constructor() {
|
|
3631
3554
|
super(...arguments);
|
|
3632
|
-
|
|
3633
|
-
|
|
3555
|
+
n(this, "APP", "pages");
|
|
3556
|
+
n(this, "RESOURCE", "pages");
|
|
3634
3557
|
}
|
|
3635
3558
|
async loadResources() {
|
|
3636
3559
|
const t = await this.httpGet("/pages/list/all"), s = [];
|
|
3637
3560
|
return t.forEach((r) => {
|
|
3638
|
-
var
|
|
3561
|
+
var u;
|
|
3639
3562
|
const i = r.thumbnail ? r.thumbnail + "?thumbnail=48x48" : "/img/illustrations/pages.svg";
|
|
3640
3563
|
s.push(
|
|
3641
3564
|
this.dataToResource({
|
|
@@ -3648,7 +3571,7 @@ class PagesBehaviour extends AbstractBehaviourService {
|
|
|
3648
3571
|
shared: typeof r.shared < "u",
|
|
3649
3572
|
modified: r.modified
|
|
3650
3573
|
})
|
|
3651
|
-
), (
|
|
3574
|
+
), (u = r.pages) == null || u.forEach((a) => {
|
|
3652
3575
|
s.push(
|
|
3653
3576
|
this.dataToResource({
|
|
3654
3577
|
title: a.title,
|
|
@@ -3668,8 +3591,8 @@ class PagesBehaviour extends AbstractBehaviourService {
|
|
|
3668
3591
|
class PollBehaviour extends AbstractBehaviourService {
|
|
3669
3592
|
constructor() {
|
|
3670
3593
|
super(...arguments);
|
|
3671
|
-
|
|
3672
|
-
|
|
3594
|
+
n(this, "APP", "poll");
|
|
3595
|
+
n(this, "RESOURCE", "poll");
|
|
3673
3596
|
}
|
|
3674
3597
|
async loadResources() {
|
|
3675
3598
|
return (await this.httpGet("/poll/list/all")).map((s) => {
|
|
@@ -3690,8 +3613,8 @@ class PollBehaviour extends AbstractBehaviourService {
|
|
|
3690
3613
|
class ScrapbookBehaviour extends AbstractBehaviourService {
|
|
3691
3614
|
constructor() {
|
|
3692
3615
|
super(...arguments);
|
|
3693
|
-
|
|
3694
|
-
|
|
3616
|
+
n(this, "APP", "scrapbook");
|
|
3617
|
+
n(this, "RESOURCE", "scrapbook");
|
|
3695
3618
|
}
|
|
3696
3619
|
async loadResources() {
|
|
3697
3620
|
return (await this.httpGet(
|
|
@@ -3714,25 +3637,25 @@ class ScrapbookBehaviour extends AbstractBehaviourService {
|
|
|
3714
3637
|
class TimelinegeneratorBehaviour extends AbstractBehaviourService {
|
|
3715
3638
|
constructor() {
|
|
3716
3639
|
super(...arguments);
|
|
3717
|
-
|
|
3718
|
-
|
|
3640
|
+
n(this, "APP", "timelinegenerator");
|
|
3641
|
+
n(this, "RESOURCE", "timelinegenerator");
|
|
3719
3642
|
}
|
|
3720
3643
|
loadResources() {
|
|
3721
3644
|
return new Promise(async (t, s) => {
|
|
3722
3645
|
try {
|
|
3723
3646
|
const i = (await this.httpGet(
|
|
3724
3647
|
"/timelinegenerator/timelines"
|
|
3725
|
-
)).map((
|
|
3726
|
-
const a =
|
|
3648
|
+
)).map((u) => {
|
|
3649
|
+
const a = u.icon || "/img/illustrations/timeline-default.png";
|
|
3727
3650
|
return this.dataToResource({
|
|
3728
|
-
title:
|
|
3729
|
-
ownerName:
|
|
3730
|
-
owner:
|
|
3651
|
+
title: u.headline,
|
|
3652
|
+
ownerName: u.owner.displayName,
|
|
3653
|
+
owner: u.owner.userId,
|
|
3731
3654
|
icon: a,
|
|
3732
|
-
path: "/timelinegenerator#/view/" +
|
|
3733
|
-
_id:
|
|
3734
|
-
shared: typeof
|
|
3735
|
-
modified:
|
|
3655
|
+
path: "/timelinegenerator#/view/" + u._id,
|
|
3656
|
+
_id: u._id,
|
|
3657
|
+
shared: typeof u.shared < "u",
|
|
3658
|
+
modified: u.modified
|
|
3736
3659
|
});
|
|
3737
3660
|
});
|
|
3738
3661
|
t(i);
|
|
@@ -3745,8 +3668,8 @@ class TimelinegeneratorBehaviour extends AbstractBehaviourService {
|
|
|
3745
3668
|
class WikiBehaviour extends AbstractBehaviourService {
|
|
3746
3669
|
constructor() {
|
|
3747
3670
|
super(...arguments);
|
|
3748
|
-
|
|
3749
|
-
|
|
3671
|
+
n(this, "APP", "wiki");
|
|
3672
|
+
n(this, "RESOURCE", "wiki");
|
|
3750
3673
|
}
|
|
3751
3674
|
async loadResources() {
|
|
3752
3675
|
return (await this.httpGet(
|
|
@@ -3769,15 +3692,15 @@ class WikiBehaviour extends AbstractBehaviourService {
|
|
|
3769
3692
|
class WorkspaceBehaviour extends AbstractBehaviourService {
|
|
3770
3693
|
constructor() {
|
|
3771
3694
|
super(...arguments);
|
|
3772
|
-
|
|
3773
|
-
|
|
3695
|
+
n(this, "APP", "workspace");
|
|
3696
|
+
n(this, "RESOURCE", "workspace");
|
|
3774
3697
|
}
|
|
3775
3698
|
loadResources({ search: t, asset_id: s }) {
|
|
3776
3699
|
return new Promise(async (r, i) => {
|
|
3777
3700
|
try {
|
|
3778
|
-
let
|
|
3779
|
-
s && s.length ?
|
|
3780
|
-
const c = (await this.httpGet(
|
|
3701
|
+
let u = "/workspace/documents?filter=all&hierarchical=true";
|
|
3702
|
+
s && s.length ? u += `&search=${t}` : t && t.length && (u += `&search=${t}`);
|
|
3703
|
+
const c = (await this.httpGet(u)).filter((h) => !h.deleted).map((h) => {
|
|
3781
3704
|
const l = h.metadata["content-type"] && h.metadata["content-type"].indexOf("image") !== -1 ? `/workspace/document/${h._id}?thumbnail=120x120` : "/img/icons/unknown-large.png";
|
|
3782
3705
|
return this.dataToResource({
|
|
3783
3706
|
title: h.name,
|
|
@@ -3791,8 +3714,8 @@ class WorkspaceBehaviour extends AbstractBehaviourService {
|
|
|
3791
3714
|
});
|
|
3792
3715
|
});
|
|
3793
3716
|
r(c);
|
|
3794
|
-
} catch (
|
|
3795
|
-
i(
|
|
3717
|
+
} catch (u) {
|
|
3718
|
+
i(u);
|
|
3796
3719
|
}
|
|
3797
3720
|
});
|
|
3798
3721
|
}
|
|
@@ -3808,7 +3731,7 @@ const y = class y {
|
|
|
3808
3731
|
e.session().getUser()
|
|
3809
3732
|
]);
|
|
3810
3733
|
i != null && i.apps && (r != null && r.length) && (this.resourceProducingApps = r.filter(
|
|
3811
|
-
(
|
|
3734
|
+
(u) => i.apps.some((a) => a.address.includes(u))
|
|
3812
3735
|
));
|
|
3813
3736
|
} catch (r) {
|
|
3814
3737
|
console.warn("Failed to load resource-producing apps:", r);
|
|
@@ -3885,13 +3808,13 @@ const y = class y {
|
|
|
3885
3808
|
//
|
|
3886
3809
|
// STATIC REGISTRY
|
|
3887
3810
|
//
|
|
3888
|
-
|
|
3889
|
-
|
|
3811
|
+
n(y, "registry", new ServiceRegistry()), // Expose some useful functions
|
|
3812
|
+
n(y, "findBehaviour", y.registry.findService.bind(y.registry)), n(y, "hasBehaviour", y.registry.isRegistered.bind(y.registry)), n(y, "resourceProducingApps", []);
|
|
3890
3813
|
let SnipletsService = y;
|
|
3891
3814
|
const SEND_ALL = "*";
|
|
3892
3815
|
class WebBroker {
|
|
3893
3816
|
constructor(e) {
|
|
3894
|
-
|
|
3817
|
+
n(this, "subscription");
|
|
3895
3818
|
this.odeServices = e;
|
|
3896
3819
|
}
|
|
3897
3820
|
get http() {
|
|
@@ -3923,10 +3846,10 @@ class WebBroker {
|
|
|
3923
3846
|
}
|
|
3924
3847
|
class DataService {
|
|
3925
3848
|
constructor(e) {
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3849
|
+
n(this, "_webBroker");
|
|
3850
|
+
n(this, "app");
|
|
3851
|
+
n(this, "user");
|
|
3852
|
+
n(this, "profile");
|
|
3930
3853
|
this.odeServices = e;
|
|
3931
3854
|
}
|
|
3932
3855
|
get conf() {
|
|
@@ -3960,12 +3883,12 @@ class DataService {
|
|
|
3960
3883
|
addUserInfos(e) {
|
|
3961
3884
|
return this.user && (e.userId = this.user.userId, e.structure = this.user.structureNames[0]), this.profile && (e.profil = this.profile[0]), e;
|
|
3962
3885
|
}
|
|
3963
|
-
trackVideoSave(e, t, s, r, i,
|
|
3886
|
+
trackVideoSave(e, t, s, r, i, u, a) {
|
|
3964
3887
|
const c = this.addUserInfos({
|
|
3965
3888
|
"event-type": "VIDEO_SAVE",
|
|
3966
3889
|
module: "video",
|
|
3967
3890
|
video_id: e,
|
|
3968
|
-
browser:
|
|
3891
|
+
browser: u,
|
|
3969
3892
|
duration: Math.round(t),
|
|
3970
3893
|
weight: s,
|
|
3971
3894
|
source: r ? "CAPTURED" : "UPLOADED",
|
|
@@ -3974,7 +3897,7 @@ class DataService {
|
|
|
3974
3897
|
this.app && (c["override-module"] = this.app), a && (c.device_type = a), this.trackWebEvent(c);
|
|
3975
3898
|
}
|
|
3976
3899
|
trackVideoRead(e, t, s, r, i) {
|
|
3977
|
-
const
|
|
3900
|
+
const u = this.addUserInfos({
|
|
3978
3901
|
"event-type": "VIDEO_READ",
|
|
3979
3902
|
module: "video",
|
|
3980
3903
|
video_id: e,
|
|
@@ -3982,7 +3905,7 @@ class DataService {
|
|
|
3982
3905
|
source: t ? "CAPTURED" : "UPLOADED",
|
|
3983
3906
|
url: s
|
|
3984
3907
|
});
|
|
3985
|
-
this.app && (
|
|
3908
|
+
this.app && (u["override-module"] = this.app), i && (u.device_type = i), this.trackWebEvent(u);
|
|
3986
3909
|
}
|
|
3987
3910
|
trackSpeechAndText(e) {
|
|
3988
3911
|
const t = this.addUserInfos({
|
|
@@ -4088,20 +4011,20 @@ class AudienceService {
|
|
|
4088
4011
|
}
|
|
4089
4012
|
class OdeServices {
|
|
4090
4013
|
constructor() {
|
|
4091
|
-
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4100
|
-
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4014
|
+
n(this, "_analytics");
|
|
4015
|
+
n(this, "_cache");
|
|
4016
|
+
n(this, "_conf");
|
|
4017
|
+
n(this, "_data");
|
|
4018
|
+
n(this, "_directory");
|
|
4019
|
+
n(this, "_http");
|
|
4020
|
+
n(this, "_idiom");
|
|
4021
|
+
n(this, "_notify");
|
|
4022
|
+
n(this, "_rights");
|
|
4023
|
+
n(this, "_session");
|
|
4024
|
+
n(this, "_share");
|
|
4025
|
+
n(this, "_video");
|
|
4026
|
+
n(this, "_workspace");
|
|
4027
|
+
n(this, "_embedder");
|
|
4105
4028
|
this._analytics = new AnalyticsService(this), this._cache = new CacheService(this), this._conf = new ConfService(this), this._data = new DataService(this), this._directory = new DirectoryService(this), this._http = new HttpService(this), this._idiom = new IdiomService(this), this._notify = NotifyFrameworkFactory.instance(), this._rights = new RightService(this), this._session = new SessionService(this), this._share = new ShareService(this), this._video = new VideoService(this), this._workspace = new WorkspaceService(this), this._embedder = new EmbedderService(this);
|
|
4106
4029
|
}
|
|
4107
4030
|
initialize() {
|
|
@@ -4303,10 +4226,10 @@ const isActionAvailable = (o, e) => {
|
|
|
4303
4226
|
class WidgetFramework {
|
|
4304
4227
|
constructor() {
|
|
4305
4228
|
//-------------------------------------
|
|
4306
|
-
|
|
4307
|
-
|
|
4229
|
+
n(this, "_initialized");
|
|
4230
|
+
n(this, "_widgets", []);
|
|
4308
4231
|
////////////////////////////////////// USER PREFERENCES
|
|
4309
|
-
|
|
4232
|
+
n(this, "_userPrefs", {});
|
|
4310
4233
|
}
|
|
4311
4234
|
initialize(e, t) {
|
|
4312
4235
|
return this._initialized || (this._initialized = new Promisified(), notify.onSessionReady().promise.then((s) => {
|
|
@@ -4317,8 +4240,8 @@ class WidgetFramework {
|
|
|
4317
4240
|
var i;
|
|
4318
4241
|
(i = this._initialized) == null || i.resolve();
|
|
4319
4242
|
}).catch((i) => {
|
|
4320
|
-
var
|
|
4321
|
-
(
|
|
4243
|
+
var u;
|
|
4244
|
+
(u = this._initialized) == null || u.reject();
|
|
4322
4245
|
})) : (r = this._initialized) == null || r.reject();
|
|
4323
4246
|
})), this._initialized.promise;
|
|
4324
4247
|
}
|
|
@@ -4359,9 +4282,9 @@ class WidgetFramework {
|
|
|
4359
4282
|
position: c.platformConf.position
|
|
4360
4283
|
}), c.platformConf.mandatory && (this._userPrefs[l].show = !0, this._userPrefs[l].index = defaultWidgetOrder[l] ?? 999), c.platformConf.i18n && s.push(c.platformConf.i18n), c.applyUserPref(this._userPrefs[l]), !0);
|
|
4361
4284
|
});
|
|
4362
|
-
const
|
|
4285
|
+
const u = new Idiom();
|
|
4363
4286
|
this._widgets = this._widgets.sort((c, h) => {
|
|
4364
|
-
const l =
|
|
4287
|
+
const l = u.translate(`timeline.settings.${c.platformConf.name}`).toLowerCase(), E = u.translate(`timeline.settings.${h.platformConf.name}`).toLowerCase();
|
|
4365
4288
|
return l < E ? -1 : l > E ? 1 : 0;
|
|
4366
4289
|
});
|
|
4367
4290
|
});
|
|
@@ -4370,8 +4293,8 @@ class WidgetFramework {
|
|
|
4370
4293
|
class Widget {
|
|
4371
4294
|
//-------------------------------------
|
|
4372
4295
|
constructor(e) {
|
|
4373
|
-
|
|
4374
|
-
|
|
4296
|
+
n(this, "_schoolConf", {});
|
|
4297
|
+
n(this, "_userPref");
|
|
4375
4298
|
this._platformConf = e, this._userPref = null;
|
|
4376
4299
|
}
|
|
4377
4300
|
get platformConf() {
|
|
@@ -4430,7 +4353,7 @@ class WidgetFrameworkFactory {
|
|
|
4430
4353
|
}
|
|
4431
4354
|
export {
|
|
4432
4355
|
ACTION,
|
|
4433
|
-
APP$
|
|
4356
|
+
APP$1 as APP,
|
|
4434
4357
|
BOOLEAN_FILTER,
|
|
4435
4358
|
ConfigurationFrameworkFactory,
|
|
4436
4359
|
DocumentHelper,
|