ode-ngjs-front 1.4.11-develop-integration.202506041736 → 1.4.12-develop-integration.202506191529

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/668.js +2 -2
  2. package/dist/668.js.map +1 -1
  3. package/dist/669.js +1 -1
  4. package/dist/669.js.map +1 -1
  5. package/dist/ode-ngjs-front.js +4 -4
  6. package/dist/ode-ngjs-front.js.map +1 -1
  7. package/dist/version.txt +1 -1
  8. package/dist/widgets/agenda-widget/agenda-widget.widget.js +1 -1
  9. package/dist/widgets/agenda-widget/agenda-widget.widget.js.map +1 -1
  10. package/dist/widgets/bookmark-widget/bookmark-widget.widget.js +1 -1
  11. package/dist/widgets/bookmark-widget/bookmark-widget.widget.js.map +1 -1
  12. package/dist/widgets/briefme-widget/briefme-widget.widget.js +1 -1
  13. package/dist/widgets/briefme-widget/briefme-widget.widget.js.map +1 -1
  14. package/dist/widgets/calendar-widget/calendar-widget.widget.js +1 -1
  15. package/dist/widgets/calendar-widget/calendar-widget.widget.js.map +1 -1
  16. package/dist/widgets/cantine-widget/cantine-widget.widget.js +1 -1
  17. package/dist/widgets/cantine-widget/cantine-widget.widget.js.map +1 -1
  18. package/dist/widgets/carnet-de-bord/carnet-de-bord.widget.js +1 -1
  19. package/dist/widgets/carnet-de-bord/carnet-de-bord.widget.js.map +1 -1
  20. package/dist/widgets/cursus-widget/cursus-widget.widget.js +1 -1
  21. package/dist/widgets/cursus-widget/cursus-widget.widget.js.map +1 -1
  22. package/dist/widgets/dicodelazone-widget/dicodelazone-widget.widget.js +1 -1
  23. package/dist/widgets/dicodelazone-widget/dicodelazone-widget.widget.js.map +1 -1
  24. package/dist/widgets/edumalin-widget/edumalin-widget.widget.js +1 -1
  25. package/dist/widgets/edumalin-widget/edumalin-widget.widget.js.map +1 -1
  26. package/dist/widgets/last-infos-widget/last-infos-widget.widget.js +1 -1
  27. package/dist/widgets/last-infos-widget/last-infos-widget.widget.js.map +1 -1
  28. package/dist/widgets/maxicours-widget/maxicours-widget.widget.js +1 -1
  29. package/dist/widgets/maxicours-widget/maxicours-widget.widget.js.map +1 -1
  30. package/dist/widgets/mediacentre-widget/mediacentre-widget.widget.js +1 -1
  31. package/dist/widgets/mediacentre-widget/mediacentre-widget.widget.js.map +1 -1
  32. package/dist/widgets/my-apps/my-apps.widget.js +1 -1
  33. package/dist/widgets/my-apps/my-apps.widget.js.map +1 -1
  34. package/dist/widgets/ptit-observatoire-widget/ptit-observatoire-widget.widget.js +1 -1
  35. package/dist/widgets/ptit-observatoire-widget/ptit-observatoire-widget.widget.js.map +1 -1
  36. package/dist/widgets/qwant-widget/qwant-widget.widget.js +1 -1
  37. package/dist/widgets/qwant-widget/qwant-widget.widget.js.map +1 -1
  38. package/dist/widgets/record-me/record-me.widget.js +1 -1
  39. package/dist/widgets/record-me/record-me.widget.js.map +1 -1
  40. package/dist/widgets/rss-widget/rss-widget.widget.js +1 -1
  41. package/dist/widgets/rss-widget/rss-widget.widget.js.map +1 -1
  42. package/dist/widgets/school-widget/school-widget.widget.js +1 -1
  43. package/dist/widgets/school-widget/school-widget.widget.js.map +1 -1
  44. package/dist/widgets/screen-time-widget/screen-time-widget.widget.js +1 -1
  45. package/dist/widgets/screen-time-widget/screen-time-widget.widget.js.map +1 -1
  46. package/dist/widgets/universalis-widget/universalis-widget.widget.js +1 -1
  47. package/dist/widgets/universalis-widget/universalis-widget.widget.js.map +1 -1
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"widgets/screen-time-widget/screen-time-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/screen-time-widget/screen-time-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/screen-time-widget/screen-time-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<div> <label for=\\\"userSelect\\\">Choisir un utilisateur :</label> <select id=\\\"userSelect\\\" ng-model=\\\"ctrl.selectedUser\\\" ng-change=\\\"ctrl.updateChart()\\\"> <option value=\\\"Mathieu\\\">Mathieu</option> <option value=\\\"Jean\\\">Jean</option> </select> <label for=\\\"viewMode\\\">Mode :</label> <select id=\\\"viewMode\\\" ng-model=\\\"ctrl.viewMode\\\" ng-change=\\\"ctrl.updateChart()\\\"> <option value=\\\"weekly\\\">Hebdomadaire</option> <option value=\\\"daily\\\">Quotidien</option> </select> </div> <canvas id=\\\"myChart\\\" width=\\\"400\\\" height=\\\"200\\\"></canvas>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif } from \"../../utils\";\nimport { Chart, registerables } from \"chart.js\";\n\n// Register Chart.js components\nChart.register(...registerables);\n\n// Screen time data structure\ninterface ScreenTimeData {\n weekly: {\n [key: string]: number[]; // per user, 7-day weekly data\n };\n daily: {\n [key: string]: { [hour: string]: number }; // per user, hourly screen time (e.g., \"09:00\": 30)\n };\n}\n// Mocked API function\nfunction fetchScreenTimeData(): Promise<ScreenTimeData> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n weekly: {\n Mathieu: [12, 19, 3, 5, 2, 3, 1],\n Jean: [5, 8, 6, 7, 4, 2, 3]\n },\n daily: {\n Mathieu: {\n \"08:00\": 15,\n \"09:00\": 10,\n \"10:00\": 30,\n \"11:00\": 20,\n \"12:00\": 25,\n \"13: 00\": 17,\n \"16:00\": 5,\n \"18:00\": 10,\n \"20:00\": 8,\n \"22:00\": 12,\n \"23:00\": 4\n },\n Jean: {\n \"07:00\": 5,\n \"09:00\": 25,\n \"10:00\": 10,\n \"18:00\": 15\n }\n }\n });\n }, 100);\n });\n}\n\n\n// Controller\nexport class Controller {\n public selectedUser: string = \"Mathieu\";\n public viewMode: \"weekly\" | \"daily\" = \"weekly\";\n public screenTimeData: ScreenTimeData = { weekly: {}, daily: {} };\n public updateChart: () => void = () => { };\n}\n\n\nclass Directive implements IDirective<IScope, JQLite, IAttributes, IController[]> {\n restrict = \"E\";\n template = require(\"./screen-time-widget.widget.html\").default;\n scope = {};\n bindToController = true;\n controller = [Controller];\n controllerAs = \"ctrl\";\n require = [\"odeScreenTimeWidget\"];\n\n async link(scope: IScope, elem: angular.IAugmentedJQuery, attrs: IAttributes, controllers?: IController[]) {\n const ctrl: Controller | null = controllers ? (controllers[0] as Controller) : null;\n if (!ctrl) return;\n\n let chartInstance: Chart | null = null;\n let debounceTimeout: any;\n\n // Wait for DOM render\n scope.$evalAsync(() => {\n const canvas = elem[0].querySelector<HTMLCanvasElement>(\"#myChart\");\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Init blank chart first\n chartInstance = new Chart(ctx, {\n type: \"bar\",\n data: {\n labels: [],\n datasets: [{\n label: \"\",\n data: [],\n borderWidth: 1,\n backgroundColor: \"#4e79a7\"\n }]\n },\n options: {\n animation: false,\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n legend: {\n display: true\n },\n tooltip: {\n enabled: false\n }\n },\n scales: {\n x: {\n ticks: {\n autoSkip: true,\n maxTicksLimit: 10\n }\n },\n y: {\n beginAtZero: true\n }\n }\n }\n });\n\n // Fetch and update chart\n fetchScreenTimeData().then((data) => {\n ctrl.screenTimeData = data;\n ctrl.updateChart();\n });\n\n ctrl.updateChart = () => {\n if (!chartInstance) return;\n\n requestAnimationFrame(() => {\n let labels: string[] = [];\n let values: number[] = [];\n\n if (ctrl.viewMode === \"weekly\") {\n labels = [\"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\", \"Dimanche\"];\n values = ctrl.screenTimeData.weekly[ctrl.selectedUser] || [];\n } else {\n const daily = ctrl.screenTimeData.daily[ctrl.selectedUser] || {};\n labels = Object.keys(daily);\n values = labels.map(hour => daily[hour]);\n }\n\n if (chartInstance) {\n chartInstance.data.labels = labels;\n chartInstance.data.datasets[0].data = values;\n chartInstance.data.datasets[0].label =\n ctrl.viewMode === \"weekly\"\n ? \"Temps d'écran hebdo (heures)\"\n : \"Temps d'écran aujourd'hui (minutes)\";\n chartInstance.update();\n }\n\n });\n };\n\n\n // Watcher for view mode or user change (if you bind to select/input in HTML)\n scope.$watch(() => ctrl.selectedUser, () => ctrl.updateChart());\n scope.$watch(() => ctrl.viewMode, () => ctrl.updateChart());\n });\n }\n}\n\nfunction DirectiveFactory() {\n return new Directive();\n}\n\nnotif()\n .onLangReady()\n .promise.then((lang) => {\n switch (lang) {\n default:\n conf().Platform.idiom.addKeys(require(\"./i18n/fr.json\"));\n break;\n }\n });\n\nexport const odeModuleName = \"odeCantineWidgetModule\";\n\nangular\n .module(odeModuleName, [])\n .directive(\"odeScreenTimeWidget\", DirectiveFactory);\n"],"names":["Chart","register","registerables","selectedUser","viewMode","screenTimeData","weekly","daily","updateChart","Controller","restrict","template","scope","bindToController","controller","controllerAs","require","link","elem","attrs","controllers","ctrl","chartInstance","$evalAsync","canvas","querySelector","ctx","getContext","type","data","labels","datasets","label","borderWidth","backgroundColor","options","animation","responsive","maintainAspectRatio","plugins","legend","display","tooltip","enabled","scales","x","ticks","autoSkip","maxTicksLimit","y","beginAtZero","Promise","resolve","setTimeout","Mathieu","Jean","then","requestAnimationFrame","values","Object","keys","map","hour","update","$watch","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
1
+ {"version":3,"file":"widgets/screen-time-widget/screen-time-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/screen-time-widget/screen-time-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/screen-time-widget/screen-time-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<div> <label for=\\\"userSelect\\\">Choisir un utilisateur :</label> <select id=\\\"userSelect\\\" ng-model=\\\"ctrl.selectedUser\\\" ng-change=\\\"ctrl.updateChart()\\\"> <option value=\\\"Mathieu\\\">Mathieu</option> <option value=\\\"Jean\\\">Jean</option> </select> <label for=\\\"viewMode\\\">Mode :</label> <select id=\\\"viewMode\\\" ng-model=\\\"ctrl.viewMode\\\" ng-change=\\\"ctrl.updateChart()\\\"> <option value=\\\"weekly\\\">Hebdomadaire</option> <option value=\\\"daily\\\">Quotidien</option> </select> </div> <canvas id=\\\"myChart\\\" width=\\\"400\\\" height=\\\"200\\\"></canvas>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif } from \"../../utils\";\nimport { Chart, registerables } from \"chart.js\";\n\n// Register Chart.js components\nChart.register(...registerables);\n\n// Screen time data structure\ninterface ScreenTimeData {\n weekly: {\n [key: string]: number[]; // per user, 7-day weekly data\n };\n daily: {\n [key: string]: { [hour: string]: number }; // per user, hourly screen time (e.g., \"09:00\": 30)\n };\n}\n// Mocked API function\nfunction fetchScreenTimeData(): Promise<ScreenTimeData> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n weekly: {\n Mathieu: [12, 19, 3, 5, 2, 3, 1],\n Jean: [5, 8, 6, 7, 4, 2, 3]\n },\n daily: {\n Mathieu: {\n \"08:00\": 15,\n \"09:00\": 10,\n \"10:00\": 30,\n \"11:00\": 20,\n \"12:00\": 25,\n \"13: 00\": 17,\n \"16:00\": 5,\n \"18:00\": 10,\n \"20:00\": 8,\n \"22:00\": 12,\n \"23:00\": 4\n },\n Jean: {\n \"07:00\": 5,\n \"09:00\": 25,\n \"10:00\": 10,\n \"18:00\": 15\n }\n }\n });\n }, 100);\n });\n}\n\n\n// Controller\nexport class Controller {\n public selectedUser: string = \"Mathieu\";\n public viewMode: \"weekly\" | \"daily\" = \"weekly\";\n public screenTimeData: ScreenTimeData = { weekly: {}, daily: {} };\n public updateChart: () => void = () => { };\n}\n\n\nclass Directive implements IDirective<IScope, JQLite, IAttributes, IController[]> {\n restrict = \"E\";\n template = require(\"./screen-time-widget.widget.html\").default;\n scope = {};\n bindToController = true;\n controller = [Controller];\n controllerAs = \"ctrl\";\n require = [\"odeScreenTimeWidget\"];\n\n async link(scope: IScope, elem: angular.IAugmentedJQuery, attrs: IAttributes, controllers?: IController[]) {\n const ctrl: Controller | null = controllers ? (controllers[0] as Controller) : null;\n if (!ctrl) return;\n\n let chartInstance: Chart | null = null;\n let debounceTimeout: any;\n\n // Wait for DOM render\n scope.$evalAsync(() => {\n const canvas = elem[0].querySelector<HTMLCanvasElement>(\"#myChart\");\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Init blank chart first\n chartInstance = new Chart(ctx, {\n type: \"bar\",\n data: {\n labels: [],\n datasets: [{\n label: \"\",\n data: [],\n borderWidth: 1,\n backgroundColor: \"#4e79a7\"\n }]\n },\n options: {\n animation: false,\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n legend: {\n display: true\n },\n tooltip: {\n enabled: false\n }\n },\n scales: {\n x: {\n ticks: {\n autoSkip: true,\n maxTicksLimit: 10\n }\n },\n y: {\n beginAtZero: true\n }\n }\n }\n });\n\n // Fetch and update chart\n fetchScreenTimeData().then((data) => {\n ctrl.screenTimeData = data;\n ctrl.updateChart();\n });\n\n ctrl.updateChart = () => {\n if (!chartInstance) return;\n\n requestAnimationFrame(() => {\n let labels: string[] = [];\n let values: number[] = [];\n\n if (ctrl.viewMode === \"weekly\") {\n labels = [\"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\", \"Dimanche\"];\n values = ctrl.screenTimeData.weekly[ctrl.selectedUser] || [];\n } else {\n const daily = ctrl.screenTimeData.daily[ctrl.selectedUser] || {};\n labels = Object.keys(daily);\n values = labels.map(hour => daily[hour]);\n }\n\n if (chartInstance) {\n chartInstance.data.labels = labels;\n chartInstance.data.datasets[0].data = values;\n chartInstance.data.datasets[0].label =\n ctrl.viewMode === \"weekly\"\n ? \"Temps d'écran hebdo (heures)\"\n : \"Temps d'écran aujourd'hui (minutes)\";\n chartInstance.update();\n }\n\n });\n };\n\n\n // Watcher for view mode or user change (if you bind to select/input in HTML)\n scope.$watch(() => ctrl.selectedUser, () => ctrl.updateChart());\n scope.$watch(() => ctrl.viewMode, () => ctrl.updateChart());\n });\n }\n}\n\nfunction DirectiveFactory() {\n return new Directive();\n}\n\nnotif()\n .onLangReady()\n .promise.then((lang) => {\n switch (lang) {\n default:\n conf().Platform.idiom.addKeys(require(\"./i18n/fr.json\"));\n break;\n }\n });\n\nexport const odeModuleName = \"odeCantineWidgetModule\";\n\nangular\n .module(odeModuleName, [])\n .directive(\"odeScreenTimeWidget\", DirectiveFactory);\n"],"names":["Chart","register","registerables","selectedUser","viewMode","screenTimeData","weekly","daily","updateChart","Controller","restrict","template","scope","bindToController","controller","controllerAs","require","link","elem","attrs","controllers","ctrl","chartInstance","$evalAsync","canvas","querySelector","ctx","getContext","type","data","labels","datasets","label","borderWidth","backgroundColor","options","animation","responsive","maintainAspectRatio","plugins","legend","display","tooltip","enabled","scales","x","ticks","autoSkip","maxTicksLimit","y","beginAtZero","Promise","resolve","setTimeout","Mathieu","Jean","then","requestAnimationFrame","values","Object","keys","map","hour","update","$watch","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[142],{7024:(e,t,i)=>{i.d(t,{Z:()=>n});const n=' <div class="widget-header" style="border:0;margin-bottom:-2em"> <div class="subtitle" style="display:none"><i18n>universalis.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"> <div class="row row-cols-1 align-items-center"> <div class="mb-3"> <a href="http://www.universalis-edu.com" target="_blank" rel="noopener" ng-click="trackEvent($event, {detail:{\'open\':\'universalis\'} })"> <img src="/assets/widgets/universalis-widget/universalis.png" width="75" alt="Universalis"> </a> </div> </div> <form method="GET" action="https://www.universalis-edu.com/nomade/precherche/" target="_blank" autocomplete="off"> <div ng-if="!ctrl.hasManySchools" class="school mb-3">{{ctrl.selectedSchool.name}}</div> <div ng-if="ctrl.hasManySchools" class="dropdown mb-3"> <div class="school-multiple dropdown-toggle" role="button" id="universalisWidgetSchool" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a href="" class="">{{ctrl.selectedSchool.name}}</a> </div> <div class="school-choice dropdown-menu" aria-labelledby="universalisWidgetSchool"> <div tabindex="0" role="button" class="dropdown-item" ng-repeat="school in ctrl.description.schools" ng-click="ctrl.onSchoolSelected($index)" ng-keydown="ctrl.onSchoolSelected($index, $event)"> {{school.name}} </div> </div> </div> <div class="row row-cols-1 align-items-center"> <label class="sr-only" for="inputUniversalisQ" translate content="{{ctrl.selectedSchool.UAI == null ? \'universalis.no.uai\' : \'search\'}}"></label> <div class="input-group mb-2"> <input type="text" id="inputUniversalisQ" class="form-control" name="q" maxlength="255" i18n-placeholder="{{ctrl.selectedSchool.UAI == null ? \'universalis.no.uai\' : \'search\'}}" ng-disabled="ctrl.selectedSchool.UAI == null"/> <input type="hidden" name="r" value="www"/> <input type="hidden" name="uai" value="{{ctrl.selectedSchool.UAI}}"/> <button class="btn btn-outline-secondary" ng-class="{\'disabled\': ctrl.selectedSchool.UAI == null}" aria-labelledby="inputUniversalisQ" ng-click="trackEvent($event, {detail:{\'search\':\'launch\'} })"> <i class="ic-search"></i> </button> </div> </div> </form> </div> </div> '},462:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{c(n.next(e))}catch(e){s(e)}}function l(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,l)}c((n=n.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var i,n,o,s,r={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function l(s){return function(l){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;r;)try{if(i=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return r.label++,{value:s[1],done:!1};case 5:r.label++,n=s[1],s=[0];continue;case 7:s=r.ops.pop(),r.trys.pop();continue;default:if(!(o=r.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){r=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){r.label=s[1];break}if(6===s[0]&&r.label<o[1]){r.label=o[1],o=s;break}if(o&&r.label<o[2]){r.label=o[2],r.ops.push(s);break}o[2]&&r.ops.pop(),r.trys.pop();continue}s=t.call(e,r)}catch(e){s=[6,e],n=0}finally{i=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var r=s(i(4202)),l=i(5262),c=i(9419),a=function(){function e(){}return Object.defineProperty(e.prototype,"description",{get:function(){return(0,c.session)().description},enumerable:!1,configurable:!0}),e.prototype.initialize=function(){var e,t;return n(this,void 0,void 0,(function(){var i,n=this;return o(this,(function(o){switch(o.label){case 0:return this._userPref=null===(e=l.WidgetFrameworkFactory.instance().list.find((function(e){return e.platformConf.name===l.WIDGET_NAME.UNIVERSALIS})))||void 0===e?void 0:e.userPref,[4,(0,c.notif)().onSessionReady().promise];case 1:return o.sent(),i=0,(null===(t=this._userPref)||void 0===t?void 0:t.schoolId)&&r.default.isArray(this.description.schools)&&(i=this.description.schools.findIndex((function(e){var t;return e.id===(null===(t=n._userPref)||void 0===t?void 0:t.schoolId)})),i<0&&(i=0)),this.setSelectedSchool(i),[2]}}))}))},e.prototype.setSelectedSchool=function(e){return 0<=e&&e<this.description.schools.length&&this.selectedSchool!==this.description.schools[e]&&(this.selectedSchool=this.description.schools[e],!0)},e.prototype.onSchoolSelected=function(e,t){var i;return(!t||"keydown"===t.type&&(13===t.which||32===t.which))&&(this._userPref&&this.setSelectedSchool(e)&&(this._userPref.schoolId=null===(i=this.selectedSchool)||void 0===i?void 0:i.id,l.WidgetFrameworkFactory.instance().saveUserPrefs()),!0)},Object.defineProperty(e.prototype,"hasManySchools",{get:function(){return this.description.schools.length>1},enumerable:!1,configurable:!0}),e}(),d=function(){function e(){this.restrict="E",this.template=i(7024).Z,this.scope={},this.bindToController=!0,this.controller=[a],this.controllerAs="ctrl",this.require=["odeUniversalisWidget"]}return e.prototype.link=function(e,t,i,s){return n(this,void 0,void 0,(function(){var t;return o(this,(function(i){switch(i.label){case 0:return(t=s?s[0]:null)?[4,t.initialize()]:[2];case 1:return i.sent(),e.$apply(),[2]}}))}))},e}();(0,c.notif)().onLangReady().promise.then((function(e){(0,c.conf)().Platform.idiom.addKeys(i(9899))})),t.odeModuleName="odeUniversalisWidgetModule",r.default.module(t.odeModuleName,[]).directive("odeUniversalisWidget",(function(){return new d}))},9899:e=>{e.exports=JSON.parse('{"universalis.title":"Universalis","universalis.no.uai":"UAI non renseigné"}')}}]);
1
+ "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[142],{7024:(e,t,i)=>{i.d(t,{Z:()=>n});const n=' <div class="widget-header" style="border:0;margin-bottom:-2em"> <div class="subtitle" style="display:none"><i18n>universalis.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"> <div class="row row-cols-1 align-items-center"> <div class="mb-3"> <a href="http://www.universalis-edu.com" target="_blank" rel="noopener" ng-click="trackEvent($event, {detail:{\'open\':\'universalis\'} })"> <img src="/assets/widgets/universalis-widget/universalis.png" width="75" alt="Universalis"> </a> </div> </div> <form method="GET" action="https://www.universalis-edu.com/nomade/precherche/" target="_blank" autocomplete="off"> <div ng-if="!ctrl.hasManySchools" class="school mb-3">{{ctrl.selectedSchool.name}}</div> <div ng-if="ctrl.hasManySchools" class="dropdown mb-3"> <div class="school-multiple dropdown-toggle" role="button" id="universalisWidgetSchool" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a href="" class="">{{ctrl.selectedSchool.name}}</a> </div> <div class="school-choice dropdown-menu" aria-labelledby="universalisWidgetSchool"> <div tabindex="0" role="button" class="dropdown-item" ng-repeat="school in ctrl.description.schools" ng-click="ctrl.onSchoolSelected($index)" ng-keydown="ctrl.onSchoolSelected($index, $event)"> {{school.name}} </div> </div> </div> <div class="row row-cols-1 align-items-center"> <label class="sr-only" for="inputUniversalisQ" translate content="{{ctrl.selectedSchool.UAI == null ? \'universalis.no.uai\' : \'search\'}}"></label> <div class="input-group mb-2"> <input type="text" id="inputUniversalisQ" class="form-control" name="q" maxlength="255" i18n-placeholder="{{ctrl.selectedSchool.UAI == null ? \'universalis.no.uai\' : \'search\'}}" ng-disabled="ctrl.selectedSchool.UAI == null"/> <input type="hidden" name="r" value="www"/> <input type="hidden" name="uai" value="{{ctrl.selectedSchool.UAI}}"/> <button class="btn btn-outline-secondary" ng-class="{\'disabled\': ctrl.selectedSchool.UAI == null}" aria-labelledby="inputUniversalisQ" ng-click="trackEvent($event, {detail:{\'search\':\'launch\'} })"> <i class="ic-search"></i> </button> </div> </div> </form> </div> </div> '},462:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))(function(o,s){function r(e){try{c(n.next(e))}catch(e){s(e)}}function l(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,l)}c((n=n.apply(e,t||[])).next())})},o=this&&this.__generator||function(e,t){var i,n,o,s,r={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function l(s){return function(l){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;r;)try{if(i=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return r.label++,{value:s[1],done:!1};case 5:r.label++,n=s[1],s=[0];continue;case 7:s=r.ops.pop(),r.trys.pop();continue;default:if(!(o=r.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){r=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){r.label=s[1];break}if(6===s[0]&&r.label<o[1]){r.label=o[1],o=s;break}if(o&&r.label<o[2]){r.label=o[2],r.ops.push(s);break}o[2]&&r.ops.pop(),r.trys.pop();continue}s=t.call(e,r)}catch(e){s=[6,e],n=0}finally{i=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var r=s(i(4202)),l=i(5262),c=i(9419),a=function(){function e(){}return Object.defineProperty(e.prototype,"description",{get:function(){return(0,c.session)().description},enumerable:!1,configurable:!0}),e.prototype.initialize=function(){var e,t;return n(this,void 0,void 0,function(){var i,n=this;return o(this,function(o){switch(o.label){case 0:return this._userPref=null===(e=l.WidgetFrameworkFactory.instance().list.find(function(e){return e.platformConf.name===l.WIDGET_NAME.UNIVERSALIS}))||void 0===e?void 0:e.userPref,[4,(0,c.notif)().onSessionReady().promise];case 1:return o.sent(),i=0,(null===(t=this._userPref)||void 0===t?void 0:t.schoolId)&&r.default.isArray(this.description.schools)&&(i=this.description.schools.findIndex(function(e){var t;return e.id===(null===(t=n._userPref)||void 0===t?void 0:t.schoolId)}),i<0&&(i=0)),this.setSelectedSchool(i),[2]}})})},e.prototype.setSelectedSchool=function(e){return 0<=e&&e<this.description.schools.length&&this.selectedSchool!==this.description.schools[e]&&(this.selectedSchool=this.description.schools[e],!0)},e.prototype.onSchoolSelected=function(e,t){var i;return(!t||"keydown"===t.type&&(13===t.which||32===t.which))&&(this._userPref&&this.setSelectedSchool(e)&&(this._userPref.schoolId=null===(i=this.selectedSchool)||void 0===i?void 0:i.id,l.WidgetFrameworkFactory.instance().saveUserPrefs()),!0)},Object.defineProperty(e.prototype,"hasManySchools",{get:function(){return this.description.schools.length>1},enumerable:!1,configurable:!0}),e}(),d=function(){function e(){this.restrict="E",this.template=i(7024).Z,this.scope={},this.bindToController=!0,this.controller=[a],this.controllerAs="ctrl",this.require=["odeUniversalisWidget"]}return e.prototype.link=function(e,t,i,s){return n(this,void 0,void 0,function(){var t;return o(this,function(i){switch(i.label){case 0:return(t=s?s[0]:null)?[4,t.initialize()]:[2];case 1:return i.sent(),e.$apply(),[2]}})})},e}();(0,c.notif)().onLangReady().promise.then(function(e){(0,c.conf)().Platform.idiom.addKeys(i(9899))}),t.odeModuleName="odeUniversalisWidgetModule",r.default.module(t.odeModuleName,[]).directive("odeUniversalisWidget",function(){return new d})},9899:e=>{e.exports=JSON.parse('{"universalis.title":"Universalis","universalis.no.uai":"UAI non renseigné"}')}}]);
2
2
  //# sourceMappingURL=universalis-widget.widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"widgets/universalis-widget/universalis-widget.widget.js","mappings":"gIAGA,QAFW,sxE,6iDCDX,iBACA,UACA,UAGA,0BA+CA,QA1CC,sBAAc,0BAAW,C,IAAzB,WACC,OAAO,IAAAA,WAAUC,WAClB,E,gCAEa,YAAAC,WAAb,W,+GAEC,OADAC,KAAKC,UAA4G,QAAhG,IAAAC,uBAAuBC,WAAWC,KAAKC,MAAM,SAAAC,GAAK,OAAAA,EAAEC,aAAaC,OAAO,EAAAC,YAAYC,WAAlC,WAA8C,eAAEC,SACnH,IAAM,IAAAC,SAAQC,iBAAiBC,S,cAA/B,SAEIC,EAAe,GACD,QAAd,EAAAf,KAAKC,iBAAS,eAAEe,WAAY,UAAQC,QAAQjB,KAAKF,YAAYoB,WAChEH,EAAef,KAAKF,YAAYoB,QAAQC,WAAW,SAAAC,GAAM,MAAI,OAAAA,EAAOC,MAAmB,QAAd,IAAKpB,iBAAS,eAAEe,SAAQ,IAC7FD,EAAe,IAClBA,EAAe,IAGjBf,KAAKsB,kBAAmBP,G,YAIjB,YAAAO,kBAAR,SAA2BC,GAC1B,OAAI,GAAKA,GAAOA,EAAMvB,KAAKF,YAAYoB,QAAQM,QAAUxB,KAAKyB,iBAAmBzB,KAAKF,YAAYoB,QAAQK,KACzGvB,KAAKyB,eAAiBzB,KAAKF,YAAYoB,QAAQK,IACxC,EAGT,EAEU,YAAAG,iBAAV,SAA4BH,EAAYI,G,MAEvC,QAAKA,GAAiB,YAAVA,EAAGC,OAAgC,KAAXD,EAAGE,OAAyB,KAAXF,EAAGE,UACnD7B,KAAKC,WAAaD,KAAKsB,kBAAkBC,KAC5CvB,KAAKC,UAAUe,SAA8B,QAAnB,EAAAhB,KAAKyB,sBAAc,eAAEJ,GAC/C,EAAAnB,uBAAuBC,WAAW2B,kBAE5B,EAGT,EAEA,sBAAc,6BAAc,C,IAA5B,WACC,OAAO9B,KAAKF,YAAYoB,QAAQM,OAAS,CAC1C,E,gCACD,EA/CA,GAkDA,0BACI,KAAAO,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,MAAQ,CAAC,EACT,KAAAC,kBAAmB,EACnB,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,uBAWZ,QATU,YAAAC,KAAN,SAAWN,EAAcO,EAAaC,EAAmBC,G,gGAErD,OADMC,EAAuBD,EAAcA,EAAY,GAAmB,MAKhF,GAAMC,EAAK5C,cAHD,I,cAGV,SACAkC,EAAMW,S,YAER,EAlBA,IA0BA,IAAAhC,SAAQiC,cAAc/B,QAAQgC,MAAM,SAAAC,IAEzB,IAAAC,QAAOC,SAASC,MAAMC,QAAS,EAAQ,MAElD,IAIa,EAAAC,cAAgB,6BAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,wBAd9C,WACC,OAAO,IAAIC,CACZ,G","sources":["webpack://ode-ngjs-front/./src/ts/widgets/universalis-widget/universalis-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/universalis-widget/universalis-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-header\\\" style=\\\"border:0;margin-bottom:-2em\\\"> <div class=\\\"subtitle\\\" style=\\\"display:none\\\"><i18n>universalis.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\\\"> <div class=\\\"row row-cols-1 align-items-center\\\"> <div class=\\\"mb-3\\\"> <a href=\\\"http://www.universalis-edu.com\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" ng-click=\\\"trackEvent($event, {detail:{'open':'universalis'} })\\\"> <img src=\\\"/assets/widgets/universalis-widget/universalis.png\\\" width=\\\"75\\\" alt=\\\"Universalis\\\"> </a> </div> </div> <form method=\\\"GET\\\" action=\\\"https://www.universalis-edu.com/nomade/precherche/\\\" target=\\\"_blank\\\" autocomplete=\\\"off\\\"> <div ng-if=\\\"!ctrl.hasManySchools\\\" class=\\\"school mb-3\\\">{{ctrl.selectedSchool.name}}</div> <div ng-if=\\\"ctrl.hasManySchools\\\" class=\\\"dropdown mb-3\\\"> <div class=\\\"school-multiple dropdown-toggle\\\" role=\\\"button\\\" id=\\\"universalisWidgetSchool\\\" data-bs-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"> <a href=\\\"\\\" class=\\\"\\\">{{ctrl.selectedSchool.name}}</a> </div> <div class=\\\"school-choice dropdown-menu\\\" aria-labelledby=\\\"universalisWidgetSchool\\\"> <div tabindex=\\\"0\\\" role=\\\"button\\\" class=\\\"dropdown-item\\\" ng-repeat=\\\"school in ctrl.description.schools\\\" ng-click=\\\"ctrl.onSchoolSelected($index)\\\" ng-keydown=\\\"ctrl.onSchoolSelected($index, $event)\\\"> {{school.name}} </div> </div> </div> <div class=\\\"row row-cols-1 align-items-center\\\"> <label class=\\\"sr-only\\\" for=\\\"inputUniversalisQ\\\" translate content=\\\"{{ctrl.selectedSchool.UAI == null ? 'universalis.no.uai' : 'search'}}\\\"></label> <div class=\\\"input-group mb-2\\\"> <input type=\\\"text\\\" id=\\\"inputUniversalisQ\\\" class=\\\"form-control\\\" name=\\\"q\\\" maxlength=\\\"255\\\" i18n-placeholder=\\\"{{ctrl.selectedSchool.UAI == null ? 'universalis.no.uai' : 'search'}}\\\" ng-disabled=\\\"ctrl.selectedSchool.UAI == null\\\"/> <input type=\\\"hidden\\\" name=\\\"r\\\" value=\\\"www\\\"/> <input type=\\\"hidden\\\" name=\\\"uai\\\" value=\\\"{{ctrl.selectedSchool.UAI}}\\\"/> <button class=\\\"btn btn-outline-secondary\\\" ng-class=\\\"{'disabled': ctrl.selectedSchool.UAI == null}\\\" aria-labelledby=\\\"inputUniversalisQ\\\" ng-click=\\\"trackEvent($event, {detail:{'search':'launch'} })\\\"> <i class=\\\"ic-search\\\"></i> </button> </div> </div> </form> </div> </div> \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { IUserDescription, IUserInfo, School, WidgetFrameworkFactory, WidgetUserPref, WIDGET_NAME } from \"ode-ts-client\";\nimport { conf, notif, session, http } from \"../../utils\";\n\n/* Controller for the directive */\nclass Controller implements IController\n{\n\tprivate _userPref?:WidgetUserPref;\n\tprivate selectedSchool?:School;\n\n\tprotected get description():IUserDescription {\n\t\treturn session().description;\n\t}\n\n\tpublic async initialize() {\n\t\tthis._userPref = WidgetFrameworkFactory.instance().list.find( w => w.platformConf.name===WIDGET_NAME.UNIVERSALIS)?.userPref;\n\t\tawait notif().onSessionReady().promise;\n\n\t\tlet defaultIndex = 0;\n\t\tif( this._userPref?.schoolId && angular.isArray(this.description.schools) ) {\n\t\t\tdefaultIndex = this.description.schools.findIndex( school => school.id===this._userPref?.schoolId );\n\t\t\tif( defaultIndex < 0 ) {\n\t\t\t\tdefaultIndex = 0;\n\t\t\t}\n\t\t}\n\t\tthis.setSelectedSchool( defaultIndex );\n\t}\n\n\n\tprivate setSelectedSchool( idx:number ):boolean {\n\t\tif( 0 <= idx && idx < this.description.schools.length && this.selectedSchool !== this.description.schools[idx]) {\n\t\t\tthis.selectedSchool = this.description.schools[idx];\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected onSchoolSelected( idx:number, ev?:JQuery.Event ) {\n\t\t// If an event is given, and related to pressing the enter or spacebar key.\n\t\tif( !ev || (ev.type==='keydown' && (ev.which===13 || ev.which===32)) ) {\t\n\t\t\tif( this._userPref && this.setSelectedSchool(idx) ) {\n\t\t\t\tthis._userPref.schoolId = this.selectedSchool?.id;\n\t\t\t\tWidgetFrameworkFactory.instance().saveUserPrefs();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected get hasManySchools() {\n\t\treturn this.description.schools.length > 1;\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./universalis-widget.widget.html').default;\n\tscope = {};\n\tbindToController = true;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeUniversalisWidget'];\n\n async link(scope:IScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]) {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n if( !ctrl ) {\n return;\n\t\t}\n\n\t\tawait ctrl.initialize();\n\t\tscope.$apply();\n\t}\n}\n\n/** The universalis widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeUniversalisWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeUniversalisWidget\", DirectiveFactory );\n"],"names":["session","description","initialize","this","_userPref","WidgetFrameworkFactory","instance","list","find","w","platformConf","name","WIDGET_NAME","UNIVERSALIS","userPref","notif","onSessionReady","promise","defaultIndex","schoolId","isArray","schools","findIndex","school","id","setSelectedSchool","idx","length","selectedSchool","onSchoolSelected","ev","type","which","saveUserPrefs","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","onLangReady","then","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
1
+ {"version":3,"file":"widgets/universalis-widget/universalis-widget.widget.js","mappings":"gIAGA,QAFW,sxE,yiDCDX,iBACA,UACA,UAGA,0BA+CA,QA1CC,sBAAc,0BAAW,C,IAAzB,WACC,OAAO,IAAAA,WAAUC,WAClB,E,gCAEa,YAAAC,WAAb,W,6GAEC,OADAC,KAAKC,UAA4G,QAAhG,IAAAC,uBAAuBC,WAAWC,KAAKC,KAAM,SAAAC,GAAK,OAAAA,EAAEC,aAAaC,OAAO,EAAAC,YAAYC,WAAlC,UAA8C,eAAEC,SACnH,IAAM,IAAAC,SAAQC,iBAAiBC,S,cAA/B,SAEIC,EAAe,GACD,QAAd,EAAAf,KAAKC,iBAAS,eAAEe,WAAY,UAAQC,QAAQjB,KAAKF,YAAYoB,WAChEH,EAAef,KAAKF,YAAYoB,QAAQC,UAAW,SAAAC,GAAM,MAAI,OAAAA,EAAOC,MAAmB,QAAd,IAAKpB,iBAAS,eAAEe,SAAQ,GAC7FD,EAAe,IAClBA,EAAe,IAGjBf,KAAKsB,kBAAmBP,G,UAIjB,YAAAO,kBAAR,SAA2BC,GAC1B,OAAI,GAAKA,GAAOA,EAAMvB,KAAKF,YAAYoB,QAAQM,QAAUxB,KAAKyB,iBAAmBzB,KAAKF,YAAYoB,QAAQK,KACzGvB,KAAKyB,eAAiBzB,KAAKF,YAAYoB,QAAQK,IACxC,EAGT,EAEU,YAAAG,iBAAV,SAA4BH,EAAYI,G,MAEvC,QAAKA,GAAiB,YAAVA,EAAGC,OAAgC,KAAXD,EAAGE,OAAyB,KAAXF,EAAGE,UACnD7B,KAAKC,WAAaD,KAAKsB,kBAAkBC,KAC5CvB,KAAKC,UAAUe,SAA8B,QAAnB,EAAAhB,KAAKyB,sBAAc,eAAEJ,GAC/C,EAAAnB,uBAAuBC,WAAW2B,kBAE5B,EAGT,EAEA,sBAAc,6BAAc,C,IAA5B,WACC,OAAO9B,KAAKF,YAAYoB,QAAQM,OAAS,CAC1C,E,gCACD,EA/CA,GAkDA,0BACI,KAAAO,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,MAAQ,CAAC,EACT,KAAAC,kBAAmB,EACnB,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,uBAWZ,QATU,YAAAC,KAAN,SAAWN,EAAcO,EAAaC,EAAmBC,G,8FAErD,OADMC,EAAuBD,EAAcA,EAAY,GAAmB,MAKhF,GAAMC,EAAK5C,cAHD,I,cAGV,SACAkC,EAAMW,S,UAER,EAlBA,IA0BA,IAAAhC,SAAQiC,cAAc/B,QAAQgC,KAAM,SAAAC,IAEzB,IAAAC,QAAOC,SAASC,MAAMC,QAAS,EAAQ,MAElD,GAIa,EAAAC,cAAgB,6BAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,uBAd9C,WACC,OAAO,IAAIC,CACZ,E","sources":["webpack://ode-ngjs-front/./src/ts/widgets/universalis-widget/universalis-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/universalis-widget/universalis-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \" <div class=\\\"widget-header\\\" style=\\\"border:0;margin-bottom:-2em\\\"> <div class=\\\"subtitle\\\" style=\\\"display:none\\\"><i18n>universalis.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\\\"> <div class=\\\"row row-cols-1 align-items-center\\\"> <div class=\\\"mb-3\\\"> <a href=\\\"http://www.universalis-edu.com\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\" ng-click=\\\"trackEvent($event, {detail:{'open':'universalis'} })\\\"> <img src=\\\"/assets/widgets/universalis-widget/universalis.png\\\" width=\\\"75\\\" alt=\\\"Universalis\\\"> </a> </div> </div> <form method=\\\"GET\\\" action=\\\"https://www.universalis-edu.com/nomade/precherche/\\\" target=\\\"_blank\\\" autocomplete=\\\"off\\\"> <div ng-if=\\\"!ctrl.hasManySchools\\\" class=\\\"school mb-3\\\">{{ctrl.selectedSchool.name}}</div> <div ng-if=\\\"ctrl.hasManySchools\\\" class=\\\"dropdown mb-3\\\"> <div class=\\\"school-multiple dropdown-toggle\\\" role=\\\"button\\\" id=\\\"universalisWidgetSchool\\\" data-bs-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"> <a href=\\\"\\\" class=\\\"\\\">{{ctrl.selectedSchool.name}}</a> </div> <div class=\\\"school-choice dropdown-menu\\\" aria-labelledby=\\\"universalisWidgetSchool\\\"> <div tabindex=\\\"0\\\" role=\\\"button\\\" class=\\\"dropdown-item\\\" ng-repeat=\\\"school in ctrl.description.schools\\\" ng-click=\\\"ctrl.onSchoolSelected($index)\\\" ng-keydown=\\\"ctrl.onSchoolSelected($index, $event)\\\"> {{school.name}} </div> </div> </div> <div class=\\\"row row-cols-1 align-items-center\\\"> <label class=\\\"sr-only\\\" for=\\\"inputUniversalisQ\\\" translate content=\\\"{{ctrl.selectedSchool.UAI == null ? 'universalis.no.uai' : 'search'}}\\\"></label> <div class=\\\"input-group mb-2\\\"> <input type=\\\"text\\\" id=\\\"inputUniversalisQ\\\" class=\\\"form-control\\\" name=\\\"q\\\" maxlength=\\\"255\\\" i18n-placeholder=\\\"{{ctrl.selectedSchool.UAI == null ? 'universalis.no.uai' : 'search'}}\\\" ng-disabled=\\\"ctrl.selectedSchool.UAI == null\\\"/> <input type=\\\"hidden\\\" name=\\\"r\\\" value=\\\"www\\\"/> <input type=\\\"hidden\\\" name=\\\"uai\\\" value=\\\"{{ctrl.selectedSchool.UAI}}\\\"/> <button class=\\\"btn btn-outline-secondary\\\" ng-class=\\\"{'disabled': ctrl.selectedSchool.UAI == null}\\\" aria-labelledby=\\\"inputUniversalisQ\\\" ng-click=\\\"trackEvent($event, {detail:{'search':'launch'} })\\\"> <i class=\\\"ic-search\\\"></i> </button> </div> </div> </form> </div> </div> \";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { IUserDescription, IUserInfo, School, WidgetFrameworkFactory, WidgetUserPref, WIDGET_NAME } from \"ode-ts-client\";\nimport { conf, notif, session, http } from \"../../utils\";\n\n/* Controller for the directive */\nclass Controller implements IController\n{\n\tprivate _userPref?:WidgetUserPref;\n\tprivate selectedSchool?:School;\n\n\tprotected get description():IUserDescription {\n\t\treturn session().description;\n\t}\n\n\tpublic async initialize() {\n\t\tthis._userPref = WidgetFrameworkFactory.instance().list.find( w => w.platformConf.name===WIDGET_NAME.UNIVERSALIS)?.userPref;\n\t\tawait notif().onSessionReady().promise;\n\n\t\tlet defaultIndex = 0;\n\t\tif( this._userPref?.schoolId && angular.isArray(this.description.schools) ) {\n\t\t\tdefaultIndex = this.description.schools.findIndex( school => school.id===this._userPref?.schoolId );\n\t\t\tif( defaultIndex < 0 ) {\n\t\t\t\tdefaultIndex = 0;\n\t\t\t}\n\t\t}\n\t\tthis.setSelectedSchool( defaultIndex );\n\t}\n\n\n\tprivate setSelectedSchool( idx:number ):boolean {\n\t\tif( 0 <= idx && idx < this.description.schools.length && this.selectedSchool !== this.description.schools[idx]) {\n\t\t\tthis.selectedSchool = this.description.schools[idx];\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected onSchoolSelected( idx:number, ev?:JQuery.Event ) {\n\t\t// If an event is given, and related to pressing the enter or spacebar key.\n\t\tif( !ev || (ev.type==='keydown' && (ev.which===13 || ev.which===32)) ) {\t\n\t\t\tif( this._userPref && this.setSelectedSchool(idx) ) {\n\t\t\t\tthis._userPref.schoolId = this.selectedSchool?.id;\n\t\t\t\tWidgetFrameworkFactory.instance().saveUserPrefs();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected get hasManySchools() {\n\t\treturn this.description.schools.length > 1;\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<IScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./universalis-widget.widget.html').default;\n\tscope = {};\n\tbindToController = true;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeUniversalisWidget'];\n\n async link(scope:IScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]) {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n if( !ctrl ) {\n return;\n\t\t}\n\n\t\tawait ctrl.initialize();\n\t\tscope.$apply();\n\t}\n}\n\n/** The universalis widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeUniversalisWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeUniversalisWidget\", DirectiveFactory );\n"],"names":["session","description","initialize","this","_userPref","WidgetFrameworkFactory","instance","list","find","w","platformConf","name","WIDGET_NAME","UNIVERSALIS","userPref","notif","onSessionReady","promise","defaultIndex","schoolId","isArray","schools","findIndex","school","id","setSelectedSchool","idx","length","selectedSchool","onSchoolSelected","ev","type","which","saveUserPrefs","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","onLangReady","then","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ode-ngjs-front",
3
- "version": "1.4.11-develop-integration.202506041736",
3
+ "version": "1.4.12-develop-integration.202506191529",
4
4
  "description": "Open Digital Education Frontend Framework",
5
5
  "homepage": "https://github.com/opendigitaleducation/ode-ngjs-front#readme",
6
6
  "bugs": {