ode-ngjs-front 1.4.9 → 1.4.10-develop-b2school.202504161056

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.
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.directive.d.ts","sourceRoot":"","sources":["../../../../../src/ts/directives/business/portal/navbar.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAuB,aAAa,EAAyC,MAAM,gBAAgB,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIxF,qBAAa,UAAW,YAAW,WAAW;IAErC,OAAO,EAAC,cAAc;IACtB,SAAS,EAAE,eAAe;IAC1B,QAAQ,EAAC,kBAAkB;gBAF3B,OAAO,EAAC,cAAc,EACtB,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAC,kBAAkB;IAE5B,IAAI,CAAC,EAAC,MAAM,CAAC;IACb,qBAAqB,CAAC,EAAC,MAAM,CAAC;IAC9B,eAAe,EAAC,MAAM,CAAM;IAC5B,QAAQ,EAAC,MAAM,CAAM;IACrB,MAAM,EAAC,MAAM,CAAmB;IAChC,cAAc,EAAC,MAAM,CAAoB;IACzC,QAAQ,EAAC,MAAM,CAAM;IACrB,IAAI,EAAC,OAAO,EAAE,CAAM;IAEpB,IAAI,EAAC,OAAO,CAAS;IACrB,IAAI,EAAC,OAAO,CAAS;IAE5B,aAAa;IAKb,QAAQ,CAAC,KAAK,EAAC,GAAG;IAOlB,YAAY,CAAC,KAAK,EAAC,KAAK,EAAE,IAAI,EAAC,MAAM;IAarC,YAAY,CAAC,GAAG,EAAC,OAAO;IAMrB,SAAS,CAAC,UAAU,CAAC,CAAC,EAAC,KAAK,EAAE,CAAC,EAAC,eAAe,CAAC,aAAa,CAAC;CASjE;AAMD,UAAU,KAAM,SAAQ,MAAM;IAC7B,IAAI,CAAC,EAAC,MAAM,CAAC;IACb,aAAa,CAAC,EAAC,MAAM,CAAC;IACtB,OAAO,CAAC,EAAC,MAAM,CAAC;IAChB,EAAE,CAAC,EAAC;QACH,WAAW,CAAC,KAAK,EAAC,MAAM,GAAE,OAAO,CAAC;KAClC,CAAC;IAEF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAGD,cAAM,SAAU,YAAW,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,WAAW,EAAC,WAAW,EAAE,CAAC;IACzE,QAAQ,SAAO;IAElB,QAAQ,MAA8C;IACtD,KAAK;;MAEH;IACF,gBAAgB,UAAQ;IACxB,UAAU,iCAA6E;IACvF,YAAY,SAAU;IACtB,OAAO,WAAiB;IAErB,IAAI,CAAC,KAAK,EAAC,KAAK,EAAE,IAAI,EAAC,MAAM,EAAE,KAAK,EAAC,WAAW,EAAE,WAAW,CAAC,EAAC,WAAW,EAAE,GAAG,IAAI;CA2EtF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,cAE/B"}
1
+ {"version":3,"file":"navbar.directive.d.ts","sourceRoot":"","sources":["../../../../../src/ts/directives/business/portal/navbar.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAIL,aAAa,EAGd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,UAAW,YAAW,WAAW;IAEnC,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,eAAe;IAC1B,QAAQ,EAAE,kBAAkB;gBAF5B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,kBAAkB;IAE9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAM;IAC7B,QAAQ,EAAE,MAAM,CAAM;IACtB,MAAM,EAAE,MAAM,CAAmB;IACjC,cAAc,EAAE,MAAM,CAAoB;IAC1C,QAAQ,EAAE,MAAM,CAAM;IACtB,IAAI,EAAE,OAAO,EAAE,CAAM;IAErB,IAAI,EAAE,OAAO,CAAS;IACtB,IAAI,EAAE,OAAO,CAAS;IAE7B,aAAa;IAKb,QAAQ,CAAC,KAAK,EAAE,GAAG;IAOnB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM;IAevC,YAAY,CAAC,GAAG,EAAE,OAAO;IAMzB,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC;CASjE;AAMD,UAAU,KAAM,SAAQ,MAAM;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE;QACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;KACrC,CAAC;IAEF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAGD,cAAM,SACJ,YAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IAEhE,QAAQ,SAAO;IAEf,QAAQ,MAA8C;IACtD,KAAK;;MAEH;IACF,gBAAgB,UAAQ;IACxB,UAAU,iCAKR;IACF,YAAY,SAAU;IACtB,OAAO,WAAiB;IAExB,IAAI,CACF,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,EAClB,WAAW,CAAC,EAAE,WAAW,EAAE,GAC1B,IAAI;CAoGR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,cAE/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"bookmark-widget.widget.d.ts","sourceRoot":"","sources":["../../../../src/ts/widgets/bookmark-widget/bookmark-widget.widget.ts"],"names":[],"mappings":"AA4OA,eAAO,MAAM,aAAa,4BAA4B,CAAC"}
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 03/03/2025 11:03:46
1
+ ode-ngjs-front 16/04/2025 10:57:20
@@ -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:()=>i});const i='<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 i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.odeModuleName=void 0;var r=i(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.createBookmark=function(){var t=this;this.createdBookmark&&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){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 r.default.isDefined(this.createdBookmark)},t.prototype.isEditingBookmark=function(){return r.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,i){var r=i?i[0]:null;r&&(r.getBookmarks().then((function(){t.$apply()})),r.apply=function(){t.$apply()},t.trackEvent=function(t,e){var o;void 0===e.bubbles&&(e.bubbles=!0);var i=null;e&&"string"==typeof(null===(o=e.detail)||void 0===o?void 0:o.open)&&(i=new CustomEvent(a.TrackedActionFromWidget.bookmark,e)),i&&t.currentTarget&&t.currentTarget.dispatchEvent(i)})},t}();(0,a.notif)().onLangReady().promise.then((function(t){(0,a.conf)().Platform.idiom.addKeys(o(2731))})),e.odeModuleName="odeBookmarkWidgetModule",r.default.module(e.odeModuleName,[]).directive("odeBookmarkWidget",(function(){return new m}))},2731:t=>{t.exports=JSON.parse('{"bookmark-widget.widget.title":"Liens utiles","bookmark-widget":"Liens utiles","bookmark-widget.widget.createform.cancel":"Annuler","bookmark-widget.widget.createform.name":"Nom","bookmark-widget.widget.createform.save":"Enregistrer","bookmark-widget.widget.createform.title":"Nouveau lien utile","bookmark-widget.widget.createform.url":"Adresse","bookmark-widget.widget.edit.bookmark":"Mettre à jour le lien utile","bookmark-widget.widget.editform.cancel":"Annuler","bookmark-widget.widget.editform.name":"Nom","bookmark-widget.widget.editform.save":"Enregistrer","bookmark-widget.widget.editform.url":"Adresse","bookmark-widget.widget.empty":"Gardez à portée de main les sites web que vous utilisez souvent.","bookmark-widget.widget.form.name.is.empty":"Le champ \'nom\' est obligatoire","bookmark-widget.widget.form.url.is.empty":"Le champ \'adresse\' est obligatoire","bookmark-widget.widget.manage.empty":"Aucun lien utile","bookmark-widget.widget.manage.bookmarks":"Gérer les liens utiles","bookmark-widget.widget.manage.title":"Gérer les liens utiles","bookmark-widget.widget.managetable.name":"Nom","bookmark-widget.widget.managetable.url":"Adresse","bookmark-widget.widget.new.bookmark":"Nouveau lien utile"}')}}]);
1
+ "use strict";(self.webpackChunkode_ngjs_front=self.webpackChunkode_ngjs_front||[]).push([[364],{7562:(t,e,o)=>{o.d(e,{Z:()=>r});const r='<div class="widget-bookmarks"> <div class="widget-header"> <div class="subtitle"><i18n>bookmark-widget.widget.title</i18n></div> <div class="widget-options"> <div class="tools"> <a href="" class="tool tool-option" i18n-title="bookmark-widget.widget.manage.bookmarks" ng-click="ctrl.display.manage = true"> <i class="fas fa-cog"></i> </a> </div> <div class="widget-handle" title="Déplacer le widget"><i class="fas fa-grip-vertical" aria-hidden="true"></i></div> </div> </div> <div class="widget-body"> <div class="widget-empty-message link" ng-click="ctrl.display.manage = true" ng-if="ctrl.bookmarks.length === 0"> <i18n>bookmark-widget.widget.empty</i18n> </div> <ul class="bookmark-list" ng-if="!ctrl.bookmarks.isEmpty()"> <li class="bookmark-item" ng-repeat="bookmark in ctrl.bookmarks | orderBy:\'name\'"> <a class="link" href="[[bookmark.url]]" target="_blank" ng-click="trackEvent($event, {detail:{\'open\':bookmark.url} })"> [[bookmark.name]] </a> </li> </ul> </div> </div> <ode-modal size="lg" visible="ctrl.display.manage" on-close="ctrl.display.manage = false" dnd-nodrag> <ode-modal-title> <i18n>bookmark-widget.widget.manage.title</i18n> </ode-modal-title> <ode-modal-body> <div ng-if="ctrl.bookmarks.length === 0"> <p><i18n>bookmark-widget.widget.manage.empty</i18n></p> </div> <table class="table table-hover" ng-if="ctrl.bookmarks.length !== 0"> <thead> <tr class="bg-secondary text-light"> <th><i18n>bookmark-widget.widget.managetable.name</i18n></th> <th><i18n>bookmark-widget.widget.managetable.url</i18n></th> <th></th> </tr> </thead> <tbody> <tr class="c-pointer" ng-repeat="bookmark in ctrl.bookmarks" ng-class="{ \'table-active\' : ctrl.editedBookmark && bookmark._id === ctrl.editedBookmark._id }"> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.name]]</td> <td ng-click="ctrl.editBookmark(bookmark)">[[bookmark.url]]</td> <td ng-click="ctrl.deleteBookmark(bookmark)"> <button type="button" class="btn-close" aria-label="Close"></button> </td> </tr> </tbody> </table> <form id="formCreated" autocomplete="off" class="mt-5" ng-if="ctrl.isCreatingBookmark()"> <h3><i18n>bookmark-widget.widget.createform.title</i18n></h3> <div class="form-group row mt-3"> <label for="inputCreatedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedName" class="form-control auto-focused" ng-model="ctrl.createdBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputCreatedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.createform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputCreatedUrl" class="form-control" ng-model="ctrl.createdBookmark.url"/> </div> </div> </form> <form id="formEdited" autocomplete="off" class="mt-5" ng-if="ctrl.isEditingBookmark()"> <h3><i18n>bookmark-widget.widget.edit.bookmark</i18n></h3> <div class="form-group row mt-3"> <label for="inputEditedName" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.name</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedName" class="form-control auto-focused" ng-model="ctrl.editedBookmark.name"/> </div> </div> <div class="form-group row mt-3"> <label for="inputEditedUrl" class="col-sm-2 col-form-label"><i18n>bookmark-widget.widget.editform.url</i18n></label> <div class="col-sm-10"> <input type="text" id="inputEditedUrl" class="form-control" ng-model="ctrl.editedBookmark.url"/> </div> </div> </form> </ode-modal-body> <ode-modal-footer> <div ng-if="!ctrl.isCreatingBookmark() && !ctrl.isEditingBookmark()"> <button class="btn btn-primary" ng-click="ctrl.newBookmark()"><i18n>bookmark-widget.widget.new.bookmark</i18n></button> </div> <div ng-if="ctrl.isCreatingBookmark()"> <button form="formCreated" type="reset" class="btn btn-light" ng-click="ctrl.cancelCreate()"> <i18n>bookmark-widget.widget.createform.cancel</i18n> </button> <button form="formCreated" type="submit" class="btn btn-primary" ng-click="ctrl.createBookmark()"> <i18n>bookmark-widget.widget.createform.save</i18n> </button> </div> <div ng-if="ctrl.isEditingBookmark()"> <button form="formEdited" type="reset" class="btn btn-light" ng-click="ctrl.cancelEdit()"> <i18n>bookmark-widget.widget.editform.cancel</i18n> </button> <button form="formEdited" type="submit" class="btn btn-primary" ng-click="ctrl.updateBookmark()"> <i18n>bookmark-widget.widget.editform.save</i18n> </button> </div> </ode-modal-footer> </ode-modal>'},9278:function(t,e,o){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.odeModuleName=void 0;var i=r(o(4202)),a=o(9419),n=o(6731);function d(t){return!t||0===t.trim().length}var l=function(){function t(t){this.name="",this.url="",this.flatCopy(t)}return t.prototype.flatCopy=function(t){return t&&Object.assign(this,t),this},t.prototype.create=function(){var t=this;return d(this.name)?(n.notify.error("bookmark-widget.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark-widget.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().postJson("/bookmark",this).then((function(e){if(200!==(0,a.http)().latestResponse.status)throw"Rejected bookmark";return t.flatCopy(e)})).catch((function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t}))},t.prototype.update=function(){var t=this;return d(this.name)?(n.notify.error("bookmark.widget.form.name.is.empty"),Promise.reject()):d(this.url)?(n.notify.error("bookmark.widget.form.url.is.empty"),Promise.reject()):(0,a.http)().putJson("/bookmark/".concat(this._id),this).then((function(){return t})).catch((function(t){throw 400===(0,a.http)().latestResponse.status&&n.notify.error(JSON.parse((0,a.http)().latestResponse.statusText).error),t}))},t.prototype.delete=function(){var t=this;return(0,a.http)().delete("/bookmark/".concat(this._id)).then((function(){return t}))},t.prototype.toJSON=function(){return{name:this.name,url:this.url}},t}(),s=function(){function t(){this.bookmarks=[],this.display={manage:!1}}return t.prototype.getBookmarks=function(){var t=this;return(0,a.http)().get("/bookmark").then((function(e){e&&e.bookmarks?t.bookmarks=e.bookmarks.map((function(t){return new l(t)})):t.bookmarks=[],t.apply&&t.apply()}))},t.prototype.removeHashStart=function(t){return t.replace("#start","")},t.prototype.createBookmark=function(){var t=this;this.createdBookmark&&(this.createdBookmark.url=this.removeHashStart(this.createdBookmark.url),this.createdBookmark.create().then((function(e){t.bookmarks.push(e),t.cancelCreate(),t.apply&&t.apply()})))},t.prototype.updateBookmark=function(){var t=this;if(this.editedBookmark){this.editedBookmark.url=this.removeHashStart(this.editedBookmark.url);var e=this.editedBookmark;e.update().then((function(){var o=t.bookmarks.find((function(t){return t._id===e._id}));null==o||o.flatCopy(e),t.cancelEdit(),t.apply&&t.apply()}))}},t.prototype.deleteBookmark=function(t){var e=this;t.delete().then((function(t){var o=e.bookmarks.indexOf(t);e.bookmarks.splice(o,1),e.cancelEdit(),e.apply&&e.apply()}))},t.prototype.newBookmark=function(){this.createdBookmark=new l({url:"http://",name:""}),this.cancelEdit()},t.prototype.isCreatingBookmark=function(){return i.default.isDefined(this.createdBookmark)},t.prototype.isEditingBookmark=function(){return i.default.isDefined(this.editedBookmark)},t.prototype.editBookmark=function(t){this.editedBookmark=new l(t),this.cancelCreate()},t.prototype.cancelCreate=function(){this.createdBookmark=void 0},t.prototype.cancelEdit=function(){this.editedBookmark=void 0},t}(),m=function(){function t(){this.restrict="E",this.template=o(7562).Z,this.controller=[s],this.controllerAs="ctrl",this.require=["odeBookmarkWidget"]}return t.prototype.link=function(t,e,o,r){var i=r?r[0]:null;i&&(i.getBookmarks().then((function(){t.$apply()})),i.apply=function(){t.$apply()},t.trackEvent=function(t,e){var o;void 0===e.bubbles&&(e.bubbles=!0);var r=null;e&&"string"==typeof(null===(o=e.detail)||void 0===o?void 0:o.open)&&(r=new CustomEvent(a.TrackedActionFromWidget.bookmark,e)),r&&t.currentTarget&&t.currentTarget.dispatchEvent(r)})},t}();(0,a.notif)().onLangReady().promise.then((function(t){(0,a.conf)().Platform.idiom.addKeys(o(2731))})),e.odeModuleName="odeBookmarkWidgetModule",i.default.module(e.odeModuleName,[]).directive("odeBookmarkWidget",(function(){return new m}))},2731:t=>{t.exports=JSON.parse('{"bookmark-widget.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":"gIAGA,QAFW,44I,mLCDX,iBACA,UACA,UAIA,SAASA,EAAQC,GAChB,OAASA,GAA6B,IAAtBA,EAAIC,OAAOC,MAC5B,CAoBA,iBAKC,WAAaC,GACZC,KAAKC,KAAO,GACZD,KAAKE,IAAM,GACXF,KAAKG,SAASJ,EACf,CAiED,OA/DC,YAAAI,SAAA,SAAUJ,GAIT,OAHIA,GACHK,OAAOC,OAAOL,KAAMD,GAEdC,IACR,EAEA,YAAAM,OAAA,sBACC,OAAIX,EAAQK,KAAKC,OAChB,EAAAM,OAAOC,MAAM,6CACNC,QAAQC,UAEZf,EAAQK,KAAKE,MAChB,EAAAK,OAAOC,MAAM,4CACNC,QAAQC,WAGT,IAAAC,QAAOC,SAA8B,YAAaZ,MACxDa,MAAM,SAAAC,GACN,GAAqC,OAAjC,IAAAH,QAAOI,eAAeC,OACzB,KAAM,oBAEP,OAAO,EAAKb,SAAUW,EACvB,IACCG,OAAO,SAAAC,GAIP,MAHmC,OAA/B,IAAAP,QAAOI,eAAeC,QACzB,EAAAT,OAAOC,MAAMW,KAAKC,OAAM,IAAAT,QAAOI,eAAeM,YAAYb,OAErDU,CACP,GACD,EAEA,YAAAI,OAAA,sBACC,OAAI3B,EAAQK,KAAKC,OAChB,EAAAM,OAAOC,MAAM,sCACNC,QAAQC,UAEZf,EAAQK,KAAKE,MAChB,EAAAK,OAAOC,MAAM,qCACNC,QAAQC,WAGT,IAAAC,QAAOY,QAAQ,oBAAavB,KAAKwB,KAAOxB,MAC9Ca,MAAM,WAAM,YACZI,OAAO,SAAAC,GAIP,MAHmC,OAA/B,IAAAP,QAAOI,eAAeC,QACzB,EAAAT,OAAOC,MAAMW,KAAKC,OAAM,IAAAT,QAAOI,eAAeM,YAAYb,OAErDU,CACP,GACD,EAEA,YAAAO,OAAA,sBACC,OAAO,IAAAd,QAAOc,OAAO,oBAAazB,KAAKwB,MACtCX,MAAM,WAAM,WACd,EAEA,YAAAa,OAAA,WACC,MAAO,CACNzB,KAAOD,KAAKC,KACZC,IAAMF,KAAKE,IAEb,EACD,EA1EA,GA6EA,0BACC,KAAAyB,UAAwB,GAGxB,KAAAC,QAAU,CACTC,QAAQ,EAkFV,QA9EQ,YAAAC,aAAP,sBACC,OAAO,IAAAnB,QAAOoB,IAAuB,aACpClB,MAAM,SAAAC,GACHA,GAAYA,EAASa,UACvB,EAAKA,UAAYb,EAASa,UAAUK,KAAK,SAAAC,GAAK,WAAIC,EAASD,EAAb,IAE9C,EAAKN,UAAY,GAElB,EAAKQ,OAAS,EAAKA,OACpB,GACD,EAEA,YAAAC,gBAAA,SAAgBlC,GACf,OAAOA,EAAImC,QAAQ,SAAU,GAC9B,EAEA,YAAAC,eAAA,sBACKtC,KAAKuC,kBACRvC,KAAKuC,gBAAgBrC,IAAMF,KAAKoC,gBAAgBpC,KAAKuC,gBAAgBrC,KACrEF,KAAKuC,gBAAgBjC,SAASO,MAAM,SAAAoB,GACnC,EAAKN,UAAUa,KAAMP,GACrB,EAAKQ,eACL,EAAKN,OAAS,EAAKA,OACpB,IAEF,EAEA,YAAAO,eAAA,sBACC,GAAI1C,KAAK2C,eAAiB,CACzB3C,KAAK2C,eAAezC,IAAMF,KAAKoC,gBAAgBpC,KAAK2C,eAAezC,KACnE,IAAM,EAASF,KAAK2C,eACpB,EAAOrB,SACNT,MAAM,WACN,IAAM+B,EAAY,EAAKjB,UAAUkB,MAAM,SAAAC,GAAa,OAAAA,EAAUtB,MAAM,EAAOA,GAAvB,IACpDoB,SAAAA,EAAWzC,SAAU,GACrB,EAAK4C,aACL,EAAKZ,OAAS,EAAKA,OACpB,G,CAEF,EAIA,YAAAa,eAAA,SAAgBf,GAAhB,WACCA,EAAER,SAASZ,MAAM,SAAAoB,GAChB,IAAIgB,EAAQ,EAAKtB,UAAUuB,QAAQjB,GACnC,EAAKN,UAAUwB,OAAOF,EAAO,GAC7B,EAAKF,aACL,EAAKZ,OAAS,EAAKA,OACpB,GACD,EAGA,YAAAiB,YAAA,WACCpD,KAAKuC,gBAAkB,IAAIL,EAAU,CAAChC,IAAK,UAAWD,KAAK,KAC3DD,KAAK+C,YACN,EAEA,YAAAM,mBAAA,WACC,OAAO,UAAQC,UAAUtD,KAAKuC,gBAC/B,EAEA,YAAAgB,kBAAA,WACC,OAAO,UAAQD,UAAUtD,KAAK2C,eAC/B,EAEA,YAAAa,aAAA,SAAaC,GACZzD,KAAK2C,eAAiB,IAAIT,EAAUuB,GACpCzD,KAAKyC,cACN,EAEA,YAAAA,aAAA,WACCzC,KAAKuC,qBAAkBmB,CACxB,EAEA,YAAAX,WAAA,WACC/C,KAAK2C,oBAAiBe,CACvB,EACD,EAvFA,GA0FA,0BACI,KAAAC,SAAW,IACd,KAAAC,SAAW,UACX,KAAAC,WAAa,CAACC,GACd,KAAAC,aAAe,OACf,KAAAC,QAAU,CAAC,oBA4BZ,QA1BI,YAAAC,KAAA,SAAKC,EAAoBC,EAAaC,EAAmBC,GACrD,IAAMC,EAAuBD,EAAcA,EAAY,GAAmB,KAC1EC,IAENA,EAAKxC,eAAejB,MAAM,WACzBqD,EAAMK,QACP,IAEAD,EAAKnC,MAAQ,WACZ+B,EAAMK,QACP,EAGAL,EAAMM,WAAa,SAACtD,EAASuD,G,WAEJ,IAAdA,EAAEC,UAAyBD,EAAEC,SAAU,GAEjD,IAAIC,EAAQ,KACRF,GAA6B,iBAAT,QAAR,EAAAA,EAAEG,cAAM,eAAEC,QACzBF,EAAQ,IAAIG,YAAa,EAAAC,wBAAwBtB,SAAUgB,IAExDE,GAASzD,EAAE8D,eACd9D,EAAE8D,cAAcC,cAAcN,EAEhC,EACD,EACD,EAjCA,IAyCA,IAAAO,SAAQC,cAAcC,QAAQvE,MAAM,SAAAwE,IAEzB,IAAAC,QAAOC,SAASC,MAAMC,QAAS,EAAQ,MAElD,IAIa,EAAAC,cAAgB,0BAC7B,UAAQC,OAAQ,EAAAD,cAAe,IAAIE,UAAW,qBAd9C,WACC,OAAO,IAAIC,CACZ,G","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":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ode-ngjs-front",
3
- "version": "1.4.9",
3
+ "version": "1.4.10-develop-b2school.202504161056",
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": "1.2.2",
55
+ "ode-ts-client": "develop-b2school",
56
56
  "terser-webpack-plugin": "5.1.4",
57
57
  "ts-loader": "8.0.18",
58
58
  "typescript": "4.6.4",