Merge branch 'master' into release/hubl-618

This commit is contained in:
Jean-Baptiste Pasquier 2020-10-28 11:30:16 +01:00
commit f8cf5c4772
33 changed files with 1788 additions and 230 deletions

1107
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,20 +13,34 @@
"build:jscomponents": "babel \"src/components/*.js\" --out-dir dist/components/", "build:jscomponents": "babel \"src/components/*.js\" --out-dir dist/components/",
"build:pug": "pug src/index.pug -o dist/ --obj config.json", "build:pug": "pug src/index.pug -o dist/ --obj config.json",
"build:manifest": "node --experimental-modules make-webmanifest.mjs", "build:manifest": "node --experimental-modules make-webmanifest.mjs",
"build:i18n": "copyfiles -u 2 src/locales/*.json dist/locales",
"copy:font": "copyfiles -f src/fonts/* dist/fonts", "copy:font": "copyfiles -f src/fonts/* dist/fonts",
"copy:image": "copyfiles -f src/images/* dist/images", "copy:image": "copyfiles -f src/images/* dist/images",
"copy:sw": "copyfiles -f src/sw.js dist", "copy:sw": "copyfiles -f src/sw.js dist",
"serve": "pushstate-server -d ./dist -p 3000", "serve": "pushstate-server -d ./dist -p 3000",
"watch": "run-p copy:* build:manifest watch:* serve", "watch": "run-p build watch:* serve",
"watch:css": "npm run build:css && npm run build:css -- -w", "watch:css": "npm-watch build:css",
"watch:js": "babel --watch \"src/scripts/*.js\" -o dist/scripts/index.js", "watch:js": "npm-watch build:js",
"watch:jscomponents": "babel --watch \"src/components/*.js\" --out-dir dist/components/", "watch:jscomponents": "npm-watch build:jscomponents",
"watch:manifest": "npm-watch build:manifest",
"watch:pug": "pug --watch src/index.pug -o dist/ --obj config.json", "watch:pug": "pug --watch src/index.pug -o dist/ --obj config.json",
"watch:i18n": "npm-watch build:i18n",
"watch:font": "npm-watch copy:font",
"watch:image": "npm-watch copy:image",
"cypress:open": "cypress open", "cypress:open": "cypress open",
"cypress:verify": "cypress verify", "cypress:verify": "cypress verify",
"cypress:info": "cypress info", "cypress:info": "cypress info",
"test": "cypress run" "test": "cypress run"
}, },
"watch": {
"build:css": "src/styles/*",
"build:manifest": "make-webmanifest.mjs",
"build:i18n": "src/locales/*",
"copy:images": "src/fonts/*.js",
"copy:fonts": "src/images/*.js",
"build:js": "src/scripts/*.js",
"build:jscomponents": "src/components/*.js"
},
"release": { "release": {
"branches": [ "branches": [
"master" "master"
@ -71,6 +85,7 @@
"devDependencies": { "devDependencies": {
"cypress": "^4.5.0", "cypress": "^4.5.0",
"cypress-localstorage-commands": "^1.2.1", "cypress-localstorage-commands": "^1.2.1",
"cypress-terminal-report": "^1.2.1" "cypress-terminal-report": "^1.2.1",
"npm-watch": "^0.7.0"
} }
} }

View File

@ -11,10 +11,10 @@ const HublStatus = widgetFactory(
name="\${name}"> name="\${name}">
<option <option
value="Public" value="Public"
\${value=="Public" ? 'selected' : ''}>Public</option> \${value=="Public" ? 'selected' : ''} data-trans="hublStatus.public">Public</option>
<option <option
value="Private" value="Private"
\${value=="Private" ? 'selected' : ''}>Privé</option> \${value=="Private" ? 'selected' : ''} data-trans="hublStatus.private">Privé</option>
</select> </select>
</label>`, </label>`,
'', '',

View File

@ -3,6 +3,6 @@ if(typeof Sentry !== 'undefined') {
dsn: 'https://b4b29557689049a39168599577adb940@sentry.startinblox.com/4', dsn: 'https://b4b29557689049a39168599577adb940@sentry.startinblox.com/4',
integrations: [new Sentry.Integrations.BrowserTracing()], integrations: [new Sentry.Integrations.BrowserTracing()],
environment: document.location.hostname, environment: document.location.hostname,
tracesSampleRate: 1.0, tracesSampleRate: 0.2,
}); });
} }

View File

@ -10,7 +10,7 @@ script(type="module" src="https://unpkg.com/@startinblox/core@0.12" defer)
script(type="module" src="https://unpkg.com/@startinblox/oidc@0.10" defer) script(type="module" src="https://unpkg.com/@startinblox/oidc@0.10" defer)
//- script(type="module" src="/lib/sib-auth/index.js" defer) //- script(type="module" src="/lib/sib-auth/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/router@0.9" defer) script(type="module" src="https://unpkg.com/@startinblox/router@0.10" defer)
//- script(type="module" src="/lib/sib-router/src/index.js" defer) //- script(type="module" src="/lib/sib-router/src/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/component-notifications@0.7" defer) script(type="module" src="https://unpkg.com/@startinblox/component-notifications@0.7" defer)
@ -25,11 +25,11 @@ if (endpoints.resources || (endpoints.get && endpoints.get.resources)) && (endpo
//- script(type="module" src="/lib/sib-resource/sib-resource.js" defer) //- script(type="module" src="/lib/sib-resource/sib-resource.js" defer)
if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers) if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
script(type="module" src="https://unpkg.com/@startinblox/component-job-board@0.8" defer) script(type="module" src="https://unpkg.com/@startinblox/component-job-board@1.0" defer)
//- script(type="module" src="/lib/solid-job-board/dist/index.js" defer) //- script(type="module" src="/lib/solid-job-board/dist/index.js" defer)
if (endpoints.uploads || (endpoints.get && endpoints.get.uploads)) && (endpoints.skills || (endpoints.get && endpoints.get.skills)) && (endpoints.users || (endpoints.get && endpoints.get.users)) if (endpoints.uploads || (endpoints.get && endpoints.get.uploads)) && (endpoints.skills || (endpoints.get && endpoints.get.skills)) && (endpoints.users || (endpoints.get && endpoints.get.users))
script(type="module" src="https://unpkg.com/@startinblox/component-directory@0.10" defer) script(type="module" src="https://unpkg.com/@startinblox/component-directory@1.0" defer)
//- script(type="module" src="/lib/solid-directory/dist/index.js" defer) //- script(type="module" src="/lib/solid-directory/dist/index.js" defer)
if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards) if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards)
@ -37,7 +37,7 @@ if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards)
//- script(type="module" src="/lib/solid-dashboard/dist/index.js" defer) //- script(type="module" src="/lib/solid-dashboard/dist/index.js" defer)
if endpoints.users || (endpoints.get && endpoints.get.users) if endpoints.users || (endpoints.get && endpoints.get.users)
script(type="module" src="https://unpkg.com/@startinblox/component-chat@1.1" defer) script(type="module" src="https://unpkg.com/@startinblox/component-chat@1.2" defer)
//- script(type="module" src="/lib/solid-xmpp-chat/dist/index.js" defer) //- script(type="module" src="/lib/solid-xmpp-chat/dist/index.js" defer)
if endpoints.polls || (endpoints.get && endpoints.get.polls) if endpoints.polls || (endpoints.get && endpoints.get.polls)

View File

