@edifice.io/client 2.0.1-develop-hotfix.1736784778762 → 2.0.1-develop-hotfix.1736853217107

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
- var T=Object.defineProperty;var D=(E,f,R)=>f in E?T(E,f,{enumerable:!0,configurable:!0,writable:!0,value:R}):E[f]=R;var a=(E,f,R)=>D(E,typeof f!="symbol"?f+"":f,R);this["@edifice"]=this["@edifice"]||{};this["@edifice"]["io/client"]=function(exports,axios,utilities){"use strict";const ReactionTypes=["REACTION_1","REACTION_2","REACTION_3","REACTION_4"],ERROR_CODE={SUCCESS:"0000",UNKNOWN:"0010",NOT_INITIALIZED:"0020",NOT_SUPPORTED:"0030",APP_NOT_FOUND:"0040",AGENT_NOT_FOUND:"0050",TRANSPORT_ERROR:"0060",TIME_OUT:"0070",MALFORMED_DATA:"0080",NOT_LOGGED_IN:"0090"},APP$2={ADMIN:"admin",ARCHIVE:"archive",AUTH:"auth",CAS:"cas",COMMUNICATION:"communication",CONVERSATION:"conversation",DIRECTORY:"directory",USERBOOK:"userbook",INFRA:"infra",PORTAL:"portal",TIMELINE:"timeline",WORKSPACE:"workspace",EXPLORER:"explorer",HOMEWORKS:"homeworks",VIDEO:"video",MINDMAP:"mindmap",SCRAPBOOK:"scrapbook",COLLABORATIVEWALL:"collaborativewall",WIKI:"wiki"},USER_PREFS={APPS:"apps",WIDGETS:"widgets",LANGUAGE:"language",AUTH_CONNECTOR_ACCESSED:"authenticatedConnectorsAccessed",CURSUS:"cursus",INFOTIP:"infotip",RGPD_COOKIES:"rgpdCookies"};class ServiceRegistry extends Map{register({application:e,resourceType:t},s){this.set(`${e}:main`,s),this.set(`${e}:${t}`,s)}findService(e,t){return this.lookupService(e,t)}findMainService({application:e},t){return this.lookupService({application:e,resourceType:"main"},t)}isRegistered({application:e,resourceType:t}){return this.get(`${e}:${t}`)!==void 0}lookupService({application:e,resourceType:t},s){const r=this.get(`${e}:${t}`);if(r===void 0)throw`Service not found: ${e}:${t}`;return r(s)}}const E=class E{constructor(e){a(this,"checkHttpResponse",e=>{if(this.http.latestResponse.status>=300)throw this.http.latestResponse.statusText;return e});this.context=e}get http(){return this.context.http()}async copy(e){const t=await this.http.post("/archive/duplicate",{application:e.application,resourceId:e.resourceId});return this.checkHttpResponse(t)}async publish(e){const t=new FormData;return t.append("title",e.title),t.append("cover",e.cover),t.append("coverName",e.cover.name),t.append("coverType",e.cover.type),t.append("teacherAvatar",e.teacherAvatar),t.append("teacherAvatarName",e.teacherAvatar.name||`teacherAvatar_${e.userId}`),t.append("teacherAvatarType",e.teacherAvatar.type),t.append("language",e.language),e.activityType.forEach(i=>{t.append("activityType[]",i)}),e.subjectArea.forEach(i=>{t.append("subjectArea[]",i)}),e.age.forEach(i=>{t.append("age[]",i.toString())}),t.append("description",e.description),e.keyWords.split(",").forEach(i=>{t.append("keyWords[]",i.trim())}),t.append("licence",e.licence),t.append("pdfUri",`${window.location.origin}${this.getPrintUrl(e.resourceEntId)}`),t.append("application",e.application?e.application:""),t.append("resourceId",e.resourceId),t.append("teacherSchool",e.userStructureName),await this.http.post("/appregistry/library/resource",t,{headers:{"Content-Type":"multipart/form-data"}})}async createContext(e){const t=await this.http.get("/explorer/context",{queryParams:this.toQueryParams(e)});return this.checkHttpResponse(t)}async searchContext(e){const t=await this.http.get("/explorer/resources",{queryParams:this.toQueryParams(e)});return this.checkHttpResponse(t)}async searchResource(e){const t=await this.http.get(`/explorer/resources/${e.id}`,{queryParams:this.getResourceParams(e)});return this.checkHttpResponse(t)}async createFolder(e){const t=await this.http.post("/explorer/folders",this.createFolderToBodyParams(e));return this.checkHttpResponse(t)}async updateFolder(e){const t=await this.http.put(`/explorer/folders/${e.folderId}`,this.createFolderToBodyParams(e));return this.checkHttpResponse(t)}async moveToFolder(e,t=!1){e.resourceIds=t?await this.mapAssetIdToIds({application:e.application,assetIds:e.resourceIds}):e.resourceIds;const s=await this.http.post(`/explorer/folders/${e.folderId}/move`,this.moveToBodyParams(e));return this.checkHttpResponse(s)}async listSubfolders(e){const t=await this.http.get(`/explorer/folders/${e}`);return this.checkHttpResponse(t)}async deleteAll(e,t=!1){e.resourceIds=t?await this.mapAssetIdToIds({application:e.application,assetIds:e.resourceIds}):e.resourceIds;const s=await this.http.deleteJson("/explorer",e);return this.checkHttpResponse(s)}async trashAll({resourceType:e,...t},s=!1){t.resourceIds=s?await this.mapAssetIdToIds({application:t.application,assetIds:t.resourceIds}):t.resourceIds;const r=await this.http.putJson("/explorer/trash",t);return this.checkHttpResponse(r)}async restoreAll({resourceType:e,...t},s=!1){t.resourceIds=s?await this.mapAssetIdToIds({application:t.application,assetIds:t.resourceIds}):t.resourceIds;const r=await this.http.putJson("/explorer/restore",t);return this.checkHttpResponse(r)}async mapAssetIdToIds({application:e,assetIds:t}){const s=await this.searchContext({application:e,pagination:{startIdx:0,pageSize:t.length+1},types:[],filters:{},asset_id:t});return t.map(r=>{const i=s.resources.find(o=>o.assetId===r);if(i===void 0)throw"explorer.assetid.notfound";return i.id})}async getThumbnailPath(e){if(typeof e>"u")return e;if(typeof e=="string")if(e.startsWith("blob:")){const t=await fetch(e).then(r=>r.blob());return`/workspace/document/${(await this.context.workspace().saveFile(t,{visibility:"protected",application:this.getApplication()}))._id}`}else return e;else return`/workspace/document/${(await this.context.workspace().saveFile(e,{visibility:"protected",application:this.getApplication()}))._id}`}toQueryParams(e){const t={application:e.application,start_idx:e.pagination.startIdx,page_size:e.pagination.pageSize,trashed:e.trashed};if(e.types.length>0&&(t.resource_type=e.types[0]),e.orders&&Object.entries(e.orders).length){const[[s,r]]=Object.entries(e.orders);t.order_by=`${s}:${r}`}return e.filters&&Object.assign(t,e.filters),typeof e.search=="string"&&(t.search=e.search),typeof e.asset_id<"u"&&(t.asset_id=[...e.asset_id]),typeof e.id<"u"&&(t.id=e.id),t}getResourceParams(e){return{application:e.application}}createFolderToBodyParams(e){return{application:e.application,resourceType:e.type,parentId:e.parentId,name:e.name}}moveToBodyParams(e){return{application:e.application,resourceType:this.getResourceType(),resourceIds:e.resourceIds,folderIds:e.folderIds}}};a(E,"registry",new ServiceRegistry),a(E,"register",E.registry.register.bind(E.registry)),a(E,"findService",E.registry.findService.bind(E.registry)),a(E,"findMainService",E.registry.findMainService.bind(E.registry)),a(E,"isRegistered",E.registry.isRegistered.bind(E.registry));let ResourceService=E;const APP$1="scrapbook",RESOURCE$1="scrapbook";class ScrapbookResourceService extends ResourceService{create(e){throw new Error("Method not implemented.")}async update(e){const t=await this.getThumbnailPath(e.thumbnail),s=await this.http.put(`/scrapbook/${e.entId}`,{trashed:e.trashed?1:0,title:e.name,icon:t,subTitle:e.description});return this.checkHttpResponse(s),{thumbnail:t,entId:e.entId}}getResourceType(){return RESOURCE$1}getApplication(){return APP$1}getFormUrl(e){return e?`/scrapbook?folderid=${e}#/create-scrapbook/`:"/scrapbook#/create-scrapbook/"}getViewUrl(e){return`/scrapbook#/view-scrapbook/${e}`}getPrintUrl(e){return`/scrapbook/print#/print-scrapbook/${e}`}getEditUrl(e){return`/scrapbook#/edit-scrapbook/${e}`}getExportUrl(e){return`/scrapbook/exportHtml/${e}`}}ResourceService.register({application:RESOURCE$1,resourceType:RESOURCE$1},n=>new ScrapbookResourceService(n));const APP="homeworks",RESOURCE="homeworks";class HomeworksResourceService extends ResourceService{async create(e){const t=await this.getThumbnailPath(e.thumbnail),s=await this.http.post("/homeworks",{title:e.name,thumbnail:t,description:e.description,repeats:e.repeats});return this.checkHttpResponse(s),{thumbnail:t,entId:s._id}}async update(e){const t=await this.getThumbnailPath(e.thumbnail),s=await this.http.put(`/homeworks/${e.entId}`,{title:e.name,thumbnail:t,repeats:e.repeats});return this.checkHttpResponse(s),{thumbnail:t,entId:e.entId}}getResourceType(){return RESOURCE}getApplication(){return APP}getFormUrl(e){return e?`/homeworks?folderid=${e}#/create-homeworks/`:"/homeworks#/create-homeworks/"}getViewUrl(e){return`/homeworks#/view-homeworks/${e}`}getPrintUrl(e){return`/homeworks/print#/print-homeworks/${e}`}getEditUrl(e){return`/homeworks#/edit-homeworks/${e}`}getExportUrl(){throw new Error("Export not implemented.")}}ResourceService.register({application:RESOURCE,resourceType:RESOURCE},n=>new HomeworksResourceService(n));let ATTag;class AnalyticsService{constructor(n){this.context=n}get conf(){return this.context.conf()}get http(){return this.context.http()}get session(){return this.context.session()}async trackPageLoad(n,e){const[t]=await Promise.all([this.getXitiConfig(e.name.toLowerCase()),this.loadXitiScript()]);if(!t||!ATInternet)return;let s=t.LIBELLE_SERVICE.default||null;for(const r in t.LIBELLE_SERVICE)if(r!=="default"&&n.indexOf(r)>=0){s=t.LIBELLE_SERVICE[r];break}ATTag=new ATInternet.Tracker.Tag({site:t.STRUCT_ID}),ATTag.setProps({SERVICE:s,TYPE:t.TYPE,OUTIL:t.OUTIL,UAI:t.STRUCT_UAI,PROJET:t.PROJET,EXPLOITANT:t.EXPLOITANT,PLATEFORME:t.PLATFORME,PROFIL:t.PROFILE},!0),ATTag.identifiedVisitor.set({id:t.ID_PERSO,category:t.PROFILE}),ATTag.page.set({name:(e==null?void 0:e.prefix)==="userbook"?"directory":e==null?void 0:e.prefix,chapter1:"",chapter2:"",chapter3:"",level2:t.STRUCT_UAI}),ATTag.dispatch()}async getXitiConfig(n){const[e,t]=await Promise.all([this.http.get("/analyticsConf"),this.http.get("/xiti/config")]);if(!(e!=null&&e.type))throw ERROR_CODE.MALFORMED_DATA;return t!=null&&t.active&&(e.xiti=await this.getXitiTrackingParams(t,n)),e.xiti}async loadXitiScript(){if(typeof ATInternet>"u"){const scriptPath="/xiti/public/js/lib/smarttag_ENT.js",response=await this.http.get(scriptPath,{headers:{Accept:"application/javascript"}});if(this.http.latestResponse.status!=200)throw"Error while loading XiTi script";eval(response)}}async getXitiTrackingParams(n,e){if(!n.structureMap||!e)return;const t=await this.session.getUser(),s=await this.session.getUserProfile();let r;if(!(t!=null&&t.structures))return;for(const h of t.structures){const l=n.structureMap[h];if(l&&l.collectiviteId&&l.UAI){r=l;break}}if(!r||!r.active)return;const i=await this.conf.getPublicConf(e);if(!i)return;const o=i.xiti;if(!o||!o.LIBELLE_SERVICE||!r.UAI)return;function u(h){let l="";for(let g=0;g<h.length;g++)l+=h.charCodeAt(g);return l}const c={Student:"ELEVE",Teacher:"ENSEIGNANT",Relative:"PARENT",Personnel:"ADMIN_VIE_SCOL_TECH",Guest:"AUTRE"};return{LIBELLE_SERVICE:o.LIBELLE_SERVICE,TYPE:o.OUTIL?"TIERS":"NATIF",OUTIL:o.OUTIL?o.OUTIL:"",STRUCT_ID:r.collectiviteId,STRUCT_UAI:r.UAI,PROJET:r.projetId?r.projetId:n.ID_PROJET,EXPLOITANT:n.ID_EXPLOITANT,PLATFORME:r.plateformeId?r.plateformeId:n.ID_PLATEFORME,ID_PERSO:u(t.userId),PROFILE:s&&s.length>0?c[s[0]]??"":""}}}class ReactionsService{constructor(e,t,s){this.context=e,this.module=t,this.resourceType=s}get http(){return this.context.http()}async loadAvailableReactions(){try{const{"reaction-types":e}=await this.context.conf().getPublicConf("audience");return Array.isArray(e)?e:void 0}catch{console.error("Audience configuration not found");return}}async loadReactionSummaries(e){const t=await this.http.get(`/audience/reactions/${this.module}/${this.resourceType}?resourceIds=${e.join(",")}`);return this.http.isResponseError()?{}:t.reactionsByResource}async loadReactionDetails(e,t,s){const r=await this.http.get(`/audience/reactions/${this.module}/${this.resourceType}/${e}?page=${t}&size=${s}`);return this.http.isResponseError()?void 0:r}async deleteReaction(e){await this.http.delete(`/audience/reactions/${this.module}/${this.resourceType}/${e}`)}async updateReaction(e,t){await this.http.putJson(`/audience/reactions/${this.module}/${this.resourceType}`,{resourceId:e,reactionType:t})}async createReaction(e,t){await this.http.postJson(`/audience/reactions/${this.module}/${this.resourceType}`,{resourceId:e,reactionType:t})}}class ViewsService{constructor(e,t,s){this.context=e,this.module=t,this.resourceType=s}get http(){return this.context.http()}async getCounters(e){const t=await this.http.get(`/audience/views/count/${this.module}/${this.resourceType}?resourceIds=${e.join(",")}`);return this.http.isResponseError()?{}:t}async getDetails(e){const t=await this.http.get(`/audience/views/details/${this.module}/${this.resourceType}/${e}`);return this.http.isResponseError()?void 0:t}trigger(e){return this.http.post(`/audience/views/${this.module}/${this.resourceType}/${e}`)}}class AudienceService{constructor(e,t,s){this.context=e,this.module=t,this.resourceType=s}get views(){return new ViewsService(this.context,this.module,this.resourceType)}get reactions(){return new ReactionsService(this.context,this.module,this.resourceType)}}const globalCache={},mutexPromise={};class CacheService{constructor(e){this.context=e}get http(){return this.context.http()}async fromCacheIfPossible(e,t,s){if(mutexPromise[e]&&await mutexPromise[e],globalCache[e])return globalCache[e];try{const r=t();mutexPromise[e]=r;const i=await r;return s(i)&&(globalCache[e]=i),i}catch(r){throw console.error(`Failed to retrieve value for: ${e}`,r),r}}clearCache(e){if(e)delete globalCache[e];else for(const t in globalCache)globalCache.hasOwnProperty(t)&&delete globalCache[t]}async httpGet(e,t){return this.fromCacheIfPossible(e,async()=>{const s=await this.http.get(e,t),r={...this.http.latestResponse};return{value:s,response:r}},({response:s})=>!(s.status<200||s.status>=300))}async httpGetJson(e,t){const{response:s,value:r}=await this.httpGet(e,t);if(s.status<200||s.status>=300)throw`Bad http status (${s.status}) for url: ${e}`;return r}}class ConfService{constructor(e){a(this,"Platform",{deploymentTag:"",cdnDomain:""});this.context=e}get http(){return this.context.http()}get cache(){return this.context.cache()}get cdnDomain(){return this.Platform.cdnDomain}async getConf(e){const[t,s]=await Promise.all([this.getThemeConf(),this.getApplicationsList()]),[r,i]=await Promise.all([this.getTheme({conf:t,publicTheme:s===void 0}),this.getWebAppConf({app:e,applications:s??[]})]);return{app:e,applications:s??[],conf:t,currentApp:i,theme:r}}async getPublicConf(e){const{response:t,value:s}=await this.cache.httpGet(`/${e}/conf/public`,{queryParams:{_:this.Platform.deploymentTag}});if(t.status<200||t.status>=300)throw ERROR_CODE.APP_NOT_FOUND;return s}getCdnUrl(){}async savePreference(e,t){this.http.putJson(`/userbook/preference/${e}`,t)}async getPreference(e){const t=await this.http.get(`/userbook/preference/${e}`);return this.http.isResponseError()||typeof t=="string"?{}:JSON.parse(t.preference)}async getThemeConf(e){return await this.http.getScript("/assets/theme-conf.js",{queryParams:{v:e}},"exports.conf")}async getApplicationsList(){const e=await this.http.get("/applications-list");if(!(this.http.isResponseError()||typeof e=="string"))return e.apps}async getWebAppConf({app:e,applications:t}){return t.find(r=>{if(r!=null&&r.prefix)return(r==null?void 0:r.prefix.replace("/",""))===e})}async getTheme({version:e,conf:t,publicTheme:s}){const{value:r}=await this.cache.httpGet("/theme",{queryParams:{_:e}}),i=s?null:r,o=t==null?void 0:t.overriding.find(d=>i===null||d.child===i.themeName),u=(i==null?void 0:i.skinName)||o.skins[0],c=(i==null?void 0:i.skin)||`/assets/themes/${o.child}/skins/${u}/`,h=o.skins,l=o.bootstrapVersion.split("-").slice(-1)[0],g=o.parent==="panda";return{basePath:`${this.cdnDomain}${c}../../`,bootstrapVersion:l,is1d:g,logoutCallback:(i==null?void 0:i.logoutCallback)||"/",skin:o.child,skinName:u,skins:h,themeName:o.child,themeUrl:c,npmTheme:o.npmTheme??void 0}}async getLogoutCallback(e){const{response:t,value:s}=await this.cache.httpGet("/theme",{queryParams:{_:e}});if(t.status<200||t.status>=300)throw ERROR_CODE.NOT_LOGGED_IN;return s.logoutCallback}}class DirectoryService{constructor(e){this.odeServices=e}get http(){return this.odeServices.http()}get cache(){return this.odeServices.cache()}getAvatarUrl(e,t,s="100x100"){return t==="user"?`/userbook/avatar/${e}?thumbnail=${s}`:"/assets/img/illustrations/group-avatar.svg"}getDirectoryUrl(e,t){return t==="user"?`/userbook/annuaire#/${e}`:`/userbook/annuaire#/group-view/${e}`}async getBookMarks(){return(await this.cache.httpGetJson("/directory/sharebookmark/all")).map(({id:t,name:s})=>({id:t,displayName:s,members:[]}))}async getBookMarkById(e){const{groups:t,id:s,name:r,users:i}=await this.http.get(`/directory/sharebookmark/${e}`);return{id:s,displayName:r,groups:t.map(({name:o,id:u})=>({displayName:o,id:u})),users:i.map(({displayName:o,id:u,profile:c})=>({profile:c,displayName:o,firstName:"",lastName:"",login:"",id:u}))}}async saveBookmarks(e,{bookmarks:t,groups:s,users:r}){this.cache.clearCache("/directory/sharebookmark/all");const i=r.map(d=>typeof d=="string"?d:d.id),o=s.map(d=>typeof d=="string"?d:d.id),u=t.map(async d=>{if(typeof d=="string"){const{displayName:p,groups:m,id:y,users:A}=await this.getBookMarkById(d),w=A.map(v=>v.id),C=m.map(v=>v.id);return{displayName:p,id:y,members:[...C,...w]}}else return Promise.resolve(d)}),h=(await Promise.all(u)).map(d=>d.members).reduce((d,p)=>[...d,...p],[]),l={name:e,members:[...i,...o,...h]},{id:g}=await this.http.postJson("/directory/sharebookmark",l);return{id:g,displayName:e,members:l.members}}}class EmbedderService{constructor(e){this.context=e}get http(){return this.context.http()}async getDefault(){return this.http.get("/infra/embed/default")}async getCustom(){return this.http.get("/infra/embed/custom")}getProviderFromUrl(e,t){for(const s of e)if(this.isUrlFromProvider(t,s))return s}urlIsFromPattern(e,t){const s=new RegExp("[^{}]+(?=(?:[^{}]*{[^}]*})*[^}]*$)","g"),r=new RegExp("{[^}]*}","g");let i=!0;const o=t.match(s)||[],u=[];return(t.match(r)||[]).forEach((h,l)=>{h.includes("ignore")||u.push(o[l])}),u.forEach(h=>{if(!e.includes(h)){i=!1;return}}),i}isUrlFromProvider(e,t){typeof t.url=="string"&&(t.url=[t.url]);for(const s of t.url)if(this.urlIsFromPattern(e,s))return!0;return!1}getEmbedCodeForProvider(e,t){for(const s of e.url)if(this.urlIsFromPattern(t,s)){const r=new RegExp("{[a-zA-Z0-9_.]+}","g"),i=s.match(r)||[];let o=e.embed;for(const u of i){let c=s.split(u)[0];const h=c.split("}");h.length>1&&(c=h[h.length-1]);let l=t.split(c)[1];if(!l)continue;const g=s.split(u)[1].split("{")[0];g&&(l=l.split(g)[0]);const d=new RegExp("\\"+u.replace(/}/,"\\}"),"g");o=o.replace(d,l)}return o}return""}}class Subscription{constructor(e,t){a(this,"revoke");this._channel=e,this.revoke=this.setReceiver(s=>t==null?void 0:t(s.data))}setReceiver(e){var t;return(t=this._channel)==null||t.addEventListener("message",e),()=>{this._channel&&(this._channel.removeEventListener("message",e),this._channel.close(),delete this._channel)}}}class Subject{constructor(){a(this,"publishChannels",new Map)}getChannelName(e){return"Subject:"+e}getPublishChannel(e){const t=this.getChannelName(e);let s=this.publishChannels.get(t);return s||(s=this.newChannel(e),this.publishChannels.set(t,s)),s}newChannel(e){const t=this.getChannelName(e),s=new BroadcastChannel(t);return s.addEventListener("messageerror",r=>console.log(r.data)),s}publish(e,t){typeof e=="string"&&this.getPublishChannel(e).postMessage(t)}subscribe(e,t){if(typeof e=="string"){const s=this.newChannel(e);return new Subscription(s,t)}else return new Subscription}}const ASYNC_DATA_NAME={SESSION_READY:"sessionReady",LANG_READY:"langReady",SKIN_READY:"skinReady",OVERRIDE_READY:"overrideReady",APPCONF_READY:"appConfReady"};class Promisified{constructor(){a(this,"_resolution");a(this,"_rejection");a(this,"_promise",new Promise((e,t)=>{this._resolution=e,this._rejection=t}))}get promise(){return this._promise}resolve(e){this._resolution&&this._resolution(e)}reject(e){this._rejection&&this._rejection(e)}}class NotifyFramework{constructor(){a(this,"promises",{});a(this,"subject",new Subject)}asyncData(e){return typeof this.promises[e]>"u"&&(this.promises[e]=new Promisified),this.promises[e]}onSessionReady(){return this.asyncData(ASYNC_DATA_NAME.SESSION_READY)}onLangReady(){return this.asyncData(ASYNC_DATA_NAME.LANG_READY)}onSkinReady(){return this.asyncData(ASYNC_DATA_NAME.SKIN_READY)}onOverridesReady(){return this.asyncData(ASYNC_DATA_NAME.OVERRIDE_READY)}onAppConfReady(){return this.asyncData(ASYNC_DATA_NAME.APPCONF_READY)}promisify(){return new Promisified}events(){return this.subject}}const notify=new NotifyFramework,bundle={},promises={},defaultDiacriticsRemovalMap=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];class IdiomService{constructor(e){this.context=e}get http(){return this.context.http()}async getIdiom(e,t){await Promise.all([this.addBundlePromise(e,"/i18n"),this.addBundlePromise(e,`/${t}/i18n`)])}translate(e,t){e=e??"";let s=bundle[e]===void 0?e:bundle[e];if(t&&typeof t=="object")for(let r in t)typeof t[r]<"u"&&(s=s.replace(new RegExp("\\${"+r+"}","g"),""+t[r]));return s}addBundlePromise(e,t){return this.loadBundlePromise(e,t)}addBundle(e,t,s){this.loadBundle(e,t,s)}loadBundlePromise(e,t){return this.loadBundle(e,t),promises[t]}loadBundle(e,t,s){const r=promises[t];if(r)s&&r.then(s).catch(s);else{const i=new Promisified;promises[t]=i.promise;const o={};e&&(o["Accept-Language"]=e),this.http.get(t,{headers:o}).then(u=>{Object.assign(bundle,u),typeof s=="function"&&s(),i.resolve()}).catch(u=>{typeof s=="function"&&s(),i.reject()})}}addTranslations(e,t){notify.onLangReady().promise.then(s=>{this.loadBundle(s,e+"/"+s+".json",t)})}addAllTranslations(e){return e&&e.length>0?notify.onLangReady().promise.then(t=>Promise.all(e.map(s=>this.loadBundlePromise(t,s+"/"+t+".json")))).then(()=>{}):Promise.reject()}addKeys(e){for(var t in e)typeof bundle[t]!="string"&&(bundle[t]=e[t])}removeAccents(e){for(var t=0;t<defaultDiacriticsRemovalMap.length;t++)e=e.replace(defaultDiacriticsRemovalMap[t].letters,defaultDiacriticsRemovalMap[t].base);return e}}class AbstractBehaviourService{constructor(e){a(this,"_cache");this.context=e,this._cache=new CacheService(this.context)}getApplication(){return this.APP}getResourceType(){return this.RESOURCE}httpGet(e,t){return this._cache.httpGetJson(e,t)}dataToResource({modified:e,...t}){const s=typeof e=="string"?e:e!=null&&e.$date?""+e.$date:"";return{application:this.RESOURCE,name:t.title,creatorId:t.owner,creatorName:t.ownerName,thumbnail:t.icon,assetId:t._id,modifiedAt:s,shared:t.shared,path:t.path}}}class ActualitesBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","actualites");a(this,"RESOURCE","actualites")}async loadResources(){return(await this.httpGet("/actualites/linker/infos")).map(s=>{var r;return s.thread_icon?r=s.thread_icon+"?thumbnail=48x48":r="/img/icons/glyphicons_036_file.png",this.dataToResource({title:s.title+" ["+s.thread_title+"]",ownerName:s.username,owner:s.owner,icon:r,path:"/actualites#/view/thread/"+s.thread_id+"/info/"+s._id,_id:`${s.thread_id}#${s._id}`,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified})})}}class BlogBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","blog");a(this,"RESOURCE","blog")}loadResources(){return new Promise(async(t,s)=>{try{const r=await this.httpGet("/blog/linker"),i=[];r.forEach(o=>{o.thumbnail?o.thumbnail=o.thumbnail+"?thumbnail=48x48":o.thumbnail="/img/illustrations/blog.svg";const u=o.fetchPosts.map(c=>this.dataToResource({owner:o.author.userId,ownerName:o.author.username,title:c.title+" ["+o.title+"]",_id:`${o._id}#${c._id}`,icon:o.thumbnail,path:`/blog/id/${o._id}/post/${c._id}`,shared:!!(o.shared&&o.shared.length>=0),modified:o.modified}));i.push(...u)}),t(i)}catch(r){s(r)}})}}class CollaborativewallBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","collaborativewall");a(this,"RESOURCE","collaborativewall")}async loadResources(){return(await this.httpGet("/collaborativewall/list/all")).map(s=>this.dataToResource({title:s.name,ownerName:s.owner.displayName,owner:s.owner.userId,icon:s.icon?s.icon:"/img/illustrations/collaborative-wall-default.png",path:"/collaborativewall#/view/"+s._id,_id:s._id,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified}))}}class CommunityBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","community");a(this,"RESOURCE","community")}async loadResources(){return(await this.httpGet("/community/listallpages")).map(s=>{var r;return typeof s.thumbnail>"u"||s.thumbnail===""?r="/img/icons/glyphicons_036_file.png":r=s.thumbnail+"?thumbnail=48x48",this.dataToResource({title:s.name,icon:r,path:"/community#/view/"+s.id,_id:s.id,owner:"",ownerName:"",shared:!!(s.shared&&s.shared.length>=0),modified:s.name})})}}class ExercizerBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","exercizer");a(this,"RESOURCE","exercizer")}async loadResources(){return(await this.httpGet("/exercizer/subjects-scheduled")).map(s=>{const r=s.picture?s.picture+"?thumbnail=48x48":"/img/illustrations/exercizer.svg";let i,o=!1,u=JSON.parse(s.scheduled_at);return u.groupList.length>0?(o=!0,i=u.groupList[0].name):u.userList.length>0?(o=!0,i=u.userList[0].name):i="",u.groupList.length+u.userList.length>1&&(i+="..."),this.dataToResource({title:s.title,owner:s.owner,ownerName:i,icon:r,path:"/exercizer#/linker/"+s.id,_id:""+s.id,shared:o,modified:s.modified})})}}class FormulaireBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","formulaire");a(this,"RESOURCE","formulaire")}async loadResources(){return(await this.httpGet("/formulaire/forms/linker")).map(s=>(s.picture||(s.picture="/formulaire/public/img/logo.svg"),this.dataToResource({_id:""+s.id,icon:s.picture,title:s.title,ownerName:s.owner_name,owner:s.owner_id,path:s.is_public?`${window.location.origin}/formulaire-public#/form/${s.public_key}`:`${window.location.origin}/formulaire#/form/${s.id}/${s.rgpd?"rgpd":"new"}`,shared:!!(s.shared&&s.shared.length>=0),modified:""+s.date_modification})))}}class ForumBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","forum");a(this,"RESOURCE","forum")}async loadResources(){return(await this.httpGet("/forum/categories")).map(s=>this.dataToResource({_id:s._id,title:s.name,icon:s.icon||"/img/illustrations/forum.svg",path:"/forum#/view/"+s._id,ownerName:s.owner.displayName,owner:s.owner.userId,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified}))}}class HomeworksBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","homeworks");a(this,"RESOURCE","homeworks")}async loadResources(){return(await this.httpGet("/homeworks/list")).filter(t=>t.owner&&t.trashed===0).map(t=>this.dataToResource({title:t.title,ownerName:t.owner.displayName,owner:t.owner.userId,icon:t.thumbnail||"/img/illustrations/homeworks.svg",path:"/homeworks#/view-homeworks/"+t._id,_id:""+t._id,shared:typeof t.shared<"u",modified:t.modified}))}}class MagnetoBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","magneto");a(this,"RESOURCE","magneto")}async loadResources(){const{all:t}=await this.httpGet("/magneto/boards/editable");return t.map(s=>this.dataToResource({_id:s._id,title:s.title,icon:s.imageUrl,owner:s.ownerId,ownerName:s.ownerName,path:`/magneto#/board/${s._id}/view`,shared:!!(s.shared&&s.shared.length>=0),modified:""+s.modificationDate}))}}class MindmapBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","mindmap");a(this,"RESOURCE","mindmap")}async loadResources(){return(await this.httpGet("/mindmap/list/all")).map(s=>this.dataToResource({title:s.name,ownerName:s.owner.displayName,owner:s.owner.userId,icon:s.thumbnail||"/img/illustrations/mindmap-default.png",path:"/mindmap#/view/"+s._id,_id:s._id,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified}))}}class PagesBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","pages");a(this,"RESOURCE","pages")}async loadResources(){const t=await this.httpGet("/pages/list/all"),s=[];return t.forEach(r=>{var o;const i=r.thumbnail?r.thumbnail+"?thumbnail=48x48":"/img/illustrations/pages.svg";s.push(this.dataToResource({title:r.title,owner:r.owner.userId,ownerName:r.owner.displayName,icon:i,path:"/pages#/website/"+r._id,_id:r._id,shared:typeof r.shared<"u",modified:r.modified})),(o=r.pages)==null||o.forEach(u=>{s.push(this.dataToResource({title:u.title,owner:r.owner.userId,ownerName:r.owner.displayName,icon:i,path:"/pages#/website/"+r._id+"/"+u.titleLink,_id:r._id+"/"+u.titleLink,shared:typeof r.shared<"u",modified:r.modified}))})}),s}}class PollBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","poll");a(this,"RESOURCE","poll")}async loadResources(){return(await this.httpGet("/poll/list/all")).map(s=>{const r=s.icon?s.icon+"?thumbnail=48x48":"/img/icons/glyphicons_036_file.png";return this.dataToResource({title:s.question,ownerName:s.owner.displayName,icon:r,path:"/poll#/view/"+s._id,_id:s._id,owner:s.owner.userId,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified})})}}class ScrapbookBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","scrapbook");a(this,"RESOURCE","scrapbook")}async loadResources(){return(await this.httpGet("/scrapbook/list/all")).map(s=>{const r=s.icon||"/img/illustrations/scrapbook.svg";return this.dataToResource({title:s.name,owner:s.owner.userId,ownerName:s.owner.displayName,icon:r,path:"/scrapbook#/view-scrapbook/"+s._id,_id:s._id,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified})})}}class TimelinegeneratorBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","timelinegenerator");a(this,"RESOURCE","timelinegenerator")}loadResources(){return new Promise(async(t,s)=>{try{const i=(await this.httpGet("/timelinegenerator/timelines")).map(o=>{const u=o.icon||"/img/illustrations/timeline-default.png";return this.dataToResource({title:o.headline,ownerName:o.owner.displayName,owner:o.owner.userId,icon:u,path:"/timelinegenerator#/view/"+o._id,_id:o._id,shared:typeof o.shared<"u",modified:o.modified})});t(i)}catch(r){s(r)}})}}class WikiBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","wiki");a(this,"RESOURCE","wiki")}async loadResources(){return(await this.httpGet("/wiki/listallpages?visible=true")).map(s=>s.pages.map(r=>{let i;return typeof s.thumbnail>"u"||s.thumbnail===""?i="/img/icons/glyphicons_036_file.png":i=s.thumbnail+"?thumbnail=48x48",this.dataToResource({title:r.title+" ["+s.title+"]",ownerName:s.owner.displayName,owner:s.owner.userId,icon:i,path:"/wiki#/view/"+s._id+"/"+r._id,_id:`${s._id}#${r._id}`,shared:typeof s.shared<"u",modified:r.modified})})).flat()}}class WorkspaceBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","workspace");a(this,"RESOURCE","workspace")}loadResources({search:t,asset_id:s}){return new Promise(async(r,i)=>{try{let o="/workspace/documents?filter=all&hierarchical=true";s&&s.length?o+=`&search=${t}`:t&&t.length&&(o+=`&search=${t}`);const c=(await this.httpGet(o)).filter(h=>!h.deleted).map(h=>{const l=h.metadata["content-type"]&&h.metadata["content-type"].indexOf("image")!==-1?`/workspace/document/${h._id}?thumbnail=120x120`:"/img/icons/unknown-large.png";return this.dataToResource({title:h.name,ownerName:h.ownerName,owner:h.owner,icon:l,path:`/workspace/document/${h._id}`,_id:h._id,shared:!!(h.shared&&h.shared.length>=0),modified:h.modified})});r(c)}catch(o){i(o)}})}}const f=class f{static async initialize(e,t){const s=e.http();if(!this.resourceProducingApps.length){this.resourceProducingApps=[t,"workspace"];try{const[r,i]=await Promise.all([s.get("/resources-applications"),e.session().getUser()]);i!=null&&i.apps&&(r!=null&&r.length)&&(this.resourceProducingApps=r.filter(o=>i.apps.some(u=>u.address.includes(o))))}catch(r){console.warn("Failed to load resource-producing apps:",r)}}return this.resourceProducingApps}static async registerBehaviours(e){this.resourceProducingApps.forEach(t=>{const s={application:e,resourceType:t};this.registry.register(s,r=>this.serviceFor(r,e,t))})}static serviceFor(e,t,s){let r;switch(s){case"timelinegenerator":r=new TimelinegeneratorBehaviour(e);break;case"workspace":r=new WorkspaceBehaviour(e);break;case"blog":r=new BlogBehaviour(e);break;case"actualites":r=new ActualitesBehaviour(e);break;case"wiki":r=new WikiBehaviour(e);break;case"pages":r=new PagesBehaviour(e);break;case"poll":r=new PollBehaviour(e);break;case"community":r=new CommunityBehaviour(e);break;case"mindmap":r=new MindmapBehaviour(e);break;case"forum":r=new ForumBehaviour(e);break;case"homeworks":r=new HomeworksBehaviour(e);break;case"scrapbook":r=new ScrapbookBehaviour(e);break;case"collaborativewall":r=new CollaborativewallBehaviour(e);break;case"exercizer":r=new ExercizerBehaviour(e);break;case"formulaire":r=new FormulaireBehaviour(e);break;case"magneto":r=new MagnetoBehaviour(e);break;default:throw ERROR_CODE.NOT_SUPPORTED}return r.APP=t,r}};a(f,"registry",new ServiceRegistry),a(f,"findBehaviour",f.registry.findService.bind(f.registry)),a(f,"hasBehaviour",f.registry.isRegistered.bind(f.registry)),a(f,"resourceProducingApps",[]);let SnipletsService=f;class RightService{constructor(e){this.context=e}get session(){return this.context.session()}parseResourceRight(e){const t=e.split(":");if(t.length===2){if(t[0]==="creator")return{id:t[1],right:"creator",type:"creator"}}else return t.length===3?{id:t[1],right:t[2],type:t[0]}:void 0}parseResourceRights(e){return e.map(s=>this.parseResourceRight(s)).filter(s=>s!==void 0)}hasResourceRight({id:e,groupIds:t},s,r){const i=r.map(o=>typeof o=="string"?this.parseResourceRight(o):o).filter(o=>o!==void 0);for(const o of i){if(o.id===e&&o.type==="creator")return!0;if(o.id===e&&o.type==="user"&&o.right===s)return!0;if(t.includes(o.id)&&o.type==="group"&&o.right===s)return!0}return!1}async sessionHasResourceRight(e,t){try{const s=await this.session.getUser();return!!s&&this.hasResourceRight({groupIds:s.groupsIds,id:s.userId},e,t)}catch(s){return console.error(`Unexpected error ${s} in sessionHasResourceRight()`),!1}}async sessionHasAtLeastOneResourceRight(e,t){for(const s of e)if(await this.sessionHasResourceRight(s,t))return!0;return!1}async sessionHasResourceRightForEachList(e,t){let s=0;for(const r of t)await this.sessionHasResourceRight(e,r)&&s++;return s===t.length}async sessionHasAtLeastOneResourceRightForEachList(e,t){for(const s of e){let r=0;for(const i of t)await this.sessionHasResourceRight(s,i)&&r++;if(r===t.length)return!0}return!1}hasWorkflowRight(e,t){return t.findIndex(s=>s===e)!==-1}async sessionHasWorkflowRight(e){try{const t=await this.session.getUser();return!!t&&this.hasWorkflowRight(e,t.authorizedActions.map(s=>s.name))}catch(t){return console.error(`Unexpected error ${t} in sessionHasWorkflowRight()`),!1}}async sessionHasWorkflowRights(e){const t={};try{const s=await this.session.getUser();for(const r of e)t[r]=!!s&&this.hasWorkflowRight(r,s.authorizedActions.map(i=>i.name))}catch(s){console.error(`Unexpected error ${s} in sessionHasWorkflowRights()`);for(const r of e)t[r]=!1}return t}}class SessionService{constructor(e){this.context=e}get http(){return this.context.http()}get cache(){return this.context.cache()}get conf(){return this.context.conf()}onLogout(){this.cache.clearCache()}onRefreshSession(){this.cache.clearCache()}async getSession(){const e=await this.getUser(),[t,s,r,i,o]=await Promise.all([this.getCurrentLanguage(e),this.latestQuotaAndUsage(e),this.loadDescription(e),this.getUserProfile(),this.getBookmarks(e)]);return{user:e,quotaAndUsage:s,currentLanguage:t,userDescription:r,userProfile:i,bookmarkedApps:o}}login(e,t,s,r){const i=new FormData;return i.append("email",e),i.append("password",t),typeof s<"u"&&i.append("rememberMe",""+s),typeof r<"u"&&i.append("secureLocation",""+r),this.http.post("/auth/login",i,{headers:{"content-type":"application/x-www-form-urlencoded"}}).finally(()=>{switch(this.http.latestResponse.status){case 200:throw ERROR_CODE.MALFORMED_DATA}})}async logout(){const e=await this.conf.getLogoutCallback();return this.http.get("/auth/logout?callback="+e).finally(()=>{})}async latestQuotaAndUsage(e){const t={quota:0,storage:0};if(!e)return t;try{return await this.http.get(`/workspace/quota/user/${e==null?void 0:e.userId}`)}catch(s){return console.error(s),t}}async getCurrentLanguage(e){const t=(e==null?void 0:e.sessionMetadata)&&(e==null?void 0:e.sessionMetadata.userId);try{let s;return t?s=await this.loadUserLanguage():s=await this.loadDefaultLanguage(),s}catch(s){console.error(s)}}async loadUserLanguage(){try{const e=await this.http.get("/userbook/preference/language");return JSON.parse(e.preference)["default-domain"]}catch{return await this.loadDefaultLanguage()}}async loadDefaultLanguage(){return(await this.cache.httpGetJson("/locale")).locale}async getUser(){const{response:e,value:t}=await this.cache.httpGet("/auth/oauth2/userinfo");if(!(e.status<200||e.status>=300)&&typeof t=="object")return t;throw ERROR_CODE.NOT_LOGGED_IN}hasWorkflow({workflowName:e,user:t}){return e===void 0||(t==null?void 0:t.authorizedActions.findIndex(s=>s.name===e))!==-1}async loadDescription(e){if(!e)return{};try{const[t,s]=await Promise.all([this.getUserProfile({options:{requestName:"refreshAvatar"}}),this.http.get("/directory/userbook/"+(e==null?void 0:e.userId))]);return{...s,profiles:t}}catch(t){return console.error(t),{}}}async getBookmarks(e){if(!e)return[];const t=await this.http.get("/userbook/preference/apps");t.preference||(t.preference=null);const s=JSON.parse(t.preference);let r;r=s,r||(r={bookmarks:[],applications:[]});const i=[];return r.bookmarks.forEach((o,u)=>{const c=((e==null?void 0:e.apps)||[]).find(h=>h.name===o);if(c){const h=Object.assign({},c);i.push(h)}}),i}async getUserProfile(e={}){var c,h;const{options:t={},params:s={}}=e,r=new URLSearchParams(s).toString(),i=`/userbook/api/person${r?`?${r}`:""}`,{response:o,value:u}=await this.cache.httpGet(i,t);return o.status<200||o.status>=300||typeof u=="string"?["Guest"]:((h=(c=u==null?void 0:u.result)==null?void 0:c[0])==null?void 0:h.type)||["Guest"]}async isAdml(){const e=await this.getUser();return(e==null?void 0:e.functions.ADMIN_LOCAL)!==void 0}async getWebApp(e){const t=await this.getUser();return t==null?void 0:t.apps.find(s=>{var r;return s!=null&&s.prefix?(s==null?void 0:s.prefix.replace("/",""))===e||!1:s!=null&&s.address&&((r=s.address)==null?void 0:r.split("/")[1])===e||!1})}}class StringUtils{static removeAccents(e){for(let t=0;t<defaultDiacriticsRemovalMap.length;t++)e=e.replace(defaultDiacriticsRemovalMap[t].letters,defaultDiacriticsRemovalMap[t].base);return e}}class ShareService{constructor(e){this.context=e}get directory(){return this.context.directory()}get http(){return this.context.http()}get cache(){return this.context.cache()}async searchShareSubjects(e,t,s){const r=StringUtils.removeAccents(s).toLowerCase(),i=await this.cache.httpGetJson(`/${e}/share/json/${t}?search=${s}`),o=i.users.visibles.filter(({username:l,firstName:g,lastName:d,login:p})=>{const m=StringUtils.removeAccents(d||"").toLowerCase(),y=StringUtils.removeAccents(g||"").toLowerCase(),A=StringUtils.removeAccents(l||"").toLowerCase(),w=StringUtils.removeAccents(p||"").toLowerCase();return A.includes(r)||y.includes(r)||m.includes(r)||w.includes(r)}).map(l=>({avatarUrl:this.directory.getAvatarUrl(l.id,"user"),directoryUrl:this.directory.getDirectoryUrl(l.id,"user"),displayName:l.username,id:l.id,profile:l.profile,type:"user"})),u=i.groups.visibles.filter(({name:l})=>StringUtils.removeAccents(l||"").toLowerCase().includes(r)).map(l=>({avatarUrl:this.directory.getAvatarUrl(l.id,"group"),directoryUrl:this.directory.getDirectoryUrl(l.id,"group"),displayName:l.name,id:l.id,type:"group",structureName:l.structureName}));return[...(await this.directory.getBookMarks()).filter(({displayName:l})=>StringUtils.removeAccents(l||"").toLowerCase().includes(r)).map(l=>({avatarUrl:"",directoryUrl:"",profile:"",displayName:l.displayName,id:l.id,type:"sharebookmark"})),...o,...u]}async getShareMapping(e){const t=await this.cache.httpGetJson(`/${e}/rights/sharing`);for(const s of Object.keys(t))if(s.includes(".")){const r=s.split(".")[1],i=t[s];delete t[s],t[r]=i}return t}getActionsAvailableFor({id:e,type:t},s,r){const o=(t==="user"?s.users.checked[e]:s.groups.checked[e])||[],u=Object.keys(r),c=[];for(const h of u)r[h].filter(d=>o.includes(d)).length>0&&c.push(h);return c}async getRightsForResource(e,t){const s=await this.directory.getBookMarks(),r=`/${e}/share/json/${t}?search=`,i=await this.cache.httpGetJson(r),o=await this.getShareMapping(e),u=await this.cache.httpGetJson("/infra/public/json/sharing-rights.json"),c=Object.keys(i.users.checked).map(p=>i.users.visibles.find(y=>y.id===p)).filter(p=>p!==void 0).map(p=>{const m=this.getActionsAvailableFor({id:p.id,type:"user"},i,o);return{id:p.id,type:"user",displayName:p.username,profile:p.profile,avatarUrl:this.directory.getAvatarUrl(p.id,"user"),directoryUrl:this.directory.getDirectoryUrl(p.id,"user"),actions:m.map(A=>{const w=u[A];return{displayName:A,id:A,priority:w.priority}})}}).sort((p,m)=>(p.displayName||"").localeCompare(m.displayName)),h=Object.keys(i.groups.checked).map(p=>i.groups.visibles.find(y=>y.id===p)).filter(p=>p!==void 0).map(p=>{const m=this.getActionsAvailableFor({id:p.id,type:"group"},i,o);return{id:p.id,type:"group",displayName:p.name,profile:void 0,avatarUrl:this.directory.getAvatarUrl(p.id,"group"),directoryUrl:this.directory.getDirectoryUrl(p.id,"group"),actions:m.map(A=>{const w=u[A];return{displayName:A,id:A,priority:w.priority}})}}).sort((p,m)=>(p.displayName||"").localeCompare(m.displayName)),l=[...c,...h],g=i.groups.visibles.map(({groupDisplayName:p,id:m,name:y})=>({displayName:p||y,id:m})),d=i.users.visibles.map(({id:p,profile:m,username:y,firstName:A,lastName:w,login:C})=>({displayName:y,firstName:A,lastName:w,login:C,profile:m,id:p}));return{rights:l,visibleBookmarks:s,visibleGroups:g,visibleUsers:d}}async saveRights(e,t,s){const r=await this.getShareMapping(e),i={bookmarks:{},groups:{},users:{}};for(const c of s){const h=c.actions.map(g=>r[g.id]).reduce((g,d)=>Array.isArray(d)?[...g,...d]:g,[]),l=[...new Set(h)];l.length>0&&(c.type==="user"?i.users[c.id]=l:c.type==="group"?i.groups[c.id]=l:i.bookmarks[c.id]=l)}const o=`/${e}/share/resource/${t}`;return this.cache.clearCache(`/${e}/share/json/${t}?search=`),await this.http.putJson(o,i)}async getActionsForApp(e){const t=await this.cache.httpGetJson("/infra/public/json/sharing-rights.json"),s=await this.getShareMapping(e);return Object.keys(t).map(i=>{const o=t[i];return{displayName:i,id:i,priority:o.priority,requires:o.requires}}).filter(i=>{var o;return((o=s[i.id])==null?void 0:o.length)>0}).sort((i,o)=>i.priority-o.priority)}}const loadedScripts={};axios.create({baseURL:"https://api.example.com",timeout:1e4,headers:{"Content-Type":"application/json"}});class HttpService{constructor(e,t){a(this,"axios");a(this,"baseUrl");a(this,"headers",{});a(this,"_latestResponse");this.context=e,this.axios=axios.create(t)}fixBaseUrl(e){return e.startsWith("http://")||e.startsWith("https://")?e:this.baseUrl?this.baseUrl.endsWith("/")||e.startsWith("/")?`${this.baseUrl}${e}`:`${this.baseUrl}/${e}`:e}useAxiosInstance(e){return this.axios=e,this}useBaseUrl(e){return this.baseUrl=e,this}useHeaders(e){return this.headers=e,this}setCdn(e){e&&XMLHttpRequest&&!XMLHttpRequest.prototype.cdnUrl&&(XMLHttpRequest.prototype.cdnUrl=e,XMLHttpRequest.prototype.baseOpen=XMLHttpRequest.prototype.open,XMLHttpRequest.prototype.open=function(){const t=arguments[1];return t.startsWith("/infra/public")&&(arguments[1]=e+t),/^\/([^\/]*)\/public/.test(t)&&(arguments[1]=e+t),t.startsWith("/assets")&&(arguments[1]=e+t),t=="/conf/public"&&(arguments[1]=t),t.startsWith("http")&&(arguments[1]=t),this.baseOpen.apply(this,arguments)})}toAxiosConfig(e){if(e){const t=Object.assign({},this.axios.defaults);e.headers&&(t.headers=Object.assign({},this.axios.defaults.headers),Object.assign(t.headers,e.headers)),e.responseType&&(t.responseType=e.responseType),e.queryParams&&(t.params=Object.assign({},e.queryParams));const s=t.headers??{};return t.headers={...s,...this.headers},t}else return this.axios.defaults}toCdnUrl(e){e=this.fixBaseUrl(e);const t=this.context.conf().getCdnUrl()||"";if(t.length>0&&e!=="/conf/public"){const s=""+e;(s.startsWith("/infra/public")||s.startsWith("/assets")||/^\/([^\/]*)\/public/.test(s))&&(e=t+s)}return e}mapAxiosError(e,t){e.response?this._latestResponse=e.response:e.request?this._latestResponse={status:408,statusText:ERROR_CODE.TIME_OUT}:this._latestResponse={status:500,statusText:ERROR_CODE.UNKNOWN};const{data:s}=this._latestResponse;return s}mapAxiosResponse(e,t){return this._latestResponse=e,e.data}get latestResponse(){return this._latestResponse}isResponseError(){return this.latestResponse.status<200||this.latestResponse.status>=300}async get(e,t){try{const s=await this.axios.get(this.toCdnUrl(e),this.toAxiosConfig(t));return console.log({r:s,url:this.toCdnUrl(e),params:this.toAxiosConfig(t)}),this.mapAxiosResponse(s,t)}catch(s){throw this.mapAxiosError(s,t)}}async post(e,t,s){try{const r=await this.axios.post(this.fixBaseUrl(e),t,this.toAxiosConfig(s));return this.mapAxiosResponse(r,s)}catch(r){throw this.mapAxiosError(r,s)}}async postFile(e,t,s){const r=this.toAxiosConfig(s);r.headers&&r.headers["Content-Type"]&&delete r.headers["Content-Type"];try{const i=await this.axios.post(this.fixBaseUrl(e),t,{...r,headers:{"Content-Type":"multipart/form-data"}});return this.mapAxiosResponse(i,s)}catch(i){throw this.mapAxiosError(i,s)}}async postJson(e,t,s){const r=this.toAxiosConfig();r.headers&&(r.headers["Content-Type"]="application/json");try{const i=await this.axios.post(this.fixBaseUrl(e),t,this.toAxiosConfig(s));return this.mapAxiosResponse(i,s)}catch(i){throw this.mapAxiosError(i,s)}}async put(e,t,s){try{const r=await this.axios.put(this.fixBaseUrl(e),t,this.toAxiosConfig(s));return this.mapAxiosResponse(r,s)}catch(r){throw this.mapAxiosError(r,s)}}async putFile(e,t,s){try{const r=this.toAxiosConfig(s);r.headers&&r.headers["Content-Type"]&&delete r.headers["Content-Type"];const i=await this.axios.put(this.fixBaseUrl(e),t,{...r,headers:{"Content-Type":"multipart/form-data"}});return this.mapAxiosResponse(i,s)}catch(r){throw this.mapAxiosError(r,s)}}async putJson(e,t,s){const r=this.toAxiosConfig(s);r.headers&&(r.headers["Content-Type"]="application/json");try{const i=await this.axios.put(this.fixBaseUrl(e),t,r);return this.mapAxiosResponse(i,s)}catch(i){throw this.mapAxiosError(i,s)}}async delete(e,t){try{const s=await this.axios.delete(this.fixBaseUrl(e),this.toAxiosConfig(t));return this.mapAxiosResponse(s,t)}catch(s){throw this.mapAxiosError(s,t)}}async deleteJson(e,t){try{const s=await this.axios.delete(this.fixBaseUrl(e),{data:t});return this.mapAxiosResponse(s)}catch(s){throw this.mapAxiosError(s)}}getScript(e,t,s){const r=s??"exports",i=this.toAxiosConfig(t);return i.headers&&(i.headers.Accept="application/javascript"),this.axios.get(this.toCdnUrl(e),i).then(o=>this.mapAxiosResponse(o,t)).then(o=>{try{const u=`"use strict";var ${r.split(".")[0]}={};${o};return ${r};`;return Function(u)()}catch{return o}}).catch(o=>{throw this.mapAxiosError(o,t),o})}loadScript(e,t){return loadedScripts[e]?Promise.resolve():this.getScript(e,t).then(s=>{loadedScripts[e]=!0})}}const R=class R{constructor(e){this.context=e}get http(){return this.context.http()}get conf(){return this.context.conf()}async getVideoConf(){var t;const e=await this.conf.getPublicConf(APP$2.VIDEO);return{maxWeight:(e==null?void 0:e["max-videosize-mbytes"])??R.MAX_WEIGHT,maxDuration:(e==null?void 0:e["max-videoduration-minutes"])??R.MAX_DURATION,acceptVideoUploadExtensions:((t=e==null?void 0:e["accept-videoupload-extensions"])==null?void 0:t.map(s=>s.toUpperCase()))??[]}}async upload({data:e,appCode:t,captation:s,duration:r}){if(!e.file)throw new Error("Invalid video file.");if(!e.filename)throw new Error("Invalid video filename");const i=`${e.browser.name} ${e.browser.version}`,o=new FormData;o.append("device",e.device||""),o.append("browser",i),o.append("url",e.url),o.append("app",t),o.append("file",e.file,e.filename),o.append("weight",""+e.file.size),o.append("captation",""+s);let u=`/video/encode?captation=${s}`;r&&(u+=`&duration=${r}`);const c=await this.http.post(u,o,{headers:{"Content-Type":"multipart/form-data"}});if(c.state=="running"){let h=0,l=1;do{const g=l+h;await new Promise(p=>setTimeout(p,g*1e3)),h=l,l=Math.min(8,g);const d=await this.http.get(`/video/status/${c.processid}`);if(d.state=="succeed")return d;if(d.state=="error")break}while(!0)}throw new Error("Video cannot be uploaded.")}};a(R,"MAX_WEIGHT",50),a(R,"MAX_DURATION",3);let VideoService=R;const defaultMappers={csv:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isCsvLike(n,e)},doc:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isWordLike(n,e)?!0:n.indexOf("document")!==-1&&n.indexOf("wordprocessing")!==-1},xls:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isExcelLike(n,e)?!0:n.indexOf("document")!==-1&&n.indexOf("spreadsheet")!==-1||n.indexOf("ms-excel")!==-1},img:function({type:n}){return n.indexOf("image")!==-1},pdf:function({type:n}){return n.indexOf("pdf")!==-1||n==="application/x-download"},ppt:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isPowerpointLike(n,e)?!0:n.indexOf("document")!==-1&&n.indexOf("presentation")!==-1||n.indexOf("powerpoint")!==-1},txt:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isTxtLike(n,e)},md:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isMdLike(n,e)},video:function({type:n}){return n.indexOf("video")!==-1},audio:function({type:n}){return n.indexOf("audio")!==-1},zip:function({type:n}){return n.indexOf("zip")!==-1||n.indexOf("rar")!==-1||n.indexOf("tar")!==-1||n.indexOf("7z")!==-1}},b=class b{static getRole(e){var t,s;return b.role((t=e.metadata)==null?void 0:t["content-type"],!1,(s=e.metadata)==null?void 0:s.extension)}static role(e,t=!1,s){if(s&&(s=s.trim()),!e)return"unknown";this.roleMappers||console.warn("[DocumentHelper.role] should not have empty roles",this);const r={type:e,previewRole:t,extension:s};for(const i of this.roleMappers){const o=i(r);if(o)return o}return"unknown"}};a(b,"roleMappers",[e=>Object.keys(defaultMappers).find(s=>defaultMappers[s](e))]);let DocumentHelper=b;class WorkspaceService{constructor(e){this.context=e}get http(){return this.context.http()}extractMetadata(e){const t=e.name||"",s=t.split("."),r=e.type||"application/octet-stream",i=s.length>1?s[s.length-1]:"",o={"content-type":r,filename:t,size:e.size,extension:i,role:DocumentHelper.role(r,!1,i)},u=t.replace("."+o.extension,""),c=o.extension?u+"."+o.extension:u;return{basename:u,fullname:c,metadata:o}}async saveFile(e,t){const{fullname:s,metadata:r}=this.extractMetadata(e),i=new FormData;i.append("file",e,s);const o=[];((t==null?void 0:t.visibility)==="public"||(t==null?void 0:t.visibility)==="protected")&&o.push(`${t.visibility}=true`),t!=null&&t.application&&o.push(`application=${t.application}`),r.role==="img"&&o.push("quality=1"),t!=null&&t.parentId&&o.push(`parentId=${t.parentId}`);const u=await this.http.postFile(`/workspace/document?${o.join("&")}`,i);if(this.http.isResponseError())throw this.http.latestResponse.statusText;return u}async updateFile(e,t,s){const{fullname:r,metadata:i}=this.extractMetadata(t),o=new FormData;o.append("file",t,r);const u=[];i.role==="img"&&u.push("quality=1"),s!=null&&s.alt&&u.push(`alt=${s.alt}`),s!=null&&s.legend&&u.push(`legend=${s.legend}`),s!=null&&s.name&&u.push(`name=${s.name}`);const c=await this.http.putFile(`/workspace/document/${e}?${u.join("&")}`,o);if(this.http.isResponseError())throw this.http.latestResponse.statusText;return c}async deleteFile(e){const t=e.map(s=>s._id);if(t.length==0)Promise.resolve(null);else if(await this.http.deleteJson("/workspace/documents",{ids:t}),this.http.isResponseError())throw this.http.latestResponse.statusText}async acceptDocuments(e){const t=await this.context.session().getUser();return s=>s.deleted&&s.trasher?(t==null?void 0:t.userId)==s.trasher:!0}async searchDocuments(e){const t=e.filter!=="external"||e.parentId?await this.http.get("/workspace/documents",{queryParams:{...e,_:new Date().getTime()}}):[],s=await this.acceptDocuments(e);return t.filter(s)}async listDocuments(e,t){return this.searchDocuments({filter:e,parentId:t,includeall:!0})}async transferDocuments(e,t,s="protected"){const r=[];if(e.forEach(i=>{(s==="public"&&!i.public||!i.public&&!i.protected)&&r.push(i)}),r.length>0){const i=await this.http.post("/workspace/documents/transfer",{application:t,visibility:s,ids:r.map(o=>o._id)});if(this.http.isResponseError())throw this.http.latestResponse.statusText;return r.forEach((o,u)=>{const c=e.findIndex(h=>h._id===o._id);0<=c&&c<e.length&&(e[c]=i[u])}),e.filter(o=>!!o)}return e}getThumbnailUrl(e,t=0,s=0){var i,o;const r=t>0||s>0?`${t}x${s}`:"120x120";if(typeof e=="string")return e.includes("data:image")||e.includes("thumbnail")?e:`${e}${e.includes("?")?"&":"?"}thumbnail=${r}`;{const u=`/workspace/${e.public?"pub/":""}document/${e._id}?thumbnail=`,c=e.thumbnails;if((o=(i=e.metadata)==null?void 0:i["content-type"])!=null&&o.includes("video")){const h=c&&Object.keys(c).length>0?Object.keys(c)[0]:null;return h?u+h:null}else return u+r}}}class OdeServices{constructor(){a(this,"_analytics");a(this,"_cache");a(this,"_conf");a(this,"_directory");a(this,"_http");a(this,"_idiom");a(this,"_rights");a(this,"_session");a(this,"_share");a(this,"_video");a(this,"_workspace");a(this,"_embedder");this._analytics=new AnalyticsService(this),this._cache=new CacheService(this),this._conf=new ConfService(this),this._directory=new DirectoryService(this),this._http=new HttpService(this),this._idiom=new IdiomService(this),this._rights=new RightService(this),this._session=new SessionService(this),this._share=new ShareService(this),this._video=new VideoService(this),this._workspace=new WorkspaceService(this),this._embedder=new EmbedderService(this)}initialize(){return this}analytics(){return this._analytics}audience(e,t){return new AudienceService(this,e,t)}cache(){return this._cache}conf(){return this._conf}directory(){return this._directory}http(){return this._http}idiom(){return this._idiom}resource(e,t){return t?ResourceService.findService({application:e,resourceType:t},this):ResourceService.findMainService({application:e},this)}behaviour(e,t){return SnipletsService.findBehaviour({application:e,resourceType:t},this)}rights(){return this._rights}session(){return this._session}share(){return this._share}video(){return this._video}workspace(){return this._workspace}embedder(){return this._embedder}}const ACTION={SEARCH:"search",CREATE:"create",CREATE_PUBLIC:"createPublic",OPEN:"open",EDIT:"edit",MANAGE:"manage",UPD_PROPS:"properties",COMMENT:"comment",DELETE:"delete",TRASH:"trash",RESTORE:"restore",MOVE:"move",COPY:"copy",EXPORT:"export",SHARE:"share",PRINT:"print",PAGES_LIST:"pages_list",DISTRIBUTE:"distribute",REGISTER:"register",PUBLISH:"publish",PUBLISH_MOODLE:"publish_moodle"},FOLDER={BIN:"bin",DEFAULT:"default"},BOOLEAN_FILTER={OWNER:"owner",SHARED:"shared",PUBLIC:"public",FAVORITE:"favorite"},SORT_ORDER={ASC:"asc",DESC:"desc"},SORT_BY={NAME:"name",MODIFY_DATE:"updatedAt",CREATED_AT:"createdAt",APPLICATION:"application",RESOURCE_TYPE:"resourceType"},odeServices=new OdeServices().initialize(),WIDGET_POSITION={LEFT:"left",RIGHT:"right"},isActionAvailable=(n,e)=>{const t=e==null?void 0:e.filter(s=>s.id===n&&s.available);return t&&t.length>0};class LastInfosWidget{constructor(e){this.context=e}get http(){return this.context.http()}loadInfos(e){return this.http.get("/actualites/infos/last/"+e)}getMaxResults(){return this.http.get("/userbook/preference/maxInfos").then(e=>e.preference?parseInt(e.preference):4)}setMaxResults(e){return this.http.putJson("/userbook/preference/maxInfos",`"${e}"`)}}const WIDGET_NAME={LAST_INFOS:"last-infos-widget",BIRTHDAY:"birthday",CALENDAR:"calendar-widget",CARNET:"carnet-de-bord",RECORD:"record-me",MOOD:"mood",MY_APPS:"my-apps",NOTES:"notes",RSS:"rss-widget",BOOKMARK:"bookmark-widget",QWANT:"qwant",QWANT_JUNIOR:"qwant-junior",AGENDA:"agenda-widget",CURSUS:"cursus-widget",MAXICOURS:"maxicours-widget",UNIVERSALIS:"universalis-widget",BRIEFME:"briefme-widget",SCHOOL:"school-widget"};return exports.ACTION=ACTION,exports.APP=APP$2,exports.BOOLEAN_FILTER=BOOLEAN_FILTER,exports.DocumentHelper=DocumentHelper,exports.ERROR_CODE=ERROR_CODE,exports.FOLDER=FOLDER,exports.LastInfosWidget=LastInfosWidget,exports.ReactionTypes=ReactionTypes,exports.ResourceService=ResourceService,exports.SORT_BY=SORT_BY,exports.SORT_ORDER=SORT_ORDER,exports.SnipletsService=SnipletsService,exports.StringUtils=StringUtils,exports.USER_PREFS=USER_PREFS,exports.WIDGET_NAME=WIDGET_NAME,exports.WIDGET_POSITION=WIDGET_POSITION,exports.isActionAvailable=isActionAvailable,exports.odeServices=odeServices,Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports}({},axios,utilities);
1
+ var T=Object.defineProperty;var D=(E,f,y)=>f in E?T(E,f,{enumerable:!0,configurable:!0,writable:!0,value:y}):E[f]=y;var a=(E,f,y)=>D(E,typeof f!="symbol"?f+"":f,y);this["@edifice"]=this["@edifice"]||{};this["@edifice"]["io/client"]=function(exports,axios,utilities){"use strict";const ReactionTypes=["REACTION_1","REACTION_2","REACTION_3","REACTION_4"],ERROR_CODE={SUCCESS:"0000",UNKNOWN:"0010",NOT_INITIALIZED:"0020",NOT_SUPPORTED:"0030",APP_NOT_FOUND:"0040",AGENT_NOT_FOUND:"0050",TRANSPORT_ERROR:"0060",TIME_OUT:"0070",MALFORMED_DATA:"0080",NOT_LOGGED_IN:"0090"},APP$2={ADMIN:"admin",ARCHIVE:"archive",AUTH:"auth",CAS:"cas",COMMUNICATION:"communication",CONVERSATION:"conversation",DIRECTORY:"directory",USERBOOK:"userbook",INFRA:"infra",PORTAL:"portal",TIMELINE:"timeline",WORKSPACE:"workspace",EXPLORER:"explorer",HOMEWORKS:"homeworks",VIDEO:"video",MINDMAP:"mindmap",SCRAPBOOK:"scrapbook",COLLABORATIVEWALL:"collaborativewall",WIKI:"wiki"},USER_PREFS={APPS:"apps",WIDGETS:"widgets",LANGUAGE:"language",AUTH_CONNECTOR_ACCESSED:"authenticatedConnectorsAccessed",CURSUS:"cursus",INFOTIP:"infotip",RGPD_COOKIES:"rgpdCookies"};class ServiceRegistry extends Map{register({application:e,resourceType:t},s){this.set(`${e}:main`,s),this.set(`${e}:${t}`,s)}findService(e,t){return this.lookupService(e,t)}findMainService({application:e},t){return this.lookupService({application:e,resourceType:"main"},t)}isRegistered({application:e,resourceType:t}){return this.get(`${e}:${t}`)!==void 0}lookupService({application:e,resourceType:t},s){const r=this.get(`${e}:${t}`);if(r===void 0)throw`Service not found: ${e}:${t}`;return r(s)}}const E=class E{constructor(e){a(this,"checkHttpResponse",e=>{if(this.http.latestResponse.status>=300)throw this.http.latestResponse.statusText;return e});this.context=e}get http(){return this.context.http()}async copy(e){const t=await this.http.post("/archive/duplicate",{application:e.application,resourceId:e.resourceId});return this.checkHttpResponse(t)}async publish(e){const t=new FormData;return t.append("title",e.title),t.append("cover",e.cover),t.append("coverName",e.cover.name),t.append("coverType",e.cover.type),t.append("teacherAvatar",e.teacherAvatar),t.append("teacherAvatarName",e.teacherAvatar.name||`teacherAvatar_${e.userId}`),t.append("teacherAvatarType",e.teacherAvatar.type),t.append("language",e.language),e.activityType.forEach(i=>{t.append("activityType[]",i)}),e.subjectArea.forEach(i=>{t.append("subjectArea[]",i)}),e.age.forEach(i=>{t.append("age[]",i.toString())}),t.append("description",e.description),e.keyWords.split(",").forEach(i=>{t.append("keyWords[]",i.trim())}),t.append("licence",e.licence),t.append("pdfUri",`${window.location.origin}${this.getPrintUrl(e.resourceEntId)}`),t.append("application",e.application?e.application:""),t.append("resourceId",e.resourceId),t.append("teacherSchool",e.userStructureName),await this.http.post("/appregistry/library/resource",t,{headers:{"Content-Type":"multipart/form-data"}})}async createContext(e){const t=await this.http.get("/explorer/context",{queryParams:this.toQueryParams(e)});return this.checkHttpResponse(t)}async searchContext(e){const t=await this.http.get("/explorer/resources",{queryParams:this.toQueryParams(e)});return this.checkHttpResponse(t)}async searchResource(e){const t=await this.http.get(`/explorer/resources/${e.id}`,{queryParams:this.getResourceParams(e)});return this.checkHttpResponse(t)}async createFolder(e){const t=await this.http.post("/explorer/folders",this.createFolderToBodyParams(e));return this.checkHttpResponse(t)}async updateFolder(e){const t=await this.http.put(`/explorer/folders/${e.folderId}`,this.createFolderToBodyParams(e));return this.checkHttpResponse(t)}async moveToFolder(e,t=!1){e.resourceIds=t?await this.mapAssetIdToIds({application:e.application,assetIds:e.resourceIds}):e.resourceIds;const s=await this.http.post(`/explorer/folders/${e.folderId}/move`,this.moveToBodyParams(e));return this.checkHttpResponse(s)}async listSubfolders(e){const t=await this.http.get(`/explorer/folders/${e}`);return this.checkHttpResponse(t)}async deleteAll(e,t=!1){e.resourceIds=t?await this.mapAssetIdToIds({application:e.application,assetIds:e.resourceIds}):e.resourceIds;const s=await this.http.deleteJson("/explorer",e);return this.checkHttpResponse(s)}async trashAll({resourceType:e,...t},s=!1){t.resourceIds=s?await this.mapAssetIdToIds({application:t.application,assetIds:t.resourceIds}):t.resourceIds;const r=await this.http.putJson("/explorer/trash",t);return this.checkHttpResponse(r)}async restoreAll({resourceType:e,...t},s=!1){t.resourceIds=s?await this.mapAssetIdToIds({application:t.application,assetIds:t.resourceIds}):t.resourceIds;const r=await this.http.putJson("/explorer/restore",t);return this.checkHttpResponse(r)}async mapAssetIdToIds({application:e,assetIds:t}){const s=await this.searchContext({application:e,pagination:{startIdx:0,pageSize:t.length+1},types:[],filters:{},asset_id:t});return t.map(r=>{const i=s.resources.find(o=>o.assetId===r);if(i===void 0)throw"explorer.assetid.notfound";return i.id})}async getThumbnailPath(e){if(typeof e>"u")return e;if(typeof e=="string")if(e.startsWith("blob:")){const t=await fetch(e).then(r=>r.blob());return`/workspace/document/${(await this.context.workspace().saveFile(t,{visibility:"protected",application:this.getApplication()}))._id}`}else return e;else return`/workspace/document/${(await this.context.workspace().saveFile(e,{visibility:"protected",application:this.getApplication()}))._id}`}toQueryParams(e){const t={application:e.application,start_idx:e.pagination.startIdx,page_size:e.pagination.pageSize,trashed:e.trashed};if(e.types.length>0&&(t.resource_type=e.types[0]),e.orders&&Object.entries(e.orders).length){const[[s,r]]=Object.entries(e.orders);t.order_by=`${s}:${r}`}return e.filters&&Object.assign(t,e.filters),typeof e.search=="string"&&(t.search=e.search),typeof e.asset_id<"u"&&(t.asset_id=[...e.asset_id]),typeof e.id<"u"&&(t.id=e.id),t}getResourceParams(e){return{application:e.application}}createFolderToBodyParams(e){return{application:e.application,resourceType:e.type,parentId:e.parentId,name:e.name}}moveToBodyParams(e){return{application:e.application,resourceType:this.getResourceType(),resourceIds:e.resourceIds,folderIds:e.folderIds}}};a(E,"registry",new ServiceRegistry),a(E,"register",E.registry.register.bind(E.registry)),a(E,"findService",E.registry.findService.bind(E.registry)),a(E,"findMainService",E.registry.findMainService.bind(E.registry)),a(E,"isRegistered",E.registry.isRegistered.bind(E.registry));let ResourceService=E;const APP$1="scrapbook",RESOURCE$1="scrapbook";class ScrapbookResourceService extends ResourceService{create(e){throw new Error("Method not implemented.")}async update(e){const t=await this.getThumbnailPath(e.thumbnail),s=await this.http.put(`/scrapbook/${e.entId}`,{trashed:e.trashed?1:0,title:e.name,icon:t,subTitle:e.description});return this.checkHttpResponse(s),{thumbnail:t,entId:e.entId}}getResourceType(){return RESOURCE$1}getApplication(){return APP$1}getFormUrl(e){return e?`/scrapbook?folderid=${e}#/create-scrapbook/`:"/scrapbook#/create-scrapbook/"}getViewUrl(e){return`/scrapbook#/view-scrapbook/${e}`}getPrintUrl(e){return`/scrapbook/print#/print-scrapbook/${e}`}getEditUrl(e){return`/scrapbook#/edit-scrapbook/${e}`}getExportUrl(e){return`/scrapbook/exportHtml/${e}`}}ResourceService.register({application:RESOURCE$1,resourceType:RESOURCE$1},n=>new ScrapbookResourceService(n));const APP="homeworks",RESOURCE="homeworks";class HomeworksResourceService extends ResourceService{async create(e){const t=await this.getThumbnailPath(e.thumbnail),s=await this.http.post("/homeworks",{title:e.name,thumbnail:t,description:e.description,repeats:e.repeats});return this.checkHttpResponse(s),{thumbnail:t,entId:s._id}}async update(e){const t=await this.getThumbnailPath(e.thumbnail),s=await this.http.put(`/homeworks/${e.entId}`,{title:e.name,thumbnail:t,repeats:e.repeats});return this.checkHttpResponse(s),{thumbnail:t,entId:e.entId}}getResourceType(){return RESOURCE}getApplication(){return APP}getFormUrl(e){return e?`/homeworks?folderid=${e}#/create-homeworks/`:"/homeworks#/create-homeworks/"}getViewUrl(e){return`/homeworks#/view-homeworks/${e}`}getPrintUrl(e){return`/homeworks/print#/print-homeworks/${e}`}getEditUrl(e){return`/homeworks#/edit-homeworks/${e}`}getExportUrl(){throw new Error("Export not implemented.")}}ResourceService.register({application:RESOURCE,resourceType:RESOURCE},n=>new HomeworksResourceService(n));let ATTag;class AnalyticsService{constructor(n){this.context=n}get conf(){return this.context.conf()}get http(){return this.context.http()}get session(){return this.context.session()}async trackPageLoad(n,e){const[t]=await Promise.all([this.getXitiConfig(e.name.toLowerCase()),this.loadXitiScript()]);if(!t||!ATInternet)return;let s=t.LIBELLE_SERVICE.default||null;for(const r in t.LIBELLE_SERVICE)if(r!=="default"&&n.indexOf(r)>=0){s=t.LIBELLE_SERVICE[r];break}ATTag=new ATInternet.Tracker.Tag({site:t.STRUCT_ID}),ATTag.setProps({SERVICE:s,TYPE:t.TYPE,OUTIL:t.OUTIL,UAI:t.STRUCT_UAI,PROJET:t.PROJET,EXPLOITANT:t.EXPLOITANT,PLATEFORME:t.PLATFORME,PROFIL:t.PROFILE},!0),ATTag.identifiedVisitor.set({id:t.ID_PERSO,category:t.PROFILE}),ATTag.page.set({name:(e==null?void 0:e.prefix)==="userbook"?"directory":e==null?void 0:e.prefix,chapter1:"",chapter2:"",chapter3:"",level2:t.STRUCT_UAI}),ATTag.dispatch()}async getXitiConfig(n){const[e,t]=await Promise.all([this.http.get("/analyticsConf"),this.http.get("/xiti/config")]);if(!(e!=null&&e.type))throw ERROR_CODE.MALFORMED_DATA;return t!=null&&t.active&&(e.xiti=await this.getXitiTrackingParams(t,n)),e.xiti}async loadXitiScript(){if(typeof ATInternet>"u"){const scriptPath="/xiti/public/js/lib/smarttag_ENT.js",response=await this.http.get(scriptPath,{headers:{Accept:"application/javascript"}});if(this.http.latestResponse.status!=200)throw"Error while loading XiTi script";eval(response)}}async getXitiTrackingParams(n,e){if(!n.structureMap||!e)return;const t=await this.session.getUser(),s=await this.session.getUserProfile();let r;if(!(t!=null&&t.structures))return;for(const h of t.structures){const l=n.structureMap[h];if(l&&l.collectiviteId&&l.UAI){r=l;break}}if(!r||!r.active)return;const i=await this.conf.getPublicConf(e);if(!i)return;const o=i.xiti;if(!o||!o.LIBELLE_SERVICE||!r.UAI)return;function u(h){let l="";for(let g=0;g<h.length;g++)l+=h.charCodeAt(g);return l}const c={Student:"ELEVE",Teacher:"ENSEIGNANT",Relative:"PARENT",Personnel:"ADMIN_VIE_SCOL_TECH",Guest:"AUTRE"};return{LIBELLE_SERVICE:o.LIBELLE_SERVICE,TYPE:o.OUTIL?"TIERS":"NATIF",OUTIL:o.OUTIL?o.OUTIL:"",STRUCT_ID:r.collectiviteId,STRUCT_UAI:r.UAI,PROJET:r.projetId?r.projetId:n.ID_PROJET,EXPLOITANT:n.ID_EXPLOITANT,PLATFORME:r.plateformeId?r.plateformeId:n.ID_PLATEFORME,ID_PERSO:u(t.userId),PROFILE:s&&s.length>0?c[s[0]]??"":""}}}class ReactionsService{constructor(e,t,s){this.context=e,this.module=t,this.resourceType=s}get http(){return this.context.http()}async loadAvailableReactions(){try{const{"reaction-types":e}=await this.context.conf().getPublicConf("audience");return Array.isArray(e)?e:void 0}catch{console.error("Audience configuration not found");return}}async loadReactionSummaries(e){const t=await this.http.get(`/audience/reactions/${this.module}/${this.resourceType}?resourceIds=${e.join(",")}`);return this.http.isResponseError()?{}:t.reactionsByResource}async loadReactionDetails(e,t,s){const r=await this.http.get(`/audience/reactions/${this.module}/${this.resourceType}/${e}?page=${t}&size=${s}`);return this.http.isResponseError()?void 0:r}async deleteReaction(e){await this.http.delete(`/audience/reactions/${this.module}/${this.resourceType}/${e}`)}async updateReaction(e,t){await this.http.putJson(`/audience/reactions/${this.module}/${this.resourceType}`,{resourceId:e,reactionType:t})}async createReaction(e,t){await this.http.postJson(`/audience/reactions/${this.module}/${this.resourceType}`,{resourceId:e,reactionType:t})}}class ViewsService{constructor(e,t,s){this.context=e,this.module=t,this.resourceType=s}get http(){return this.context.http()}async getCounters(e){const t=await this.http.get(`/audience/views/count/${this.module}/${this.resourceType}?resourceIds=${e.join(",")}`);return this.http.isResponseError()?{}:t}async getDetails(e){const t=await this.http.get(`/audience/views/details/${this.module}/${this.resourceType}/${e}`);return this.http.isResponseError()?void 0:t}trigger(e){return this.http.post(`/audience/views/${this.module}/${this.resourceType}/${e}`)}}class AudienceService{constructor(e,t,s){this.context=e,this.module=t,this.resourceType=s}get views(){return new ViewsService(this.context,this.module,this.resourceType)}get reactions(){return new ReactionsService(this.context,this.module,this.resourceType)}}const globalCache={},mutexPromise={};class CacheService{constructor(e){this.context=e}get http(){return this.context.http()}async fromCacheIfPossible(e,t,s){if(mutexPromise[e]&&await mutexPromise[e],globalCache[e])return globalCache[e];try{const r=t();mutexPromise[e]=r;const i=await r;return s(i)&&(globalCache[e]=i),i}catch(r){throw console.error(`Failed to retrieve value for: ${e}`,r),r}}clearCache(e){if(e)delete globalCache[e];else for(const t in globalCache)globalCache.hasOwnProperty(t)&&delete globalCache[t]}async httpGet(e,t){return this.fromCacheIfPossible(e,async()=>{const s=await this.http.get(e,t),r={...this.http.latestResponse};return{value:s,response:r}},({response:s})=>!(s.status<200||s.status>=300))}async httpGetJson(e,t){const{response:s,value:r}=await this.httpGet(e,t);if(s.status<200||s.status>=300)throw`Bad http status (${s.status}) for url: ${e}`;return r}}class ConfService{constructor(e){a(this,"Platform",{deploymentTag:"",cdnDomain:""});this.context=e}get http(){return this.context.http()}get cache(){return this.context.cache()}get cdnDomain(){return this.Platform.cdnDomain}async getConf(e){const[t,s]=await Promise.all([this.getThemeConf(),this.getApplicationsList()]),[r,i]=await Promise.all([this.getTheme({conf:t,publicTheme:s===void 0}),this.getWebAppConf({app:e,applications:s??[]})]);return{app:e,applications:s??[],conf:t,currentApp:i,theme:r}}async getPublicConf(e){const{response:t,value:s}=await this.cache.httpGet(`/${e}/conf/public`,{queryParams:{_:this.Platform.deploymentTag}});if(t.status<200||t.status>=300)throw ERROR_CODE.APP_NOT_FOUND;return s}getCdnUrl(){}async savePreference(e,t){this.http.putJson(`/userbook/preference/${e}`,t)}async getPreference(e){const t=await this.http.get(`/userbook/preference/${e}`);return this.http.isResponseError()||typeof t=="string"?{}:JSON.parse(t.preference)}async getThemeConf(e){return await this.http.getScript("/assets/theme-conf.js",{queryParams:{v:e}},"exports.conf")}async getApplicationsList(){const e=await this.http.get("/applications-list");if(!(this.http.isResponseError()||typeof e=="string"))return e.apps}async getWebAppConf({app:e,applications:t}){return t.find(r=>{if(r!=null&&r.prefix)return(r==null?void 0:r.prefix.replace("/",""))===e})}async getTheme({version:e,conf:t,publicTheme:s}){const{value:r}=await this.cache.httpGet("/theme",{queryParams:{_:e}}),i=s?null:r,o=t==null?void 0:t.overriding.find(d=>i===null||d.child===i.themeName),u=(i==null?void 0:i.skinName)||o.skins[0],c=(i==null?void 0:i.skin)||`/assets/themes/${o.child}/skins/${u}/`,h=o.skins,l=o.bootstrapVersion.split("-").slice(-1)[0],g=o.parent==="panda";return{basePath:`${this.cdnDomain}${c}../../`,bootstrapVersion:l,is1d:g,logoutCallback:(i==null?void 0:i.logoutCallback)||"/",skin:o.child,skinName:u,skins:h,themeName:o.child,themeUrl:c,npmTheme:o.npmTheme??void 0}}async getLogoutCallback(e){const{response:t,value:s}=await this.cache.httpGet("/theme",{queryParams:{_:e}});if(t.status<200||t.status>=300)throw ERROR_CODE.NOT_LOGGED_IN;return s.logoutCallback}}class DirectoryService{constructor(e){this.odeServices=e}get http(){return this.odeServices.http()}get cache(){return this.odeServices.cache()}getAvatarUrl(e,t,s="100x100"){return t==="user"?`/userbook/avatar/${e}?thumbnail=${s}`:"/assets/img/illustrations/group-avatar.svg"}getDirectoryUrl(e,t){return t==="user"?`/userbook/annuaire#/${e}`:`/userbook/annuaire#/group-view/${e}`}async getBookMarks(){return(await this.cache.httpGetJson("/directory/sharebookmark/all")).map(({id:t,name:s})=>({id:t,displayName:s,members:[]}))}async getBookMarkById(e){const{groups:t,id:s,name:r,users:i}=await this.http.get(`/directory/sharebookmark/${e}`);return{id:s,displayName:r,groups:t.map(({name:o,id:u})=>({displayName:o,id:u})),users:i.map(({displayName:o,id:u,profile:c})=>({profile:c,displayName:o,firstName:"",lastName:"",login:"",id:u}))}}async saveBookmarks(e,{bookmarks:t,groups:s,users:r}){this.cache.clearCache("/directory/sharebookmark/all");const i=r.map(d=>typeof d=="string"?d:d.id),o=s.map(d=>typeof d=="string"?d:d.id),u=t.map(async d=>{if(typeof d=="string"){const{displayName:p,groups:m,id:R,users:A}=await this.getBookMarkById(d),w=A.map(v=>v.id),C=m.map(v=>v.id);return{displayName:p,id:R,members:[...C,...w]}}else return Promise.resolve(d)}),h=(await Promise.all(u)).map(d=>d.members).reduce((d,p)=>[...d,...p],[]),l={name:e,members:[...i,...o,...h]},{id:g}=await this.http.postJson("/directory/sharebookmark",l);return{id:g,displayName:e,members:l.members}}}class EmbedderService{constructor(e){this.context=e}get http(){return this.context.http()}async getDefault(){return this.http.get("/infra/embed/default")}async getCustom(){return this.http.get("/infra/embed/custom")}getProviderFromUrl(e,t){for(const s of e)if(this.isUrlFromProvider(t,s))return s}urlIsFromPattern(e,t){const s=new RegExp("[^{}]+(?=(?:[^{}]*{[^}]*})*[^}]*$)","g"),r=new RegExp("{[^}]*}","g");let i=!0;const o=t.match(s)||[],u=[];return(t.match(r)||[]).forEach((h,l)=>{h.includes("ignore")||u.push(o[l])}),u.forEach(h=>{if(!e.includes(h)){i=!1;return}}),i}isUrlFromProvider(e,t){typeof t.url=="string"&&(t.url=[t.url]);for(const s of t.url)if(this.urlIsFromPattern(e,s))return!0;return!1}getEmbedCodeForProvider(e,t){for(const s of e.url)if(this.urlIsFromPattern(t,s)){const r=new RegExp("{[a-zA-Z0-9_.]+}","g"),i=s.match(r)||[];let o=e.embed;for(const u of i){let c=s.split(u)[0];const h=c.split("}");h.length>1&&(c=h[h.length-1]);let l=t.split(c)[1];if(!l)continue;const g=s.split(u)[1].split("{")[0];g&&(l=l.split(g)[0]);const d=new RegExp("\\"+u.replace(/}/,"\\}"),"g");o=o.replace(d,l)}return o}return""}}class Subscription{constructor(e,t){a(this,"revoke");this._channel=e,this.revoke=this.setReceiver(s=>t==null?void 0:t(s.data))}setReceiver(e){var t;return(t=this._channel)==null||t.addEventListener("message",e),()=>{this._channel&&(this._channel.removeEventListener("message",e),this._channel.close(),delete this._channel)}}}class Subject{constructor(){a(this,"publishChannels",new Map)}getChannelName(e){return"Subject:"+e}getPublishChannel(e){const t=this.getChannelName(e);let s=this.publishChannels.get(t);return s||(s=this.newChannel(e),this.publishChannels.set(t,s)),s}newChannel(e){const t=this.getChannelName(e),s=new BroadcastChannel(t);return s.addEventListener("messageerror",r=>console.log(r.data)),s}publish(e,t){typeof e=="string"&&this.getPublishChannel(e).postMessage(t)}subscribe(e,t){if(typeof e=="string"){const s=this.newChannel(e);return new Subscription(s,t)}else return new Subscription}}const ASYNC_DATA_NAME={SESSION_READY:"sessionReady",LANG_READY:"langReady",SKIN_READY:"skinReady",OVERRIDE_READY:"overrideReady",APPCONF_READY:"appConfReady"};class Promisified{constructor(){a(this,"_resolution");a(this,"_rejection");a(this,"_promise",new Promise((e,t)=>{this._resolution=e,this._rejection=t}))}get promise(){return this._promise}resolve(e){this._resolution&&this._resolution(e)}reject(e){this._rejection&&this._rejection(e)}}class NotifyFramework{constructor(){a(this,"promises",{});a(this,"subject",new Subject)}asyncData(e){return typeof this.promises[e]>"u"&&(this.promises[e]=new Promisified),this.promises[e]}onSessionReady(){return this.asyncData(ASYNC_DATA_NAME.SESSION_READY)}onLangReady(){return this.asyncData(ASYNC_DATA_NAME.LANG_READY)}onSkinReady(){return this.asyncData(ASYNC_DATA_NAME.SKIN_READY)}onOverridesReady(){return this.asyncData(ASYNC_DATA_NAME.OVERRIDE_READY)}onAppConfReady(){return this.asyncData(ASYNC_DATA_NAME.APPCONF_READY)}promisify(){return new Promisified}events(){return this.subject}}const notify=new NotifyFramework,bundle={},promises={},defaultDiacriticsRemovalMap=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];class IdiomService{constructor(e){this.context=e}get http(){return this.context.http()}async getIdiom(e,t){await Promise.all([this.addBundlePromise(e,"/i18n"),this.addBundlePromise(e,`/${t}/i18n`)])}translate(e,t){e=e??"";let s=bundle[e]===void 0?e:bundle[e];if(t&&typeof t=="object")for(let r in t)typeof t[r]<"u"&&(s=s.replace(new RegExp("\\${"+r+"}","g"),""+t[r]));return s}addBundlePromise(e,t){return this.loadBundlePromise(e,t)}addBundle(e,t,s){this.loadBundle(e,t,s)}loadBundlePromise(e,t){return this.loadBundle(e,t),promises[t]}loadBundle(e,t,s){const r=promises[t];if(r)s&&r.then(s).catch(s);else{const i=new Promisified;promises[t]=i.promise;const o={};e&&(o["Accept-Language"]=e),this.http.get(t,{headers:o}).then(u=>{Object.assign(bundle,u),typeof s=="function"&&s(),i.resolve()}).catch(u=>{typeof s=="function"&&s(),i.reject()})}}addTranslations(e,t){notify.onLangReady().promise.then(s=>{this.loadBundle(s,e+"/"+s+".json",t)})}addAllTranslations(e){return e&&e.length>0?notify.onLangReady().promise.then(t=>Promise.all(e.map(s=>this.loadBundlePromise(t,s+"/"+t+".json")))).then(()=>{}):Promise.reject()}addKeys(e){for(var t in e)typeof bundle[t]!="string"&&(bundle[t]=e[t])}removeAccents(e){for(var t=0;t<defaultDiacriticsRemovalMap.length;t++)e=e.replace(defaultDiacriticsRemovalMap[t].letters,defaultDiacriticsRemovalMap[t].base);return e}}class AbstractBehaviourService{constructor(e){a(this,"_cache");this.context=e,this._cache=new CacheService(this.context)}getApplication(){return this.APP}getResourceType(){return this.RESOURCE}httpGet(e,t){return this._cache.httpGetJson(e,t)}dataToResource({modified:e,...t}){const s=typeof e=="string"?e:e!=null&&e.$date?""+e.$date:"";return{application:this.RESOURCE,name:t.title,creatorId:t.owner,creatorName:t.ownerName,thumbnail:t.icon,assetId:t._id,modifiedAt:s,shared:t.shared,path:t.path}}}class ActualitesBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","actualites");a(this,"RESOURCE","actualites")}async loadResources(){return(await this.httpGet("/actualites/linker/infos")).map(s=>{var r;return s.thread_icon?r=s.thread_icon+"?thumbnail=48x48":r="/img/icons/glyphicons_036_file.png",this.dataToResource({title:s.title+" ["+s.thread_title+"]",ownerName:s.username,owner:s.owner,icon:r,path:"/actualites#/view/thread/"+s.thread_id+"/info/"+s._id,_id:`${s.thread_id}#${s._id}`,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified})})}}class BlogBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","blog");a(this,"RESOURCE","blog")}loadResources(){return new Promise(async(t,s)=>{try{const r=await this.httpGet("/blog/linker"),i=[];r.forEach(o=>{o.thumbnail?o.thumbnail=o.thumbnail+"?thumbnail=48x48":o.thumbnail="/img/illustrations/blog.svg";const u=o.fetchPosts.map(c=>this.dataToResource({owner:o.author.userId,ownerName:o.author.username,title:c.title+" ["+o.title+"]",_id:`${o._id}#${c._id}`,icon:o.thumbnail,path:`/blog/id/${o._id}/post/${c._id}`,shared:!!(o.shared&&o.shared.length>=0),modified:o.modified}));i.push(...u)}),t(i)}catch(r){s(r)}})}}class CollaborativewallBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","collaborativewall");a(this,"RESOURCE","collaborativewall")}async loadResources(){return(await this.httpGet("/collaborativewall/list/all")).map(s=>this.dataToResource({title:s.name,ownerName:s.owner.displayName,owner:s.owner.userId,icon:s.icon?s.icon:"/img/illustrations/collaborative-wall-default.png",path:"/collaborativewall#/view/"+s._id,_id:s._id,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified}))}}class CommunityBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","community");a(this,"RESOURCE","community")}async loadResources(){return(await this.httpGet("/community/listallpages")).map(s=>{var r;return typeof s.thumbnail>"u"||s.thumbnail===""?r="/img/icons/glyphicons_036_file.png":r=s.thumbnail+"?thumbnail=48x48",this.dataToResource({title:s.name,icon:r,path:"/community#/view/"+s.id,_id:s.id,owner:"",ownerName:"",shared:!!(s.shared&&s.shared.length>=0),modified:s.name})})}}class ExercizerBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","exercizer");a(this,"RESOURCE","exercizer")}async loadResources(){return(await this.httpGet("/exercizer/subjects-scheduled")).map(s=>{const r=s.picture?s.picture+"?thumbnail=48x48":"/img/illustrations/exercizer.svg";let i,o=!1,u=JSON.parse(s.scheduled_at);return u.groupList.length>0?(o=!0,i=u.groupList[0].name):u.userList.length>0?(o=!0,i=u.userList[0].name):i="",u.groupList.length+u.userList.length>1&&(i+="..."),this.dataToResource({title:s.title,owner:s.owner,ownerName:i,icon:r,path:"/exercizer#/linker/"+s.id,_id:""+s.id,shared:o,modified:s.modified})})}}class FormulaireBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","formulaire");a(this,"RESOURCE","formulaire")}async loadResources(){return(await this.httpGet("/formulaire/forms/linker")).map(s=>(s.picture||(s.picture="/formulaire/public/img/logo.svg"),this.dataToResource({_id:""+s.id,icon:s.picture,title:s.title,ownerName:s.owner_name,owner:s.owner_id,path:s.is_public?`${window.location.origin}/formulaire-public#/form/${s.public_key}`:`${window.location.origin}/formulaire#/form/${s.id}/${s.rgpd?"rgpd":"new"}`,shared:!!(s.shared&&s.shared.length>=0),modified:""+s.date_modification})))}}class ForumBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","forum");a(this,"RESOURCE","forum")}async loadResources(){return(await this.httpGet("/forum/categories")).map(s=>this.dataToResource({_id:s._id,title:s.name,icon:s.icon||"/img/illustrations/forum.svg",path:"/forum#/view/"+s._id,ownerName:s.owner.displayName,owner:s.owner.userId,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified}))}}class HomeworksBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","homeworks");a(this,"RESOURCE","homeworks")}async loadResources(){return(await this.httpGet("/homeworks/list")).filter(t=>t.owner&&t.trashed===0).map(t=>this.dataToResource({title:t.title,ownerName:t.owner.displayName,owner:t.owner.userId,icon:t.thumbnail||"/img/illustrations/homeworks.svg",path:"/homeworks#/view-homeworks/"+t._id,_id:""+t._id,shared:typeof t.shared<"u",modified:t.modified}))}}class MagnetoBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","magneto");a(this,"RESOURCE","magneto")}async loadResources(){const{all:t}=await this.httpGet("/magneto/boards/editable");return t.map(s=>this.dataToResource({_id:s._id,title:s.title,icon:s.imageUrl,owner:s.ownerId,ownerName:s.ownerName,path:`/magneto#/board/${s._id}/view`,shared:!!(s.shared&&s.shared.length>=0),modified:""+s.modificationDate}))}}class MindmapBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","mindmap");a(this,"RESOURCE","mindmap")}async loadResources(){return(await this.httpGet("/mindmap/list/all")).map(s=>this.dataToResource({title:s.name,ownerName:s.owner.displayName,owner:s.owner.userId,icon:s.thumbnail||"/img/illustrations/mindmap-default.png",path:"/mindmap#/view/"+s._id,_id:s._id,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified}))}}class PagesBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","pages");a(this,"RESOURCE","pages")}async loadResources(){const t=await this.httpGet("/pages/list/all"),s=[];return t.forEach(r=>{var o;const i=r.thumbnail?r.thumbnail+"?thumbnail=48x48":"/img/illustrations/pages.svg";s.push(this.dataToResource({title:r.title,owner:r.owner.userId,ownerName:r.owner.displayName,icon:i,path:"/pages#/website/"+r._id,_id:r._id,shared:typeof r.shared<"u",modified:r.modified})),(o=r.pages)==null||o.forEach(u=>{s.push(this.dataToResource({title:u.title,owner:r.owner.userId,ownerName:r.owner.displayName,icon:i,path:"/pages#/website/"+r._id+"/"+u.titleLink,_id:r._id+"/"+u.titleLink,shared:typeof r.shared<"u",modified:r.modified}))})}),s}}class PollBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","poll");a(this,"RESOURCE","poll")}async loadResources(){return(await this.httpGet("/poll/list/all")).map(s=>{const r=s.icon?s.icon+"?thumbnail=48x48":"/img/icons/glyphicons_036_file.png";return this.dataToResource({title:s.question,ownerName:s.owner.displayName,icon:r,path:"/poll#/view/"+s._id,_id:s._id,owner:s.owner.userId,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified})})}}class ScrapbookBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","scrapbook");a(this,"RESOURCE","scrapbook")}async loadResources(){return(await this.httpGet("/scrapbook/list/all")).map(s=>{const r=s.icon||"/img/illustrations/scrapbook.svg";return this.dataToResource({title:s.name,owner:s.owner.userId,ownerName:s.owner.displayName,icon:r,path:"/scrapbook#/view-scrapbook/"+s._id,_id:s._id,shared:!!(s.shared&&s.shared.length>=0),modified:s.modified})})}}class TimelinegeneratorBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","timelinegenerator");a(this,"RESOURCE","timelinegenerator")}loadResources(){return new Promise(async(t,s)=>{try{const i=(await this.httpGet("/timelinegenerator/timelines")).map(o=>{const u=o.icon||"/img/illustrations/timeline-default.png";return this.dataToResource({title:o.headline,ownerName:o.owner.displayName,owner:o.owner.userId,icon:u,path:"/timelinegenerator#/view/"+o._id,_id:o._id,shared:typeof o.shared<"u",modified:o.modified})});t(i)}catch(r){s(r)}})}}class WikiBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","wiki");a(this,"RESOURCE","wiki")}async loadResources(){return(await this.httpGet("/wiki/listallpages?visible=true")).map(s=>s.pages.map(r=>{let i;return typeof s.thumbnail>"u"||s.thumbnail===""?i="/img/icons/glyphicons_036_file.png":i=s.thumbnail+"?thumbnail=48x48",this.dataToResource({title:r.title+" ["+s.title+"]",ownerName:s.owner.displayName,owner:s.owner.userId,icon:i,path:"/wiki#/view/"+s._id+"/"+r._id,_id:`${s._id}#${r._id}`,shared:typeof s.shared<"u",modified:r.modified})})).flat()}}class WorkspaceBehaviour extends AbstractBehaviourService{constructor(){super(...arguments);a(this,"APP","workspace");a(this,"RESOURCE","workspace")}loadResources({search:t,asset_id:s}){return new Promise(async(r,i)=>{try{let o="/workspace/documents?filter=all&hierarchical=true";s&&s.length?o+=`&search=${t}`:t&&t.length&&(o+=`&search=${t}`);const c=(await this.httpGet(o)).filter(h=>!h.deleted).map(h=>{const l=h.metadata["content-type"]&&h.metadata["content-type"].indexOf("image")!==-1?`/workspace/document/${h._id}?thumbnail=120x120`:"/img/icons/unknown-large.png";return this.dataToResource({title:h.name,ownerName:h.ownerName,owner:h.owner,icon:l,path:`/workspace/document/${h._id}`,_id:h._id,shared:!!(h.shared&&h.shared.length>=0),modified:h.modified})});r(c)}catch(o){i(o)}})}}const f=class f{static async initialize(e,t){const s=e.http();if(!this.resourceProducingApps.length){this.resourceProducingApps=[t,"workspace"];try{const[r,i]=await Promise.all([s.get("/resources-applications"),e.session().getUser()]);i!=null&&i.apps&&(r!=null&&r.length)&&(this.resourceProducingApps=r.filter(o=>i.apps.some(u=>u.address.includes(o))))}catch(r){console.warn("Failed to load resource-producing apps:",r)}}return this.resourceProducingApps}static async registerBehaviours(e){this.resourceProducingApps.forEach(t=>{const s={application:e,resourceType:t};this.registry.register(s,r=>this.serviceFor(r,e,t))})}static serviceFor(e,t,s){let r;switch(s){case"timelinegenerator":r=new TimelinegeneratorBehaviour(e);break;case"workspace":r=new WorkspaceBehaviour(e);break;case"blog":r=new BlogBehaviour(e);break;case"actualites":r=new ActualitesBehaviour(e);break;case"wiki":r=new WikiBehaviour(e);break;case"pages":r=new PagesBehaviour(e);break;case"poll":r=new PollBehaviour(e);break;case"community":r=new CommunityBehaviour(e);break;case"mindmap":r=new MindmapBehaviour(e);break;case"forum":r=new ForumBehaviour(e);break;case"homeworks":r=new HomeworksBehaviour(e);break;case"scrapbook":r=new ScrapbookBehaviour(e);break;case"collaborativewall":r=new CollaborativewallBehaviour(e);break;case"exercizer":r=new ExercizerBehaviour(e);break;case"formulaire":r=new FormulaireBehaviour(e);break;case"magneto":r=new MagnetoBehaviour(e);break;default:throw ERROR_CODE.NOT_SUPPORTED}return r.APP=t,r}};a(f,"registry",new ServiceRegistry),a(f,"findBehaviour",f.registry.findService.bind(f.registry)),a(f,"hasBehaviour",f.registry.isRegistered.bind(f.registry)),a(f,"resourceProducingApps",[]);let SnipletsService=f;class RightService{constructor(e){this.context=e}get session(){return this.context.session()}parseResourceRight(e){const t=e.split(":");if(t.length===2){if(t[0]==="creator")return{id:t[1],right:"creator",type:"creator"}}else return t.length===3?{id:t[1],right:t[2],type:t[0]}:void 0}parseResourceRights(e){return e.map(s=>this.parseResourceRight(s)).filter(s=>s!==void 0)}hasResourceRight({id:e,groupIds:t},s,r){const i=r.map(o=>typeof o=="string"?this.parseResourceRight(o):o).filter(o=>o!==void 0);for(const o of i){if(o.id===e&&o.type==="creator")return!0;if(o.id===e&&o.type==="user"&&o.right===s)return!0;if(t.includes(o.id)&&o.type==="group"&&o.right===s)return!0}return!1}async sessionHasResourceRight(e,t){try{const s=await this.session.getUser();return!!s&&this.hasResourceRight({groupIds:s.groupsIds,id:s.userId},e,t)}catch(s){return console.error(`Unexpected error ${s} in sessionHasResourceRight()`),!1}}async sessionHasAtLeastOneResourceRight(e,t){for(const s of e)if(await this.sessionHasResourceRight(s,t))return!0;return!1}async sessionHasResourceRightForEachList(e,t){let s=0;for(const r of t)await this.sessionHasResourceRight(e,r)&&s++;return s===t.length}async sessionHasAtLeastOneResourceRightForEachList(e,t){for(const s of e){let r=0;for(const i of t)await this.sessionHasResourceRight(s,i)&&r++;if(r===t.length)return!0}return!1}hasWorkflowRight(e,t){return t.findIndex(s=>s===e)!==-1}async sessionHasWorkflowRight(e){try{const t=await this.session.getUser();return!!t&&this.hasWorkflowRight(e,t.authorizedActions.map(s=>s.name))}catch(t){return console.error(`Unexpected error ${t} in sessionHasWorkflowRight()`),!1}}async sessionHasWorkflowRights(e){const t={};try{const s=await this.session.getUser();for(const r of e)t[r]=!!s&&this.hasWorkflowRight(r,s.authorizedActions.map(i=>i.name))}catch(s){console.error(`Unexpected error ${s} in sessionHasWorkflowRights()`);for(const r of e)t[r]=!1}return t}}class SessionService{constructor(e){this.context=e}get http(){return this.context.http()}get cache(){return this.context.cache()}get conf(){return this.context.conf()}onLogout(){this.cache.clearCache()}onRefreshSession(){this.cache.clearCache()}async getSession(){const e=await this.getUser(),[t,s,r,i,o]=await Promise.all([this.getCurrentLanguage(e),this.latestQuotaAndUsage(e),this.loadDescription(e),this.getUserProfile(),this.getBookmarks(e)]);return{user:e,quotaAndUsage:s,currentLanguage:t,userDescription:r,userProfile:i,bookmarkedApps:o}}login(e,t,s,r){const i=new FormData;return i.append("email",e),i.append("password",t),typeof s<"u"&&i.append("rememberMe",""+s),typeof r<"u"&&i.append("secureLocation",""+r),this.http.post("/auth/login",i,{headers:{"content-type":"application/x-www-form-urlencoded"}}).finally(()=>{switch(this.http.latestResponse.status){case 200:throw ERROR_CODE.MALFORMED_DATA}})}async logout(){const e=await this.conf.getLogoutCallback();return this.http.get("/auth/logout?callback="+e).finally(()=>{})}async latestQuotaAndUsage(e){const t={quota:0,storage:0};if(!e)return t;try{return await this.http.get(`/workspace/quota/user/${e==null?void 0:e.userId}`)}catch(s){return console.error(s),t}}async getCurrentLanguage(e){const t=(e==null?void 0:e.sessionMetadata)&&(e==null?void 0:e.sessionMetadata.userId);try{let s;return t?s=await this.loadUserLanguage():s=await this.loadDefaultLanguage(),s}catch(s){console.error(s)}}async loadUserLanguage(){try{const e=await this.http.get("/userbook/preference/language");return JSON.parse(e.preference)["default-domain"]}catch{return await this.loadDefaultLanguage()}}async loadDefaultLanguage(){return(await this.cache.httpGetJson("/locale")).locale}async getUser(){const{response:e,value:t}=await this.cache.httpGet("/auth/oauth2/userinfo");if(!(e.status<200||e.status>=300)&&typeof t=="object")return t;throw ERROR_CODE.NOT_LOGGED_IN}hasWorkflow({workflowName:e,user:t}){return e===void 0||(t==null?void 0:t.authorizedActions.findIndex(s=>s.name===e))!==-1}async loadDescription(e){if(!e)return{};try{const[t,s]=await Promise.all([this.getUserProfile({options:{requestName:"refreshAvatar"}}),this.http.get("/directory/userbook/"+(e==null?void 0:e.userId))]);return{...s,profiles:t}}catch(t){return console.error(t),{}}}async getBookmarks(e){if(!e)return[];const t=await this.http.get("/userbook/preference/apps");t.preference||(t.preference=null);const s=JSON.parse(t.preference);let r;r=s,r||(r={bookmarks:[],applications:[]});const i=[];return r.bookmarks.forEach(o=>{const u=((e==null?void 0:e.apps)||[]).find(c=>c.name===o);if(u){const c=Object.assign({},u);i.push(c)}}),i}async getUserProfile(e={}){var c,h;const{options:t={},params:s={}}=e,r=new URLSearchParams(s).toString(),i=`/userbook/api/person${r?`?${r}`:""}`,{response:o,value:u}=await this.cache.httpGet(i,t);return o.status<200||o.status>=300||typeof u=="string"?["Guest"]:((h=(c=u==null?void 0:u.result)==null?void 0:c[0])==null?void 0:h.type)||["Guest"]}async isAdml(){const e=await this.getUser();return(e==null?void 0:e.functions.ADMIN_LOCAL)!==void 0}async getWebApp(e){const t=await this.getUser();return t==null?void 0:t.apps.find(s=>{var r;return s!=null&&s.prefix?(s==null?void 0:s.prefix.replace("/",""))===e||!1:s!=null&&s.address&&((r=s.address)==null?void 0:r.split("/")[1])===e||!1})}}class StringUtils{static removeAccents(e){for(let t=0;t<defaultDiacriticsRemovalMap.length;t++)e=e.replace(defaultDiacriticsRemovalMap[t].letters,defaultDiacriticsRemovalMap[t].base);return e}}class ShareService{constructor(e){this.context=e}get directory(){return this.context.directory()}get http(){return this.context.http()}get cache(){return this.context.cache()}async searchShareSubjects(e,t,s){const r=StringUtils.removeAccents(s).toLowerCase(),i=await this.cache.httpGetJson(`/${e}/share/json/${t}?search=${s}`),o=i.users.visibles.filter(({username:l,firstName:g,lastName:d,login:p})=>{const m=StringUtils.removeAccents(d||"").toLowerCase(),R=StringUtils.removeAccents(g||"").toLowerCase(),A=StringUtils.removeAccents(l||"").toLowerCase(),w=StringUtils.removeAccents(p||"").toLowerCase();return A.includes(r)||R.includes(r)||m.includes(r)||w.includes(r)}).map(l=>({avatarUrl:this.directory.getAvatarUrl(l.id,"user"),directoryUrl:this.directory.getDirectoryUrl(l.id,"user"),displayName:l.username,id:l.id,profile:l.profile,type:"user"})),u=i.groups.visibles.filter(({name:l})=>StringUtils.removeAccents(l||"").toLowerCase().includes(r)).map(l=>({avatarUrl:this.directory.getAvatarUrl(l.id,"group"),directoryUrl:this.directory.getDirectoryUrl(l.id,"group"),displayName:l.name,id:l.id,type:"group",structureName:l.structureName}));return[...(await this.directory.getBookMarks()).filter(({displayName:l})=>StringUtils.removeAccents(l||"").toLowerCase().includes(r)).map(l=>({avatarUrl:"",directoryUrl:"",profile:"",displayName:l.displayName,id:l.id,type:"sharebookmark"})),...o,...u]}async getShareMapping(e){const t=await this.cache.httpGetJson(`/${e}/rights/sharing`);for(const s of Object.keys(t))if(s.includes(".")){const r=s.split(".")[1],i=t[s];delete t[s],t[r]=i}return t}getActionsAvailableFor({id:e,type:t},s,r){const o=(t==="user"?s.users.checked[e]:s.groups.checked[e])||[],u=Object.keys(r),c=[];for(const h of u)r[h].filter(d=>o.includes(d)).length>0&&c.push(h);return c}async getRightsForResource(e,t){const s=await this.directory.getBookMarks(),r=`/${e}/share/json/${t}?search=`,i=await this.cache.httpGetJson(r),o=await this.getShareMapping(e),u=await this.cache.httpGetJson("/infra/public/json/sharing-rights.json"),c=Object.keys(i.users.checked).map(p=>i.users.visibles.find(R=>R.id===p)).filter(p=>p!==void 0).map(p=>{const m=this.getActionsAvailableFor({id:p.id,type:"user"},i,o);return{id:p.id,type:"user",displayName:p.username,profile:p.profile,avatarUrl:this.directory.getAvatarUrl(p.id,"user"),directoryUrl:this.directory.getDirectoryUrl(p.id,"user"),actions:m.map(A=>{const w=u[A];return{displayName:A,id:A,priority:w.priority}})}}).sort((p,m)=>(p.displayName||"").localeCompare(m.displayName)),h=Object.keys(i.groups.checked).map(p=>i.groups.visibles.find(R=>R.id===p)).filter(p=>p!==void 0).map(p=>{const m=this.getActionsAvailableFor({id:p.id,type:"group"},i,o);return{id:p.id,type:"group",displayName:p.name,profile:void 0,avatarUrl:this.directory.getAvatarUrl(p.id,"group"),directoryUrl:this.directory.getDirectoryUrl(p.id,"group"),actions:m.map(A=>{const w=u[A];return{displayName:A,id:A,priority:w.priority}})}}).sort((p,m)=>(p.displayName||"").localeCompare(m.displayName)),l=[...c,...h],g=i.groups.visibles.map(({groupDisplayName:p,id:m,name:R})=>({displayName:p||R,id:m})),d=i.users.visibles.map(({id:p,profile:m,username:R,firstName:A,lastName:w,login:C})=>({displayName:R,firstName:A,lastName:w,login:C,profile:m,id:p}));return{rights:l,visibleBookmarks:s,visibleGroups:g,visibleUsers:d}}async saveRights(e,t,s){const r=await this.getShareMapping(e),i={bookmarks:{},groups:{},users:{}};for(const c of s){const h=c.actions.map(g=>r[g.id]).reduce((g,d)=>Array.isArray(d)?[...g,...d]:g,[]),l=[...new Set(h)];l.length>0&&(c.type==="user"?i.users[c.id]=l:c.type==="group"?i.groups[c.id]=l:i.bookmarks[c.id]=l)}const o=`/${e}/share/resource/${t}`;return this.cache.clearCache(`/${e}/share/json/${t}?search=`),await this.http.putJson(o,i)}async getActionsForApp(e){const t=await this.cache.httpGetJson("/infra/public/json/sharing-rights.json"),s=await this.getShareMapping(e);return Object.keys(t).map(i=>{const o=t[i];return{displayName:i,id:i,priority:o.priority,requires:o.requires}}).filter(i=>{var o;return((o=s[i.id])==null?void 0:o.length)>0}).sort((i,o)=>i.priority-o.priority)}}const loadedScripts={};axios.create({baseURL:"https://api.example.com",timeout:1e4,headers:{"Content-Type":"application/json",common:{"X-Requested-With":"XMLHttpRequest"}}});class HttpService{constructor(e,t,s){a(this,"axios");a(this,"baseUrl");a(this,"headers",{});a(this,"_latestResponse");this.context=e,this.axios=t||axios}fixBaseUrl(e){return e.startsWith("http://")||e.startsWith("https://")?e:this.baseUrl?this.baseUrl.endsWith("/")||e.startsWith("/")?`${this.baseUrl}${e}`:`${this.baseUrl}/${e}`:e}useAxiosInstance(e,t){return this.axios=axios.create({baseURL:e,headers:{"Content-Type":"application/json",common:{"X-Requested-With":"XMLHttpRequest",...t}}}),this}useBaseUrl(e){return this.baseUrl=e,this}useHeaders(e){return this.headers=e,this}setCdn(e){e&&XMLHttpRequest&&!XMLHttpRequest.prototype.cdnUrl&&(XMLHttpRequest.prototype.cdnUrl=e,XMLHttpRequest.prototype.baseOpen=XMLHttpRequest.prototype.open,XMLHttpRequest.prototype.open=function(){const t=arguments[1];return t.startsWith("/infra/public")&&(arguments[1]=e+t),/^\/([^\/]*)\/public/.test(t)&&(arguments[1]=e+t),t.startsWith("/assets")&&(arguments[1]=e+t),t=="/conf/public"&&(arguments[1]=t),t.startsWith("http")&&(arguments[1]=t),this.baseOpen.apply(this,arguments)})}toAxiosConfig(e){if(e){const t=Object.assign({},this.axios.defaults);e.headers&&(t.headers=Object.assign({},this.axios.defaults.headers),Object.assign(t.headers,e.headers)),e.responseType&&(t.responseType=e.responseType),e.queryParams&&(t.params=Object.assign({},e.queryParams));const s=t.headers??{};return t.headers={...s,...this.headers},t}else return this.axios.defaults}toCdnUrl(e){e=this.fixBaseUrl(e);const t=this.context.conf().getCdnUrl()||"";if(t.length>0&&e!=="/conf/public"){const s=""+e;(s.startsWith("/infra/public")||s.startsWith("/assets")||/^\/([^\/]*)\/public/.test(s))&&(e=t+s)}return e}mapAxiosError(e,t){e.response?this._latestResponse=e.response:e.request?this._latestResponse={status:408,statusText:ERROR_CODE.TIME_OUT}:this._latestResponse={status:500,statusText:ERROR_CODE.UNKNOWN};const{data:s}=this._latestResponse;return s}mapAxiosResponse(e,t){return this._latestResponse=e,e.data}get latestResponse(){return this._latestResponse}isResponseError(){return this.latestResponse.status<200||this.latestResponse.status>=300}async get(e,t){try{const s=await this.axios.get(this.toCdnUrl(e),this.toAxiosConfig(t));return this.mapAxiosResponse(s,t)}catch(s){throw this.mapAxiosError(s,t)}}async post(e,t,s){try{const r=await this.axios.post(this.fixBaseUrl(e),t,this.toAxiosConfig(s));return this.mapAxiosResponse(r,s)}catch(r){throw this.mapAxiosError(r,s)}}async postFile(e,t,s){const r=this.toAxiosConfig(s);r.headers&&r.headers["Content-Type"]&&delete r.headers["Content-Type"];try{const i=await this.axios.post(this.fixBaseUrl(e),t,{...r,headers:{"Content-Type":"multipart/form-data"}});return this.mapAxiosResponse(i,s)}catch(i){throw this.mapAxiosError(i,s)}}async postJson(e,t,s){const r=this.toAxiosConfig();r.headers&&(r.headers["Content-Type"]="application/json");try{const i=await this.axios.post(this.fixBaseUrl(e),t,this.toAxiosConfig(s));return this.mapAxiosResponse(i,s)}catch(i){throw this.mapAxiosError(i,s)}}async put(e,t,s){try{const r=await this.axios.put(this.fixBaseUrl(e),t,this.toAxiosConfig(s));return this.mapAxiosResponse(r,s)}catch(r){throw this.mapAxiosError(r,s)}}async putFile(e,t,s){try{const r=this.toAxiosConfig(s);r.headers&&r.headers["Content-Type"]&&delete r.headers["Content-Type"];const i=await this.axios.put(this.fixBaseUrl(e),t,{...r,headers:{"Content-Type":"multipart/form-data"}});return this.mapAxiosResponse(i,s)}catch(r){throw this.mapAxiosError(r,s)}}async putJson(e,t,s){const r=this.toAxiosConfig(s);r.headers&&(r.headers["Content-Type"]="application/json");try{const i=await this.axios.put(this.fixBaseUrl(e),t,r);return this.mapAxiosResponse(i,s)}catch(i){throw this.mapAxiosError(i,s)}}async delete(e,t){try{const s=await this.axios.delete(this.fixBaseUrl(e),this.toAxiosConfig(t));return this.mapAxiosResponse(s,t)}catch(s){throw this.mapAxiosError(s,t)}}async deleteJson(e,t){try{const s=await this.axios.delete(this.fixBaseUrl(e),{data:t});return this.mapAxiosResponse(s)}catch(s){throw this.mapAxiosError(s)}}getScript(e,t,s){const r=s??"exports",i=this.toAxiosConfig(t);return i.headers&&(i.headers.Accept="application/javascript"),this.axios.get(this.toCdnUrl(e),i).then(o=>this.mapAxiosResponse(o,t)).then(o=>{try{const u=`"use strict";var ${r.split(".")[0]}={};${o};return ${r};`;return Function(u)()}catch{return o}}).catch(o=>{throw this.mapAxiosError(o,t),o})}loadScript(e,t){return loadedScripts[e]?Promise.resolve():this.getScript(e,t).then(s=>{loadedScripts[e]=!0})}}const y=class y{constructor(e){this.context=e}get http(){return this.context.http()}get conf(){return this.context.conf()}async getVideoConf(){var t;const e=await this.conf.getPublicConf(APP$2.VIDEO);return{maxWeight:(e==null?void 0:e["max-videosize-mbytes"])??y.MAX_WEIGHT,maxDuration:(e==null?void 0:e["max-videoduration-minutes"])??y.MAX_DURATION,acceptVideoUploadExtensions:((t=e==null?void 0:e["accept-videoupload-extensions"])==null?void 0:t.map(s=>s.toUpperCase()))??[]}}async upload({data:e,appCode:t,captation:s,duration:r}){if(!e.file)throw new Error("Invalid video file.");if(!e.filename)throw new Error("Invalid video filename");const i=`${e.browser.name} ${e.browser.version}`,o=new FormData;o.append("device",e.device||""),o.append("browser",i),o.append("url",e.url),o.append("app",t),o.append("file",e.file,e.filename),o.append("weight",""+e.file.size),o.append("captation",""+s);let u=`/video/encode?captation=${s}`;r&&(u+=`&duration=${r}`);const c=await this.http.post(u,o,{headers:{"Content-Type":"multipart/form-data"}});if(c.state=="running"){let h=0,l=1;do{const g=l+h;await new Promise(p=>setTimeout(p,g*1e3)),h=l,l=Math.min(8,g);const d=await this.http.get(`/video/status/${c.processid}`);if(d.state=="succeed")return d;if(d.state=="error")break}while(!0)}throw new Error("Video cannot be uploaded.")}};a(y,"MAX_WEIGHT",50),a(y,"MAX_DURATION",3);let VideoService=y;const defaultMappers={csv:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isCsvLike(n,e)},doc:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isWordLike(n,e)?!0:n.indexOf("document")!==-1&&n.indexOf("wordprocessing")!==-1},xls:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isExcelLike(n,e)?!0:n.indexOf("document")!==-1&&n.indexOf("spreadsheet")!==-1||n.indexOf("ms-excel")!==-1},img:function({type:n}){return n.indexOf("image")!==-1},pdf:function({type:n}){return n.indexOf("pdf")!==-1||n==="application/x-download"},ppt:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isPowerpointLike(n,e)?!0:n.indexOf("document")!==-1&&n.indexOf("presentation")!==-1||n.indexOf("powerpoint")!==-1},txt:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isTxtLike(n,e)},md:function({type:n,extension:e}){return utilities.MimeTypeUtils.INSTANCE.isMdLike(n,e)},video:function({type:n}){return n.indexOf("video")!==-1},audio:function({type:n}){return n.indexOf("audio")!==-1},zip:function({type:n}){return n.indexOf("zip")!==-1||n.indexOf("rar")!==-1||n.indexOf("tar")!==-1||n.indexOf("7z")!==-1}},b=class b{static getRole(e){var t,s;return b.role((t=e.metadata)==null?void 0:t["content-type"],!1,(s=e.metadata)==null?void 0:s.extension)}static role(e,t=!1,s){if(s&&(s=s.trim()),!e)return"unknown";this.roleMappers||console.warn("[DocumentHelper.role] should not have empty roles",this);const r={type:e,previewRole:t,extension:s};for(const i of this.roleMappers){const o=i(r);if(o)return o}return"unknown"}};a(b,"roleMappers",[e=>Object.keys(defaultMappers).find(s=>defaultMappers[s](e))]);let DocumentHelper=b;class WorkspaceService{constructor(e){this.context=e}get http(){return this.context.http()}extractMetadata(e){const t=e.name||"",s=t.split("."),r=e.type||"application/octet-stream",i=s.length>1?s[s.length-1]:"",o={"content-type":r,filename:t,size:e.size,extension:i,role:DocumentHelper.role(r,!1,i)},u=t.replace("."+o.extension,""),c=o.extension?u+"."+o.extension:u;return{basename:u,fullname:c,metadata:o}}async saveFile(e,t){const{fullname:s,metadata:r}=this.extractMetadata(e),i=new FormData;i.append("file",e,s);const o=[];((t==null?void 0:t.visibility)==="public"||(t==null?void 0:t.visibility)==="protected")&&o.push(`${t.visibility}=true`),t!=null&&t.application&&o.push(`application=${t.application}`),r.role==="img"&&o.push("quality=1"),t!=null&&t.parentId&&o.push(`parentId=${t.parentId}`);const u=await this.http.postFile(`/workspace/document?${o.join("&")}`,i);if(this.http.isResponseError())throw this.http.latestResponse.statusText;return u}async updateFile(e,t,s){const{fullname:r,metadata:i}=this.extractMetadata(t),o=new FormData;o.append("file",t,r);const u=[];i.role==="img"&&u.push("quality=1"),s!=null&&s.alt&&u.push(`alt=${s.alt}`),s!=null&&s.legend&&u.push(`legend=${s.legend}`),s!=null&&s.name&&u.push(`name=${s.name}`);const c=await this.http.putFile(`/workspace/document/${e}?${u.join("&")}`,o);if(this.http.isResponseError())throw this.http.latestResponse.statusText;return c}async deleteFile(e){const t=e.map(s=>s._id);if(t.length==0)Promise.resolve(null);else if(await this.http.deleteJson("/workspace/documents",{ids:t}),this.http.isResponseError())throw this.http.latestResponse.statusText}async acceptDocuments(e){const t=await this.context.session().getUser();return s=>s.deleted&&s.trasher?(t==null?void 0:t.userId)==s.trasher:!0}async searchDocuments(e){const t=e.filter!=="external"||e.parentId?await this.http.get("/workspace/documents",{queryParams:{...e,_:new Date().getTime()}}):[],s=await this.acceptDocuments(e);return t.filter(s)}async listDocuments(e,t){return this.searchDocuments({filter:e,parentId:t,includeall:!0})}async transferDocuments(e,t,s="protected"){const r=[];if(e.forEach(i=>{(s==="public"&&!i.public||!i.public&&!i.protected)&&r.push(i)}),r.length>0){const i=await this.http.post("/workspace/documents/transfer",{application:t,visibility:s,ids:r.map(o=>o._id)});if(this.http.isResponseError())throw this.http.latestResponse.statusText;return r.forEach((o,u)=>{const c=e.findIndex(h=>h._id===o._id);0<=c&&c<e.length&&(e[c]=i[u])}),e.filter(o=>!!o)}return e}getThumbnailUrl(e,t=0,s=0){var i,o;const r=t>0||s>0?`${t}x${s}`:"120x120";if(typeof e=="string")return e.includes("data:image")||e.includes("thumbnail")?e:`${e}${e.includes("?")?"&":"?"}thumbnail=${r}`;{const u=`/workspace/${e.public?"pub/":""}document/${e._id}?thumbnail=`,c=e.thumbnails;if((o=(i=e.metadata)==null?void 0:i["content-type"])!=null&&o.includes("video")){const h=c&&Object.keys(c).length>0?Object.keys(c)[0]:null;return h?u+h:null}else return u+r}}}class OdeServices{constructor(){a(this,"_analytics");a(this,"_cache");a(this,"_conf");a(this,"_directory");a(this,"_http");a(this,"_idiom");a(this,"_rights");a(this,"_session");a(this,"_share");a(this,"_video");a(this,"_workspace");a(this,"_embedder");this._analytics=new AnalyticsService(this),this._cache=new CacheService(this),this._conf=new ConfService(this),this._directory=new DirectoryService(this),this._http=new HttpService(this),this._idiom=new IdiomService(this),this._rights=new RightService(this),this._session=new SessionService(this),this._share=new ShareService(this),this._video=new VideoService(this),this._workspace=new WorkspaceService(this),this._embedder=new EmbedderService(this)}initialize(){return this}analytics(){return this._analytics}audience(e,t){return new AudienceService(this,e,t)}cache(){return this._cache}conf(){return this._conf}directory(){return this._directory}http(){return this._http}idiom(){return this._idiom}resource(e,t){return t?ResourceService.findService({application:e,resourceType:t},this):ResourceService.findMainService({application:e},this)}behaviour(e,t){return SnipletsService.findBehaviour({application:e,resourceType:t},this)}rights(){return this._rights}session(){return this._session}share(){return this._share}video(){return this._video}workspace(){return this._workspace}embedder(){return this._embedder}}const ACTION={SEARCH:"search",CREATE:"create",CREATE_PUBLIC:"createPublic",OPEN:"open",EDIT:"edit",MANAGE:"manage",UPD_PROPS:"properties",COMMENT:"comment",DELETE:"delete",TRASH:"trash",RESTORE:"restore",MOVE:"move",COPY:"copy",EXPORT:"export",SHARE:"share",PRINT:"print",PAGES_LIST:"pages_list",DISTRIBUTE:"distribute",REGISTER:"register",PUBLISH:"publish",PUBLISH_MOODLE:"publish_moodle"},FOLDER={BIN:"bin",DEFAULT:"default"},BOOLEAN_FILTER={OWNER:"owner",SHARED:"shared",PUBLIC:"public",FAVORITE:"favorite"},SORT_ORDER={ASC:"asc",DESC:"desc"},SORT_BY={NAME:"name",MODIFY_DATE:"updatedAt",CREATED_AT:"createdAt",APPLICATION:"application",RESOURCE_TYPE:"resourceType"},odeServices=new OdeServices().initialize(),WIDGET_POSITION={LEFT:"left",RIGHT:"right"},isActionAvailable=(n,e)=>{const t=e==null?void 0:e.filter(s=>s.id===n&&s.available);return t&&t.length>0};class LastInfosWidget{constructor(e){this.context=e}get http(){return this.context.http()}loadInfos(e){return this.http.get("/actualites/infos/last/"+e)}getMaxResults(){return this.http.get("/userbook/preference/maxInfos").then(e=>e.preference?parseInt(e.preference):4)}setMaxResults(e){return this.http.putJson("/userbook/preference/maxInfos",`"${e}"`)}}const WIDGET_NAME={LAST_INFOS:"last-infos-widget",BIRTHDAY:"birthday",CALENDAR:"calendar-widget",CARNET:"carnet-de-bord",RECORD:"record-me",MOOD:"mood",MY_APPS:"my-apps",NOTES:"notes",RSS:"rss-widget",BOOKMARK:"bookmark-widget",QWANT:"qwant",QWANT_JUNIOR:"qwant-junior",AGENDA:"agenda-widget",CURSUS:"cursus-widget",MAXICOURS:"maxicours-widget",UNIVERSALIS:"universalis-widget",BRIEFME:"briefme-widget",SCHOOL:"school-widget"};return exports.ACTION=ACTION,exports.APP=APP$2,exports.BOOLEAN_FILTER=BOOLEAN_FILTER,exports.DocumentHelper=DocumentHelper,exports.ERROR_CODE=ERROR_CODE,exports.FOLDER=FOLDER,exports.LastInfosWidget=LastInfosWidget,exports.ReactionTypes=ReactionTypes,exports.ResourceService=ResourceService,exports.SORT_BY=SORT_BY,exports.SORT_ORDER=SORT_ORDER,exports.SnipletsService=SnipletsService,exports.StringUtils=StringUtils,exports.USER_PREFS=USER_PREFS,exports.WIDGET_NAME=WIDGET_NAME,exports.WIDGET_POSITION=WIDGET_POSITION,exports.isActionAvailable=isActionAvailable,exports.odeServices=odeServices,Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports}({},axios,utilities);
package/dist/index.js CHANGED
@@ -880,11 +880,11 @@ class DirectoryService {
880
880
  this.cache.clearCache("/directory/sharebookmark/all");
881
881
  const i = r.map((d) => typeof d == "string" ? d : d.id), o = s.map((d) => typeof d == "string" ? d : d.id), u = t.map(async (d) => {
882
882
  if (typeof d == "string") {
883
- const { displayName: p, groups: E, id: A, users: m } = await this.getBookMarkById(d), w = m.map((v) => v.id), C = E.map((v) => v.id);
883
+ const { displayName: p, groups: E, id: A, users: m } = await this.getBookMarkById(d), R = m.map((v) => v.id), C = E.map((v) => v.id);
884
884
  return {
885
885
  displayName: p,
886
886
  id: A,
887
- members: [...C, ...w]
887
+ members: [...C, ...R]
888
888
  };
889
889
  } else
890
890
  return Promise.resolve(d);
@@ -2206,13 +2206,13 @@ class SessionService {
2206
2206
  applications: []
2207
2207
  });
2208
2208
  const i = [];
2209
- return r.bookmarks.forEach((o, u) => {
2210
- const c = ((e == null ? void 0 : e.apps) || []).find(
2211
- (h) => h.name === o
2209
+ return r.bookmarks.forEach((o) => {
2210
+ const u = ((e == null ? void 0 : e.apps) || []).find(
2211
+ (c) => c.name === o
2212
2212
  );
2213
- if (c) {
2214
- const h = Object.assign({}, c);
2215
- i.push(h);
2213
+ if (u) {
2214
+ const c = Object.assign({}, u);
2215
+ i.push(c);
2216
2216
  }
2217
2217
  }), i;
2218
2218
  }
@@ -2273,8 +2273,8 @@ class ShareService {
2273
2273
  g || ""
2274
2274
  ).toLowerCase(), m = StringUtils.removeAccents(
2275
2275
  l || ""
2276
- ).toLowerCase(), w = StringUtils.removeAccents(p || "").toLowerCase();
2277
- return m.includes(r) || A.includes(r) || E.includes(r) || w.includes(r);
2276
+ ).toLowerCase(), R = StringUtils.removeAccents(p || "").toLowerCase();
2277
+ return m.includes(r) || A.includes(r) || E.includes(r) || R.includes(r);
2278
2278
  }).map((l) => ({
2279
2279
  avatarUrl: this.directory.getAvatarUrl(l.id, "user"),
2280
2280
  directoryUrl: this.directory.getDirectoryUrl(l.id, "user"),
@@ -2339,11 +2339,11 @@ class ShareService {
2339
2339
  avatarUrl: this.directory.getAvatarUrl(p.id, "user"),
2340
2340
  directoryUrl: this.directory.getDirectoryUrl(p.id, "user"),
2341
2341
  actions: E.map((m) => {
2342
- const w = u[m];
2342
+ const R = u[m];
2343
2343
  return {
2344
2344
  displayName: m,
2345
2345
  id: m,
2346
- priority: w.priority
2346
+ priority: R.priority
2347
2347
  };
2348
2348
  })
2349
2349
  };
@@ -2363,11 +2363,11 @@ class ShareService {
2363
2363
  avatarUrl: this.directory.getAvatarUrl(p.id, "group"),
2364
2364
  directoryUrl: this.directory.getDirectoryUrl(p.id, "group"),
2365
2365
  actions: E.map((m) => {
2366
- const w = u[m];
2366
+ const R = u[m];
2367
2367
  return {
2368
2368
  displayName: m,
2369
2369
  id: m,
2370
- priority: w.priority
2370
+ priority: R.priority
2371
2371
  };
2372
2372
  })
2373
2373
  };
@@ -2377,10 +2377,10 @@ class ShareService {
2377
2377
  id: E
2378
2378
  })
2379
2379
  ), d = i.users.visibles.map(
2380
- ({ id: p, profile: E, username: A, firstName: m, lastName: w, login: C }) => ({
2380
+ ({ id: p, profile: E, username: A, firstName: m, lastName: R, login: C }) => ({
2381
2381
  displayName: A,
2382
2382
  firstName: m,
2383
- lastName: w,
2383
+ lastName: R,
2384
2384
  login: C,
2385
2385
  profile: E,
2386
2386
  id: p
@@ -2430,23 +2430,36 @@ axios.create({
2430
2430
  // Remplacez par l'URL de votre API
2431
2431
  timeout: 1e4,
2432
2432
  headers: {
2433
- "Content-Type": "application/json"
2433
+ "Content-Type": "application/json",
2434
+ common: {
2435
+ "X-Requested-With": "XMLHttpRequest"
2436
+ }
2434
2437
  }
2435
2438
  });
2436
2439
  class HttpService {
2437
- constructor(e, t) {
2440
+ constructor(e, t, s) {
2438
2441
  // Axios automatically manages the XSRF-TOKEN cookie and the X-XSRF-TOKEN HTTP header.
2439
2442
  a(this, "axios");
2440
2443
  a(this, "baseUrl");
2441
2444
  a(this, "headers", {});
2442
2445
  a(this, "_latestResponse");
2443
- this.context = e, this.axios = axios.create(t);
2446
+ this.context = e, this.axios = t || axios;
2444
2447
  }
2445
2448
  fixBaseUrl(e) {
2446
2449
  return e.startsWith("http://") || e.startsWith("https://") ? e : this.baseUrl ? this.baseUrl.endsWith("/") || e.startsWith("/") ? `${this.baseUrl}${e}` : `${this.baseUrl}/${e}` : e;
2447
2450
  }
2448
- useAxiosInstance(e) {
2449
- return this.axios = e, this;
2451
+ useAxiosInstance(e, t) {
2452
+ return this.axios = axios.create({
2453
+ baseURL: e,
2454
+ // Remplacez par l'URL de votre API
2455
+ headers: {
2456
+ "Content-Type": "application/json",
2457
+ common: {
2458
+ "X-Requested-With": "XMLHttpRequest",
2459
+ ...t
2460
+ }
2461
+ }
2462
+ }), this;
2450
2463
  }
2451
2464
  useBaseUrl(e) {
2452
2465
  return this.baseUrl = e, this;
@@ -2508,11 +2521,7 @@ class HttpService {
2508
2521
  this.toCdnUrl(e),
2509
2522
  this.toAxiosConfig(t)
2510
2523
  );
2511
- return console.log({
2512
- r: s,
2513
- url: this.toCdnUrl(e),
2514
- params: this.toAxiosConfig(t)
2515
- }), this.mapAxiosResponse(s, t);
2524
+ return this.mapAxiosResponse(s, t);
2516
2525
  } catch (s) {
2517
2526
  throw this.mapAxiosError(s, t);
2518
2527
  }
@@ -2635,7 +2644,7 @@ class HttpService {
2635
2644
  });
2636
2645
  }
2637
2646
  }
2638
- const R = class R {
2647
+ const w = class w {
2639
2648
  // in minutes. Applies to recorded videos.
2640
2649
  constructor(e) {
2641
2650
  this.context = e;
@@ -2656,8 +2665,8 @@ const R = class R {
2656
2665
  APP$2.VIDEO
2657
2666
  );
2658
2667
  return {
2659
- maxWeight: (e == null ? void 0 : e["max-videosize-mbytes"]) ?? R.MAX_WEIGHT,
2660
- maxDuration: (e == null ? void 0 : e["max-videoduration-minutes"]) ?? R.MAX_DURATION,
2668
+ maxWeight: (e == null ? void 0 : e["max-videosize-mbytes"]) ?? w.MAX_WEIGHT,
2669
+ maxDuration: (e == null ? void 0 : e["max-videoduration-minutes"]) ?? w.MAX_DURATION,
2661
2670
  acceptVideoUploadExtensions: ((t = e == null ? void 0 : e["accept-videoupload-extensions"]) == null ? void 0 : t.map(
2662
2671
  (s) => s.toUpperCase()
2663
2672
  )) ?? []
@@ -2706,9 +2715,9 @@ const R = class R {
2706
2715
  throw new Error("Video cannot be uploaded.");
2707
2716
  }
2708
2717
  };
2709
- a(R, "MAX_WEIGHT", 50), // in Mbytes. Applies to uploaded videos.
2710
- a(R, "MAX_DURATION", 3);
2711
- let VideoService = R;
2718
+ a(w, "MAX_WEIGHT", 50), // in Mbytes. Applies to uploaded videos.
2719
+ a(w, "MAX_DURATION", 3);
2720
+ let VideoService = w;
2712
2721
  const defaultMappers = {
2713
2722
  csv: function({ type: n, extension: e }) {
2714
2723
  return MimeTypeUtils.INSTANCE.isCsvLike(n, e);