ode-ngjs-front 1.4.12 → 1.4.13-develop-integration.202507301317

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/{1ec99fe1d6b3b1542c0fbe083a7ae716.html → 048f0eccf89021875b26fda0b249c1d4.html} +0 -4
  2. package/dist/668.js +21 -0
  3. package/dist/668.js.map +1 -0
  4. package/dist/669.js +1 -1
  5. package/dist/669.js.map +1 -1
  6. package/dist/ode-ngjs-front.js +4 -4
  7. package/dist/ode-ngjs-front.js.map +1 -1
  8. package/dist/ts/directives/business/portal/portal.directive.d.ts.map +1 -1
  9. package/dist/ts/modules/widgets.module.d.ts +3 -1
  10. package/dist/ts/modules/widgets.module.d.ts.map +1 -1
  11. package/dist/ts/services/theme-helper.service.d.ts.map +1 -1
  12. package/dist/ts/widgets/ptit-observatoire-widget/ptit-observatoire-widget.widget.d.ts +2 -0
  13. package/dist/ts/widgets/ptit-observatoire-widget/ptit-observatoire-widget.widget.d.ts.map +1 -0
  14. package/dist/ts/widgets/screen-time-widget/screen-time-widget.widget.d.ts +84 -0
  15. package/dist/ts/widgets/screen-time-widget/screen-time-widget.widget.d.ts.map +1 -0
  16. package/dist/version.txt +1 -1
  17. package/dist/widgets/agenda-widget/agenda-widget.widget.js +1 -1
  18. package/dist/widgets/agenda-widget/agenda-widget.widget.js.map +1 -1
  19. package/dist/widgets/bookmark-widget/bookmark-widget.widget.js +1 -1
  20. package/dist/widgets/bookmark-widget/bookmark-widget.widget.js.map +1 -1
  21. package/dist/widgets/briefme-widget/briefme-widget.widget.js +1 -1
  22. package/dist/widgets/briefme-widget/briefme-widget.widget.js.map +1 -1
  23. package/dist/widgets/calendar-widget/calendar-widget.widget.js +1 -1
  24. package/dist/widgets/calendar-widget/calendar-widget.widget.js.map +1 -1
  25. package/dist/widgets/cantine-widget/cantine-widget.widget.js +1 -1
  26. package/dist/widgets/cantine-widget/cantine-widget.widget.js.map +1 -1
  27. package/dist/widgets/carnet-de-bord/carnet-de-bord.widget.js +1 -1
  28. package/dist/widgets/carnet-de-bord/carnet-de-bord.widget.js.map +1 -1
  29. package/dist/widgets/cursus-widget/cursus-widget.widget.js +1 -1
  30. package/dist/widgets/cursus-widget/cursus-widget.widget.js.map +1 -1
  31. package/dist/widgets/dicodelazone-widget/dicodelazone-widget.widget.js +1 -1
  32. package/dist/widgets/dicodelazone-widget/dicodelazone-widget.widget.js.map +1 -1
  33. package/dist/widgets/edumalin-widget/edumalin-widget.widget.js +1 -1
  34. package/dist/widgets/edumalin-widget/edumalin-widget.widget.js.map +1 -1
  35. package/dist/widgets/last-infos-widget/last-infos-widget.widget.js +1 -1
  36. package/dist/widgets/last-infos-widget/last-infos-widget.widget.js.map +1 -1
  37. package/dist/widgets/maxicours-widget/maxicours-widget.widget.js +1 -1
  38. package/dist/widgets/maxicours-widget/maxicours-widget.widget.js.map +1 -1
  39. package/dist/widgets/mediacentre-widget/mediacentre-widget.widget.js +1 -1
  40. package/dist/widgets/mediacentre-widget/mediacentre-widget.widget.js.map +1 -1
  41. package/dist/widgets/my-apps/my-apps.widget.js +1 -1
  42. package/dist/widgets/my-apps/my-apps.widget.js.map +1 -1
  43. package/dist/widgets/ptit-observatoire-widget/ptit-observatoire-widget.widget.js +2 -0
  44. package/dist/widgets/ptit-observatoire-widget/ptit-observatoire-widget.widget.js.map +1 -0
  45. package/dist/widgets/qwant-widget/qwant-widget.widget.js +1 -1
  46. package/dist/widgets/qwant-widget/qwant-widget.widget.js.map +1 -1
  47. package/dist/widgets/record-me/record-me.widget.js +1 -1
  48. package/dist/widgets/record-me/record-me.widget.js.map +1 -1
  49. package/dist/widgets/rss-widget/rss-widget.widget.js +1 -1
  50. package/dist/widgets/rss-widget/rss-widget.widget.js.map +1 -1
  51. package/dist/widgets/school-widget/school-widget.widget.js +1 -1
  52. package/dist/widgets/school-widget/school-widget.widget.js.map +1 -1
  53. package/dist/widgets/screen-time-widget/screen-time-widget.widget.js +2 -0
  54. package/dist/widgets/screen-time-widget/screen-time-widget.widget.js.map +1 -0
  55. package/dist/widgets/universalis-widget/universalis-widget.widget.js +1 -1
  56. package/dist/widgets/universalis-widget/universalis-widget.widget.js.map +1 -1
  57. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"portal.directive.d.ts","sourceRoot":"","sources":["../../../../../src/ts/directives/business/portal/portal.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,GAAG,EAAc,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,UAAU,WAAY,SAAQ,MAAM;IACnC,GAAG,CAAC,EAAC,GAAG,CAAC;IACT,IAAI,EAAC,MAAM,CAAC;IAEZ,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAC;QACH,WAAW,CAAC,KAAK,EAAC,MAAM,GAAE,OAAO,CAAC;KAClC,CAAC;CACF;AAGD,cAAM,SAAU,YAAW,UAAU,CAAC,WAAW,EAAC,MAAM,EAAC,WAAW,EAAC,WAAW,EAAE,CAAC;IAqKtE,OAAO,CAAC,QAAQ;IApKzB,QAAQ,SAAO;IAClB,UAAU;;MAEL;IACL,WAAW,CAAC,OAAO,EAAC,MAAM,EAAE,KAAK,EAAC,WAAW;IAI7C,KAAK;;;MAGH;IAEF,IAAI,CAAC,KAAK,EAAC,WAAW,EAAE,IAAI,EAAC,MAAM,EAAE,KAAK,EAAC,WAAW;IAuDtD,OAAO,CAAC,qBAAqB;gBAgGT,QAAQ,EAAC,eAAe;CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAC,eAAe,aAExD;yBAFe,gBAAgB"}