@ -3,7 +3,7 @@
solid-link(next='dashboard') solid-link(next='dashboard')
img(src=`${clientLogo || '/images/logo.png'}` style=`max-height:${clientLogoHeight || '32px'}`) img(src=`${clientLogo || '/images/logo.png'}` style=`max-height:${clientLogoHeight || '32px'}`)
span.beta-tag Beta span.beta-tag(data-trans='header.beta')
solid-notifications.notLoggedIn( solid-notifications.notLoggedIn(
nested-field="inbox" nested-field="inbox"
@ -30,14 +30,14 @@ details#user-controls.notLoggedIn
ul ul
if (endpoints.uploads || (endpoints.get && endpoints.get.uploads)) && (endpoints.skills || (endpoints.get && endpoints.get.skills)) && (endpoints.users || (endpoints.get && endpoints.get.users)) if (endpoints.uploads || (endpoints.get && endpoints.get.uploads)) && (endpoints.skills || (endpoints.get && endpoints.get.skills)) && (endpoints.users || (endpoints.get && endpoints.get.users))
li li
solid-link(next='profile') Mon profil solid-link(next='profile' data-trans='header.myProfile')
li li
solid-link(next='admin') Administration solid-link(next='admin' data-trans='header.admin')
li li
solid-link(next='about') A propos solid-link(next='about' data-trans='header.about')
button(role='log out' onclick="document.querySelector('sib-auth').logout();") Se déconnecter button(role='log out' onclick="document.querySelector('sib-auth').logout();" data-trans='header.logOut')
button.loggedIn(role='log in' onclick="document.querySelector('sib-auth').login();") Se connecter button.loggedIn(role='log in' onclick="document.querySelector('sib-auth').login();" data-trans='header.logIn')
button.notLoggedIn.mobile-menu-icon.icon-menu#toggleMainMenu button.notLoggedIn.mobile-menu-icon.icon-menu#toggleMainMenu

View File

@ -27,15 +27,15 @@ html(lang="en")
main#viewport.content.notLoggedIn main#viewport.content.notLoggedIn
if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards) if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards)
#dashboard(hidden).no-sidebar.with-padding #dashboard(hidden, data-view="dashboard").no-sidebar.with-padding
include page-dashboard.pug include page-dashboard.pug
if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users)) if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
#members(hidden).no-sidebar.with-padding #members(hidden, data-view="members").no-sidebar.with-padding
include page-directory.pug include page-directory.pug
if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers) if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
#job-offers(hidden).no-sidebar.with-padding #job-offers(hidden, data-view="job-offers").no-sidebar.with-padding
if (endpoints.post && endpoints.post.joboffers) && (endpoints.get && endpoints.get.joboffers) if (endpoints.post && endpoints.post.joboffers) && (endpoints.get && endpoints.get.joboffers)
hubl-reactivity(data-src=`${endpoints.post.joboffers}current/` target-src=`${endpoints.get.joboffers}`) hubl-reactivity(data-src=`${endpoints.post.joboffers}current/` target-src=`${endpoints.get.joboffers}`)
hubl-reactivity(data-src=`${endpoints.post.joboffers}expired/` target-src=`${endpoints.get.joboffers}`) hubl-reactivity(data-src=`${endpoints.post.joboffers}expired/` target-src=`${endpoints.get.joboffers}`)
@ -49,7 +49,7 @@ html(lang="en")
include page-job-offers.pug include page-job-offers.pug
if endpoints.projects || (endpoints.get && endpoints.get.projects) if endpoints.projects || (endpoints.get && endpoints.get.projects)
#project(hidden).with-sidebar #project(hidden, data-view="project").with-sidebar
if (endpoints.post && endpoints.post.projects) && (endpoints.get && endpoints.get.projects) if (endpoints.post && endpoints.post.projects) && (endpoints.get && endpoints.get.projects)
hubl-reactivity(data-src=`${endpoints.post.projects}joinable/` target-src=`${endpoints.get.projects}`) hubl-reactivity(data-src=`${endpoints.post.projects}joinable/` target-src=`${endpoints.get.projects}`)
hubl-reactivity(data-src=`${endpoints.post.projects}` target-src=`${endpoints.get.projects}`) hubl-reactivity(data-src=`${endpoints.post.projects}` target-src=`${endpoints.get.projects}`)
@ -61,7 +61,7 @@ html(lang="en")
include page-project.pug include page-project.pug
if endpoints.circles || (endpoints.get && endpoints.get.circles) if endpoints.circles || (endpoints.get && endpoints.get.circles)
#circle(hidden).with-sidebar #circle(hidden, data-view="circle").with-sidebar
if (endpoints.post && endpoints.post.circles) && (endpoints.get && endpoints.get.circles) if (endpoints.post && endpoints.post.circles) && (endpoints.get && endpoints.get.circles)
hubl-reactivity(data-src=`${endpoints.post.circles}joinable/` target-src=`${endpoints.get.circles}`) hubl-reactivity(data-src=`${endpoints.post.circles}joinable/` target-src=`${endpoints.get.circles}`)
hubl-reactivity(data-src=`${endpoints.post.circles}` target-src=`${endpoints.get.circles}`) hubl-reactivity(data-src=`${endpoints.post.circles}` target-src=`${endpoints.get.circles}`)
@ -72,29 +72,29 @@ html(lang="en")
hubl-reactivity(bind-user nested-field="circles" target-src=`${endpoints.circles || endpoints.get.circles}joinable/`) hubl-reactivity(bind-user nested-field="circles" target-src=`${endpoints.circles || endpoints.get.circles}joinable/`)
include page-circle.pug include page-circle.pug
if endpoints.users || (endpoints.get && endpoints.get.users) if endpoints.users || (endpoints.get && endpoints.get.users)
#messages(hidden).with-sidebar #messages(hidden, data-view="messages").with-sidebar
include page-messages.pug include page-messages.pug
if endpoints.polls || (endpoints.get && endpoints.get.polls) if endpoints.polls || (endpoints.get && endpoints.get.polls)
#polls(hidden).with-sidebar #polls(hidden, data-view="polls").with-sidebar
include page-polls.pug include page-polls.pug
if endpoints.events || (endpoints.get && endpoints.get.events) if endpoints.events || (endpoints.get && endpoints.get.events)
#events(hidden) #events(hidden, data-view="events")
include page-events.pug include page-events.pug
if endpoints.resources || (endpoints.get && endpoints.get.resources) if endpoints.resources || (endpoints.get && endpoints.get.resources)
#resources(hidden) #resources(hidden, data-view="resources")
include page-resources.pug include page-resources.pug
#admin(hidden).with-sidebar #admin(hidden, data-view="admin").with-sidebar
include page-admin.pug include page-admin.pug
#about.no-sidebar.with-padding #about(data-view="about").no-sidebar.with-padding
include page-about.pug include page-about.pug
if (endpoints.skills || (endpoints.get && endpoints.get.skills)) && (endpoints.uploads || (endpoints.post && endpoints.post.uploads)) && (endpoints.users || (endpoints.post && endpoints.post.users)) if (endpoints.skills || (endpoints.get && endpoints.get.skills)) && (endpoints.uploads || (endpoints.post && endpoints.post.uploads)) && (endpoints.users || (endpoints.post && endpoints.post.users))
#profile(hidden).no-sidebar #profile(hidden, data-view="profile").no-sidebar
include page-profile.pug include page-profile.pug
if analytics if analytics

208
src/locales/fr.json Normal file
View File

