ode-ngjs-front 1.4.12 → 1.4.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/669.js +1 -1
- package/dist/669.js.map +1 -1
- package/dist/ode-ngjs-front.js +4 -4
- package/dist/ode-ngjs-front.js.map +1 -1
- package/dist/ts/directives/business/portal/portal.directive.d.ts.map +1 -1
- package/dist/version.txt +1 -1
- package/dist/widgets/agenda-widget/agenda-widget.widget.js +1 -1
- package/dist/widgets/agenda-widget/agenda-widget.widget.js.map +1 -1
- package/dist/widgets/bookmark-widget/bookmark-widget.widget.js +1 -1
- package/dist/widgets/bookmark-widget/bookmark-widget.widget.js.map +1 -1
- package/dist/widgets/briefme-widget/briefme-widget.widget.js +1 -1
- package/dist/widgets/briefme-widget/briefme-widget.widget.js.map +1 -1
- package/dist/widgets/calendar-widget/calendar-widget.widget.js +1 -1
- package/dist/widgets/calendar-widget/calendar-widget.widget.js.map +1 -1
- package/dist/widgets/cantine-widget/cantine-widget.widget.js +1 -1
- package/dist/widgets/cantine-widget/cantine-widget.widget.js.map +1 -1
- package/dist/widgets/carnet-de-bord/carnet-de-bord.widget.js +1 -1
- package/dist/widgets/carnet-de-bord/carnet-de-bord.widget.js.map +1 -1
- package/dist/widgets/cursus-widget/cursus-widget.widget.js +1 -1
- package/dist/widgets/cursus-widget/cursus-widget.widget.js.map +1 -1
- package/dist/widgets/dicodelazone-widget/dicodelazone-widget.widget.js +1 -1
- package/dist/widgets/dicodelazone-widget/dicodelazone-widget.widget.js.map +1 -1
- package/dist/widgets/edumalin-widget/edumalin-widget.widget.js +1 -1
- package/dist/widgets/edumalin-widget/edumalin-widget.widget.js.map +1 -1
- package/dist/widgets/last-infos-widget/last-infos-widget.widget.js +1 -1
- package/dist/widgets/last-infos-widget/last-infos-widget.widget.js.map +1 -1
- package/dist/widgets/maxicours-widget/maxicours-widget.widget.js +1 -1
- package/dist/widgets/maxicours-widget/maxicours-widget.widget.js.map +1 -1
- package/dist/widgets/mediacentre-widget/mediacentre-widget.widget.js +1 -1
- package/dist/widgets/mediacentre-widget/mediacentre-widget.widget.js.map +1 -1
- package/dist/widgets/my-apps/my-apps.widget.js +1 -1
- package/dist/widgets/my-apps/my-apps.widget.js.map +1 -1
- package/dist/widgets/qwant-widget/qwant-widget.widget.js +1 -1
- package/dist/widgets/qwant-widget/qwant-widget.widget.js.map +1 -1
- package/dist/widgets/record-me/record-me.widget.js +1 -1
- package/dist/widgets/record-me/record-me.widget.js.map +1 -1
- package/dist/widgets/rss-widget/rss-widget.widget.js +1 -1
- package/dist/widgets/rss-widget/rss-widget.widget.js.map +1 -1
- package/dist/widgets/school-widget/school-widget.widget.js +1 -1
- package/dist/widgets/school-widget/school-widget.widget.js.map +1 -1
- package/dist/widgets/universalis-widget/universalis-widget.widget.js +1 -1
- package/dist/widgets/universalis-widget/universalis-widget.widget.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets/cantine-widget/cantine-widget.widget.js","mappings":"+HAGA,QAFW,m/U,8iDCDX,iBACA,UACA,YACA,QACA,iBAEA,aAkBE,WAAoBA,GAAA,KAAAA,OAAAA,EAjBpB,KAAAC,KAAY,CAAC,EACb,KAAAC,MAAuB,KACvB,KAAAC,QAAoB,GACpB,KAAAC,YAAsB,GACtB,KAAAC,cAAiD,GAEjD,KAAAC,iBAA2B,EAC3B,KAAAC,mBAA6B,GAG7B,KAAAC,YAAsB,GACtB,KAAAC,WAAmB,IAAIC,KACvB,KAAAC,gBAA0B,EAC1B,KAAAC,gBAA0B,GAKxB,IAAMC,GAAO,IAAAC,WAAUD,KAEvBE,KAAKC,SAAU,aAAOD,KAAKN,YAAYQ,OAAO,cAC9CF,KAAKG,2BAEL,IAAMC,EAAiBN,EAAKO,IAC5B,GAAIC,MAAMC,QAAQH,IAAmBA,EAAeI,OAAS,EAC3DR,KAAKS,mBAAmBX,EAAKY,aACxB,GAA8B,iBAAnBN,GAAgCE,MAAMC,QAAQH,IAA6C,IAA1BA,EAAeI,OAAe,CAC/GR,KAAKZ,QAAUkB,MAAMC,QAAQH,GAAkBA,EAAiB,CAACA,GACjE,IAAM,EAAWE,MAAMC,QAAQT,EAAKa,gBAAkBb,EAAKa,eAAiB,GAE5EX,KAAKV,cAAgBU,KAAKZ,QAAQwB,KAAI,SAACP,EAAKQ,GAAM,OAAGR,IAAG,EAAES,KAAM,EAASD,IAAMR,EAA7B,IAElDL,KAAKe,kB,MAELf,KAAKZ,QAAU,GACfY,KAAKV,cAAgB,GACrBU,KAAKX,YAAc,EAEvB,CAiJF,OA/IE,YAAA2B,cAAA,WACMhB,KAAKX,aACPW,KAAKiB,WAET,EAEA,sBAAI,8BAAe,C,IAAnB,WACE,OAAOjB,KAAKV,cAAckB,OAAS,CACrC,E,gCAEM,YAAAC,mBAAN,SAAyBC,G,sGAEJ,O,sBAAA,GAAM,UAAMQ,IAAI,0BAAmBR,K,cAA5CxB,EAAS,SAA4C,OACjDoB,MAAMC,QAAQrB,EAAKiC,iBAC7BnB,KAAKV,cAAgBJ,EAAKiC,eAAeP,KAAI,SAACQ,GAAc,OAC1Df,IAAKe,EAAKC,IACVP,KAAMM,EAAKE,YAAcF,EAAKN,MAAQM,EAAKC,IAFe,IAI5DrB,KAAKZ,QAAUY,KAAKV,cAAcsB,KAAI,SAAAW,GAAO,OAAAA,EAAIlB,GAAJ,IAE7CL,KAAKe,mBACK,QAAV,EAAAf,KAAKwB,aAAK,qBAEVxB,KAAKb,MAAQ,gC,6BAGfa,KAAKb,MAAQ,kC,+BAIjB,YAAAsC,WAAA,SAAWC,GACT1B,KAAKN,WAAWiC,QAAQ3B,KAAKN,WAAWkC,UAAYF,GACpD1B,KAAK6B,oBACP,EAEA,YAAAC,qBAAA,WACE9B,KAAK6B,qBACL7B,KAAKJ,gBAAiB,CACxB,EAEA,YAAAmC,WAAA,WACM/B,KAAKN,sBAAsBC,OAASqC,MAAMhC,KAAKN,WAAWuC,aAC5DjC,KAAK8B,uBACL9B,KAAKf,OAAOiD,SAEhB,EAEA,YAAAC,iBAAA,SAAiBC,QAAA,IAAAA,IAAAA,EAAA,MAEbpC,KAAKJ,eADW,OAAdwC,EACoBA,GAECpC,KAAKJ,cAEhC,EAEQ,YAAAiC,mBAAR,WACE7B,KAAKC,SAAU,aAAOD,KAAKN,YAAYQ,OAAO,cAC1CF,KAAKC,UAAYD,KAAKH,kBACxBG,KAAKH,gBAAkBG,KAAKC,QAC5BD,KAAKG,2BACLH,KAAKiB,YAET,EAEQ,YAAAd,yBAAR,WAMEH,KAAKP,YAAcO,KAAKN,WAAW2C,mBAAmB,QALV,CAC1CC,QAAS,OACTC,IAAK,UACLC,MAAO,SAGTxC,KAAKP,YAAcO,KAAKP,YAAYgD,OAAO,GAAGC,cAAgB1C,KAAKP,YAAYkD,MAAM,EACvF,EAEA,YAAA1B,UAAA,e,EAAA,OACE,IAAKjB,KAAKX,YAKR,OAJAW,KAAKd,KAAO,CAAE0D,QAAS,GAAIC,MAAO,GAAIC,gBAAiB,GAAIC,SAAU,GAAIC,QAAS,IAClFhD,KAAKT,iBAAkB,EACvBS,KAAKR,mBAAqB,+CAChB,QAAV,EAAAQ,KAAKwB,aAAK,qBAIZ,UAAMN,IAAI,uBAAgBlB,KAAKX,YAAW,8BAAsBW,KAAKC,UAClEgD,MAAK,SAAAC,G,QACEC,EAAoB,QAAb,EAAAD,EAAShE,YAAI,eAAEiE,KAExB7C,MAAMC,QAAQ4C,IAASA,EAAK3C,OAAS,GACvC,EAAKtB,KAAO,CACV0D,QAASO,EAAKC,QAAO,SAACC,GAAc,MAAc,WAAdA,EAAKC,IAAL,IACpCT,MAAOM,EAAKC,QAAO,SAACC,GAAc,MAAc,SAAdA,EAAKC,IAAL,IAClCR,gBAAiBK,EAAKC,QAAO,SAACC,GAAc,MAAc,mBAAdA,EAAKC,IAAL,IAC5CN,QAASG,EAAKC,QAAO,SAACC,GAAc,MAAc,YAAdA,EAAKC,IAAL,IACpCP,SAAUI,EAAKC,QAAO,SAACC,GAAc,MAAc,YAAdA,EAAKC,IAAL,KAEvC,EAAK/D,iBAAkB,EACvB,EAAKJ,MAAQ,KACb,EAAKK,mBAAqB,KAE1B,EAAKN,KAAO,CAAE0D,QAAS,GAAIC,MAAO,GAAIC,gBAAiB,GAAIC,SAAU,GAAIC,QAAS,IAClF,EAAKzD,iBAAkB,EACvB,EAAKC,mBAAqB,uCAC1B,EAAKL,MAAQ,MAGL,QAAV,IAAKqC,aAAK,gBACZ,IACC+B,OAAM,SAAApE,G,QACL,EAAKD,KAAO,CAAE0D,QAAS,GAAIC,MAAO,GAAIC,gBAAiB,GAAIC,SAAU,GAAIC,QAAS,IAEnD,OAAb,QAAd,EAAA7D,EAAM+D,gBAAQ,eAAEM,SAClB,EAAKjE,iBAAkB,EACvB,EAAKC,mBAAqB,4CAC1B,EAAKL,MAAQ,OAEb,EAAKI,iBAAkB,EACvB,EAAKC,mBAAqB,sDAC1B,EAAKL,MAAQA,EAAMsE,SAAW,iBAGtB,QAAV,IAAKjC,aAAK,gBACZ,GACJ,EAEA,YAAAkC,aAAA,SAAaL,GACX,OAAKA,EACEM,OAAOC,KAAKP,GAChBD,QAAO,SAAAS,GAAK,OAAAA,EAAEC,WAAW,YAA0B,IAAZT,EAAKQ,SAAwBE,IAAZV,EAAKQ,EAAjD,IACZjD,KAAI,SAAAiD,GAAK,OAAAA,EAAEG,QAAQ,UAAW,IAAIA,QAAQ,IAAK,IAAtC,IAHM,EAIpB,EAGQ,YAAAjD,iBAAR,WACMf,KAAKV,cAAckB,OAAS,GAC9BR,KAAKV,cAAc2E,QAAQ,CAAE5D,IAAK,GAAIS,KAAM,kBAC5Cd,KAAKX,YAAc,IACoB,IAA9BW,KAAKV,cAAckB,QAC5BR,KAAKX,YAAcW,KAAKV,cAAc,GAAGe,IACzCL,KAAKiB,aAELjB,KAAKX,YAAc,EAEvB,EACF,EAxLA,GA0LA,0BACE,KAAA6E,SAAW,IACX,KAAAC,SAAW,UACX,KAAAC,MAAQ,CAAC,EACT,KAAAC,kBAAmB,EACnB,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,mBAQb,QANQ,YAAAC,KAAN,SAAWN,EAAeO,EAAcC,EAAoBC,G,gFACpDC,EAAOD,aAAW,EAAXA,EAAc,MAEzBC,EAAKtD,MAAQ,WAAM,OAAA4C,EAAMlC,QAAN,G,WAGzB,EAfA,IAqBA,IAAA6C,SACGC,cACAC,QAAQhC,MAAK,YACZ,IAAAiC,QAAOC,SAASC,MAAMC,QAAQ,EAAQ,MACxC,IAEW,EAAAC,cAAgB,yBAC7B,UAAQC,OAAO,EAAAD,cAAe,IAAIE,UAAU,oBAX5C,WACE,OAAO,IAAIC,CACb,G","sources":["webpack://ode-ngjs-front/./src/ts/widgets/cantine-widget/cantine-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/cantine-widget/cantine-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<style>.cantine-menu-card{color:#333;justify-content:center;align-items:center;padding:5%;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,.1)}.cantine-select-wrapper{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:20px;font-family:Roboto,sans-serif;color:#333}.cantine-select-wrapper label{font-weight:700;font-size:1em}.cantine-select-wrapper select{padding:6px 10px;border-radius:5px;border:1px solid #ccc;font-size:.95em;font-family:Roboto,sans-serif;background-color:#fff;color:#333;box-shadow:0 2px 5px rgba(0,0,0,.05);transition:border-color .3s ease}.cantine-select-wrapper select:focus{outline:0;border-color:#f7955c}.cantine-select{padding:8px 12px;font-size:1em;border-radius:5px;border:1px solid #ccc;font-family:Roboto,sans-serif;background-color:#fff;color:#333;box-shadow:0 0 5px rgba(0,0,0,.05);max-width:100%}.menu-error-message{padding:1rem;color:#721c24;background-color:#f8d7da;border:1px solid #f5c6cb;border-radius:4px;margin-top:1rem}.cantine-separator{border:none;height:1px;background-color:#ccc;margin:3% 0}.cantine-section{margin-bottom:3%}.cantine-section-title{font-weight:700;font-size:1.1em;display:flex;align-items:center}.cantine-item{margin-left:1%;font-family:Roboto;color:#4a4a4a;font-size:medium}.cantine-item{align-items:center;gap:5px}.cantine-items-container{border-left:2px solid #ccc;margin-left:.8%;padding-left:3%}.cantine-icon{width:1em;height:1em;margin-left:5px;vertical-align:middle;display:inline-block;margin-bottom:10px}.cantine-dot{height:.6em;width:.6em;border-radius:50%;display:inline-block;margin-right:2%}.cantine-arrow-button{background:0 0;border:none;font-size:1.5em;cursor:pointer;opacity:.6;transition:opacity .3s ease}.cantine-arrow-button:hover{opacity:1}.cantine-arrow-button:focus{outline:0}.cantine-allergen-collapse{background-color:#f9f9f9;border-radius:5px;padding:0;display:none;transition:all .3s ease-in-out;font-size:.9em}.cantine-allergen-collapse.open{display:block}.cantine-collapse-toggle{background-color:#f7955c;border:none;padding:0 10px;border-radius:5px;font-weight:700;cursor:pointer;display:block;margin-top:0;color:#fff;font-size:.8em}.cantine-collapse-toggle:hover{background-color:#e6b848}.cantine-red{background-color:red}.cantine-green{background-color:green}.cantine-blue{background-color:#00f}.cantine-pink{background-color:pink}.cantine-yellow{background-color:orange}</style> <div class=\\\"widget-dashboard\\\"> <div class=\\\"cantine-menu-card\\\"> <h2 style=\\\"color:#333;font-family:Roboto,sans-serif;display:flex;align-items:center;justify-content:center;gap:10px\\\"> <i18n>cantine.title</i18n> </h2> <div class=\\\"cantine-separator\\\"></div> <div ng-if=\\\"ctrl.showUaiDropdown\\\"> <select id=\\\"uaiSelect\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.selectedUai\\\" ng-options=\\\"option.uai as option.name for option in ctrl.schoolOptions\\\" ng-change=\\\"ctrl.onUaiSelected()\\\"> <option value=\\\"\\\" disabled=\\\"disabled\\\" selected=\\\"selected\\\" hidden> <i18n>cantine.selectEtablissement</i18n> </option> </select> </div> <div class=\\\"cantine-date-navigation\\\" style=\\\"display:flex;align-items:center;justify-content:center;gap:10px;position:relative\\\"> <button class=\\\"cantine-arrow-button\\\" ng-click=\\\"ctrl.changeDate(-1)\\\">←</button> <span style=\\\"font-size:1.2em;font-weight:700;cursor:pointer\\\" ng-show=\\\"!ctrl.showDatepicker\\\" ng-click=\\\"ctrl.toggleDatepicker(true)\\\">{{ ctrl.currentDate }}</span> <input type=\\\"date\\\" ng-model=\\\"ctrl.pickerDate\\\" ng-blur=\\\"ctrl.onDateBlur()\\\" ng-show=\\\"ctrl.showDatepicker\\\" style=\\\"font-size:1.2em;font-weight:700;cursor:pointer;text-align:center\\\" ng-click=\\\"ctrl.toggleDatepicker(true)\\\"/> <button class=\\\"cantine-arrow-button\\\" ng-click=\\\"ctrl.changeDate(1)\\\">→</button> </div> <div ng-if=\\\"ctrl.selectedUai\\\"> <div ng-if=\\\"!ctrl.menuUnavailable\\\"> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-red\\\"></span> <i18n>cantine.entree</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.entrees\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-green\\\"></span> <i18n>cantine.plat</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.plats\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-blue\\\"></span> <i18n>cantine.accompagnement</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.accompagnements\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-pink\\\"></span> <i18n>cantine.laitage</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.laitage\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-yellow\\\"></span> <i18n>cantine.dessert</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.desserts\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> </div> <div ng-if=\\\"ctrl.menuUnavailable\\\" class=\\\"menu-error-message\\\"> {{ ctrl.unavailableMessage }} </div> </div> </div> </div>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif, session } from \"../../utils\";\nimport moment from \"moment\";\nimport 'moment/locale/fr';\nimport axios from 'axios';\n\nclass Controller implements IController {\n data: any = {};\n error: string | null = null;\n uaiList: string[] = [];\n selectedUai: string = '';\n schoolOptions: { uai: string; name: string }[] = [];\n\n menuUnavailable: boolean = false;\n unavailableMessage: string = '';\n\n apiDate: string;\n currentDate: string = '';\n pickerDate: Date = new Date();\n showDatepicker: boolean = false;\n previousApiDate: string = '';\n\n public apply?: () => void;\n\n constructor(private $scope: IScope) {\n const user = session().user;\n\n this.apiDate = moment(this.pickerDate).format('YYYY-MM-DD');\n this.updateCurrentDateDisplay();\n\n const uaiFromSession = user.uai;\n if (Array.isArray(uaiFromSession) && uaiFromSession.length > 1) {\n this.loadUserStructures(user.userId);\n } else if (typeof uaiFromSession === 'string' || (Array.isArray(uaiFromSession) && uaiFromSession.length === 1)) {\n this.uaiList = Array.isArray(uaiFromSession) ? uaiFromSession : [uaiFromSession];\n const nameList = Array.isArray(user.structureNames) ? user.structureNames : [];\n\n this.schoolOptions = this.uaiList.map((uai, i) => ({ uai, name: nameList[i] || uai }));\n\n this.setupUaiDropdown(); // 🔹 call helper\n } else {\n this.uaiList = [];\n this.schoolOptions = [];\n this.selectedUai = '';\n }\n }\n\n onUaiSelected() {\n if (this.selectedUai) {\n this.fetchMenu();\n }\n }\n\n get showUaiDropdown(): boolean {\n return this.schoolOptions.length > 1;\n }\n\n async loadUserStructures(userId: string) {\n try {\n const { data } = await axios.get(`/directory/user/${userId}`);\n if (data && Array.isArray(data.structureNodes)) {\n this.schoolOptions = data.structureNodes.map((node: any) => ({\n uai: node.UAI,\n name: node.feederName || node.name || node.UAI,\n }));\n this.uaiList = this.schoolOptions.map(opt => opt.uai);\n\n this.setupUaiDropdown(); // 🔹 call helper\n this.apply?.();\n } else {\n this.error = \"No structures found for user.\";\n }\n } catch {\n this.error = \"Failed to load user structures.\";\n }\n }\n\n changeDate(delta: number): void {\n this.pickerDate.setDate(this.pickerDate.getDate() + delta);\n this.updateDateAndFetch();\n }\n\n processDateSelection(): void {\n this.updateDateAndFetch();\n this.showDatepicker = false;\n }\n\n onDateBlur(): void {\n if (this.pickerDate instanceof Date && !isNaN(this.pickerDate.getTime())) {\n this.processDateSelection();\n this.$scope.$apply();\n }\n }\n\n toggleDatepicker(forceOpen: boolean | null = null): void {\n if (forceOpen !== null) {\n this.showDatepicker = forceOpen;\n } else {\n this.showDatepicker = !this.showDatepicker;\n }\n }\n\n private updateDateAndFetch() {\n this.apiDate = moment(this.pickerDate).format('YYYY-MM-DD');\n if (this.apiDate !== this.previousApiDate) {\n this.previousApiDate = this.apiDate;\n this.updateCurrentDateDisplay();\n this.fetchMenu();\n }\n }\n\n private updateCurrentDateDisplay() {\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'long',\n day: '2-digit',\n month: 'long',\n };\n this.currentDate = this.pickerDate.toLocaleDateString('fr-FR', options);\n this.currentDate = this.currentDate.charAt(0).toUpperCase() + this.currentDate.slice(1);\n }\n\n fetchMenu() {\n if (!this.selectedUai) {\n this.data = { entrees: [], plats: [], accompagnements: [], desserts: [], laitage: [] };\n this.menuUnavailable = true;\n this.unavailableMessage = \"Veuillez sélectionner un établissement.\";\n this.apply?.();\n return;\n }\n\n axios.get(`/appregistry/${this.selectedUai}/cantine/menu?date=${this.apiDate}`)\n .then(response => {\n const menu = response.data?.menu;\n\n if (Array.isArray(menu) && menu.length > 0) {\n this.data = {\n entrees: menu.filter((item: any) => item.type === \"entree\"),\n plats: menu.filter((item: any) => item.type === \"plat\"),\n accompagnements: menu.filter((item: any) => item.type === \"accompagnement\"),\n laitage: menu.filter((item: any) => item.type === \"laitage\"),\n desserts: menu.filter((item: any) => item.type === \"dessert\"),\n };\n this.menuUnavailable = false;\n this.error = null;\n this.unavailableMessage = '';\n } else {\n this.data = { entrees: [], plats: [], accompagnements: [], desserts: [], laitage: [] };\n this.menuUnavailable = true;\n this.unavailableMessage = \"Menu non disponible pour cette date.\";\n this.error = null;\n }\n\n this.apply?.();\n })\n .catch(error => {\n this.data = { entrees: [], plats: [], accompagnements: [], desserts: [], laitage: [] };\n\n if (error.response?.status === 400) {\n this.menuUnavailable = true;\n this.unavailableMessage = \"Menu indisponible pour cet établissement.\";\n this.error = null;\n } else {\n this.menuUnavailable = true;\n this.unavailableMessage = \"Une erreur est survenue lors du chargement du menu.\";\n this.error = error.message || \"Unknown error\";\n }\n\n this.apply?.();\n });\n }\n\n getAllergies(item: any): string[] {\n if (!item) return [];\n return Object.keys(item)\n .filter(k => k.startsWith(\"allerg_\") && item[k] !== 0 && item[k] !== undefined)\n .map(k => k.replace(\"allerg_\", \"\").replace(\"_\", \" \"));\n }\n\n // 🔹 New helper method\n private setupUaiDropdown() {\n if (this.schoolOptions.length > 1) {\n this.schoolOptions.unshift({ uai: '', name: 'Établissement' });\n this.selectedUai = '';\n } else if (this.schoolOptions.length === 1) {\n this.selectedUai = this.schoolOptions[0].uai;\n this.fetchMenu();\n } else {\n this.selectedUai = '';\n }\n }\n}\n\nclass Directive implements IDirective<IScope, JQLite, IAttributes, IController[]> {\n restrict = \"E\";\n template = require(\"./cantine-widget.widget.html\").default;\n scope = {};\n bindToController = true;\n controller = [Controller];\n controllerAs = \"ctrl\";\n require = [\"odeCantineWidget\"];\n\n async link(scope: IScope, elem: JQLite, attrs: IAttributes, controllers?: IController[]) {\n const ctrl = controllers?.[0] as Controller | undefined;\n if (ctrl) {\n ctrl.apply = () => scope.$apply();\n }\n }\n}\n\nfunction DirectiveFactory() {\n return new Directive();\n}\n\nnotif()\n .onLangReady()\n .promise.then(() => {\n conf().Platform.idiom.addKeys(require(\"./i18n/fr.json\"));\n });\n\nexport const odeModuleName = \"odeCantineWidgetModule\";\nangular.module(odeModuleName, []).directive(\"odeCantineWidget\", DirectiveFactory);\n"],"names":["$scope","data","error","uaiList","selectedUai","schoolOptions","menuUnavailable","unavailableMessage","currentDate","pickerDate","Date","showDatepicker","previousApiDate","user","session","this","apiDate","format","updateCurrentDateDisplay","uaiFromSession","uai","Array","isArray","length","loadUserStructures","userId","structureNames","map","i","name","setupUaiDropdown","onUaiSelected","fetchMenu","get","structureNodes","node","UAI","feederName","opt","apply","changeDate","delta","setDate","getDate","updateDateAndFetch","processDateSelection","onDateBlur","isNaN","getTime","$apply","toggleDatepicker","forceOpen","toLocaleDateString","weekday","day","month","charAt","toUpperCase","slice","entrees","plats","accompagnements","desserts","laitage","then","response","menu","filter","item","type","catch","status","message","getAllergies","Object","keys","k","startsWith","undefined","replace","unshift","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","notif","onLangReady","promise","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"widgets/cantine-widget/cantine-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/cantine-widget/cantine-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/cantine-widget/cantine-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<style>.cantine-menu-card{color:#333;justify-content:center;align-items:center;padding:5%;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,.1)}.cantine-select-wrapper{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:20px;font-family:Roboto,sans-serif;color:#333}.cantine-select-wrapper label{font-weight:700;font-size:1em}.cantine-select-wrapper select{padding:6px 10px;border-radius:5px;border:1px solid #ccc;font-size:.95em;font-family:Roboto,sans-serif;background-color:#fff;color:#333;box-shadow:0 2px 5px rgba(0,0,0,.05);transition:border-color .3s ease}.cantine-select-wrapper select:focus{outline:0;border-color:#f7955c}.cantine-select{padding:8px 12px;font-size:1em;border-radius:5px;border:1px solid #ccc;font-family:Roboto,sans-serif;background-color:#fff;color:#333;box-shadow:0 0 5px rgba(0,0,0,.05);max-width:100%}.menu-error-message{padding:1rem;color:#721c24;background-color:#f8d7da;border:1px solid #f5c6cb;border-radius:4px;margin-top:1rem}.cantine-separator{border:none;height:1px;background-color:#ccc;margin:3% 0}.cantine-section{margin-bottom:3%}.cantine-section-title{font-weight:700;font-size:1.1em;display:flex;align-items:center}.cantine-item{margin-left:1%;font-family:Roboto;color:#4a4a4a;font-size:medium}.cantine-item{align-items:center;gap:5px}.cantine-items-container{border-left:2px solid #ccc;margin-left:.8%;padding-left:3%}.cantine-icon{width:1em;height:1em;margin-left:5px;vertical-align:middle;display:inline-block;margin-bottom:10px}.cantine-dot{height:.6em;width:.6em;border-radius:50%;display:inline-block;margin-right:2%}.cantine-arrow-button{background:0 0;border:none;font-size:1.5em;cursor:pointer;opacity:.6;transition:opacity .3s ease}.cantine-arrow-button:hover{opacity:1}.cantine-arrow-button:focus{outline:0}.cantine-allergen-collapse{background-color:#f9f9f9;border-radius:5px;padding:0;display:none;transition:all .3s ease-in-out;font-size:.9em}.cantine-allergen-collapse.open{display:block}.cantine-collapse-toggle{background-color:#f7955c;border:none;padding:0 10px;border-radius:5px;font-weight:700;cursor:pointer;display:block;margin-top:0;color:#fff;font-size:.8em}.cantine-collapse-toggle:hover{background-color:#e6b848}.cantine-red{background-color:red}.cantine-green{background-color:green}.cantine-blue{background-color:#00f}.cantine-pink{background-color:pink}.cantine-yellow{background-color:orange}</style> <div class=\\\"widget-dashboard\\\"> <div class=\\\"cantine-menu-card\\\"> <h2 style=\\\"color:#333;font-family:Roboto,sans-serif;display:flex;align-items:center;justify-content:center;gap:10px\\\"> <i18n>cantine.title</i18n> </h2> <div class=\\\"cantine-separator\\\"></div> <div ng-if=\\\"ctrl.showUaiDropdown\\\"> <select id=\\\"uaiSelect\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.selectedUai\\\" ng-options=\\\"option.uai as option.name for option in ctrl.schoolOptions\\\" ng-change=\\\"ctrl.onUaiSelected()\\\"> <option value=\\\"\\\" disabled=\\\"disabled\\\" selected=\\\"selected\\\" hidden> <i18n>cantine.selectEtablissement</i18n> </option> </select> </div> <div class=\\\"cantine-date-navigation\\\" style=\\\"display:flex;align-items:center;justify-content:center;gap:10px;position:relative\\\"> <button class=\\\"cantine-arrow-button\\\" ng-click=\\\"ctrl.changeDate(-1)\\\">←</button> <span style=\\\"font-size:1.2em;font-weight:700;cursor:pointer\\\" ng-show=\\\"!ctrl.showDatepicker\\\" ng-click=\\\"ctrl.toggleDatepicker(true)\\\">{{ ctrl.currentDate }}</span> <input type=\\\"date\\\" ng-model=\\\"ctrl.pickerDate\\\" ng-blur=\\\"ctrl.onDateBlur()\\\" ng-show=\\\"ctrl.showDatepicker\\\" style=\\\"font-size:1.2em;font-weight:700;cursor:pointer;text-align:center\\\" ng-click=\\\"ctrl.toggleDatepicker(true)\\\"/> <button class=\\\"cantine-arrow-button\\\" ng-click=\\\"ctrl.changeDate(1)\\\">→</button> </div> <div ng-if=\\\"ctrl.selectedUai\\\"> <div ng-if=\\\"!ctrl.menuUnavailable\\\"> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-red\\\"></span> <i18n>cantine.entree</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.entrees\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-green\\\"></span> <i18n>cantine.plat</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.plats\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-blue\\\"></span> <i18n>cantine.accompagnement</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.accompagnements\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-pink\\\"></span> <i18n>cantine.laitage</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.laitage\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> <div class=\\\"cantine-section\\\"> <div class=\\\"cantine-section-title\\\"> <span class=\\\"cantine-dot cantine-yellow\\\"></span> <i18n>cantine.dessert</i18n> </div> <div class=\\\"cantine-items-container\\\"> <div class=\\\"cantine-item\\\" ng-repeat=\\\"item in ctrl.data.desserts\\\"> {{ item.designationMenu && item.designationMenu.trim() !== '' ? item.designationMenu : item.nom }} <img ng-if=\\\"item.bio\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/bio-logo.png\\\" alt=\\\"Bio\\\" class=\\\"cantine-icon\\\" title=\\\"Agriculture biologique\\\"> <img ng-if=\\\"item.faitmaison\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/fait-maison-logo.png\\\" alt=\\\"Fait Maison\\\" class=\\\"cantine-icon\\\" title=\\\"Fait maison\\\"> <img ng-if=\\\"item.vegetarien\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/vegetarien-logo.png\\\" alt=\\\"Vegetarian\\\" class=\\\"cantine-icon\\\" title=\\\"Végétarien\\\"> <img ng-if=\\\"item.local\\\" src=\\\"/assets/widgets/cantine-widget/cantine-logos/produit-local-logo.png\\\" alt=\\\"Local Product\\\" class=\\\"cantine-icon\\\" title=\\\"Produit local\\\"> <button class=\\\"cantine-collapse-toggle\\\" ng-click=\\\"item.showAllergies = !item.showAllergies\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <i18n>cantine.allergenes</i18n> </button> <div class=\\\"cantine-allergen-collapse\\\" ng-class=\\\"{'open': item.showAllergies}\\\" ng-if=\\\"ctrl.getAllergies(item).length > 0\\\"> <span>{{ ctrl.getAllergies(item).join(', ') }}</span> </div> </div> </div> </div> </div> <div ng-if=\\\"ctrl.menuUnavailable\\\" class=\\\"menu-error-message\\\"> {{ ctrl.unavailableMessage }} </div> </div> </div> </div>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif, session } from \"../../utils\";\nimport moment from \"moment\";\nimport 'moment/locale/fr';\nimport axios from 'axios';\n\nclass Controller implements IController {\n data: any = {};\n error: string | null = null;\n uaiList: string[] = [];\n selectedUai: string = '';\n schoolOptions: { uai: string; name: string }[] = [];\n\n menuUnavailable: boolean = false;\n unavailableMessage: string = '';\n\n apiDate: string;\n currentDate: string = '';\n pickerDate: Date = new Date();\n showDatepicker: boolean = false;\n previousApiDate: string = '';\n\n public apply?: () => void;\n\n constructor(private $scope: IScope) {\n const user = session().user;\n\n this.apiDate = moment(this.pickerDate).format('YYYY-MM-DD');\n this.updateCurrentDateDisplay();\n\n const uaiFromSession = user.uai;\n if (Array.isArray(uaiFromSession) && uaiFromSession.length > 1) {\n this.loadUserStructures(user.userId);\n } else if (typeof uaiFromSession === 'string' || (Array.isArray(uaiFromSession) && uaiFromSession.length === 1)) {\n this.uaiList = Array.isArray(uaiFromSession) ? uaiFromSession : [uaiFromSession];\n const nameList = Array.isArray(user.structureNames) ? user.structureNames : [];\n\n this.schoolOptions = this.uaiList.map((uai, i) => ({ uai, name: nameList[i] || uai }));\n\n this.setupUaiDropdown(); // 🔹 call helper\n } else {\n this.uaiList = [];\n this.schoolOptions = [];\n this.selectedUai = '';\n }\n }\n\n onUaiSelected() {\n if (this.selectedUai) {\n this.fetchMenu();\n }\n }\n\n get showUaiDropdown(): boolean {\n return this.schoolOptions.length > 1;\n }\n\n async loadUserStructures(userId: string) {\n try {\n const { data } = await axios.get(`/directory/user/${userId}`);\n if (data && Array.isArray(data.structureNodes)) {\n this.schoolOptions = data.structureNodes.map((node: any) => ({\n uai: node.UAI,\n name: node.feederName || node.name || node.UAI,\n }));\n this.uaiList = this.schoolOptions.map(opt => opt.uai);\n\n this.setupUaiDropdown(); // 🔹 call helper\n this.apply?.();\n } else {\n this.error = \"No structures found for user.\";\n }\n } catch {\n this.error = \"Failed to load user structures.\";\n }\n }\n\n changeDate(delta: number): void {\n this.pickerDate.setDate(this.pickerDate.getDate() + delta);\n this.updateDateAndFetch();\n }\n\n processDateSelection(): void {\n this.updateDateAndFetch();\n this.showDatepicker = false;\n }\n\n onDateBlur(): void {\n if (this.pickerDate instanceof Date && !isNaN(this.pickerDate.getTime())) {\n this.processDateSelection();\n this.$scope.$apply();\n }\n }\n\n toggleDatepicker(forceOpen: boolean | null = null): void {\n if (forceOpen !== null) {\n this.showDatepicker = forceOpen;\n } else {\n this.showDatepicker = !this.showDatepicker;\n }\n }\n\n private updateDateAndFetch() {\n this.apiDate = moment(this.pickerDate).format('YYYY-MM-DD');\n if (this.apiDate !== this.previousApiDate) {\n this.previousApiDate = this.apiDate;\n this.updateCurrentDateDisplay();\n this.fetchMenu();\n }\n }\n\n private updateCurrentDateDisplay() {\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'long',\n day: '2-digit',\n month: 'long',\n };\n this.currentDate = this.pickerDate.toLocaleDateString('fr-FR', options);\n this.currentDate = this.currentDate.charAt(0).toUpperCase() + this.currentDate.slice(1);\n }\n\n fetchMenu() {\n if (!this.selectedUai) {\n this.data = { entrees: [], plats: [], accompagnements: [], desserts: [], laitage: [] };\n this.menuUnavailable = true;\n this.unavailableMessage = \"Veuillez sélectionner un établissement.\";\n this.apply?.();\n return;\n }\n\n axios.get(`/appregistry/${this.selectedUai}/cantine/menu?date=${this.apiDate}`)\n .then(response => {\n const menu = response.data?.menu;\n\n if (Array.isArray(menu) && menu.length > 0) {\n this.data = {\n entrees: menu.filter((item: any) => item.type === \"entree\"),\n plats: menu.filter((item: any) => item.type === \"plat\"),\n accompagnements: menu.filter((item: any) => item.type === \"accompagnement\"),\n laitage: menu.filter((item: any) => item.type === \"laitage\"),\n desserts: menu.filter((item: any) => item.type === \"dessert\"),\n };\n this.menuUnavailable = false;\n this.error = null;\n this.unavailableMessage = '';\n } else {\n this.data = { entrees: [], plats: [], accompagnements: [], desserts: [], laitage: [] };\n this.menuUnavailable = true;\n this.unavailableMessage = \"Menu non disponible pour cette date.\";\n this.error = null;\n }\n\n this.apply?.();\n })\n .catch(error => {\n this.data = { entrees: [], plats: [], accompagnements: [], desserts: [], laitage: [] };\n\n if (error.response?.status === 400) {\n this.menuUnavailable = true;\n this.unavailableMessage = \"Menu indisponible pour cet établissement.\";\n this.error = null;\n } else {\n this.menuUnavailable = true;\n this.unavailableMessage = \"Une erreur est survenue lors du chargement du menu.\";\n this.error = error.message || \"Unknown error\";\n }\n\n this.apply?.();\n });\n }\n\n getAllergies(item: any): string[] {\n if (!item) return [];\n return Object.keys(item)\n .filter(k => k.startsWith(\"allerg_\") && item[k] !== 0 && item[k] !== undefined)\n .map(k => k.replace(\"allerg_\", \"\").replace(\"_\", \" \"));\n }\n\n // 🔹 New helper method\n private setupUaiDropdown() {\n if (this.schoolOptions.length > 1) {\n this.schoolOptions.unshift({ uai: '', name: 'Établissement' });\n this.selectedUai = '';\n } else if (this.schoolOptions.length === 1) {\n this.selectedUai = this.schoolOptions[0].uai;\n this.fetchMenu();\n } else {\n this.selectedUai = '';\n }\n }\n}\n\nclass Directive implements IDirective<IScope, JQLite, IAttributes, IController[]> {\n restrict = \"E\";\n template = require(\"./cantine-widget.widget.html\").default;\n scope = {};\n bindToController = true;\n controller = [Controller];\n controllerAs = \"ctrl\";\n require = [\"odeCantineWidget\"];\n\n async link(scope: IScope, elem: JQLite, attrs: IAttributes, controllers?: IController[]) {\n const ctrl = controllers?.[0] as Controller | undefined;\n if (ctrl) {\n ctrl.apply = () => scope.$apply();\n }\n }\n}\n\nfunction DirectiveFactory() {\n return new Directive();\n}\n\nnotif()\n .onLangReady()\n .promise.then(() => {\n conf().Platform.idiom.addKeys(require(\"./i18n/fr.json\"));\n });\n\nexport const odeModuleName = \"odeCantineWidgetModule\";\nangular.module(odeModuleName, []).directive(\"odeCantineWidget\", DirectiveFactory);\n"],"names":["$scope","data","error","uaiList","selectedUai","schoolOptions","menuUnavailable","unavailableMessage","currentDate","pickerDate","Date","showDatepicker","previousApiDate","user","session","this","apiDate","format","updateCurrentDateDisplay","uaiFromSession","uai","Array","isArray","length","loadUserStructures","userId","structureNames","map","i","name","setupUaiDropdown","onUaiSelected","fetchMenu","get","structureNodes","node","UAI","feederName","opt","apply","changeDate","delta","setDate","getDate","updateDateAndFetch","processDateSelection","onDateBlur","isNaN","getTime","$apply","toggleDatepicker","forceOpen","toLocaleDateString","weekday","day","month","charAt","toUpperCase","slice","entrees","plats","accompagnements","desserts","laitage","then","response","menu","filter","item","type","catch","status","message","getAllergies","Object","keys","k","startsWith","undefined","replace","unshift","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","notif","onLangReady","promise","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([[438],{5893:(e,t,r)=>{r.d(t,{Z:()=>n});const n=' <div class="widget-dashboard"> <div class="widget-header"> <div class="subtitle"><i18n>carnet-de-bord.widget.title</i18n></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.errorMsg"> <span class="info" translate content="[[ctrl.errorMsg.error]]"></span> </div> <div class="dashboard-choice" ng-if="!ctrl.errorMsg && ctrl.description.profiles.indexOf(\'Relative\')>=0 && ctrl.eleves.length>0 && ctrl.structures"> <a href="" class="avatar-link" ng-repeat="eleve in ctrl.eleves" ng-click="ctrl.getEleve($index)" ng-class="{\'active\': eleve===ctrl.currentEleve}"> <img ng-src="[[ctrl.getAvatar($index)]]"/> <span>[[ ctrl.getTag(\'Prenom\', $index) ]]</span> </a> </div> <ul class="dashboard-list" ng-if="!ctrl.errorMsg"> <li class="item link-discret" ng-repeat="contentType in ctrl.contentTypes" ng-click="ctrl.openLightBox(contentType, $event)"> <a href="#" class="item-inner"> <div class="left"> <div class="icon"> <i class="[[contentType.icon]]"></i> </div> </div> <div class="right"> <div class="label" translate content="carnet-de-bord.widget.[[contentType.title]]"></div> <div class="info meta" ng-if="contentType.compact">[[contentType.compact]]</div> <div class="info meta" ng-if="!contentType.compact"><i18n>carnet-de-bord.widget.empty</i18n></div> </div> </a> </li> </ul> </div> <ode-modal visible="ctrl.showLightbox" on-close="ctrl.showLightbox=false" dnd-nodrag> <ode-modal-title> <span translate content="[[ctrl.currentContentType.lightboxTitle]]"></span> <span ng-if="ctrl.me.type !== \'ELEVE\' "> <i18n>carnet-de-bord.widget.of</i18n> [[ctrl.getCurrentTag(\'Prenom\')]] </span> </ode-modal-title> <ode-modal-body> <article> <div ng-repeat="item in ctrl.currentContentType.full"> <p ng-if="!item.subsections && !item.pageUrl"> <span>•</span>[[ item.value ]] </p> <p ng-if="!item.subsections && item.pageUrl"> <a target="_blank" rel="noopener" href="[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]" ng-click="ctrl.trackEvent($event, {detail:{\'open\':\'any\'} })"> <span>•</span>[[ item.value ]] <i class="new-tab right-magnet" i18n-title="carnet-de-bord.widget.target.tooltip"></i> </a> </p> <h4 ng-if="item.subsections && !item.pageUrl"> [[ item.value ]] </h4> <h4 ng-if="item.subsections && item.pageUrl"> <a target="_blank" rel="noopener" href="[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]" ng-click="ctrl.trackEvent($event, {detail:{\'open\':\'any\'} })"> [[ item.value ]] <i class="new-tab right-magnet" i18n-title="carnet-de-bord.widget.target.tooltip"></i> </a> </h4> <div ng-if="item.subsections"> <section ng-repeat="subsection in item.subsections"> <b ng-if="!subsection.pageUrl">[[ subsection.header ]]</b> <a ng-if="subsection.pageUrl" target="_blank" rel="noopener" href="[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ subsection.pageUrl ]]" ng-click="ctrl.trackEvent($event, {detail:{\'open\':\'any\'} })"> <b>[[ subsection.header ]] <i class="new-tab right-magnet" i18n-title="carnet-de-bord.widget.target.tooltip"></i> </b> </a> <br> <span> [[ subsection.content ]] </span> </section> </div> </div> </article> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> </div> '},5613:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var i=n(r(4202)),a=r(9419),o=function(){function e(e){this.themeHelperSvc=e,this.me=(0,a.session)().user,this.description=(0,a.session)().description,this.structures=[],this.eleves=[],this.showLightbox=!1,this.contentTypes=[{title:"lateness",icon:"ic-timer-off",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.lateness.all"},{title:"absences",icon:"ic-nobody",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.absences.all"},{title:"grades",icon:"ic-grades",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.grades.all"},{title:"diary",icon:"ic-homeworks",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.diary.all"},{title:"skills",icon:"ic-trending-up",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.skills.all"}],this.structureAddress="",this.structureId=""}return e.prototype.getAvatar=function(e){return e<this.eleves.length?"/userbook/avatar/".concat(this.getChildId(e),"?thumbnail=100x100"):this.themeHelperSvc.toSkinUrl("/img/illustrations/no-avatar.svg?thumbnail=100x100")},e.prototype.getEleve=function(e){var t=this;e<this.eleves.length&&(this.currentEleve=this.eleves[e],this.contentTypes.forEach((function(e){t.getContent(e,t.currentEleve)})))},e.prototype.getTag=function(e,t){return t<this.eleves.length?$(this.eleves[t]).find(e).text():""},e.prototype.getCurrentTag=function(e){return this.currentEleve?$(this.currentEleve).find(e).text():""},e.prototype.userStatus=function(){return"PERSRELELEVE"===this.me.type?"parent":"ELEVE"===this.me.type?"eleve":""},e.prototype.getChildId=function(e){var t=this.getTag("Prenom",e).toLowerCase(),r=this.getTag("Nom",e).toLowerCase();for(var n in this.me.children){var i=this.me.children[n].firstName.toLowerCase(),a=this.me.children[n].lastName.toLowerCase();if(i===t&&a===r)return n}},e.prototype.openLightBox=function(e,t){this.currentContentType=e,this.showLightbox=!0,t.currentTarget&&this.trackEvent(t,{detail:{properties:"any"}})},e.prototype.trackEvent=function(e,t){var r,n;void 0===t.bubbles&&(t.bubbles=!0);var i=null;!t||"string"!=typeof(null===(r=t.detail)||void 0===r?void 0:r.open)&&"string"!=typeof(null===(n=t.detail)||void 0===n?void 0:n.properties)||(i=new CustomEvent(a.TrackedActionFromWidget.carnetDeBord,t)),i&&e.currentTarget&&e.currentTarget.dispatchEvent(i)},e.prototype.getContent=function(e,t){var r=(0,a.conf)().Platform.idiom;if("lateness"===e.title){var n=$(t).find("Retard Justifie"),i=!1,o=[];e.compact=!1,e.full=!1,n&&(n.each((function(t,n){if("false"===$(n).text()){var s=$(n).parent().attr("page");i=$(n).parent().find("Date").text(),i=a.L10n.moment(i),i=r.translate("carnet-de-bord.widget.the")+" "+i.format("DD/MM/YYYY - HH:mm"),o.push({value:i,pageUrl:s}),e.compact=o[0].value}})),e.full=o)}else if("absences"===e.title){var s=[];e.compact=!1,e.full=!1;var d=$(t).find("Absence Justifie");d&&(d.each((function(t,n){if("false"===$(n).text()){var i=$(n).parent().attr("page"),o=void 0;if("false"===$(n).parent().find("EstOuverte").text()){var d=$(n).parent().find("DateDebut").text(),l=$(n).parent().find("DateFin").text();d=a.L10n.moment(d),l=a.L10n.moment(l),d=d.format("DD/MM/YYYY HH:mm"),l=l.format("DD/MM/YYYY HH:mm"),o=r.translate("carnet-de-bord.widget.from")+" "+d+" "+r.translate("carnet-de-bord.widget.to")+" "+l}else o=$(n).parent().find("DateDebut").text(),o=(o=a.L10n.moment(o)).format("DD/MM/YYYY HH:mm"),o=r.translate("carnet-de-bord.widget.the")+" "+o;s.push({value:o,pageUrl:i}),e.compact=s[0].value}})),e.full=s)}else if("grades"===e.title){var l=[];if(e.compact=!1,e.full=!1,$(t).find("PageReleveDeNotes Devoir Note").text())$(t).find("PageReleveDeNotes Devoir").each((function(t,n){var i=$(n).attr("page"),o=$(n).find("Note").text(),s=$(n).find("Bareme").text(),d=$(n).find("Matiere").text(),c=a.L10n.moment($(n).find("Date").text());c=c.format("DD/MM/YYYY");var u=o+"/"+s+" "+r.translate("carnet-de-bord.widget.in")+" "+d+" "+r.translate("carnet-de-bord.widget.the")+" "+c;l.push({value:u,pageUrl:i}),e.compact=l[0].value})),e.full=l}else if("diary"===e.title){var c=[];if(e.compact=!1,e.full=!1,$(t).find("PageCahierDeTextes CahierDeTextes TravailAFaire Descriptif").text()){var u=new DOMParser,p=$(t).find("PageCahierDeTextes CahierDeTextes");$(p).each((function(t,n){if($(n).find("TravailAFaire Descriptif").text()){var i=r.translate("carnet-de-bord.widget.new.homework")+" "+$(n).find("Matiere").text(),o=$(n).find("TravailAFaire"),s=[];$(o).each((function(e,t){var n=$(t).attr("page"),i=($(t).parent().find("Matiere").text(),a.L10n.moment($(t).find("PourLe").text()));i=i.format("DD/MM/YYYY"),i=r.translate("carnet-de-bord.widget.for")+" "+i;var o=$(t).find("Descriptif"),d=u.parseFromString(o.text(),"text/html");o=d.documentElement.textContent,s.push({header:i,content:o,pageUrl:n})})),c.push({value:i,subsections:s}),e.compact=c[0].value+" "+c[0].subsections[0].header}})),e.full=c}}else if("skills"===e.title){var g=[];if(e.compact=!1,e.full=!1,$(t).find("PageCompetences Competence").text())$(t).find("PageCompetences Competence").parent().each((function(t,n){if("Acquis"===$(n).find("Libelle").text()){var i=$(n).attr("page"),o=$(n).find("Intitule").text(),s=$(n).find("Competence").text()+" ",d=$(n).find("Item").text()+" ",l=$(n).find("Matiere").text(),c=a.L10n.moment($(n).find("Date").text());c=c.format("DD/MM/YYYY");var u=r.translate("carnet-de-bord.widget.skills")+" ",p=r.translate("carnet-de-bord.widget.skills.item")+" ",f=o+" "+r.translate("carnet-de-bord.widget.the")+" "+c;l&&(f=f+" "+r.translate("carnet-de-bord.widget.in")+" "+l);var m=[{header:u,content:s}];$(n).find("Item").text()&&m.push({header:p,content:d}),g.push({value:f,subsections:m,pageUrl:i}),e.compact=g[0].value}})),e.full=g}},e}(),s=function(){function e(){this.restrict="E",this.template=r(5893).Z,this.controller=["odeThemeHelperService",o],this.controllerAs="ctrl",this.require=["odeCarnetDeBord"]}return e.prototype.link=function(e,t,r,n){var o=n?n[0]:null;o&&(0,a.http)().get("/sso/pronote").then((function(t){if(200!==(0,a.http)().latestResponse.status)throw"carnet-de-bord.widget.pronote.access.error";if(!i.default.isArray(t))throw"carnet-de-bord.widget.nodata";o.structures=t,o.eleves=[];var r=!0;t.forEach((function(e){o.structureAddress=e.address,o.structureId=e.structureId;var t=$.parseXML(e.xmlResponse),n=$(t);o.parentTag=n.find("Parent"),o.eleves=o.eleves.concat($.makeArray(n.find("Eleve"))),r&&o.eleves.length>0&&(o.getEleve(0),r=!1)})),e.$apply()})).catch((function(e){o.errorMsg="string"==typeof e?{error:e}:JSON.parse((0,a.http)().latestResponse.statusText)}))},e}();(0,a.notif)().onLangReady().promise.then((function(e){(0,a.conf)().Platform.idiom.addKeys(r(1056))})),t.odeModuleName="odeCarnetDeBordModule",i.default.module(t.odeModuleName,[]).directive("odeCarnetDeBord",(function(){return new s}))},1056:e=>{e.exports=JSON.parse('{"carnet-de-bord":"Carnet de bord","carnet-de-bord.widget.title":"Carnet de bord","carnet-de-bord.widget.deny":"Vous n\'avez pas accès à Pronote","carnet-de-bord.widget.empty":"vide","carnet-de-bord.widget.lateness":"Retards non justifiés","carnet-de-bord.widget.absences":"Absences non justifiées","carnet-de-bord.widget.grades":"Notes","carnet-de-bord.widget.diary":"Cahier de textes","carnet-de-bord.widget.skills":"Compétences acquises","carnet-de-bord.widget.lateness.all":"Tous les retards non justifiés","carnet-de-bord.widget.absences.all":"Toutes les absences non justifiées","carnet-de-bord.widget.grades.all":"Toutes les notes","carnet-de-bord.widget.diary.all":"Tous les devoirs","carnet-de-bord.widget.skills.all":"Toutes les compétences acquises","carnet-de-bord.widget.lateness.tooltip":"Voir tous les retards non justifiés","carnet-de-bord.widget.absences.tooltip":"Voir toutes les absences non justifiées","carnet-de-bord.widget.grades.tooltip":"Voir toutes les notes","carnet-de-bord.widget.diary.tooltip":"Voir tous les devoirs","carnet-de-bord.widget.skills.tooltip":"Voir toutes les compétences acquises","carnet-de-bord.widget.target.tooltip":"Voir sur l\'application","carnet-de-bord.widget.skills.item":"Contenu de l\'item","carnet-de-bord.widget.of":"de","carnet-de-bord.widget.in":"en","carnet-de-bord.widget.the":"le","carnet-de-bord.widget.from":"du","carnet-de-bord.widget.to":"au","carnet-de-bord.widget.since":"depuis le","carnet-de-bord.widget.for":"pour le","carnet-de-bord.widget.new.homework":"Travail en","carnet-de-bord.widget.pronote.unregistered.error":"Vous n\'avez pas accès à l\'application Pronote.","carnet-de-bord.widget.pronote.uri.error":"L\'adresse du serveur Pronote n’est pas correctement renseignée dans la console d’administration de l’ENT.","carnet-de-bord.widget.pronote.access.error":"Connexion Pronote impossible. Si le problème persiste, veuillez contacter l\'administrateur de votre établissement.","carnet-de-bord.widget.pronote.connection.error":"Problème de connexion au serveur Pronote","carnet-de-bord.widget.nodata":"Aucune donnée disponible."}')}}]);
|
|
1
|
+
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[438],{5893:(e,t,r)=>{r.d(t,{Z:()=>n});const n=' <div class="widget-dashboard"> <div class="widget-header"> <div class="subtitle"><i18n>carnet-de-bord.widget.title</i18n></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.errorMsg"> <span class="info" translate content="[[ctrl.errorMsg.error]]"></span> </div> <div class="dashboard-choice" ng-if="!ctrl.errorMsg && ctrl.description.profiles.indexOf(\'Relative\')>=0 && ctrl.eleves.length>0 && ctrl.structures"> <a href="" class="avatar-link" ng-repeat="eleve in ctrl.eleves" ng-click="ctrl.getEleve($index)" ng-class="{\'active\': eleve===ctrl.currentEleve}"> <img ng-src="[[ctrl.getAvatar($index)]]"/> <span>[[ ctrl.getTag(\'Prenom\', $index) ]]</span> </a> </div> <ul class="dashboard-list" ng-if="!ctrl.errorMsg"> <li class="item link-discret" ng-repeat="contentType in ctrl.contentTypes" ng-click="ctrl.openLightBox(contentType, $event)"> <a href="#" class="item-inner"> <div class="left"> <div class="icon"> <i class="[[contentType.icon]]"></i> </div> </div> <div class="right"> <div class="label" translate content="carnet-de-bord.widget.[[contentType.title]]"></div> <div class="info meta" ng-if="contentType.compact">[[contentType.compact]]</div> <div class="info meta" ng-if="!contentType.compact"><i18n>carnet-de-bord.widget.empty</i18n></div> </div> </a> </li> </ul> </div> <ode-modal visible="ctrl.showLightbox" on-close="ctrl.showLightbox=false" dnd-nodrag> <ode-modal-title> <span translate content="[[ctrl.currentContentType.lightboxTitle]]"></span> <span ng-if="ctrl.me.type !== \'ELEVE\' "> <i18n>carnet-de-bord.widget.of</i18n> [[ctrl.getCurrentTag(\'Prenom\')]] </span> </ode-modal-title> <ode-modal-body> <article> <div ng-repeat="item in ctrl.currentContentType.full"> <p ng-if="!item.subsections && !item.pageUrl"> <span>•</span>[[ item.value ]] </p> <p ng-if="!item.subsections && item.pageUrl"> <a target="_blank" rel="noopener" href="[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]" ng-click="ctrl.trackEvent($event, {detail:{\'open\':\'any\'} })"> <span>•</span>[[ item.value ]] <i class="new-tab right-magnet" i18n-title="carnet-de-bord.widget.target.tooltip"></i> </a> </p> <h4 ng-if="item.subsections && !item.pageUrl"> [[ item.value ]] </h4> <h4 ng-if="item.subsections && item.pageUrl"> <a target="_blank" rel="noopener" href="[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]" ng-click="ctrl.trackEvent($event, {detail:{\'open\':\'any\'} })"> [[ item.value ]] <i class="new-tab right-magnet" i18n-title="carnet-de-bord.widget.target.tooltip"></i> </a> </h4> <div ng-if="item.subsections"> <section ng-repeat="subsection in item.subsections"> <b ng-if="!subsection.pageUrl">[[ subsection.header ]]</b> <a ng-if="subsection.pageUrl" target="_blank" rel="noopener" href="[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ subsection.pageUrl ]]" ng-click="ctrl.trackEvent($event, {detail:{\'open\':\'any\'} })"> <b>[[ subsection.header ]] <i class="new-tab right-magnet" i18n-title="carnet-de-bord.widget.target.tooltip"></i> </b> </a> <br> <span> [[ subsection.content ]] </span> </section> </div> </div> </article> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> </div> '},5613:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var i=n(r(4202)),a=r(9419),o=function(){function e(e){this.themeHelperSvc=e,this.me=(0,a.session)().user,this.description=(0,a.session)().description,this.structures=[],this.eleves=[],this.showLightbox=!1,this.contentTypes=[{title:"lateness",icon:"ic-timer-off",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.lateness.all"},{title:"absences",icon:"ic-nobody",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.absences.all"},{title:"grades",icon:"ic-grades",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.grades.all"},{title:"diary",icon:"ic-homeworks",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.diary.all"},{title:"skills",icon:"ic-trending-up",compact:"",full:[],lightboxTitle:"carnet-de-bord.widget.skills.all"}],this.structureAddress="",this.structureId=""}return e.prototype.getAvatar=function(e){return e<this.eleves.length?"/userbook/avatar/".concat(this.getChildId(e),"?thumbnail=100x100"):this.themeHelperSvc.toSkinUrl("/img/illustrations/no-avatar.svg?thumbnail=100x100")},e.prototype.getEleve=function(e){var t=this;e<this.eleves.length&&(this.currentEleve=this.eleves[e],this.contentTypes.forEach(function(e){t.getContent(e,t.currentEleve)}))},e.prototype.getTag=function(e,t){return t<this.eleves.length?$(this.eleves[t]).find(e).text():""},e.prototype.getCurrentTag=function(e){return this.currentEleve?$(this.currentEleve).find(e).text():""},e.prototype.userStatus=function(){return"PERSRELELEVE"===this.me.type?"parent":"ELEVE"===this.me.type?"eleve":""},e.prototype.getChildId=function(e){var t=this.getTag("Prenom",e).toLowerCase(),r=this.getTag("Nom",e).toLowerCase();for(var n in this.me.children){var i=this.me.children[n].firstName.toLowerCase(),a=this.me.children[n].lastName.toLowerCase();if(i===t&&a===r)return n}},e.prototype.openLightBox=function(e,t){this.currentContentType=e,this.showLightbox=!0,t.currentTarget&&this.trackEvent(t,{detail:{properties:"any"}})},e.prototype.trackEvent=function(e,t){var r,n;void 0===t.bubbles&&(t.bubbles=!0);var i=null;!t||"string"!=typeof(null===(r=t.detail)||void 0===r?void 0:r.open)&&"string"!=typeof(null===(n=t.detail)||void 0===n?void 0:n.properties)||(i=new CustomEvent(a.TrackedActionFromWidget.carnetDeBord,t)),i&&e.currentTarget&&e.currentTarget.dispatchEvent(i)},e.prototype.getContent=function(e,t){var r=(0,a.conf)().Platform.idiom;if("lateness"===e.title){var n=$(t).find("Retard Justifie"),i=!1,o=[];e.compact=!1,e.full=!1,n&&(n.each(function(t,n){if("false"===$(n).text()){var s=$(n).parent().attr("page");i=$(n).parent().find("Date").text(),i=a.L10n.moment(i),i=r.translate("carnet-de-bord.widget.the")+" "+i.format("DD/MM/YYYY - HH:mm"),o.push({value:i,pageUrl:s}),e.compact=o[0].value}}),e.full=o)}else if("absences"===e.title){var s=[];e.compact=!1,e.full=!1;var d=$(t).find("Absence Justifie");d&&(d.each(function(t,n){if("false"===$(n).text()){var i=$(n).parent().attr("page"),o=void 0;if("false"===$(n).parent().find("EstOuverte").text()){var d=$(n).parent().find("DateDebut").text(),l=$(n).parent().find("DateFin").text();d=a.L10n.moment(d),l=a.L10n.moment(l),d=d.format("DD/MM/YYYY HH:mm"),l=l.format("DD/MM/YYYY HH:mm"),o=r.translate("carnet-de-bord.widget.from")+" "+d+" "+r.translate("carnet-de-bord.widget.to")+" "+l}else o=$(n).parent().find("DateDebut").text(),o=(o=a.L10n.moment(o)).format("DD/MM/YYYY HH:mm"),o=r.translate("carnet-de-bord.widget.the")+" "+o;s.push({value:o,pageUrl:i}),e.compact=s[0].value}}),e.full=s)}else if("grades"===e.title){var l=[];if(e.compact=!1,e.full=!1,$(t).find("PageReleveDeNotes Devoir Note").text())$(t).find("PageReleveDeNotes Devoir").each(function(t,n){var i=$(n).attr("page"),o=$(n).find("Note").text(),s=$(n).find("Bareme").text(),d=$(n).find("Matiere").text(),c=a.L10n.moment($(n).find("Date").text());c=c.format("DD/MM/YYYY");var u=o+"/"+s+" "+r.translate("carnet-de-bord.widget.in")+" "+d+" "+r.translate("carnet-de-bord.widget.the")+" "+c;l.push({value:u,pageUrl:i}),e.compact=l[0].value}),e.full=l}else if("diary"===e.title){var c=[];if(e.compact=!1,e.full=!1,$(t).find("PageCahierDeTextes CahierDeTextes TravailAFaire Descriptif").text()){var u=new DOMParser,g=$(t).find("PageCahierDeTextes CahierDeTextes");$(g).each(function(t,n){if($(n).find("TravailAFaire Descriptif").text()){var i=r.translate("carnet-de-bord.widget.new.homework")+" "+$(n).find("Matiere").text(),o=$(n).find("TravailAFaire"),s=[];$(o).each(function(e,t){var n=$(t).attr("page"),i=($(t).parent().find("Matiere").text(),a.L10n.moment($(t).find("PourLe").text()));i=i.format("DD/MM/YYYY"),i=r.translate("carnet-de-bord.widget.for")+" "+i;var o=$(t).find("Descriptif"),d=u.parseFromString(o.text(),"text/html");o=d.documentElement.textContent,s.push({header:i,content:o,pageUrl:n})}),c.push({value:i,subsections:s}),e.compact=c[0].value+" "+c[0].subsections[0].header}}),e.full=c}}else if("skills"===e.title){var p=[];if(e.compact=!1,e.full=!1,$(t).find("PageCompetences Competence").text())$(t).find("PageCompetences Competence").parent().each(function(t,n){if("Acquis"===$(n).find("Libelle").text()){var i=$(n).attr("page"),o=$(n).find("Intitule").text(),s=$(n).find("Competence").text()+" ",d=$(n).find("Item").text()+" ",l=$(n).find("Matiere").text(),c=a.L10n.moment($(n).find("Date").text());c=c.format("DD/MM/YYYY");var u=r.translate("carnet-de-bord.widget.skills")+" ",g=r.translate("carnet-de-bord.widget.skills.item")+" ",f=o+" "+r.translate("carnet-de-bord.widget.the")+" "+c;l&&(f=f+" "+r.translate("carnet-de-bord.widget.in")+" "+l);var m=[{header:u,content:s}];$(n).find("Item").text()&&m.push({header:g,content:d}),p.push({value:f,subsections:m,pageUrl:i}),e.compact=p[0].value}}),e.full=p}},e}(),s=function(){function e(){this.restrict="E",this.template=r(5893).Z,this.controller=["odeThemeHelperService",o],this.controllerAs="ctrl",this.require=["odeCarnetDeBord"]}return e.prototype.link=function(e,t,r,n){var o=n?n[0]:null;o&&(0,a.http)().get("/sso/pronote").then(function(t){if(200!==(0,a.http)().latestResponse.status)throw"carnet-de-bord.widget.pronote.access.error";if(!i.default.isArray(t))throw"carnet-de-bord.widget.nodata";o.structures=t,o.eleves=[];var r=!0;t.forEach(function(e){o.structureAddress=e.address,o.structureId=e.structureId;var t=$.parseXML(e.xmlResponse),n=$(t);o.parentTag=n.find("Parent"),o.eleves=o.eleves.concat($.makeArray(n.find("Eleve"))),r&&o.eleves.length>0&&(o.getEleve(0),r=!1)}),e.$apply()}).catch(function(e){o.errorMsg="string"==typeof e?{error:e}:JSON.parse((0,a.http)().latestResponse.statusText)})},e}();(0,a.notif)().onLangReady().promise.then(function(e){(0,a.conf)().Platform.idiom.addKeys(r(1056))}),t.odeModuleName="odeCarnetDeBordModule",i.default.module(t.odeModuleName,[]).directive("odeCarnetDeBord",function(){return new s})},1056:e=>{e.exports=JSON.parse('{"carnet-de-bord":"Carnet de bord","carnet-de-bord.widget.absences":"Absences non justifiées","carnet-de-bord.widget.absences.all":"Toutes les absences non justifiées","carnet-de-bord.widget.absences.tooltip":"Voir toutes les absences non justifiées","carnet-de-bord.widget.deny":"Vous n\'avez pas accès à Pronote","carnet-de-bord.widget.diary":"Cahier de textes","carnet-de-bord.widget.diary.all":"Tous les devoirs","carnet-de-bord.widget.diary.tooltip":"Voir tous les devoirs","carnet-de-bord.widget.empty":"vide","carnet-de-bord.widget.for":"pour le","carnet-de-bord.widget.from":"du","carnet-de-bord.widget.grades":"Notes","carnet-de-bord.widget.grades.all":"Toutes les notes","carnet-de-bord.widget.grades.tooltip":"Voir toutes les notes","carnet-de-bord.widget.in":"en","carnet-de-bord.widget.lateness":"Retards non justifiés","carnet-de-bord.widget.lateness.all":"Tous les retards non justifiés","carnet-de-bord.widget.lateness.tooltip":"Voir tous les retards non justifiés","carnet-de-bord.widget.new.homework":"Travail en","carnet-de-bord.widget.nodata":"Aucune donnée disponible.","carnet-de-bord.widget.of":"de","carnet-de-bord.widget.pronote.access.error":"Nous avons rencontré un problème de communication avec le service Pronote.\\nDemandez à l\'administration de votre établissement de vérifier le paramétrage de Pronote.","carnet-de-bord.widget.pronote.connection.error":"Problème de connexion au serveur Pronote","carnet-de-bord.widget.pronote.unregistered.error":"Vous n\'avez pas accès à l\'application Pronote.","carnet-de-bord.widget.pronote.uri.error":"L\'adresse du serveur Pronote n’est pas correctement renseignée dans la console d’administration de l’ENT.","carnet-de-bord.widget.since":"depuis le","carnet-de-bord.widget.skills":"Compétences acquises","carnet-de-bord.widget.skills.all":"Toutes les compétences acquises","carnet-de-bord.widget.skills.item":"Contenu de l\'item","carnet-de-bord.widget.skills.tooltip":"Voir toutes les compétences acquises","carnet-de-bord.widget.target.tooltip":"Voir sur l\'application","carnet-de-bord.widget.the":"le","carnet-de-bord.widget.title":"Carnet de bord","carnet-de-bord.widget.to":"au"}')}}]);
|
|
2
2
|
//# sourceMappingURL=carnet-de-bord.widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets/carnet-de-bord/carnet-de-bord.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/carnet-de-bord/carnet-de-bord.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/carnet-de-bord/carnet-de-bord.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-dashboard\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>carnet-de-bord.widget.title</i18n></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.errorMsg\\\"> <span class=\\\"info\\\" translate content=\\\"[[ctrl.errorMsg.error]]\\\"></span> </div> <div class=\\\"dashboard-choice\\\" ng-if=\\\"!ctrl.errorMsg && ctrl.description.profiles.indexOf('Relative')>=0 && ctrl.eleves.length>0 && ctrl.structures\\\"> <a href=\\\"\\\" class=\\\"avatar-link\\\" ng-repeat=\\\"eleve in ctrl.eleves\\\" ng-click=\\\"ctrl.getEleve($index)\\\" ng-class=\\\"{'active': eleve===ctrl.currentEleve}\\\"> <img ng-src=\\\"[[ctrl.getAvatar($index)]]\\\"/> <span>[[ ctrl.getTag('Prenom', $index) ]]</span> </a> </div> <ul class=\\\"dashboard-list\\\" ng-if=\\\"!ctrl.errorMsg\\\"> <li class=\\\"item link-discret\\\" ng-repeat=\\\"contentType in ctrl.contentTypes\\\" ng-click=\\\"ctrl.openLightBox(contentType, $event)\\\"> <a href=\\\"#\\\" class=\\\"item-inner\\\"> <div class=\\\"left\\\"> <div class=\\\"icon\\\"> <i class=\\\"[[contentType.icon]]\\\"></i> </div> </div> <div class=\\\"right\\\"> <div class=\\\"label\\\" translate content=\\\"carnet-de-bord.widget.[[contentType.title]]\\\"></div> <div class=\\\"info meta\\\" ng-if=\\\"contentType.compact\\\">[[contentType.compact]]</div> <div class=\\\"info meta\\\" ng-if=\\\"!contentType.compact\\\"><i18n>carnet-de-bord.widget.empty</i18n></div> </div> </a> </li> </ul> </div> <ode-modal visible=\\\"ctrl.showLightbox\\\" on-close=\\\"ctrl.showLightbox=false\\\" dnd-nodrag> <ode-modal-title> <span translate content=\\\"[[ctrl.currentContentType.lightboxTitle]]\\\"></span> <span ng-if=\\\"ctrl.me.type !== 'ELEVE' \\\"> <i18n>carnet-de-bord.widget.of</i18n> [[ctrl.getCurrentTag('Prenom')]] </span> </ode-modal-title> <ode-modal-body> <article> <div ng-repeat=\\\"item in ctrl.currentContentType.full\\\"> <p ng-if=\\\"!item.subsections && !item.pageUrl\\\"> <span>•</span>[[ item.value ]] </p> <p ng-if=\\\"!item.subsections && item.pageUrl\\\"> <a target=\\\"_blank\\\" rel=\\\"noopener\\\" href=\\\"[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]\\\" ng-click=\\\"ctrl.trackEvent($event, {detail:{'open':'any'} })\\\"> <span>•</span>[[ item.value ]] <i class=\\\"new-tab right-magnet\\\" i18n-title=\\\"carnet-de-bord.widget.target.tooltip\\\"></i> </a> </p> <h4 ng-if=\\\"item.subsections && !item.pageUrl\\\"> [[ item.value ]] </h4> <h4 ng-if=\\\"item.subsections && item.pageUrl\\\"> <a target=\\\"_blank\\\" rel=\\\"noopener\\\" href=\\\"[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]\\\" ng-click=\\\"ctrl.trackEvent($event, {detail:{'open':'any'} })\\\"> [[ item.value ]] <i class=\\\"new-tab right-magnet\\\" i18n-title=\\\"carnet-de-bord.widget.target.tooltip\\\"></i> </a> </h4> <div ng-if=\\\"item.subsections\\\"> <section ng-repeat=\\\"subsection in item.subsections\\\"> <b ng-if=\\\"!subsection.pageUrl\\\">[[ subsection.header ]]</b> <a ng-if=\\\"subsection.pageUrl\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" href=\\\"[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ subsection.pageUrl ]]\\\" ng-click=\\\"ctrl.trackEvent($event, {detail:{'open':'any'} })\\\"> <b>[[ subsection.header ]] <i class=\\\"new-tab right-magnet\\\" i18n-title=\\\"carnet-de-bord.widget.target.tooltip\\\"></i> </b> </a> <br> <span> [[ subsection.content ]] </span> </section> </div> </div> </article> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> </div> \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { L10n, conf, notif, session, http, TrackedAction, TrackedActionFromWidget } from \"../../utils\";\nimport { ILastInfosModel, IUserDescription, IUserInfo } from \"ode-ts-client\";\nimport { ThemeHelperService } from \"../../services\";\n\ninterface IExtendedLastInfosModel extends ILastInfosModel {\n\trelativeDate: string;\n\ttooltip: string;\n}\n\ntype ContentType = {\n\ttitle: string;\t//\"lateness\",\n\ticon: string;\t//\"timer-off\";\n\tcompact: string|boolean;\t//\"\",\n\tfull: any[]|boolean;\n\tlightboxTitle: string;\t//\"carnet-de-bord.widget.lateness.all\"\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tconstructor( \n\t\tprivate themeHelperSvc:ThemeHelperService\n\t) {}\n\tprivate me:IUserInfo = session().user;\n\tprivate description:IUserDescription = session().description;\n\n\tpublic structures:any[] = [];\n\tpublic eleves:any[] = [];\n\t\n\t\n\tpublic showLightbox = false;\n\tpublic currentContentType: any;\n\tpublic currentEleve: any;\n\tpublic contentTypes:ContentType[] = [{\n\t\ttitle: \"lateness\",\n\t\ticon: \"ic-timer-off\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.lateness.all\"\n\t},{\n\t\ttitle: \"absences\",\n\t\ticon: \"ic-nobody\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.absences.all\"\n\t},{\n\t\ttitle: \"grades\",\n\t\ticon: \"ic-grades\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.grades.all\"\n\t},{\n\t\ttitle: \"diary\",\n\t\ticon: \"ic-homeworks\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.diary.all\"\n\t},{\n\t\ttitle: \"skills\",\n\t\ticon: \"ic-trending-up\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.skills.all\"\n\t}];\n public structureAddress:string = \"\";\n public structureId:string = \"\";\n public parentTag?:JQuery<HTMLElement>;\n public errorMsg:any;\n\t\n\tgetAvatar(index:number):string {\n\t\tif (index < this.eleves.length) {\n\t\t\treturn `/userbook/avatar/${this.getChildId(index)}?thumbnail=100x100`;\n\t\t} else {\n\t\t\treturn this.themeHelperSvc.toSkinUrl(\"/img/illustrations/no-avatar.svg?thumbnail=100x100\");\n\t\t}\n\t}\n\n\tgetEleve(index:number){\n\t\tif (index < this.eleves.length) {\n\t\t\tthis.currentEleve = this.eleves[index];\n\t\t\tthis.contentTypes.forEach( (type:ContentType) => {\n\t\t\t\tthis.getContent( type, this.currentEleve );\n\t\t\t});\n\t\t}\n\t}\n\n\tgetTag(tagName:string, index:number){\n\t\tif (index < this.eleves.length) {\n\t\t\treturn $(this.eleves[index]).find(tagName).text();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tgetCurrentTag(tagName:string){\n\t\tif (this.currentEleve) {\n\t\t\treturn $(this.currentEleve).find(tagName).text();\n\t\t}\n\t\treturn \"\";\n\t}\n\n userStatus(){\n if (this.me.type === 'PERSRELELEVE') {\n return 'parent';\n } else if (this.me.type === 'ELEVE') {\n return 'eleve';\n } else {\n return '';\n }\n }\n\t\n\tgetChildId( index:number ){\n\t\tconst xmlFirstName = this.getTag('Prenom', index).toLowerCase();\n\t\tconst xmlLastName = this.getTag('Nom', index).toLowerCase();\n\t\tfor( let id in this.me.children ){\n\t\t\tconst modelFname = this.me.children[id].firstName.toLowerCase();\n\t\t\tconst modelLname = this.me.children[id].lastName.toLowerCase();\n\t\n\t\t if(modelFname === xmlFirstName && modelLname === xmlLastName){\n\t\t\t return id;\n\t\t }\n\t\t}\n\t}\n\n\topenLightBox(contentType:any, e:Event){\n\t\tthis.currentContentType = contentType;\n\t\tthis.showLightbox = true;\n\n // Track this event.\n if( e.currentTarget ) {\n this.trackEvent(e, { detail:{'properties':'any'} });\n }\n\t}\n\n // Give an opportunity to track some events from outside of this component.\n protected trackEvent(e:Event, p:CustomEventInit<TrackedAction>) {\n // Allow events to bubble up.\n if(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n let event = null;\n if( p && (typeof p.detail?.open==='string'||typeof p.detail?.properties==='string') ) {\n event = new CustomEvent( TrackedActionFromWidget.carnetDeBord, p );\n }\n if( event && e.currentTarget ) {\n e.currentTarget.dispatchEvent(event);\n }\n }\n\n\tprivate getContent( contentType:ContentType, eleve:any ) {\n\t\tconst lang = conf().Platform.idiom;\n\t\tif( contentType.title === 'lateness' ) {\n\t\t\tlet delays = $(eleve).find('Retard Justifie');\n\t\t\tlet latedate:any = false;\n\t\t\tconst allDelays = [] as any[];\n\t\t\tcontentType.compact = false;\n\t\t\tcontentType.full = false;\n\n\t\t\tif (delays) {\n\t\t\t\tdelays.each( (i, delay) => {\n\t\t\t\t\tif($(delay).text() === 'false'){\n\t\t\t\t\t\tvar pageUrl = $(delay).parent().attr('page');\n\t\t\t\t\t\tlatedate = $(delay).parent().find('Date').text();\n\t\t\t\t\t\tlatedate = L10n.moment(latedate);\n\t\t\t\t\t\tlatedate = lang.translate('carnet-de-bord.widget.the')+\" \"+latedate.format('DD/MM/YYYY - HH:mm');\n\t\t\t\t\t\tallDelays.push({\n\t\t\t\t\t\t\tvalue : latedate,\n\t\t\t\t\t\t\tpageUrl : pageUrl\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontentType.compact = allDelays[0].value;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tcontentType.full = allDelays;\n\t\t\t}\n\t\t} else if( contentType.title === 'absences' ) {\n var allAbsences:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var absences = $(eleve).find('Absence Justifie')\n\n if(absences){\n absences.each(function(i, absence){\n\n if($(absence).text() === 'false'){\n\n var pageUrl = $(absence).parent().attr('page');\n\n\t\t\t\t\t\tlet absDate:any;\n\n if($(absence).parent().find('EstOuverte').text()===\"false\"){\n // du... au...\n let startdate:any = $(absence).parent().find('DateDebut').text();\n let enddate:any = $(absence).parent().find('DateFin').text();\n startdate = L10n.moment(startdate);\n enddate = L10n.moment(enddate);\n startdate = startdate.format('DD/MM/YYYY HH:mm');\n enddate = enddate.format('DD/MM/YYYY HH:mm');\n\n absDate = lang.translate('carnet-de-bord.widget.from')+\" \"+startdate +\" \"+lang.translate('carnet-de-bord.widget.to')+\" \"+enddate;\n }else {\n absDate = $(absence).parent().find('DateDebut').text();\n absDate = L10n.moment(absDate);\n absDate = absDate.format('DD/MM/YYYY HH:mm');\n absDate = lang.translate('carnet-de-bord.widget.the')+\" \"+ absDate;\n }\n allAbsences.push({\n value : absDate,\n pageUrl : pageUrl\n });\n contentType.compact = allAbsences[0].value\n }\n })\n contentType.full = allAbsences;\n }\n\t\t} else if( contentType.title === 'grades' ) {\n var allGrades:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var isnote = $(eleve).find('PageReleveDeNotes Devoir Note').text();\n if(isnote){\n var lastNotes = $(eleve).find('PageReleveDeNotes Devoir')\n\n lastNotes.each(function(i, result){\n var pageUrl = $(result).attr('page');\n var note = $(result).find('Note').text();\n var bareme = $(result).find('Bareme').text();\n var matiere = $(result).find('Matiere').text();\n var notedate:any = L10n.moment($(result).find('Date').text());\n notedate = notedate.format('DD/MM/YYYY');\n var grade = note+\"/\"+bareme+\" \"+lang.translate('carnet-de-bord.widget.in')+\" \"+matiere+\" \"+lang.translate('carnet-de-bord.widget.the')+\" \"+notedate;\n\n allGrades.push({\n value : grade,\n pageUrl : pageUrl\n });\n contentType.compact = allGrades[0].value\n\n })\n contentType.full = allGrades\n }\n\n } else if( contentType.title === 'diary' ) {\n var allWorks:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var iswork = $(eleve).find('PageCahierDeTextes CahierDeTextes TravailAFaire Descriptif').text();\n if (iswork) {\n const parser = new DOMParser();\n var diaries = $(eleve).find('PageCahierDeTextes CahierDeTextes');\n $(diaries).each(function(i, diary){\n if ($(diary).find('TravailAFaire Descriptif').text()) {\n\n let matiere = lang.translate('carnet-de-bord.widget.new.homework')+\" \"+$(diary).find('Matiere').text()\n let works = $(diary).find('TravailAFaire');\n let subsections:any[] = [];\n\n $(works).each(function(i, work){\n let pageUrl = $(work).attr('page');\n let matiereFirst = $(work).parent().find('Matiere').text()\n let delivdate:any = L10n.moment($(work).find('PourLe').text())\n delivdate = delivdate.format('DD/MM/YYYY');\n delivdate = lang.translate('carnet-de-bord.widget.for')+\" \"+delivdate\n let descr:any = $(work).find('Descriptif');\n //can throw a DOMException\n //descr = descr.html(descr.text()).text();\n const doc = parser.parseFromString(descr.text(), 'text/html');\n descr = doc.documentElement.textContent;\n\n subsections.push({\n header: delivdate,\n content: descr,\n pageUrl: pageUrl\n })\n })\n\n allWorks.push({\n value: matiere,\n subsections: subsections\n });\n contentType.compact = allWorks[0].value+\" \"+allWorks[0].subsections[0].header\n }\n })\n\n contentType.full = allWorks\n }\n } else if( contentType.title === 'skills' ) {\n let allSkills:any[] = [];\n let subsections:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var isSkill = $(eleve).find('PageCompetences Competence').text();\n\n if (isSkill) {\n var skills = $(eleve).find('PageCompetences Competence').parent()\n skills.each(function(i, skill){\n if ($(skill).find('Libelle').text()===\"Acquis\") {\n var pageUrl = $(skill).attr('page');\n var title = $(skill).find('Intitule').text();\n var competence = $(skill).find('Competence').text()+\" \";\n var item = $(skill).find('Item').text()+\" \";\n\n var matiere = $(skill).find('Matiere').text();\n var skillDate:any = L10n.moment($(skill).find('Date').text());\n skillDate = skillDate.format('DD/MM/YYYY');\n\n var headskill = lang.translate('carnet-de-bord.widget.skills')+\" \";\n var headitem = lang.translate('carnet-de-bord.widget.skills.item')+\" \";\n\n var fullTitle = title +\" \"+lang.translate('carnet-de-bord.widget.the')+\" \"+skillDate;\n\n if(matiere){\n fullTitle = fullTitle+\" \"+lang.translate('carnet-de-bord.widget.in')+\" \"+matiere;\n }\n\n var subsections = [{\n header: headskill,\n content: competence\n }];\n\n if($(skill).find('Item').text()){\n subsections.push({\n header: headitem,\n content: item\n })\n }\n allSkills.push({\n value: fullTitle,\n subsections: subsections,\n pageUrl: pageUrl\n });\n contentType.compact = allSkills[0].value;\n }\n })\n contentType.full = allSkills;\n }\n }\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./carnet-de-bord.widget.html').default;\n\tcontroller = [\"odeThemeHelperService\", Controller];\n\tcontrollerAs = 'ctrl';\n require = ['odeCarnetDeBord'];\n\n link(scope:IScope, 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\thttp().get('/sso/pronote')\n\t\t.then( (structures:any[]) => {\n if( http().latestResponse.status !== 200 ) {\n /* Mocked data for testing during development.\n structures = [{\n \"structureId\" : null,\n \"xmlResponse\" : \"<?xml version=\\\"1.0\\\"?>\\r\\n<Parent xmlns=\\\"http://www.index-education.com/accueilENT\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xsi:schemaLocation=\\\"http://www.index-education.com/accueilENT Parent.xsd\\\" version=\\\"1.03\\\"><Eleve><Nom>BESNIER</Nom><Prenom>Amelie</Prenom><IdentifiantPronote>74CPUWN8RAJQVM5K</IdentifiantPronote><PageReleveDeNotes><Titre>Relevé de notes<\\/Titre><Message>Publication du bulletin le 20\\/02<\\/Message><Devoir page=\\\"da89cbc9e593f9c4273356659410b0780a616fc5b398d64ba174e138ae0fd5adb4c4b787aa38a237966c8478db61faea\\\"><Note>15,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>TECHNOLOGIE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>17,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>NOTE DE VIE SCOLAIRE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>14,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>ALLEMAND LV2<\\/Matiere><Date>2012-03-25<\\/Date><\\/Devoir><\\/PageReleveDeNotes><PageCahierDeTextes><Titre>Travaux \\u00E0 faire<\\/Titre><CahierDeTextes><Matiere>MATHEMATIQUE<\\/Matiere><Date>2012-03-24<\\/Date><TravailAFaire><Descriptif>Lire et apprendre<\\/Descriptif><PourLe>2012-03-25<\\/PourLe><PieceJointe>2 géométrie, fonctions.doc?sessionENT=20200<\\/PieceJointe><SiteInternet>http:\\/\\/www.google.com<\\/SiteInternet><\\/TravailAFaire><\\/CahierDeTextes><\\/PageCahierDeTextes><PageVieScolaire><Titre>Vie scolaire</Titre><Absence page=\\\"72DF243042E894648C14FB0D5D1EE3081D1E004C8F652CBDA731EEB8BD00ED2DAFCDB4EF61078786E411BFD357C4E35922C97134B3A119EB2F49DCE79E38168F\\\"><DateDebut>2016-09-20T08:00:00</DateDebut><DateFin>2016-09-20T09:00:00</DateFin><EstOuverte>false</EstOuverte><Justifie>false</Justifie><Motif></Motif></Absence></PageVieScolaire></Eleve><Eleve><Nom>BESNIER</Nom><Prenom>Marie</Prenom><IdentifiantPronote>X5VKRNQ9W7MHA4SU</IdentifiantPronote><PageReleveDeNotes><Titre>Relevé de notes<\\/Titre><Message>Publication du bulletin le 20\\/02<\\/Message><Devoir page=\\\"da89cbc9e593f9c4273356659410b0780a616fc5b398d64ba174e138ae0fd5adb4c4b787aa38a237966c8478db61faea\\\"><Note>15,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>TECHNOLOGIE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>17,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>NOTE DE VIE SCOLAIRE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>14,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>ALLEMAND LV2<\\/Matiere><Date>2012-03-25<\\/Date><\\/Devoir><\\/PageReleveDeNotes><PageCompetences><Titre>Compétences</Titre><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Résumer un texte</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Adapter le propos au destinataire et à l’effet recherché</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Utiliser les principales règles d’orthographe lexicale et grammaticale</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Rédiger un texte bref, cohérent, construit en paragraphes, correctement ponctué, en respectant des consignes imposées : récit, description, explication, texte argumentatif, compte rendu, écrits courants (lettres, …)</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Répondre à une question par une phrase complète</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item></PageCompetences><PageCahierDeTextes><Titre>Cahier de textes</Titre></PageCahierDeTextes><PageVieScolaire><Titre>Vie scolaire</Titre><Absence page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><DateDebut>2016-09-21T08:00:00</DateDebut><DateFin>2016-09-21T09:00:00</DateFin><EstOuverte>false</EstOuverte><Justifie>false</Justifie><Motif></Motif></Absence><Absence page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><DateDebut>2016-09-21T08:00:00</DateDebut><DateFin>2016-09-21T09:00:00</DateFin><EstOuverte>false</EstOuverte><Justifie>true</Justifie><Motif></Motif></Absence><Absence page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><DateDebut>2016-09-22T08:00:00</DateDebut><DateFin></DateFin><EstOuverte>true</EstOuverte><Justifie>false</Justifie><Motif></Motif></Absence><Retard page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><Date>2016-09-23T08:00:00</Date><Justifie>true</Justifie><Motif></Motif></Retard><Retard page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><Date>2016-09-24T08:00:00</Date><Justifie>false</Justifie><Motif></Motif></Retard></PageVieScolaire></Eleve><PageMessagerie><Titre>Messagerie</Titre><Discussions page=\\\"81C70AC5418CE75797C2C7B44181715FA2CA23E7B1634350133911009499746D\\\"><NombreMessagesNonLus>0</NombreMessagesNonLus></Discussions><Informations page=\\\"62962842B1203FD963629E4DC8294206CFC0BCED2CDD00E466FC2436F64DBC81\\\"><NombreInformationsNonLus>0</NombreInformationsNonLus></Informations></PageMessagerie></Parent>\\r\\n\",\n \"address\" : \"https://WSEducation.index-education.net/pronote\" \n }];\n */\n throw \"carnet-de-bord.widget.pronote.access.error\";\n }\n if( !angular.isArray(structures) ) {\n throw \"carnet-de-bord.widget.nodata\";\n }\n\t\t\tctrl.structures = structures;\n\t\t\tctrl.eleves = [];\n let firstEleve:boolean = true;\n\t\t\tstructures.forEach( structure => {\n\t\t\t\tctrl.structureAddress = structure.address;\n\t\t\t\tctrl.structureId = structure.structureId;\n\t\t\t\tvar xmlDocument = $.parseXML(structure.xmlResponse);\n\t\t\t\tvar $xml = $(xmlDocument);\n\t\t\t\tctrl.parentTag = $xml.find('Parent');\n\t\t\t\tctrl.eleves = ctrl.eleves.concat($.makeArray($xml.find('Eleve')));\n\t\t\t\t//console.log(widget.eleves);\n\t\t\t\tif( firstEleve && ctrl.eleves.length > 0 ){\n\t\t\t\t\tctrl.getEleve(0);\n firstEleve = false;\n\t\t\t\t}\n\t\t\t});\n scope.$apply();\n\t\t})\n\t\t.catch( (e) => {\n // FIXME : format of error messages ?\n if( typeof e === \"string\" ) {\n ctrl.errorMsg = {error:e};\n } else {\n ctrl.errorMsg = JSON.parse(http().latestResponse.statusText);\n }\n\t\t});\t\t\n\t}\n}\n\n/** The carnet-de-bord widget.\n *\n * Usage:\n * <ode-carnet-de-bord></ode-carnet-de-bord>\n */\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 = \"odeCarnetDeBordModule\";\nangular.module( odeModuleName, []).directive( \"odeCarnetDeBord\", DirectiveFactory );\n"],"names":["themeHelperSvc","me","session","user","description","structures","eleves","showLightbox","contentTypes","title","icon","compact","full","lightboxTitle","structureAddress","structureId","getAvatar","index","this","length","getChildId","toSkinUrl","getEleve","currentEleve","forEach","type","getContent","getTag","tagName","$","find","text","getCurrentTag","userStatus","xmlFirstName","toLowerCase","xmlLastName","id","children","modelFname","firstName","modelLname","lastName","openLightBox","contentType","e","currentContentType","currentTarget","trackEvent","detail","p","bubbles","event","open","properties","CustomEvent","TrackedActionFromWidget","carnetDeBord","dispatchEvent","eleve","lang","conf","Platform","idiom","delays","each","i","delay","pageUrl","parent","attr","L10n","moment","translate","format","push","value","allAbsences","absences","absence","absDate","startdate","enddate","allGrades","result","note","bareme","matiere","notedate","grade","allWorks","DOMParser","diaries","diary","works","work","delivdate","descr","doc","parseFromString","documentElement","textContent","header","content","subsections","skill","competence","item","skillDate","headskill","headitem","fullTitle","restrict","template","controller","Controller","controllerAs","require","link","scope","elem","attrs","controllers","ctrl","http","get","then","latestResponse","status","isArray","firstEleve","structure","address","xmlDocument","parseXML","xmlResponse","$xml","parentTag","concat","makeArray","$apply","catch","errorMsg","error","JSON","parse","statusText","notif","onLangReady","promise","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"widgets/carnet-de-bord/carnet-de-bord.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/carnet-de-bord/carnet-de-bord.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/carnet-de-bord/carnet-de-bord.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-dashboard\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>carnet-de-bord.widget.title</i18n></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.errorMsg\\\"> <span class=\\\"info\\\" translate content=\\\"[[ctrl.errorMsg.error]]\\\"></span> </div> <div class=\\\"dashboard-choice\\\" ng-if=\\\"!ctrl.errorMsg && ctrl.description.profiles.indexOf('Relative')>=0 && ctrl.eleves.length>0 && ctrl.structures\\\"> <a href=\\\"\\\" class=\\\"avatar-link\\\" ng-repeat=\\\"eleve in ctrl.eleves\\\" ng-click=\\\"ctrl.getEleve($index)\\\" ng-class=\\\"{'active': eleve===ctrl.currentEleve}\\\"> <img ng-src=\\\"[[ctrl.getAvatar($index)]]\\\"/> <span>[[ ctrl.getTag('Prenom', $index) ]]</span> </a> </div> <ul class=\\\"dashboard-list\\\" ng-if=\\\"!ctrl.errorMsg\\\"> <li class=\\\"item link-discret\\\" ng-repeat=\\\"contentType in ctrl.contentTypes\\\" ng-click=\\\"ctrl.openLightBox(contentType, $event)\\\"> <a href=\\\"#\\\" class=\\\"item-inner\\\"> <div class=\\\"left\\\"> <div class=\\\"icon\\\"> <i class=\\\"[[contentType.icon]]\\\"></i> </div> </div> <div class=\\\"right\\\"> <div class=\\\"label\\\" translate content=\\\"carnet-de-bord.widget.[[contentType.title]]\\\"></div> <div class=\\\"info meta\\\" ng-if=\\\"contentType.compact\\\">[[contentType.compact]]</div> <div class=\\\"info meta\\\" ng-if=\\\"!contentType.compact\\\"><i18n>carnet-de-bord.widget.empty</i18n></div> </div> </a> </li> </ul> </div> <ode-modal visible=\\\"ctrl.showLightbox\\\" on-close=\\\"ctrl.showLightbox=false\\\" dnd-nodrag> <ode-modal-title> <span translate content=\\\"[[ctrl.currentContentType.lightboxTitle]]\\\"></span> <span ng-if=\\\"ctrl.me.type !== 'ELEVE' \\\"> <i18n>carnet-de-bord.widget.of</i18n> [[ctrl.getCurrentTag('Prenom')]] </span> </ode-modal-title> <ode-modal-body> <article> <div ng-repeat=\\\"item in ctrl.currentContentType.full\\\"> <p ng-if=\\\"!item.subsections && !item.pageUrl\\\"> <span>•</span>[[ item.value ]] </p> <p ng-if=\\\"!item.subsections && item.pageUrl\\\"> <a target=\\\"_blank\\\" rel=\\\"noopener\\\" href=\\\"[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]\\\" ng-click=\\\"ctrl.trackEvent($event, {detail:{'open':'any'} })\\\"> <span>•</span>[[ item.value ]] <i class=\\\"new-tab right-magnet\\\" i18n-title=\\\"carnet-de-bord.widget.target.tooltip\\\"></i> </a> </p> <h4 ng-if=\\\"item.subsections && !item.pageUrl\\\"> [[ item.value ]] </h4> <h4 ng-if=\\\"item.subsections && item.pageUrl\\\"> <a target=\\\"_blank\\\" rel=\\\"noopener\\\" href=\\\"[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ item.pageUrl ]]\\\" ng-click=\\\"ctrl.trackEvent($event, {detail:{'open':'any'} })\\\"> [[ item.value ]] <i class=\\\"new-tab right-magnet\\\" i18n-title=\\\"carnet-de-bord.widget.target.tooltip\\\"></i> </a> </h4> <div ng-if=\\\"item.subsections\\\"> <section ng-repeat=\\\"subsection in item.subsections\\\"> <b ng-if=\\\"!subsection.pageUrl\\\">[[ subsection.header ]]</b> <a ng-if=\\\"subsection.pageUrl\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" href=\\\"[[ctrl.structureAddress]]/[[ctrl.userStatus()]].html?page=[[ subsection.pageUrl ]]\\\" ng-click=\\\"ctrl.trackEvent($event, {detail:{'open':'any'} })\\\"> <b>[[ subsection.header ]] <i class=\\\"new-tab right-magnet\\\" i18n-title=\\\"carnet-de-bord.widget.target.tooltip\\\"></i> </b> </a> <br> <span> [[ subsection.content ]] </span> </section> </div> </div> </article> </ode-modal-body> <ode-modal-footer> </ode-modal-footer> </ode-modal> </div> \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { L10n, conf, notif, session, http, TrackedAction, TrackedActionFromWidget } from \"../../utils\";\nimport { ILastInfosModel, IUserDescription, IUserInfo } from \"ode-ts-client\";\nimport { ThemeHelperService } from \"../../services\";\n\ninterface IExtendedLastInfosModel extends ILastInfosModel {\n\trelativeDate: string;\n\ttooltip: string;\n}\n\ntype ContentType = {\n\ttitle: string;\t//\"lateness\",\n\ticon: string;\t//\"timer-off\";\n\tcompact: string|boolean;\t//\"\",\n\tfull: any[]|boolean;\n\tlightboxTitle: string;\t//\"carnet-de-bord.widget.lateness.all\"\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tconstructor( \n\t\tprivate themeHelperSvc:ThemeHelperService\n\t) {}\n\tprivate me:IUserInfo = session().user;\n\tprivate description:IUserDescription = session().description;\n\n\tpublic structures:any[] = [];\n\tpublic eleves:any[] = [];\n\t\n\t\n\tpublic showLightbox = false;\n\tpublic currentContentType: any;\n\tpublic currentEleve: any;\n\tpublic contentTypes:ContentType[] = [{\n\t\ttitle: \"lateness\",\n\t\ticon: \"ic-timer-off\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.lateness.all\"\n\t},{\n\t\ttitle: \"absences\",\n\t\ticon: \"ic-nobody\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.absences.all\"\n\t},{\n\t\ttitle: \"grades\",\n\t\ticon: \"ic-grades\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.grades.all\"\n\t},{\n\t\ttitle: \"diary\",\n\t\ticon: \"ic-homeworks\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.diary.all\"\n\t},{\n\t\ttitle: \"skills\",\n\t\ticon: \"ic-trending-up\",\n\t\tcompact: \"\",\n\t\tfull: [],\n\t\tlightboxTitle: \"carnet-de-bord.widget.skills.all\"\n\t}];\n public structureAddress:string = \"\";\n public structureId:string = \"\";\n public parentTag?:JQuery<HTMLElement>;\n public errorMsg:any;\n\t\n\tgetAvatar(index:number):string {\n\t\tif (index < this.eleves.length) {\n\t\t\treturn `/userbook/avatar/${this.getChildId(index)}?thumbnail=100x100`;\n\t\t} else {\n\t\t\treturn this.themeHelperSvc.toSkinUrl(\"/img/illustrations/no-avatar.svg?thumbnail=100x100\");\n\t\t}\n\t}\n\n\tgetEleve(index:number){\n\t\tif (index < this.eleves.length) {\n\t\t\tthis.currentEleve = this.eleves[index];\n\t\t\tthis.contentTypes.forEach( (type:ContentType) => {\n\t\t\t\tthis.getContent( type, this.currentEleve );\n\t\t\t});\n\t\t}\n\t}\n\n\tgetTag(tagName:string, index:number){\n\t\tif (index < this.eleves.length) {\n\t\t\treturn $(this.eleves[index]).find(tagName).text();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tgetCurrentTag(tagName:string){\n\t\tif (this.currentEleve) {\n\t\t\treturn $(this.currentEleve).find(tagName).text();\n\t\t}\n\t\treturn \"\";\n\t}\n\n userStatus(){\n if (this.me.type === 'PERSRELELEVE') {\n return 'parent';\n } else if (this.me.type === 'ELEVE') {\n return 'eleve';\n } else {\n return '';\n }\n }\n\t\n\tgetChildId( index:number ){\n\t\tconst xmlFirstName = this.getTag('Prenom', index).toLowerCase();\n\t\tconst xmlLastName = this.getTag('Nom', index).toLowerCase();\n\t\tfor( let id in this.me.children ){\n\t\t\tconst modelFname = this.me.children[id].firstName.toLowerCase();\n\t\t\tconst modelLname = this.me.children[id].lastName.toLowerCase();\n\t\n\t\t if(modelFname === xmlFirstName && modelLname === xmlLastName){\n\t\t\t return id;\n\t\t }\n\t\t}\n\t}\n\n\topenLightBox(contentType:any, e:Event){\n\t\tthis.currentContentType = contentType;\n\t\tthis.showLightbox = true;\n\n // Track this event.\n if( e.currentTarget ) {\n this.trackEvent(e, { detail:{'properties':'any'} });\n }\n\t}\n\n // Give an opportunity to track some events from outside of this component.\n protected trackEvent(e:Event, p:CustomEventInit<TrackedAction>) {\n // Allow events to bubble up.\n if(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n let event = null;\n if( p && (typeof p.detail?.open==='string'||typeof p.detail?.properties==='string') ) {\n event = new CustomEvent( TrackedActionFromWidget.carnetDeBord, p );\n }\n if( event && e.currentTarget ) {\n e.currentTarget.dispatchEvent(event);\n }\n }\n\n\tprivate getContent( contentType:ContentType, eleve:any ) {\n\t\tconst lang = conf().Platform.idiom;\n\t\tif( contentType.title === 'lateness' ) {\n\t\t\tlet delays = $(eleve).find('Retard Justifie');\n\t\t\tlet latedate:any = false;\n\t\t\tconst allDelays = [] as any[];\n\t\t\tcontentType.compact = false;\n\t\t\tcontentType.full = false;\n\n\t\t\tif (delays) {\n\t\t\t\tdelays.each( (i, delay) => {\n\t\t\t\t\tif($(delay).text() === 'false'){\n\t\t\t\t\t\tvar pageUrl = $(delay).parent().attr('page');\n\t\t\t\t\t\tlatedate = $(delay).parent().find('Date').text();\n\t\t\t\t\t\tlatedate = L10n.moment(latedate);\n\t\t\t\t\t\tlatedate = lang.translate('carnet-de-bord.widget.the')+\" \"+latedate.format('DD/MM/YYYY - HH:mm');\n\t\t\t\t\t\tallDelays.push({\n\t\t\t\t\t\t\tvalue : latedate,\n\t\t\t\t\t\t\tpageUrl : pageUrl\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontentType.compact = allDelays[0].value;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tcontentType.full = allDelays;\n\t\t\t}\n\t\t} else if( contentType.title === 'absences' ) {\n var allAbsences:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var absences = $(eleve).find('Absence Justifie')\n\n if(absences){\n absences.each(function(i, absence){\n\n if($(absence).text() === 'false'){\n\n var pageUrl = $(absence).parent().attr('page');\n\n\t\t\t\t\t\tlet absDate:any;\n\n if($(absence).parent().find('EstOuverte').text()===\"false\"){\n // du... au...\n let startdate:any = $(absence).parent().find('DateDebut').text();\n let enddate:any = $(absence).parent().find('DateFin').text();\n startdate = L10n.moment(startdate);\n enddate = L10n.moment(enddate);\n startdate = startdate.format('DD/MM/YYYY HH:mm');\n enddate = enddate.format('DD/MM/YYYY HH:mm');\n\n absDate = lang.translate('carnet-de-bord.widget.from')+\" \"+startdate +\" \"+lang.translate('carnet-de-bord.widget.to')+\" \"+enddate;\n }else {\n absDate = $(absence).parent().find('DateDebut').text();\n absDate = L10n.moment(absDate);\n absDate = absDate.format('DD/MM/YYYY HH:mm');\n absDate = lang.translate('carnet-de-bord.widget.the')+\" \"+ absDate;\n }\n allAbsences.push({\n value : absDate,\n pageUrl : pageUrl\n });\n contentType.compact = allAbsences[0].value\n }\n })\n contentType.full = allAbsences;\n }\n\t\t} else if( contentType.title === 'grades' ) {\n var allGrades:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var isnote = $(eleve).find('PageReleveDeNotes Devoir Note').text();\n if(isnote){\n var lastNotes = $(eleve).find('PageReleveDeNotes Devoir')\n\n lastNotes.each(function(i, result){\n var pageUrl = $(result).attr('page');\n var note = $(result).find('Note').text();\n var bareme = $(result).find('Bareme').text();\n var matiere = $(result).find('Matiere').text();\n var notedate:any = L10n.moment($(result).find('Date').text());\n notedate = notedate.format('DD/MM/YYYY');\n var grade = note+\"/\"+bareme+\" \"+lang.translate('carnet-de-bord.widget.in')+\" \"+matiere+\" \"+lang.translate('carnet-de-bord.widget.the')+\" \"+notedate;\n\n allGrades.push({\n value : grade,\n pageUrl : pageUrl\n });\n contentType.compact = allGrades[0].value\n\n })\n contentType.full = allGrades\n }\n\n } else if( contentType.title === 'diary' ) {\n var allWorks:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var iswork = $(eleve).find('PageCahierDeTextes CahierDeTextes TravailAFaire Descriptif').text();\n if (iswork) {\n const parser = new DOMParser();\n var diaries = $(eleve).find('PageCahierDeTextes CahierDeTextes');\n $(diaries).each(function(i, diary){\n if ($(diary).find('TravailAFaire Descriptif').text()) {\n\n let matiere = lang.translate('carnet-de-bord.widget.new.homework')+\" \"+$(diary).find('Matiere').text()\n let works = $(diary).find('TravailAFaire');\n let subsections:any[] = [];\n\n $(works).each(function(i, work){\n let pageUrl = $(work).attr('page');\n let matiereFirst = $(work).parent().find('Matiere').text()\n let delivdate:any = L10n.moment($(work).find('PourLe').text())\n delivdate = delivdate.format('DD/MM/YYYY');\n delivdate = lang.translate('carnet-de-bord.widget.for')+\" \"+delivdate\n let descr:any = $(work).find('Descriptif');\n //can throw a DOMException\n //descr = descr.html(descr.text()).text();\n const doc = parser.parseFromString(descr.text(), 'text/html');\n descr = doc.documentElement.textContent;\n\n subsections.push({\n header: delivdate,\n content: descr,\n pageUrl: pageUrl\n })\n })\n\n allWorks.push({\n value: matiere,\n subsections: subsections\n });\n contentType.compact = allWorks[0].value+\" \"+allWorks[0].subsections[0].header\n }\n })\n\n contentType.full = allWorks\n }\n } else if( contentType.title === 'skills' ) {\n let allSkills:any[] = [];\n let subsections:any[] = [];\n contentType.compact = false;\n contentType.full = false;\n\n var isSkill = $(eleve).find('PageCompetences Competence').text();\n\n if (isSkill) {\n var skills = $(eleve).find('PageCompetences Competence').parent()\n skills.each(function(i, skill){\n if ($(skill).find('Libelle').text()===\"Acquis\") {\n var pageUrl = $(skill).attr('page');\n var title = $(skill).find('Intitule').text();\n var competence = $(skill).find('Competence').text()+\" \";\n var item = $(skill).find('Item').text()+\" \";\n\n var matiere = $(skill).find('Matiere').text();\n var skillDate:any = L10n.moment($(skill).find('Date').text());\n skillDate = skillDate.format('DD/MM/YYYY');\n\n var headskill = lang.translate('carnet-de-bord.widget.skills')+\" \";\n var headitem = lang.translate('carnet-de-bord.widget.skills.item')+\" \";\n\n var fullTitle = title +\" \"+lang.translate('carnet-de-bord.widget.the')+\" \"+skillDate;\n\n if(matiere){\n fullTitle = fullTitle+\" \"+lang.translate('carnet-de-bord.widget.in')+\" \"+matiere;\n }\n\n var subsections = [{\n header: headskill,\n content: competence\n }];\n\n if($(skill).find('Item').text()){\n subsections.push({\n header: headitem,\n content: item\n })\n }\n allSkills.push({\n value: fullTitle,\n subsections: subsections,\n pageUrl: pageUrl\n });\n contentType.compact = allSkills[0].value;\n }\n })\n contentType.full = allSkills;\n }\n }\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./carnet-de-bord.widget.html').default;\n\tcontroller = [\"odeThemeHelperService\", Controller];\n\tcontrollerAs = 'ctrl';\n require = ['odeCarnetDeBord'];\n\n link(scope:IScope, 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\thttp().get('/sso/pronote')\n\t\t.then( (structures:any[]) => {\n if( http().latestResponse.status !== 200 ) {\n /* Mocked data for testing during development.\n structures = [{\n \"structureId\" : null,\n \"xmlResponse\" : \"<?xml version=\\\"1.0\\\"?>\\r\\n<Parent xmlns=\\\"http://www.index-education.com/accueilENT\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xsi:schemaLocation=\\\"http://www.index-education.com/accueilENT Parent.xsd\\\" version=\\\"1.03\\\"><Eleve><Nom>BESNIER</Nom><Prenom>Amelie</Prenom><IdentifiantPronote>74CPUWN8RAJQVM5K</IdentifiantPronote><PageReleveDeNotes><Titre>Relevé de notes<\\/Titre><Message>Publication du bulletin le 20\\/02<\\/Message><Devoir page=\\\"da89cbc9e593f9c4273356659410b0780a616fc5b398d64ba174e138ae0fd5adb4c4b787aa38a237966c8478db61faea\\\"><Note>15,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>TECHNOLOGIE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>17,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>NOTE DE VIE SCOLAIRE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>14,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>ALLEMAND LV2<\\/Matiere><Date>2012-03-25<\\/Date><\\/Devoir><\\/PageReleveDeNotes><PageCahierDeTextes><Titre>Travaux \\u00E0 faire<\\/Titre><CahierDeTextes><Matiere>MATHEMATIQUE<\\/Matiere><Date>2012-03-24<\\/Date><TravailAFaire><Descriptif>Lire et apprendre<\\/Descriptif><PourLe>2012-03-25<\\/PourLe><PieceJointe>2 géométrie, fonctions.doc?sessionENT=20200<\\/PieceJointe><SiteInternet>http:\\/\\/www.google.com<\\/SiteInternet><\\/TravailAFaire><\\/CahierDeTextes><\\/PageCahierDeTextes><PageVieScolaire><Titre>Vie scolaire</Titre><Absence page=\\\"72DF243042E894648C14FB0D5D1EE3081D1E004C8F652CBDA731EEB8BD00ED2DAFCDB4EF61078786E411BFD357C4E35922C97134B3A119EB2F49DCE79E38168F\\\"><DateDebut>2016-09-20T08:00:00</DateDebut><DateFin>2016-09-20T09:00:00</DateFin><EstOuverte>false</EstOuverte><Justifie>false</Justifie><Motif></Motif></Absence></PageVieScolaire></Eleve><Eleve><Nom>BESNIER</Nom><Prenom>Marie</Prenom><IdentifiantPronote>X5VKRNQ9W7MHA4SU</IdentifiantPronote><PageReleveDeNotes><Titre>Relevé de notes<\\/Titre><Message>Publication du bulletin le 20\\/02<\\/Message><Devoir page=\\\"da89cbc9e593f9c4273356659410b0780a616fc5b398d64ba174e138ae0fd5adb4c4b787aa38a237966c8478db61faea\\\"><Note>15,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>TECHNOLOGIE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>17,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>NOTE DE VIE SCOLAIRE<\\/Matiere><Date>2012-03-26<\\/Date><\\/Devoir><Devoir><Note>14,00<\\/Note><Bareme>20.00<\\/Bareme><Matiere>ALLEMAND LV2<\\/Matiere><Date>2012-03-25<\\/Date><\\/Devoir><\\/PageReleveDeNotes><PageCompetences><Titre>Compétences</Titre><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Résumer un texte</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Adapter le propos au destinataire et à l’effet recherché</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Utiliser les principales règles d’orthographe lexicale et grammaticale</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Rédiger un texte bref, cohérent, construit en paragraphes, correctement ponctué, en respectant des consignes imposées : récit, description, explication, texte argumentatif, compte rendu, écrits courants (lettres, …)</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item><Item page=\\\"FC560506B53C466323C3BB6495BA0C3DD788475225004AE89B4B662475B2F533614EF0A1574E1DA7DFA4FCF0A893C7C9DC5ADABABB04084A0504CED0FE06CF25B8C36ADDC1F5451527B117A97425276A\\\"><Competence>Langue française à l'oral et à l'écrit</Competence><Intitule>Répondre à une question par une phrase complète</Intitule><NiveauDAcquisition><Genre>2</Genre><Libelle>Acquis</Libelle></NiveauDAcquisition><Date>2016-09-21</Date></Item></PageCompetences><PageCahierDeTextes><Titre>Cahier de textes</Titre></PageCahierDeTextes><PageVieScolaire><Titre>Vie scolaire</Titre><Absence page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><DateDebut>2016-09-21T08:00:00</DateDebut><DateFin>2016-09-21T09:00:00</DateFin><EstOuverte>false</EstOuverte><Justifie>false</Justifie><Motif></Motif></Absence><Absence page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><DateDebut>2016-09-21T08:00:00</DateDebut><DateFin>2016-09-21T09:00:00</DateFin><EstOuverte>false</EstOuverte><Justifie>true</Justifie><Motif></Motif></Absence><Absence page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><DateDebut>2016-09-22T08:00:00</DateDebut><DateFin></DateFin><EstOuverte>true</EstOuverte><Justifie>false</Justifie><Motif></Motif></Absence><Retard page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><Date>2016-09-23T08:00:00</Date><Justifie>true</Justifie><Motif></Motif></Retard><Retard page=\\\"914686157E0EC40CF0E0E5F762886F121D1E004C8F652CBDA731EEB8BD00ED2D73787C8D4D7E599A35A8B1A97BFE8E51587812524363C51E86538C2E7DB934C6\\\"><Date>2016-09-24T08:00:00</Date><Justifie>false</Justifie><Motif></Motif></Retard></PageVieScolaire></Eleve><PageMessagerie><Titre>Messagerie</Titre><Discussions page=\\\"81C70AC5418CE75797C2C7B44181715FA2CA23E7B1634350133911009499746D\\\"><NombreMessagesNonLus>0</NombreMessagesNonLus></Discussions><Informations page=\\\"62962842B1203FD963629E4DC8294206CFC0BCED2CDD00E466FC2436F64DBC81\\\"><NombreInformationsNonLus>0</NombreInformationsNonLus></Informations></PageMessagerie></Parent>\\r\\n\",\n \"address\" : \"https://WSEducation.index-education.net/pronote\" \n }];\n */\n throw \"carnet-de-bord.widget.pronote.access.error\";\n }\n if( !angular.isArray(structures) ) {\n throw \"carnet-de-bord.widget.nodata\";\n }\n\t\t\tctrl.structures = structures;\n\t\t\tctrl.eleves = [];\n let firstEleve:boolean = true;\n\t\t\tstructures.forEach( structure => {\n\t\t\t\tctrl.structureAddress = structure.address;\n\t\t\t\tctrl.structureId = structure.structureId;\n\t\t\t\tvar xmlDocument = $.parseXML(structure.xmlResponse);\n\t\t\t\tvar $xml = $(xmlDocument);\n\t\t\t\tctrl.parentTag = $xml.find('Parent');\n\t\t\t\tctrl.eleves = ctrl.eleves.concat($.makeArray($xml.find('Eleve')));\n\t\t\t\t//console.log(widget.eleves);\n\t\t\t\tif( firstEleve && ctrl.eleves.length > 0 ){\n\t\t\t\t\tctrl.getEleve(0);\n firstEleve = false;\n\t\t\t\t}\n\t\t\t});\n scope.$apply();\n\t\t})\n\t\t.catch( (e) => {\n // FIXME : format of error messages ?\n if( typeof e === \"string\" ) {\n ctrl.errorMsg = {error:e};\n } else {\n ctrl.errorMsg = JSON.parse(http().latestResponse.statusText);\n }\n\t\t});\t\t\n\t}\n}\n\n/** The carnet-de-bord widget.\n *\n * Usage:\n * <ode-carnet-de-bord></ode-carnet-de-bord>\n */\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 = \"odeCarnetDeBordModule\";\nangular.module( odeModuleName, []).directive( \"odeCarnetDeBord\", DirectiveFactory );\n"],"names":["themeHelperSvc","me","session","user","description","structures","eleves","showLightbox","contentTypes","title","icon","compact","full","lightboxTitle","structureAddress","structureId","getAvatar","index","this","length","getChildId","toSkinUrl","getEleve","currentEleve","forEach","type","getContent","getTag","tagName","$","find","text","getCurrentTag","userStatus","xmlFirstName","toLowerCase","xmlLastName","id","children","modelFname","firstName","modelLname","lastName","openLightBox","contentType","e","currentContentType","currentTarget","trackEvent","detail","p","bubbles","event","open","properties","CustomEvent","TrackedActionFromWidget","carnetDeBord","dispatchEvent","eleve","lang","conf","Platform","idiom","delays","each","i","delay","pageUrl","parent","attr","L10n","moment","translate","format","push","value","allAbsences","absences","absence","absDate","startdate","enddate","allGrades","result","note","bareme","matiere","notedate","grade","allWorks","DOMParser","diaries","diary","works","work","delivdate","descr","doc","parseFromString","documentElement","textContent","header","content","subsections","skill","competence","item","skillDate","headskill","headitem","fullTitle","restrict","template","controller","Controller","controllerAs","require","link","scope","elem","attrs","controllers","ctrl","http","get","then","latestResponse","status","isArray","firstEleve","structure","address","xmlDocument","parseXML","xmlResponse","$xml","parentTag","concat","makeArray","$apply","catch","errorMsg","error","JSON","parse","statusText","notif","onLangReady","promise","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[484],{194:(t,e,r)=>{r.d(e,{Z:()=>i});const i=' <style>.widget-cursus img{width:100%}::placeholder{font-size:15px}.p-4{padding:2rem!important}.heading-5{font-size:18px}</style> <div class="widget-cursus"> <div class="widget-header p-0"> <img class="subtitle" src="/cursus/public/img/logo.png" draggable="false"/> </div> <div class="widget-body p-4" dnd-nodrag> <div class="loading-panel" ng-if="ctrl.loads"> <h1 translate content="loading"></h1> </div> <form ng-if="!ctrl.loads"> <div ng-if="!ctrl.cardNb || ctrl.error"> <p ng-if="!ctrl.error"><i18n>cursus-widget.widget.inactive.text</i18n></p> <div ng-if="ctrl.error"> <p><i18n>cursus-widget.widget.error.text</i18n></p> <p><i18n>cursus-widget.widget.error.retry</i18n></p> </div> <div class="form-group row"> <label class="visually-hidden" for="cursusInputCardNb" translate content="cursus-widget.widget.cardNb"></label> <div class="col-sm-8"> <input class="form-control form-control-lg" id="cursusInputCardNb" type="text" ng-model="inputCardNb" i18n-placeholder="cursus-widget.widget.cardNb"> </div> <div class="col-sm-4 d-grid"> <button class="btn btn-outline-secondary btn-md" ng-click="ctrl.connect(inputCardNb)" ng-disabled="!inputCardNb" translate content="cursus-widget.widget.validate"></button> </div> </div> </div> <div ng-if="ctrl.cardNb && !ctrl.error"> <div> <h2 class="heading-5"><i18n>cursus-widget.widget.my.wallets</i18n></h2> <table class="twelve centered-text w-100"> <tbody ng-if="ctrl.sales"> <tr ng-repeat="sale in ctrl.sales"> <td>[[sale.wallet.libelle]]</td> <td>[[ctrl.formatSolde(sale.solde)]] €</td> </tr> </tbody> </table> </div> <div class="mt-4"> <h2 class="heading-5"><i18n>cursus-widget.widget.update.cardNb.title</i18n></h2> <i18n>cursus-widget.widget.update.cardNb.text</i18n>. <div class="d-grid mt-3"> <button class="btn btn-outline-secondary btn-lg" ng-click="ctrl.logout()" translate content="cursus-widget.widget.update.cardNb.button"></button> </div> </div> </div> </form> </div> </div>'},1916:function(t,e,r){var i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.odeModuleName=void 0;var s=i(r(4202)),n=r(5262),d=r(9419),a=function(){function t(){this.loads=!1,this.error=!1,this.inputCardNb=""}return Object.defineProperty(t.prototype,"version",{get:function(){return(0,d.conf)().Platform.deploymentTag},enumerable:!1,configurable:!0}),t.prototype.logout=function(){return delete this.cardNb,delete this.sales,(0,d.conf)().User.preferences.update(n.USER_PREFS.CURSUS,{}).save(n.USER_PREFS.CURSUS)},t.prototype.connect=function(t){var e=this;return this.cardNb=t,this.loads=!0,this.getSales().finally(
|
|
1
|
+
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[484],{194:(t,e,r)=>{r.d(e,{Z:()=>i});const i=' <style>.widget-cursus img{width:100%}::placeholder{font-size:15px}.p-4{padding:2rem!important}.heading-5{font-size:18px}</style> <div class="widget-cursus"> <div class="widget-header p-0"> <img class="subtitle" src="/cursus/public/img/logo.png" draggable="false"/> </div> <div class="widget-body p-4" dnd-nodrag> <div class="loading-panel" ng-if="ctrl.loads"> <h1 translate content="loading"></h1> </div> <form ng-if="!ctrl.loads"> <div ng-if="!ctrl.cardNb || ctrl.error"> <p ng-if="!ctrl.error"><i18n>cursus-widget.widget.inactive.text</i18n></p> <div ng-if="ctrl.error"> <p><i18n>cursus-widget.widget.error.text</i18n></p> <p><i18n>cursus-widget.widget.error.retry</i18n></p> </div> <div class="form-group row"> <label class="visually-hidden" for="cursusInputCardNb" translate content="cursus-widget.widget.cardNb"></label> <div class="col-sm-8"> <input class="form-control form-control-lg" id="cursusInputCardNb" type="text" ng-model="inputCardNb" i18n-placeholder="cursus-widget.widget.cardNb"> </div> <div class="col-sm-4 d-grid"> <button class="btn btn-outline-secondary btn-md" ng-click="ctrl.connect(inputCardNb)" ng-disabled="!inputCardNb" translate content="cursus-widget.widget.validate"></button> </div> </div> </div> <div ng-if="ctrl.cardNb && !ctrl.error"> <div> <h2 class="heading-5"><i18n>cursus-widget.widget.my.wallets</i18n></h2> <table class="twelve centered-text w-100"> <tbody ng-if="ctrl.sales"> <tr ng-repeat="sale in ctrl.sales"> <td>[[sale.wallet.libelle]]</td> <td>[[ctrl.formatSolde(sale.solde)]] €</td> </tr> </tbody> </table> </div> <div class="mt-4"> <h2 class="heading-5"><i18n>cursus-widget.widget.update.cardNb.title</i18n></h2> <i18n>cursus-widget.widget.update.cardNb.text</i18n>. <div class="d-grid mt-3"> <button class="btn btn-outline-secondary btn-lg" ng-click="ctrl.logout()" translate content="cursus-widget.widget.update.cardNb.button"></button> </div> </div> </div> </form> </div> </div>'},1916:function(t,e,r){var i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.odeModuleName=void 0;var s=i(r(4202)),n=r(5262),d=r(9419),a=function(){function t(){this.loads=!1,this.error=!1,this.inputCardNb=""}return Object.defineProperty(t.prototype,"version",{get:function(){return(0,d.conf)().Platform.deploymentTag},enumerable:!1,configurable:!0}),t.prototype.logout=function(){return delete this.cardNb,delete this.sales,(0,d.conf)().User.preferences.update(n.USER_PREFS.CURSUS,{}).save(n.USER_PREFS.CURSUS)},t.prototype.connect=function(t){var e=this;return this.cardNb=t,this.loads=!0,this.getSales().finally(function(){e.loads=!1,e.apply&&e.apply()})},t.prototype.getCardNb=function(){var t=this;return(0,d.conf)().User.preferences.load(n.USER_PREFS.CURSUS).then(function(e){var r=e.cardNb;t.cardNb=r})},t.prototype.setCardNb=function(t){return(0,d.conf)().User.preferences.update(n.USER_PREFS.CURSUS,{cardNb:t}).save(n.USER_PREFS.CURSUS)},t.prototype.getSales=function(){var t=this;return this.cardNb?(0,d.http)().get("/cursus/sales",{queryParams:{cardNb:this.cardNb,_:this.version}}).then(function(e){if(200!==(0,d.http)().latestResponse.status)throw"Cannot get sales";return t.error=!1,t.cardNb&&t.setCardNb(t.cardNb),t.sales=e.sales,t.sales&&e.wallets&&t.sales.forEach(function(t){t.wallet=e.wallets.find(function(e){return e&&e.code==t.numPM})}),e}).catch(function(e){t.error=!0}).finally(function(){t.apply&&t.apply()}):Promise.reject()},t.prototype.formatSolde=function(t){return"string"!=typeof t||0===t.length?t:1===t.length?"0,0"+t:2===t.length?"0,"+t:t.substring(0,t.length-2)+","+t.substring(t.length-2)},t}(),o=function(){function t(){this.restrict="E",this.template=r(194).Z,this.controller=[a],this.controllerAs="ctrl",this.require=["odeCursusWidget"]}return t.prototype.link=function(t,e,r,i){var s=i?i[0]:null;s&&(s.apply=function(){t.$apply()},s.loads=!0,s.getCardNb().then(function(){return s.getSales()}).finally(function(){s.loads=!1,t.$apply()}))},t}();(0,d.notif)().onLangReady().promise.then(function(t){(0,d.conf)().Platform.idiom.addKeys(r(8109))}),e.odeModuleName="odeCursusWidgetModule",s.default.module(e.odeModuleName,[]).directive("odeCursusWidget",function(){return new o})},8109:t=>{t.exports=JSON.parse('{"cursus-widget":"#HDF","cursus-widget.widget.cardNb":"Numéro de carte","cursus-widget.widget.error.retry":"Merci de saisir à nouveau votre numéro de carte :","cursus-widget.widget.error.text":"Le numéro de carte ne correspond pas à votre carte Génération #HDF.","cursus-widget.widget.inactive.text":"Veuillez entrer le numéro de votre carte Génération #HDF pour afficher les informations de votre compte.","cursus-widget.widget.my.wallets":"Mes porte-monnaie","cursus-widget.widget.sale":"Solde","cursus-widget.widget.title":"Carte #HDF","cursus-widget.widget.update.cardNb.button":"Actualiser mon n° de carte","cursus-widget.widget.update.cardNb.text":"Cliquez sur le bouton ci-dessous pour changer le numéro de la carte dont vous souhaitez afficher les informations","cursus-widget.widget.update.cardNb.title":"Gestion de ma carte","cursus-widget.widget.validate":"Valider","cursus-widget.widget.wallet":"Porte-Monnaie"}')}}]);
|
|
2
2
|
//# sourceMappingURL=cursus-widget.widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets/cursus-widget/cursus-widget.widget.js","mappings":"+HAGA,QAFW,84D,mLCDX,iBACA,UACA,UAGA,0BAKE,KAAAA,OAAiB,EACjB,KAAAC,OAAiB,EAGjB,KAAAC,YAAsB,EAqFxB,QAjFE,sBAAY,sBAAO,C,IAAnB,WACE,OAAO,IAAAC,QAAOC,SAASC,aACzB,E,gCAEA,YAAAC,OAAA,WAGE,cAFOC,KAAKC,cACLD,KAAKE,OACL,IAAAN,QAAOO,KAAKC,YAChBC,OAAO,EAAAC,WAAWC,OAAQ,CAAC,GAC3BC,KAAK,EAAAF,WAAWC,OACrB,EAEA,YAAAE,QAAA,SAAQR,GAAR,WAGE,OAFAD,KAAKC,OAASA,EACdD,KAAKP,OAAQ,EACNO,KAAKU,WAAWC,
|
|
1
|
+
{"version":3,"file":"widgets/cursus-widget/cursus-widget.widget.js","mappings":"+HAGA,QAFW,84D,mLCDX,iBACA,UACA,UAGA,0BAKE,KAAAA,OAAiB,EACjB,KAAAC,OAAiB,EAGjB,KAAAC,YAAsB,EAqFxB,QAjFE,sBAAY,sBAAO,C,IAAnB,WACE,OAAO,IAAAC,QAAOC,SAASC,aACzB,E,gCAEA,YAAAC,OAAA,WAGE,cAFOC,KAAKC,cACLD,KAAKE,OACL,IAAAN,QAAOO,KAAKC,YAChBC,OAAO,EAAAC,WAAWC,OAAQ,CAAC,GAC3BC,KAAK,EAAAF,WAAWC,OACrB,EAEA,YAAAE,QAAA,SAAQR,GAAR,WAGE,OAFAD,KAAKC,OAASA,EACdD,KAAKP,OAAQ,EACNO,KAAKU,WAAWC,QAAQ,WAC7B,EAAKlB,OAAQ,EACb,EAAKmB,OAAS,EAAKA,OACrB,EACF,EAEA,YAAAC,UAAA,sBACE,OAAO,IAAAjB,QAAOO,KAAKC,YAChBU,KAAK,EAAAR,WAAWC,QAChBQ,KAAK,SAAC,G,IAACd,EAAM,SACZ,EAAKA,OAASA,CAChB,EACJ,EAEA,YAAAe,UAAA,SAAUf,GACR,OAAO,IAAAL,QAAOO,KAAKC,YAChBC,OAAO,EAAAC,WAAWC,OAAQ,CAAEN,OAAQA,IACpCO,KAAK,EAAAF,WAAWC,OACrB,EAEA,YAAAG,SAAA,sBACE,OAAKV,KAAKC,QAGH,IAAAgB,QACJC,IAAI,gBAAiB,CACpBC,YAAa,CACX,OAAUnB,KAAKC,OACf,EAAKD,KAAKoB,WAGbL,KAAK,SAACM,GACL,GAAqC,OAAjC,IAAAJ,QAAOK,eAAeC,OACxB,KAAM,mBAYR,OAVA,EAAK7B,OAAQ,EACb,EAAKO,QAAU,EAAKe,UAAU,EAAKf,QACnC,EAAKC,MAAQmB,EAAKnB,MACd,EAAKA,OAASmB,EAAKG,SACrB,EAAKtB,MAAMuB,QAAQ,SAAAC,GACjBA,EAAKC,OAASN,EAAKG,QAAQI,KAAK,SAAAC,GAC9B,OAAOA,GAAKA,EAAEC,MAAQJ,EAAKK,KAC7B,EACF,GAEKV,CACT,GACCW,MAAM,SAAAC,GACL,EAAKvC,OAAQ,CACf,GACCiB,QAAQ,WACP,EAAKC,OAAS,EAAKA,OACrB,GA9BOsB,QAAQC,QA+BnB,EAEA,YAAAC,YAAA,SAAYC,GACV,MAAwB,iBAAbA,GAA6C,IAApBA,EAASC,OACpCD,EACsB,IAApBA,EAASC,OACX,MAAQD,EACc,IAApBA,EAASC,OACX,KAAOD,EAENA,EAASE,UAAU,EAAGF,EAASC,OAAS,GAAM,IAAOD,EAASE,UAAUF,EAASC,OAAS,EAEtG,EACF,EA9FA,GAiGA,0BACE,KAAAE,SAAW,IACX,KAAAC,SAAW,SACX,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,kBAgBb,QAdE,YAAAC,KAAA,SAAKC,EAAeC,EAAcC,EAAoBC,GACpD,IAAMC,EAA0BD,EAAcA,EAAY,GAAmB,KACxEC,IACLA,EAAKvC,MAAQ,WACXmC,EAAMK,QACR,EACAD,EAAK1D,OAAQ,EACb0D,EAAKtC,YAAYE,KAAK,WACpB,OAAOoC,EAAKzC,UACd,GAAGC,QAAQ,WACTwC,EAAK1D,OAAQ,EACbsD,EAAMK,QACR,GACF,EACF,EArBA,IA6BA,IAAAC,SAAQC,cAAcC,QAAQxC,KAAK,SAAAyC,IAEtB,IAAA5D,QAAOC,SAAS4D,MAAMC,QAAQ,EAAQ,MAEnD,GAIa,EAAAC,cAAgB,wBAC7B,UAAQC,OAAO,EAAAD,cAAe,IAAIE,UAAU,kBAd5C,WACE,OAAO,IAAIC,CACb,E","sources":["webpack://ode-ngjs-front/./src/ts/widgets/cursus-widget/cursus-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/cursus-widget/cursus-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <style>.widget-cursus img{width:100%}::placeholder{font-size:15px}.p-4{padding:2rem!important}.heading-5{font-size:18px}</style> <div class=\\\"widget-cursus\\\"> <div class=\\\"widget-header p-0\\\"> <img class=\\\"subtitle\\\" src=\\\"/cursus/public/img/logo.png\\\" draggable=\\\"false\\\"/> </div> <div class=\\\"widget-body p-4\\\" dnd-nodrag> <div class=\\\"loading-panel\\\" ng-if=\\\"ctrl.loads\\\"> <h1 translate content=\\\"loading\\\"></h1> </div> <form ng-if=\\\"!ctrl.loads\\\"> <div ng-if=\\\"!ctrl.cardNb || ctrl.error\\\"> <p ng-if=\\\"!ctrl.error\\\"><i18n>cursus-widget.widget.inactive.text</i18n></p> <div ng-if=\\\"ctrl.error\\\"> <p><i18n>cursus-widget.widget.error.text</i18n></p> <p><i18n>cursus-widget.widget.error.retry</i18n></p> </div> <div class=\\\"form-group row\\\"> <label class=\\\"visually-hidden\\\" for=\\\"cursusInputCardNb\\\" translate content=\\\"cursus-widget.widget.cardNb\\\"></label> <div class=\\\"col-sm-8\\\"> <input class=\\\"form-control form-control-lg\\\" id=\\\"cursusInputCardNb\\\" type=\\\"text\\\" ng-model=\\\"inputCardNb\\\" i18n-placeholder=\\\"cursus-widget.widget.cardNb\\\"> </div> <div class=\\\"col-sm-4 d-grid\\\"> <button class=\\\"btn btn-outline-secondary btn-md\\\" ng-click=\\\"ctrl.connect(inputCardNb)\\\" ng-disabled=\\\"!inputCardNb\\\" translate content=\\\"cursus-widget.widget.validate\\\"></button> </div> </div> </div> <div ng-if=\\\"ctrl.cardNb && !ctrl.error\\\"> <div> <h2 class=\\\"heading-5\\\"><i18n>cursus-widget.widget.my.wallets</i18n></h2> <table class=\\\"twelve centered-text w-100\\\"> <tbody ng-if=\\\"ctrl.sales\\\"> <tr ng-repeat=\\\"sale in ctrl.sales\\\"> <td>[[sale.wallet.libelle]]</td> <td>[[ctrl.formatSolde(sale.solde)]] €</td> </tr> </tbody> </table> </div> <div class=\\\"mt-4\\\"> <h2 class=\\\"heading-5\\\"><i18n>cursus-widget.widget.update.cardNb.title</i18n></h2> <i18n>cursus-widget.widget.update.cardNb.text</i18n>. <div class=\\\"d-grid mt-3\\\"> <button class=\\\"btn btn-outline-secondary btn-lg\\\" ng-click=\\\"ctrl.logout()\\\" translate content=\\\"cursus-widget.widget.update.cardNb.button\\\"></button> </div> </div> </div> </form> </div> </div>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { USER_PREFS } from \"ode-ts-client\";\nimport { conf, notif, http } from \"../../utils\";\n\n/* Controller for the directive */\nclass Controller implements IController {\n cardNb?: string;\n sales?: any[];\n\n // Flags\n loads: boolean = false;\n error: boolean = false;\n\n // Angular model\n inputCardNb: string = \"\";\n // Shortcut for refreshing the view.\n public apply?: () => void;\n\n private get version(): string {\n return conf().Platform.deploymentTag;\n }\n\n logout() {\n delete this.cardNb;\n delete this.sales;\n return conf().User.preferences\n .update(USER_PREFS.CURSUS, {})\n .save(USER_PREFS.CURSUS);\n }\n\n connect(cardNb: string) {\n this.cardNb = cardNb;\n this.loads = true;\n return this.getSales().finally(() => {\n this.loads = false;\n this.apply && this.apply();\n });\n }\n\n getCardNb() {\n return conf().User.preferences\n .load(USER_PREFS.CURSUS)\n .then(({cardNb}) => {\n this.cardNb = cardNb;\n });\n }\n\n setCardNb(cardNb: string) {\n return conf().User.preferences\n .update(USER_PREFS.CURSUS, { cardNb: cardNb })\n .save(USER_PREFS.CURSUS);\n }\n\n getSales() {\n if (!this.cardNb) {\n return Promise.reject();\n }\n return http()\n .get(\"/cursus/sales\", {\n queryParams: {\n \"cardNb\": this.cardNb,\n \"_\": this.version\n }\n })\n .then((data: { sales: any[], wallets: any[] }) => {\n if( http().latestResponse.status !== 200 ) {\n throw \"Cannot get sales\";\n }\n this.error = false;\n this.cardNb && this.setCardNb(this.cardNb);\n this.sales = data.sales;\n if (this.sales && data.wallets) {\n this.sales.forEach(sale => {\n sale.wallet = data.wallets.find(w => {\n return w && w.code == sale.numPM;\n });\n });\n }\n return data;\n })\n .catch(e => {\n this.error = true;\n })\n .finally(() => {\n this.apply && this.apply();\n });\n }\n\n formatSolde(soldeStr: string) {\n if (typeof soldeStr !== \"string\" || soldeStr.length === 0) {\n return soldeStr;\n } else if (soldeStr.length === 1) {\n return \"0,0\" + soldeStr;\n } else if (soldeStr.length === 2) {\n return \"0,\" + soldeStr;\n } else {\n return (soldeStr.substring(0, soldeStr.length - 2)) + \",\" + (soldeStr.substring(soldeStr.length - 2));\n }\n };\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope, JQLite, IAttributes, IController[]> {\n restrict = 'E';\n template = require('./cursus-widget.widget.html').default;\n controller = [Controller];\n controllerAs = 'ctrl';\n require = ['odeCursusWidget'];\n\n link(scope: IScope, elem: JQLite, attrs: IAttributes, controllers?: IController[]): void {\n const ctrl: Controller | null = controllers ? controllers[0] as Controller : null;\n if (!ctrl) return;\n ctrl.apply = () => {\n scope.$apply();\n };\n ctrl.loads = true;\n ctrl.getCardNb().then(() => {\n return ctrl.getSales();\n }).finally(() => {\n ctrl.loads = false;\n scope.$apply();\n });\n }\n}\n\n/** The my-apps widget. */\nfunction DirectiveFactory() {\n return new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then(lang => {\n switch (lang) {\n default: conf().Platform.idiom.addKeys(require('./i18n/fr.json')); break;\n }\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 = \"odeCursusWidgetModule\";\nangular.module(odeModuleName, []).directive(\"odeCursusWidget\", DirectiveFactory);\n"],"names":["loads","error","inputCardNb","conf","Platform","deploymentTag","logout","this","cardNb","sales","User","preferences","update","USER_PREFS","CURSUS","save","connect","getSales","finally","apply","getCardNb","load","then","setCardNb","http","get","queryParams","version","data","latestResponse","status","wallets","forEach","sale","wallet","find","w","code","numPM","catch","e","Promise","reject","formatSolde","soldeStr","length","substring","restrict","template","controller","Controller","controllerAs","require","link","scope","elem","attrs","controllers","ctrl","$apply","notif","onLangReady","promise","lang","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[368],{8787:(e,i,t)=>{t.d(i,{Z:()=>o});const o=' <div class="widget-header"> <div class="subtitle"><i18n>dico.title</i18n></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"> <div class="widget-empty-message link"> <p class="small-text"><i18n>dico.definition<i18n></i18n></i18n></p> <div class="content"> <ode-autocomplete class="dicodelazone__input" options="ctrl.suggestions" ng-model="ctrl.selectedWord" ng-change="ctrl.openDefinition()"> </ode-autocomplete> </div> </div> </div> '},2579:function(e,i,t){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(i,"__esModule",{value:!0}),i.odeModuleName=void 0;var n=o(t(4202)),d=t(9419),s=function(){function e(){this.lexicon={},this.suggestions=[],this.selectedWord=""}return e.prototype.openDefinition=function(){window.open("https://www.dictionnairedelazone.fr/dictionary/lexical/"+this.lexicon[this.selectedWord],"_blank")},e}(),l=function(){function e(){this.restrict="E",this.template=t(8787).Z,this.scope={},this.bindToController=!0,this.controller=[s],this.controllerAs="ctrl",this.require=["odeDicodelazoneWidget"]}return e.prototype.link=function(e,i,t,o){var n=o?o[0]:null;n&&(0,d.http)().get("/assets/widgets/dicodelazone-widget/lexicon.json").then(
|
|
1
|
+
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[368],{8787:(e,i,t)=>{t.d(i,{Z:()=>o});const o=' <div class="widget-header"> <div class="subtitle"><i18n>dico.title</i18n></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"> <div class="widget-empty-message link"> <p class="small-text"><i18n>dico.definition<i18n></i18n></i18n></p> <div class="content"> <ode-autocomplete class="dicodelazone__input" options="ctrl.suggestions" ng-model="ctrl.selectedWord" ng-change="ctrl.openDefinition()"> </ode-autocomplete> </div> </div> </div> '},2579:function(e,i,t){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(i,"__esModule",{value:!0}),i.odeModuleName=void 0;var n=o(t(4202)),d=t(9419),s=function(){function e(){this.lexicon={},this.suggestions=[],this.selectedWord=""}return e.prototype.openDefinition=function(){window.open("https://www.dictionnairedelazone.fr/dictionary/lexical/"+this.lexicon[this.selectedWord],"_blank")},e}(),l=function(){function e(){this.restrict="E",this.template=t(8787).Z,this.scope={},this.bindToController=!0,this.controller=[s],this.controllerAs="ctrl",this.require=["odeDicodelazoneWidget"]}return e.prototype.link=function(e,i,t,o){var n=o?o[0]:null;n&&(0,d.http)().get("/assets/widgets/dicodelazone-widget/lexicon.json").then(function(i){n.lexicon=i,n.suggestions=Object.keys(i),e.$apply()})},e}();(0,d.notif)().onLangReady().promise.then(function(e){if("en"===e)(0,d.conf)().Platform.idiom.addKeys(t(5745));else(0,d.conf)().Platform.idiom.addKeys(t(6019))}),i.odeModuleName="odeDicodelazoneWidgetModule",n.default.module(i.odeModuleName,[]).directive("odeDicodelazoneWidget",function(){return new l})},5745:e=>{e.exports={}},6019:e=>{e.exports=JSON.parse('{"dico.title":"Dico de la zone","dico.definition":"Le dico de la zone est un site internet qui vous permet de comprendre les mots d\'argot."}')}}]);
|
|
2
2
|
//# sourceMappingURL=dicodelazone-widget.widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets/dicodelazone-widget/dicodelazone-widget.widget.js","mappings":"gIAGA,QAFW,gkB,mLCDX,iBACA,UAGA,0BACC,KAAAA,QAAc,CAAC,EACf,KAAAC,YAAuB,GACvB,KAAAC,aAAsB,EAKvB,QAHC,YAAAC,eAAA,WACCC,OAAOC,KAAK,0DAA4DC,KAAKN,QAAQM,KAAKJ,cAAe,SAC1G,EACD,EARA,GAWA,0BACI,KAAAK,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,MAAQ,CAAC,EACT,KAAAC,kBAAmB,EACnB,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,wBAcZ,QAZI,YAAAC,KAAA,SAAKN,EAAcO,EAAaC,EAAmBC,GAC/C,IAAMC,EAAuBD,EAAcA,EAAY,GAAmB,KACrEC,IAGX,IAAAC,QAAOC,IAAI,oDACVC,
|
|
1
|
+
{"version":3,"file":"widgets/dicodelazone-widget/dicodelazone-widget.widget.js","mappings":"gIAGA,QAFW,gkB,mLCDX,iBACA,UAGA,0BACC,KAAAA,QAAc,CAAC,EACf,KAAAC,YAAuB,GACvB,KAAAC,aAAsB,EAKvB,QAHC,YAAAC,eAAA,WACCC,OAAOC,KAAK,0DAA4DC,KAAKN,QAAQM,KAAKJ,cAAe,SAC1G,EACD,EARA,GAWA,0BACI,KAAAK,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,MAAQ,CAAC,EACT,KAAAC,kBAAmB,EACnB,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,wBAcZ,QAZI,YAAAC,KAAA,SAAKN,EAAcO,EAAaC,EAAmBC,GAC/C,IAAMC,EAAuBD,EAAcA,EAAY,GAAmB,KACrEC,IAGX,IAAAC,QAAOC,IAAI,oDACVC,KAAM,SAAAC,GACNJ,EAAKnB,QAAUuB,EACfJ,EAAKlB,YAAcuB,OAAOC,KAAKF,GAC/Bd,EAAMiB,QACP,EACD,EACD,EArBA,IA6BA,IAAAC,SAAQC,cAAcC,QAAQP,KAAM,SAAAQ,GACnC,GACM,OADEA,GACI,IAAAC,QAAOC,SAASC,MAAMC,QAAS,EAAQ,YACzC,IAAAH,QAAOC,SAASC,MAAMC,QAAS,EAAQ,MAElD,GAIa,EAAAC,cAAgB,8BAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,wBAf9C,WACC,OAAO,IAAIC,CACZ,E","sources":["webpack://ode-ngjs-front/./src/ts/widgets/dicodelazone-widget/dicodelazone-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/dicodelazone-widget/dicodelazone-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>dico.title</i18n></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\\\"> <div class=\\\"widget-empty-message link\\\"> <p class=\\\"small-text\\\"><i18n>dico.definition<i18n></i18n></i18n></p> <div class=\\\"content\\\"> <ode-autocomplete class=\\\"dicodelazone__input\\\" options=\\\"ctrl.suggestions\\\" ng-model=\\\"ctrl.selectedWord\\\" ng-change=\\\"ctrl.openDefinition()\\\"> </ode-autocomplete> </div> </div> </div> \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif, http } from \"../../utils\";\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tlexicon:any = {};\n\tsuggestions:string[] = [];\n\tselectedWord:string = \"\";\n\n\topenDefinition(){\t\n\t\twindow.open('https://www.dictionnairedelazone.fr/dictionary/lexical/' + this.lexicon[this.selectedWord], '_blank');\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./dicodelazone-widget.widget.html').default;\n\tscope = {};\n\tbindToController = true;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeDicodelazoneWidget'];\n\n link(scope:IScope, 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\thttp().get('/assets/widgets/dicodelazone-widget/lexicon.json')\n\t\t.then( data => {\n\t\t\tctrl.lexicon = data;\n\t\t\tctrl.suggestions = Object.keys(data);\n\t\t\tscope.$apply();\n\t\t})\n\t}\n}\n\n/** The dicodelazone widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tcase \"en\":\tconf().Platform.idiom.addKeys( require('./i18n/en.json') ); break;\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 = \"odeDicodelazoneWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeDicodelazoneWidget\", DirectiveFactory );\n"],"names":["lexicon","suggestions","selectedWord","openDefinition","window","open","this","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","http","get","then","data","Object","keys","$apply","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
|