@capytale/activity.js 3.1.22 → 3.1.24
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/activity/activityType/activityType.d.ts +2 -2
- package/activity/activityType/activityType.js.map +1 -1
- package/api/lti/index.d.ts +1 -0
- package/api/lti/index.js +8 -0
- package/api/lti/index.js.map +1 -1
- package/backend/capytale/lti.d.ts +1 -0
- package/backend/capytale/ui.d.ts +11 -1
- package/backend/capytale/ui.js +9 -3
- package/backend/capytale/ui.js.map +1 -1
- package/package.json +1 -1
- package/tracker/index.js +3 -0
- package/tracker/index.js.map +1 -1
|
@@ -25,8 +25,8 @@ export type ActivityType = {
|
|
|
25
25
|
detailedEvaluation: boolean;
|
|
26
26
|
/** Si ce type d'activité est exportable. */
|
|
27
27
|
exportable: boolean;
|
|
28
|
-
/** Si ce type d'activité est compatible lti. */
|
|
29
|
-
lti: boolean;
|
|
28
|
+
/** Si ce type d'activité est compatible lti. (`null` signifie ne sera jamais compatible) */
|
|
29
|
+
lti: boolean | null;
|
|
30
30
|
};
|
|
31
31
|
export type ActivityGroup = {
|
|
32
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 /** 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"]}
|
|
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. (`null` signifie ne sera jamais compatible) */\n lti: boolean | null;\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/api/lti/index.d.ts
CHANGED
package/api/lti/index.js
CHANGED
|
@@ -15,6 +15,14 @@ export default function createLtiSession() {
|
|
|
15
15
|
ltiProps = {};
|
|
16
16
|
isActive = true;
|
|
17
17
|
},
|
|
18
|
+
setToken(token) {
|
|
19
|
+
if (!isActive)
|
|
20
|
+
return;
|
|
21
|
+
if (ltiToken === token)
|
|
22
|
+
return;
|
|
23
|
+
ltiToken = token;
|
|
24
|
+
sessionStorage.setItem(`lti_session_${ltiSessionId}`, token);
|
|
25
|
+
},
|
|
18
26
|
getProperty(key) {
|
|
19
27
|
if (!isActive)
|
|
20
28
|
return;
|
package/api/lti/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/lti/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACpC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,YAAoB,CAAC;IACzB,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAgC,CAAC;IACrC,OAAO;QACH,SAAS,CAAC,MAAc;YACpB,IAAI,YAAY,KAAK,MAAM;gBAAE,OAAO;YACpC,YAAY,GAAG,MAAM,CAAC;YACtB,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,eAAe,MAAM,EAAE,CAAE,CAAC;YAC5D,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;YACrE,QAAQ,GAAG,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,QAAQ,GAAG,EAAE,CAAC;YAC3C,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,WAAW,CAAC,GAAW;YACnB,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,WAAW,CAAC,GAAW,EAAE,KAAU;YAC/B,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,cAAc,CAAC,OAAO,CAAC,aAAa,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,QAAQ;YACR,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,SAAS;YACL,OAAO,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,CAAC;QACD,gBAAgB,CAAC,GAAY;YACzB,IAAI,QAAQ,IAAI,IAAI;gBAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;YACpE,OAAO,GAAG,CAAC;QACf,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["export default function createLtiSession() {\n let isActive = false;\n let ltiSessionId: string;\n let ltiToken: string;\n let ltiProps: { [key: string]: any };\n return {\n setSessId(sessId: string) {\n if (ltiSessionId === sessId) return;\n ltiSessionId = sessId;\n ltiToken = sessionStorage.getItem(`lti_session_${sessId}`)!;\n const ltiPropsString = sessionStorage.getItem(`lti_props_${sessId}`);\n ltiProps = ltiPropsString == null ? {} : (JSON.parse(ltiPropsString));\n if (Array.isArray(ltiProps)) ltiProps = {};\n isActive = true;\n },\n getProperty(key: string): any {\n if (!isActive) return;\n return ltiProps[key];\n },\n setProperty(key: string, value: any): void {\n if (!isActive) return;\n ltiProps[key] = value;\n sessionStorage.setItem(`lti_props_${ltiSessionId}`, JSON.stringify(ltiProps));\n },\n get isActive() {\n return isActive;\n },\n getSessId(): string | null {\n return isActive ? ltiSessionId : null;\n },\n addLtiAuthHeader(hdr: Headers): Headers {\n if (ltiToken != null) hdr.set('X-CAPYTALE-AUTH', 'lti ' + ltiToken);\n return hdr;\n }\n };\n}"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/lti/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACpC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,YAAoB,CAAC;IACzB,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAgC,CAAC;IACrC,OAAO;QACH,SAAS,CAAC,MAAc;YACpB,IAAI,YAAY,KAAK,MAAM;gBAAE,OAAO;YACpC,YAAY,GAAG,MAAM,CAAC;YACtB,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,eAAe,MAAM,EAAE,CAAE,CAAC;YAC5D,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;YACrE,QAAQ,GAAG,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,QAAQ,GAAG,EAAE,CAAC;YAC3C,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,KAAa;YAClB,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,IAAI,QAAQ,KAAK,KAAK;gBAAE,OAAO;YAC/B,QAAQ,GAAG,KAAK,CAAC;YACjB,cAAc,CAAC,OAAO,CAAC,eAAe,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,WAAW,CAAC,GAAW;YACnB,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,WAAW,CAAC,GAAW,EAAE,KAAU;YAC/B,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,cAAc,CAAC,OAAO,CAAC,aAAa,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,QAAQ;YACR,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,SAAS;YACL,OAAO,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,CAAC;QACD,gBAAgB,CAAC,GAAY;YACzB,IAAI,QAAQ,IAAI,IAAI;gBAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;YACpE,OAAO,GAAG,CAAC;QACf,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["export default function createLtiSession() {\n let isActive = false;\n let ltiSessionId: string;\n let ltiToken: string;\n let ltiProps: { [key: string]: any };\n return {\n setSessId(sessId: string) {\n if (ltiSessionId === sessId) return;\n ltiSessionId = sessId;\n ltiToken = sessionStorage.getItem(`lti_session_${sessId}`)!;\n const ltiPropsString = sessionStorage.getItem(`lti_props_${sessId}`);\n ltiProps = ltiPropsString == null ? {} : (JSON.parse(ltiPropsString));\n if (Array.isArray(ltiProps)) ltiProps = {};\n isActive = true;\n },\n setToken(token: string) {\n if (!isActive) return;\n if (ltiToken === token) return;\n ltiToken = token;\n sessionStorage.setItem(`lti_session_${ltiSessionId}`, token);\n },\n getProperty(key: string): any {\n if (!isActive) return;\n return ltiProps[key];\n },\n setProperty(key: string, value: any): void {\n if (!isActive) return;\n ltiProps[key] = value;\n sessionStorage.setItem(`lti_props_${ltiSessionId}`, JSON.stringify(ltiProps));\n },\n get isActive() {\n return isActive;\n },\n getSessId(): string | null {\n return isActive ? ltiSessionId : null;\n },\n addLtiAuthHeader(hdr: Headers): Headers {\n if (ltiToken != null) hdr.set('X-CAPYTALE-AUTH', 'lti ' + ltiToken);\n return hdr;\n }\n };\n}"]}
|
package/backend/capytale/ui.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
type CapytaleUi = {
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated use isInCapytaleIframe instead
|
|
4
|
+
*/
|
|
5
|
+
isInCapytaletIframe: () => boolean;
|
|
2
6
|
/**
|
|
3
7
|
* Détermine si la page est affichée dans un iframe de Nuxt.
|
|
4
8
|
*
|
|
5
9
|
* @returns true si la page est affichée dans un iframe de Nuxt.
|
|
6
10
|
*/
|
|
7
|
-
|
|
11
|
+
isInCapytaleIframe: () => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Détermine si la page est affichée dans le mode LTI.
|
|
14
|
+
*
|
|
15
|
+
* @returns true si la page est affichée dans le mode LTI.
|
|
16
|
+
*/
|
|
17
|
+
isLti: () => boolean;
|
|
8
18
|
/**
|
|
9
19
|
* Envoie la commande de fermerture de la fenêtre Nuxt.
|
|
10
20
|
* Déclenche une erreur si la page n'est pas affichée dans un iframe de Nuxt.
|
package/backend/capytale/ui.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import ltiSession from './lti';
|
|
2
|
+
function isInCapytaleIframe() {
|
|
2
3
|
if (window.parent === window)
|
|
3
4
|
return false;
|
|
4
5
|
try {
|
|
@@ -8,13 +9,18 @@ function isInCapytaletIframe() {
|
|
|
8
9
|
return false;
|
|
9
10
|
}
|
|
10
11
|
}
|
|
12
|
+
function isLti() {
|
|
13
|
+
return ltiSession.isActive;
|
|
14
|
+
}
|
|
11
15
|
function closeCapytaleIframe() {
|
|
12
|
-
if (!
|
|
16
|
+
if (!isInCapytaleIframe())
|
|
13
17
|
throw new Error('Not in Nuxt modal');
|
|
14
18
|
window.parent.$drupalCloseModal();
|
|
15
19
|
}
|
|
16
20
|
export default {
|
|
17
|
-
isInCapytaletIframe,
|
|
21
|
+
isInCapytaletIframe: isInCapytaleIframe,
|
|
22
|
+
isInCapytaleIframe,
|
|
23
|
+
isLti,
|
|
18
24
|
closeCapytaleIframe,
|
|
19
25
|
};
|
|
20
26
|
//# sourceMappingURL=ui.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/backend/capytale/ui.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/backend/capytale/ui.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,OAAO,CAAC;AA6B/B,SAAS,kBAAkB;IACvB,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,CAAC;QACD,OAAO,CAAE,MAAM,CAAC,MAAc,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,SAAS,KAAK;IACV,OAAO,UAAU,CAAC,QAAQ,CAAC;AAC/B,CAAC;AAED,SAAS,mBAAmB;IACxB,IAAI,CAAC,kBAAkB,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,CAAC,MAAc,CAAC,iBAAiB,EAAE,CAAC;AAC/C,CAAC;AAED,eAAe;IACX,mBAAmB,EAAE,kBAAkB;IACvC,kBAAkB;IAClB,KAAK;IACL,mBAAmB;CACR,CAAC","sourcesContent":["import ltiSession from './lti';\n\ntype CapytaleUi = {\n /**\n * @deprecated use isInCapytaleIframe instead\n */\n isInCapytaletIframe: () => boolean;\n\n /**\n * Détermine si la page est affichée dans un iframe de Nuxt.\n * \n * @returns true si la page est affichée dans un iframe de Nuxt.\n */\n isInCapytaleIframe: () => boolean;\n\n /**\n * Détermine si la page est affichée dans le mode LTI.\n * \n * @returns true si la page est affichée dans le mode LTI.\n */\n isLti: () => boolean;\n\n /**\n * Envoie la commande de fermerture de la fenêtre Nuxt.\n * Déclenche une erreur si la page n'est pas affichée dans un iframe de Nuxt.\n */\n closeCapytaleIframe: () => void;\n}\n\nfunction isInCapytaleIframe(): boolean {\n if (window.parent === window) return false;\n try {\n return ((window.parent as any).$drupalCloseModal != null);\n } catch (e) {\n return false;\n }\n}\n\nfunction isLti(): boolean {\n return ltiSession.isActive;\n}\n\nfunction closeCapytaleIframe(): void {\n if (!isInCapytaleIframe()) throw new Error('Not in Nuxt modal');\n (window.parent as any).$drupalCloseModal();\n}\n\nexport default {\n isInCapytaletIframe: isInCapytaleIframe,\n isInCapytaleIframe,\n isLti,\n closeCapytaleIframe,\n} as CapytaleUi;\n"]}
|
package/package.json
CHANGED
package/tracker/index.js
CHANGED
|
@@ -133,6 +133,9 @@ export default function (trackerHost, siteId) {
|
|
|
133
133
|
this.push(['trackPageView']);
|
|
134
134
|
}
|
|
135
135
|
};
|
|
136
|
+
// SameSite=None pour les cookies
|
|
137
|
+
// Nécessaire pour le tracking dans une iframe
|
|
138
|
+
tracker.push(['setCookieSameSite', 'None']);
|
|
136
139
|
if (siteId == null) {
|
|
137
140
|
tracking = false;
|
|
138
141
|
tempPaq = undefined;
|
package/tracker/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/tracker/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAW9C,MAAM,MAAM,GAAG,WAAW,CAAC;AAC3B,MAAM,OAAO,GAAG,YAAY,CAAC;AAE7B,MAAM,WAAW,GAAY;IACzB,IAAI,KAAK,CAAC;IACV,SAAS,KAAK,CAAC;IACf,aAAa,KAAK,CAAC;IACnB,aAAa,KAAK,CAAC;CACtB,CAAA;AAED;;;GAGG;AACH,IAAI,UAAU,GAAY,KAAK,CAAC;AAEhC;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,SAAiB,EAAE,MAAc;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO;IACtD,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;IACxC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAC7D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACtC,uBAAuB;QACvB,UAAU,CAAC,GAAG,EAAE;YACZ,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC;iBAC7B,KAAK,CAAC,GAAG,EAAE;gBACR,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,UAAU,CAAC,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAA;AACN,CAAC;AAED,IAAI,YAAY,GAAY,KAAK,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,OAAO,WAAW,WAAmB,EAAE,MAA8C;IACxF,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,YAAY,GAAG,IAAI,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,GAAG,CAAC;IAE3C;;;OAGG;IACH,IAAI,OAAO,GAAsB,EAAE,CAAC;IAEpC;;;;OAIG;IACH,IAAI,QAAQ,GAAY,IAAI,CAAC;IAE7B;;OAEG;IACH,IAAI,UAAU,GAAkB,IAAI,CAAC;IAErC;;OAEG;IACH,IAAI,WAAW,GAAY,KAAK,CAAC;IAEjC,MAAM,OAAO,GAAY;QACrB,IAAI,CAAC,IAAW;YACZ,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBAClB,UAAU,CAAC,IAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;QACD,SAAS,CAAC,MAAqB;YAC3B,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;oBACjB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACJ,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChD,CAAC;gBACD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBAClB,kCAAkC;oBAClC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;wBACrB,UAAU,CAAC,IAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC;oBACH,OAAO,GAAG,SAAS,CAAC;gBACxB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,UAAU,GAAG,MAAM,CAAC;gBACpB,WAAW,GAAG,IAAI,CAAC;YACvB,CAAC;QACL,CAAC;QACD,aAAa,CAAC,IAAqB;YAC/B,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,MAAM,GAAmB,KAAK,CAAC;YACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC7B,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,GAAG,mBAAmB,CAAC;gBACjC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACzB,MAAM,GAAG,eAAe,CAAC;gBAC7B,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC9B,MAAM,GAAG,eAAe,CAAC;gBAC7B,CAAC;YACL,CAAC;YACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;YACnF,CAAC;QACL,CAAC;QACD,aAAa;YACT,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACjC,CAAC;KACJ,CAAA;IAED,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACjB,QAAQ,GAAG,KAAK,CAAC;QACjB,OAAO,GAAG,SAAS,CAAC;IACxB,CAAC;SAAM,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAChB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACd,QAAQ,GAAG,KAAK,CAAC;gBACjB,OAAO,GAAG,SAAS,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC5B,IAAI,WAAW,EAAE,CAAC;oBACd,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBAC9B,WAAW,GAAG,KAAK,CAAC;oBACpB,UAAU,GAAG,IAAI,CAAC;gBACtB,CAAC;YACL,CAAC;QACL,CAAC,EAAE,GAAG,EAAE;YACJ,QAAQ,GAAG,KAAK,CAAC;YACjB,OAAO,GAAG,SAAS,CAAC;YACpB,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACJ,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["import loadScript from '../util/scriptLoader';\n\nimport type ActivitySession from \"../activity/activitySession\";\n\nexport type Tracker = {\n push: (args: any[]) => void;\n setUserId: (userId: string | null) => void;\n trackActivity: (data: ActivitySession) => void;\n trackPageView: () => void;\n};\n\nconst jsFile = \"matomo.js\";\nconst phpFile = \"matomo.php\";\n\nconst voidTracker: Tracker = {\n push() { },\n setUserId() { },\n trackActivity() { },\n trackPageView() { },\n}\n\n/**\n * Indique si le chargement du script de tracking a échoué.\n * Dans ce cas, le tracking est désactivé.\n */\nlet loadFailed: boolean = false;\n\n/**\n * Charge le script de tracking Matomo.\n * Cette fonction est appelée une seule fois dès que le siteId est connu.\n * \n * @param matomoUrl url du script de tracking\n * @param siteId id du site à tracker\n * @returns \n */\nfunction loadTracker(matomoUrl: string, siteId: number) {\n if ((loadFailed) || (globalThis._paq != null)) return;\n globalThis._paq = globalThis._paq || [];\n globalThis._paq.push(['setTrackerUrl', matomoUrl + phpFile]);\n globalThis._paq.push(['setSiteId', siteId]);\n loadScript(matomoUrl + jsFile).catch(() => {\n // retry once after 30s\n setTimeout(() => {\n loadScript(matomoUrl + jsFile)\n .catch(() => {\n loadFailed = true;\n delete globalThis._paq;\n });\n }, 30000);\n })\n}\n\nlet instantiated: boolean = false;\n\n/**\n * @param trackerHost nom de domaine du serveur de tracking\n * @param siteId id du site à tracker. Si null, le tracking est désactivé.\n * @returns l'objet Tracker permettant d'envoyer des événements de tracking.\n */\nexport default function (trackerHost: string, siteId: number | null | Promise<number | null>): Tracker {\n if (instantiated) {\n console.warn(\"Tracker already instantiated\");\n return voidTracker;\n }\n instantiated = true;\n const matomoUrl = \"//\" + trackerHost + \"/\";\n\n /**\n * sauvegarde des appels à push avant l'initialisation du tracker\n * c'est à dire tant que le siteId et le userId ne sont pas connus.\n */\n let tempPaq: any[] | undefined = [];\n\n /**\n * true si le tracking doit être effectué.\n * Reste à true tant que le siteId n'est pas connu.\n * Si le siteId est null, le tracking est désactivé et tracking est mis à false.\n */\n let tracking: boolean = true;\n\n /**\n * sauvegarde du userId pour initialiser le tracker quand le siteId sera connu.\n */\n let userIdSave: string | null = null;\n\n /**\n * true si le userId a été donné et sauvegardé.\n */\n let userIdSaved: boolean = false;\n\n const tracker: Tracker = {\n push(args: any[]) {\n if (loadFailed || !tracking) return;\n if (tempPaq == null) {\n globalThis._paq!.push(args);\n } else {\n tempPaq.push(args);\n }\n },\n setUserId(userId: string | null) {\n if (loadFailed || !tracking) return;\n if (globalThis._paq != null) {\n if (null == userId) {\n globalThis._paq.push(['resetUserId']);\n } else {\n globalThis._paq.push(['setUserId', userId]);\n }\n if (tempPaq != null) {\n // On pousse les appels en attente\n tempPaq.forEach((args) => {\n globalThis._paq!.push(args);\n });\n tempPaq = undefined;\n }\n } else {\n userIdSave = userId;\n userIdSaved = true;\n }\n },\n trackActivity(data: ActivitySession) {\n if (loadFailed || !tracking) return;\n let action: string | false = false;\n if (data.isAssignment) {\n if (data.mode === 'assignment') {\n action = 'edit assignment';\n } else if (data.mode === 'review') {\n action = 'review assignment';\n }\n } else {\n if (data.mode === 'create') {\n action = 'edit activity';\n } else if (data.mode === 'view') {\n action = 'view activity';\n }\n }\n if (action !== false) {\n this.push(['trackEvent', 'activity', action, data.activityBunch.activityType]);\n }\n },\n trackPageView() {\n if (loadFailed || !tracking) return;\n this.push(['trackPageView']);\n }\n }\n\n if (siteId == null) {\n tracking = false;\n tempPaq = undefined;\n } else if (siteId instanceof Promise) {\n siteId.then((sId) => {\n if (sId == null) {\n tracking = false;\n tempPaq = undefined;\n } else {\n loadTracker(matomoUrl, sId);\n if (userIdSaved) {\n tracker.setUserId(userIdSave);\n userIdSaved = false;\n userIdSave = null;\n }\n }\n }, () => {\n tracking = false;\n tempPaq = undefined;\n userIdSave = null;\n });\n } else {\n loadTracker(matomoUrl, siteId);\n }\n\n return tracker;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/tracker/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAW9C,MAAM,MAAM,GAAG,WAAW,CAAC;AAC3B,MAAM,OAAO,GAAG,YAAY,CAAC;AAE7B,MAAM,WAAW,GAAY;IACzB,IAAI,KAAK,CAAC;IACV,SAAS,KAAK,CAAC;IACf,aAAa,KAAK,CAAC;IACnB,aAAa,KAAK,CAAC;CACtB,CAAA;AAED;;;GAGG;AACH,IAAI,UAAU,GAAY,KAAK,CAAC;AAEhC;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,SAAiB,EAAE,MAAc;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO;IACtD,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;IACxC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAC7D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACtC,uBAAuB;QACvB,UAAU,CAAC,GAAG,EAAE;YACZ,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC;iBAC7B,KAAK,CAAC,GAAG,EAAE;gBACR,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,UAAU,CAAC,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAA;AACN,CAAC;AAED,IAAI,YAAY,GAAY,KAAK,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,OAAO,WAAW,WAAmB,EAAE,MAA8C;IACxF,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,YAAY,GAAG,IAAI,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,GAAG,CAAC;IAE3C;;;OAGG;IACH,IAAI,OAAO,GAAsB,EAAE,CAAC;IAEpC;;;;OAIG;IACH,IAAI,QAAQ,GAAY,IAAI,CAAC;IAE7B;;OAEG;IACH,IAAI,UAAU,GAAkB,IAAI,CAAC;IAErC;;OAEG;IACH,IAAI,WAAW,GAAY,KAAK,CAAC;IAEjC,MAAM,OAAO,GAAY;QACrB,IAAI,CAAC,IAAW;YACZ,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBAClB,UAAU,CAAC,IAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;QACD,SAAS,CAAC,MAAqB;YAC3B,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;oBACjB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACJ,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChD,CAAC;gBACD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBAClB,kCAAkC;oBAClC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;wBACrB,UAAU,CAAC,IAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC;oBACH,OAAO,GAAG,SAAS,CAAC;gBACxB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,UAAU,GAAG,MAAM,CAAC;gBACpB,WAAW,GAAG,IAAI,CAAC;YACvB,CAAC;QACL,CAAC;QACD,aAAa,CAAC,IAAqB;YAC/B,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,MAAM,GAAmB,KAAK,CAAC;YACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC7B,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,GAAG,mBAAmB,CAAC;gBACjC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACzB,MAAM,GAAG,eAAe,CAAC;gBAC7B,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC9B,MAAM,GAAG,eAAe,CAAC;gBAC7B,CAAC;YACL,CAAC;YACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;YACnF,CAAC;QACL,CAAC;QACD,aAAa;YACT,IAAI,UAAU,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACjC,CAAC;KACJ,CAAA;IAED,iCAAiC;IACjC,8CAA8C;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5C,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACjB,QAAQ,GAAG,KAAK,CAAC;QACjB,OAAO,GAAG,SAAS,CAAC;IACxB,CAAC;SAAM,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAChB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACd,QAAQ,GAAG,KAAK,CAAC;gBACjB,OAAO,GAAG,SAAS,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC5B,IAAI,WAAW,EAAE,CAAC;oBACd,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBAC9B,WAAW,GAAG,KAAK,CAAC;oBACpB,UAAU,GAAG,IAAI,CAAC;gBACtB,CAAC;YACL,CAAC;QACL,CAAC,EAAE,GAAG,EAAE;YACJ,QAAQ,GAAG,KAAK,CAAC;YACjB,OAAO,GAAG,SAAS,CAAC;YACpB,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACJ,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["import loadScript from '../util/scriptLoader';\n\nimport type ActivitySession from \"../activity/activitySession\";\n\nexport type Tracker = {\n push: (args: any[]) => void;\n setUserId: (userId: string | null) => void;\n trackActivity: (data: ActivitySession) => void;\n trackPageView: () => void;\n};\n\nconst jsFile = \"matomo.js\";\nconst phpFile = \"matomo.php\";\n\nconst voidTracker: Tracker = {\n push() { },\n setUserId() { },\n trackActivity() { },\n trackPageView() { },\n}\n\n/**\n * Indique si le chargement du script de tracking a échoué.\n * Dans ce cas, le tracking est désactivé.\n */\nlet loadFailed: boolean = false;\n\n/**\n * Charge le script de tracking Matomo.\n * Cette fonction est appelée une seule fois dès que le siteId est connu.\n * \n * @param matomoUrl url du script de tracking\n * @param siteId id du site à tracker\n * @returns \n */\nfunction loadTracker(matomoUrl: string, siteId: number) {\n if ((loadFailed) || (globalThis._paq != null)) return;\n globalThis._paq = globalThis._paq || [];\n globalThis._paq.push(['setTrackerUrl', matomoUrl + phpFile]);\n globalThis._paq.push(['setSiteId', siteId]);\n loadScript(matomoUrl + jsFile).catch(() => {\n // retry once after 30s\n setTimeout(() => {\n loadScript(matomoUrl + jsFile)\n .catch(() => {\n loadFailed = true;\n delete globalThis._paq;\n });\n }, 30000);\n })\n}\n\nlet instantiated: boolean = false;\n\n/**\n * @param trackerHost nom de domaine du serveur de tracking\n * @param siteId id du site à tracker. Si null, le tracking est désactivé.\n * @returns l'objet Tracker permettant d'envoyer des événements de tracking.\n */\nexport default function (trackerHost: string, siteId: number | null | Promise<number | null>): Tracker {\n if (instantiated) {\n console.warn(\"Tracker already instantiated\");\n return voidTracker;\n }\n instantiated = true;\n const matomoUrl = \"//\" + trackerHost + \"/\";\n\n /**\n * sauvegarde des appels à push avant l'initialisation du tracker\n * c'est à dire tant que le siteId et le userId ne sont pas connus.\n */\n let tempPaq: any[] | undefined = [];\n\n /**\n * true si le tracking doit être effectué.\n * Reste à true tant que le siteId n'est pas connu.\n * Si le siteId est null, le tracking est désactivé et tracking est mis à false.\n */\n let tracking: boolean = true;\n\n /**\n * sauvegarde du userId pour initialiser le tracker quand le siteId sera connu.\n */\n let userIdSave: string | null = null;\n\n /**\n * true si le userId a été donné et sauvegardé.\n */\n let userIdSaved: boolean = false;\n\n const tracker: Tracker = {\n push(args: any[]) {\n if (loadFailed || !tracking) return;\n if (tempPaq == null) {\n globalThis._paq!.push(args);\n } else {\n tempPaq.push(args);\n }\n },\n setUserId(userId: string | null) {\n if (loadFailed || !tracking) return;\n if (globalThis._paq != null) {\n if (null == userId) {\n globalThis._paq.push(['resetUserId']);\n } else {\n globalThis._paq.push(['setUserId', userId]);\n }\n if (tempPaq != null) {\n // On pousse les appels en attente\n tempPaq.forEach((args) => {\n globalThis._paq!.push(args);\n });\n tempPaq = undefined;\n }\n } else {\n userIdSave = userId;\n userIdSaved = true;\n }\n },\n trackActivity(data: ActivitySession) {\n if (loadFailed || !tracking) return;\n let action: string | false = false;\n if (data.isAssignment) {\n if (data.mode === 'assignment') {\n action = 'edit assignment';\n } else if (data.mode === 'review') {\n action = 'review assignment';\n }\n } else {\n if (data.mode === 'create') {\n action = 'edit activity';\n } else if (data.mode === 'view') {\n action = 'view activity';\n }\n }\n if (action !== false) {\n this.push(['trackEvent', 'activity', action, data.activityBunch.activityType]);\n }\n },\n trackPageView() {\n if (loadFailed || !tracking) return;\n this.push(['trackPageView']);\n }\n }\n\n // SameSite=None pour les cookies\n // Nécessaire pour le tracking dans une iframe\n tracker.push(['setCookieSameSite', 'None']);\n\n if (siteId == null) {\n tracking = false;\n tempPaq = undefined;\n } else if (siteId instanceof Promise) {\n siteId.then((sId) => {\n if (sId == null) {\n tracking = false;\n tempPaq = undefined;\n } else {\n loadTracker(matomoUrl, sId);\n if (userIdSaved) {\n tracker.setUserId(userIdSave);\n userIdSaved = false;\n userIdSave = null;\n }\n }\n }, () => {\n tracking = false;\n tempPaq = undefined;\n userIdSave = null;\n });\n } else {\n loadTracker(matomoUrl, siteId);\n }\n\n return tracker;\n}\n"]}
|