@capytale/activity.js 3.1.9 → 3.1.11
Sign up to get free protection for your applications and to get access to all the features.
- package/activity/activitySession/index.d.ts +3 -2
- package/activity/activitySession/index.js +13 -5
- package/activity/activitySession/index.js.map +1 -1
- package/activity/activityType/activityType.d.ts +7 -0
- package/activity/activityType/activityType.js.map +1 -1
- package/package.json +1 -1
- package/util/signal.d.ts +4 -0
- package/util/signal.js +26 -0
- package/util/signal.js.map +1 -0
@@ -23,8 +23,9 @@ export default class ActivitySession<AB extends ActivityBunch = ActivityBunch> {
|
|
23
23
|
get friendlyType(): string;
|
24
24
|
get activityType(): string;
|
25
25
|
get returnUrl(): string;
|
26
|
-
get formUrl(): string |
|
27
|
-
get
|
26
|
+
get formUrl(): string | null;
|
27
|
+
get code(): string | null;
|
28
|
+
get codeLink(): string | null;
|
28
29
|
get icon(): {
|
29
30
|
path: string;
|
30
31
|
style?: {
|
@@ -42,17 +42,25 @@ export default class ActivitySession {
|
|
42
42
|
}
|
43
43
|
get formUrl() {
|
44
44
|
if (this.mode !== 'create')
|
45
|
-
return
|
45
|
+
return null;
|
46
46
|
return this.resolver({ name: 'activityNav', page: 'edit', id: this.activityBunch.activityNode.nid });
|
47
47
|
}
|
48
|
-
get
|
48
|
+
get code() {
|
49
49
|
if (this.mode !== 'create')
|
50
|
-
return
|
50
|
+
return null;
|
51
51
|
const code = this.activityBunch.code.value;
|
52
52
|
if (code == null)
|
53
|
-
return
|
53
|
+
return null;
|
54
54
|
if (code === 'student_activity')
|
55
|
-
return
|
55
|
+
return null;
|
56
|
+
if (this.me?.profil !== 'teacher')
|
57
|
+
return null;
|
58
|
+
return code;
|
59
|
+
}
|
60
|
+
get codeLink() {
|
61
|
+
const code = this.code;
|
62
|
+
if (code == null)
|
63
|
+
return null;
|
56
64
|
return this.resolver({ name: 'sa.launch', code: code }, true);
|
57
65
|
}
|
58
66
|
get icon() { return this.type.icon; }
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/activity/activitySession/index.ts"],"names":[],"mappings":"AAcA,SAAS,aAAa,CAAC,IAAU;IAC7B,OAAO;QACH,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS;QAChC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS;QACtC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS;KACzC,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAC,EAAM;IACvB,OAAO;QACH,GAAG,EAAE,EAAE,CAAC,QAAQ;QAChB,MAAM,EAAE,EAAE,CAAC,SAAS;QACpB,MAAM,EAAE,EAAE,CAAC,MAAM;KACpB,CAAC;AACN,CAAC;AACD,MAAM,CAAC,OAAO,OAAO,eAAe;IACf,QAAQ,CAAgB;IAChC,aAAa,CAAK;IAClB,EAAE,CAAY;IACd,IAAI,CAAe;IACnB,IAAI,CAAe;IACnB,OAAO,CAAW;IAC3B,YAAY,QAAuB,EAAE,QAAuB,EAAE,IAAkB,EAAE,EAAa,EAAE,IAAkB,EAAE,OAAc;QAC/H,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,QAAc,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,IAAI,KAAK,YAAY,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,OAAQ,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAA,CAAC,CAAC;IAC5D,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAA,CAAC,CAAC;IAC7D,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAA,CAAC,CAAC;IAC7D,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC;IAC5C,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAA,CAAC,CAAC;IAC7D,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5H,CAAC;IACD,IAAI,OAAO;QACP,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/activity/activitySession/index.ts"],"names":[],"mappings":"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","sourcesContent":["import ActivityBunch from \"~/activityBunch/base\";\nimport type { Me } from \"~api/me/backend\";\nimport User from \"~entity/user\";\nimport type { ActivityType } from \"~/activityType/activityType\";\nimport type { RouteResolver } from \"~api/http/route\";\n\nexport type ActivityMode = \"assignment\" | \"create\" | \"review\" | \"view\" | \"detached\";\n\nexport type Student = {\n readonly nom?: string;\n readonly prenom?: string;\n readonly classe?: string;\n};\n\nfunction userAsStudent(user: User): Student {\n return {\n nom: user.nom.value || undefined,\n prenom: user.prenom.value || undefined,\n classe: user.classe.value || undefined,\n };\n}\n\nfunction meAsStudent(me: Me): Student {\n return {\n nom: me.lastname,\n prenom: me.firstname,\n classe: me.classe,\n };\n}\nexport default class ActivitySession<AB extends ActivityBunch = ActivityBunch> {\n private readonly resolver: RouteResolver;\n readonly activityBunch: AB;\n readonly me: Me | null;\n readonly type: ActivityType;\n readonly mode: ActivityMode;\n readonly student?: Student;\n constructor(resolver: RouteResolver, activity: ActivityBunch, type: ActivityType, me: Me | null, mode: ActivityMode, student?: User) {\n this.resolver = resolver;\n this.activityBunch = activity as AB;\n this.type = type;\n this.me = me;\n if (mode === 'assignment' && me != null) {\n this.student = meAsStudent(me);\n } else if (student != null) {\n this.student = userAsStudent(student!);\n }\n this.mode = mode;\n }\n get title() { return this.activityBunch.activityNode.title }\n get isAssignment() { return this.activityBunch.isAssignment }\n get instructions() { return this.activityBunch.instructions }\n get friendlyType() { return this.type.name }\n get activityType() { return this.activityBunch.activityType }\n get returnUrl(): string {\n return this.resolver({ name: 'activityNav', page: 'return', mode: this.mode, id: this.activityBunch.activityNode.nid });\n }\n get formUrl(): string | null {\n if (this.mode !== 'create') return null;\n return this.resolver({ name: 'activityNav', page: 'edit', id: this.activityBunch.activityNode.nid });\n }\n get code(): string | null {\n if (this.mode !== 'create') return null;\n const code = this.activityBunch.code.value;\n if (code == null) return null;\n if (code === 'student_activity') return null;\n if (this.me?.profil !== 'teacher') return null;\n return code;\n }\n get codeLink(): string | null {\n const code = this.code;\n if (code == null) return null;\n return this.resolver({ name: 'sa.launch', code: code }, true)\n }\n get icon() { return this.type.icon; }\n}\n"]}
|
@@ -15,11 +15,18 @@ export type ActivityType = {
|
|
15
15
|
description: string;
|
16
16
|
tags?: string;
|
17
17
|
bundle: string;
|
18
|
+
/** Si ce type d'activité est disponible pour l'utilisateur courant. */
|
18
19
|
available: boolean;
|
20
|
+
/** Indique que ce type d'activité est remplacé. */
|
19
21
|
replacedBy?: string | null;
|
22
|
+
/** Ce type d'activité devrait être filtré en même temps que celui indiqué. */
|
20
23
|
filterWith?: string | null;
|
24
|
+
/** Si ce type d'activité produit des évaluations détaillées. */
|
21
25
|
detailedEvaluation: boolean;
|
26
|
+
/** Si ce type d'activité est exportable. */
|
22
27
|
exportable: boolean;
|
28
|
+
/** Si ce type d'activité est compatible lti. */
|
29
|
+
lti: boolean;
|
23
30
|
};
|
24
31
|
export type ActivityGroup = {
|
25
32
|
title: string;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"activityType.js","sourceRoot":"","sources":["../../src/activity/activityType/activityType.ts"],"names":[],"mappings":"","sourcesContent":["export type ActivityType = {\n id: string;\n name: string;\n status?: { beta?: boolean };\n icon: {\n path: string;\n style?: { [s: string]: string };\n };\n helpUrl: string;\n summary: string;\n description: string;\n tags?: string;\n bundle: string;\n available: boolean;\n replacedBy?: string | null;\n filterWith?: string | null;\n detailedEvaluation: boolean;\n exportable: boolean;\n}\n\nexport type ActivityGroup = {\n title: string;\n tooltip?: string;\n activities: string[];\n};\n\nexport type ActivityGroups = {\n [key: string]: ActivityGroup;\n};\n\nexport type ActivityWeights = {\n all: { [key: string]: number };\n niveaux: {\n [key: string]: {\n title: string;\n activities: { [key: string]: number }\n }\n };\n groups: ActivityGroups;\n};\n"]}
|
1
|
+
{"version":3,"file":"activityType.js","sourceRoot":"","sources":["../../src/activity/activityType/activityType.ts"],"names":[],"mappings":"","sourcesContent":["export type ActivityType = {\n id: string;\n name: string;\n status?: { beta?: boolean };\n icon: {\n path: string;\n style?: { [s: string]: string };\n };\n helpUrl: string;\n summary: string;\n description: string;\n tags?: string;\n bundle: string;\n /** Si ce type d'activité est disponible pour l'utilisateur courant. */\n available: boolean;\n /** Indique que ce type d'activité est remplacé. */\n replacedBy?: string | null;\n /** Ce type d'activité devrait être filtré en même temps que celui indiqué. */\n filterWith?: string | null;\n /** Si ce type d'activité produit des évaluations détaillées. */\n detailedEvaluation: boolean;\n /** Si ce type d'activité est exportable. */\n exportable: boolean;\n /** Si ce type d'activité est compatible lti. */\n lti: boolean;\n}\n\nexport type ActivityGroup = {\n title: string;\n tooltip?: string;\n activities: string[];\n};\n\nexport type ActivityGroups = {\n [key: string]: ActivityGroup;\n};\n\nexport type ActivityWeights = {\n all: { [key: string]: number };\n niveaux: {\n [key: string]: {\n title: string;\n activities: { [key: string]: number }\n }\n };\n groups: ActivityGroups;\n};\n"]}
|
package/package.json
CHANGED
package/util/signal.d.ts
ADDED
package/util/signal.js
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
function safeInvoque(callback) {
|
2
|
+
try {
|
3
|
+
callback();
|
4
|
+
}
|
5
|
+
catch (error) {
|
6
|
+
console.error(error);
|
7
|
+
}
|
8
|
+
}
|
9
|
+
export default function createSignal() {
|
10
|
+
let watchers = [];
|
11
|
+
return [
|
12
|
+
() => {
|
13
|
+
for (const watcher of watchers)
|
14
|
+
safeInvoque(watcher);
|
15
|
+
},
|
16
|
+
(callback, imediate = false) => {
|
17
|
+
watchers.push(callback);
|
18
|
+
if (imediate)
|
19
|
+
safeInvoque(callback);
|
20
|
+
return () => {
|
21
|
+
watchers = watchers.filter((watcher) => watcher !== callback);
|
22
|
+
};
|
23
|
+
}
|
24
|
+
];
|
25
|
+
}
|
26
|
+
//# sourceMappingURL=signal.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../src/util/signal.ts"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,QAAoB;IACrC,IAAI,CAAC;QACD,QAAQ,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,YAAY;IAIhC,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAClC,OAAO;QACH,GAAG,EAAE;YACD,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,QAAQ;gBAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,OAAO,GAAG,EAAE;gBACR,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;YAClE,CAAC,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["function safeInvoque(callback: () => void) {\n try {\n callback();\n } catch (error) {\n console.error(error);\n }\n}\n\nexport default function createSignal(): [\n trigger: () => void,\n watch: (callback: () => void, imediate?: boolean) => () => void\n] {\n let watchers: (() => void)[] = [];\n return [\n () => {\n for (const watcher of watchers) safeInvoque(watcher);\n },\n (callback, imediate = false) => {\n watchers.push(callback);\n if (imediate) safeInvoque(callback);\n return () => {\n watchers = watchers.filter((watcher) => watcher !== callback);\n };\n }\n ];\n}"]}
|