@edifice.io/client 2.1.1 → 2.1.2
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/index.cjs +1 -1
- package/dist/index.js +247 -171
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,18 +1,92 @@
|
|
|
1
1
|
var v = Object.defineProperty;
|
|
2
|
-
var T = (
|
|
3
|
-
var
|
|
2
|
+
var T = (u, e, t) => e in u ? v(u, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : u[e] = t;
|
|
3
|
+
var o = (u, e, t) => T(u, 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
17
|
}, APP$3 = {
|
|
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
|
+
HOMEWORKS: "homeworks",
|
|
34
|
+
VIDEO: "video",
|
|
35
|
+
MINDMAP: "mindmap",
|
|
36
|
+
SCRAPBOOK: "scrapbook",
|
|
37
|
+
COLLABORATIVEWALL: "collaborativewall",
|
|
38
|
+
WIKI: "wiki",
|
|
39
|
+
TIMELINEGENERATOR: "timelinegenerator"
|
|
40
|
+
// TODO compléter/trier les apps suivantes
|
|
41
|
+
/*
|
|
42
|
+
"competences"
|
|
43
|
+
"cahier-textes"
|
|
44
|
+
"poll"
|
|
45
|
+
"rack"
|
|
46
|
+
"rbs"
|
|
47
|
+
"searchengine"
|
|
48
|
+
"sharebigfiles"
|
|
49
|
+
"schoolbook"
|
|
50
|
+
"archive"
|
|
51
|
+
"admin"
|
|
52
|
+
"cahier-de-texte"
|
|
53
|
+
"wiki"
|
|
54
|
+
"cns"
|
|
55
|
+
"conversation"
|
|
56
|
+
"paths"
|
|
57
|
+
"parcours"
|
|
58
|
+
"notebook"
|
|
59
|
+
"account"
|
|
60
|
+
"support"
|
|
61
|
+
"workspace"
|
|
62
|
+
"admin-portal"
|
|
63
|
+
"stats"
|
|
64
|
+
"userbook" // FIXME userbook OR directory : the choice may impact some configurations, @see IXitiTrackingParams.NOM_PAGE for example
|
|
65
|
+
"directory" // FIXME Keep in mind that ode-ts-client MUST not access the locationPath of the window !
|
|
66
|
+
"mindmap"
|
|
67
|
+
"timelinegenerator"
|
|
68
|
+
"actualites"
|
|
69
|
+
"pad"
|
|
70
|
+
"collaborativeeditor"
|
|
71
|
+
"settings-class"
|
|
72
|
+
"library"
|
|
73
|
+
"visioconf"
|
|
74
|
+
"Web-conference"
|
|
75
|
+
"notes"
|
|
76
|
+
"attendance"
|
|
77
|
+
"calendar"
|
|
78
|
+
"canal-numerique"
|
|
79
|
+
"collaborative-wall"
|
|
80
|
+
"statistics"
|
|
81
|
+
"polls"
|
|
82
|
+
"community"
|
|
83
|
+
"forum"
|
|
84
|
+
"pages"
|
|
85
|
+
"website"
|
|
86
|
+
"parametrage"
|
|
87
|
+
"kne"
|
|
88
|
+
"sacoche"
|
|
89
|
+
*/
|
|
16
90
|
}, USER_PREFS = {
|
|
17
91
|
APPS: "apps",
|
|
18
92
|
WIDGETS: "widgets",
|
|
@@ -25,7 +99,7 @@ const ERROR_CODE = {
|
|
|
25
99
|
};
|
|
26
100
|
class Subscription {
|
|
27
101
|
constructor(e, t) {
|
|
28
|
-
|
|
102
|
+
o(this, "revoke");
|
|
29
103
|
this._channel = e, this.revoke = this.setReceiver(
|
|
30
104
|
(s) => t == null ? void 0 : t(s.data)
|
|
31
105
|
);
|
|
@@ -43,7 +117,7 @@ class Subject {
|
|
|
43
117
|
* => We maintain here channels for *sending* messages.
|
|
44
118
|
* *Receiving* channels will be instantiated while subscribing.
|
|
45
119
|
*/
|
|
46
|
-
|
|
120
|
+
o(this, "publishChannels", /* @__PURE__ */ new Map());
|
|
47
121
|
}
|
|
48
122
|
getChannelName(e) {
|
|
49
123
|
return "Subject:" + e;
|
|
@@ -78,9 +152,9 @@ const ASYNC_DATA_NAME = {
|
|
|
78
152
|
class Promisified {
|
|
79
153
|
constructor() {
|
|
80
154
|
//-------------------------------------
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
155
|
+
o(this, "_resolution");
|
|
156
|
+
o(this, "_rejection");
|
|
157
|
+
o(this, "_promise", new Promise((e, t) => {
|
|
84
158
|
this._resolution = e, this._rejection = t;
|
|
85
159
|
}));
|
|
86
160
|
}
|
|
@@ -97,8 +171,8 @@ class Promisified {
|
|
|
97
171
|
class NotifyFramework {
|
|
98
172
|
constructor() {
|
|
99
173
|
//-------------------------------------
|
|
100
|
-
|
|
101
|
-
|
|
174
|
+
o(this, "promises", {});
|
|
175
|
+
o(this, "subject", new Subject());
|
|
102
176
|
}
|
|
103
177
|
asyncData(e) {
|
|
104
178
|
return typeof this.promises[e] > "u" && (this.promises[e] = new Promisified()), this.promises[e];
|
|
@@ -129,8 +203,8 @@ const notify = new NotifyFramework(), loadedScripts$1 = {};
|
|
|
129
203
|
class Http {
|
|
130
204
|
constructor(e) {
|
|
131
205
|
// Axios automatically manages the XSRF-TOKEN cookie and the X-XSRF-TOKEN HTTP header.
|
|
132
|
-
|
|
133
|
-
|
|
206
|
+
o(this, "axios");
|
|
207
|
+
o(this, "_latestResponse");
|
|
134
208
|
this.axios = axios.create(e);
|
|
135
209
|
}
|
|
136
210
|
setCdn(e) {
|
|
@@ -227,7 +301,7 @@ class Http {
|
|
|
227
301
|
}
|
|
228
302
|
class TransportFramework {
|
|
229
303
|
constructor() {
|
|
230
|
-
|
|
304
|
+
o(this, "_http", new Http());
|
|
231
305
|
}
|
|
232
306
|
get http() {
|
|
233
307
|
return this._http;
|
|
@@ -246,11 +320,11 @@ class ConfigurationFrameworkFactory {
|
|
|
246
320
|
const http$2 = transport.http;
|
|
247
321
|
class Session {
|
|
248
322
|
constructor() {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
323
|
+
o(this, "_me", null);
|
|
324
|
+
o(this, "_currentLanguage", "");
|
|
325
|
+
o(this, "_notLoggedIn", !0);
|
|
326
|
+
o(this, "_description");
|
|
327
|
+
o(this, "_profile");
|
|
254
328
|
}
|
|
255
329
|
get currentLanguage() {
|
|
256
330
|
return this._currentLanguage;
|
|
@@ -368,7 +442,7 @@ class Session {
|
|
|
368
442
|
}
|
|
369
443
|
class SessionFramework {
|
|
370
444
|
constructor() {
|
|
371
|
-
|
|
445
|
+
o(this, "session", new Session());
|
|
372
446
|
}
|
|
373
447
|
initialize() {
|
|
374
448
|
return this.session.initialize();
|
|
@@ -392,22 +466,22 @@ class SessionFramework {
|
|
|
392
466
|
const session = new SessionFramework();
|
|
393
467
|
class Theme {
|
|
394
468
|
constructor() {
|
|
395
|
-
|
|
396
|
-
|
|
469
|
+
o(this, "_conf");
|
|
470
|
+
o(this, "_loaded");
|
|
397
471
|
// legacy (readonly)
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
472
|
+
o(this, "skinName", "");
|
|
473
|
+
o(this, "themeName", "");
|
|
474
|
+
o(this, "skin", "raw");
|
|
475
|
+
o(this, "themeUrl", "/assets/themes/raw/default/");
|
|
476
|
+
o(this, "templateOverrides", {});
|
|
477
|
+
o(this, "portalTemplate", "/assets/themes/raw/portal.html");
|
|
478
|
+
o(this, "basePath", "");
|
|
479
|
+
o(this, "logoutCallback", "/");
|
|
480
|
+
o(this, "skins", []);
|
|
481
|
+
o(this, "is1D", !1);
|
|
482
|
+
o(this, "is2D", !1);
|
|
483
|
+
o(this, "_onSkinReady", notify.onSkinReady());
|
|
484
|
+
o(this, "_onOverrideReady", notify.onOverridesReady());
|
|
411
485
|
}
|
|
412
486
|
initialize(e) {
|
|
413
487
|
return notify.onSessionReady().promise.then(() => this.load(e));
|
|
@@ -779,7 +853,7 @@ class Idiom {
|
|
|
779
853
|
class UserPreferences {
|
|
780
854
|
constructor() {
|
|
781
855
|
//-------------------------------------
|
|
782
|
-
|
|
856
|
+
o(this, "data", {});
|
|
783
857
|
}
|
|
784
858
|
get(e) {
|
|
785
859
|
return this.data[e];
|
|
@@ -806,10 +880,10 @@ class UserPreferences {
|
|
|
806
880
|
class User {
|
|
807
881
|
constructor() {
|
|
808
882
|
//-------------------------------------
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
883
|
+
o(this, "_me", null);
|
|
884
|
+
o(this, "_keepOpenOnLogout", !1);
|
|
885
|
+
o(this, "_preferences", new UserPreferences());
|
|
886
|
+
o(this, "_bookmarkedApps", []);
|
|
813
887
|
}
|
|
814
888
|
get keepOpenOnLogout() {
|
|
815
889
|
return this._keepOpenOnLogout;
|
|
@@ -883,9 +957,9 @@ const http$1 = transport == null ? void 0 : transport.http;
|
|
|
883
957
|
class AppConf {
|
|
884
958
|
constructor() {
|
|
885
959
|
//-------------------------------------
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
960
|
+
o(this, "_publicConf", {});
|
|
961
|
+
o(this, "_currentApp");
|
|
962
|
+
o(this, "_appConf", {});
|
|
889
963
|
}
|
|
890
964
|
/**
|
|
891
965
|
* Get the currently initialized App.
|
|
@@ -923,8 +997,8 @@ class AppConf {
|
|
|
923
997
|
class Analytics {
|
|
924
998
|
constructor() {
|
|
925
999
|
//-------------------------------------
|
|
926
|
-
|
|
927
|
-
|
|
1000
|
+
o(this, "_status", "void");
|
|
1001
|
+
o(this, "_params");
|
|
928
1002
|
}
|
|
929
1003
|
get status() {
|
|
930
1004
|
return this._status;
|
|
@@ -1009,7 +1083,7 @@ class Analytics {
|
|
|
1009
1083
|
class ConfigurationFramework {
|
|
1010
1084
|
constructor() {
|
|
1011
1085
|
//-------------------------------------
|
|
1012
|
-
|
|
1086
|
+
o(this, "Platform", {
|
|
1013
1087
|
deploymentTag: "",
|
|
1014
1088
|
cdnDomain: "",
|
|
1015
1089
|
apps: new AppConf(),
|
|
@@ -1018,10 +1092,10 @@ class ConfigurationFramework {
|
|
|
1018
1092
|
idiom: new Idiom(),
|
|
1019
1093
|
listLanguages: () => transport.http.get("/languages")
|
|
1020
1094
|
});
|
|
1021
|
-
|
|
1095
|
+
o(this, "School", {
|
|
1022
1096
|
//apps; -> pinnedApps;
|
|
1023
1097
|
});
|
|
1024
|
-
|
|
1098
|
+
o(this, "User", new User());
|
|
1025
1099
|
}
|
|
1026
1100
|
async initialize(e, t) {
|
|
1027
1101
|
if (!e) {
|
|
@@ -1068,8 +1142,8 @@ var _;
|
|
|
1068
1142
|
const me = (_ = session == null ? void 0 : session.session) == null ? void 0 : _.user;
|
|
1069
1143
|
class Notification {
|
|
1070
1144
|
constructor(e) {
|
|
1071
|
-
|
|
1072
|
-
|
|
1145
|
+
o(this, "_id");
|
|
1146
|
+
o(this, "model");
|
|
1073
1147
|
e.reported = e.reporters && e.reporters.length > 0, this._id = e._id, this.model = e;
|
|
1074
1148
|
}
|
|
1075
1149
|
isUnread() {
|
|
@@ -1089,14 +1163,14 @@ class Notification {
|
|
|
1089
1163
|
class TimelineApp {
|
|
1090
1164
|
constructor() {
|
|
1091
1165
|
//-------------------------------------
|
|
1092
|
-
|
|
1093
|
-
|
|
1166
|
+
o(this, "_notifications", []);
|
|
1167
|
+
o(this, "_notificationTypes", []);
|
|
1094
1168
|
// ex: ["BLOG"]
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1169
|
+
o(this, "_flashMessages", []);
|
|
1170
|
+
o(this, "_pageNumber", 0);
|
|
1171
|
+
o(this, "_lastPage", !1);
|
|
1172
|
+
o(this, "_loading", !1);
|
|
1173
|
+
o(this, "showMine", !1);
|
|
1100
1174
|
}
|
|
1101
1175
|
get notifications() {
|
|
1102
1176
|
return this._notifications;
|
|
@@ -1194,10 +1268,12 @@ class NotifyFrameworkFactory {
|
|
|
1194
1268
|
}
|
|
1195
1269
|
const LAYER_NAME = {
|
|
1196
1270
|
WIDGETS: "widgets",
|
|
1271
|
+
EXPLORER: "explorer",
|
|
1197
1272
|
TRANSPORT: "transport",
|
|
1198
1273
|
WEB_DATA: "webDataPipeline"
|
|
1199
1274
|
}, EVENT_NAME = {
|
|
1200
1275
|
USERPREF_CHANGED: "userprefChanged",
|
|
1276
|
+
SEARCH_RESULTED: "searchResulted",
|
|
1201
1277
|
ERROR_OCCURED: "error",
|
|
1202
1278
|
DATA_TRACKED: "track"
|
|
1203
1279
|
};
|
|
@@ -1243,7 +1319,7 @@ const f = class f {
|
|
|
1243
1319
|
//
|
|
1244
1320
|
// PROTECTED HELPERS
|
|
1245
1321
|
//
|
|
1246
|
-
|
|
1322
|
+
o(this, "checkHttpResponse", (e) => {
|
|
1247
1323
|
if (this.http.latestResponse.status >= 300)
|
|
1248
1324
|
throw this.http.latestResponse.statusText;
|
|
1249
1325
|
return e;
|
|
@@ -1461,8 +1537,8 @@ const f = class f {
|
|
|
1461
1537
|
//
|
|
1462
1538
|
// STATIC REGISTRY
|
|
1463
1539
|
//
|
|
1464
|
-
|
|
1465
|
-
|
|
1540
|
+
o(f, "registry", new ServiceRegistry()), // Expose some useful functions
|
|
1541
|
+
o(f, "register", f.registry.register.bind(f.registry)), o(f, "findService", f.registry.findService.bind(f.registry)), o(f, "findMainService", f.registry.findMainService.bind(f.registry)), o(f, "isRegistered", f.registry.isRegistered.bind(f.registry));
|
|
1466
1542
|
let ResourceService = f;
|
|
1467
1543
|
const APP$2 = "scrapbook", RESOURCE$2 = "scrapbook";
|
|
1468
1544
|
class ScrapbookResourceService extends ResourceService {
|
|
@@ -1505,7 +1581,7 @@ class ScrapbookResourceService extends ResourceService {
|
|
|
1505
1581
|
}
|
|
1506
1582
|
ResourceService.register(
|
|
1507
1583
|
{ application: RESOURCE$2, resourceType: RESOURCE$2 },
|
|
1508
|
-
(
|
|
1584
|
+
(u) => new ScrapbookResourceService(u)
|
|
1509
1585
|
);
|
|
1510
1586
|
const APP$1 = "homeworks", RESOURCE$1 = "homeworks";
|
|
1511
1587
|
class HomeworksResourceService extends ResourceService {
|
|
@@ -1553,7 +1629,7 @@ class HomeworksResourceService extends ResourceService {
|
|
|
1553
1629
|
}
|
|
1554
1630
|
ResourceService.register(
|
|
1555
1631
|
{ application: RESOURCE$1, resourceType: RESOURCE$1 },
|
|
1556
|
-
(
|
|
1632
|
+
(u) => new HomeworksResourceService(u)
|
|
1557
1633
|
);
|
|
1558
1634
|
const APP = "timelinegenerator", RESOURCE = "timelinegenerator";
|
|
1559
1635
|
class TimelineGeneratorResourceService extends ResourceService {
|
|
@@ -1608,7 +1684,7 @@ class TimelineGeneratorResourceService extends ResourceService {
|
|
|
1608
1684
|
}
|
|
1609
1685
|
ResourceService.register(
|
|
1610
1686
|
{ application: RESOURCE, resourceType: RESOURCE },
|
|
1611
|
-
(
|
|
1687
|
+
(u) => new TimelineGeneratorResourceService(u)
|
|
1612
1688
|
);
|
|
1613
1689
|
const globalCache = {}, mutexPromise = {};
|
|
1614
1690
|
class CacheService {
|
|
@@ -1820,11 +1896,11 @@ class DirectoryService {
|
|
|
1820
1896
|
this.cache.clearCache("/directory/sharebookmark/all");
|
|
1821
1897
|
const i = r.map((p) => typeof p == "string" ? p : p.id), n = s.map((p) => typeof p == "string" ? p : p.id), a = t.map(async (p) => {
|
|
1822
1898
|
if (typeof p == "string") {
|
|
1823
|
-
const { displayName: d, groups: g, id: A, users: m } = await this.getBookMarkById(p), b = m.map((F) => F.id),
|
|
1899
|
+
const { displayName: d, groups: g, id: A, users: m } = await this.getBookMarkById(p), b = m.map((F) => F.id), C = g.map((F) => F.id);
|
|
1824
1900
|
return {
|
|
1825
1901
|
displayName: d,
|
|
1826
1902
|
id: A,
|
|
1827
|
-
members: [...
|
|
1903
|
+
members: [...C, ...b]
|
|
1828
1904
|
};
|
|
1829
1905
|
} else
|
|
1830
1906
|
return Promise.resolve(p);
|
|
@@ -1846,10 +1922,10 @@ const loadedScripts = {};
|
|
|
1846
1922
|
class HttpService {
|
|
1847
1923
|
constructor(e, t) {
|
|
1848
1924
|
// Axios automatically manages the XSRF-TOKEN cookie and the X-XSRF-TOKEN HTTP header.
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1925
|
+
o(this, "axios");
|
|
1926
|
+
o(this, "baseUrl");
|
|
1927
|
+
o(this, "headers", {});
|
|
1928
|
+
o(this, "_latestResponse");
|
|
1853
1929
|
this.context = e, this.axios = axios.create(t);
|
|
1854
1930
|
}
|
|
1855
1931
|
fixBaseUrl(e) {
|
|
@@ -2797,11 +2873,11 @@ class ShareService {
|
|
|
2797
2873
|
id: g
|
|
2798
2874
|
})
|
|
2799
2875
|
), p = i.users.visibles.map(
|
|
2800
|
-
({ id: d, profile: g, username: A, firstName: m, lastName: b, login:
|
|
2876
|
+
({ id: d, profile: g, username: A, firstName: m, lastName: b, login: C }) => ({
|
|
2801
2877
|
displayName: A,
|
|
2802
2878
|
firstName: m,
|
|
2803
2879
|
lastName: b,
|
|
2804
|
-
login:
|
|
2880
|
+
login: C,
|
|
2805
2881
|
profile: g,
|
|
2806
2882
|
id: d
|
|
2807
2883
|
})
|
|
@@ -2845,44 +2921,44 @@ class ShareService {
|
|
|
2845
2921
|
}
|
|
2846
2922
|
}
|
|
2847
2923
|
const defaultMappers = {
|
|
2848
|
-
csv: function({ type:
|
|
2849
|
-
return MimeTypeUtils.INSTANCE.isCsvLike(
|
|
2924
|
+
csv: function({ type: u, extension: e }) {
|
|
2925
|
+
return MimeTypeUtils.INSTANCE.isCsvLike(u, e);
|
|
2850
2926
|
},
|
|
2851
|
-
doc: function({ type:
|
|
2852
|
-
return MimeTypeUtils.INSTANCE.isWordLike(
|
|
2927
|
+
doc: function({ type: u, extension: e }) {
|
|
2928
|
+
return MimeTypeUtils.INSTANCE.isWordLike(u, e) ? !0 : u.indexOf("document") !== -1 && u.indexOf("wordprocessing") !== -1;
|
|
2853
2929
|
},
|
|
2854
|
-
xls: function({ type:
|
|
2855
|
-
return MimeTypeUtils.INSTANCE.isExcelLike(
|
|
2930
|
+
xls: function({ type: u, extension: e }) {
|
|
2931
|
+
return MimeTypeUtils.INSTANCE.isExcelLike(u, e) ? !0 : u.indexOf("document") !== -1 && u.indexOf("spreadsheet") !== -1 || u.indexOf("ms-excel") !== -1;
|
|
2856
2932
|
},
|
|
2857
|
-
img: function({ type:
|
|
2858
|
-
return
|
|
2933
|
+
img: function({ type: u }) {
|
|
2934
|
+
return u.indexOf("image") !== -1;
|
|
2859
2935
|
},
|
|
2860
|
-
pdf: function({ type:
|
|
2861
|
-
return
|
|
2936
|
+
pdf: function({ type: u }) {
|
|
2937
|
+
return u.indexOf("pdf") !== -1 || u === "application/x-download";
|
|
2862
2938
|
},
|
|
2863
|
-
ppt: function({ type:
|
|
2864
|
-
return MimeTypeUtils.INSTANCE.isPowerpointLike(
|
|
2939
|
+
ppt: function({ type: u, extension: e }) {
|
|
2940
|
+
return MimeTypeUtils.INSTANCE.isPowerpointLike(u, e) ? !0 : u.indexOf("document") !== -1 && u.indexOf("presentation") !== -1 || u.indexOf("powerpoint") !== -1;
|
|
2865
2941
|
},
|
|
2866
|
-
txt: function({ type:
|
|
2867
|
-
return MimeTypeUtils.INSTANCE.isTxtLike(
|
|
2942
|
+
txt: function({ type: u, extension: e }) {
|
|
2943
|
+
return MimeTypeUtils.INSTANCE.isTxtLike(u, e);
|
|
2868
2944
|
},
|
|
2869
|
-
md: function({ type:
|
|
2870
|
-
return MimeTypeUtils.INSTANCE.isMdLike(
|
|
2945
|
+
md: function({ type: u, extension: e }) {
|
|
2946
|
+
return MimeTypeUtils.INSTANCE.isMdLike(u, e);
|
|
2871
2947
|
},
|
|
2872
|
-
video: function({ type:
|
|
2873
|
-
return
|
|
2948
|
+
video: function({ type: u }) {
|
|
2949
|
+
return u.indexOf("video") !== -1;
|
|
2874
2950
|
},
|
|
2875
|
-
audio: function({ type:
|
|
2876
|
-
return
|
|
2951
|
+
audio: function({ type: u }) {
|
|
2952
|
+
return u.indexOf("audio") !== -1;
|
|
2877
2953
|
},
|
|
2878
|
-
zip: function({ type:
|
|
2879
|
-
return
|
|
2954
|
+
zip: function({ type: u }) {
|
|
2955
|
+
return u.indexOf("zip") !== -1 || u.indexOf("rar") !== -1 || u.indexOf("tar") !== -1 || u.indexOf("7z") !== -1;
|
|
2880
2956
|
}
|
|
2881
|
-
},
|
|
2957
|
+
}, R = class R {
|
|
2882
2958
|
/* Similar role notion as in infra-front > workspace > Model.ts */
|
|
2883
2959
|
static getRole(e) {
|
|
2884
2960
|
var t, s;
|
|
2885
|
-
return
|
|
2961
|
+
return R.role(
|
|
2886
2962
|
(t = e.metadata) == null ? void 0 : t["content-type"],
|
|
2887
2963
|
!1,
|
|
2888
2964
|
(s = e.metadata) == null ? void 0 : s.extension
|
|
@@ -2902,10 +2978,10 @@ const defaultMappers = {
|
|
|
2902
2978
|
}
|
|
2903
2979
|
};
|
|
2904
2980
|
// FIXME add edumedia support
|
|
2905
|
-
|
|
2981
|
+
o(R, "roleMappers", [
|
|
2906
2982
|
(e) => Object.keys(defaultMappers).find((s) => defaultMappers[s](e))
|
|
2907
2983
|
]);
|
|
2908
|
-
let DocumentHelper =
|
|
2984
|
+
let DocumentHelper = R;
|
|
2909
2985
|
class WorkspaceService {
|
|
2910
2986
|
constructor(e) {
|
|
2911
2987
|
this.context = e;
|
|
@@ -3023,8 +3099,8 @@ class WorkspaceService {
|
|
|
3023
3099
|
}
|
|
3024
3100
|
let ATTag;
|
|
3025
3101
|
class AnalyticsService {
|
|
3026
|
-
constructor(
|
|
3027
|
-
this.context =
|
|
3102
|
+
constructor(u) {
|
|
3103
|
+
this.context = u;
|
|
3028
3104
|
}
|
|
3029
3105
|
get http() {
|
|
3030
3106
|
return this.context.http();
|
|
@@ -3037,7 +3113,7 @@ class AnalyticsService {
|
|
|
3037
3113
|
* @param locationPath
|
|
3038
3114
|
* @param app
|
|
3039
3115
|
*/
|
|
3040
|
-
async trackPageLoad(
|
|
3116
|
+
async trackPageLoad(u, e) {
|
|
3041
3117
|
const [t] = await Promise.all([
|
|
3042
3118
|
// get Xiti configuration
|
|
3043
3119
|
this.getXitiConfig(e.name.toLowerCase()),
|
|
@@ -3047,7 +3123,7 @@ class AnalyticsService {
|
|
|
3047
3123
|
if (!t || !ATInternet) return;
|
|
3048
3124
|
let s = t.LIBELLE_SERVICE.default || null;
|
|
3049
3125
|
for (const r in t.LIBELLE_SERVICE)
|
|
3050
|
-
if (r !== "default" &&
|
|
3126
|
+
if (r !== "default" && u.indexOf(r) >= 0) {
|
|
3051
3127
|
s = t.LIBELLE_SERVICE[r];
|
|
3052
3128
|
break;
|
|
3053
3129
|
}
|
|
@@ -3074,7 +3150,7 @@ class AnalyticsService {
|
|
|
3074
3150
|
level2: t.STRUCT_UAI
|
|
3075
3151
|
}), ATTag.dispatch();
|
|
3076
3152
|
}
|
|
3077
|
-
async getXitiConfig(
|
|
3153
|
+
async getXitiConfig(u) {
|
|
3078
3154
|
const [e, t] = await Promise.all([
|
|
3079
3155
|
this.http.get("/analyticsConf"),
|
|
3080
3156
|
//FIXME change servers config to only keep the "all-in-one" query to /analyticsConf.
|
|
@@ -3082,7 +3158,7 @@ class AnalyticsService {
|
|
|
3082
3158
|
]);
|
|
3083
3159
|
if (!(e != null && e.type))
|
|
3084
3160
|
throw ERROR_CODE.MALFORMED_DATA;
|
|
3085
|
-
return t != null && t.active && (e.xiti = await this.getXitiTrackingParams(t,
|
|
3161
|
+
return t != null && t.active && (e.xiti = await this.getXitiTrackingParams(t, u)), e.xiti;
|
|
3086
3162
|
}
|
|
3087
3163
|
async loadXitiScript() {
|
|
3088
3164
|
if (typeof ATInternet > "u") {
|
|
@@ -3094,13 +3170,13 @@ class AnalyticsService {
|
|
|
3094
3170
|
eval(response);
|
|
3095
3171
|
}
|
|
3096
3172
|
}
|
|
3097
|
-
async getXitiTrackingParams(
|
|
3098
|
-
if (!
|
|
3173
|
+
async getXitiTrackingParams(u, e) {
|
|
3174
|
+
if (!u.structureMap || !e) return;
|
|
3099
3175
|
const t = await this.session.getUser(), s = await this.session.getUserProfile();
|
|
3100
3176
|
let r;
|
|
3101
3177
|
if (!(t != null && t.structures)) return;
|
|
3102
3178
|
for (const h of t.structures) {
|
|
3103
|
-
const l =
|
|
3179
|
+
const l = u.structureMap[h];
|
|
3104
3180
|
if (l && l.collectiviteId && l.UAI) {
|
|
3105
3181
|
r = l;
|
|
3106
3182
|
break;
|
|
@@ -3131,9 +3207,9 @@ class AnalyticsService {
|
|
|
3131
3207
|
OUTIL: n.OUTIL ? n.OUTIL : "",
|
|
3132
3208
|
STRUCT_ID: r.collectiviteId,
|
|
3133
3209
|
STRUCT_UAI: r.UAI,
|
|
3134
|
-
PROJET: r.projetId ? r.projetId :
|
|
3135
|
-
EXPLOITANT:
|
|
3136
|
-
PLATFORME: r.plateformeId ? r.plateformeId :
|
|
3210
|
+
PROJET: r.projetId ? r.projetId : u.ID_PROJET,
|
|
3211
|
+
EXPLOITANT: u.ID_EXPLOITANT,
|
|
3212
|
+
PLATFORME: r.plateformeId ? r.plateformeId : u.ID_PLATEFORME,
|
|
3137
3213
|
ID_PERSO: a(t.userId),
|
|
3138
3214
|
PROFILE: s && s.length > 0 ? c[s[0]] ?? "" : ""
|
|
3139
3215
|
};
|
|
@@ -3218,8 +3294,8 @@ const w = class w {
|
|
|
3218
3294
|
throw new Error("Video cannot be uploaded.");
|
|
3219
3295
|
}
|
|
3220
3296
|
};
|
|
3221
|
-
|
|
3222
|
-
|
|
3297
|
+
o(w, "MAX_WEIGHT", 50), // in Mbytes. Applies to uploaded videos.
|
|
3298
|
+
o(w, "MAX_DURATION", 3);
|
|
3223
3299
|
let VideoService = w;
|
|
3224
3300
|
class EmbedderService {
|
|
3225
3301
|
constructor(e) {
|
|
@@ -3315,7 +3391,7 @@ class AbstractBehaviourService {
|
|
|
3315
3391
|
//-----------------
|
|
3316
3392
|
//--- Utilities ---
|
|
3317
3393
|
//-----------------
|
|
3318
|
-
|
|
3394
|
+
o(this, "_cache");
|
|
3319
3395
|
this.context = e, this._cache = new CacheService(this.context);
|
|
3320
3396
|
}
|
|
3321
3397
|
getApplication() {
|
|
@@ -3349,8 +3425,8 @@ class AbstractBehaviourService {
|
|
|
3349
3425
|
class ActualitesBehaviour extends AbstractBehaviourService {
|
|
3350
3426
|
constructor() {
|
|
3351
3427
|
super(...arguments);
|
|
3352
|
-
|
|
3353
|
-
|
|
3428
|
+
o(this, "APP", "actualites");
|
|
3429
|
+
o(this, "RESOURCE", "actualites");
|
|
3354
3430
|
}
|
|
3355
3431
|
async loadResources() {
|
|
3356
3432
|
return (await this.httpGet(
|
|
@@ -3373,8 +3449,8 @@ class ActualitesBehaviour extends AbstractBehaviourService {
|
|
|
3373
3449
|
class BlogBehaviour extends AbstractBehaviourService {
|
|
3374
3450
|
constructor() {
|
|
3375
3451
|
super(...arguments);
|
|
3376
|
-
|
|
3377
|
-
|
|
3452
|
+
o(this, "APP", "blog");
|
|
3453
|
+
o(this, "RESOURCE", "blog");
|
|
3378
3454
|
}
|
|
3379
3455
|
loadResources() {
|
|
3380
3456
|
return new Promise(async (t, s) => {
|
|
@@ -3403,8 +3479,8 @@ class BlogBehaviour extends AbstractBehaviourService {
|
|
|
3403
3479
|
class CollaborativewallBehaviour extends AbstractBehaviourService {
|
|
3404
3480
|
constructor() {
|
|
3405
3481
|
super(...arguments);
|
|
3406
|
-
|
|
3407
|
-
|
|
3482
|
+
o(this, "APP", "collaborativewall");
|
|
3483
|
+
o(this, "RESOURCE", "collaborativewall");
|
|
3408
3484
|
}
|
|
3409
3485
|
async loadResources() {
|
|
3410
3486
|
return (await this.httpGet(
|
|
@@ -3426,8 +3502,8 @@ class CollaborativewallBehaviour extends AbstractBehaviourService {
|
|
|
3426
3502
|
class CommunityBehaviour extends AbstractBehaviourService {
|
|
3427
3503
|
constructor() {
|
|
3428
3504
|
super(...arguments);
|
|
3429
|
-
|
|
3430
|
-
|
|
3505
|
+
o(this, "APP", "community");
|
|
3506
|
+
o(this, "RESOURCE", "community");
|
|
3431
3507
|
}
|
|
3432
3508
|
async loadResources() {
|
|
3433
3509
|
return (await this.httpGet(
|
|
@@ -3451,8 +3527,8 @@ class CommunityBehaviour extends AbstractBehaviourService {
|
|
|
3451
3527
|
class ExercizerBehaviour extends AbstractBehaviourService {
|
|
3452
3528
|
constructor() {
|
|
3453
3529
|
super(...arguments);
|
|
3454
|
-
|
|
3455
|
-
|
|
3530
|
+
o(this, "APP", "exercizer");
|
|
3531
|
+
o(this, "RESOURCE", "exercizer");
|
|
3456
3532
|
}
|
|
3457
3533
|
async loadResources() {
|
|
3458
3534
|
return (await this.httpGet(
|
|
@@ -3477,8 +3553,8 @@ class ExercizerBehaviour extends AbstractBehaviourService {
|
|
|
3477
3553
|
class FormulaireBehaviour extends AbstractBehaviourService {
|
|
3478
3554
|
constructor() {
|
|
3479
3555
|
super(...arguments);
|
|
3480
|
-
|
|
3481
|
-
|
|
3556
|
+
o(this, "APP", "formulaire");
|
|
3557
|
+
o(this, "RESOURCE", "formulaire");
|
|
3482
3558
|
}
|
|
3483
3559
|
async loadResources() {
|
|
3484
3560
|
return (await this.httpGet(
|
|
@@ -3498,8 +3574,8 @@ class FormulaireBehaviour extends AbstractBehaviourService {
|
|
|
3498
3574
|
class ForumBehaviour extends AbstractBehaviourService {
|
|
3499
3575
|
constructor() {
|
|
3500
3576
|
super(...arguments);
|
|
3501
|
-
|
|
3502
|
-
|
|
3577
|
+
o(this, "APP", "forum");
|
|
3578
|
+
o(this, "RESOURCE", "forum");
|
|
3503
3579
|
}
|
|
3504
3580
|
async loadResources() {
|
|
3505
3581
|
return (await this.httpGet("/forum/categories")).map(
|
|
@@ -3519,8 +3595,8 @@ class ForumBehaviour extends AbstractBehaviourService {
|
|
|
3519
3595
|
class HomeworksBehaviour extends AbstractBehaviourService {
|
|
3520
3596
|
constructor() {
|
|
3521
3597
|
super(...arguments);
|
|
3522
|
-
|
|
3523
|
-
|
|
3598
|
+
o(this, "APP", "homeworks");
|
|
3599
|
+
o(this, "RESOURCE", "homeworks");
|
|
3524
3600
|
}
|
|
3525
3601
|
async loadResources() {
|
|
3526
3602
|
return (await this.httpGet("/homeworks/list")).filter((t) => t.owner && t.trashed === 0).map((t) => this.dataToResource({
|
|
@@ -3538,8 +3614,8 @@ class HomeworksBehaviour extends AbstractBehaviourService {
|
|
|
3538
3614
|
class MagnetoBehaviour extends AbstractBehaviourService {
|
|
3539
3615
|
constructor() {
|
|
3540
3616
|
super(...arguments);
|
|
3541
|
-
|
|
3542
|
-
|
|
3617
|
+
o(this, "APP", "magneto");
|
|
3618
|
+
o(this, "RESOURCE", "magneto");
|
|
3543
3619
|
}
|
|
3544
3620
|
async loadResources() {
|
|
3545
3621
|
const { all: t } = await this.httpGet(
|
|
@@ -3560,8 +3636,8 @@ class MagnetoBehaviour extends AbstractBehaviourService {
|
|
|
3560
3636
|
class MindmapBehaviour extends AbstractBehaviourService {
|
|
3561
3637
|
constructor() {
|
|
3562
3638
|
super(...arguments);
|
|
3563
|
-
|
|
3564
|
-
|
|
3639
|
+
o(this, "APP", "mindmap");
|
|
3640
|
+
o(this, "RESOURCE", "mindmap");
|
|
3565
3641
|
}
|
|
3566
3642
|
async loadResources() {
|
|
3567
3643
|
return (await this.httpGet("/mindmap/list/all")).map(
|
|
@@ -3581,8 +3657,8 @@ class MindmapBehaviour extends AbstractBehaviourService {
|
|
|
3581
3657
|
class PagesBehaviour extends AbstractBehaviourService {
|
|
3582
3658
|
constructor() {
|
|
3583
3659
|
super(...arguments);
|
|
3584
|
-
|
|
3585
|
-
|
|
3660
|
+
o(this, "APP", "pages");
|
|
3661
|
+
o(this, "RESOURCE", "pages");
|
|
3586
3662
|
}
|
|
3587
3663
|
async loadResources() {
|
|
3588
3664
|
const t = await this.httpGet("/pages/list/all"), s = [];
|
|
@@ -3620,8 +3696,8 @@ class PagesBehaviour extends AbstractBehaviourService {
|
|
|
3620
3696
|
class PollBehaviour extends AbstractBehaviourService {
|
|
3621
3697
|
constructor() {
|
|
3622
3698
|
super(...arguments);
|
|
3623
|
-
|
|
3624
|
-
|
|
3699
|
+
o(this, "APP", "poll");
|
|
3700
|
+
o(this, "RESOURCE", "poll");
|
|
3625
3701
|
}
|
|
3626
3702
|
async loadResources() {
|
|
3627
3703
|
return (await this.httpGet("/poll/list/all")).map((s) => {
|
|
@@ -3642,8 +3718,8 @@ class PollBehaviour extends AbstractBehaviourService {
|
|
|
3642
3718
|
class ScrapbookBehaviour extends AbstractBehaviourService {
|
|
3643
3719
|
constructor() {
|
|
3644
3720
|
super(...arguments);
|
|
3645
|
-
|
|
3646
|
-
|
|
3721
|
+
o(this, "APP", "scrapbook");
|
|
3722
|
+
o(this, "RESOURCE", "scrapbook");
|
|
3647
3723
|
}
|
|
3648
3724
|
async loadResources() {
|
|
3649
3725
|
return (await this.httpGet(
|
|
@@ -3666,8 +3742,8 @@ class ScrapbookBehaviour extends AbstractBehaviourService {
|
|
|
3666
3742
|
class TimelinegeneratorBehaviour extends AbstractBehaviourService {
|
|
3667
3743
|
constructor() {
|
|
3668
3744
|
super(...arguments);
|
|
3669
|
-
|
|
3670
|
-
|
|
3745
|
+
o(this, "APP", "timelinegenerator");
|
|
3746
|
+
o(this, "RESOURCE", "timelinegenerator");
|
|
3671
3747
|
}
|
|
3672
3748
|
loadResources() {
|
|
3673
3749
|
return new Promise(async (t, s) => {
|
|
@@ -3697,8 +3773,8 @@ class TimelinegeneratorBehaviour extends AbstractBehaviourService {
|
|
|
3697
3773
|
class WikiBehaviour extends AbstractBehaviourService {
|
|
3698
3774
|
constructor() {
|
|
3699
3775
|
super(...arguments);
|
|
3700
|
-
|
|
3701
|
-
|
|
3776
|
+
o(this, "APP", "wiki");
|
|
3777
|
+
o(this, "RESOURCE", "wiki");
|
|
3702
3778
|
}
|
|
3703
3779
|
async loadResources() {
|
|
3704
3780
|
return (await this.httpGet(
|
|
@@ -3721,8 +3797,8 @@ class WikiBehaviour extends AbstractBehaviourService {
|
|
|
3721
3797
|
class WorkspaceBehaviour extends AbstractBehaviourService {
|
|
3722
3798
|
constructor() {
|
|
3723
3799
|
super(...arguments);
|
|
3724
|
-
|
|
3725
|
-
|
|
3800
|
+
o(this, "APP", "workspace");
|
|
3801
|
+
o(this, "RESOURCE", "workspace");
|
|
3726
3802
|
}
|
|
3727
3803
|
loadResources({ search: t, asset_id: s }) {
|
|
3728
3804
|
return new Promise(async (r, i) => {
|
|
@@ -3837,13 +3913,13 @@ const y = class y {
|
|
|
3837
3913
|
//
|
|
3838
3914
|
// STATIC REGISTRY
|
|
3839
3915
|
//
|
|
3840
|
-
|
|
3841
|
-
|
|
3916
|
+
o(y, "registry", new ServiceRegistry()), // Expose some useful functions
|
|
3917
|
+
o(y, "findBehaviour", y.registry.findService.bind(y.registry)), o(y, "hasBehaviour", y.registry.isRegistered.bind(y.registry)), o(y, "resourceProducingApps", []);
|
|
3842
3918
|
let SnipletsService = y;
|
|
3843
3919
|
const SEND_ALL = "*";
|
|
3844
3920
|
class WebBroker {
|
|
3845
3921
|
constructor(e) {
|
|
3846
|
-
|
|
3922
|
+
o(this, "subscription");
|
|
3847
3923
|
this.odeServices = e;
|
|
3848
3924
|
}
|
|
3849
3925
|
get http() {
|
|
@@ -3875,10 +3951,10 @@ class WebBroker {
|
|
|
3875
3951
|
}
|
|
3876
3952
|
class DataService {
|
|
3877
3953
|
constructor(e) {
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3881
|
-
|
|
3954
|
+
o(this, "_webBroker");
|
|
3955
|
+
o(this, "app");
|
|
3956
|
+
o(this, "user");
|
|
3957
|
+
o(this, "profile");
|
|
3882
3958
|
this.odeServices = e;
|
|
3883
3959
|
}
|
|
3884
3960
|
get conf() {
|
|
@@ -4040,20 +4116,20 @@ class AudienceService {
|
|
|
4040
4116
|
}
|
|
4041
4117
|
class OdeServices {
|
|
4042
4118
|
constructor() {
|
|
4043
|
-
|
|
4044
|
-
|
|
4045
|
-
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
|
|
4050
|
-
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
|
|
4119
|
+
o(this, "_analytics");
|
|
4120
|
+
o(this, "_cache");
|
|
4121
|
+
o(this, "_conf");
|
|
4122
|
+
o(this, "_data");
|
|
4123
|
+
o(this, "_directory");
|
|
4124
|
+
o(this, "_http");
|
|
4125
|
+
o(this, "_idiom");
|
|
4126
|
+
o(this, "_notify");
|
|
4127
|
+
o(this, "_rights");
|
|
4128
|
+
o(this, "_session");
|
|
4129
|
+
o(this, "_share");
|
|
4130
|
+
o(this, "_video");
|
|
4131
|
+
o(this, "_workspace");
|
|
4132
|
+
o(this, "_embedder");
|
|
4057
4133
|
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);
|
|
4058
4134
|
}
|
|
4059
4135
|
initialize() {
|
|
@@ -4186,9 +4262,9 @@ class TransportFrameworkFactory {
|
|
|
4186
4262
|
return transport;
|
|
4187
4263
|
}
|
|
4188
4264
|
}
|
|
4189
|
-
const isActionAvailable = (
|
|
4265
|
+
const isActionAvailable = (u, e) => {
|
|
4190
4266
|
const t = e == null ? void 0 : e.filter(
|
|
4191
|
-
(s) => s.id ===
|
|
4267
|
+
(s) => s.id === u && s.available
|
|
4192
4268
|
);
|
|
4193
4269
|
return t && t.length > 0;
|
|
4194
4270
|
}, firstLevelWidgets = [
|
|
@@ -4255,10 +4331,10 @@ const isActionAvailable = (o, e) => {
|
|
|
4255
4331
|
class WidgetFramework {
|
|
4256
4332
|
constructor() {
|
|
4257
4333
|
//-------------------------------------
|
|
4258
|
-
|
|
4259
|
-
|
|
4334
|
+
o(this, "_initialized");
|
|
4335
|
+
o(this, "_widgets", []);
|
|
4260
4336
|
////////////////////////////////////// USER PREFERENCES
|
|
4261
|
-
|
|
4337
|
+
o(this, "_userPrefs", {});
|
|
4262
4338
|
}
|
|
4263
4339
|
initialize(e, t) {
|
|
4264
4340
|
return this._initialized || (this._initialized = new Promisified(), notify.onSessionReady().promise.then((s) => {
|
|
@@ -4322,8 +4398,8 @@ class WidgetFramework {
|
|
|
4322
4398
|
class Widget {
|
|
4323
4399
|
//-------------------------------------
|
|
4324
4400
|
constructor(e) {
|
|
4325
|
-
|
|
4326
|
-
|
|
4401
|
+
o(this, "_schoolConf", {});
|
|
4402
|
+
o(this, "_userPref");
|
|
4327
4403
|
this._platformConf = e, this._userPref = null;
|
|
4328
4404
|
}
|
|
4329
4405
|
get platformConf() {
|