@ -0,0 +1,208 @@
{
"header": {
"beta": "Beta",
"myProfile": "Mon profil",
"admin": "Administration",
"about": "A propos",
"logOut": "Se déconnecter",
"logIn": "Se connecter"
},
"menuLeft": {
"emptyCircleProject": {
"notPartOf": "Tu ne fais partie d'aucun",
"createNew": "Pour en créer un nouveau, tu peux te rendre dans le",
"adminPanel": "panneau d'administration",
"project": "projet",
"circle": "cercle"
},
"dashboard": "Tableau de bord",
"events": "Evènements",
"gov": "Gouvernance",
"resources": "Ressources",
"jobBoard": "Offres de mission",
"profileDirectory": "Annuaire des membres",
"projects": "Projets",
"circles": "Circles",
"messages": "Messages",
"search": "Rechercher..."
},
"about": {
"title": "A propos",
"card1": {
"subTitle": "Cette application est développée par Startin'blox",
"paragraph1": "Startinblox est une coopérative qui développe des outils libres pour construire facilement et à moindre coût des applications fédérées et interopérables basées sur les derniers standards du web poussés par le projet SOLID.",
"paragraph2": "Sa mission est de redonner le pouvoir aux utilisateurs en leur permettant de reprendre la main sur leur outil numérique et de bénéficier dun effet de réseau au sein dun écosystème choisi afin de sémanciper des grandes plateformes."
},
"card2": {
"title": "Contacte-nous",
"paragraph-1": "Tu veux contribuer, nous remonter un bug, nous suggérer une amélioration, travailler avec nous ?",
"link": "Contact"
}
},
"admin": {
"menuRight": {
"fold": "Replier le menu",
"community": "Communautés",
"circles": "Cercles",
"projects": "Projets"
}
},
"dashboard": {
"title": "Tableau de bord"
},
"circle": {
"menuRight": {
"buttonMobile": "MENU",
"fold": "Replier le menu",
"chat": "Chat",
"information": "Information",
"resources": "Resources",
"events": "Events",
"polls": "Polls"
},
"create": {
"backlink": "Retour",
"title": "Créer un cercle",
"labelStatus": "Statut du cercle",
"labelName": "Nom du cercle *",
"labelDescription": "Sous-titre du cercle *",
"buttonSubmit": "Enregistrer"
},
"edit": {
"buttonDelete": "Retirer",
"backlink": "Retour",
"title": "Modifie ton cercle",
"labelStatus": "Statut du cercle",
"labelName": "Nom du cercle *",
"labelOwner": "Administrateur ou administratrice *",
"labelDescription": "Sous-titre du cercle *",
"subTitle": "Liste des membres :",
"tableHeader1": "Nom",
"tableHeader2": "Accès",
"buttonSubmit": "Enregistrer",
"buttonAddMember": "Ajouter un membre"
},
"list": {
"title": "Administration",
"buttonMobile": "MENU",
"subTitle": "Cercles",
"buttonCreate": "Créer un cercle",
"tableHeader1": "Nom",
"tableHeader2": "Administrateurs",
"tableHeader3": "Rejoindre",
"buttonQuit": "Quitter",
"buttonJoin": "Rejoindre"
},
"left": {
"paragraphQuit": "Tu as quitté ce cercle.",
"paragraphJoin": "Pour le rejoindre à nouveau, rends-toi dans le panneau",
"paragraphContact": "ou contacte un administrateur.",
"admin": "d'administration"
},
"profile": {
"creationDate": "Date de création : ",
"buttonModify": "Modifier et ajouter un membre",
"buttonAdd": "Ajouter un membre",
"buttonDelete": "Supprimer le cercle",
"buttonQuit": "Quitter le cercle",
"buttonJoin": "Rejoindre le cercle",
"subTitle": "Membres :"
}
},
"communities": {
"title": "Administration",
"menuMobile": "MENU",
"linkInvite": "Inviter un nouvel utilisateur",
"noPermission": "Membre, aucune permission",
"subTitle": "Communautés",
"tableHeader1": "Nom",
"tableHeader2": "Action"
},
"project": {
"menuRight": {
"buttonMobile": "MENU",
"fold": "Replier le menu",
"chat": "Chat",
"information": "Information"
},
"create": {
"backlink": "Retour",
"title": "Créer un nouveau projet",
"labelName": "Nom du projet *",
"labelCustomer": "Nom du client*",
"labelCaptain": "Capitaine du projet*",
"buttonSubmit": "Enregistrer"
},
"edit": {
"buttonDelete": "Retirer",
"backlink": "Retour",
"title": "Modifie ton projet",
"labelName": "Nom du projet *",
"labelCustomer": "Nom du client *",
"subTitle": "Liste des membres :",
"tableHeader1": "Nom",
"tableHeader2": "Accès",
"buttonSubmit": "Enregistrer",
"buttonAddMember": "Ajouter un membre"
},
"modifyPicture": {
"backlink": "Retour",
"title": "Modifier l'image du projet"
},
"list": {
"title": "Administration",
"buttonMobile": "MENU",
"subTitle": "Projets",
"buttonCreate": "Créer un nouveau projet",
"tableHeader1": "Nom",
"tableHeader2": "Administrateurs",
"tableHeader3": "Capitaines",
"tableHeader4": "Rejoindre",
"buttonQuit": "Quitter",
"buttonJoin":"Rejoindre"
},
"left": {
"paragraphQuit": "Tu as quitté ce projet.",
"paragraphJoin": "Ceci est un projet privé. Pour le joindre à nouveau, rends-toi dans le panneau",
"paragraphContact": "et demande une invitation.",
"admin": "d'administration"
},
"profile": {
"creationDate": "Date de création : ",
"buttonModify": "Modifier et ajouter un membre",
"buttonAdd": "Ajouter un membre",
"buttonDelete": "Supprimer le projet",
"buttonQuit": "Quitter le projet",
"buttonJoin": "Rejoindre le projet",
"captain": "Capitaine :",
"subTitle": "Equipe :"
}
},
"user": {
"create": {
"backlink": "Retour",
"title": "Inviter un utilisateur à ",
"labelUsername": "Nom d'utilisateur*",
"labelUsernameTitle": "Caractères alphanumérique uniquement",
"labelEmail": "E-mail *",
"labelFirstname": "Prénom *",
"labelLastname": "Nom *",
"buttonSubmit": "Inviter"
}
},
"notification": {
"circle": {
"in": "dans"
},
"private": {
"private": "en privé"
}
},
"template-captain": {
"isLead": "Capitaine"
},
"hublStatus": {
"private": "Privé",
"public": "Public"
}
}

View File

@ -14,10 +14,13 @@ solid-widget(name='hubl-menu-publicprivate')
solid-widget(name='hubl-create') solid-widget(name='hubl-create')
template template
p.create Tu ne fais partie d'aucun ${value}. p.create
span(data-trans="menuLeft.emptyCircleProject.notPartOf")
span &nbsp;${value}.
br br
| Pour en créer un nouveau, tu peux te rendre dans le span(data-trans="menuLeft.emptyCircleProject.createNew")
solid-link(next='admin') panneau d'administration span &nbsp;
solid-link(next="${value == 'projet' ? 'admin-projects' : 'admin-circles'}", data-trans="menuLeft.emptyCircleProject.adminPanel")
solid-widget(name='hubl-menu-fix-url-circle') solid-widget(name='hubl-menu-fix-url-circle')
template template
@ -53,32 +56,32 @@ solid-widget(name='hubl-menu-fix-url-project')
solid-router#navbar-router(default-route='dashboard') solid-router#navbar-router(default-route='dashboard')
if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards) if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards)
solid-route.menu(name='dashboard') solid-route.menu(name='dashboard')
div.menu-label Tableau de bord div.menu-label(data-trans="menuLeft.dashboard")
div.menu-icon.icon-home div.menu-icon.icon-home
div.divider div.divider
if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users)) if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
solid-route.menu(name='members') solid-route.menu(name='members')
div.menu-label Annuaire des membres div.menu-label(data-trans="menuLeft.profileDirectory")
div.menu-icon.icon-people div.menu-icon.icon-people
div.divider div.divider
if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers) if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
solid-route.menu(name='job-offers', rdf-type='hd:joboffer') solid-route.menu(name='job-offers', rdf-type='hd:joboffer')
div.menu-label Offres de mission div.menu-label(data-trans="menuLeft.jobBoard")
div.menu-icon.icon-briefcase div.menu-icon.icon-briefcase
div.divider div.divider
if endpoints.resources || (endpoints.get && endpoints.get.resources) if endpoints.resources || (endpoints.get && endpoints.get.resources)
solid-route.menu(name='resources') solid-route.menu(name='resources')
div.menu-label Ressources div.menu-label(data-trans="menuLeft.resources")
div.menu-icon.icon-docs div.menu-icon.icon-docs
div.divider div.divider
if endpoints.polls || (endpoints.get && endpoints.get.polls) if endpoints.polls || (endpoints.get && endpoints.get.polls)
solid-route.menu(name='polls') solid-route.menu(name='polls')
div.menu-label Gouvernance div.menu-label(data-trans="menuLeft.gov")
div.menu-icon.icon-bubbles div.menu-icon.icon-bubbles
div.divider div.divider
if endpoints.events || (endpoints.get && endpoints.get.events) if endpoints.events || (endpoints.get && endpoints.get.events)
solid-route.menu(name='events') solid-route.menu(name='events')
div.menu-label Evènements div.menu-label(data-trans="menuLeft.events")
div.menu-icon.icon-calendar div.menu-icon.icon-calendar
div.divider div.divider
if endpoints.projects || (endpoints.get && endpoints.get.projects) if endpoints.projects || (endpoints.get && endpoints.get.projects)
@ -89,7 +92,7 @@ solid-router#navbar-router(default-route='dashboard')
div.menu-chevron div.menu-chevron
div.menu-icon.icon-arrow-up div.menu-icon.icon-arrow-up
//- div.menu-icon.icon-arrow-right-circle //- div.menu-icon.icon-arrow-right-circle
div.menu-label Projets div.menu-label(data-trans="menuLeft.projects")
div.menu-icon.icon-folder-alt div.menu-icon.icon-folder-alt
solid-route(name='project', rdf-type='hd:project', use-id='', hidden) solid-route(name='project', rdf-type='hd:project', use-id='', hidden)
div.sub-menu.menu-notification div.sub-menu.menu-notification
@ -104,7 +107,8 @@ solid-router#navbar-router(default-route='dashboard')
fields='project' fields='project'
loader-id='loader-projects' loader-id='loader-projects'
empty-widget='hubl-create' empty-widget='hubl-create'
empty-value='projet' empty-value=''
data-trans="empty-value=menuLeft.emptyCircleProject.project"
widget-project='hubl-menu-fix-url-project' widget-project='hubl-menu-fix-url-project'
order-by="project.customer.name" order-by="project.customer.name"
) )
@ -117,7 +121,7 @@ solid-router#navbar-router(default-route='dashboard')
div.menu-chevron div.menu-chevron
div.menu-icon.icon-arrow-up div.menu-icon.icon-arrow-up
//- div.menu-icon.icon-arrow-right-circle //- div.menu-icon.icon-arrow-right-circle
div.menu-label Cercles div.menu-label(data-trans="menuLeft.circles")
div.menu-icon.icon-folder-alt div.menu-icon.icon-folder-alt
solid-route(name='circle', rdf-type='hd:circle', use-id='', hidden) solid-route(name='circle', rdf-type='hd:circle', use-id='', hidden)
div.sub-menu.menu-notification div.sub-menu.menu-notification
@ -132,7 +136,8 @@ solid-router#navbar-router(default-route='dashboard')
fields='circle' fields='circle'
loader-id='loader-circles' loader-id='loader-circles'
empty-widget='hubl-create' empty-widget='hubl-create'
empty-value='cercle' empty-value=''
data-trans="empty-value=menuLeft.emptyCircleProject.circle"
widget-circle='hubl-menu-fix-url-circle' widget-circle='hubl-menu-fix-url-circle'
order-by="circle.name" order-by="circle.name"
) )
@ -142,7 +147,7 @@ solid-router#navbar-router(default-route='dashboard')
div.menu div.menu
div.menu-chevron div.menu-chevron
div.menu-icon.icon-arrow-up div.menu-icon.icon-arrow-up
div.menu-label Messages div.menu-label(data-trans="menuLeft.messages")
div.menu-icon.icon-envelope-letter div.menu-icon.icon-envelope-letter
solid-route(name='messages', rdf-type='foaf:user', use-id='', hidden) solid-route(name='messages', rdf-type='foaf:user', use-id='', hidden)
div.sub-menu.menu-notification div.sub-menu.menu-notification
@ -156,7 +161,8 @@ solid-router#navbar-router(default-route='dashboard')
fields='name, chatProfile.jabberID, badge' fields='name, chatProfile.jabberID, badge'
loader-id='loader-messages' loader-id='loader-messages'
search-fields="name" search-fields="name"
search-label-name="Rechercher..." search-label-name=""
data-trans="search-label-name=menuLeft.search"
search-widget-name="hubl-search-users" search-widget-name="hubl-search-users"
widget-name='solid-display-div' widget-name='solid-display-div'
widget-badge='hubl-counter' widget-badge='hubl-counter'