1
+ {"version":3,"file":"portal.directive.d.ts","sourceRoot":"","sources":["../../../../../src/ts/directives/business/portal/portal.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,GAAG,EAAc,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,UAAU,WAAY,SAAQ,MAAM;IACnC,GAAG,CAAC,EAAC,GAAG,CAAC;IACT,IAAI,EAAC,MAAM,CAAC;IAEZ,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAC;QACH,WAAW,CAAC,KAAK,EAAC,MAAM,GAAE,OAAO,CAAC;KAClC,CAAC;CACF;AAGD,cAAM,SAAU,YAAW,UAAU,CAAC,WAAW,EAAC,MAAM,EAAC,WAAW,EAAC,WAAW,EAAE,CAAC;IAsKtE,OAAO,CAAC,QAAQ;IArKzB,QAAQ,SAAO;IAClB,UAAU;;MAEL;IACL,WAAW,CAAC,OAAO,EAAC,MAAM,EAAE,KAAK,EAAC,WAAW;IAI7C,KAAK;;;MAGH;IAEF,IAAI,CAAC,KAAK,EAAC,WAAW,EAAE,IAAI,EAAC,MAAM,EAAE,KAAK,EAAC,WAAW;IAuDtD,OAAO,CAAC,qBAAqB;gBAiGT,QAAQ,EAAC,eAAe;CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAC,eAAe,aAExD;yBAFe,gBAAgB"}
@@ -17,7 +17,9 @@ export declare enum KnownWidget {
17
17
  lastInfos = "last-infos-widget",
18
18
  edumalin = "edumalin-widget",
19
19
  mediacentre = "mediacentre-widget",
20
- cantine = "cantine-widget"
20
+ cantine = "cantine-widget",
21
+ ptitObservatoire = "ptit-observatoire-widget",
22
+ screenTime = "screen-time-widget"
21
23
  }
22
24
  export declare type WidgetLoader = (widgetName: String) => Promise<void>;
23
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"widgets.module.d.ts","sourceRoot":"","sources":["../../../src/ts/modules/widgets.module.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAQ,OAAO,EAAE,MAAM,SAAS,CAAC;AA0CjD,oBAAY,WAAW;IACnB,SAAS,qBAA2B;IACpC,MAAM,kBAA2B;IACjC,MAAM,kBAA2B;IACjC,QAAQ,cAAqB;IAC7B,MAAM,kBAA2B;IACjC,KAAK,UAAoB;IACzB,QAAQ,oBAA2B;IACnC,GAAG,eAA2B;IAC9B,MAAM,YAAqB;IAC3B,YAAY,mBAAsB;IAClC,YAAY,wBAA2B;IACvC,QAAQ,oBAA2B;IACnC,WAAW,uBAA2B;IACtC,OAAO,mBAA2B;IAClC,SAAS,sBAA4B;IACrC,QAAQ,oBAA2B;IACnC,WAAW,uBAA2B;IACtC,OAAO,mBAA2B;CAErC;AACD,oBAAY,YAAY,GAAG,CAAC,UAAU,EAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAsX9D;;GAEG;AACH,wBAAgB,eAAe,IAAG,OAAO,CAExC"}
1
+ {"version":3,"file":"widgets.module.d.ts","sourceRoot":"","sources":["../../../src/ts/modules/widgets.module.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAQ,OAAO,EAAE,MAAM,SAAS,CAAC;AA4CjD,oBAAY,WAAW;IACnB,SAAS,qBAA2B;IACpC,MAAM,kBAA2B;IACjC,MAAM,kBAA2B;IACjC,QAAQ,cAAqB;IAC7B,MAAM,kBAA2B;IACjC,KAAK,UAAoB;IACzB,QAAQ,oBAA2B;IACnC,GAAG,eAA2B;IAC9B,MAAM,YAAqB;IAC3B,YAAY,mBAAsB;IAClC,YAAY,wBAA2B;IACvC,QAAQ,oBAA2B;IACnC,WAAW,uBAA2B;IACtC,OAAO,mBAA2B;IAClC,SAAS,sBAA4B;IACrC,QAAQ,oBAA2B;IACnC,WAAW,uBAA2B;IACtC,OAAO,mBAA2B;IAClC,gBAAgB,6BAA6B;IAC7C,UAAU,uBAA4B;CAEzC;AACD,oBAAY,YAAY,GAAG,CAAC,UAAU,EAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AA6Z9D;;GAEG;AACH,wBAAgB,eAAe,IAAG,OAAO,CAExC"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme-helper.service.d.ts","sourceRoot":"","sources":["../../../src/ts/services/theme-helper.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAc,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD;;GAEG;AACH,qBAAa,kBAAkB;IA4BvB,OAAO,CAAC,WAAW;IA3BvB,MAAM,CAAC,OAAO,WAAyB;IAEvC,OAAO,CAAC,YAAY,CAsBnB;gBAGW,WAAW,EAAC,eAAe;IAIvC,OAAO,KAAK,QAAQ,GAEnB;IAED,uCAAuC;IACvC,IAAI,GAAG,WAEN;IAED,8FAA8F;IACxF,qBAAqB,IAAG,OAAO,CAAC,MAAM,CAAC;IAW7C,4GAA4G;IACtG,oBAAoB,IAAG,OAAO,CAAC,MAAM,CAAC;IAM5C,SAAS,CAAE,GAAG,EAAC,MAAM,GAAG,MAAM;IAa9B;;;OAGG;IACH,mBAAmB,CAAE,QAAQ,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM;IAYrD,4CAA4C;IAC5C,WAAW,CAAE,KAAK,EAAC,MAAM;IAWzB,iCAAiC;IAC3B,UAAU,CAAE,SAAS,EAAC,MAAM;IA8BlC,qEAAqE;IACrE,UAAU,IAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIlC,2FAA2F;IACrF,QAAQ,CAAE,KAAK,EAAC,UAAU;IAMhC;;OAEG;IACF,WAAW,CAAE,GAAG,EAAC,OAAO,GAAG,MAAM;IA2BlC,wCAAwC;IACxC,kBAAkB,CAAE,MAAM,EAAC,OAAO,GAAG,MAAM;CAG9C"}
1
+ {"version":3,"file":"theme-helper.service.d.ts","sourceRoot":"","sources":["../../../src/ts/services/theme-helper.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAc,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD;;GAEG;AACH,qBAAa,kBAAkB;IA+BvB,OAAO,CAAC,WAAW;IA9BvB,MAAM,CAAC,OAAO,WAAyB;IAEvC,OAAO,CAAC,YAAY,CAyBnB;gBAGW,WAAW,EAAC,eAAe;IAIvC,OAAO,KAAK,QAAQ,GAEnB;IAED,uCAAuC;IACvC,IAAI,GAAG,WAEN;IAED,8FAA8F;IACxF,qBAAqB,IAAG,OAAO,CAAC,MAAM,CAAC;IAW7C,4GAA4G;IACtG,oBAAoB,IAAG,OAAO,CAAC,MAAM,CAAC;IAM5C,SAAS,CAAE,GAAG,EAAC,MAAM,GAAG,MAAM;IAa9B;;;OAGG;IACH,mBAAmB,CAAE,QAAQ,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM;IAYrD,4CAA4C;IAC5C,WAAW,CAAE,KAAK,EAAC,MAAM;IAWzB,iCAAiC;IAC3B,UAAU,CAAE,SAAS,EAAC,MAAM;IA8BlC,qEAAqE;IACrE,UAAU,IAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIlC,2FAA2F;IACrF,QAAQ,CAAE,KAAK,EAAC,UAAU;IAMhC;;OAEG;IACF,WAAW,CAAE,GAAG,EAAC,OAAO,GAAG,MAAM;IA2BlC,wCAAwC;IACxC,kBAAkB,CAAE,MAAM,EAAC,OAAO,GAAG,MAAM;CAG9C"}
@@ -0,0 +1,2 @@
1
+ export declare const odeModuleName = "odePtitObservatoireWidgetModule";
2
+ //# sourceMappingURL=ptit-observatoire-widget.widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ptit-observatoire-widget.widget.d.ts","sourceRoot":"","sources":["../../../../src/ts/widgets/ptit-observatoire-widget/ptit-observatoire-widget.widget.ts"],"names":[],"mappings":"AAgIA,eAAO,MAAM,aAAa,oCAAoC,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { Moment } from "moment";
2
+ import 'moment/locale/fr';
3
+ export declare class Controller {
4
+ platform: {
5
+ readonly deploymentTag: string;
6
+ readonly cdnDomain: string;
7
+ readonly apps: {
8
+ initialize(app: import("ode-ts-client").App, alternativeApp?: boolean | undefined): Promise<void>;
9
+ getPublicConf(app: import("ode-ts-client").App): Promise<any>;
10
+ getWebAppConf(app: import("ode-ts-client").App): Promise<import("ode-ts-client").IWebApp | undefined>;
11
+ loadI18n(app: import("ode-ts-client").App): Promise<void>;
12
+ };
13
+ readonly theme: import("ode-ts-client").ITheme;
14
+ readonly analytics: {
15
+ parameters<T extends import("ode-ts-client").ITrackingParams>(type: import("ode-ts-client").TrackingType): Promise<T | undefined>;
16
+ xiti(): Promise<import("ode-ts-client").IXitiTrackingParams | undefined>;
17
+ readonly status: import("ode-ts-client").AnalyticStatus;
18
+ };
19
+ readonly idiom: import("ode-ts-client").IIdiom;
20
+ listLanguages(): Promise<string[]>;
21
+ };
22
+ lang: import("ode-ts-client").IIdiom;
23
+ selectedUser: string;
24
+ viewMode: "weekly" | "daily";
25
+ userData: {
26
+ [key: string]: {
27
+ weekly: any;
28
+ daily: any;
29
+ };
30
+ };
31
+ selectedDailyDate: string;
32
+ weekStart: Moment;
33
+ weekEnd: Moment;
34
+ updateChart: () => void;
35
+ todayOnCampus: number;
36
+ todayOffCampus: number;
37
+ todayTotal: number;
38
+ weeklyAvgOnCampus: number;
39
+ weeklyAvgOffCampus: number;
40
+ weeklyTotalAverage: number;
41
+ weeklyAvgSchoolUsePercentage: number;
42
+ weeklyAvgOutOfSchoolPercentage: number;
43
+ fixedTodayOnCampus: number;
44
+ fixedTodayOffCampus: number;
45
+ fixedTodayTotal: number;
46
+ fixedWeeklyAvgOnCampus: number;
47
+ fixedWeeklyAvgOffCampus: number;
48
+ fixedWeeklyTotalAverage: number;
49
+ fixedWeeklyAvgSchoolUsePercentage: number;
50
+ fixedWeeklyAvgOutOfSchoolPercentage: number;
51
+ customWeekMode: boolean;
52
+ customStartDate: string;
53
+ customEndDate: string;
54
+ isParent: boolean;
55
+ hasError: boolean;
56
+ errorMessage: string;
57
+ fetchDataForCurrentUser: () => void;
58
+ fetchLightboxData: () => void;
59
+ showLightbox: boolean;
60
+ showDatePicker: boolean;
61
+ children: {
62
+ id: string;
63
+ name: string;
64
+ userId: string;
65
+ }[];
66
+ selectedChild: null;
67
+ selectedChildHistogram: string;
68
+ toggleDatePicker(show: boolean): void;
69
+ setDateFromPicker(date: string): void;
70
+ toggleLightbox(show: boolean): void;
71
+ private getCurrentSchoolYear;
72
+ private setSelectedDate;
73
+ private setSelectedWeek;
74
+ canGoToPreviousWeek(): boolean;
75
+ canGoToNextWeek(): boolean;
76
+ canGoToPreviousDay(): boolean;
77
+ canGoToNextDay(): boolean;
78
+ changeDay(offset: number): void;
79
+ changeWeek(offset: number): void;
80
+ get selectedDailyDateObj(): Date;
81
+ get weekLabel(): string;
82
+ }
83
+ export declare const odeModuleName = "odeCantineWidgetModule";
84
+ //# sourceMappingURL=screen-time-widget.widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-time-widget.widget.d.ts","sourceRoot":"","sources":["../../../../src/ts/widgets/screen-time-widget/screen-time-widget.widget.ts"],"names":[],"mappings":"AAGA,OAAe,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,kBAAkB,CAAC;AAM1B,qBAAa,UAAU;IACZ,QAAQ;;;;;;;;;;;;;;;;;MAAmB;IAC3B,IAAI,iCAAuB;IAC3B,YAAY,EAAE,MAAM,CAAM;IAC1B,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAY;IAExC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG;YAAE,MAAM,EAAE,GAAG,CAAC;YAAC,KAAK,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE,CAAM;IAC9D,iBAAiB,EAAE,MAAM,CAAiC;IAC1D,SAAS,EAAE,MAAM,CAA+B;IAChD,OAAO,EAAE,MAAM,CAA6B;IAE5C,WAAW,EAAE,MAAM,IAAI,CAAa;IAEpC,aAAa,SAAK;IAClB,cAAc,SAAK;IACnB,UAAU,SAAK;IAEf,iBAAiB,SAAK;IACtB,kBAAkB,SAAK;IACvB,kBAAkB,SAAK;IACvB,4BAA4B,EAAE,MAAM,CAAK;IACzC,8BAA8B,EAAE,MAAM,CAAK;IAG3C,kBAAkB,SAAK;IACvB,mBAAmB,SAAK;IACxB,eAAe,SAAK;IAEpB,sBAAsB,SAAK;IAC3B,uBAAuB,SAAK;IAC5B,uBAAuB,SAAK;IAC5B,iCAAiC,EAAE,MAAM,CAAK;IAC9C,mCAAmC,EAAE,MAAM,CAAK;IAKhD,cAAc,EAAE,OAAO,CAAS;IAChC,eAAe,EAAE,MAAM,CAAM;IAC7B,aAAa,EAAE,MAAM,CAAM;IAE3B,QAAQ,EAAE,OAAO,CAAS;IAE1B,QAAQ,EAAE,OAAO,CAAS;IAC1B,YAAY,EAAE,MAAM,CAAM;IAE1B,uBAAuB,EAAE,MAAM,IAAI,CAAa;IAChD,iBAAiB,EAAE,MAAM,IAAI,CAAa;IAE1C,YAAY,EAAE,OAAO,CAAS;IAC9B,cAAc,EAAE,OAAO,CAAS;IAEhC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IAC9D,aAAa,OAAQ;IACrB,sBAAsB,SAAM;IAE5B,gBAAgB,CAAC,IAAI,EAAE,OAAO;IAI9B,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAO9B,cAAc,CAAC,IAAI,EAAE,OAAO;IAsBnC,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAOjB,mBAAmB,IAAI,OAAO;IAO9B,eAAe,IAAI,OAAO;IAO1B,kBAAkB,IAAI,OAAO;IAO5B,cAAc,IAAI,OAAO;IAOzB,SAAS,CAAC,MAAM,EAAE,MAAM;IAMxB,UAAU,CAAC,MAAM,EAAE,MAAM;IAMhC,IAAW,oBAAoB,IAAI,IAAI,CAEtC;IAED,IAAW,SAAS,IAAI,MAAM,CAI7B;CACJ;AAmXD,eAAO,MAAM,aAAa,2BAA2B,CAAC"}
package/dist/version.txt CHANGED
@@ -1 +1 @@
1
- ode-ngjs-front 05/06/2025 18:11:03
1
+ ode-ngjs-front 30/07/2025 13:18:06
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[815],{2805:(e,t,n)=>{n.d(t,{Z:()=>a});const a=' <div class="widget-calendar"> <div class="widget-header"> <div class="subtitle"> <a class="seemore" href="/calendar" i18n-title="agenda-widget.widget.see.all" ng-click="trackEvent($event, { detail:{\'open\':\'app\'} })"> <i18n>agenda-widget.widget.title</i18n> <span class="seemore-text"><i18n>agenda-widget.widget.see.more</i18n></span> </a> </div> <div class="widget-options"> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body" dnd-nodrag> <div class="widget-empty-message" ng-if="ctrl.userEvents === undefined || ctrl.userEvents.length === 0"> <i18n>agenda-widget.widget.empty</i18n> </div> <ul class="day-list" ng-if="ctrl.userEvents !== undefined && ctrl.userEvents.length >= 0"> <li class="day-item" ng-repeat="group in ctrl.dayGroups"> <div class="day-item-title"> {{group}} </div> <ul class="moment-list"> <li class="moment-item" ng-repeat="event in ctrl.userEvents | filter:{displayedGroup: group}"> <span class="icon"><i class="fas fa-calendar-alt"></i></span> <span class="hour" ng-if="!event.allday">[[event.displayedDate]]</span> <span class="link"><a href="/calendar" ng-click="trackEvent($event, { detail:{\'open\':\'event\'} })">[[event.title]]</a></span> </li> </ul> </li> </ul> </div> </div>'},624:function(e,t,n){var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var i=a(n(4202)),d=n(9419),s=function(){function e(){this.userEvents=[],this.dayGroups=[],this.MAX_EVENTS_DISPLAYED=5}return e.prototype.dateToMoment=function(e){var t=d.L10n.moment(d.L10n.moment(e).format("YYYY MM DD HH:MM"),"YYYY MM DD HH:MM").format("Z").split(":")[0];return d.L10n.utc(e).add(t,"hours")},e.prototype.toDisplayedGroup=function(e){return this.dateToMoment(e).format("dddd D MMMM YYYY")},e.prototype.toDisplayedDate=function(e){return this.dateToMoment(e).format("HH:mm")},e.prototype.today=function(e){return d.L10n.moment().format(e)},e.prototype.loadEvents=function(){var e=this;return(0,d.http)().get("/calendar/calendars").then((function(e){if(i.default.isArray(e)&&e.length>0){var t=e.map((function(e){return"calendarId="+e._id})).join("&");return console.log("filter calendarWidget : "+t),t}return null})).then((function(t){return null===t?[]:(0,d.http)().get("/calendar/events/widget?"+t+"&nb="+e.MAX_EVENTS_DISPLAYED)}))},e.prototype.setEvents=function(e){var t=this;if(i.default.isArray(e)){this.dayGroups=[],this.userEvents=[];var n="";e.forEach((function(e){var a=Object.assign({displayedGroup:t.toDisplayedGroup(e.startMoment),displayedDate:t.toDisplayedDate(e.startMoment)},e);t.userEvents.push(a),n!==a.displayedGroup&&(n=a.displayedGroup,t.dayGroups.push(n))}))}},e}(),r=function(){function e(){this.restrict="E",this.template=n(2805).Z,this.scope={},this.bindToController=!0,this.controller=[s],this.controllerAs="ctrl",this.require=["odeAgendaWidget"]}return e.prototype.link=function(e,t,n,a){var i=a?a[0]:null;i&&(i.loadEvents().then((function(t){i.setEvents(t),e.$apply()})),e.trackEvent=function(e,t){var n,a;void 0===t.bubbles&&(t.bubbles=!0);var i=null;(t&&"app"===(null===(n=t.detail)||void 0===n?void 0:n.open)||t&&"event"===(null===(a=t.detail)||void 0===a?void 0:a.open))&&(i=new CustomEvent(d.TrackedActionFromWidget.agenda,t)),i&&e.currentTarget&&e.currentTarget.dispatchEvent(i)})},e}();(0,d.notif)().onLangReady().promise.then((function(e){(0,d.conf)().Platform.idiom.addKeys(n(1014))})),t.odeModuleName="odeAgendaWidgetModule",i.default.module(t.odeModuleName,[]).directive("odeAgendaWidget",(function(){return new r}))},1014:e=>{e.exports=JSON.parse('{"agenda-widget":"Agenda","agenda-widget.widget.title":"Agenda","agenda-widget.widget.empty":"Aucun événement prévu","agenda-widget.widget.next.events":"Prochains événements","agenda-widget.widget.access.module":"Vers module Agenda","agenda-widget.widget.see.more":"voir plus","agenda-widget.widget.see.all":"Voir tout l\'agenda"}')}}]);
1
+ "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[815],{2805:(e,t,n)=>{n.d(t,{Z:()=>a});const a=' <div class="widget-calendar"> <div class="widget-header"> <div class="subtitle"> <a class="seemore" href="/calendar" i18n-title="agenda-widget.widget.see.all" ng-click="trackEvent($event, { detail:{\'open\':\'app\'} })"> <i18n>agenda-widget.widget.title</i18n> <span class="seemore-text"><i18n>agenda-widget.widget.see.more</i18n></span> </a> </div> <div class="widget-options"> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body" dnd-nodrag> <div class="widget-empty-message" ng-if="ctrl.userEvents === undefined || ctrl.userEvents.length === 0"> <i18n>agenda-widget.widget.empty</i18n> </div> <ul class="day-list" ng-if="ctrl.userEvents !== undefined && ctrl.userEvents.length >= 0"> <li class="day-item" ng-repeat="group in ctrl.dayGroups"> <div class="day-item-title"> {{group}} </div> <ul class="moment-list"> <li class="moment-item" ng-repeat="event in ctrl.userEvents | filter:{displayedGroup: group}"> <span class="icon"><i class="fas fa-calendar-alt"></i></span> <span class="hour" ng-if="!event.allday">[[event.displayedDate]]</span> <span class="link"><a href="/calendar" ng-click="trackEvent($event, { detail:{\'open\':\'event\'} })">[[event.title]]</a></span> </li> </ul> </li> </ul> </div> </div>'},624:function(e,t,n){var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var i=a(n(4202)),d=n(9419),s=function(){function e(){this.userEvents=[],this.dayGroups=[],this.MAX_EVENTS_DISPLAYED=5}return e.prototype.dateToMoment=function(e){var t=d.L10n.moment(d.L10n.moment(e).format("YYYY MM DD HH:MM"),"YYYY MM DD HH:MM").format("Z").split(":")[0];return d.L10n.utc(e).add(t,"hours")},e.prototype.toDisplayedGroup=function(e){return this.dateToMoment(e).format("dddd D MMMM YYYY")},e.prototype.toDisplayedDate=function(e){return this.dateToMoment(e).format("HH:mm")},e.prototype.today=function(e){return d.L10n.moment().format(e)},e.prototype.loadEvents=function(){var e=this;return(0,d.http)().get("/calendar/calendars").then(function(e){if(i.default.isArray(e)&&e.length>0){var t=e.map(function(e){return"calendarId="+e._id}).join("&");return console.log("filter calendarWidget : "+t),t}return null}).then(function(t){return null===t?[]:(0,d.http)().get("/calendar/events/widget?"+t+"&nb="+e.MAX_EVENTS_DISPLAYED)})},e.prototype.setEvents=function(e){var t=this;if(i.default.isArray(e)){this.dayGroups=[],this.userEvents=[];var n="";e.forEach(function(e){var a=Object.assign({displayedGroup:t.toDisplayedGroup(e.startMoment),displayedDate:t.toDisplayedDate(e.startMoment)},e);t.userEvents.push(a),n!==a.displayedGroup&&(n=a.displayedGroup,t.dayGroups.push(n))})}},e}(),r=function(){function e(){this.restrict="E",this.template=n(2805).Z,this.scope={},this.bindToController=!0,this.controller=[s],this.controllerAs="ctrl",this.require=["odeAgendaWidget"]}return e.prototype.link=function(e,t,n,a){var i=a?a[0]:null;i&&(i.loadEvents().then(function(t){i.setEvents(t),e.$apply()}),e.trackEvent=function(e,t){var n,a;void 0===t.bubbles&&(t.bubbles=!0);var i=null;(t&&"app"===(null===(n=t.detail)||void 0===n?void 0:n.open)||t&&"event"===(null===(a=t.detail)||void 0===a?void 0:a.open))&&(i=new CustomEvent(d.TrackedActionFromWidget.agenda,t)),i&&e.currentTarget&&e.currentTarget.dispatchEvent(i)})},e}();(0,d.notif)().onLangReady().promise.then(function(e){(0,d.conf)().Platform.idiom.addKeys(n(1014))}),t.odeModuleName="odeAgendaWidgetModule",i.default.module(t.odeModuleName,[]).directive("odeAgendaWidget",function(){return new r})},1014:e=>{e.exports=JSON.parse('{"agenda-widget":"Agenda","agenda-widget.widget.access.module":"Vers module Agenda","agenda-widget.widget.empty":"Aucun événement prévu","agenda-widget.widget.next.events":"Prochains événements","agenda-widget.widget.see.all":"Voir tout l\'agenda","agenda-widget.widget.see.more":"voir plus","agenda-widget.widget.title":"Agenda"}')}}]);
2
2
  //# sourceMappingURL=agenda-widget.widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"widgets/agenda-widget/agenda-widget.widget.js","mappings":"gIAGA,QAFW,oyC,kLCDX,iBACA,UA4CA,0BACQ,KAAAA,WAA8B,GAC9B,KAAAC,UAAqB,GAEnB,KAAAC,qBAAuB,CAsDjC,QApDS,YAAAC,aAAR,SAAqBC,GACpB,IAAIC,EAAiB,EAAAC,KAAKC,OAAQ,EAAAD,KAAKC,OAAOH,GAAMI,OAAO,oBAAqB,oBAC9EA,OAAO,KACPC,MAAM,KAAK,GACb,OAAO,EAAAH,KAAKI,IAAIN,GAAMO,IAAIN,EAAgB,QAC3C,EAEA,YAAAO,iBAAA,SAAiBR,GAChB,OAAOS,KAAKV,aAAaC,GAAMI,OAAO,mBACvC,EAEA,YAAAM,gBAAA,SAAgBV,GACf,OAAOS,KAAKV,aAAaC,GAAMI,OAAO,QACvC,EAEA,YAAAO,MAAA,SAAMP,GACL,OAAO,EAAAF,KAAKC,SAASC,OAAOA,EAC7B,EAEA,YAAAQ,WAAA,sBACC,OAAO,IAAAC,QAAOC,IAAe,uBAC5BC,MAAM,SAAAC,GACN,GAAI,UAAQC,QAAQD,IAAcA,EAAUE,OAAS,EAAI,CACxD,IAAIC,EAASH,EAAUI,KAAK,SAAAC,GAAY,oBAAcA,EAASC,GAAvB,IAA6BC,KAAK,KAE1E,OADAC,QAAQC,IAAI,2BAA6BN,GAClCA,C,CAER,OAAO,IACR,IACCJ,MAAM,SAAAW,GACN,OAAkB,OAAXA,EAAiB,IAAK,IAAAb,QAAOC,IAAoB,2BAA6BY,EAAW,OAAS,EAAK5B,qBAC/G,GACD,EAEA,YAAA6B,UAAA,SAAWC,GAAX,WACC,GAAI,UAAQX,QAAQW,GAAU,CAC7BnB,KAAKZ,UAAY,GACjBY,KAAKb,WAAa,GAClB,IAAI,EAAY,GAChBgC,EAAOC,SAAS,SAAAC,GACf,IAAMC,EAAYC,OAAOC,OAAO,CAC/BC,eAAgB,EAAK1B,iBAAiBsB,EAAGK,aACzCC,cAAgB,EAAK1B,gBAAgBoB,EAAGK,cACtCL,GACH,EAAKlC,WAAWyC,KAAMN,GAClB,IAAcA,EAAUG,iBAC3B,EAAYH,EAAUG,eACtB,EAAKrC,UAAUwC,KAAM,GAEvB,G,CAEF,EACD,EA1DA,GA6DA,0BACI,KAAAC,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,MAAQ,CAAC,EACT,KAAAC,kBAAmB,EACnB,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,kBA4BZ,QA1BI,YAAAC,KAAA,SAAKN,EAAoBO,EAAaC,EAAmBC,GACrD,IAAMC,EAAuBD,EAAcA,EAAY,GAAmB,KACrEC,IAGXA,EAAKtC,aAAaG,MAAM,SAAAa,GACvBsB,EAAKvB,UAAWC,GAChBY,EAAMW,QACP,IAGAX,EAAMY,WAAa,SAACC,EAASC,G,aAEJ,IAAdA,EAAEC,UAAyBD,EAAEC,SAAU,GAEjD,IAAIC,EAAQ,MACRF,GAAsB,SAAT,QAAR,EAAAA,EAAEG,cAAM,eAAEC,OAERJ,GAAsB,WAAT,QAAR,EAAAA,EAAEG,cAAM,eAAEC,SADzBF,EAAQ,IAAIG,YAAa,EAAAC,wBAAwBC,OAAQP,IAItDE,GAASH,EAAES,eACdT,EAAES,cAAcC,cAAcP,EAEhC,EACD,EACD,EAnCA,IA2CA,IAAAQ,SAAQC,cAAcC,QAAQnD,MAAM,SAAAoD,IAEzB,IAAAC,QAAOC,SAASC,MAAMC,QAAS,EAAQ,MAElD,IAIa,EAAAC,cAAgB,wBAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,mBAd9C,WACC,OAAO,IAAIC,CACZ,G","sources":["webpack://ode-ngjs-front/./src/ts/widgets/agenda-widget/agenda-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/agenda-widget/agenda-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-calendar\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"> <a class=\\\"seemore\\\" href=\\\"/calendar\\\" i18n-title=\\\"agenda-widget.widget.see.all\\\" ng-click=\\\"trackEvent($event, { detail:{'open':'app'} })\\\"> <i18n>agenda-widget.widget.title</i18n> <span class=\\\"seemore-text\\\"><i18n>agenda-widget.widget.see.more</i18n></span> </a> </div> <div class=\\\"widget-options\\\"> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\" dnd-nodrag> <div class=\\\"widget-empty-message\\\" ng-if=\\\"ctrl.userEvents === undefined || ctrl.userEvents.length === 0\\\"> <i18n>agenda-widget.widget.empty</i18n> </div> <ul class=\\\"day-list\\\" ng-if=\\\"ctrl.userEvents !== undefined && ctrl.userEvents.length >= 0\\\"> <li class=\\\"day-item\\\" ng-repeat=\\\"group in ctrl.dayGroups\\\"> <div class=\\\"day-item-title\\\"> {{group}} </div> <ul class=\\\"moment-list\\\"> <li class=\\\"moment-item\\\" ng-repeat=\\\"event in ctrl.userEvents | filter:{displayedGroup: group}\\\"> <span class=\\\"icon\\\"><i class=\\\"fas fa-calendar-alt\\\"></i></span> <span class=\\\"hour\\\" ng-if=\\\"!event.allday\\\">[[event.displayedDate]]</span> <span class=\\\"link\\\"><a href=\\\"/calendar\\\" ng-click=\\\"trackEvent($event, { detail:{'open':'event'} })\\\">[[event.title]]</a></span> </li> </ul> </li> </ul> </div> </div>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective } from \"angular\";\nimport { conf, L10n, notif, http, TrackedActionFromWidget } from \"../../utils\"; \nimport { TrackedAction, TrackedScope } from \"../../utils/TrackedScope\";\n\ntype ResourceMetadata = {\n\t_id: string;\n\tcreated: { $date: number; };\n\tmodified: { $date: number; };\n\towner: {\n\t\tuserId: string;\n\t\tdisplayName: string;\n\t};\n};\ntype SharedWith = {groupId?:string} & {[sharedKey:string]:boolean};\n\ninterface IAgenda extends ResourceMetadata {\n\ttitle: string;\n\tcolor: string;\n\tshared:SharedWith[];\n}\n\ninterface IAgendaEvent extends ResourceMetadata {\n\ttitle: string;\n\tdescription: string;\n\tlocation: string;\n\tcalendar: string[];\n\tallday: boolean;\n\trecurrence: boolean;\n\tisRecurrent: boolean;\n\tindex: number;\n\tstartMoment: string;\t//\"2021-06-24T11:00:00.000Z\",\n\tendMoment: string;\t\t//\"2021-06-24T11:00:00.000Z\",\n\tnotifStartMoment: string;\t\t//\"24/06/2021 13:00\",\n\tnotifEndMoment: string;\t\t//\"24/06/2021 14:00\",\n\ticsUid: string;\n}\n\ninterface IDisplayedEventData {\n\tdisplayedGroup: string;\n\tdisplayedDate: string;\n}\n\ntype DisplayedEvent = IAgendaEvent & IDisplayedEventData;\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tpublic userEvents:DisplayedEvent[] = [];\n\tpublic dayGroups:string[] = [];\n\t/** Maximum number of events displayed by the widget. */\n\treadonly MAX_EVENTS_DISPLAYED = 5;\n\n\tprivate dateToMoment(date:string) {\n\t\tvar numberHoursLag = L10n.moment( L10n.moment(date).format(\"YYYY MM DD HH:MM\"), 'YYYY MM DD HH:MM' )\n\t\t\t.format('Z')\n\t\t\t.split(':')[0];\n\t\treturn L10n.utc(date).add(numberHoursLag, 'hours');\n\t}\n\n\ttoDisplayedGroup(date:string) {\n\t\treturn this.dateToMoment(date).format('dddd D MMMM YYYY');\t// FIXME localize the format string with i18n ! See formats at https://momentjs.com/docs/#/displaying/format/\n\t}\n\n\ttoDisplayedDate(date:string) {\n\t\treturn this.dateToMoment(date).format('HH:mm');\n\t}\n\t\n\ttoday(format:string){\n\t\treturn L10n.moment().format(format);\n\t}\n\n\tloadEvents() {\n\t\treturn http().get<IAgenda[]>('/calendar/calendars')\n\t\t.then( calendars => {\n\t\t\tif( angular.isArray(calendars) && calendars.length > 0 ) {\n\t\t\t\tlet filter = calendars.map( calendar => 'calendarId='+calendar._id ).join('&');\n\t\t\t\tconsole.log('filter calendarWidget : ' + filter);\n\t\t\t\treturn filter;\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\t\t.then( filterOn => {\n\t\t\treturn filterOn===null? [] : http().get<IAgendaEvent[]>('/calendar/events/widget?' + filterOn + '&nb=' + this.MAX_EVENTS_DISPLAYED);\n\t\t});\n\t}\n\n\tsetEvents( events:IAgendaEvent[] ) {\n\t\tif( angular.isArray(events) ) {\n\t\t\tthis.dayGroups = [];\n\t\t\tthis.userEvents = [];\n\t\t\tlet lastGroup = '';\n\t\t\tevents.forEach( ev => {\n\t\t\t\tconst displayed = Object.assign({\n\t\t\t\t\tdisplayedGroup: this.toDisplayedGroup(ev.startMoment), \n\t\t\t\t\tdisplayedDate: this.toDisplayedDate(ev.startMoment)\n\t\t\t\t}, ev);\n\t\t\t\tthis.userEvents.push( displayed );\n\t\t\t\tif( lastGroup !== displayed.displayedGroup ) {\n\t\t\t\t\tlastGroup = displayed.displayedGroup;\n\t\t\t\t\tthis.dayGroups.push( lastGroup );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./agenda-widget.widget.html').default;\n\tscope = {};\n\tbindToController = true;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeAgendaWidget'];\n\n link(scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): void {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n if( !ctrl ) {\n return;\n\t\t}\n\t\tctrl.loadEvents().then( events => {\n\t\t\tctrl.setEvents( events );\n\t\t\tscope.$apply();\n\t\t});\n\n\t\t// Give an opportunity to track some events from outside of this widget.\n\t\tscope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>) => {\n\t\t\t// Allow events to bubble up.\n\t\t\tif(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n\t\t\tlet event = null;\n\t\t\tif( p && p.detail?.open==='app' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.agenda, p );\n\t\t\t} else if( p && p.detail?.open==='event' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.agenda, p );\n\t\t\t}\n\t\t\tif( event && e.currentTarget ) {\n\t\t\t\te.currentTarget.dispatchEvent(event);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** The agenda widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeAgendaWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeAgendaWidget\", DirectiveFactory );\n"],"names":["userEvents","dayGroups","MAX_EVENTS_DISPLAYED","dateToMoment","date","numberHoursLag","L10n","moment","format","split","utc","add","toDisplayedGroup","this","toDisplayedDate","today","loadEvents","http","get","then","calendars","isArray","length","filter","map","calendar","_id","join","console","log","filterOn","setEvents","events","forEach","ev","displayed","Object","assign","displayedGroup","startMoment","displayedDate","push","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","trackEvent","e","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","agenda","currentTarget","dispatchEvent","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
1
+ {"version":3,"file":"widgets/agenda-widget/agenda-widget.widget.js","mappings":"gIAGA,QAFW,oyC,kLCDX,iBACA,UA4CA,0BACQ,KAAAA,WAA8B,GAC9B,KAAAC,UAAqB,GAEnB,KAAAC,qBAAuB,CAsDjC,QApDS,YAAAC,aAAR,SAAqBC,GACpB,IAAIC,EAAiB,EAAAC,KAAKC,OAAQ,EAAAD,KAAKC,OAAOH,GAAMI,OAAO,oBAAqB,oBAC9EA,OAAO,KACPC,MAAM,KAAK,GACb,OAAO,EAAAH,KAAKI,IAAIN,GAAMO,IAAIN,EAAgB,QAC3C,EAEA,YAAAO,iBAAA,SAAiBR,GAChB,OAAOS,KAAKV,aAAaC,GAAMI,OAAO,mBACvC,EAEA,YAAAM,gBAAA,SAAgBV,GACf,OAAOS,KAAKV,aAAaC,GAAMI,OAAO,QACvC,EAEA,YAAAO,MAAA,SAAMP,GACL,OAAO,EAAAF,KAAKC,SAASC,OAAOA,EAC7B,EAEA,YAAAQ,WAAA,sBACC,OAAO,IAAAC,QAAOC,IAAe,uBAC5BC,KAAM,SAAAC,GACN,GAAI,UAAQC,QAAQD,IAAcA,EAAUE,OAAS,EAAI,CACxD,IAAIC,EAASH,EAAUI,IAAK,SAAAC,GAAY,oBAAcA,EAASC,GAAvB,GAA6BC,KAAK,KAE1E,OADAC,QAAQC,IAAI,2BAA6BN,GAClCA,C,CAER,OAAO,IACR,GACCJ,KAAM,SAAAW,GACN,OAAkB,OAAXA,EAAiB,IAAK,IAAAb,QAAOC,IAAoB,2BAA6BY,EAAW,OAAS,EAAK5B,qBAC/G,EACD,EAEA,YAAA6B,UAAA,SAAWC,GAAX,WACC,GAAI,UAAQX,QAAQW,GAAU,CAC7BnB,KAAKZ,UAAY,GACjBY,KAAKb,WAAa,GAClB,IAAI,EAAY,GAChBgC,EAAOC,QAAS,SAAAC,GACf,IAAMC,EAAYC,OAAOC,OAAO,CAC/BC,eAAgB,EAAK1B,iBAAiBsB,EAAGK,aACzCC,cAAgB,EAAK1B,gBAAgBoB,EAAGK,cACtCL,GACH,EAAKlC,WAAWyC,KAAMN,GAClB,IAAcA,EAAUG,iBAC3B,EAAYH,EAAUG,eACtB,EAAKrC,UAAUwC,KAAM,GAEvB,E,CAEF,EACD,EA1DA,GA6DA,0BACI,KAAAC,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,MAAQ,CAAC,EACT,KAAAC,kBAAmB,EACnB,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,kBA4BZ,QA1BI,YAAAC,KAAA,SAAKN,EAAoBO,EAAaC,EAAmBC,GACrD,IAAMC,EAAuBD,EAAcA,EAAY,GAAmB,KACrEC,IAGXA,EAAKtC,aAAaG,KAAM,SAAAa,GACvBsB,EAAKvB,UAAWC,GAChBY,EAAMW,QACP,GAGAX,EAAMY,WAAa,SAACC,EAASC,G,aAEJ,IAAdA,EAAEC,UAAyBD,EAAEC,SAAU,GAEjD,IAAIC,EAAQ,MACRF,GAAsB,SAAT,QAAR,EAAAA,EAAEG,cAAM,eAAEC,OAERJ,GAAsB,WAAT,QAAR,EAAAA,EAAEG,cAAM,eAAEC,SADzBF,EAAQ,IAAIG,YAAa,EAAAC,wBAAwBC,OAAQP,IAItDE,GAASH,EAAES,eACdT,EAAES,cAAcC,cAAcP,EAEhC,EACD,EACD,EAnCA,IA2CA,IAAAQ,SAAQC,cAAcC,QAAQnD,KAAM,SAAAoD,IAEzB,IAAAC,QAAOC,SAASC,MAAMC,QAAS,EAAQ,MAElD,GAIa,EAAAC,cAAgB,wBAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,kBAd9C,WACC,OAAO,IAAIC,CACZ,E","sources":["webpack://ode-ngjs-front/./src/ts/widgets/agenda-widget/agenda-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/agenda-widget/agenda-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-calendar\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"> <a class=\\\"seemore\\\" href=\\\"/calendar\\\" i18n-title=\\\"agenda-widget.widget.see.all\\\" ng-click=\\\"trackEvent($event, { detail:{'open':'app'} })\\\"> <i18n>agenda-widget.widget.title</i18n> <span class=\\\"seemore-text\\\"><i18n>agenda-widget.widget.see.more</i18n></span> </a> </div> <div class=\\\"widget-options\\\"> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\" dnd-nodrag> <div class=\\\"widget-empty-message\\\" ng-if=\\\"ctrl.userEvents === undefined || ctrl.userEvents.length === 0\\\"> <i18n>agenda-widget.widget.empty</i18n> </div> <ul class=\\\"day-list\\\" ng-if=\\\"ctrl.userEvents !== undefined && ctrl.userEvents.length >= 0\\\"> <li class=\\\"day-item\\\" ng-repeat=\\\"group in ctrl.dayGroups\\\"> <div class=\\\"day-item-title\\\"> {{group}} </div> <ul class=\\\"moment-list\\\"> <li class=\\\"moment-item\\\" ng-repeat=\\\"event in ctrl.userEvents | filter:{displayedGroup: group}\\\"> <span class=\\\"icon\\\"><i class=\\\"fas fa-calendar-alt\\\"></i></span> <span class=\\\"hour\\\" ng-if=\\\"!event.allday\\\">[[event.displayedDate]]</span> <span class=\\\"link\\\"><a href=\\\"/calendar\\\" ng-click=\\\"trackEvent($event, { detail:{'open':'event'} })\\\">[[event.title]]</a></span> </li> </ul> </li> </ul> </div> </div>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective } from \"angular\";\nimport { conf, L10n, notif, http, TrackedActionFromWidget } from \"../../utils\"; \nimport { TrackedAction, TrackedScope } from \"../../utils/TrackedScope\";\n\ntype ResourceMetadata = {\n\t_id: string;\n\tcreated: { $date: number; };\n\tmodified: { $date: number; };\n\towner: {\n\t\tuserId: string;\n\t\tdisplayName: string;\n\t};\n};\ntype SharedWith = {groupId?:string} & {[sharedKey:string]:boolean};\n\ninterface IAgenda extends ResourceMetadata {\n\ttitle: string;\n\tcolor: string;\n\tshared:SharedWith[];\n}\n\ninterface IAgendaEvent extends ResourceMetadata {\n\ttitle: string;\n\tdescription: string;\n\tlocation: string;\n\tcalendar: string[];\n\tallday: boolean;\n\trecurrence: boolean;\n\tisRecurrent: boolean;\n\tindex: number;\n\tstartMoment: string;\t//\"2021-06-24T11:00:00.000Z\",\n\tendMoment: string;\t\t//\"2021-06-24T11:00:00.000Z\",\n\tnotifStartMoment: string;\t\t//\"24/06/2021 13:00\",\n\tnotifEndMoment: string;\t\t//\"24/06/2021 14:00\",\n\ticsUid: string;\n}\n\ninterface IDisplayedEventData {\n\tdisplayedGroup: string;\n\tdisplayedDate: string;\n}\n\ntype DisplayedEvent = IAgendaEvent & IDisplayedEventData;\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tpublic userEvents:DisplayedEvent[] = [];\n\tpublic dayGroups:string[] = [];\n\t/** Maximum number of events displayed by the widget. */\n\treadonly MAX_EVENTS_DISPLAYED = 5;\n\n\tprivate dateToMoment(date:string) {\n\t\tvar numberHoursLag = L10n.moment( L10n.moment(date).format(\"YYYY MM DD HH:MM\"), 'YYYY MM DD HH:MM' )\n\t\t\t.format('Z')\n\t\t\t.split(':')[0];\n\t\treturn L10n.utc(date).add(numberHoursLag, 'hours');\n\t}\n\n\ttoDisplayedGroup(date:string) {\n\t\treturn this.dateToMoment(date).format('dddd D MMMM YYYY');\t// FIXME localize the format string with i18n ! See formats at https://momentjs.com/docs/#/displaying/format/\n\t}\n\n\ttoDisplayedDate(date:string) {\n\t\treturn this.dateToMoment(date).format('HH:mm');\n\t}\n\t\n\ttoday(format:string){\n\t\treturn L10n.moment().format(format);\n\t}\n\n\tloadEvents() {\n\t\treturn http().get<IAgenda[]>('/calendar/calendars')\n\t\t.then( calendars => {\n\t\t\tif( angular.isArray(calendars) && calendars.length > 0 ) {\n\t\t\t\tlet filter = calendars.map( calendar => 'calendarId='+calendar._id ).join('&');\n\t\t\t\tconsole.log('filter calendarWidget : ' + filter);\n\t\t\t\treturn filter;\n\t\t\t}\n\t\t\treturn null;\n\t\t})\n\t\t.then( filterOn => {\n\t\t\treturn filterOn===null? [] : http().get<IAgendaEvent[]>('/calendar/events/widget?' + filterOn + '&nb=' + this.MAX_EVENTS_DISPLAYED);\n\t\t});\n\t}\n\n\tsetEvents( events:IAgendaEvent[] ) {\n\t\tif( angular.isArray(events) ) {\n\t\t\tthis.dayGroups = [];\n\t\t\tthis.userEvents = [];\n\t\t\tlet lastGroup = '';\n\t\t\tevents.forEach( ev => {\n\t\t\t\tconst displayed = Object.assign({\n\t\t\t\t\tdisplayedGroup: this.toDisplayedGroup(ev.startMoment), \n\t\t\t\t\tdisplayedDate: this.toDisplayedDate(ev.startMoment)\n\t\t\t\t}, ev);\n\t\t\t\tthis.userEvents.push( displayed );\n\t\t\t\tif( lastGroup !== displayed.displayedGroup ) {\n\t\t\t\t\tlastGroup = displayed.displayedGroup;\n\t\t\t\t\tthis.dayGroups.push( lastGroup );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./agenda-widget.widget.html').default;\n\tscope = {};\n\tbindToController = true;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeAgendaWidget'];\n\n link(scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): void {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n if( !ctrl ) {\n return;\n\t\t}\n\t\tctrl.loadEvents().then( events => {\n\t\t\tctrl.setEvents( events );\n\t\t\tscope.$apply();\n\t\t});\n\n\t\t// Give an opportunity to track some events from outside of this widget.\n\t\tscope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>) => {\n\t\t\t// Allow events to bubble up.\n\t\t\tif(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n\t\t\tlet event = null;\n\t\t\tif( p && p.detail?.open==='app' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.agenda, p );\n\t\t\t} else if( p && p.detail?.open==='event' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.agenda, p );\n\t\t\t}\n\t\t\tif( event && e.currentTarget ) {\n\t\t\t\te.currentTarget.dispatchEvent(event);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** The agenda widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeAgendaWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeAgendaWidget\", DirectiveFactory );\n"],"names":["userEvents","dayGroups","MAX_EVENTS_DISPLAYED","dateToMoment","date","numberHoursLag","L10n","moment","format","split","utc","add","toDisplayedGroup","this","toDisplayedDate","today","loadEvents","http","get","then","calendars","isArray","length","filter","map","calendar","_id","join","console","log","filterOn","setEvents","events","forEach","ev","displayed","Object","assign","displayedGroup","startMoment","displayedDate","push","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","trackEvent","e","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","agenda","currentTarget","dispatchEvent","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[364],{7562:(t,e,o)=>{o.d(e,{Z:()=>r});const r='<div class="widget-bookmarks"> <div class="widget-header"> <div class="subtitle"><i18n>bookmark-widget.widget.title</i18n></div> <div class="widget-options"> <div class="tools"> <a href="" class="tool tool-option" i18n-title="bookmark-widget.widget.manage.bookmarks" ng-click="ctrl.display.manage = true"> <i class="fas fa-cog"></i> </a> </div> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body"> <div class="widget-empty-message link" ng-click="ctrl.display.manage = true" ng-if="ctrl.bookmarks.length === 0"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class="bookmark-list" ng-if="!ctrl.bookmarks.isEmpty()"> <li class="bookmark-item" ng-repeat="bookmark in ctrl.bookmarks | orderBy:\'name\'"> <a class="link" href="[[bookmark.url]]" target="_blank" ng-click="trackEvent($event, {detail:{\'open\':bookmark.url} })"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size="lg" visible="ctrl.display.manage" on-close="ctrl.display.manage = false" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if="ctrl.bookmarks.length === 0"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class="table table-hover" ng-if="ctrl.bookmarks.length !== 0"> <thead> <tr class="bg-secondary text-light"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class="c-pointer" ng-repeat="bookmark in ctrl.bookmarks" ng-class="{ \'table-active\' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }"> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.name]]</td> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.url]]</td> <td ng-click="ctrl.deleteBookmark(bookmark)"> <button type="button" class="btn-close" aria-label="Close"></button> </td> </tr> </tbody> </table> <form id="formCreated" autocomplete="off" class="mt-5" ng-if="ctrl.isCreatingBookmark()"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class="form-group row mt-3"> <label for="inputCreatedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedName" class="form-control auto-focused" ng-model="ctrl.createdBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputCreatedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedUrl" class="form-control" ng-model="ctrl.createdBookmark.url"/> </div> </div> </form> <form id="formEdited" autocomplete="off" class="mt-5" ng-if="ctrl.isEditingBookmark()"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class="form-group row mt-3"> <label for="inputEditedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedName" class="form-control auto-focused" ng-model="ctrl.editedBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputEditedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedUrl" class="form-control" ng-model="ctrl.editedBookmark.url"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if="!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()"> <button class="btn btn-primary" ng-click="ctrl.newBookmark()"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if="ctrl.isCreatingBookmark()"> <button form="formCreated" type="reset" class="btn btn-light" ng-click="ctrl.cancelCreate()"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form="formCreated" type="submit" class="btn btn-primary" ng-click="ctrl.createBookmark()"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if="ctrl.isEditingBookmark()"> <button form="formEdited" type="reset" class="btn btn-light" ng-click="ctrl.cancelEdit()"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form="formEdited" type="submit" class="btn btn-primary" ng-click="ctrl.updateBookmark()"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>'},9278:function(t,e,o){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.odeModuleName=void 0;var i=r(o(4202)),a=o(9419),n=o(6731);function d(t){return!t||0===t.trim().length}var l=function(){function t(t){this.name="",this.url="",this.flatCopy(t)}return t.prototype.flatCopy=function(t){return t&&Object.assign(this,t),this},t.prototype.create=function(){var t=this;return d(this.name)?(n.notify.error("bookmark-widget.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark-widget.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().postJson("/bookmark",this).then((function(e){if(200!==(0,a.http)().latestResponse.status)throw"Rejected bookmark";return t.flatCopy(e)})).catch((function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t}))},t.prototype.update=function(){var t=this;return d(this.name)?(n.notify.error("bookmark.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().putJson("/bookmark/".concat(this._id),this).then((function(){return t})).catch((function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t}))},t.prototype.delete=function(){var t=this;return(0,a.http)().delete("/bookmark/".concat(this._id)).then((function(){return t}))},t.prototype.toJSON=function(){return{name:this.name,url:this.url}},t}(),s=function(){function t(){this.bookmarks=[],this.display={manage:!1}}return t.prototype.getBookmarks=function(){var t=this;return(0,a.http)().get("/bookmark").then((function(e){e&&e.bookmarks?t.bookmarks=e.bookmarks.map((function(t){return new l(t)})):t.bookmarks=[],t.apply&&t.apply()}))},t.prototype.removeHashStart=function(t){return t.replace("#start","")},t.prototype.createBookmark=function(){var t=this;this.createdBookmark&&(this.createdBookmark.url=this.removeHashStart(this.createdBookmark.url),this.createdBookmark.create().then((function(e){t.bookmarks.push(e),t.cancelCreate(),t.apply&&t.apply()})))},t.prototype.updateBookmark=function(){var t=this;if(this.editedBookmark){this.editedBookmark.url=this.removeHashStart(this.editedBookmark.url);var e=this.editedBookmark;e.update().then((function(){var o=t.bookmarks.find((function(t){return t._id===e._id}));null==o||o.flatCopy(e),t.cancelEdit(),t.apply&&t.apply()}))}},t.prototype.deleteBookmark=function(t){var e=this;t.delete().then((function(t){var o=e.bookmarks.indexOf(t);e.bookmarks.splice(o,1),e.cancelEdit(),e.apply&&e.apply()}))},t.prototype.newBookmark=function(){this.createdBookmark=new l({url:"http://",name:""}),this.cancelEdit()},t.prototype.isCreatingBookmark=function(){return i.default.isDefined(this.createdBookmark)},t.prototype.isEditingBookmark=function(){return i.default.isDefined(this.editedBookmark)},t.prototype.editBookmark=function(t){this.editedBookmark=new l(t),this.cancelCreate()},t.prototype.cancelCreate=function(){this.createdBookmark=void 0},t.prototype.cancelEdit=function(){this.editedBookmark=void 0},t}(),m=function(){function t(){this.restrict="E",this.template=o(7562).Z,this.controller=[s],this.controllerAs="ctrl",this.require=["odeBookmarkWidget"]}return t.prototype.link=function(t,e,o,r){var i=r?r[0]:null;i&&(i.getBookmarks().then((function(){t.$apply()})),i.apply=function(){t.$apply()},t.trackEvent=function(t,e){var o;void 0===e.bubbles&&(e.bubbles=!0);var r=null;e&&"string"==typeof(null===(o=e.detail)||void 0===o?void 0:o.open)&&(r=new CustomEvent(a.TrackedActionFromWidget.bookmark,e)),r&&t.currentTarget&&t.currentTarget.dispatchEvent(r)})},t}();(0,a.notif)().onLangReady().promise.then((function(t){(0,a.conf)().Platform.idiom.addKeys(o(2731))})),e.odeModuleName="odeBookmarkWidgetModule",i.default.module(e.odeModuleName,[]).directive("odeBookmarkWidget",(function(){return new m}))},2731:t=>{t.exports=JSON.parse('{"bookmark-widget.widget.title":"Liens utiles","bookmark-widget":"Liens utiles","bookmark-widget.widget.createform.cancel":"Annuler","bookmark-widget.widget.createform.name":"Nom","bookmark-widget.widget.createform.save":"Enregistrer","bookmark-widget.widget.createform.title":"Nouveau lien utile","bookmark-widget.widget.createform.url":"Adresse","bookmark-widget.widget.edit.bookmark":"Mettre à jour le lien utile","bookmark-widget.widget.editform.cancel":"Annuler","bookmark-widget.widget.editform.name":"Nom","bookmark-widget.widget.editform.save":"Enregistrer","bookmark-widget.widget.editform.url":"Adresse","bookmark-widget.widget.empty":"Gardez à portée de main les sites web que vous utilisez souvent.","bookmark-widget.widget.form.name.is.empty":"Le champ \'nom\' est obligatoire","bookmark-widget.widget.form.url.is.empty":"Le champ \'adresse\' est obligatoire","bookmark-widget.widget.manage.empty":"Aucun lien utile","bookmark-widget.widget.manage.bookmarks":"Gérer les liens utiles","bookmark-widget.widget.manage.title":"Gérer les liens utiles","bookmark-widget.widget.managetable.name":"Nom","bookmark-widget.widget.managetable.url":"Adresse","bookmark-widget.widget.new.bookmark":"Nouveau lien utile"}')}}]);
1
+ "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[364],{7562:(t,e,o)=>{o.d(e,{Z:()=>r});const r='<div class="widget-bookmarks"> <div class="widget-header"> <div class="subtitle"><i18n>bookmark-widget.widget.title</i18n></div> <div class="widget-options"> <div class="tools"> <a href="" class="tool tool-option" i18n-title="bookmark-widget.widget.manage.bookmarks" ng-click="ctrl.display.manage = true"> <i class="fas fa-cog"></i> </a> </div> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body"> <div class="widget-empty-message link" ng-click="ctrl.display.manage = true" ng-if="ctrl.bookmarks.length === 0"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class="bookmark-list" ng-if="!ctrl.bookmarks.isEmpty()"> <li class="bookmark-item" ng-repeat="bookmark in ctrl.bookmarks | orderBy:\'name\'"> <a class="link" href="[[bookmark.url]]" target="_blank" ng-click="trackEvent($event, {detail:{\'open\':bookmark.url} })"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size="lg" visible="ctrl.display.manage" on-close="ctrl.display.manage = false" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if="ctrl.bookmarks.length === 0"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class="table table-hover" ng-if="ctrl.bookmarks.length !== 0"> <thead> <tr class="bg-secondary text-light"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class="c-pointer" ng-repeat="bookmark in ctrl.bookmarks" ng-class="{ \'table-active\' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }"> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.name]]</td> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.url]]</td> <td ng-click="ctrl.deleteBookmark(bookmark)"> <button type="button" class="btn-close" aria-label="Close"></button> </td> </tr> </tbody> </table> <form id="formCreated" autocomplete="off" class="mt-5" ng-if="ctrl.isCreatingBookmark()"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class="form-group row mt-3"> <label for="inputCreatedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedName" class="form-control auto-focused" ng-model="ctrl.createdBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputCreatedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedUrl" class="form-control" ng-model="ctrl.createdBookmark.url"/> </div> </div> </form> <form id="formEdited" autocomplete="off" class="mt-5" ng-if="ctrl.isEditingBookmark()"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class="form-group row mt-3"> <label for="inputEditedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedName" class="form-control auto-focused" ng-model="ctrl.editedBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputEditedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedUrl" class="form-control" ng-model="ctrl.editedBookmark.url"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if="!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()"> <button class="btn btn-primary" ng-click="ctrl.newBookmark()"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if="ctrl.isCreatingBookmark()"> <button form="formCreated" type="reset" class="btn btn-light" ng-click="ctrl.cancelCreate()"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form="formCreated" type="submit" class="btn btn-primary" ng-click="ctrl.createBookmark()"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if="ctrl.isEditingBookmark()"> <button form="formEdited" type="reset" class="btn btn-light" ng-click="ctrl.cancelEdit()"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form="formEdited" type="submit" class="btn btn-primary" ng-click="ctrl.updateBookmark()"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>'},9278:function(t,e,o){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.odeModuleName=void 0;var i=r(o(4202)),a=o(9419),n=o(6731);function d(t){return!t||0===t.trim().length}var l=function(){function t(t){this.name="",this.url="",this.flatCopy(t)}return t.prototype.flatCopy=function(t){return t&&Object.assign(this,t),this},t.prototype.create=function(){var t=this;return d(this.name)?(n.notify.error("bookmark-widget.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark-widget.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().postJson("/bookmark",this).then(function(e){if(200!==(0,a.http)().latestResponse.status)throw"Rejected bookmark";return t.flatCopy(e)}).catch(function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t})},t.prototype.update=function(){var t=this;return d(this.name)?(n.notify.error("bookmark.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().putJson("/bookmark/".concat(this._id),this).then(function(){return t}).catch(function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t})},t.prototype.delete=function(){var t=this;return(0,a.http)().delete("/bookmark/".concat(this._id)).then(function(){return t})},t.prototype.toJSON=function(){return{name:this.name,url:this.url}},t}(),s=function(){function t(){this.bookmarks=[],this.display={manage:!1}}return t.prototype.getBookmarks=function(){var t=this;return(0,a.http)().get("/bookmark").then(function(e){e&&e.bookmarks?t.bookmarks=e.bookmarks.map(function(t){return new l(t)}):t.bookmarks=[],t.apply&&t.apply()})},t.prototype.removeHashStart=function(t){return t.replace("#start","")},t.prototype.createBookmark=function(){var t=this;this.createdBookmark&&(this.createdBookmark.url=this.removeHashStart(this.createdBookmark.url),this.createdBookmark.create().then(function(e){t.bookmarks.push(e),t.cancelCreate(),t.apply&&t.apply()}))},t.prototype.updateBookmark=function(){var t=this;if(this.editedBookmark){this.editedBookmark.url=this.removeHashStart(this.editedBookmark.url);var e=this.editedBookmark;e.update().then(function(){var o=t.bookmarks.find(function(t){return t._id===e._id});null==o||o.flatCopy(e),t.cancelEdit(),t.apply&&t.apply()})}},t.prototype.deleteBookmark=function(t){var e=this;t.delete().then(function(t){var o=e.bookmarks.indexOf(t);e.bookmarks.splice(o,1),e.cancelEdit(),e.apply&&e.apply()})},t.prototype.newBookmark=function(){this.createdBookmark=new l({url:"http://",name:""}),this.cancelEdit()},t.prototype.isCreatingBookmark=function(){return i.default.isDefined(this.createdBookmark)},t.prototype.isEditingBookmark=function(){return i.default.isDefined(this.editedBookmark)},t.prototype.editBookmark=function(t){this.editedBookmark=new l(t),this.cancelCreate()},t.prototype.cancelCreate=function(){this.createdBookmark=void 0},t.prototype.cancelEdit=function(){this.editedBookmark=void 0},t}(),m=function(){function t(){this.restrict="E",this.template=o(7562).Z,this.controller=[s],this.controllerAs="ctrl",this.require=["odeBookmarkWidget"]}return t.prototype.link=function(t,e,o,r){var i=r?r[0]:null;i&&(i.getBookmarks().then(function(){t.$apply()}),i.apply=function(){t.$apply()},t.trackEvent=function(t,e){var o;void 0===e.bubbles&&(e.bubbles=!0);var r=null;e&&"string"==typeof(null===(o=e.detail)||void 0===o?void 0:o.open)&&(r=new CustomEvent(a.TrackedActionFromWidget.bookmark,e)),r&&t.currentTarget&&t.currentTarget.dispatchEvent(r)})},t}();(0,a.notif)().onLangReady().promise.then(function(t){(0,a.conf)().Platform.idiom.addKeys(o(2731))}),e.odeModuleName="odeBookmarkWidgetModule",i.default.module(e.odeModuleName,[]).directive("odeBookmarkWidget",function(){return new m})},2731:t=>{t.exports=JSON.parse('{"bookmark-widget":"Liens utiles","bookmark-widget.widget.createform.cancel":"Annuler","bookmark-widget.widget.createform.name":"Nom","bookmark-widget.widget.createform.save":"Enregistrer","bookmark-widget.widget.createform.title":"Nouveau lien utile","bookmark-widget.widget.createform.url":"Adresse","bookmark-widget.widget.edit.bookmark":"Mettre à jour le lien utile","bookmark-widget.widget.editform.cancel":"Annuler","bookmark-widget.widget.editform.name":"Nom","bookmark-widget.widget.editform.save":"Enregistrer","bookmark-widget.widget.editform.url":"Adresse","bookmark-widget.widget.empty":"Gardez à portée de main les sites web que vous utilisez souvent.","bookmark-widget.widget.form.name.is.empty":"Le champ \'nom\' est obligatoire","bookmark-widget.widget.form.url.is.empty":"Le champ \'adresse\' est obligatoire","bookmark-widget.widget.manage.bookmarks":"Gérer les liens utiles","bookmark-widget.widget.manage.empty":"Aucun lien utile","bookmark-widget.widget.manage.title":"Gérer les liens utiles","bookmark-widget.widget.managetable.name":"Nom","bookmark-widget.widget.managetable.url":"Adresse","bookmark-widget.widget.new.bookmark":"Nouveau lien utile","bookmark-widget.widget.title":"Liens utiles"}')}}]);
2
2
  //# sourceMappingURL=bookmark-widget.widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"widgets/bookmark-widget/bookmark-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<div class=\\\"widget-bookmarks\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>bookmark-widget.widget.title</i18n></div> <div class=\\\"widget-options\\\"> <div class=\\\"tools\\\"> <a href=\\\"\\\" class=\\\"tool tool-option\\\" i18n-title=\\\"bookmark-widget.widget.manage.bookmarks\\\" ng-click=\\\"ctrl.display.manage = true\\\"> <i class=\\\"fas fa-cog\\\"></i> </a> </div> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\"> <div class=\\\"widget-empty-message link\\\" ng-click=\\\"ctrl.display.manage = true\\\" ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class=\\\"bookmark-list\\\" ng-if=\\\"!ctrl.bookmarks.isEmpty()\\\"> <li class=\\\"bookmark-item\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks | orderBy:'name'\\\"> <a class=\\\"link\\\" href=\\\"[[bookmark.url]]\\\" target=\\\"_blank\\\" ng-click=\\\"trackEvent($event, {detail:{'open':bookmark.url} })\\\"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size=\\\"lg\\\" visible=\\\"ctrl.display.manage\\\" on-close=\\\"ctrl.display.manage = false\\\" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class=\\\"table table-hover\\\" ng-if=\\\"ctrl.bookmarks.length !== 0\\\"> <thead> <tr class=\\\"bg-secondary text-light\\\"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class=\\\"c-pointer\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks\\\" ng-class=\\\"{ 'table-active' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }\\\"> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.name]]</td> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.url]]</td> <td ng-click=\\\"ctrl.deleteBookmark(bookmark)\\\"> <button type=\\\"button\\\" class=\\\"btn-close\\\" aria-label=\\\"Close\\\"></button> </td> </tr> </tbody> </table> <form id=\\\"formCreated\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.createdBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.createdBookmark.url\\\"/> </div> </div> </form> <form id=\\\"formEdited\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isEditingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.editedBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.editedBookmark.url\\\"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if=\\\"!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()\\\"> <button class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.newBookmark()\\\"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <button form=\\\"formCreated\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelCreate()\\\"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form=\\\"formCreated\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.createBookmark()\\\"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if=\\\"ctrl.isEditingBookmark()\\\"> <button form=\\\"formEdited\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelEdit()\\\"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form=\\\"formEdited\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.updateBookmark()\\\"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif, http, TrackedAction, TrackedScope, TrackedActionFromWidget } from \"../../utils\";\nimport { notify } from \"../../services\";\n\n\n// UTILS\nfunction isEmpty(str:string) {\n\treturn (!str || str.trim().length === 0);\n}\n\n// TYPES\ninterface IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n}\n\ninterface IBookmarkMetadata {\n\t_id:{$oid: string};\n\towner: {\n\t\t userId: string;\n\t\t displayName: string;\n\t},\n\tbookmarks: IBookmark[];\n\tmodified: {$date: number};\n\tcreated: {$date: number};\n}\n\nclass Bookmark implements IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n\n\tconstructor( model?:IBookmark ) {\n\t\tthis.name = \"\";\n\t\tthis.url = \"\";\n\t\tthis.flatCopy(model);\n\t}\n\n\tflatCopy( model?:IBookmark ):Bookmark {\n\t\tif( model ) {\n\t\t\tObject.assign(this, model);\n\t\t}\n\t\treturn this;\n\t}\n\n\tcreate():Promise<Bookmark> {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().postJson<IBookmark,IBookmark>('/bookmark', this)\n\t\t.then( response => {\n\t\t\tif( http().latestResponse.status !== 200 ) {\n\t\t\t\tthrow \"Rejected bookmark\";\n\t\t\t}\n\t\t\treturn this.flatCopy( response );\n\t\t})\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tupdate() {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().putJson(`/bookmark/${this._id}`, this)\n\t\t.then( () => this )\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tdelete() {\n\t\treturn http().delete(`/bookmark/${this._id}`)\n\t\t.then( () => this );\n\t}\n\t\n\ttoJSON() {\n\t\treturn {\n\t\t\tname : this.name,\n\t\t\turl : this.url\n\t\t};\n\t}\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tbookmarks: Bookmark[] = [];\n\tcreatedBookmark?: Bookmark;\n\teditedBookmark?: Bookmark;\n\tdisplay = {\n\t\tmanage: false,\n\t};\n\tpublic apply?:()=>void;\n\n\tpublic getBookmarks():Promise<void> {\n\t\treturn http().get<IBookmarkMetadata>('/bookmark')\n\t\t.then( response => {\n\t\t\tif(response && response.bookmarks) {\n\t\t\t\tthis.bookmarks = response.bookmarks.map( b => new Bookmark(b) );\n\t\t\t} else {\n\t\t\t\tthis.bookmarks = [];\n\t\t\t}\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\n\tremoveHashStart(url: string) {\n\t\treturn url.replace('#start', '');\n\t}\n\n\tcreateBookmark() {\n\t\tif( this.createdBookmark ) {\n\t\t\tthis.createdBookmark.url = this.removeHashStart(this.createdBookmark.url);\n\t\t\tthis.createdBookmark.create().then( b => {\n\t\t\t\tthis.bookmarks.push( b );\n\t\t\t\tthis.cancelCreate();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\t\n\tupdateBookmark() {\n\t\tif( this.editedBookmark ) {\n\t\t\tthis.editedBookmark.url = this.removeHashStart(this.editedBookmark.url);\n\t\t\tconst edited = this.editedBookmark;\n\t\t\tedited.update()\n\t\t\t.then( () => {\n\t\t\t\tconst aBookmark = this.bookmarks.find( pBookmark => pBookmark._id===edited._id );\n\t\t\t\taBookmark?.flatCopy( edited );\n\t\t\t\tthis.cancelEdit();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\n\t\n\n\tdeleteBookmark( b:Bookmark ) {\n\t\tb.delete().then( b => {\n\t\t\tlet index = this.bookmarks.indexOf(b);\n\t\t\tthis.bookmarks.splice(index, 1);\n\t\t\tthis.cancelEdit(); // just in case\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\t\n\t// Controller\n\tnewBookmark() {\n\t\tthis.createdBookmark = new Bookmark( {url: \"http://\", name:\"\"} );\n\t\tthis.cancelEdit();\n\t}\n\n\tisCreatingBookmark() {\n\t\treturn angular.isDefined(this.createdBookmark);\n\t}\n\n\tisEditingBookmark() {\n\t\treturn angular.isDefined(this.editedBookmark);\n\t}\n\t\n\teditBookmark(bookmark:IBookmark) {\n\t\tthis.editedBookmark = new Bookmark( bookmark );\n\t\tthis.cancelCreate();\n\t}\n\t\n\tcancelCreate() {\n\t\tthis.createdBookmark = undefined;\n\t}\n\n\tcancelEdit() {\n\t\tthis.editedBookmark = undefined;\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./bookmark-widget.widget.html').default;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeBookmarkWidget'];\n\n link(scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): void {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n\t\tif( ! ctrl ) return;\n\n\t\tctrl.getBookmarks().then( () => {\n\t\t\tscope.$apply();\n\t\t});\n\n\t\tctrl.apply = () => {\n\t\t\tscope.$apply();\n\t\t};\n\n\t\t// Give an opportunity to track some events from outside of this widget.\n\t\tscope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>) => {\n\t\t\t// Allow events to bubble up.\n\t\t\tif(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n\t\t\tlet event = null;\n\t\t\tif( p && typeof p.detail?.open==='string' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.bookmark, p );\n\t\t\t}\n\t\t\tif( event && e.currentTarget ) {\n\t\t\t\te.currentTarget.dispatchEvent(event);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** The bookmark-widget widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeBookmarkWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeBookmarkWidget\", DirectiveFactory );\n"],"names":["isEmpty","str","trim","length","model","this","name","url","flatCopy","Object","assign","create","notify","error","Promise","reject","http","postJson","then","response","latestResponse","status","catch","e","JSON","parse","statusText","update","putJson","_id","delete","toJSON","bookmarks","display","manage","getBookmarks","get","map","b","Bookmark","apply","removeHashStart","replace","createBookmark","createdBookmark","push","cancelCreate","updateBookmark","editedBookmark","aBookmark","find","pBookmark","cancelEdit","deleteBookmark","index","indexOf","splice","newBookmark","isCreatingBookmark","isDefined","isEditingBookmark","editBookmark","bookmark","undefined","restrict","template","controller","Controller","controllerAs","require","link","scope","elem","attrs","controllers","ctrl","$apply","trackEvent","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","currentTarget","dispatchEvent","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
