ode-ngjs-front 1.4.7 → 1.4.8-develop-pedago.202503111026
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/ode-ngjs-front.js +1 -1
- package/dist/ode-ngjs-front.js.map +1 -1
- package/dist/ts/utils/recorder-video.d.ts.map +1 -1
- package/dist/ts/widgets/bookmark-widget/bookmark-widget.widget.d.ts.map +1 -1
- package/dist/version.txt +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/mediacentre-widget/mediacentre-widget.widget.js +1 -1
- package/dist/widgets/mediacentre-widget/mediacentre-widget.widget.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder-video.d.ts","sourceRoot":"","sources":["../../../src/ts/utils/recorder-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG/E,OAAO,EAAU,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAmBnF,aAAK,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC;AAEzC,qBAAa,aAAc,YAAW,YAAY;IAuB1C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,aAAa,CAAC;IA1B1B,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAmB;IACpC,OAAO,CAAC,aAAa,CAAC,CAAoB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA8B;IACtC,WAAW,EAAE,sBAAsB,CAOxC;IACF,KAAK,EAAE,MAAM,CAAM;IACnB,IAAI,UAAU,IAAG,kBAAkB,CAElC;IACD,WAAW,EAAC,MAAM,CAAK;IACvB,SAAS,EAAC,KAAK,CAAC,CAAC,KAAK,EAAC,aAAa,KAAG,IAAI,CAAC,CAAM;gBAGtC,YAAY,EAAE,MAAM,gBAAgB,EACpC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EACtC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,wBAAwB,EACjC,aAAa,CAAC,6BAAiB;IAK3C,IAAW,KAAK,kBAEf;IAED,MAAM,CAAE,QAAQ,EAAC,CAAC,KAAK,EAAC,aAAa,KAAG,IAAI,GAAG,IAAI;IAInD,OAAO,CAAC,YAAY;WAaN,YAAY;WAQZ,oBAAoB;WAkBpB,qBAAqB;IASnC,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC;IAIvB,KAAK,IAAG,IAAI;IAKZ,IAAI,IAAG,IAAI;IAuBX,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB,CAIxB;IACD,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,SAAS;IAUjB,YAAY,CAAE,EAAE,EAAC,UAAU,GAAC,kBAAkB;IAa9C,IAAI;IAUJ,OAAO,CAAC,WAAW;IAiBnB,KAAK;IASL,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,aAAa;IAgBf,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI;IAwCvC,eAAe;IAYf,MAAM;IAIA,iBAAiB;IAI9B,OAAO,CAAC,yBAAyB;IAkB3B,OAAO;IAuBP,MAAM;
|
|
1
|
+
{"version":3,"file":"recorder-video.d.ts","sourceRoot":"","sources":["../../../src/ts/utils/recorder-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG/E,OAAO,EAAU,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAmBnF,aAAK,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC;AAEzC,qBAAa,aAAc,YAAW,YAAY;IAuB1C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,aAAa,CAAC;IA1B1B,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAmB;IACpC,OAAO,CAAC,aAAa,CAAC,CAAoB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA8B;IACtC,WAAW,EAAE,sBAAsB,CAOxC;IACF,KAAK,EAAE,MAAM,CAAM;IACnB,IAAI,UAAU,IAAG,kBAAkB,CAElC;IACD,WAAW,EAAC,MAAM,CAAK;IACvB,SAAS,EAAC,KAAK,CAAC,CAAC,KAAK,EAAC,aAAa,KAAG,IAAI,CAAC,CAAM;gBAGtC,YAAY,EAAE,MAAM,gBAAgB,EACpC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EACtC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,wBAAwB,EACjC,aAAa,CAAC,6BAAiB;IAK3C,IAAW,KAAK,kBAEf;IAED,MAAM,CAAE,QAAQ,EAAC,CAAC,KAAK,EAAC,aAAa,KAAG,IAAI,GAAG,IAAI;IAInD,OAAO,CAAC,YAAY;WAaN,YAAY;WAQZ,oBAAoB;WAkBpB,qBAAqB;IASnC,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC;IAIvB,KAAK,IAAG,IAAI;IAKZ,IAAI,IAAG,IAAI;IAuBX,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB,CAIxB;IACD,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,SAAS;IAUjB,YAAY,CAAE,EAAE,EAAC,UAAU,GAAC,kBAAkB;IAa9C,IAAI;IAUJ,OAAO,CAAC,WAAW;IAiBnB,KAAK;IASL,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,aAAa;IAgBf,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI;IAwCvC,eAAe;IAYf,MAAM;IAIA,iBAAiB;IAI9B,OAAO,CAAC,yBAAyB;IAkB3B,OAAO;IAuBP,MAAM;IAgCL,aAAa,CAAC,WAAW,EAAE,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC;IAejD,aAAa;IAUb,SAAS;IAIT,WAAW,CAAC,aAAa,EAAE,OAAO;CAI5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookmark-widget.widget.d.ts","sourceRoot":"","sources":["../../../../src/ts/widgets/bookmark-widget/bookmark-widget.widget.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bookmark-widget.widget.d.ts","sourceRoot":"","sources":["../../../../src/ts/widgets/bookmark-widget/bookmark-widget.widget.ts"],"names":[],"mappings":"AAoPA,eAAO,MAAM,aAAa,4BAA4B,CAAC"}
|
package/dist/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
ode-ngjs-front
|
|
1
|
+
ode-ngjs-front 11/03/2025 10:27:30
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[364],{7562:(t,e,o)=>{o.d(e,{Z:()=>
|
|
1
|
+
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[364],{7562:(t,e,o)=>{o.d(e,{Z:()=>r});const r='<div class="widget-bookmarks"> <div class="widget-header"> <div class="subtitle"><i18n>bookmark-widget.widget.title</i18n></div> <div class="widget-options"> <div class="tools"> <a href="" class="tool tool-option" i18n-title="bookmark-widget.widget.manage.bookmarks" ng-click="ctrl.display.manage = true"> <i class="fas fa-cog"></i> </a> </div> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body"> <div class="widget-empty-message link" ng-click="ctrl.display.manage = true" ng-if="ctrl.bookmarks.length === 0"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class="bookmark-list" ng-if="!ctrl.bookmarks.isEmpty()"> <li class="bookmark-item" ng-repeat="bookmark in ctrl.bookmarks | orderBy:\'name\'"> <a class="link" href="[[bookmark.url]]" target="_blank" ng-click="trackEvent($event, {detail:{\'open\':bookmark.url} })"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size="lg" visible="ctrl.display.manage" on-close="ctrl.display.manage = false" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if="ctrl.bookmarks.length === 0"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class="table table-hover" ng-if="ctrl.bookmarks.length !== 0"> <thead> <tr class="bg-secondary text-light"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class="c-pointer" ng-repeat="bookmark in ctrl.bookmarks" ng-class="{ \'table-active\' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }"> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.name]]</td> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.url]]</td> <td ng-click="ctrl.deleteBookmark(bookmark)"> <button type="button" class="btn-close" aria-label="Close"></button> </td> </tr> </tbody> </table> <form id="formCreated" autocomplete="off" class="mt-5" ng-if="ctrl.isCreatingBookmark()"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class="form-group row mt-3"> <label for="inputCreatedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedName" class="form-control auto-focused" ng-model="ctrl.createdBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputCreatedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedUrl" class="form-control" ng-model="ctrl.createdBookmark.url"/> </div> </div> </form> <form id="formEdited" autocomplete="off" class="mt-5" ng-if="ctrl.isEditingBookmark()"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class="form-group row mt-3"> <label for="inputEditedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedName" class="form-control auto-focused" ng-model="ctrl.editedBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputEditedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedUrl" class="form-control" ng-model="ctrl.editedBookmark.url"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if="!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()"> <button class="btn btn-primary" ng-click="ctrl.newBookmark()"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if="ctrl.isCreatingBookmark()"> <button form="formCreated" type="reset" class="btn btn-light" ng-click="ctrl.cancelCreate()"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form="formCreated" type="submit" class="btn btn-primary" ng-click="ctrl.createBookmark()"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if="ctrl.isEditingBookmark()"> <button form="formEdited" type="reset" class="btn btn-light" ng-click="ctrl.cancelEdit()"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form="formEdited" type="submit" class="btn btn-primary" ng-click="ctrl.updateBookmark()"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>'},9278:function(t,e,o){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.odeModuleName=void 0;var i=r(o(4202)),a=o(9419),n=o(6731);function d(t){return!t||0===t.trim().length}var l=function(){function t(t){this.name="",this.url="",this.flatCopy(t)}return t.prototype.flatCopy=function(t){return t&&Object.assign(this,t),this},t.prototype.create=function(){var t=this;return d(this.name)?(n.notify.error("bookmark-widget.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark-widget.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().postJson("/bookmark",this).then((function(e){if(200!==(0,a.http)().latestResponse.status)throw"Rejected bookmark";return t.flatCopy(e)})).catch((function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t}))},t.prototype.update=function(){var t=this;return d(this.name)?(n.notify.error("bookmark.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().putJson("/bookmark/".concat(this._id),this).then((function(){return t})).catch((function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t}))},t.prototype.delete=function(){var t=this;return(0,a.http)().delete("/bookmark/".concat(this._id)).then((function(){return t}))},t.prototype.toJSON=function(){return{name:this.name,url:this.url}},t}(),s=function(){function t(){this.bookmarks=[],this.display={manage:!1}}return t.prototype.getBookmarks=function(){var t=this;return(0,a.http)().get("/bookmark").then((function(e){e&&e.bookmarks?t.bookmarks=e.bookmarks.map((function(t){return new l(t)})):t.bookmarks=[],t.apply&&t.apply()}))},t.prototype.removeHashStart=function(t){return t.replace("#start","")},t.prototype.createBookmark=function(){var t=this;this.createdBookmark&&(this.createdBookmark.url=this.removeHashStart(this.createdBookmark.url),this.createdBookmark.create().then((function(e){t.bookmarks.push(e),t.cancelCreate(),t.apply&&t.apply()})))},t.prototype.updateBookmark=function(){var t=this;if(this.editedBookmark){this.editedBookmark.url=this.removeHashStart(this.editedBookmark.url);var e=this.editedBookmark;e.update().then((function(){var o=t.bookmarks.find((function(t){return t._id===e._id}));null==o||o.flatCopy(e),t.cancelEdit(),t.apply&&t.apply()}))}},t.prototype.deleteBookmark=function(t){var e=this;t.delete().then((function(t){var o=e.bookmarks.indexOf(t);e.bookmarks.splice(o,1),e.cancelEdit(),e.apply&&e.apply()}))},t.prototype.newBookmark=function(){this.createdBookmark=new l({url:"http://",name:""}),this.cancelEdit()},t.prototype.isCreatingBookmark=function(){return i.default.isDefined(this.createdBookmark)},t.prototype.isEditingBookmark=function(){return i.default.isDefined(this.editedBookmark)},t.prototype.editBookmark=function(t){this.editedBookmark=new l(t),this.cancelCreate()},t.prototype.cancelCreate=function(){this.createdBookmark=void 0},t.prototype.cancelEdit=function(){this.editedBookmark=void 0},t}(),m=function(){function t(){this.restrict="E",this.template=o(7562).Z,this.controller=[s],this.controllerAs="ctrl",this.require=["odeBookmarkWidget"]}return t.prototype.link=function(t,e,o,r){var i=r?r[0]:null;i&&(i.getBookmarks().then((function(){t.$apply()})),i.apply=function(){t.$apply()},t.trackEvent=function(t,e){var o;void 0===e.bubbles&&(e.bubbles=!0);var r=null;e&&"string"==typeof(null===(o=e.detail)||void 0===o?void 0:o.open)&&(r=new CustomEvent(a.TrackedActionFromWidget.bookmark,e)),r&&t.currentTarget&&t.currentTarget.dispatchEvent(r)})},t}();(0,a.notif)().onLangReady().promise.then((function(t){(0,a.conf)().Platform.idiom.addKeys(o(2731))})),e.odeModuleName="odeBookmarkWidgetModule",i.default.module(e.odeModuleName,[]).directive("odeBookmarkWidget",(function(){return new m}))},2731:t=>{t.exports=JSON.parse('{"bookmark-widget.widget.title":"Liens utiles","bookmark-widget":"Liens utiles","bookmark-widget.widget.createform.cancel":"Annuler","bookmark-widget.widget.createform.name":"Nom","bookmark-widget.widget.createform.save":"Enregistrer","bookmark-widget.widget.createform.title":"Nouveau lien utile","bookmark-widget.widget.createform.url":"Adresse","bookmark-widget.widget.edit.bookmark":"Mettre à jour le lien utile","bookmark-widget.widget.editform.cancel":"Annuler","bookmark-widget.widget.editform.name":"Nom","bookmark-widget.widget.editform.save":"Enregistrer","bookmark-widget.widget.editform.url":"Adresse","bookmark-widget.widget.empty":"Gardez à portée de main les sites web que vous utilisez souvent.","bookmark-widget.widget.form.name.is.empty":"Le champ \'nom\' est obligatoire","bookmark-widget.widget.form.url.is.empty":"Le champ \'adresse\' est obligatoire","bookmark-widget.widget.manage.empty":"Aucun lien utile","bookmark-widget.widget.manage.bookmarks":"Gérer les liens utiles","bookmark-widget.widget.manage.title":"Gérer les liens utiles","bookmark-widget.widget.managetable.name":"Nom","bookmark-widget.widget.managetable.url":"Adresse","bookmark-widget.widget.new.bookmark":"Nouveau lien utile"}')}}]);
|
|
2
2
|
//# sourceMappingURL=bookmark-widget.widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets/bookmark-widget/bookmark-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<div class=\\\"widget-bookmarks\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>bookmark-widget.widget.title</i18n></div> <div class=\\\"widget-options\\\"> <div class=\\\"tools\\\"> <a href=\\\"\\\" class=\\\"tool tool-option\\\" i18n-title=\\\"bookmark-widget.widget.manage.bookmarks\\\" ng-click=\\\"ctrl.display.manage = true\\\"> <i class=\\\"fas fa-cog\\\"></i> </a> </div> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\"> <div class=\\\"widget-empty-message link\\\" ng-click=\\\"ctrl.display.manage = true\\\" ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class=\\\"bookmark-list\\\" ng-if=\\\"!ctrl.bookmarks.isEmpty()\\\"> <li class=\\\"bookmark-item\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks | orderBy:'name'\\\"> <a class=\\\"link\\\" href=\\\"[[bookmark.url]]\\\" target=\\\"_blank\\\" ng-click=\\\"trackEvent($event, {detail:{'open':bookmark.url} })\\\"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size=\\\"lg\\\" visible=\\\"ctrl.display.manage\\\" on-close=\\\"ctrl.display.manage = false\\\" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class=\\\"table table-hover\\\" ng-if=\\\"ctrl.bookmarks.length !== 0\\\"> <thead> <tr class=\\\"bg-secondary text-light\\\"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class=\\\"c-pointer\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks\\\" ng-class=\\\"{ 'table-active' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }\\\"> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.name]]</td> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.url]]</td> <td ng-click=\\\"ctrl.deleteBookmark(bookmark)\\\"> <button type=\\\"button\\\" class=\\\"btn-close\\\" aria-label=\\\"Close\\\"></button> </td> </tr> </tbody> </table> <form id=\\\"formCreated\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.createdBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.createdBookmark.url\\\"/> </div> </div> </form> <form id=\\\"formEdited\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isEditingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.editedBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.editedBookmark.url\\\"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if=\\\"!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()\\\"> <button class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.newBookmark()\\\"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <button form=\\\"formCreated\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelCreate()\\\"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form=\\\"formCreated\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.createBookmark()\\\"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if=\\\"ctrl.isEditingBookmark()\\\"> <button form=\\\"formEdited\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelEdit()\\\"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form=\\\"formEdited\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.updateBookmark()\\\"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif, http, TrackedAction, TrackedScope, TrackedActionFromWidget } from \"../../utils\";\nimport { notify } from \"../../services\";\n\n\n// UTILS\nfunction isEmpty(str:string) {\n\treturn (!str || str.trim().length === 0);\n}\n\n// TYPES\ninterface IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n}\n\ninterface IBookmarkMetadata {\n\t_id:{$oid: string};\n\towner: {\n\t\t userId: string;\n\t\t displayName: string;\n\t},\n\tbookmarks: IBookmark[];\n\tmodified: {$date: number};\n\tcreated: {$date: number};\n}\n\nclass Bookmark implements IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n\n\tconstructor( model?:IBookmark ) {\n\t\tthis.name = \"\";\n\t\tthis.url = \"\";\n\t\tthis.flatCopy(model);\n\t}\n\n\tflatCopy( model?:IBookmark ):Bookmark {\n\t\tif( model ) {\n\t\t\tObject.assign(this, model);\n\t\t}\n\t\treturn this;\n\t}\n\n\tcreate():Promise<Bookmark> {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().postJson<IBookmark,IBookmark>('/bookmark', this)\n\t\t.then( response => {\n\t\t\tif( http().latestResponse.status !== 200 ) {\n\t\t\t\tthrow \"Rejected bookmark\";\n\t\t\t}\n\t\t\treturn this.flatCopy( response );\n\t\t})\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tupdate() {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().putJson(`/bookmark/${this._id}`, this)\n\t\t.then( () => this )\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tdelete() {\n\t\treturn http().delete(`/bookmark/${this._id}`)\n\t\t.then( () => this );\n\t}\n\t\n\ttoJSON() {\n\t\treturn {\n\t\t\tname : this.name,\n\t\t\turl : this.url\n\t\t};\n\t}\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tbookmarks: Bookmark[] = [];\n\tcreatedBookmark?: Bookmark;\n\teditedBookmark?: Bookmark;\n\tdisplay = {\n\t\tmanage: false,\n\t};\n\tpublic apply?:()=>void;\n\n\tpublic getBookmarks():Promise<void> {\n\t\treturn http().get<IBookmarkMetadata>('/bookmark')\n\t\t.then( response => {\n\t\t\tif(response && response.bookmarks) {\n\t\t\t\tthis.bookmarks = response.bookmarks.map( b => new Bookmark(b) );\n\t\t\t} else {\n\t\t\t\tthis.bookmarks = [];\n\t\t\t}\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\n\tcreateBookmark() {\n\t\tif( this.createdBookmark ) {\n\t\t\tthis.createdBookmark.create().then( b => {\n\t\t\t\tthis.bookmarks.push( b );\n\t\t\t\tthis.cancelCreate();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\t\n\tupdateBookmark() {\n\t\tif( this.editedBookmark ) {\n\t\t\tconst edited = this.editedBookmark;\n\t\t\tedited.update()\n\t\t\t.then( () => {\n\t\t\t\tconst aBookmark = this.bookmarks.find( pBookmark => pBookmark._id===edited._id );\n\t\t\t\taBookmark?.flatCopy( edited );\n\t\t\t\tthis.cancelEdit();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\n\tdeleteBookmark( b:Bookmark ) {\n\t\tb.delete().then( b => {\n\t\t\tlet index = this.bookmarks.indexOf(b);\n\t\t\tthis.bookmarks.splice(index, 1);\n\t\t\tthis.cancelEdit(); // just in case\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\t\n\t// Controller\n\tnewBookmark() {\n\t\tthis.createdBookmark = new Bookmark( {url: \"http://\", name:\"\"} );\n\t\tthis.cancelEdit();\n\t}\n\n\tisCreatingBookmark() {\n\t\treturn angular.isDefined(this.createdBookmark);\n\t}\n\n\tisEditingBookmark() {\n\t\treturn angular.isDefined(this.editedBookmark);\n\t}\n\t\n\teditBookmark(bookmark:IBookmark) {\n\t\tthis.editedBookmark = new Bookmark( bookmark );\n\t\tthis.cancelCreate();\n\t}\n\t\n\tcancelCreate() {\n\t\tthis.createdBookmark = undefined;\n\t}\n\n\tcancelEdit() {\n\t\tthis.editedBookmark = undefined;\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./bookmark-widget.widget.html').default;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeBookmarkWidget'];\n\n link(scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): void {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n\t\tif( ! ctrl ) return;\n\n\t\tctrl.getBookmarks().then( () => {\n\t\t\tscope.$apply();\n\t\t});\n\n\t\tctrl.apply = () => {\n\t\t\tscope.$apply();\n\t\t};\n\n\t\t// Give an opportunity to track some events from outside of this widget.\n\t\tscope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>) => {\n\t\t\t// Allow events to bubble up.\n\t\t\tif(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n\t\t\tlet event = null;\n\t\t\tif( p && typeof p.detail?.open==='string' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.bookmark, p );\n\t\t\t}\n\t\t\tif( event && e.currentTarget ) {\n\t\t\t\te.currentTarget.dispatchEvent(event);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** The bookmark-widget widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeBookmarkWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeBookmarkWidget\", DirectiveFactory );\n"],"names":["isEmpty","str","trim","length","model","this","name","url","flatCopy","Object","assign","create","notify","error","Promise","reject","http","postJson","then","response","latestResponse","status","catch","e","JSON","parse","statusText","update","putJson","_id","delete","toJSON","bookmarks","display","manage","getBookmarks","get","map","b","Bookmark","apply","createBookmark","createdBookmark","push","cancelCreate","updateBookmark","editedBookmark","aBookmark","find","pBookmark","cancelEdit","deleteBookmark","index","indexOf","splice","newBookmark","isCreatingBookmark","isDefined","isEditingBookmark","editBookmark","bookmark","undefined","restrict","template","controller","Controller","controllerAs","require","link","scope","elem","attrs","controllers","ctrl","$apply","trackEvent","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","currentTarget","dispatchEvent","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"widgets/bookmark-widget/bookmark-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/bookmark-widget/bookmark-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<div class=\\\"widget-bookmarks\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"><i18n>bookmark-widget.widget.title</i18n></div> <div class=\\\"widget-options\\\"> <div class=\\\"tools\\\"> <a href=\\\"\\\" class=\\\"tool tool-option\\\" i18n-title=\\\"bookmark-widget.widget.manage.bookmarks\\\" ng-click=\\\"ctrl.display.manage = true\\\"> <i class=\\\"fas fa-cog\\\"></i> </a> </div> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\"> <div class=\\\"widget-empty-message link\\\" ng-click=\\\"ctrl.display.manage = true\\\" ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class=\\\"bookmark-list\\\" ng-if=\\\"!ctrl.bookmarks.isEmpty()\\\"> <li class=\\\"bookmark-item\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks | orderBy:'name'\\\"> <a class=\\\"link\\\" href=\\\"[[bookmark.url]]\\\" target=\\\"_blank\\\" ng-click=\\\"trackEvent($event, {detail:{'open':bookmark.url} })\\\"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size=\\\"lg\\\" visible=\\\"ctrl.display.manage\\\" on-close=\\\"ctrl.display.manage = false\\\" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if=\\\"ctrl.bookmarks.length === 0\\\"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class=\\\"table table-hover\\\" ng-if=\\\"ctrl.bookmarks.length !== 0\\\"> <thead> <tr class=\\\"bg-secondary text-light\\\"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class=\\\"c-pointer\\\" ng-repeat=\\\"bookmark in ctrl.bookmarks\\\" ng-class=\\\"{ 'table-active' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }\\\"> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.name]]</td> <td ng-click=\\\"ctrl.editBookmark(bookmark)\\\">[[bookmark.url]]</td> <td ng-click=\\\"ctrl.deleteBookmark(bookmark)\\\"> <button type=\\\"button\\\" class=\\\"btn-close\\\" aria-label=\\\"Close\\\"></button> </td> </tr> </tbody> </table> <form id=\\\"formCreated\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.createdBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputCreatedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputCreatedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.createdBookmark.url\\\"/> </div> </div> </form> <form id=\\\"formEdited\\\" autocomplete=\\\"off\\\" class=\\\"mt-5\\\" ng-if=\\\"ctrl.isEditingBookmark()\\\"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedName\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedName\\\" class=\\\"form-control auto-focused\\\" ng-model=\\\"ctrl.editedBookmark.name\\\"/> </div> </div> <div class=\\\"form-group row mt-3\\\"> <label for=\\\"inputEditedUrl\\\" class=\\\"col-sm-2 col-form-label\\\"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class=\\\"col-sm-10\\\"> <input type=\\\"text\\\" id=\\\"inputEditedUrl\\\" class=\\\"form-control\\\" ng-model=\\\"ctrl.editedBookmark.url\\\"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if=\\\"!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()\\\"> <button class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.newBookmark()\\\"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if=\\\"ctrl.isCreatingBookmark()\\\"> <button form=\\\"formCreated\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelCreate()\\\"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form=\\\"formCreated\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.createBookmark()\\\"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if=\\\"ctrl.isEditingBookmark()\\\"> <button form=\\\"formEdited\\\" type=\\\"reset\\\" class=\\\"btn btn-light\\\" ng-click=\\\"ctrl.cancelEdit()\\\"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form=\\\"formEdited\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" ng-click=\\\"ctrl.updateBookmark()\\\"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>\";\n// Exports\nexport default code;","import angular, { IAttributes, IController, IDirective, IScope } from \"angular\";\nimport { conf, notif, http, TrackedAction, TrackedScope, TrackedActionFromWidget } from \"../../utils\";\nimport { notify } from \"../../services\";\n\n\n// UTILS\nfunction isEmpty(str:string) {\n\treturn (!str || str.trim().length === 0);\n}\n\n// TYPES\ninterface IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n}\n\ninterface IBookmarkMetadata {\n\t_id:{$oid: string};\n\towner: {\n\t\t userId: string;\n\t\t displayName: string;\n\t},\n\tbookmarks: IBookmark[];\n\tmodified: {$date: number};\n\tcreated: {$date: number};\n}\n\nclass Bookmark implements IBookmark {\n\t_id?: string;\n\tname: string;\n\turl: string;\n\n\tconstructor( model?:IBookmark ) {\n\t\tthis.name = \"\";\n\t\tthis.url = \"\";\n\t\tthis.flatCopy(model);\n\t}\n\n\tflatCopy( model?:IBookmark ):Bookmark {\n\t\tif( model ) {\n\t\t\tObject.assign(this, model);\n\t\t}\n\t\treturn this;\n\t}\n\n\tcreate():Promise<Bookmark> {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark-widget.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().postJson<IBookmark,IBookmark>('/bookmark', this)\n\t\t.then( response => {\n\t\t\tif( http().latestResponse.status !== 200 ) {\n\t\t\t\tthrow \"Rejected bookmark\";\n\t\t\t}\n\t\t\treturn this.flatCopy( response );\n\t\t})\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tupdate() {\n\t\tif (isEmpty(this.name)) {\n\t\t\tnotify.error('bookmark.widget.form.name.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tif (isEmpty(this.url)) {\n\t\t\tnotify.error('bookmark.widget.form.url.is.empty');\n\t\t\treturn Promise.reject();\n\t\t}\n\t\n\t\treturn http().putJson(`/bookmark/${this._id}`, this)\n\t\t.then( () => this )\n\t\t.catch( e => {\n\t\t\tif( http().latestResponse.status===400 ) {\n\t\t\t\tnotify.error(JSON.parse(http().latestResponse.statusText).error); // FIXME check it is working fine.\n\t\t\t}\n\t\t\tthrow e;\n\t\t});\n\t}\n\t\n\tdelete() {\n\t\treturn http().delete(`/bookmark/${this._id}`)\n\t\t.then( () => this );\n\t}\n\t\n\ttoJSON() {\n\t\treturn {\n\t\t\tname : this.name,\n\t\t\turl : this.url\n\t\t};\n\t}\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n\tbookmarks: Bookmark[] = [];\n\tcreatedBookmark?: Bookmark;\n\teditedBookmark?: Bookmark;\n\tdisplay = {\n\t\tmanage: false,\n\t};\n\tpublic apply?:()=>void;\n\n\tpublic getBookmarks():Promise<void> {\n\t\treturn http().get<IBookmarkMetadata>('/bookmark')\n\t\t.then( response => {\n\t\t\tif(response && response.bookmarks) {\n\t\t\t\tthis.bookmarks = response.bookmarks.map( b => new Bookmark(b) );\n\t\t\t} else {\n\t\t\t\tthis.bookmarks = [];\n\t\t\t}\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\n\tremoveHashStart(url: string) {\n\t\treturn url.replace('#start', '');\n\t}\n\n\tcreateBookmark() {\n\t\tif( this.createdBookmark ) {\n\t\t\tthis.createdBookmark.url = this.removeHashStart(this.createdBookmark.url);\n\t\t\tthis.createdBookmark.create().then( b => {\n\t\t\t\tthis.bookmarks.push( b );\n\t\t\t\tthis.cancelCreate();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\t\n\tupdateBookmark() {\n\t\tif( this.editedBookmark ) {\n\t\t\tthis.editedBookmark.url = this.removeHashStart(this.editedBookmark.url);\n\t\t\tconst edited = this.editedBookmark;\n\t\t\tedited.update()\n\t\t\t.then( () => {\n\t\t\t\tconst aBookmark = this.bookmarks.find( pBookmark => pBookmark._id===edited._id );\n\t\t\t\taBookmark?.flatCopy( edited );\n\t\t\t\tthis.cancelEdit();\n\t\t\t\tthis.apply && this.apply();\n\t\t\t});\n\t\t}\n\t}\n\n\t\n\n\tdeleteBookmark( b:Bookmark ) {\n\t\tb.delete().then( b => {\n\t\t\tlet index = this.bookmarks.indexOf(b);\n\t\t\tthis.bookmarks.splice(index, 1);\n\t\t\tthis.cancelEdit(); // just in case\n\t\t\tthis.apply && this.apply();\n\t\t});\n\t}\n\t\n\t// Controller\n\tnewBookmark() {\n\t\tthis.createdBookmark = new Bookmark( {url: \"http://\", name:\"\"} );\n\t\tthis.cancelEdit();\n\t}\n\n\tisCreatingBookmark() {\n\t\treturn angular.isDefined(this.createdBookmark);\n\t}\n\n\tisEditingBookmark() {\n\t\treturn angular.isDefined(this.editedBookmark);\n\t}\n\t\n\teditBookmark(bookmark:IBookmark) {\n\t\tthis.editedBookmark = new Bookmark( bookmark );\n\t\tthis.cancelCreate();\n\t}\n\t\n\tcancelCreate() {\n\t\tthis.createdBookmark = undefined;\n\t}\n\n\tcancelEdit() {\n\t\tthis.editedBookmark = undefined;\n\t}\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n\ttemplate = require('./bookmark-widget.widget.html').default;\n\tcontroller = [Controller];\n\tcontrollerAs = 'ctrl';\n\trequire = ['odeBookmarkWidget'];\n\n link(scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): void {\n const ctrl:Controller|null = controllers ? controllers[0] as Controller : null;\n\t\tif( ! ctrl ) return;\n\n\t\tctrl.getBookmarks().then( () => {\n\t\t\tscope.$apply();\n\t\t});\n\n\t\tctrl.apply = () => {\n\t\t\tscope.$apply();\n\t\t};\n\n\t\t// Give an opportunity to track some events from outside of this widget.\n\t\tscope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>) => {\n\t\t\t// Allow events to bubble up.\n\t\t\tif(typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n\t\t\tlet event = null;\n\t\t\tif( p && typeof p.detail?.open==='string' ) {\n\t\t\t\tevent = new CustomEvent( TrackedActionFromWidget.bookmark, p );\n\t\t\t}\n\t\t\tif( event && e.currentTarget ) {\n\t\t\t\te.currentTarget.dispatchEvent(event);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** The bookmark-widget widget. */\nfunction DirectiveFactory() {\n\treturn new Directive();\n}\n\n// Preload translations\nnotif().onLangReady().promise.then( lang => {\n\tswitch( lang ) {\n\t\tdefault:\tconf().Platform.idiom.addKeys( require('./i18n/fr.json') ); break;\n\t}\n});\n\n// THIS ANGULAR MODULE WILL BE DYNAMICALLY ADDED TO THE APPLICATION.\n// RESPECT THE NAMING CONVENTION BY EXPORTING THE MODULE NAME :\nexport const odeModuleName = \"odeBookmarkWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeBookmarkWidget\", DirectiveFactory );\n"],"names":["isEmpty","str","trim","length","model","this","name","url","flatCopy","Object","assign","create","notify","error","Promise","reject","http","postJson","then","response","latestResponse","status","catch","e","JSON","parse","statusText","update","putJson","_id","delete","toJSON","bookmarks","display","manage","getBookmarks","get","map","b","Bookmark","apply","removeHashStart","replace","createBookmark","createdBookmark","push","cancelCreate","updateBookmark","editedBookmark","aBookmark","find","pBookmark","cancelEdit","deleteBookmark","index","indexOf","splice","newBookmark","isCreatingBookmark","isDefined","isEditingBookmark","editBookmark","bookmark","undefined","restrict","template","controller","Controller","controllerAs","require","link","scope","elem","attrs","controllers","ctrl","$apply","trackEvent","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","currentTarget","dispatchEvent","notif","onLangReady","promise","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive","Directive"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[820],{1058:(e,t,i)=>{i.d(t,{Z:()=>n});const n='<style>.widget-mediacentre .widget-body{max-height:300px;overflow:auto}.widget-mediacentre .widget-body .empty{display:flex;align-items:center;justify-content:center;padding:8px;font-style:italic}.widget-mediacentre .widget-body .resource-list{display:flex;flex-wrap:wrap}.widget-mediacentre .widget-body .resource-list-item{position:relative;width:25%;height:150px}.widget-mediacentre .widget-body .resource-list-item a{display:flex;flex-direction:column;align-items:center;justify-content:center;transition:background-color .8s cubic-bezier(.25,.46,.45,.94);position:relative;margin:1px;padding:0 8px;color:unset;text-decoration:none;background:#fafafa;height:99%;width:auto}.widget-mediacentre .widget-body .resource-list-item a:hover{background-color:#fff;color:#ff8d2e;cursor:pointer}.widget-mediacentre .widget-body .resource-list-item .picture{height:80%;display:flex;align-items:center;justify-content:center}.widget-mediacentre .widget-body .resource-list-item .picture img{max-height:100%;max-width:100%}.widget-mediacentre .widget-body .resource-list-item .title{height:20%;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-mediacentre #universalis-container .widget-body{padding:10px 0}.widget-mediacentre #universalis-container .widget-empty-message{display:flex;align-items:center;justify-content:space-between;padding:12px}.widget-mediacentre #universalis-container .widget-empty-message:first-child,.widget-mediacentre #universalis-container form{max-height:40px}.widget-mediacentre #universalis-container .widget-empty-message form *,.widget-mediacentre #universalis-container .widget-empty-message:first-child *{max-height:inherit}.widget-mediacentre #universalis-container img{width:auto}.widget-mediacentre #universalis-container form{width:90%}.widget-mediacentre #universalis-container form .input-group input#inputUniversalisQ{height:30px}.widget-mediacentre #universalis-container form .input-group button{padding:0 8px}</style> <div class="widget-mediacentre"> <div class="widget-header"> <div class="subtitle"> <a class="seemore" href="/mediacentre" i18n-title="mediacentre.widget.more" dnd-nodrag ng-click="trackEvent($event, {detail:{\'open\':\'more\'} })"> <i18n>mediacentre.widget.title</i18n> <span class="seemore-text"><i18n>mediacentre.widget.more</i18n></span> </a> </div> <div class="widget-options"> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body" dnd-nodrag> <ul class="resource-list" ng-if="ctrl.resources.length > 0"> <li class="resource-list-item" ng-repeat="resource in ctrl.resources" title="[[resource.title]]"> <a ng-href="[[resource.link]]"> <div class="picture"><img skin-src="[[resource.image]]" alt="[[resource.title]]"/></div> <div class="title">[[resource.title]]</div> </a> </li> </ul> <div class="empty" ng-if="ctrl.resources.length <= 0"> <i18n>mediacentre.widget.empty</i18n> </div> </div> <div class="widget-footer border-top border-ghost" ng-if="ctrl.hasUniversalis"> <div id="universalis-container"> <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/mediacentre-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 class="row row-cols-1 align-items-center"> <label class="sr-only" for="inputUniversalisQ" translate content="{{ctrl.selectedSchool.UAI == null ? \'mediacentre.widget.universalis.no.uai\' : \'mediacentre.widget.universalis.search\'}}"></label> <div class="input-group mb-2"> <input type="text" id="inputUniversalisQ" class="form-control" name="q" maxlen gth="255" i18n-placeholder="{{ctrl.selectedSchool.UAI == null ? \'mediacentre.widget.universalis.no.uai\' : \'mediacentre.widget.universalis.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> </div> </div> </div>'},5116:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function o(e){try{c(n.next(e))}catch(e){s(e)}}function a(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}c((n=n.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var i,n,r,s,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,n&&(r=2&s[0]?n.return:s[0]?n.throw||((r=n.return)&&r.call(n),0):n.next)&&!(r=r.call(n,s[1])).done)return r;switch(n=0,r&&(s=[2&s[0],r.value]),s[0]){case 0:case 1:r=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,n=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!(r=o.trys,(r=r.length>0&&r[r.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]<r[3])){o.label=s[1];break}if(6===s[0]&&o.label<r[1]){o.label=r[1],r=s;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(s);break}r[2]&&o.ops.pop(),o.trys.pop();continue}s=t.call(e,o)}catch(e){s=[6,e],n=0}finally{i=r=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var o=s(i(4202)),a=i(9419),c=i(5262),l=function(){function e(){var e=this;this.resources=[],this.limitResources=4,this.hasUniversalis=!1,this.initResources=function(){return n(e,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return[4,this.initResourcesFavorites()];case 1:return e.sent(),[4,this.initSignetFavorites()];case 2:return e.sent(),[4,this.hasUniversalisResource()];case 3:return e.sent(),this.resources.length>this.limitResources&&(this.resources=this.resources.slice(0,this.limitResources)),[2]}}))}))},this.fetchFavorites=function(t){return n(e,void 0,void 0,(function(){var e,i,n;return r(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,(0,a.http)().get(t)];case 1:return"ok"===(e=r.sent()).status&&e&&e.data&&e.data.length>0&&(i=e.data,this.resources=this.resources.concat(i)),[3,3];case 2:throw n=r.sent(),console.warn("[widget.mediacentre] Failed to fetch favorites : ",n),n;case 3:return[2]}}))}))},this.initResourcesFavorites=function(){return n(e,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.fetchFavorites("/mediacentre/favorites")];case 1:return t.sent(),[3,3];case 2:throw e=t.sent(),console.warn("[widget.mediacentre] Failed to initResourcesFavorites : ",e),e;case 3:return[2]}}))}))},this.initSignetFavorites=function(){return n(e,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.fetchFavorites("/mediacentre/signets/favorites")];case 1:return t.sent(),[3,3];case 2:throw e=t.sent(),console.warn("[widget.mediacentre] Failed to initSignetFavorites : ",e),e;case 3:return[2]}}))}))},this.hasUniversalisResource=function(){return n(e,void 0,void 0,(function(){var e,t;return r(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,(0,a.http)().get("/mediacentre/resource/universalis")];case 1:return e=i.sent(),this.hasUniversalis=!!e,[3,3];case 2:throw t=i.sent(),console.warn("[widget.mediacentre] Failed to check exitence of universalis resource: ",t),t;case 3:return[2]}}))}))}}return Object.defineProperty(e.prototype,"description",{get:function(){return(0,a.session)().description},enumerable:!1,configurable:!0}),e.prototype.initializeUniversalis=function(){var e,t;return n(this,void 0,void 0,(function(){var i,n=this;return r(this,(function(r){switch(r.label){case 0:return this.hasUniversalis?(this._userPref=null===(e=c.WidgetFrameworkFactory.instance().list.find((function(e){return e.platformConf.name===c.WIDGET_NAME.MEDIACENTRE})))||void 0===e?void 0:e.userPref,[4,(0,a.notif)().onSessionReady().promise]):[2];case 1:return r.sent(),i=0,(null===(t=this._userPref)||void 0===t?void 0:t.schoolId)&&o.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}(),d=function(){function e(e){this.$compile=e,this.restrict="E",this.template=i(1058).Z,this.scope={},this.bindToController=!0,this.controller=[l],this.controllerAs="ctrl",this.require=["odeMediacentreWidget"]}return e.prototype.link=function(e,t,i,s){return n(this,void 0,void 0,(function(){var t;return r(this,(function(i){switch(i.label){case 0:return(t=s?s[0]:null)?[4,t.initResources()]:[2];case 1:return i.sent(),[4,t.initializeUniversalis()];case 2:return i.sent(),e.$apply(),e.trackEvent=function(e,t){var i;void 0===t.bubbles&&(t.bubbles=!0);var n=null;t&&"more"===(null===(i=t.detail)||void 0===i?void 0:i.open)&&(n=new CustomEvent(a.TrackedActionFromWidget.mediacentre,t)),n&&e.currentTarget&&e.currentTarget.dispatchEvent(n)},[2]}}))}))},e}();function u(e){return new d(e)}u.$inject=["$compile"],(0,a.notif)().onLangReady().promise.then((function(e){(0,a.conf)().Platform.idiom.addKeys(i(3948))})),t.odeModuleName="odeMediacentreWidgetModule",o.default.module(t.odeModuleName,[]).directive("odeMediacentreWidget",u)},3948:e=>{e.exports=JSON.parse('{"mediacentre-widget":"Mes favoris Médiacentre","mediacentre.widget.title":"Mes favoris Médiacentre","mediacentre.widget.more":"voir plus","mediacentre.widget.empty":"Aucune ressource favorite","mediacentre.widget.universalis.no.uai":"UAI non renseigné","mediacentre.widget.universalis.search":"Rechercher dans Universalis"}')}}]);
|
|
1
|
+
"use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[820],{1058:(e,t,i)=>{i.d(t,{Z:()=>n});const n='<style>.widget-mediacentre .widget-body{max-height:300px;overflow:auto}.widget-mediacentre .widget-body .empty{display:flex;align-items:center;justify-content:center;padding:8px;font-style:italic}.widget-mediacentre .widget-body .resource-list{display:flex;flex-wrap:wrap}.widget-mediacentre .widget-body .resource-list-item{position:relative;width:25%;height:150px}.widget-mediacentre .widget-body .resource-list-item a{display:flex;flex-direction:column;align-items:center;justify-content:center;transition:background-color .8s cubic-bezier(.25,.46,.45,.94);position:relative;margin:1px;padding:0 8px;color:unset;text-decoration:none;background:#fafafa;height:99%;width:auto}.widget-mediacentre .widget-body .resource-list-item a:hover{background-color:#fff;color:#ff8d2e;cursor:pointer}.widget-mediacentre .widget-body .resource-list-item .picture{height:80%;display:flex;align-items:center;justify-content:center}.widget-mediacentre .widget-body .resource-list-item .picture img{max-height:100%;max-width:100%}.widget-mediacentre .widget-body .resource-list-item .title{height:20%;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-mediacentre #universalis-container .widget-body{padding:10px 0}.widget-mediacentre #universalis-container .widget-empty-message{display:flex;align-items:center;justify-content:space-between;padding:12px}.widget-mediacentre #universalis-container .widget-empty-message:first-child,.widget-mediacentre #universalis-container form{max-height:40px}.widget-mediacentre #universalis-container .widget-empty-message form *,.widget-mediacentre #universalis-container .widget-empty-message:first-child *{max-height:inherit}.widget-mediacentre #universalis-container img{width:auto}.widget-mediacentre #universalis-container form{width:90%}.widget-mediacentre #universalis-container form .input-group input#inputUniversalisQ{height:30px}.widget-mediacentre #universalis-container form .input-group button{padding:0 8px}</style> <div class="widget-mediacentre"> <div class="widget-header"> <div class="subtitle"> <a class="seemore" href="/mediacentre" i18n-title="mediacentre.widget.more" dnd-nodrag ng-click="trackEvent($event, {detail:{\'open\':\'more\'} })"> <i18n>mediacentre.widget.title</i18n> <span class="seemore-text"><i18n>mediacentre.widget.more</i18n></span> </a> </div> <div class="widget-options"> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body" dnd-nodrag> <ul class="resource-list" ng-if="ctrl.resources.length > 0"> <li class="resource-list-item" ng-repeat="resource in ctrl.resources" title="[[resource.title]]"> <a ng-href="[[resource.link]]" target="_blank"> <div class="picture"><img skin-src="[[resource.image]]" alt="[[resource.title]]"/></div> <div class="title">[[resource.title]]</div> </a> </li> </ul> <div class="empty" ng-if="ctrl.resources.length <= 0"> <i18n>mediacentre.widget.empty</i18n> </div> </div> <div class="widget-footer border-top border-ghost" ng-if="ctrl.hasUniversalis"> <div id="universalis-container"> <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/mediacentre-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 class="row row-cols-1 align-items-center"> <label class="sr-only" for="inputUniversalisQ" translate content="{{ctrl.selectedSchool.UAI == null ? \'mediacentre.widget.universalis.no.uai\' : \'mediacentre.widget.universalis.search\'}}"></label> <div class="input-group mb-2"> <input type="text" id="inputUniversalisQ" class="form-control" name="q" maxlen gth="255" i18n-placeholder="{{ctrl.selectedSchool.UAI == null ? \'mediacentre.widget.universalis.no.uai\' : \'mediacentre.widget.universalis.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> </div> </div> </div>'},5116:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(r,s){function o(e){try{c(n.next(e))}catch(e){s(e)}}function a(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}c((n=n.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var i,n,r,s,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,n&&(r=2&s[0]?n.return:s[0]?n.throw||((r=n.return)&&r.call(n),0):n.next)&&!(r=r.call(n,s[1])).done)return r;switch(n=0,r&&(s=[2&s[0],r.value]),s[0]){case 0:case 1:r=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,n=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!(r=o.trys,(r=r.length>0&&r[r.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]<r[3])){o.label=s[1];break}if(6===s[0]&&o.label<r[1]){o.label=r[1],r=s;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(s);break}r[2]&&o.ops.pop(),o.trys.pop();continue}s=t.call(e,o)}catch(e){s=[6,e],n=0}finally{i=r=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.odeModuleName=void 0;var o=s(i(4202)),a=i(9419),c=i(5262),l=function(){function e(){var e=this;this.resources=[],this.limitResources=4,this.hasUniversalis=!1,this.initResources=function(){return n(e,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return[4,this.initResourcesFavorites()];case 1:return e.sent(),[4,this.initSignetFavorites()];case 2:return e.sent(),[4,this.hasUniversalisResource()];case 3:return e.sent(),this.resources.length>this.limitResources&&(this.resources=this.resources.slice(0,this.limitResources)),[2]}}))}))},this.fetchFavorites=function(t){return n(e,void 0,void 0,(function(){var e,i,n;return r(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,(0,a.http)().get(t)];case 1:return"ok"===(e=r.sent()).status&&e&&e.data&&e.data.length>0&&(i=e.data,this.resources=this.resources.concat(i)),[3,3];case 2:throw n=r.sent(),console.warn("[widget.mediacentre] Failed to fetch favorites : ",n),n;case 3:return[2]}}))}))},this.initResourcesFavorites=function(){return n(e,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.fetchFavorites("/mediacentre/favorites")];case 1:return t.sent(),[3,3];case 2:throw e=t.sent(),console.warn("[widget.mediacentre] Failed to initResourcesFavorites : ",e),e;case 3:return[2]}}))}))},this.initSignetFavorites=function(){return n(e,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this.fetchFavorites("/mediacentre/signets/favorites")];case 1:return t.sent(),[3,3];case 2:throw e=t.sent(),console.warn("[widget.mediacentre] Failed to initSignetFavorites : ",e),e;case 3:return[2]}}))}))},this.hasUniversalisResource=function(){return n(e,void 0,void 0,(function(){var e,t;return r(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,(0,a.http)().get("/mediacentre/resource/universalis")];case 1:return e=i.sent(),this.hasUniversalis=!!e,[3,3];case 2:throw t=i.sent(),console.warn("[widget.mediacentre] Failed to check exitence of universalis resource: ",t),t;case 3:return[2]}}))}))}}return Object.defineProperty(e.prototype,"description",{get:function(){return(0,a.session)().description},enumerable:!1,configurable:!0}),e.prototype.initializeUniversalis=function(){var e,t;return n(this,void 0,void 0,(function(){var i,n=this;return r(this,(function(r){switch(r.label){case 0:return this.hasUniversalis?(this._userPref=null===(e=c.WidgetFrameworkFactory.instance().list.find((function(e){return e.platformConf.name===c.WIDGET_NAME.MEDIACENTRE})))||void 0===e?void 0:e.userPref,[4,(0,a.notif)().onSessionReady().promise]):[2];case 1:return r.sent(),i=0,(null===(t=this._userPref)||void 0===t?void 0:t.schoolId)&&o.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}(),d=function(){function e(e){this.$compile=e,this.restrict="E",this.template=i(1058).Z,this.scope={},this.bindToController=!0,this.controller=[l],this.controllerAs="ctrl",this.require=["odeMediacentreWidget"]}return e.prototype.link=function(e,t,i,s){return n(this,void 0,void 0,(function(){var t;return r(this,(function(i){switch(i.label){case 0:return(t=s?s[0]:null)?[4,t.initResources()]:[2];case 1:return i.sent(),[4,t.initializeUniversalis()];case 2:return i.sent(),e.$apply(),e.trackEvent=function(e,t){var i;void 0===t.bubbles&&(t.bubbles=!0);var n=null;t&&"more"===(null===(i=t.detail)||void 0===i?void 0:i.open)&&(n=new CustomEvent(a.TrackedActionFromWidget.mediacentre,t)),n&&e.currentTarget&&e.currentTarget.dispatchEvent(n)},[2]}}))}))},e}();function u(e){return new d(e)}u.$inject=["$compile"],(0,a.notif)().onLangReady().promise.then((function(e){(0,a.conf)().Platform.idiom.addKeys(i(3948))})),t.odeModuleName="odeMediacentreWidgetModule",o.default.module(t.odeModuleName,[]).directive("odeMediacentreWidget",u)},3948:e=>{e.exports=JSON.parse('{"mediacentre-widget":"Mes favoris Médiacentre","mediacentre.widget.title":"Mes favoris Médiacentre","mediacentre.widget.more":"voir plus","mediacentre.widget.empty":"Aucune ressource favorite","mediacentre.widget.universalis.no.uai":"UAI non renseigné","mediacentre.widget.universalis.search":"Rechercher dans Universalis"}')}}]);
|
|
2
2
|
//# sourceMappingURL=mediacentre-widget.widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets/mediacentre-widget/mediacentre-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/mediacentre-widget/mediacentre-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/mediacentre-widget/mediacentre-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<style>.widget-mediacentre .widget-body{max-height:300px;overflow:auto}.widget-mediacentre .widget-body .empty{display:flex;align-items:center;justify-content:center;padding:8px;font-style:italic}.widget-mediacentre .widget-body .resource-list{display:flex;flex-wrap:wrap}.widget-mediacentre .widget-body .resource-list-item{position:relative;width:25%;height:150px}.widget-mediacentre .widget-body .resource-list-item a{display:flex;flex-direction:column;align-items:center;justify-content:center;transition:background-color .8s cubic-bezier(.25,.46,.45,.94);position:relative;margin:1px;padding:0 8px;color:unset;text-decoration:none;background:#fafafa;height:99%;width:auto}.widget-mediacentre .widget-body .resource-list-item a:hover{background-color:#fff;color:#ff8d2e;cursor:pointer}.widget-mediacentre .widget-body .resource-list-item .picture{height:80%;display:flex;align-items:center;justify-content:center}.widget-mediacentre .widget-body .resource-list-item .picture img{max-height:100%;max-width:100%}.widget-mediacentre .widget-body .resource-list-item .title{height:20%;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-mediacentre #universalis-container .widget-body{padding:10px 0}.widget-mediacentre #universalis-container .widget-empty-message{display:flex;align-items:center;justify-content:space-between;padding:12px}.widget-mediacentre #universalis-container .widget-empty-message:first-child,.widget-mediacentre #universalis-container form{max-height:40px}.widget-mediacentre #universalis-container .widget-empty-message form *,.widget-mediacentre #universalis-container .widget-empty-message:first-child *{max-height:inherit}.widget-mediacentre #universalis-container img{width:auto}.widget-mediacentre #universalis-container form{width:90%}.widget-mediacentre #universalis-container form .input-group input#inputUniversalisQ{height:30px}.widget-mediacentre #universalis-container form .input-group button{padding:0 8px}</style> <div class=\\\"widget-mediacentre\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"> <a class=\\\"seemore\\\" href=\\\"/mediacentre\\\" i18n-title=\\\"mediacentre.widget.more\\\" dnd-nodrag ng-click=\\\"trackEvent($event, {detail:{'open':'more'} })\\\"> <i18n>mediacentre.widget.title</i18n> <span class=\\\"seemore-text\\\"><i18n>mediacentre.widget.more</i18n></span> </a> </div> <div class=\\\"widget-options\\\"> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\" dnd-nodrag> <ul class=\\\"resource-list\\\" ng-if=\\\"ctrl.resources.length > 0\\\"> <li class=\\\"resource-list-item\\\" ng-repeat=\\\"resource in ctrl.resources\\\" title=\\\"[[resource.title]]\\\"> <a ng-href=\\\"[[resource.link]]\\\"> <div class=\\\"picture\\\"><img skin-src=\\\"[[resource.image]]\\\" alt=\\\"[[resource.title]]\\\"/></div> <div class=\\\"title\\\">[[resource.title]]</div> </a> </li> </ul> <div class=\\\"empty\\\" ng-if=\\\"ctrl.resources.length <= 0\\\"> <i18n>mediacentre.widget.empty</i18n> </div> </div> <div class=\\\"widget-footer border-top border-ghost\\\" ng-if=\\\"ctrl.hasUniversalis\\\"> <div id=\\\"universalis-container\\\"> <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/mediacentre-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 class=\\\"row row-cols-1 align-items-center\\\"> <label class=\\\"sr-only\\\" for=\\\"inputUniversalisQ\\\" translate content=\\\"{{ctrl.selectedSchool.UAI == null ? 'mediacentre.widget.universalis.no.uai' : 'mediacentre.widget.universalis.search'}}\\\"></label> <div class=\\\"input-group mb-2\\\"> <input type=\\\"text\\\" id=\\\"inputUniversalisQ\\\" class=\\\"form-control\\\" name=\\\"q\\\" maxlen gth=\\\"255\\\" i18n-placeholder=\\\"{{ctrl.selectedSchool.UAI == null ? 'mediacentre.widget.universalis.no.uai' : 'mediacentre.widget.universalis.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> </div> </div> </div>\";\n// Exports\nexport default code;","import angular, {IAttributes, ICompileService, IController, IDirective} from \"angular\";\nimport {conf, notif, TrackedScope, TrackedAction, TrackedActionFromWidget, http, session} from \"../../utils\";\nimport {IUserDescription, School, WIDGET_NAME, WidgetFrameworkFactory, WidgetUserPref} from \"ode-ts-client\";\n\ntype Resource = {\n authors: string[];\n date: number;\n description: string;\n disciplines: string[];\n displayTitle: string;\n document_types: string[];\n editors: string[];\n hash: number;\n id: string;\n favorite?: boolean;\n image: string;\n levels: string[];\n link: string;\n plain_text: string[];\n source: string;\n title: string;\n action: object;\n structure_name: string;\n structure_uai: string;\n display_structure_name?: boolean;\n _id?: string;\n\n user?: string;\n favoriteId?: string;\n}\n\ntype Response = {\n data: Resource[];\n event: string;\n state: string;\n status: string;\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n private resources: Resource[] = [];\n private limitResources: number = 4; // limit of resources to display\n public hasUniversalis: boolean = false;\n\n public initResources = async(): Promise<void> => {\n await this.initResourcesFavorites();\n await this.initSignetFavorites();\n await this.hasUniversalisResource();\n if (this.resources.length > this.limitResources) this.resources = this.resources.slice(0, this.limitResources);\n }\n\n private fetchFavorites = async (apiUrl: string): Promise<void> => {\n try {\n let response: Response = await http().get<Response>(apiUrl);\n if (response.status === \"ok\" && response && response.data && response.data.length > 0) {\n let favoriteResources: Resource[] = response.data as Resource[];\n this.resources = this.resources.concat(favoriteResources);\n }\n } catch (e) {\n console.warn(`[widget.mediacentre] Failed to fetch favorites : `, e);\n throw e;\n }\n }\n\n private initResourcesFavorites = async(): Promise<void> => {\n try {\n await this.fetchFavorites('/mediacentre/favorites');\n } catch (e) {\n console.warn(\"[widget.mediacentre] Failed to initResourcesFavorites : \", e);\n throw e;\n }\n }\n\n private initSignetFavorites = async(): Promise<void> => {\n try {\n await this.fetchFavorites('/mediacentre/signets/favorites');\n } catch (e) {\n console.warn(\"[widget.mediacentre] Failed to initSignetFavorites : \", e);\n throw e;\n }\n }\n\n private hasUniversalisResource = async(): Promise<void> => {\n try {\n let universalisResource: Resource = await http().get<Resource>('/mediacentre/resource/universalis');\n this.hasUniversalis = !!universalisResource;\n } catch (e) {\n console.warn(\"[widget.mediacentre] Failed to check exitence of universalis resource: \", e);\n throw e;\n }\n }\n\n\n // Universalis\n\n private _userPref?:WidgetUserPref;\n private selectedSchool?:School;\n\n protected get description():IUserDescription {\n return session().description;\n }\n\n public async initializeUniversalis() {\n if (!this.hasUniversalis) return;\n\n this._userPref = WidgetFrameworkFactory.instance().list.find( w => w.platformConf.name===WIDGET_NAME.MEDIACENTRE)?.userPref;\n await notif().onSessionReady().promise;\n\n let defaultIndex = 0;\n if( this._userPref?.schoolId && angular.isArray(this.description.schools) ) {\n defaultIndex = this.description.schools.findIndex( school => school.id===this._userPref?.schoolId );\n if( defaultIndex < 0 ) {\n defaultIndex = 0;\n }\n }\n this.setSelectedSchool( defaultIndex );\n }\n\n private setSelectedSchool( idx:number ):boolean {\n if( 0 <= idx && idx < this.description.schools.length && this.selectedSchool !== this.description.schools[idx]) {\n this.selectedSchool = this.description.schools[idx];\n return true;\n }\n return false;\n }\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n template = require('./mediacentre-widget.widget.html').default;\n scope = {};\n bindToController = true;\n controller = [Controller];\n controllerAs = 'ctrl';\n require = ['odeMediacentreWidget'];\n\n async link (scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): Promise<void> {\n const ctrl: Controller|null = controllers ? controllers[0] as Controller : null;\n if (!ctrl) return;\n\n await ctrl.initResources(); // Init Mediacentre resources\n await ctrl.initializeUniversalis(); // Init Universalis search bar\n scope.$apply();\n\n // Give an opportunity to track some events from outside of this widget.\n scope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>): void => {\n // Allow events to bubble up.\n if (typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n let event = null;\n if (p && p.detail?.open === 'more') {\n event = new CustomEvent( TrackedActionFromWidget.mediacentre, p );\n }\n if (event && e.currentTarget) {\n e.currentTarget.dispatchEvent(event);\n }\n }\n }\n\n constructor (private $compile: ICompileService) { }\n}\n\n/** The mediacentre widget. */\nfunction DirectiveFactory($compile:ICompileService) {\n return new Directive($compile);\n}\nDirectiveFactory.$inject = [\"$compile\"];\n\n// Preload translations\nnotif().onLangReady().promise.then((lang: any): void => {\n switch (lang) {\n default:\tconf().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 = \"odeMediacentreWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeMediacentreWidget\", DirectiveFactory );\n"],"names":["resources","limitResources","hasUniversalis","initResources","this","initResourcesFavorites","initSignetFavorites","hasUniversalisResource","length","slice","fetchFavorites","apiUrl","http","get","response","status","data","favoriteResources","concat","console","warn","universalisResource","session","description","initializeUniversalis","_userPref","WidgetFrameworkFactory","instance","list","find","w","platformConf","name","WIDGET_NAME","MEDIACENTRE","userPref","notif","onSessionReady","promise","defaultIndex","schoolId","isArray","schools","findIndex","school","id","setSelectedSchool","idx","selectedSchool","$compile","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","trackEvent","e","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","mediacentre","currentTarget","dispatchEvent","DirectiveFactory","Directive","$inject","onLangReady","then","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"widgets/mediacentre-widget/mediacentre-widget.widget.js","mappings":"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","sources":["webpack://ode-ngjs-front/./src/ts/widgets/mediacentre-widget/mediacentre-widget.widget.html","webpack://ode-ngjs-front/./src/ts/widgets/mediacentre-widget/mediacentre-widget.widget.ts"],"sourcesContent":["// Module\nvar code = \"<style>.widget-mediacentre .widget-body{max-height:300px;overflow:auto}.widget-mediacentre .widget-body .empty{display:flex;align-items:center;justify-content:center;padding:8px;font-style:italic}.widget-mediacentre .widget-body .resource-list{display:flex;flex-wrap:wrap}.widget-mediacentre .widget-body .resource-list-item{position:relative;width:25%;height:150px}.widget-mediacentre .widget-body .resource-list-item a{display:flex;flex-direction:column;align-items:center;justify-content:center;transition:background-color .8s cubic-bezier(.25,.46,.45,.94);position:relative;margin:1px;padding:0 8px;color:unset;text-decoration:none;background:#fafafa;height:99%;width:auto}.widget-mediacentre .widget-body .resource-list-item a:hover{background-color:#fff;color:#ff8d2e;cursor:pointer}.widget-mediacentre .widget-body .resource-list-item .picture{height:80%;display:flex;align-items:center;justify-content:center}.widget-mediacentre .widget-body .resource-list-item .picture img{max-height:100%;max-width:100%}.widget-mediacentre .widget-body .resource-list-item .title{height:20%;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-mediacentre #universalis-container .widget-body{padding:10px 0}.widget-mediacentre #universalis-container .widget-empty-message{display:flex;align-items:center;justify-content:space-between;padding:12px}.widget-mediacentre #universalis-container .widget-empty-message:first-child,.widget-mediacentre #universalis-container form{max-height:40px}.widget-mediacentre #universalis-container .widget-empty-message form *,.widget-mediacentre #universalis-container .widget-empty-message:first-child *{max-height:inherit}.widget-mediacentre #universalis-container img{width:auto}.widget-mediacentre #universalis-container form{width:90%}.widget-mediacentre #universalis-container form .input-group input#inputUniversalisQ{height:30px}.widget-mediacentre #universalis-container form .input-group button{padding:0 8px}</style> <div class=\\\"widget-mediacentre\\\"> <div class=\\\"widget-header\\\"> <div class=\\\"subtitle\\\"> <a class=\\\"seemore\\\" href=\\\"/mediacentre\\\" i18n-title=\\\"mediacentre.widget.more\\\" dnd-nodrag ng-click=\\\"trackEvent($event, {detail:{'open':'more'} })\\\"> <i18n>mediacentre.widget.title</i18n> <span class=\\\"seemore-text\\\"><i18n>mediacentre.widget.more</i18n></span> </a> </div> <div class=\\\"widget-options\\\"> <div class=\\\"widget-handle\\\" title=\\\"Déplacer le widget\\\"><i class=\\\"fas fa-grip-vertical\\\" aria-hidden=\\\"true\\\"></i></div> </div> </div> <div class=\\\"widget-body\\\" dnd-nodrag> <ul class=\\\"resource-list\\\" ng-if=\\\"ctrl.resources.length > 0\\\"> <li class=\\\"resource-list-item\\\" ng-repeat=\\\"resource in ctrl.resources\\\" title=\\\"[[resource.title]]\\\"> <a ng-href=\\\"[[resource.link]]\\\" target=\\\"_blank\\\"> <div class=\\\"picture\\\"><img skin-src=\\\"[[resource.image]]\\\" alt=\\\"[[resource.title]]\\\"/></div> <div class=\\\"title\\\">[[resource.title]]</div> </a> </li> </ul> <div class=\\\"empty\\\" ng-if=\\\"ctrl.resources.length <= 0\\\"> <i18n>mediacentre.widget.empty</i18n> </div> </div> <div class=\\\"widget-footer border-top border-ghost\\\" ng-if=\\\"ctrl.hasUniversalis\\\"> <div id=\\\"universalis-container\\\"> <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/mediacentre-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 class=\\\"row row-cols-1 align-items-center\\\"> <label class=\\\"sr-only\\\" for=\\\"inputUniversalisQ\\\" translate content=\\\"{{ctrl.selectedSchool.UAI == null ? 'mediacentre.widget.universalis.no.uai' : 'mediacentre.widget.universalis.search'}}\\\"></label> <div class=\\\"input-group mb-2\\\"> <input type=\\\"text\\\" id=\\\"inputUniversalisQ\\\" class=\\\"form-control\\\" name=\\\"q\\\" maxlen gth=\\\"255\\\" i18n-placeholder=\\\"{{ctrl.selectedSchool.UAI == null ? 'mediacentre.widget.universalis.no.uai' : 'mediacentre.widget.universalis.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> </div> </div> </div>\";\n// Exports\nexport default code;","import angular, {IAttributes, ICompileService, IController, IDirective} from \"angular\";\nimport {conf, notif, TrackedScope, TrackedAction, TrackedActionFromWidget, http, session} from \"../../utils\";\nimport {IUserDescription, School, WIDGET_NAME, WidgetFrameworkFactory, WidgetUserPref} from \"ode-ts-client\";\n\ntype Resource = {\n authors: string[];\n date: number;\n description: string;\n disciplines: string[];\n displayTitle: string;\n document_types: string[];\n editors: string[];\n hash: number;\n id: string;\n favorite?: boolean;\n image: string;\n levels: string[];\n link: string;\n plain_text: string[];\n source: string;\n title: string;\n action: object;\n structure_name: string;\n structure_uai: string;\n display_structure_name?: boolean;\n _id?: string;\n\n user?: string;\n favoriteId?: string;\n}\n\ntype Response = {\n data: Resource[];\n event: string;\n state: string;\n status: string;\n}\n\n/* Controller for the directive */\nclass Controller implements IController {\n private resources: Resource[] = [];\n private limitResources: number = 4; // limit of resources to display\n public hasUniversalis: boolean = false;\n\n public initResources = async(): Promise<void> => {\n await this.initResourcesFavorites();\n await this.initSignetFavorites();\n await this.hasUniversalisResource();\n if (this.resources.length > this.limitResources) this.resources = this.resources.slice(0, this.limitResources);\n }\n\n private fetchFavorites = async (apiUrl: string): Promise<void> => {\n try {\n let response: Response = await http().get<Response>(apiUrl);\n if (response.status === \"ok\" && response && response.data && response.data.length > 0) {\n let favoriteResources: Resource[] = response.data as Resource[];\n this.resources = this.resources.concat(favoriteResources);\n }\n } catch (e) {\n console.warn(`[widget.mediacentre] Failed to fetch favorites : `, e);\n throw e;\n }\n }\n\n private initResourcesFavorites = async(): Promise<void> => {\n try {\n await this.fetchFavorites('/mediacentre/favorites');\n } catch (e) {\n console.warn(\"[widget.mediacentre] Failed to initResourcesFavorites : \", e);\n throw e;\n }\n }\n\n private initSignetFavorites = async(): Promise<void> => {\n try {\n await this.fetchFavorites('/mediacentre/signets/favorites');\n } catch (e) {\n console.warn(\"[widget.mediacentre] Failed to initSignetFavorites : \", e);\n throw e;\n }\n }\n\n private hasUniversalisResource = async(): Promise<void> => {\n try {\n let universalisResource: Resource = await http().get<Resource>('/mediacentre/resource/universalis');\n this.hasUniversalis = !!universalisResource;\n } catch (e) {\n console.warn(\"[widget.mediacentre] Failed to check exitence of universalis resource: \", e);\n throw e;\n }\n }\n\n\n // Universalis\n\n private _userPref?:WidgetUserPref;\n private selectedSchool?:School;\n\n protected get description():IUserDescription {\n return session().description;\n }\n\n public async initializeUniversalis() {\n if (!this.hasUniversalis) return;\n\n this._userPref = WidgetFrameworkFactory.instance().list.find( w => w.platformConf.name===WIDGET_NAME.MEDIACENTRE)?.userPref;\n await notif().onSessionReady().promise;\n\n let defaultIndex = 0;\n if( this._userPref?.schoolId && angular.isArray(this.description.schools) ) {\n defaultIndex = this.description.schools.findIndex( school => school.id===this._userPref?.schoolId );\n if( defaultIndex < 0 ) {\n defaultIndex = 0;\n }\n }\n this.setSelectedSchool( defaultIndex );\n }\n\n private setSelectedSchool( idx:number ):boolean {\n if( 0 <= idx && idx < this.description.schools.length && this.selectedSchool !== this.description.schools[idx]) {\n this.selectedSchool = this.description.schools[idx];\n return true;\n }\n return false;\n }\n}\n\n/* Directive */\nclass Directive implements IDirective<TrackedScope,JQLite,IAttributes,IController[]> {\n restrict = 'E';\n template = require('./mediacentre-widget.widget.html').default;\n scope = {};\n bindToController = true;\n controller = [Controller];\n controllerAs = 'ctrl';\n require = ['odeMediacentreWidget'];\n\n async link (scope:TrackedScope, elem:JQLite, attrs:IAttributes, controllers?:IController[]): Promise<void> {\n const ctrl: Controller|null = controllers ? controllers[0] as Controller : null;\n if (!ctrl) return;\n\n await ctrl.initResources(); // Init Mediacentre resources\n await ctrl.initializeUniversalis(); // Init Universalis search bar\n scope.$apply();\n\n // Give an opportunity to track some events from outside of this widget.\n scope.trackEvent = (e:Event, p:CustomEventInit<TrackedAction>): void => {\n // Allow events to bubble up.\n if (typeof p.bubbles === \"undefined\") p.bubbles = true;\n\n let event = null;\n if (p && p.detail?.open === 'more') {\n event = new CustomEvent( TrackedActionFromWidget.mediacentre, p );\n }\n if (event && e.currentTarget) {\n e.currentTarget.dispatchEvent(event);\n }\n }\n }\n\n constructor (private $compile: ICompileService) { }\n}\n\n/** The mediacentre widget. */\nfunction DirectiveFactory($compile:ICompileService) {\n return new Directive($compile);\n}\nDirectiveFactory.$inject = [\"$compile\"];\n\n// Preload translations\nnotif().onLangReady().promise.then((lang: any): void => {\n switch (lang) {\n default:\tconf().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 = \"odeMediacentreWidgetModule\";\nangular.module( odeModuleName, []).directive( \"odeMediacentreWidget\", DirectiveFactory );\n"],"names":["resources","limitResources","hasUniversalis","initResources","this","initResourcesFavorites","initSignetFavorites","hasUniversalisResource","length","slice","fetchFavorites","apiUrl","http","get","response","status","data","favoriteResources","concat","console","warn","universalisResource","session","description","initializeUniversalis","_userPref","WidgetFrameworkFactory","instance","list","find","w","platformConf","name","WIDGET_NAME","MEDIACENTRE","userPref","notif","onSessionReady","promise","defaultIndex","schoolId","isArray","schools","findIndex","school","id","setSelectedSchool","idx","selectedSchool","$compile","restrict","template","scope","bindToController","controller","Controller","controllerAs","require","link","elem","attrs","controllers","ctrl","$apply","trackEvent","e","p","bubbles","event","detail","open","CustomEvent","TrackedActionFromWidget","mediacentre","currentTarget","dispatchEvent","DirectiveFactory","Directive","$inject","onLangReady","then","lang","conf","Platform","idiom","addKeys","odeModuleName","module","directive"],"sourceRoot":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ode-ngjs-front",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.8-develop-pedago.202503111026",
|
|
4
4
|
"description": "Open Digital Education Frontend Framework",
|
|
5
5
|
"homepage": "https://github.com/opendigitaleducation/ode-ngjs-front#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"karma-chrome-launcher": "3.1.0",
|
|
53
53
|
"karma-jasmine": "4.0.1",
|
|
54
54
|
"moment-locales-webpack-plugin": "~1.2.0",
|
|
55
|
-
"ode-ts-client": "
|
|
55
|
+
"ode-ts-client": "develop-pedago",
|
|
56
56
|
"terser-webpack-plugin": "5.1.4",
|
|
57
57
|
"ts-loader": "8.0.18",
|
|
58
58
|
"typescript": "4.6.4",
|