View File

@ -1,17 +1,17 @@
.views-container .views-container
h2 A propos h2(data-trans='about.title')
div.flex-content-white div.flex-content-white
div div
div div
h3 Cette application est développée par Startin'blox h3(data-trans='about.card1.subTitle')
p Startinblox est une coopérative qui développe des outils libres pour construire facilement et à moindre coût des applications fédérées et interopérables basées sur les derniers standards du web poussés par le projet SOLID. p(data-trans='about.card1.paragraph1')
p Sa mission est de redonner le pouvoir aux utilisateurs en leur permettant de reprendre la main sur leur outil numérique et de bénéficier dun effet de réseau au sein dun écosystème choisi afin de sémanciper des grandes plateformes. p(data-trans='about.card1.paragraph2')
div div
a(href="https://startinblox.com/fr/" target="_blank") https://startinblox.com/fr/ a(href="https://startinblox.com/fr/" target="_blank") https://startinblox.com/fr/
div div
div div
h3 Contacte-nous h3(data-trans='about.card2.subTitle')
p Tu veux contribuer, nous remonter un bug, nous suggérer une amélioration, travailler avec nous ? p(data-trans='about.card2.paragraph1')
div div
a(href="https://startinblox.com/fr/#home-contact" target="_blank").main-cta Contact a(href="https://startinblox.com/fr/#home-contact" target="_blank" data-trans='about.card2.link').main-cta

View File

@ -1,27 +1,27 @@
.views-container.sidebar-is-closed .views-container.sidebar-is-closed
if endpoints.circles || (endpoints.get && endpoints.get.circles) if endpoints.circles || (endpoints.get && endpoints.get.circles)
#admin-circles(hidden) #admin-circles(hidden, data-view="admin-circles")
include views/admin/page-admin-circles.pug include views/admin/page-admin-circles.pug
if endpoints.projects || (endpoints.get && endpoints.get.projects) if endpoints.projects || (endpoints.get && endpoints.get.projects)
#admin-projects(hidden) #admin-projects(hidden, data-view="admin-projects")
include views/admin/page-admin-projects.pug include views/admin/page-admin-projects.pug
if (endpoints.users || (endpoints.get && endpoints.get.users)) if (endpoints.users || (endpoints.get && endpoints.get.users))
#admin-communities(hidden) #admin-communities(hidden, data-view="admin-communities")
include views/admin/page-admin-communities.pug include views/admin/page-admin-communities.pug
nav.jsRightMenu(role='navigation') nav.jsRightMenu(role='navigation')
solid-router(default-route='admin-circles') solid-router(default-route='admin-circles')
ul ul
li.jsOffsiteToggle li.jsOffsiteToggle
a Replier le menu a(data-trans='admin.menuRight.fold')
if (endpoints.users || (endpoints.get && endpoints.get.users)) if (endpoints.users || (endpoints.get && endpoints.get.users))
solid-route(name='admin-communities') solid-route(name='admin-communities')
li li
a Communautés a(data-trans='admin.menuRight.community')
if endpoints.circles || (endpoints.get && endpoints.get.circles) if endpoints.circles || (endpoints.get && endpoints.get.circles)
solid-route(name='admin-circles') solid-route(name='admin-circles')
li li
a Cercles a(data-trans='admin.menuRight.circles')
if endpoints.projects || (endpoints.get && endpoints.get.projects) if endpoints.projects || (endpoints.get && endpoints.get.projects)
solid-route(name='admin-projects') solid-route(name='admin-projects')
li li
a Projets a(data-trans='admin.menuRight.projects')

View File

@ -9,41 +9,41 @@
class-name='h1-like' class-name='h1-like'
class-description='h1-aside description' class-description='h1-aside description'
) )
button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle MENU button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle(data-trans='circle.menuRight.buttonMobile')
div.content-box__height div.content-box__height
solid-ac-checker(permission='acl:Read', bind-resources) solid-ac-checker(permission='acl:Read', bind-resources)
#circle-chat(hidden) #circle-chat(hidden, data-view="circle-chat")
include views/circle/page-circle-chat.pug include views/circle/page-circle-chat.pug
#circle-information.content-box__height(hidden) #circle-information.content-box__height(hidden, data-view="circle-information")
include views/circle/page-circle-profile.pug include views/circle/page-circle-profile.pug
#circle-events(hidden) #circle-events(hidden, data-view="circle-events")
include views/circle/page-circle-events.pug include views/circle/page-circle-events.pug
#circle-resources(hidden) #circle-resources(hidden, data-view="circle-resources")
include views/circle/page-circle-resources.pug include views/circle/page-circle-resources.pug
#circle-polls(hidden) #circle-polls(hidden, data-view="circle-polls")
include views/circle/page-circle-polls.pug include views/circle/page-circle-polls.pug
nav.jsRightMenu(role='navigation') nav.jsRightMenu(role='navigation')
solid-router(default-route='circle-chat') solid-router(default-route='circle-chat')
ul ul
li.jsOffsiteToggle li.jsOffsiteToggle
a Replier le menu a(data-trans='circle.menuRight.fold')
solid-route(name='circle-chat') solid-route(name='circle-chat')
li li
a Chat a(data-trans='circle.menuRight.chat')
solid-route(name='circle-information') solid-route(name='circle-information')
li li
a Information a(data-trans='circle.menuRight.information')
if (endpoints.resources || (endpoints.get && endpoints.get.resources)) && (endpoints.resourceskeywords || (endpoints.get && endpoints.get.resourceskeywords)) && (endpoints.resourcestypes || (endpoints.get && endpoints.get.resourcestypes)) if (endpoints.resources || (endpoints.get && endpoints.get.resources)) && (endpoints.resourceskeywords || (endpoints.get && endpoints.get.resourceskeywords)) && (endpoints.resourcestypes || (endpoints.get && endpoints.get.resourcestypes))
solid-route(name='circle-resources' use-id) solid-route(name='circle-resources' use-id)
li li
a Resources a(data-trans='circle.menuRight.resources')
if (endpoints.events || (endpoints.get && endpoints.get.events)) && (endpoints.typeevents || (endpoints.get && endpoints.get.typeevents)) if (endpoints.events || (endpoints.get && endpoints.get.events)) && (endpoints.typeevents || (endpoints.get && endpoints.get.typeevents))
solid-route(name='circle-events' use-id) solid-route(name='circle-events' use-id)
li li
a Events a(data-trans='circle.menuRight.events')
if endpoints.polls || (endpoints.get && endpoints.get.polls) if endpoints.polls || (endpoints.get && endpoints.get.polls)
solid-route(name='circle-polls' use-id) solid-route(name='circle-polls' use-id)
li li
a Polls a(data-trans='circle.menuRight.polls')

View File

@ -1,5 +1,5 @@
.views-container .views-container
h1 Tableau de bord h1(data-trans='dashboard.title')
solid-dashboard( solid-dashboard(
data-src=`${endpoints.dashboards || endpoints.get.dashboards}` data-src=`${endpoints.dashboards || endpoints.get.dashboards}`
) )

View File