1
+ {"version":3,"file":"widgets/bookmark-widget/bookmark-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<div class=\\\"widget-bookmarks\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>bookmark-widget.widget.title</i18n></div> <div class=\\\"widget-options\\\"> <div class=\\\"tools\\\"> <a href=\\\"\\\" class=\\\"tool tool-option\\\" i18n-title=\\\"bookmark-widget.widget.manage.bookmarks\\\" ng-click=\\\"ctrl.display.manage = true\\\"> <i class=\\\"fas fa-cog\\\"></i> </a> </div> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\"> <div class=\\\"widget-empty-message link\\\" ng-click=\\\"ctrl.display.manage = true\\\" ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class=\\\"bookmark-list\\\" ng-if=\\\"!ctrl.bookmarks.isEmpty()\\\"> <li class=\\\"bookmark-item\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks | orderBy:'name'\\\"> <a class=\\\"link\\\" href=\\\"[[bookmark.url]]\\\" target=\\\"_blank\\\" ng-click=\\\"trackEvent($event, {detail:{'open':bookmark.url} })\\\"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size=\\\"lg\\\" visible=\\\"ctrl.display.manage\\\" on-close=\\\"ctrl.display.manage = false\\\" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class=\\\"table table-hover\\\" ng-if=\\\"ctrl.bookmarks.length !== 0\\\"> <thead> <tr class=\\\"bg-secondary text-light\\\"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class=\\\"c-pointer\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks\\\" ng-class=\\\"{ 'table-active' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }\\\"> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.name]]</td> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.url]]</td> <td ng-click=\\\"ctrl.deleteBookmark(bookmark)\\\"> <button type=\\\"button\\\" class=\\\"btn-close\\\" aria-label=\\\"Close\\\"></button> </td> </tr> </tbody> </table> <form id=\\\"formCreated\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.createdBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.createdBookmark.url\\\"/> </div> </div> </form> <form id=\\\"formEdited\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isEditingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.editedBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.editedBookmark.url\\\"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if=\\\"!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()\\\"> <button class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.newBookmark()\\\"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <button form=\\\"formCreated\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelCreate()\\\"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form=\\\"formCreated\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.createBookmark()\\\"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if=\\\"ctrl.isEditingBookmark()\\\"> <button form=\\\"formEdited\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelEdit()\\\"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form=\\\"formEdited\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.updateBookmark()\\\"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif, http, TrackedAction, TrackedScope, TrackedActionFromWidget } from \"../../utils\";\nimport { notify } from \"../../services\";\n\n\n// UTILS\nfunction isEmpty(str:string) {\n\treturn (!str || str.trim().length === 0);\n}\n\n// TYPES\ninterface IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n}\n\ninterface IBookmarkMetadata {\n\t_id:{$oid: string};\n\towner: {\n\t\t userId: string;\n\t\t displayName: string;\n\t},\n\tbookmarks: IBookmark[];\n\tmodified: {$date: number};\n\tcreated: {$date: number};\n}\n\nclass Bookmark implements IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n\n\tconstructor( model?:IBookmark ) {\n\t\tthis.name = \"\";\n\t\tthis.url = \"\";\n\t\tthis.flatCopy(model);\n\t}\n\n\tflatCopy( model?:IBookmark ):Bookmark {\n\t\tif( model ) {\n\t\t\tObject.assign(this, model);\n\t\t}\n\t\treturn this;\n\t}\n\n\tcreate():Promise<Bookmark> {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().postJson<IBookmark,IBookmark>('/bookmark', this)\n\t\t.then( response => {\n\t\t\tif( http().latestResponse.status !== 200 ) {\n\t\t\t\tthrow \"Rejected bookmark\";\n\t\t\t}\n\t\t\treturn this.flatCopy( response );\n\t\t})\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tupdate() {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().putJson(`/bookmark/${this._id}`, this)\n\t\t.then( () => this )\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tdelete() {\n\t\treturn http().delete(`/bookmark/${this._id}`)\n\t\t.then( () => this );\n\t}\n\t\n\ttoJSON() {\n\t\treturn {\n\t\t\tname : this.name,\n\t\t\turl : this.url\n\t\t};\n\t}\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tbookmarks: Bookmark[] = [];\n\tcreatedBookmark?: Bookmark;\n\teditedBookmark?: Bookmark;\n\tdisplay = {\n\t\tmanage: false,\n\t};\n\tpublic apply?:()=>void;\n\n\tpublic getBookmarks():Promise<void> {\n\t\treturn http().get<IBookmarkMetadata>('/bookmark')\n\t\t.then( response => {\n\t\t\tif(response && response.bookmarks) {\n\t\t\t\tthis.bookmarks = response.bookmarks.map( b => new Bookmark(b) );\n\t\t\t} else {\n\t\t\t\tthis.bookmarks = [];\n\t\t\t}\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\n\tremoveHashStart(url: string) {\n\t\treturn url.replace('#start', '');\n\t}\n\n\tcreateBookmark() {\n\t\tif( this.createdBookmark ) {\n\t\t\tthis.createdBookmark.url = this.removeHashStart(this.createdBookmark.url);\n\t\t\tthis.createdBookmark.create().then( b => {\n\t\t\t\tthis.bookmarks.push( b );\n\t\t\t\tthis.cancelCreate();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\t\n\tupdateBookmark() {\n\t\tif( this.editedBookmark ) {\n\t\t\tthis.editedBookmark.url = this.removeHashStart(this.editedBookmark.url);\n\t\t\tconst edited = this.editedBookmark;\n\t\t\tedited.update()\n\t\t\t.then( () => {\n\t\t\t\tconst aBookmark = this.bookmarks.find( pBookmark => pBookmark._id===edited._id );\n\t\t\t\taBookmark?.flatCopy( edited );\n\t\t\t\tthis.cancelEdit();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\n\t\n\n\tdeleteBookmark( b:Bookmark ) {\n\t\tb.delete().then( b => {\n\t\t\tlet index = this.bookmarks.indexOf(b);\n\t\t\tthis.bookmarks.splice(index, 1);\n\t\t\tthis.cancelEdit(); // just in case\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\t\n\t// Controller\n\tnewBookmark() {\n\t\tthis.createdBookmark = new Bookmark( {url: \"http://\", name:\"\"} );\n\t\tthis.cancelEdit();\n\t}\n\n\tisCreatingBookmark() {\n\t\treturn angular.isDefined(this.createdBookmark);\n\t}\n\n\tisEditingBookmark() {\n\t\treturn angular.isDefined(this.editedBookmark);\n\t}\n\t\n\teditBookmark(bookmark:IBookmark) {\n\t\tthis.editedBookmark = new Bookmark( bookmark );\n\t\tthis.cancelCreate();\n\t}\n\t\n\tcancelCreate() {\n\t\tthis.createdBookmark = undefined;\n\t}\n\n\tcancelEdit() {\n\t\tthis.editedBookmark = undefined;\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./bookmark-widget.widget.html').default;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeBookmarkWidget'];\n\n link(scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): void {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n\t\tif( ! ctrl ) return;\n\n\t\tctrl.getBookmarks().then( () => {\n\t\t\tscope.$apply();\n\t\t});\n\n\t\tctrl.apply = () => {\n\t\t\tscope.$apply();\n\t\t};\n\n\t\t// Give an opportunity to track some events from outside of this widget.\n\t\tscope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>) => {\n\t\t\t// Allow events to bubble up.\n\t\t\tif(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n\t\t\tlet event = null;\n\t\t\tif( p && typeof p.detail?.open==='string' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.bookmark, p );\n\t\t\t}\n\t\t\tif( event && e.currentTarget ) {\n\t\t\t\te.currentTarget.dispatchEvent(event);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** The bookmark-widget widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeBookmarkWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeBookmarkWidget\", DirectiveFactory );\n"],"names":["isEmpty","str","trim","length","model","this","name","url","flatCopy","Object","assign","create","notify","error","Promise","reject","http","postJson","then","response","latestResponse","status","catch","e","JSON","parse","statusText","update","putJson","_id","delete","toJSON","bookmarks","display","manage","getBookmarks","get","map","b","Bookmark","apply","removeHashStart","replace","createBookmark","createdBookmark","push","cancelCreate","updateBookmark","editedBookmark","aBookmark","find","pBookmark","cancelEdit","deleteBookmark","index","indexOf","splice","newBookmark","isCreatingBookmark","isDefined","isEditingBookmark","editBookmark","bookmark","undefined","restrict","template","controller","Controller","controllerAs","require","link","scope","elem","attrs","controllers","ctrl","$apply","trackEvent","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","currentTarget","dispatchEvent","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[539],{3852:(e,t,i)=>{i.d(t,{Z:()=>o});const o=' <div class="widget-header"> <div class="subtitle"><i18n>briefme.title</i18n></div> <div class="widget-options"> <div class="tools"> <a href="#" class="tool tool-option" i18n-title="briefme-widget.school.choose.title" ng-if="ctrl.hasManySchools" ng-click="ctrl.parametrage = true"> <i class="fas fa-cog"></i> </a> </div> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body"> <div class="container-advanced-nav" style="display:block"> <div class="list-trigger"> <div ng-repeat="section in ctrl.sections track by $index" ng-if="section.articles.length > 0" style="flex:1"> <div class="trigger" ng-click="ctrl.ouvrirBrief(section)" ng-class="{on: section == ctrl.contenu}"> [[section.nom]] </div> </div> </div> </div> <div> <ul class="list"> <li class="item link" ng-repeat="article in ctrl.contenu.articles track by $index" style="padding:1rem 2rem"> <a href="[[ctrl.genererLien(article)]]" target="_blank" rel="noopener" ng-click="trackEvent($event, {detail:{\'open\':article.url} })"> <div class="title">[[article.titre]]</div> <div class="meta">[[article.publication]]</div> </a> </li> </ul> </div> </div> <ode-modal visible="ctrl.parametrage" on-close="ctrl.parametrage = false" dnd-nodrag> <ode-modal-title> <i18n>briefme-widget.school.choose.title</i18n> </ode-modal-title> <ode-modal-body> <div> <div ng-if="!ctrl.hasManySchools" class="school mb-3">{{ctrl.selectedSchool.name}}</div> <div ng-if="ctrl.hasManySchools" class="dropdown mb-3" style="display:flex;justify-content:space-around"> <i18n>briefme-widget.school.choose.label</i18n> <div class="school-multiple dropdown-toggle" role="button" id="universalisWidgetSchool" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a href="" class="">{{ctrl.selectedSchool.name}}</a> </div> <div class="school-choice dropdown-menu" aria-labelledby="universalisWidgetSchool"> <div tabindex="0" role="button" class="dropdown-item" ng-repeat="school in ctrl.description.schools" ng-click="ctrl.onSchoolSelected($index)" ng-keydown="ctrl.onSchoolSelected($index, $event)"> {{school.name}} </div> </div> </div> </div> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> '},2445:function(e,t,i){var o=this&&this.__awaiter||function(e,t,i,o){return new(i||(i=Promise))((function(n,r){function l(e){try{c(o.next(e))}catch(e){r(e)}}function s(e){try{c(o.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(l,s)}c((o=o.apply(e,t||[])).next())}))},n=this&&this.__generator||function(e,t){var i,o,n,r,l={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(r){return function(s){return function(r){if(i)throw new TypeError("Generator is already executing.");for(;l;)try{if(i=1,o&&(n=2&r[0]?o.return:r[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,r[1])).done)return n;switch(o=0,n&&(r=[2&r[0],n.value]),r[0]){case 0:case 1:n=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,o=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(n=l.trys,(n=n.length>0&&n[n.length-1])||6!==r[0]&&2!==r[0])){l=0;continue}if(3===r[0]&&(!n||r[1]>n[0]&&r[1]<n[3])){l.label=r[1];break}if(6===r[0]&&l.label<n[1]){l.label=n[1],n=r;break}if(n&&l.label<n[2]){l.label=n[2],l.ops.push(r);break}n[2]&&l.ops.pop(),l.trys.pop();continue}r=t.call(e,l)}catch(e){r=[6,e],o=0}finally{i=n=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,s])}}},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var l=r(i(4202)),s=i(5262),c=i(9419),a=function(e,t,i){this.titre=e,this.publication=t,this.url=i},d=function(){function e(e,t){this.articles=[],this.nom=e,this.url=t}return e.prototype.charger=function(){return o(this,void 0,void 0,(function(){var e,t,i,o;return n(this,(function(n){switch(n.label){case 0:return[4,(0,c.http)().get(this.url,{headers:{Accept:"application/json"}})];case 1:for(e=n.sent(),t=0,i=e.results;t<i.length;t++)o=i[t],this.articles.push(new a(o.title,o.published_at,o.url));return[2]}}))}))},e}(),u=function(){function e(){this.parametrage=!1,this.sections=[new d("Brief.eco","/appregistry/widget/cache/external/briefeco"),new d("Brief.me","/appregistry/widget/cache/external/briefme"),new d("Brief.science","/appregistry/widget/cache/external/briefscience")],this.contenu=this.sections[0]}return Object.defineProperty(e.prototype,"description",{get:function(){return(0,c.session)().description},enumerable:!1,configurable:!0}),e.prototype.initialize=function(){var e,t;return o(this,void 0,void 0,(function(){var i,o,r,a=this;return n(this,(function(n){switch(n.label){case 0:return this._userPref=null===(e=s.WidgetFrameworkFactory.instance().list.find((function(e){return e.platformConf.name===s.WIDGET_NAME.BRIEFME})))||void 0===e?void 0:e.userPref,[4,(0,c.notif)().onSessionReady().promise];case 1:n.sent(),i=0,(null===(t=this._userPref)||void 0===t?void 0:t.schoolId)&&l.default.isArray(this.description.schools)&&(i=this.description.schools.findIndex((function(e){var t;return e.id===(null===(t=a._userPref)||void 0===t?void 0:t.schoolId)})),i<0&&(i=0)),this.setSelectedSchool(i),o=0,r=this.sections,n.label=2;case 2:return o<r.length?[4,r[o].charger()]:[3,5];case 3:n.sent(),n.label=4;case 4:return o++,[3,2];case 5:return this.ouvrirBrief(this.sections[Math.floor(this.sections.length/2)]),[2]}}))}))},e.prototype.setSelectedSchool=function(e){return 0<=e&&e<this.description.schools.length&&this.selectedSchool!==this.description.schools[e]&&(this.selectedSchool=this.description.schools[e],!0)},e.prototype.onSchoolSelected=function(e,t){var i;return(!t||"keydown"===t.type&&(13===t.which||32===t.which))&&(this._userPref&&this.setSelectedSchool(e)&&(this._userPref.schoolId=null===(i=this.selectedSchool)||void 0===i?void 0:i.id,s.WidgetFrameworkFactory.instance().saveUserPrefs()),!0)},Object.defineProperty(e.prototype,"hasManySchools",{get:function(){return this.description.schools.length>1},enumerable:!1,configurable:!0}),e.prototype.ouvrirBrief=function(e){this.contenu=e},e.prototype.genererLien=function(e){var t,i,o,n,r=e.url,l=c.Base64.encode(null!=(null===(t=this.selectedSchool)||void 0===t?void 0:t.UAI)?null===(i=this.selectedSchool)||void 0===i?void 0:i.UAI:""),s=null!=(null===(o=this.selectedSchool)||void 0===o?void 0:o.exports)?null===(n=this.selectedSchool)||void 0===n?void 0:n.exports:[],a="";if(null!=s){for(var d=0;d<s.length;++d)if(s[d].startsWith("GAR-")){a=s[d].replace("GAR-","");break}""==a&&(a=s[0])}var u=c.Base64.encode(a);return r.replace("ID_ETAB",l).replace("ID_ENT",u)},e}(),h=function(){function e(){this.restrict="E",this.template=i(3852).Z,this.scope={},this.bindToController=!0,this.controller=[u],this.controllerAs="ctrl",this.require=["odeBriefmeWidget"]}return e.prototype.link=function(e,t,i,r){return o(this,void 0,void 0,(function(){var t;return n(this,(function(i){switch(i.label){case 0:return(t=r?r[0]:null)?[4,t.initialize()]:[2];case 1:return i.sent(),e.$apply(),[2]}}))}))},e}();(0,c.notif)().onLangReady().promise.then((function(e){(0,c.conf)().Platform.idiom.addKeys(i(7611))})),t.odeModuleName="odeBriefmeWidgetModule",l.default.module(t.odeModuleName,[]).directive("odeBriefmeWidget",(function(){return new h}))},7611:e=>{e.exports=JSON.parse('{"briefme.title":"Brief.me","briefme-widget.school.choose.title":"Sélectionnez une école abonnée à brief.me","briefme-widget.school.choose.label":"École sélectionnée:"}')}}]);
1
+ "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[539],{3852:(e,t,i)=>{i.d(t,{Z:()=>o});const o=' <div class="widget-header"> <div class="subtitle"><i18n>briefme.title</i18n></div> <div class="widget-options"> <div class="tools"> <a href="#" class="tool tool-option" i18n-title="briefme-widget.school.choose.title" ng-if="ctrl.hasManySchools" ng-click="ctrl.parametrage = true"> <i class="fas fa-cog"></i> </a> </div> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body"> <div class="container-advanced-nav" style="display:block"> <div class="list-trigger"> <div ng-repeat="section in ctrl.sections track by $index" ng-if="section.articles.length > 0" style="flex:1"> <div class="trigger" ng-click="ctrl.ouvrirBrief(section)" ng-class="{on: section == ctrl.contenu}"> [[section.nom]] </div> </div> </div> </div> <div> <ul class="list"> <li class="item link" ng-repeat="article in ctrl.contenu.articles track by $index" style="padding:1rem 2rem"> <a href="[[ctrl.genererLien(article)]]" target="_blank" rel="noopener" ng-click="trackEvent($event, {detail:{\'open\':article.url} })"> <div class="title">[[article.titre]]</div> <div class="meta">[[article.publication]]</div> </a> </li> </ul> </div> </div> <ode-modal visible="ctrl.parametrage" on-close="ctrl.parametrage = false" dnd-nodrag> <ode-modal-title> <i18n>briefme-widget.school.choose.title</i18n> </ode-modal-title> <ode-modal-body> <div> <div ng-if="!ctrl.hasManySchools" class="school mb-3">{{ctrl.selectedSchool.name}}</div> <div ng-if="ctrl.hasManySchools" class="dropdown mb-3" style="display:flex;justify-content:space-around"> <i18n>briefme-widget.school.choose.label</i18n> <div class="school-multiple dropdown-toggle" role="button" id="universalisWidgetSchool" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a href="" class="">{{ctrl.selectedSchool.name}}</a> </div> <div class="school-choice dropdown-menu" aria-labelledby="universalisWidgetSchool"> <div tabindex="0" role="button" class="dropdown-item" ng-repeat="school in ctrl.description.schools" ng-click="ctrl.onSchoolSelected($index)" ng-keydown="ctrl.onSchoolSelected($index, $event)"> {{school.name}} </div> </div> </div> </div> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> '},2445:function(e,t,i){var o=this&&this.__awaiter||function(e,t,i,o){return new(i||(i=Promise))(function(n,r){function l(e){try{c(o.next(e))}catch(e){r(e)}}function s(e){try{c(o.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(l,s)}c((o=o.apply(e,t||[])).next())})},n=this&&this.__generator||function(e,t){var i,o,n,r,l={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(r){return function(s){return function(r){if(i)throw new TypeError("Generator is already executing.");for(;l;)try{if(i=1,o&&(n=2&r[0]?o.return:r[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,r[1])).done)return n;switch(o=0,n&&(r=[2&r[0],n.value]),r[0]){case 0:case 1:n=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,o=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(n=l.trys,(n=n.length>0&&n[n.length-1])||6!==r[0]&&2!==r[0])){l=0;continue}if(3===r[0]&&(!n||r[1]>n[0]&&r[1]<n[3])){l.label=r[1];break}if(6===r[0]&&l.label<n[1]){l.label=n[1],n=r;break}if(n&&l.label<n[2]){l.label=n[2],l.ops.push(r);break}n[2]&&l.ops.pop(),l.trys.pop();continue}r=t.call(e,l)}catch(e){r=[6,e],o=0}finally{i=n=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,s])}}},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var l=r(i(4202)),s=i(5262),c=i(9419),a=function(e,t,i){this.titre=e,this.publication=t,this.url=i},d=function(){function e(e,t){this.articles=[],this.nom=e,this.url=t}return e.prototype.charger=function(){return o(this,void 0,void 0,function(){var e,t,i,o;return n(this,function(n){switch(n.label){case 0:return[4,(0,c.http)().get(this.url,{headers:{Accept:"application/json"}})];case 1:for(e=n.sent(),t=0,i=e.results;t<i.length;t++)o=i[t],this.articles.push(new a(o.title,o.published_at,o.url));return[2]}})})},e}(),u=function(){function e(){this.parametrage=!1,this.sections=[new d("Brief.eco","/appregistry/widget/cache/external/briefeco"),new d("Brief.me","/appregistry/widget/cache/external/briefme"),new d("Brief.science","/appregistry/widget/cache/external/briefscience")],this.contenu=this.sections[0]}return Object.defineProperty(e.prototype,"description",{get:function(){return(0,c.session)().description},enumerable:!1,configurable:!0}),e.prototype.initialize=function(){var e,t;return o(this,void 0,void 0,function(){var i,o,r,a=this;return n(this,function(n){switch(n.label){case 0:return this._userPref=null===(e=s.WidgetFrameworkFactory.instance().list.find(function(e){return e.platformConf.name===s.WIDGET_NAME.BRIEFME}))||void 0===e?void 0:e.userPref,[4,(0,c.notif)().onSessionReady().promise];case 1:n.sent(),i=0,(null===(t=this._userPref)||void 0===t?void 0:t.schoolId)&&l.default.isArray(this.description.schools)&&(i=this.description.schools.findIndex(function(e){var t;return e.id===(null===(t=a._userPref)||void 0===t?void 0:t.schoolId)}),i<0&&(i=0)),this.setSelectedSchool(i),o=0,r=this.sections,n.label=2;case 2:return o<r.length?[4,r[o].charger()]:[3,5];case 3:n.sent(),n.label=4;case 4:return o++,[3,2];case 5:return this.ouvrirBrief(this.sections[Math.floor(this.sections.length/2)]),[2]}})})},e.prototype.setSelectedSchool=function(e){return 0<=e&&e<this.description.schools.length&&this.selectedSchool!==this.description.schools[e]&&(this.selectedSchool=this.description.schools[e],!0)},e.prototype.onSchoolSelected=function(e,t){var i;return(!t||"keydown"===t.type&&(13===t.which||32===t.which))&&(this._userPref&&this.setSelectedSchool(e)&&(this._userPref.schoolId=null===(i=this.selectedSchool)||void 0===i?void 0:i.id,s.WidgetFrameworkFactory.instance().saveUserPrefs()),!0)},Object.defineProperty(e.prototype,"hasManySchools",{get:function(){return this.description.schools.length>1},enumerable:!1,configurable:!0}),e.prototype.ouvrirBrief=function(e){this.contenu=e},e.prototype.genererLien=function(e){var t,i,o,n,r=e.url,l=c.Base64.encode(null!=(null===(t=this.selectedSchool)||void 0===t?void 0:t.UAI)?null===(i=this.selectedSchool)||void 0===i?void 0:i.UAI:""),s=null!=(null===(o=this.selectedSchool)||void 0===o?void 0:o.exports)?null===(n=this.selectedSchool)||void 0===n?void 0:n.exports:[],a="";if(null!=s){for(var d=0;d<s.length;++d)if(s[d].startsWith("GAR-")){a=s[d].replace("GAR-","");break}""==a&&(a=s[0])}var u=c.Base64.encode(a);return r.replace("ID_ETAB",l).replace("ID_ENT",u)},e}(),h=function(){function e(){this.restrict="E",this.template=i(3852).Z,this.scope={},this.bindToController=!0,this.controller=[u],this.controllerAs="ctrl",this.require=["odeBriefmeWidget"]}return e.prototype.link=function(e,t,i,r){return o(this,void 0,void 0,function(){var t;return n(this,function(i){switch(i.label){case 0:return(t=r?r[0]:null)?[4,t.initialize()]:[2];case 1:return i.sent(),e.$apply(),[2]}})})},e}();(0,c.notif)().onLangReady().promise.then(function(e){(0,c.conf)().Platform.idiom.addKeys(i(7611))}),t.odeModuleName="odeBriefmeWidgetModule",l.default.module(t.odeModuleName,[]).directive("odeBriefmeWidget",function(){return new h})},7611:e=>{e.exports=JSON.parse('{"briefme.title":"Brief.me","briefme-widget.school.choose.title":"Sélectionnez une école abonnée à brief.me","briefme-widget.school.choose.label":"École sélectionnée:"}')}}]);
2
2
  //# sourceMappingURL=briefme-widget.widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"widgets/briefme-widget/briefme-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/briefme-widget/briefme-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/briefme-widget/briefme-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>briefme.title</i18n></div> <div class=\\\"widget-options\\\"> <div class=\\\"tools\\\"> <a href=\\\"#\\\" class=\\\"tool tool-option\\\" i18n-title=\\\"briefme-widget.school.choose.title\\\" ng-if=\\\"ctrl.hasManySchools\\\" ng-click=\\\"ctrl.parametrage = true\\\"> <i class=\\\"fas fa-cog\\\"></i> </a> </div> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\"> <div class=\\\"container-advanced-nav\\\" style=\\\"display:block\\\"> <div class=\\\"list-trigger\\\"> <div ng-repeat=\\\"section in ctrl.sections track by $index\\\" ng-if=\\\"section.articles.length > 0\\\" style=\\\"flex:1\\\"> <div class=\\\"trigger\\\" ng-click=\\\"ctrl.ouvrirBrief(section)\\\" ng-class=\\\"{on: section == ctrl.contenu}\\\"> [[section.nom]] </div> </div> </div> </div> <div> <ul class=\\\"list\\\"> <li class=\\\"item link\\\" ng-repeat=\\\"article in ctrl.contenu.articles track by $index\\\" style=\\\"padding:1rem 2rem\\\"> <a href=\\\"[[ctrl.genererLien(article)]]\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" ng-click=\\\"trackEvent($event, {detail:{'open':article.url} })\\\"> <div class=\\\"title\\\">[[article.titre]]</div> <div class=\\\"meta\\\">[[article.publication]]</div> </a> </li> </ul> </div> </div> <ode-modal visible=\\\"ctrl.parametrage\\\" on-close=\\\"ctrl.parametrage = false\\\" dnd-nodrag> <ode-modal-title> <i18n>briefme-widget.school.choose.title</i18n> </ode-modal-title> <ode-modal-body> <div> <div ng-if=\\\"!ctrl.hasManySchools\\\" class=\\\"school mb-3\\\">{{ctrl.selectedSchool.name}}</div> <div ng-if=\\\"ctrl.hasManySchools\\\" class=\\\"dropdown mb-3\\\" style=\\\"display:flex;justify-content:space-around\\\"> <i18n>briefme-widget.school.choose.label</i18n> <div class=\\\"school-multiple dropdown-toggle\\\" role=\\\"button\\\" id=\\\"universalisWidgetSchool\\\" data-bs-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"> <a href=\\\"\\\" class=\\\"\\\">{{ctrl.selectedSchool.name}}</a> </div> <div class=\\\"school-choice dropdown-menu\\\" aria-labelledby=\\\"universalisWidgetSchool\\\"> <div tabindex=\\\"0\\\" role=\\\"button\\\" class=\\\"dropdown-item\\\" ng-repeat=\\\"school in ctrl.description.schools\\\" ng-click=\\\"ctrl.onSchoolSelected($index)\\\" ng-keydown=\\\"ctrl.onSchoolSelected($index, $event)\\\"> {{school.name}} </div> </div> </div> </div> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { IUserDescription, IUserInfo, School, WidgetFrameworkFactory, WidgetUserPref, WIDGET_NAME } from \"ode-ts-client\";\nimport { conf, notif, session, http, Base64 } from \"../../utils\";\n\nclass BriefmeArticle\n{\n\tpublic titre: string;\n\tpublic publication: string;\n\tpublic url: string;\n\n\tconstructor(titre: string, publication: string, url: string)\n\t{\n\t\tthis.titre = titre;\n\t\tthis.publication = publication;\n\t\tthis.url = url;\n\t}\n};\n\nclass BriefmeSection\n{\n\tpublic nom: string;\n\tpublic url: string;\n\n\tpublic articles: BriefmeArticle[] = [];\n\n\tconstructor(nom: string, url: string)\n\t{\n\t\tthis.nom = nom;\n\t\tthis.url = url;\n\t}\n\n\tpublic async charger()//: void\n\t{\n\t\tlet reponse = await http().get(this.url, { headers: {\"Accept\": \"application/json\"}});\n\t\t\n\t\tfor(let entree of reponse.results)\n\t\t\tthis.articles.push(new BriefmeArticle(entree.title, entree.published_at, entree.url));\n\t}\n}\n\n/* Controller for the directive */\nclass Controller implements IController\n{\n\tprivate _userPref?:WidgetUserPref;\n\tprivate selectedSchool?:School;\n\tprivate parametrage:boolean = false;\n\n\tprivate sections: BriefmeSection[] = [\n\t\tnew BriefmeSection(\"Brief.eco\", \"/appregistry/widget/cache/external/briefeco\"),\n\t\tnew BriefmeSection(\"Brief.me\", \"/appregistry/widget/cache/external/briefme\"),\n\t\tnew BriefmeSection(\"Brief.science\", \"/appregistry/widget/cache/external/briefscience\")\n\t];\n\tpublic contenu: BriefmeSection = this.sections[0];\n\n\tprotected get description():IUserDescription {\n\t\treturn session().description;\n\t}\n\n\tpublic async initialize() {\n\t\tthis._userPref = WidgetFrameworkFactory.instance().list.find( w => w.platformConf.name===WIDGET_NAME.BRIEFME)?.userPref;\n\t\tawait notif().onSessionReady().promise;\n\n\t\tlet defaultIndex = 0;\n\t\tif( this._userPref?.schoolId && angular.isArray(this.description.schools) ) {\n\t\t\tdefaultIndex = this.description.schools.findIndex( school => school.id===this._userPref?.schoolId );\n\t\t\tif( defaultIndex < 0 ) {\n\t\t\t\tdefaultIndex = 0;\n\t\t\t}\n\t\t}\n\t\tthis.setSelectedSchool( defaultIndex );\n\n\t\tfor(let section of this.sections)\n\t\t\tawait section.charger();\n\n\t\tthis.ouvrirBrief(this.sections[Math.floor(this.sections.length / 2)]);\n\t}\n\n\n\tprivate setSelectedSchool( idx:number ):boolean {\n\t\tif( 0 <= idx && idx < this.description.schools.length && this.selectedSchool !== this.description.schools[idx]) {\n\t\t\tthis.selectedSchool = this.description.schools[idx];\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected onSchoolSelected( idx:number, ev?:JQuery.Event ) {\n\t\t// If an event is given, and related to pressing the enter or spacebar key.\n\t\tif( !ev || (ev.type==='keydown' && (ev.which===13 || ev.which===32)) ) {\n\t\t\tif( this._userPref && this.setSelectedSchool(idx) ) {\n\t\t\t\tthis._userPref.schoolId = this.selectedSchool?.id;\n\t\t\t\tWidgetFrameworkFactory.instance().saveUserPrefs();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected get hasManySchools() {\n\t\treturn this.description.schools.length > 1;\n\t}\n\n\tprivate ouvrirBrief(brief: BriefmeSection)\n\t{\n\t\tthis.contenu = brief;\n\t}\n\n\tpublic genererLien(article: BriefmeArticle)\n\t{\n\t\tlet urlBase: string = article.url;\n\t\tlet UAIb64: string = Base64.encode(this.selectedSchool?.UAI != null ? this.selectedSchool?.UAI : \"\");\n\t\tlet exports: string[] = this.selectedSchool?.exports != null ? this.selectedSchool?.exports : [];\n\t\tlet codeGar = \"\";\n\t\tif(exports != null)\n\t\t{\n\t\t\tfor(let i = 0; i < exports.length; ++i)\n\t\t\t\tif(exports[i].startsWith(\"GAR-\"))\n\t\t\t\t{\n\t\t\t\t\tcodeGar = exports[i].replace(\"GAR-\", \"\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(codeGar == \"\")\n\t\t\t\t\tcodeGar = exports[0];\n\t\t}\n\t\tlet codeGARb64 = Base64.encode(codeGar);\n\n\t\treturn urlBase.replace(\"ID_ETAB\", UAIb64).replace(\"ID_ENT\", codeGARb64);\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./briefme-widget.widget.html').default;\n\tscope = {};\n\tbindToController = true;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeBriefmeWidget'];\n\n async link(scope:IScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]) {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n if( !ctrl ) {\n return;\n\t\t}\n\n\t\tawait ctrl.initialize();\n\t\tscope.$apply();\n\t}\n}\n\n/** The briefme widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeBriefmeWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeBriefmeWidget\", DirectiveFactory );\n"],"names":["titre","publication","url","this","nom","articles","charger","http","get","headers","reponse","results","entree","push","BriefmeArticle","title","published_at","parametrage","sections","BriefmeSection","contenu","session","description","initialize","_userPref","WidgetFrameworkFactory","instance","list","find","w","platformConf","name","WIDGET_NAME","BRIEFME","userPref","notif","onSessionReady","promise","defaultIndex","schoolId","isArray","schools","findIndex","school","id","setSelectedSchool","ouvrirBrief","Math","floor","length","idx","selectedSchool","onSchoolSelected","ev","type","which","saveUserPrefs","brief","genererLien","article","urlBase","UAIb64","Base64","encode","UAI","exports","codeGar","i","startsWith","replace","codeGARb64","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","onLangReady","then","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
1
+ {"version":3,"file":"widgets/briefme-widget/briefme-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/briefme-widget/briefme-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/briefme-widget/briefme-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>briefme.title</i18n></div> <div class=\\\"widget-options\\\"> <div class=\\\"tools\\\"> <a href=\\\"#\\\" class=\\\"tool tool-option\\\" i18n-title=\\\"briefme-widget.school.choose.title\\\" ng-if=\\\"ctrl.hasManySchools\\\" ng-click=\\\"ctrl.parametrage = true\\\"> <i class=\\\"fas fa-cog\\\"></i> </a> </div> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\"> <div class=\\\"container-advanced-nav\\\" style=\\\"display:block\\\"> <div class=\\\"list-trigger\\\"> <div ng-repeat=\\\"section in ctrl.sections track by $index\\\" ng-if=\\\"section.articles.length > 0\\\" style=\\\"flex:1\\\"> <div class=\\\"trigger\\\" ng-click=\\\"ctrl.ouvrirBrief(section)\\\" ng-class=\\\"{on: section == ctrl.contenu}\\\"> [[section.nom]] </div> </div> </div> </div> <div> <ul class=\\\"list\\\"> <li class=\\\"item link\\\" ng-repeat=\\\"article in ctrl.contenu.articles track by $index\\\" style=\\\"padding:1rem 2rem\\\"> <a href=\\\"[[ctrl.genererLien(article)]]\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" ng-click=\\\"trackEvent($event, {detail:{'open':article.url} })\\\"> <div class=\\\"title\\\">[[article.titre]]</div> <div class=\\\"meta\\\">[[article.publication]]</div> </a> </li> </ul> </div> </div> <ode-modal visible=\\\"ctrl.parametrage\\\" on-close=\\\"ctrl.parametrage = false\\\" dnd-nodrag> <ode-modal-title> <i18n>briefme-widget.school.choose.title</i18n> </ode-modal-title> <ode-modal-body> <div> <div ng-if=\\\"!ctrl.hasManySchools\\\" class=\\\"school mb-3\\\">{{ctrl.selectedSchool.name}}</div> <div ng-if=\\\"ctrl.hasManySchools\\\" class=\\\"dropdown mb-3\\\" style=\\\"display:flex;justify-content:space-around\\\"> <i18n>briefme-widget.school.choose.label</i18n> <div class=\\\"school-multiple dropdown-toggle\\\" role=\\\"button\\\" id=\\\"universalisWidgetSchool\\\" data-bs-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"> <a href=\\\"\\\" class=\\\"\\\">{{ctrl.selectedSchool.name}}</a> </div> <div class=\\\"school-choice dropdown-menu\\\" aria-labelledby=\\\"universalisWidgetSchool\\\"> <div tabindex=\\\"0\\\" role=\\\"button\\\" class=\\\"dropdown-item\\\" ng-repeat=\\\"school in ctrl.description.schools\\\" ng-click=\\\"ctrl.onSchoolSelected($index)\\\" ng-keydown=\\\"ctrl.onSchoolSelected($index, $event)\\\"> {{school.name}} </div> </div> </div> </div> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { IUserDescription, IUserInfo, School, WidgetFrameworkFactory, WidgetUserPref, WIDGET_NAME } from \"ode-ts-client\";\nimport { conf, notif, session, http, Base64 } from \"../../utils\";\n\nclass BriefmeArticle\n{\n\tpublic titre: string;\n\tpublic publication: string;\n\tpublic url: string;\n\n\tconstructor(titre: string, publication: string, url: string)\n\t{\n\t\tthis.titre = titre;\n\t\tthis.publication = publication;\n\t\tthis.url = url;\n\t}\n};\n\nclass BriefmeSection\n{\n\tpublic nom: string;\n\tpublic url: string;\n\n\tpublic articles: BriefmeArticle[] = [];\n\n\tconstructor(nom: string, url: string)\n\t{\n\t\tthis.nom = nom;\n\t\tthis.url = url;\n\t}\n\n\tpublic async charger()//: void\n\t{\n\t\tlet reponse = await http().get(this.url, { headers: {\"Accept\": \"application/json\"}});\n\t\t\n\t\tfor(let entree of reponse.results)\n\t\t\tthis.articles.push(new BriefmeArticle(entree.title, entree.published_at, entree.url));\n\t}\n}\n\n/* Controller for the directive */\nclass Controller implements IController\n{\n\tprivate _userPref?:WidgetUserPref;\n\tprivate selectedSchool?:School;\n\tprivate parametrage:boolean = false;\n\n\tprivate sections: BriefmeSection[] = [\n\t\tnew BriefmeSection(\"Brief.eco\", \"/appregistry/widget/cache/external/briefeco\"),\n\t\tnew BriefmeSection(\"Brief.me\", \"/appregistry/widget/cache/external/briefme\"),\n\t\tnew BriefmeSection(\"Brief.science\", \"/appregistry/widget/cache/external/briefscience\")\n\t];\n\tpublic contenu: BriefmeSection = this.sections[0];\n\n\tprotected get description():IUserDescription {\n\t\treturn session().description;\n\t}\n\n\tpublic async initialize() {\n\t\tthis._userPref = WidgetFrameworkFactory.instance().list.find( w => w.platformConf.name===WIDGET_NAME.BRIEFME)?.userPref;\n\t\tawait notif().onSessionReady().promise;\n\n\t\tlet defaultIndex = 0;\n\t\tif( this._userPref?.schoolId && angular.isArray(this.description.schools) ) {\n\t\t\tdefaultIndex = this.description.schools.findIndex( school => school.id===this._userPref?.schoolId );\n\t\t\tif( defaultIndex < 0 ) {\n\t\t\t\tdefaultIndex = 0;\n\t\t\t}\n\t\t}\n\t\tthis.setSelectedSchool( defaultIndex );\n\n\t\tfor(let section of this.sections)\n\t\t\tawait section.charger();\n\n\t\tthis.ouvrirBrief(this.sections[Math.floor(this.sections.length / 2)]);\n\t}\n\n\n\tprivate setSelectedSchool( idx:number ):boolean {\n\t\tif( 0 <= idx && idx < this.description.schools.length && this.selectedSchool !== this.description.schools[idx]) {\n\t\t\tthis.selectedSchool = this.description.schools[idx];\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected onSchoolSelected( idx:number, ev?:JQuery.Event ) {\n\t\t// If an event is given, and related to pressing the enter or spacebar key.\n\t\tif( !ev || (ev.type==='keydown' && (ev.which===13 || ev.which===32)) ) {\n\t\t\tif( this._userPref && this.setSelectedSchool(idx) ) {\n\t\t\t\tthis._userPref.schoolId = this.selectedSchool?.id;\n\t\t\t\tWidgetFrameworkFactory.instance().saveUserPrefs();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected get hasManySchools() {\n\t\treturn this.description.schools.length > 1;\n\t}\n\n\tprivate ouvrirBrief(brief: BriefmeSection)\n\t{\n\t\tthis.contenu = brief;\n\t}\n\n\tpublic genererLien(article: BriefmeArticle)\n\t{\n\t\tlet urlBase: string = article.url;\n\t\tlet UAIb64: string = Base64.encode(this.selectedSchool?.UAI != null ? this.selectedSchool?.UAI : \"\");\n\t\tlet exports: string[] = this.selectedSchool?.exports != null ? this.selectedSchool?.exports : [];\n\t\tlet codeGar = \"\";\n\t\tif(exports != null)\n\t\t{\n\t\t\tfor(let i = 0; i < exports.length; ++i)\n\t\t\t\tif(exports[i].startsWith(\"GAR-\"))\n\t\t\t\t{\n\t\t\t\t\tcodeGar = exports[i].replace(\"GAR-\", \"\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(codeGar == \"\")\n\t\t\t\t\tcodeGar = exports[0];\n\t\t}\n\t\tlet codeGARb64 = Base64.encode(codeGar);\n\n\t\treturn urlBase.replace(\"ID_ETAB\", UAIb64).replace(\"ID_ENT\", codeGARb64);\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./briefme-widget.widget.html').default;\n\tscope = {};\n\tbindToController = true;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeBriefmeWidget'];\n\n async link(scope:IScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]) {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n if( !ctrl ) {\n return;\n\t\t}\n\n\t\tawait ctrl.initialize();\n\t\tscope.$apply();\n\t}\n}\n\n/** The briefme widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeBriefmeWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeBriefmeWidget\", DirectiveFactory );\n"],"names":["titre","publication","url","this","nom","articles","charger","http","get","headers","reponse","results","entree","push","BriefmeArticle","title","published_at","parametrage","sections","BriefmeSection","contenu","session","description","initialize","_userPref","WidgetFrameworkFactory","instance","list","find","w","platformConf","name","WIDGET_NAME","BRIEFME","userPref","notif","onSessionReady","promise","defaultIndex","schoolId","isArray","schools","findIndex","school","id","setSelectedSchool","ouvrirBrief","Math","floor","length","idx","selectedSchool","onSchoolSelected","ev","type","which","saveUserPrefs","brief","genererLien","article","urlBase","UAIb64","Base64","encode","UAI","exports","codeGar","i","startsWith","replace","codeGARb64","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","onLangReady","then","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[556],{5713:(e,t,n)=>{n.d(t,{Z:()=>o});const o=" "},9492:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var u=o(n(4202)),d=n(9419),i=function(){},r=function(){function e(){this.restrict="E",this.template=n(5713).Z,this.controller=[i]}return e.prototype.link=function(e,t,n){},e}();(0,d.notif)().onLangReady().promise.then((function(e){e})),t.odeModuleName="odeCalendarWidgetModule",u.default.module(t.odeModuleName,[]).directive("odeCalendarWidget",(function(){return new r}))}}]);
1
+ "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[556],{5713:(e,t,n)=>{n.d(t,{Z:()=>o});const o=" "},9492:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var u=o(n(4202)),d=n(9419),i=function(){},r=function(){function e(){this.restrict="E",this.template=n(5713).Z,this.controller=[i]}return e.prototype.link=function(e,t,n){},e}();(0,d.notif)().onLangReady().promise.then(function(e){e}),t.odeModuleName="odeCalendarWidgetModule",u.default.module(t.odeModuleName,[]).directive("odeCalendarWidget",function(){return new r})}}]);
2
2
  //# sourceMappingURL=calendar-widget.widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"widgets/calendar-widget/calendar-widget.widget.js","mappings":"gIAGA,QAFW,G,mLCDX,iBACA,UAOA,EACC,WAEA,EAID,0BACI,KAAAA,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,WAAa,CAACC,EAMf,QAJI,YAAAC,KAAA,SAAKC,EAAcC,EAAaC,GAEnC,EAED,EATA,IAqBA,IAAAC,SAAQC,cAAcC,QAAQC,MAAM,SAAAC,GAC3BA,CAGT,IAIa,EAAAC,cAAgB,0BAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,qBAd9C,WACC,OAAO,IAAIC,CACZ,G","sources":["webpack://ode-ngjs-front/./src/ts/widgets/calendar-widget/calendar-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/calendar-widget/calendar-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { notif } from \"../../utils\";\n\n/*\n * NOTE As of 2021-09-06, this widget is only 1D now, the code below is never used. \n */\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tconstructor() {\n // Remove transpilation warnings due to the \"bindToController\", which angularjs already checks.\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective {\n restrict = 'E';\n\ttemplate = require('./calendar-widget.widget.html').default;\n\tcontroller = [Controller];\n\n link(scope:IScope, elem:JQLite, attrs:IAttributes): void {\n\t\tlet blah = scope;\n\t}\n\n}\n\n/** The calendar widget.\n *\n * Usage:\n * &lt;ode-calendar-widget></ode-calendar-widget&gt;\n */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n//\t\tdefault:\tConfigurationFrameworkFactory.instance().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeCalendarWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeCalendarWidget\", DirectiveFactory );\n\n/*\n(function(){\n\n\tvar Calendar = model.widgets.findWidget('calendar-widget');\n\n\tCalendar.daysInWeek = [{ letter: 'L' }, { letter: 'M' }, { letter: 'M' }, { letter: 'J' }, { letter: 'V' }, { letter: 'S' }, { letter: 'D' }];\n\tCalendar.today = function(format){\n\t\treturn moment().format(format);\n\t};\n\n\tCalendar.month = [];\n\tfor(var i = 0; i < moment().daysInMonth(); i++){\n\t\tCalendar.month[i] = moment().date(i + 1);\n\t}\n\n\tCalendar.previousMonth = [];\n\tvar currentDay = moment().date(0);\n\twhile(currentDay.week() === moment().date(1).week()){\n\t\tCalendar.previousMonth.push(currentDay);\n\t\tcurrentDay = moment(currentDay).date(currentDay.date() - 1);\n\t}\n\tCalendar.previousMonth.reverse();\n\n\tCalendar.nextMonth = [];\n\tcurrentDay = moment().date(moment().daysInMonth() + 1)\n\twhile(currentDay.week() === moment().date(moment().daysInMonth()).week()){\n\t\tCalendar.nextMonth.push(currentDay);\n\t\tcurrentDay = moment(currentDay).date(currentDay.date() + 1);\n\t}\n\n\tCalendar.thisMonth = function(){\n\t\treturn moment().format('MMMM').toUpperCase()[0] + moment().format('MMMM').substring(1);\n\t};\n\n\tCalendar.getDay = function(date){\n\t\treturn date.day();\n\t};\n\n\tCalendar.getDayInMonth = function(date){\n\t\treturn date.date();\n\t};\n\n\tCalendar.todayDate = function(){\n\t\treturn moment().date();\n\t};\n\n\tCalendar.getSeason = function(){\n\t\tvar currentYear = moment().year() + '-';\n\t\tvar nextYear = (moment().year() + 1) + '-';\n\t\tvar seasons = [ {\n\t\t\tstart: moment(currentYear + '03-21'), end: moment(currentYear + '06-20'), name: 'calendar.spring'\n\t\t}, {\n\t\t\tname: 'calendar.summer', start: moment(currentYear + '06-21'), end: moment(currentYear + '09-22')\n\t\t}, {\n\t\t\tname: 'calendar.fall', start: moment(currentYear + '09-23'), end: moment(currentYear + '12-20')\n\t\t}, {\n\t\t\tname: 'calendar.winter', start: moment(currentYear + '12-21'), end: moment(currentYear + '12-31')\n\t\t}, {\n\t\t\tname: 'calendar.winter', start: moment(nextYear + '01-01'), end: moment(nextYear + '03-20')\n\t\t} ]\n\n\t\treturn lang.translate(_.find(seasons, function(season){\n\t\t\treturn season.start.dayOfYear() <= moment().dayOfYear() && moment().dayOfYear() <= season.end.dayOfYear();\n\t\t}).name);\n\t}\n\n\tmodel.widgets.apply();\n}());\n*/"],"names":["restrict","template","controller","Controller","link","scope","elem","attrs","notif","onLangReady","promise","then","lang","odeModuleName","module","directive","Directive"],"sourceRoot":""}
1
+ {"version":3,"file":"widgets/calendar-widget/calendar-widget.widget.js","mappings":"gIAGA,QAFW,G,mLCDX,iBACA,UAOA,EACC,WAEA,EAID,0BACI,KAAAA,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,WAAa,CAACC,EAMf,QAJI,YAAAC,KAAA,SAAKC,EAAcC,EAAaC,GAEnC,EAED,EATA,IAqBA,IAAAC,SAAQC,cAAcC,QAAQC,KAAM,SAAAC,GAC3BA,CAGT,GAIa,EAAAC,cAAgB,0BAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,oBAd9C,WACC,OAAO,IAAIC,CACZ,E","sources":["webpack://ode-ngjs-front/./src/ts/widgets/calendar-widget/calendar-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/calendar-widget/calendar-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { notif } from \"../../utils\";\n\n/*\n * NOTE As of 2021-09-06, this widget is only 1D now, the code below is never used. \n */\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tconstructor() {\n // Remove transpilation warnings due to the \"bindToController\", which angularjs already checks.\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective {\n restrict = 'E';\n\ttemplate = require('./calendar-widget.widget.html').default;\n\tcontroller = [Controller];\n\n link(scope:IScope, elem:JQLite, attrs:IAttributes): void {\n\t\tlet blah = scope;\n\t}\n\n}\n\n/** The calendar widget.\n *\n * Usage:\n * &lt;ode-calendar-widget></ode-calendar-widget&gt;\n */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n//\t\tdefault:\tConfigurationFrameworkFactory.instance().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeCalendarWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeCalendarWidget\", DirectiveFactory );\n\n/*\n(function(){\n\n\tvar Calendar = model.widgets.findWidget('calendar-widget');\n\n\tCalendar.daysInWeek = [{ letter: 'L' }, { letter: 'M' }, { letter: 'M' }, { letter: 'J' }, { letter: 'V' }, { letter: 'S' }, { letter: 'D' }];\n\tCalendar.today = function(format){\n\t\treturn moment().format(format);\n\t};\n\n\tCalendar.month = [];\n\tfor(var i = 0; i < moment().daysInMonth(); i++){\n\t\tCalendar.month[i] = moment().date(i + 1);\n\t}\n\n\tCalendar.previousMonth = [];\n\tvar currentDay = moment().date(0);\n\twhile(currentDay.week() === moment().date(1).week()){\n\t\tCalendar.previousMonth.push(currentDay);\n\t\tcurrentDay = moment(currentDay).date(currentDay.date() - 1);\n\t}\n\tCalendar.previousMonth.reverse();\n\n\tCalendar.nextMonth = [];\n\tcurrentDay = moment().date(moment().daysInMonth() + 1)\n\twhile(currentDay.week() === moment().date(moment().daysInMonth()).week()){\n\t\tCalendar.nextMonth.push(currentDay);\n\t\tcurrentDay = moment(currentDay).date(currentDay.date() + 1);\n\t}\n\n\tCalendar.thisMonth = function(){\n\t\treturn moment().format('MMMM').toUpperCase()[0] + moment().format('MMMM').substring(1);\n\t};\n\n\tCalendar.getDay = function(date){\n\t\treturn date.day();\n\t};\n\n\tCalendar.getDayInMonth = function(date){\n\t\treturn date.date();\n\t};\n\n\tCalendar.todayDate = function(){\n\t\treturn moment().date();\n\t};\n\n\tCalendar.getSeason = function(){\n\t\tvar currentYear = moment().year() + '-';\n\t\tvar nextYear = (moment().year() + 1) + '-';\n\t\tvar seasons = [ {\n\t\t\tstart: moment(currentYear + '03-21'), end: moment(currentYear + '06-20'), name: 'calendar.spring'\n\t\t}, {\n\t\t\tname: 'calendar.summer', start: moment(currentYear + '06-21'), end: moment(currentYear + '09-22')\n\t\t}, {\n\t\t\tname: 'calendar.fall', start: moment(currentYear + '09-23'), end: moment(currentYear + '12-20')\n\t\t}, {\n\t\t\tname: 'calendar.winter', start: moment(currentYear + '12-21'), end: moment(currentYear + '12-31')\n\t\t}, {\n\t\t\tname: 'calendar.winter', start: moment(nextYear + '01-01'), end: moment(nextYear + '03-20')\n\t\t} ]\n\n\t\treturn lang.translate(_.find(seasons, function(season){\n\t\t\treturn season.start.dayOfYear() <= moment().dayOfYear() && moment().dayOfYear() <= season.end.dayOfYear();\n\t\t}).name);\n\t}\n\n\tmodel.widgets.apply();\n}());\n*/"],"names":["restrict","template","controller","Controller","link","scope","elem","attrs","notif","onLangReady","promise","then","lang","odeModuleName","module","directive","Directive"],"sourceRoot":""}