@ -13,25 +13,25 @@
value-const-title1='N°' value-const-title1='N°'
) )
button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle MENU button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle(data-trans='project.menuRight.buttonMobile')
div.content-box__height div.content-box__height
solid-ac-checker(permission='acl:Read', bind-resources) solid-ac-checker(permission='acl:Read', bind-resources)
#project-chat(hidden) #project-chat(hidden, data-view="project-chat")
include views/project/page-project-chat.pug include views/project/page-project-chat.pug
#project-information.content-box__height(hidden) #project-information.content-box__height(hidden, data-view="project-information")
include views/project/page-project-profile.pug include views/project/page-project-profile.pug
#project-picture(hidden) #project-picture(hidden, data-view="project-picture")
include views/project/page-project-picture.pug include views/project/page-project-picture.pug
nav.jsRightMenu(role='navigation') nav.jsRightMenu(role='navigation')
solid-router(default-route='project-chat') solid-router(default-route='project-chat')
ul ul
li.jsOffsiteToggle li.jsOffsiteToggle
a Replier le menu a(data-trans='project.menuRight.fold')
solid-route(name='project-chat') solid-route(name='project-chat')
li li
a Chat a(data-trans='project.menuRight.chat')
solid-route(name='project-information') solid-route(name='project-information')
li li
a Information a(data-trans='project.menuRight.information')
solid-route(name='project-picture' use-id) solid-route(name='project-picture' use-id)

View File

@ -0,0 +1,55 @@
document.addEventListener("DOMContentLoaded", () => {
const resizeChat = () => {
let chatBox = Array.from(document.querySelectorAll("solid-xmpp-chat"))
.map((el) => el.shadowRoot ? el.shadowRoot.getElementById("conversejs") : false)
.filter((el) => el)
.pop();
if (chatBox) {
let chatTextArea = chatBox.querySelector(".message-form-container");
let ischatTextArea = setInterval(() => {
chatTextArea = chatBox.querySelector(".message-form-container");
if (chatTextArea) {
clearInterval(ischatTextArea);
if (
chatBox.getBoundingClientRect().height -
chatTextArea.getBoundingClientRect().height !=
chatTextArea.offsetTop
) {
let viewportChat = Array.from(
document.querySelectorAll("#viewport .chat-view")
);
viewportChat.forEach(
(c) => (c.style.height = "calc(100vh - 106px - 57px - 4px)")
);
}
}
}, 15);
}
};
resizeChat();
let isbody = setInterval(() => {
if (document.body) {
clearInterval(isbody);
resizeChat();
}
}, 15);
window.addEventListener("load", () => {
setTimeout(() => {
resizeChat();
}, 0);
});
window.addEventListener("resize", () => {
setTimeout(() => {
resizeChat();
}, 0);
});
document.addEventListener("navigate", () => {
setTimeout(() => {
resizeChat();
}, 0);
});
});

198
src/scripts/intl.js Normal file
View File

@ -0,0 +1,198 @@
/*
js intl, inspired by danabr/jsI18n
*/
class JsI18n {
constructor() {
this.locale = ""; //Current locale
this.locales = new Array(); //Available locales
}
/*
Method for automatically detecting the language, does not work in every browser.
*/
detectLanguage() {
if (localStorage.getItem('language') || (window.navigator.language !== null && window.navigator.language !== undefined)) {
this.setLocale(localStorage.getItem('language') || window.navigator.language.slice(0, 2));
} else {
console.error('Language not found');
this.setLocale('fr');
}
};
/*
Translates tag contents and
attributes depending on the
value of key.
*/
translateTag(node, key) {
if (key.indexOf("=") == -1) { //Simple key
this.translateNodeContent(node, key);
} else { //Attribute/key pairs
var parts = key.split(";");
for (var i = 0; i < parts.length; i++) {
var pair = parts[i].split("=");
var attr = pair[0].toLowerCase().trim();
var k = pair[1].trim();
if (attr == "html") {
this.translateNodeContent(node, k);
} else {
if(node.tagName == "SOLID-DELETE") {
let button = node.querySelector('button');
if(button != null) {
this.translateNodeContent(button, k);
}
}
this.translateNodeContent(node.attributes[attr], k);
}
}
}
}
/**
Replace the content of the given node
if there is a translation for the given key.
**/
translateNodeContent(node, key) {
var translation = this.t(key);
if (node != null && translation != undefined) {
if (node.nodeType == 1) { //Element
try {
node.innerHTML = translation;
} catch (e) {
node.text = translation;
}
} else if (node.nodeType == 2) { //Attribute
node.value = translation;
}
}
}
/*
Helper for translating a node
and all its child nodes.
*/
processNode(node) {
if (node != undefined) {
if (node.nodeType == 1) { //Element node
var key = node.attributes["data-trans"];
if (key != null) {
this.translateTag(node, key.nodeValue);
}
}
//Process child nodes
var children = node.childNodes;
for (var i = 0; i < children.length; i++) {
this.processNode(children[i]);
}
}
}
/*
Adds a locale to the list,
replacing the translations
if the locale is already defined.
*/
addLocale(locale, translations) {
this.locales[locale.toString()] = translations;
}
/*
Sets the locale to use when translating.
*/
setLocale(locale) {
try {
fetch(`/locales/${locale}.json`).then((result) => {
if (result.ok) {
result.json().then(e => {
this.addLocale(locale, e);
this.processPage();
}).catch(() => {
if (locale != "fr") {
console.warn(`Locale not found: ${locale}, fallback to french`);
this.setLocale("fr");
} else {
console.error("Language not found");
}
});
} else {
if (locale != "fr") {
console.warn(`Locale not found: ${locale}, fallback to french`);
this.setLocale("fr");
} else {
console.error("Language not found");
}
}
});
this.locale = locale;
} catch {
if (locale != "fr") {
console.warn(`Locale not found: ${locale}, fallback to french`);
this.setLocale("fr");
} else {
console.error("Language not found");
}
}
}
/*
Fetches the translation associated with the given key.
*/
t(key) {
var translations = this.locales[this.locale];
if (translations != undefined) {
let translation = key.toString().split('.').reduce((o, i) => (o ? o[i] : undefined), translations);
if(typeof translation == "string") {
return translation;
} else {
return translations[key.toString()];
}
}
return undefined;
}
/*
Alias for JsI18n.t
*/
translate(key) {
this.t(key);
}
/**
Replaces the contents of all tags
that have the data-trans attribute set.
**/
processPage() {
this.processNode(document.getElementsByTagName("html")[0]);
}
}
//Global
jsI18n = new JsI18n;
document.addEventListener("DOMContentLoaded", () => {
// Detect the lang & initialize, based on the browser or "language" item from localstorage
jsI18n.detectLanguage();
/*
recursivePopulate(DOMElement)
Will listen for the populate event of any sib element
Process the changed node every time it populate
Recursively add a populate listener for children elements
*/
function recursivePopulate(element) {
Array.from(element.querySelectorAll('*')).forEach((e) => {
e.addEventListener("populate", (e) => {
recursivePopulate(e.target);
jsI18n.processNode(e.target);
});
});
}
// Process every children from document
recursivePopulate(document);
});

View File

@ -49,6 +49,9 @@
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
} }
solid-multiple[name="user.communities"] {
text-align: left;
}
} }
} }

View File

@ -11,5 +11,6 @@ solid-widget(name='hubl-captain')
class-is_lead='user-thumb__lead' class-is_lead='user-thumb__lead'
widget-account.picture='hubl-user-avatar' widget-account.picture='hubl-user-avatar'
value-is_lead='Capitaine' value-is_lead=''
data-trans='value-is_lead=template-captain.isLead'
) )

View File

@ -1,7 +1,7 @@
div.content-box__info.flex div.content-box__info.flex
solid-link(class="backlink right", next='admin-circle-list') Retour solid-link(class="backlink right", next='admin-circle-list' data-trans='circle.create.backlink')
h1.centered Créer un cercle h1.centered(data-trans='circle.create.title')
div#loader-circles-create.loader.loader-top div#loader-circles-create.loader.loader-top
div div
@ -22,13 +22,15 @@ div.content-box__info.flex
class-name='form-label is-light is-full-width input-text-like' class-name='form-label is-light is-full-width input-text-like'
class-description='form-label is-light is-full-width input-text-like' class-description='form-label is-light is-full-width input-text-like'
label-status='Statut du cercle' label-status=''
label-name='Nom du cercle *' label-name=''
label-description='Sous-titre du cercle *' label-description=''
widget-status='hubl-status' widget-status='hubl-status'
next='circle' next='circle'
submit-button='Enregistrer' submit-button=''
data-trans='label-status=circle.create.labelStatus;label-name=circle.create.labelName;label-description=circle.create.labelDescription;submit-button=circle.create.buttonSubmit'
) )

View File

@ -5,12 +5,12 @@
solid-route(name='circle-left') solid-route(name='circle-left')
div.content-box__header.flex.space-between div.content-box__header.flex.space-between
h1.without-margin Administration h1.without-margin(data-trans='circle.list.title')
button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle MENU button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle(data-trans='circle.list.buttonMobile')
include ../circle/page-circle-left.pug include ../circle/page-circle-left.pug
#admin-circle-list.content-box__height(hidden) #admin-circle-list.content-box__height(hidden, data-view="admin-circle-list")
include ../../templates/hubl-user-avatar.pug include ../../templates/hubl-user-avatar.pug
solid-widget(name='hubl-circle-owner') solid-widget(name='hubl-circle-owner')
@ -31,27 +31,29 @@
div.admin-header.flex div.admin-header.flex
h3 Cercles h3(data-trans='circle.list.subTitle')
solid-link( solid-ac-checker(data-src=`${endpoints.circles || (endpoints.post && endpoints.post.circles)}`, permission='acl:Append')
class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus' solid-link(
next='admin-circle-create' class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus'
) Créer un cercle next='admin-circle-create' data-trans='circle.list.buttonCreate'
)
.table-wrapper .table-wrapper
.table .table
div.table-header.grey-color div.table-header.grey-color
div.w280 Nom div.w280(data-trans='circle.list.tableHeader1')
div.w280 Administrateurs div.w280(data-trans='circle.list.tableHeader2')
div.w280 Rejoindre div.w280(data-trans='circle.list.tableHeader3')
solid-widget(name='hubl-admin-circle-leave-button') solid-widget(name='hubl-admin-circle-leave-button')
template template
solid-delete( solid-delete(
class='circle-leave button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' class='circle-leave button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}" data-src="${src}"
data-label='Quitter' data-label=''
data-trans='data-label=circle.list.buttonQuit'
) )
hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}` target-src='${src}') hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}` target-src='${src}')
hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}joinable/` target-src='${src}') hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}joinable/` target-src='${src}')
@ -89,6 +91,7 @@
widget-user.username='solid-form-hidden' widget-user.username='solid-form-hidden'
submit-button='Rejoindre' submit-button='Rejoindre'
data-trans='submit-button=circle.list.buttonJoin'
) )
hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}` target-src='${value}') hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}` target-src='${value}')
hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}joinable/` target-src='${value}') hubl-reactivity(data-src=`${endpoints.circles || endpoints.get.circles}joinable/` target-src='${value}')
@ -120,5 +123,5 @@
div div
div div
#admin-circle-create.content-box__height(hidden) #admin-circle-create.content-box__height(hidden, data-view="admin-circle-create")
include page-admin-circles-create.pug include page-admin-circles-create.pug

View File

@ -4,8 +4,8 @@
solid-route(name='admin-users-create', use-id) solid-route(name='admin-users-create', use-id)
div.content-box__header.flex.space-between div.content-box__header.flex.space-between
h1.without-margin Administration h1.without-margin(data-trans='communities.title')
button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle MENU button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle(data-trans='communities.menuMobile')
solid-widget(name='hubl-action-community') solid-widget(name='hubl-action-community')
template template
@ -14,20 +14,21 @@
class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus' class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus'
data-src="${value}" data-src="${value}"
next="admin-users-create" next="admin-users-create"
) Inviter un nouvel utilisateur data-trans='communities.linkInvite'
)
solid-ac-checker(data-src="${value}", nested-field="members", no-permission='acl:Append') solid-ac-checker(data-src="${value}", nested-field="members", no-permission='acl:Append')
div.button.text-bold.text-uppercase.button-disabled Membre, aucune permission div.button.text-bold.text-uppercase.button-disabled(data-trans='communities.noPermission')
#admin-communities-list.content-box__height(hidden) #admin-communities-list.content-box__height(hidden, data-view="admin-communities-list")
div.content-box__info.flex div.content-box__info.flex
div.admin-header.flex div.admin-header.flex
h3 Communautés h3(data-trans='communities.subTitle')
.table-wrapper .table-wrapper
.table .table
div.table-header.grey-color div.table-header.grey-color
div.w450 Nom div.w450(data-trans='communities.tableHeader1')
div.w370 Action div.w370(data-trans='communities.tableHeader2')
solid-display( solid-display(
class='table-body' class='table-body'
@ -49,5 +50,5 @@
div div
div div
#admin-users-create.content-box__height(hidden) #admin-users-create.content-box__height(hidden, data-view="admin-users-create")
include page-admin-users-create.pug include page-admin-users-create.pug

View File

@ -1,7 +1,7 @@
div.content-box__info.flex div.content-box__info.flex
solid-link(class="backlink right" next='admin-project-list') Retour solid-link(class="backlink right" next='admin-project-list' data-trans='project.create.backlink')
h1.centered Créer un nouveau projet h1.centered(data-trans='project.create.title')
div#loader-projects-create.loader.loader-top div#loader-projects-create.loader.loader-top
div div
@ -19,18 +19,18 @@ div.content-box__info.flex
required-captain required-captain
loader-id='loader-projects-create' loader-id='loader-projects-create'
label-status='Statut du cercle*' label-status=''
widget-status='solid-form-hidden' widget-status='solid-form-hidden'
class-status='form-label is-light is-full-width' class-status='form-label is-light is-full-width'
value-status="Private" value-status="Private"
label-customer.name='Nom du client*' label-customer.name=''
class-customer.name='form-label is-light is-half-width input-text-like' class-customer.name='form-label is-light is-half-width input-text-like'
label-name='Nom du projet*' label-name=''
class-name='form-label is-light is-half-width input-text-like' class-name='form-label is-light is-half-width input-text-like'
label-captain='Capitaine du projet*' label-captain=''
range-captain=`${endpoints.users || endpoints.get.users}` range-captain=`${endpoints.users || endpoints.get.users}`
class-captain='form-label is-light is-half-width' class-captain='form-label is-light is-half-width'
widget-captain='solid-form-dropdown-autocompletion-label' widget-captain='solid-form-dropdown-autocompletion-label'
@ -39,5 +39,7 @@ div.content-box__info.flex
next='project' next='project'
submit-button='Enregistrer' submit-button=''
data-trans='label-status=project.create.labelStatus;label-customer.name=project.create.labelCustomer;label-name=project.create.labelName;label-captain=project.create.labelCaptain;submit-button=project.create.buttonSubmit'
) )

View File

@ -5,37 +5,40 @@
solid-route(name='project-left') solid-route(name='project-left')
div.content-box__header.flex.space-between div.content-box__header.flex.space-between
h1.without-margin Administration h1.without-margin(data-trans='project.list.title')
button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle MENU button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle(data-trans='project.list.buttonMobile')
#project-left(hidden) #project-left(hidden, data-view="project-left")
include ../project/page-project-left.pug include ../project/page-project-left.pug
#admin-project-list.content-box__height(hidden) #admin-project-list.content-box__height(hidden, data-view="admin-project-list")
include ../../templates/hubl-user-avatar.pug include ../../templates/hubl-user-avatar.pug
div.content-box__info.flex div.content-box__info.flex
div.admin-header.flex div.admin-header.flex
h3 Projets h3(data-trans='project.list.subTitle')
solid-link( solid-ac-checker(data-src=`${endpoints.projects || (endpoints.post && endpoints.post.projects)}`, permission='acl:Append')
class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus' solid-link(
next='admin-project-create' class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus'
) Créer un nouveau projet next='admin-project-create'
data-trans='project.list.buttonCreate'
)
.table-wrapper .table-wrapper
.table .table
div.table-header.grey-color div.table-header.grey-color
div.w280 Nom div.w280(data-trans='project.list.tableHeader1')
div.w280 Administrateurs div.w280(data-trans='project.list.tableHeader2')
div.w280 Capitaines div.w280(data-trans='project.list.tableHeader3')
div.w230 Rejoindre div.w230(data-trans='project.list.tableHeader4')
solid-widget(name="hubl-admin-project-leave-button") solid-widget(name="hubl-admin-project-leave-button")
template template
solid-delete( solid-delete(
class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}" data-src="${src}"
data-label='Quitter' data-label=''
data-trans='data-label=project.list.buttonQuit'
) )
hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}` target-src='${src}') hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}` target-src='${src}')
hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}joinable/` target-src='${src}') hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}joinable/` target-src='${src}')
@ -73,7 +76,8 @@
solid-delete( solid-delete(
class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}" data-src="${src}"
data-label='Quitter' data-label=''
data-trans='data-label=project.list.buttonQuit'
) )
solid-display( solid-display(
@ -108,7 +112,8 @@
value-user.username='hubl-workaround-493' value-user.username='hubl-workaround-493'
widget-user.username='solid-form-hidden' widget-user.username='solid-form-hidden'
submit-button='Rejoindre' submit-button=''
data-trans='submit-button=project.list.buttonJoin'
) )
hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}` target-src='${src}') hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}` target-src='${src}')
hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}joinable/` target-src='${src}') hubl-reactivity(data-src=`${endpoints.projects || endpoints.get.projects}joinable/` target-src='${src}')
@ -144,5 +149,5 @@
div div
div div
#admin-project-create(hidden) #admin-project-create(hidden, data-view="admin-project-create")
include page-admin-projects-create.pug include page-admin-projects-create.pug

View File

@ -1,10 +1,11 @@
div.content-box__info.flex div.content-box__info.flex
solid-link(class='backlink right', next='admin-communities-list') Retour solid-link(class='backlink right', next='admin-communities-list' data-trans='user.create.backlink')
solid-display.h1-like.centered( solid-display.h1-like.centered(
bind-resources bind-resources
fields='text, name' fields='text, name'
value-text="Inviter un utilisateur à " value-text=''
data-trans='value-text=user.create.title'
loader-id='loader-users-title' loader-id='loader-users-title'
) )
@ -22,13 +23,13 @@ div.content-box__info.flex
solid-widget(name='hubl-username-field') solid-widget(name='hubl-username-field')
template template
label Nom d'utilisateur* label(data-trans='user.create.labelUsername')
input(type="text" title='Caractères alphanumérique uniquement' pattern="[a-zA-Z0-9]+" label="Nom d'utilisateur *" name="username" required value="\${value}" data-holder) input(type="text" title='' pattern="[a-zA-Z0-9]+" label="" data-trans='title=user.create.labelUsernameTitle;label=user.create.labelUsername' name="username" required value="\${value}" data-holder)
solid-widget(name='hubl-email-field') solid-widget(name='hubl-email-field')
template template
label E-mail * label(data-trans='user.create.labelEmail')
input(type="email" label="E-mail *" name="email" required value="\${value}" data-holder) input(type="email" label='' data-trans='label=user.create.labelEmail' name="email" required value="\${value}" data-holder)
solid-form.form.button-register#selected-community( solid-form.form.button-register#selected-community(
bind-resources bind-resources
@ -46,10 +47,10 @@ div.content-box__info.flex
class-user.username='form-label is-light is-half-width input-text-like' class-user.username='form-label is-light is-half-width input-text-like'
class-user.email='form-label is-light is-half-width input-text-like' class-user.email='form-label is-light is-half-width input-text-like'
label-user.first_name='Prénom *' label-user.first_name=''
label-user.last_name='Nom *' label-user.last_name=''
label-user.username='Nom d\'utilisateur *' label-user.username=''
label-user.email='E-mail *' label-user.email=''
value-user.password='' value-user.password=''
widget-user.password='solid-form-hidden' widget-user.password='solid-form-hidden'
@ -59,5 +60,6 @@ div.content-box__info.flex
next='admin-communities-list' next='admin-communities-list'
submit-button='Inviter' submit-button=''
data-trans='label-user.first_name=user.create.labelFirstname;label-user.last_name=user.create.labelLastname;label-user.username=user.create.labelUsername;label-user.email=user.create.labelEmail;submit-button=user.create.buttonSubmit'
) )

View File

@ -8,13 +8,14 @@ div.content-box__info
solid-delete( solid-delete(
class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}" data-src="${src}"
data-label='Retirer' data-label=''
data-trans='data-label=circle.edit.buttonDelete'
) )
solid-link(class="backlink right", bind-resources, next='circle-profile') Retour solid-link(class="backlink right", bind-resources, next='circle-profile' data-trans='circle.edit.backlink')
solid-ac-checker(permission='acl:Write', bind-resources) solid-ac-checker(permission='acl:Write', bind-resources)
h1 Modifie ton cercle h1(data-trans='circle.edit.title')
div#loader-circle-edit.loader.loader-top div#loader-circle-edit.loader.loader-top
div div
@ -32,12 +33,12 @@ div.content-box__info
required-description required-description
range-owner=`${endpoints.users || endpoints.get.users}` range-owner=`${endpoints.users || endpoints.get.users}`
label-status='Statut du cercle' label-status=''
widget-status='hubl-status' widget-status='hubl-status'
label-name='Nom du cercle *' label-name=''
label-owner='Administrateur ou administratrice *' label-owner=''
label-description='Sous-titre du cercle *' label-description=''
class-name='form-label is-light is-half-width input-text-like' class-name='form-label is-light is-half-width input-text-like'
class-owner='form-label is-light is-half-width member-select color' class-owner='form-label is-light is-half-width member-select color'
@ -50,9 +51,11 @@ div.content-box__info
submit-button='Enregistrer' submit-button='Enregistrer'
next='circle-information' next='circle-information'
data-trans='label-name=circle.edit.labelStatus;label-name=circle.edit.labelName;label-owner=circle.edit.labelOwner;label-description=circle.edit.labelDescription;submit-button=circle.edit.buttonSubmit'
) )
h2 Liste des membres : h2(data-trans='circle.edit.subTitle')
solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members') solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members')
solid-form.block.select-add( solid-form.block.select-add(
@ -64,14 +67,15 @@ div.content-box__info
class-user='team' class-user='team'
widget-user='solid-form-dropdown-autocompletion' widget-user='solid-form-dropdown-autocompletion'
submit-button='Ajouter un membre' submit-button=''
data-trans='submit-button=circle.edit.buttonAddMember'
) )
.table-wrapper .table-wrapper
.table .table
div.table-header.grey-color div.table-header.grey-color
div.w280 Nom div.w280(data-trans='circle.edit.tableHeader1')
div.w162 Accès div.w162(data-trans='circle.edit.tableHeader2')
solid-display( solid-display(
class='table-body' class='table-body'

View File

@ -1,5 +1,10 @@
#circle-left(hidden) #circle-left(hidden, data-view="circle-left")
div.content-box__info.flex(style="padding: 15px") div.content-box__info.flex(style="padding: 15px")
p Tu as quitté ce cercle. p(data-trans='circle.left.paragraphQuit')
p Pour le rejoindre à nouveau, rends-toi dans le panneau <solid-link next="admin-circle-list">administration</solid-link> ou contacte un administrateur. p
span(data-trans='circle.left.paragraphJoin')
span &nbsp;
solid-link(next="admin-circle-list" data-trans='circle.left.admin')
span &nbsp;
span(data-trans='circle.left.paragraphContact')

View File

@ -2,7 +2,7 @@ solid-router(default-route='circle-profile', hidden)
solid-route(name='circle-profile') solid-route(name='circle-profile')
solid-route(name='circle-edit') solid-route(name='circle-edit')
#circle-profile(hidden) #circle-profile(hidden, data-view="circle-profile")
solid-widget(name='hubl-circle-team-contact') solid-widget(name='hubl-circle-team-contact')
template template
@ -24,15 +24,16 @@ solid-router(default-route='circle-profile', hidden)
class-title='word-spacing-right' class-title='word-spacing-right'
value-title='Date de création : ' value-title=''
data-trans='value-title=circle.profile.creationDate'
widget-creationDate='solid-display-value-date' widget-creationDate='solid-display-value-date'
) )
solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members') solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members')
solid-ac-checker(permission='acl:Delete', bind-resources) solid-ac-checker(permission='acl:Delete', bind-resources)
solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='circle-edit' bind-resources) Modifier et ajouter un membre solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='circle-edit' bind-resources data-trans='circle.profile.buttonModify')
solid-ac-checker(no-permission='acl:Delete', bind-resources) solid-ac-checker(no-permission='acl:Delete', bind-resources)
solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='circle-edit' bind-resources) Ajouter un membre solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='circle-edit' bind-resources data-trans='circle.profile.buttonAdd')
div.flex.desktop-button__end div.flex.desktop-button__end
@ -40,7 +41,8 @@ solid-router(default-route='circle-profile', hidden)
solid-delete( solid-delete(
class='button mobile-full-width text-bold text-uppercase button-primary bordered with-icon icon-trash' class='button mobile-full-width text-bold text-uppercase button-primary bordered with-icon icon-trash'
bind-resources bind-resources
data-label='Supprimer le cercle' data-label=''
data-trans='data-label=circle.profile.buttonDelete'
next='admin-circles' next='admin-circles'
) )
@ -50,7 +52,8 @@ solid-router(default-route='circle-profile', hidden)
solid-delete( solid-delete(
class='button mobile-full-width desktop-btn-margin__left text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' class='button mobile-full-width desktop-btn-margin__left text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}" data-src="${src}"
data-label='Quitter le cercle' data-label=''
data-trans='data-label=circle.profile.buttonQuit'
next='circle-left' next='circle-left'
) )
@ -65,7 +68,8 @@ solid-router(default-route='circle-profile', hidden)
value-user.username='hubl-workaround-493' value-user.username='hubl-workaround-493'
widget-user.username='solid-form-hidden' widget-user.username='solid-form-hidden'
submit-button='Rejoindre le cercle' submit-button=''
data-trans='submit-button=circle.profile.buttonJoin'
) )
solid-display( solid-display(
@ -82,7 +86,7 @@ solid-router(default-route='circle-profile', hidden)
hubl-inherit-user-id="search-value-user" hubl-inherit-user-id="search-value-user"
) )
h2 Membres : h2(data-trans='circle.profile.subTitle')
solid-widget(name='hubl-circle-user-admin') solid-widget(name='hubl-circle-user-admin')
template ${value ? "Administrateur" : ""} template ${value ? "Administrateur" : ""}
@ -109,5 +113,5 @@ solid-router(default-route='circle-profile', hidden)
) )
#circle-edit.content-box__height(hidden) #circle-edit.content-box__height(hidden, data-view="circle-edit")
include page-circle-edit.pug include page-circle-edit.pug

View File

@ -4,7 +4,8 @@ solid-notifications-template(data-rdf-type='hd:circle')
| ${await author['account.foaf:depiction'] ? `<img src="${await author['account.foaf:depiction']}" style="max-width:100%; max-height: 100%;" />` : `<object type="image/svg+xml" data="/images/alien.svg"></object>`} | ${await author['account.foaf:depiction'] ? `<img src="${await author['account.foaf:depiction']}" style="max-width:100%; max-height: 100%;" />` : `<object type="image/svg+xml" data="/images/alien.svg"></object>`}
.solid-notification__content .solid-notification__content
.solid-notification__title ${await author.name} .solid-notification__title ${await author.name}
span.solid-notification__title__side dans span.solid-notification__title__side
span(data-trans='notification.circle.in')
span.solid-notification__title__icon ${(await object.status) == 'Public' ? '#' : ''} span.solid-notification__title__icon ${(await object.status) == 'Public' ? '#' : ''}
| ${await object.name} | ${await object.name}
p.solid-notification__summary ${summary} p.solid-notification__summary ${summary}

View File

@ -4,5 +4,5 @@ solid-notifications-template(data-rdf-type='foaf:user')
| ${await author['account.foaf:depiction'] ? `<img src="${await author['account.foaf:depiction']}" style="max-width:100%; max-height: 100%;" />` : `<object type="image/svg+xml" data="/images/alien.svg"></object>`} | ${await author['account.foaf:depiction'] ? `<img src="${await author['account.foaf:depiction']}" style="max-width:100%; max-height: 100%;" />` : `<object type="image/svg+xml" data="/images/alien.svg"></object>`}
.solid-notification__content .solid-notification__content
.solid-notification__title ${await author.name} .solid-notification__title ${await author.name}
span.solid-notification__title__side en privé span.solid-notification__title__side(data-trans='notification.private.private')
p.solid-notification__summary ${summary} p.solid-notification__summary ${summary}

View File

@ -8,13 +8,14 @@ div.content-box__info
solid-delete( solid-delete(
class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}" data-src="${src}"
data-label='Retirer' data-label=''
data-trans='data-label=project.edit.buttonDelete'
) )
solid-link(class='backlink right', bind-resources, next='project-profile') Retour solid-link(class='backlink right', bind-resources, next='project-profile' data-trans='project.edit.backlink')
solid-ac-checker(permission='acl:Write', bind-resources) solid-ac-checker(permission='acl:Write', bind-resources)
h1 Modifie ton projet h1(data-trans='project.edit.title')
div#loader-project-edit.loader.loader-top div#loader-project-edit.loader.loader-top
div div
@ -29,20 +30,21 @@ div.content-box__info
required-customer.name required-customer.name
required-name required-name
label-name=''
label-name='Nom du projet*'
class-name='form-label is-light is-half-width input-text-like' class-name='form-label is-light is-half-width input-text-like'
label-customer.name='Nom du client*' label-customer.name=''
class-customer.name='form-label is-light is-half-width input-text-like' class-customer.name='form-label is-light is-half-width input-text-like'
partial="" partial=""
submit-button='Enregistrer' submit-button='Enregistrer'
next='project-information' next='project-information'
data-trans='label-name=project.edit.labelName;label-customer.name=project.edit.labelCustomer;submit-button=project.edit.buttonSubmit'
) )
h2 Liste des membres : h2(data-trans='project.edit.subTitle')
solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members') solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members')
solid-form.block.select-add( solid-form.block.select-add(
@ -55,14 +57,15 @@ div.content-box__info
label-user='' label-user=''
widget-user='solid-form-dropdown-autocompletion' widget-user='solid-form-dropdown-autocompletion'
submit-button='Ajouter un membre' submit-button=''
data-trans='submit-button=project.edit.buttonAddMember'
) )
.table-wrapper .table-wrapper
.table .table
div.table-header.grey-color div.table-header.grey-color
div.w280 Nom div.w280(data-trans='project.edit.tableHeader1')
div.w162 Accès div.w162(data-trans='project.edit.tableHeader2')
//-class='table-body' //-class='table-body'
solid-display( solid-display(

View File

@ -1,5 +1,10 @@
#project-left #project-left
div.content-box__info.flex(style="padding: 15px") div.content-box__info.flex(style="padding: 15px")
p Tu as quitté ce projet. p(data-trans='circle.left.paragraphQuit')
p Ceci est un projet privé. Pour le rejoindre, rends-toi dans le panneau <solid-link next="admin-project-list">administration</solid-link> et demande une invitation. p
span(data-trans='project.left.paragraphJoin')
span &nbsp;
solid-link(next="admin-project-list" data-trans='project.left.admin')
span &nbsp;
span(data-trans='project.left.paragraphContact')

View File

@ -1,8 +1,8 @@
div.content-box__info div.content-box__info
solid-link(class='backlink right', bind-resources, next='project-edit') Retour solid-link(class='backlink right', bind-resources, next='project-edit' data-trans='project.modifyPicture.backlink')
h1 Modifier l'image du projet h1(data-trans='project.modifyPicture.title')
solid-picture.project-edit-picture( solid-picture.project-edit-picture(
bind-resources bind-resources

View File

@ -2,7 +2,7 @@ solid-router(default-route='project-profile', hidden)
solid-route(name='project-profile') solid-route(name='project-profile')
solid-route(name='project-edit') solid-route(name='project-edit')
#project-profile(hidden) #project-profile(hidden, data-view="project-profile")
include ../../templates/hubl-captain.pug include ../../templates/hubl-captain.pug
solid-widget(name='hubl-project-team-contact') solid-widget(name='hubl-project-team-contact')
@ -25,22 +25,24 @@ solid-router(default-route='project-profile', hidden)
class-title='word-spacing-right' class-title='word-spacing-right'
value-title='Date de création : ' value-title=''
data-trans='value-title=project.profile.creationDate'
widget-creationDate='solid-display-value-date' widget-creationDate='solid-display-value-date'
) )
solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members') solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members')
solid-ac-checker(permission='acl:Delete', bind-resources) solid-ac-checker(permission='acl:Delete', bind-resources)
solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='project-edit' bind-resources) Modifier et ajouter un membre solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='project-edit' bind-resources data-trans='project.profile.buttonModify')
solid-ac-checker(no-permission='acl:Delete', bind-resources) solid-ac-checker(no-permission='acl:Delete', bind-resources)
solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='project-edit' bind-resources) Ajouter un membre solid-link(class='button mobile-full-width text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='project-edit' bind-resources data-trans='project.profile.buttonAdd')
div.flex.desktop-button__end div.flex.desktop-button__end
solid-ac-checker(permission='acl:Delete', bind-resources) solid-ac-checker(permission='acl:Delete', bind-resources)
solid-delete( solid-delete(
class='button mobile-full-width text-bold text-uppercase button-primary bordered with-icon icon-trash' class='button mobile-full-width text-bold text-uppercase button-primary bordered with-icon icon-trash'
bind-resources bind-resources
data-label='Supprimer le projet' data-label=''
data-trans='data-label=project.profile.buttonDelete'
next='admin-projects' next='admin-projects'
) )
@ -49,7 +51,8 @@ solid-router(default-route='project-profile', hidden)
solid-delete( solid-delete(
class='button mobile-full-width desktop-btn-margin__left text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' class='button mobile-full-width desktop-btn-margin__left text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}" data-src="${src}"
data-label='Quitter le projet' data-label=''
data-trans='data-label=project.profile.buttonQuit'
next='project-left' next='project-left'
) )
@ -74,14 +77,15 @@ solid-router(default-route='project-profile', hidden)
bind-resources bind-resources
fields='label-captain, captain' fields='label-captain, captain'
value-label-captain='Capitaine :' value-label-captain=''
data-trans='value-label-captain=project.profile.captain',
class-label-captain='h2-like' class-label-captain='h2-like'
widget-captain='hubl-captain' widget-captain='hubl-captain'
) )
br br
h2 Equipe : h2(data-trans:'project.profile.subTitle')
solid-widget(name='hubl-project-user-admin') solid-widget(name='hubl-project-user-admin')
template ${value ? "Administrateur" : ""} template ${value ? "Administrateur" : ""}
@ -107,5 +111,5 @@ solid-router(default-route='project-profile', hidden)
widget-is_admin='hubl-project-user-admin' widget-is_admin='hubl-project-user-admin'
) )
#project-edit.content-box__height(hidden) #project-edit.content-box__height(hidden, data-view="project-edit")
include page-project-edit.pug include page-project-edit.pug