diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eca06b2..704c6db 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -176,24 +176,6 @@ community: tags: - deploy -etuc: - stage: deployment - environment: - name: etuc - url: https://app.digitalplatformobservatory.org - before_script: - - npm ci --cache .npm --prefer-offline --only=production - script: - - echo "$APP_CONFIG_DIGITALPLATFORMOBSERVATORY" > config.json - - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key - - npm run build - - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* etuc@ssh-etuc.happy-dev.fr:~/sib/www/ - only: - - master - when: manual - tags: - - deploy - nantes: stage: deployment environment: @@ -230,15 +212,15 @@ paris: tags: - deploy -toulouse: +smarttoulouse: stage: deployment environment: - name: toulouse + name: smarttoulouse url: https://smart-toulouse.happy-dev.fr before_script: - npm ci --cache .npm --prefer-offline --only=production script: - - echo "$APP_CONFIG_TOULOUSE" > config.json + - echo "$APP_CONFIG_SMARTTOULOUSE" > config.json - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key - npm run build - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* smart-toulouse@ssh-smart-toulouse.happy-dev.fr:~/www/ @@ -301,3 +283,327 @@ playground: when: manual tags: - deploy + +casaco: + stage: deployment + environment: + name: casaco + url: https://casaco.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_CASACO" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* casaco@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +opteos: + stage: deployment + environment: + name: opteos + url: https://opteos.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_OPTEOS" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* opteos@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +fnk: + stage: deployment + environment: + name: fnk + url: https://fnk.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_FNK" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* fnk@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +labriqueterie: + stage: deployment + environment: + name: labriqueterie + url: https://labriqueterie.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_LABRIQUETERIE" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* labriqueterie@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +facttic: + stage: deployment + environment: + name: facttic + url: https://facttic.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_FACTTIC" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* facttic@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +cotech: + stage: deployment + environment: + name: cotech + url: https://hubl.coops.tech + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_COTECH" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* cotech@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +lelaptop: + stage: deployment + environment: + name: lelaptop + url: https://lelaptop.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_LELAPTOP" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* lelaptop@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +virtualassembly: + stage: deployment + environment: + name: virtualassembly + url: https://virtual-assembly.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_VIRTUAL_ASS" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* virtual-assembly@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +ouisharequebec: + stage: deployment + environment: + name: ouisharequebec + url: https://ouishare-quebec.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_OUISHARE" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* ouishare-quebec@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +nouvelleaquitaine: + stage: deployment + environment: + name: nouvelleaquitaine + url: https://app.nouvelle-aquitaine.happy-dev.fr + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_NVLE_AQ" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* nouvelle-aquitaine@ssh-nouvelle-aquitaine.happy-dev.fr:~/front/ + only: + - master + when: manual + tags: + - deploy + +paca: + stage: deployment + environment: + name: paca + url: https://app.paca.happy-dev.fr + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_PACA" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* paca@ssh-paca.happy-dev.fr:~/front/ + only: + - master + when: manual + tags: + - deploy + +strasbourg: + stage: deployment + environment: + name: strasbourg + url: https://app.strasbourg.happy-dev.fr + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_STRASBOURG" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* strasbourg@ssh-strasbourg.happy-dev.fr:~/front/ + only: + - master + when: manual + tags: + - deploy + +bretagne: + stage: deployment + environment: + name: bretagne + url: https://app.bretagne.happy-dev.fr + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_BRETAGNE" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* bretagne@ssh-bretagne.happy-dev.fr:~/front/ + only: + - master + when: manual + tags: + - deploy + +lemans: + stage: deployment + environment: + name: lemans + url: https://app.lemans.happy-dev.fr + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_LEMANS" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* lemans@ssh-lemans.happy-dev.fr:~/front/ + only: + - master + when: manual + tags: + - deploy + +apidays: + stage: deployment + environment: + name: apidays + url: https://apidays.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_APIDAYS" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* apidays@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +ejp: + stage: deployment + environment: + name: ejp + url: https://ejp.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_EJP" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* georgetown-uni@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +fichemetierfr: + stage: deployment + environment: + name: fichemetierfr + url: https://fichemetier.fr.hubl.world + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_FICHEMETIERFR" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* fichemetierfr@astral.startinblox.com:~/front/ + only: + - master + when: manual + tags: + - deploy + +toulouse: + stage: deployment + environment: + name: toulouse + url: https://app.toulouse.happy-dev.fr + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - echo "$APP_CONFIG_TOULOUSE" > config.json + - echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key + - npm run build + - scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* toulouse@ssh-toulouse.happy-dev.fr:~/front/ + only: + - master + when: manual + tags: + - deploy diff --git a/.gitlab/issue_templates/new_instance.md b/.gitlab/issue_templates/new_instance.md new file mode 100644 index 0000000..a93fe19 --- /dev/null +++ b/.gitlab/issue_templates/new_instance.md @@ -0,0 +1,40 @@ +/label ~"New Instance" + +# Please fill all these info: + +## General info + +- Name of the instance: +- Domain: + +## Settings: + +- Does the instance allow people to sign up? **Yes / No** +- Does the instance want new people to get a welcome email? **Yes / No** + +## Federation: + +- Which current instance should see this new instance data? **Please provide the info module by module and include the instance itself.** +- Do those current instances agree to share their public data with this new instance? **Yes / No** + +Example: + +- *Instance G is the new kid in town* +- *Instance G wants to only see their dashboard, but want to access the circles of A, B, C, D, E & F.* +- *Instance G wants to be able to chat with users from A, B, C, D, E & F.* +- *Instance G wants to be able to see A and B job offers* + +Let's say every instances agree to this scenario, the issue should describe the following: + +- Dashboard: G +- Circles: A, B, C, D, E, F & G +- Job offers: A, B, F, G +- Users: A, B, C, D, E, F & G +- Profile directory: A, B, C, D, E, F & G +- G agrees that any new instance can see their public data. + +## Cosmetics + +- Logo: +- Favicon: +- 4 Colors: \ No newline at end of file diff --git a/client.sample.happy-dev.css b/client.sample.happy-dev.css index f75cb0a..2ce6bdc 100644 --- a/client.sample.happy-dev.css +++ b/client.sample.happy-dev.css @@ -27,6 +27,12 @@ /* Header's elements */ --color-header-background: var(--color-white); --color-bell: var(--color-complementary-darken); + --color-notification-counter-number: black; + --color-notification-summary: #7A7F85; + --solid-notifications-theme: var(--color-primary); + --color-notification-item-border: #E4E8ED; + --color-notification-scrollbar-background: #EDF1FA; + --color-notification-scrollbar-track: #BDC2D7; --color-user-panel-header-text: var(--color-complementary-darken); --color-user-panel-header-background: var(--color-white); --color-user-panel-header-text-open: var(--color-white); diff --git a/src/components/hubl-search-users.js b/src/components/hubl-search-users.js index ab4300e..c65e58e 100644 --- a/src/components/hubl-search-users.js +++ b/src/components/hubl-search-users.js @@ -5,7 +5,7 @@ const HublSearchUsers = widgetFactory( ` input').focus(); + e.preventDefault(); + } +}); \ No newline at end of file diff --git a/src/scripts/menu-toggle.js b/src/scripts/menu-toggle.js new file mode 100644 index 0000000..8f96670 --- /dev/null +++ b/src/scripts/menu-toggle.js @@ -0,0 +1,11 @@ +document.addEventListener("DOMContentLoaded", () => { + const menuWrappers = Array.from(document.querySelectorAll(".menu-wrapper")); + + //- Toggle sub-menus + menuWrappers.forEach(menuWrapper => { + const menu = menuWrapper.querySelector(".menu"); + menu.addEventListener("click", e => { + menuWrapper.classList.toggle("is-closed"); + }); + }); +}); \ No newline at end of file diff --git a/src/scripts/sib-notifications.js b/src/scripts/sib-notifications.js deleted file mode 100644 index a6c9ddb..0000000 --- a/src/scripts/sib-notifications.js +++ /dev/null @@ -1,60 +0,0 @@ -//- Update badges from notifications list -async function updateBadges(element) { - const unreadNotifications = new Map(); - const notifications = element.component.resource; - if (!notifications) return; - // Generate unread map - for (let notification of notifications['ldp:contains']) { - if (await notification['unread']) { - const object = await notification['object']; - unreadNotifications.set(object['@id'], (unreadNotifications.get(object['@id']) || 0) + 1); - } - } - // update badges - unreadNotifications.forEach((notifNumber, objectId) => { - const badge = document.querySelector(`solid-fix-badge[data-src="${objectId}"]`); - if (badge) { - badge.innerText = notifNumber || ''; - badge.style.display = notifNumber ? 'block' : 'none'; - } - }) -} -document.addEventListener("DOMContentLoaded", function (event) { - - //- Fix badges performances - // on load time - const checkNotificationMenuExist = setInterval(function () { // wait for notification menu to exist - const notifsMenu = document.getElementById('notifications-list'); - if (notifsMenu) { - clearInterval(checkNotificationMenuExist); - notifsMenu.addEventListener('populate', (event) => { - const checkExist = setInterval(function () { // wait for left menus to exist - const subMenus = document.querySelectorAll('.sub-menu > solid-display > div'); - if (subMenus.length >= 2) { - updateBadges(event.target); - clearInterval(checkExist); - } - }, 500); - }, { - once: true - }); - } - }, 500); - - // on refresh notification list - window.addEventListener('notificationsRefresh', () => { - document.getElementById('notifications-list').addEventListener('populate', (event) => { - updateBadges(event.target); - }, { - once: true - }); - }); - - // on read notification - window.addEventListener('read', (event) => { - if (event.detail && event.detail.resource && event.detail.resource['@id']) { - const badge = document.querySelector(`solid-fix-badge[data-src="${event.detail.resource['@id']}"]`); - if (badge) badge.style.display = "none"; - } - }); -}); \ No newline at end of file diff --git a/src/scripts/unreads-menu.js b/src/scripts/unreads-menu.js index 66b18b5..bd6abc7 100644 --- a/src/scripts/unreads-menu.js +++ b/src/scripts/unreads-menu.js @@ -8,7 +8,7 @@ document.addEventListener("DOMContentLoaded", function (event) { window.addEventListener('read', (event) => { if (event.detail && event.detail.resource && event.detail.resource['@id']) { - const badge = document.querySelector(`solid-fix-badge[data-src="${event.detail.resource['@id']}"]`); + const badge = document.querySelector(`solid-badge[data-src="${event.detail.resource['@id']}"]`); if (badge) badge.parentElement.parentElement.classList.remove('unread'); } }); diff --git a/src/styles/abstracts/_variables.scss b/src/styles/abstracts/_variables.scss index ae485e0..03b17c9 100644 --- a/src/styles/abstracts/_variables.scss +++ b/src/styles/abstracts/_variables.scss @@ -33,7 +33,6 @@ --color-main-text: var(--color-grey-4); --color-highlight-primary: var(--color-primary); --color-user-panel: var(--color-black); - --color-bell: var(--color-secondary); --color-avatar-background: var(--color-grey-10); --color-title: var(--color-secondary); --color-h1: var(--color-secondary); @@ -42,6 +41,12 @@ /* Header's elements */ --color-header-background: var(--color-white); --color-bell: var(--color-secondary); + --color-notification-counter-number: var(--color-white); + --color-notification-summary: var(--color-grey-4); + --solid-notifications-theme: var(--color-primary); + --color-notification-item-border: var(--color-grey-12); + --color-notification-scrollbar-background: #EDF1FA; + --color-notification-scrollbar-track: var(--color-grey-8); --color-user-panel-header-text: var(--color-secondary); --color-user-panel-header-background: var(--color-white); --color-user-panel-header-text-open: var(--color-white); diff --git a/src/styles/base/form.scss b/src/styles/base/form.scss index ad3c93b..9234516 100644 --- a/src/styles/base/form.scss +++ b/src/styles/base/form.scss @@ -7,6 +7,7 @@ @include breakpoint(lg) { display: flex; flex-direction: column; + margin-bottom: 0; transition: all .3s ease; } } @@ -31,7 +32,7 @@ left: 0; margin: 0; margin-left: auto; - margin-top: 109px; + margin-top: 32px; position: relative; width: auto; } diff --git a/src/styles/base/header.scss b/src/styles/base/header.scss index 1288dff..7966a19 100644 --- a/src/styles/base/header.scss +++ b/src/styles/base/header.scss @@ -67,17 +67,17 @@ details { } /* End */ -sib-notifications { +solid-notifications { color: var(--color-bell); @include breakpoint(sm) { padding: 0; } - .sib-notifications__container { + .solid-notifications__container { position: relative; - .sib-notifications__button { + .solid-notifications__button { @include icon('bell'); font-size: 2.5rem; @@ -93,7 +93,7 @@ sib-notifications { display: none; } - .sib-notifications__counter { + .solid-notifications__counter { left: 2rem; position: absolute; top: 1px; @@ -102,27 +102,157 @@ sib-notifications { left: 2.1rem; top: -3px; } + + span { + color: var(--color-notification-counter-number); + } + } + } + + .solid-notifications__triangle-back { + display: none; + } + + .solid-notifications__triangle-shadow { + display: none; + + @include breakpoint(lg) { + background: white; + display: block; + position: absolute; + left: auto; + right: -2.1em; + top: 5em; + transform: initial; + width: 0; + z-index: 4; + + &::after { + content: ""; + position: absolute; + width: 0; + height: 0; + margin-left: -5em; + top: 0px; + left: 50%; + border: 1em solid black; + border-color: #fff #fff transparent transparent; + transform-origin: 0 0; + transform: rotate(-45deg); + box-shadow: 6px -6px 10px -3px rgba(92, 97, 104, 0.14); + } } } - .sib-notifications__list { - overflow-x: hidden; + .solid-notifications__list { + border: none; + border-radius: 0; + box-shadow: 0 0 7px 0 rgba(92, 97, 104, 0.24); + max-height: calc(100vh - 50px); position: fixed; left: 0; - top: 4.5rem; + top: 2.5em; width: 100vw; - - @include breakpoint(md) { - border: 0; - border-radius: 0; - } - + @include breakpoint(lg) { + max-height: calc(100vh - 93px); position: absolute; left: auto; - right: 0; - top: 5.6rem; - width: 300px; + right: -2.3em; + top: 3.99em; + width: 347px; + } + + /* Custom scrollbar */ + overflow: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: none; + scrollbar-width: thin; + scrollbar-color: var(--color-notification-scrollbar-track) var(--color-notification-scrollbar-background); + + &::-webkit-scrollbar-track { + background: var(--color-notification-scrollbar-background); + } + + &::-webkit-scrollbar-thumb { + background-color: var(--color-notification-scrollbar-track); + border-radius: 6px; + } + + &::-webkit-scrollbar { + width: 6px; + } + /* End of custom scrollbar */ + + .solid-notifications__item { + border-bottom: 1px solid var(--color-notification-item-border); + + .solid-notification { + padding: 1.2rem 0 1.5rem; + + .solid-notification__avatar { + align-items: center; + background: var(--color-avatar-background); + display: flex; + height: 35px; + justify-content: center; + margin-left: 1.6rem; + margin-right: 1.4rem; + overflow: hidden; + position: relative; + vertical-align: middle; + width: 35px; + + img { + background-color: var(--color-grey-10); + height: 100%; + object-fit: cover; + object-position: center center; + width: 100%; + } + + object { + height: 45%; + width: 45%; + } + } + + .solid-notification__content { + font-family: Open Sans, sans-serif; + + .solid-notification__title { + font-size: 1.3rem; + font-weight: 600; + + .solid-notification__title__side { + font-weight: normal; + } + + .solid-notification__title__icon { + font-family: simple-line-icons; + } + } + + .solid-notification__summary { + color: var(--color-notification-summary); + font-size: 1.2rem; + line-height: 1.7rem; + margin: 1.1rem 0 0; + + @include breakpoint(320px, 388px) { + max-width: 226px; + } + + @include breakpoint(lg) { + max-width: 256px; + } + } + } + + .solid-notification__read { + display: none; + } + } } } } diff --git a/src/styles/base/main.scss b/src/styles/base/main.scss index 23a12a6..835e8db 100644 --- a/src/styles/base/main.scss +++ b/src/styles/base/main.scss @@ -61,7 +61,7 @@ solid-dashboard section { position: sticky; top: 0; overflow-x: hidden; - overflow-y: auto; + overflow-y: scroll; } &.jsLeftMenu { @@ -279,6 +279,111 @@ h5 { width: 15vw; } +.project-edit-logo { + display: flex; + height: 8.5vh; + margin-top: 20px; + margin-bottom: 30px; + + form { + display: flex; + } + + hubl-user-avatar { + width: 104px; + } + + input[type='submit'] { + @extend .button, + .text-bold, + .text-uppercase, + .button-primary, + .bordered; + align-self: center; + } +} + +.form-picture { + + form { + display: block; + text-align: center; + margin-bottom: 2.6rem; + padding-top: 1.8rem; + + @include breakpoint(lg) { + display: flex; + width: 100%; + } + + hubl-user-avatar { + display: inline-block; + max-width: 100%; + max-height: 16.5vh; + + @include breakpoint(lg) { + margin-left: 20px; + max-height: 8.5vh; + max-width: none; + width: calc(35vw - 20px); + } + + >object, + >img { + display: block; + max-height: 16.5vh !important; + + @include breakpoint(lg) { + max-height: 8.5vh !important; + } + } + } + + input { + @extend .button, + .text-bold, + .text-uppercase, + .button-primary, + .bordered; + margin: 10px 0; + width: 100%; + + @include breakpoint(lg) { + margin: auto 0 auto 2.2rem; + width: auto; + } + } + } +} + + + +.p_relative { + position: relative; +} + +.flex_column { + flex-direction: column; +} + +.flex_vertical-center { + align-items: center; +} + +.w90 { + + @include breakpoint(sm) { + width: 90%; + } +} + +.w100 { + + @include breakpoint(sm) { + width: 100%; + } +} + .content-box { @include window-style-modal(); flex-direction: column; diff --git a/src/styles/base/menu-left.scss b/src/styles/base/menu-left.scss index 7b070ed..6996fb6 100644 --- a/src/styles/base/menu-left.scss +++ b/src/styles/base/menu-left.scss @@ -13,13 +13,21 @@ solid-router { .menu-wrapper { - &.is-closed { - .sub-menu { - display: none; + .menu-icon.icon-arrow-up { + visibility: hidden; + } + @include breakpoint(lg) { + .menu-icon.icon-arrow-up { + visibility: visible; } + &.is-closed { + .sub-menu { + display: none; + } - .menu-chevron { - transform: rotate(180deg); + .menu-chevron { + transform: rotate(180deg); + } } } } @@ -162,7 +170,7 @@ width: calc(80vw - 71px); display: block; background-color: var(--color-secondary); - color: var(--color-grey-6); + color: var(--color-white); border: 1px solid var(--color-grey-4); border-radius: 3px; padding: 4px; @@ -182,7 +190,7 @@ grid-template-areas: "left middle right"; >* { - color: var(--color-grey-6); + color: var(--color-white); } >[data-id="prev"] { @@ -227,7 +235,7 @@ } >div { - color: var(--color-grey-6); + color: var(--color-white); cursor: pointer; >hubl-menu-fix-url-circle>solid-display>div, @@ -292,20 +300,3 @@ } } } - -// Temporary fix for badges -solid-fix-badge { - display: none; - box-sizing: border-box; - font-family: sans-serif; - font-size: 12px; - background-color: var(--sib-notifications-theme, gray); - color: #36383a; - border-radius: 50%; - line-height: 20px; - width: 20px; - height: 20px; - text-align: center; - font-weight: bold; - padding-bottom: 0; -} diff --git a/src/styles/base/user-thumb.scss b/src/styles/base/user-thumb.scss index 2541099..8814efb 100644 --- a/src/styles/base/user-thumb.scss +++ b/src/styles/base/user-thumb.scss @@ -38,6 +38,7 @@ } .user-thumb__admin:not(:empty) { + display: block !important; @extend %tag-admin; } diff --git a/src/styles/components/_index.scss b/src/styles/components/_index.scss index d13f842..9f53556 100644 --- a/src/styles/components/_index.scss +++ b/src/styles/components/_index.scss @@ -3,4 +3,5 @@ @import 'filters'; @import 'sidebar'; @import 'skills'; -@import 'tags'; \ No newline at end of file +@import 'tags'; +@import 'project-edit-picture'; diff --git a/src/styles/components/loader.scss b/src/styles/components/loader.scss new file mode 100644 index 0000000..eef86ae --- /dev/null +++ b/src/styles/components/loader.scss @@ -0,0 +1,75 @@ +.loader { + margin: 0 auto; + position: relative; + width: 80px; + height: 20px; + + &.loader-top { + top: 30px; + } + + div { + position: absolute; + width: 13px; + height: 13px; + border-radius: 50%; + background: var(--color-menu-background); + animation-timing-function: cubic-bezier(0, 1, 1, 0); + } + + &.loader-menu div { + width: 8px; + height: 8px; + background: var(--color-menu-text); + } + + div:nth-child(1) { + left: 8px; + animation: lds-ellipsis1 0.6s infinite; + } + + div:nth-child(2) { + left: 8px; + animation: lds-ellipsis2 0.6s infinite; + } + + div:nth-child(3) { + left: 32px; + animation: lds-ellipsis2 0.6s infinite; + } + + div:nth-child(4) { + left: 56px; + animation: lds-ellipsis3 0.6s infinite; + } +} + +@keyframes lds-ellipsis1 { + 0% { + transform: scale(0); + } + + 100% { + transform: scale(1); + } +} + +@keyframes lds-ellipsis3 { + 0% { + transform: scale(1); + } + + 100% { + transform: scale(0); + } +} + +@keyframes lds-ellipsis2 { + 0% { + transform: translate(0, 0); + } + + 100% { + transform: translate(24px, 0); + } +} diff --git a/src/styles/components/project-edit-picture.scss b/src/styles/components/project-edit-picture.scss new file mode 100644 index 0000000..e167109 --- /dev/null +++ b/src/styles/components/project-edit-picture.scss @@ -0,0 +1,39 @@ +.project-edit-picture { + + >div>*:not(:last-child) { + margin-bottom: 2rem; + } + + hubl-user-avatar { + background: transparent; + border-radius: 0; + display: inline-block; + text-align: center; + + object, img { + position: relative; + } + } + + solid-ac-checker:first-of-type { + display: block; + + @include breakpoint(lg) { + display: flex; + } + + #solid-picture-remove { + margin-left: 0; + margin-top: 2rem; + + @include breakpoint(lg) { + margin-left: 2rem; + margin-top: 0; + } + } + } + + solid-ac-checker:last-of-type { + align-self: flex-end; + } +} diff --git a/src/styles/index.scss b/src/styles/index.scss index 1458359..e92bc08 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -6,6 +6,7 @@ @import 'abstracts/fonts'; @import 'abstracts/variables'; @import 'abstracts/mixins'; +@import 'components/loader'; @import 'components/icons/index'; @import 'base/main'; @import 'base/about'; diff --git a/src/views/admin/page-admin-circles-create.pug b/src/views/admin/page-admin-circles-create.pug index 2e94345..4ce3474 100644 --- a/src/views/admin/page-admin-circles-create.pug +++ b/src/views/admin/page-admin-circles-create.pug @@ -1,24 +1,31 @@ div.content-box__info.flex solid-link(class="backlink right", next='admin-circle-list') Retour - h1.centered Créer un canal + h1.centered Créer un cercle + + div#loader-circles-create.loader.loader-top + div + div + div + div solid-form.form.button-register( data-src=`${endpoints.circles || endpoints.post.circles}` fields='status, name, description' + loader-id='loader-circles-create' class-status='form-label is-light is-full-width color' class-name='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 canal' - label-name='Nom du canal *' - label-description='Sous-titre du canal *' + label-status='Statut du cercle' + label-name='Nom du cercle *' + label-description='Sous-titre du cercle *' widget-status='hubl-status' - next='admin-circle-list' + next='circle' submit-button='Enregistrer' ) diff --git a/src/views/admin/page-admin-circles.pug b/src/views/admin/page-admin-circles.pug index d6c1e01..b545c7b 100644 --- a/src/views/admin/page-admin-circles.pug +++ b/src/views/admin/page-admin-circles.pug @@ -31,12 +31,12 @@ div.admin-header.flex - h3 Canaux + h3 Cercles solid-link( class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus' next='admin-circle-create' - ) Créer un canal + ) Créer un cercle .table-wrapper .table @@ -56,6 +56,9 @@ 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(bind-user nested-field="circles" target-src='${src}') + if (endpoints.post && endpoints.post.circles) && (endpoints.get && endpoints.get.circles) + hubl-reactivity(data-src=`${endpoints.post.circles}joinable/` target-src=`${src}`) + hubl-reactivity(data-src=`${endpoints.post.circles}` target-src=`${src}`) solid-display( class='table-body' @@ -63,6 +66,7 @@ bind-user nested-field='circles' fields='circle.name, circle.owner, leaveButton' + loader-id='loader-admin-circles' class-circle.name='w280 border cell-with-name' class-circle.owner='w280 border cell-with-id-card' @@ -89,12 +93,16 @@ 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(bind-user nested-field="circles" target-src='${value}') + if (endpoints.post && endpoints.post.circles) && (endpoints.get && endpoints.get.circles) + hubl-reactivity(data-src=`${endpoints.post.circles}joinable/` target-src=`${value}`) + hubl-reactivity(data-src=`${endpoints.post.circles}` target-src=`${value}`) solid-display( class='table-body' data-src=`${endpoints.circles || endpoints.get.circles}joinable/` fields='name, owner, members' + loader-id='loader-admin-circles' class-name='w280 border cell-with-name' class-owner='w280 border cell-with-id-card' @@ -106,6 +114,11 @@ order-by="name" ) + div#loader-admin-circles.loader.loader-top + div + div + div + div #admin-circle-create.content-box__height(hidden) include page-admin-circles-create.pug diff --git a/src/views/admin/page-admin-projects-create.pug b/src/views/admin/page-admin-projects-create.pug index 57c9748..1bec5c3 100644 --- a/src/views/admin/page-admin-projects-create.pug +++ b/src/views/admin/page-admin-projects-create.pug @@ -14,18 +14,22 @@ div.content-box__info.flex h1.centered Créer un nouveau projet + div#loader-projects-create.loader.loader-top + div + div + div + div + solid-form.form.button-register( data-src=`${endpoints.projects || endpoints.post.projects}` - fields='status, line-1(customer.name, name), description, line-2(captain), logo' + fields='status, line-1(customer.name, name), line-2(captain)' + loader-id='loader-projects-create' - label-status='Statut du canal*' - widget-status='hubl-status' + label-status='Statut du cercle*' + widget-status='solid-form-hidden' class-status='form-label is-light is-full-width' - - label-description='Description du projet' - class-description='form-label is-light is-full-width input-text-like' - widget-description='solid-form-textarea' + value-status="Private" label-customer.name='Nom du client*' class-customer.name='form-label is-light is-half-width input-text-like' @@ -39,12 +43,8 @@ div.content-box__info.flex widget-captain='solid-form-auto-completion' class='input-text-like' - widget-logo="solid-form-file" - label-logo="Télécharger un logo" - class-logo='select-add' - upload-url-logo=`${endpoints.uploads || endpoints.post.uploads}` - next='admin-project-list' + next='project' - submit-button='Enregistrer et ajouter des membres' + submit-button='Enregistrer' ) diff --git a/src/views/admin/page-admin-projects.pug b/src/views/admin/page-admin-projects.pug index a5b066d..c0268b6 100644 --- a/src/views/admin/page-admin-projects.pug +++ b/src/views/admin/page-admin-projects.pug @@ -40,6 +40,9 @@ 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(bind-user nested-field="projects" target-src='${src}') + if (endpoints.post && endpoints.post.projects) && (endpoints.get && endpoints.get.projects) + hubl-reactivity(data-src=`${endpoints.post.projects}joinable/` target-src=`${src}`) + hubl-reactivity(data-src=`${endpoints.post.projects}` target-src=`${src}`) solid-widget(name='hubl-project-captain') template @@ -79,6 +82,7 @@ bind-user nested-field="projects" fields='project.name, project.members, project.captain, leaveButton' + loader-id='loader-admin-projects' class-project.name='w280 cell border cell-with-name' class-project.members='w280 cell border cell-with-id-card' @@ -109,12 +113,16 @@ 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(bind-user nested-field="projects" target-src='${src}') + if (endpoints.post && endpoints.post.projects) && (endpoints.get && endpoints.get.projects) + hubl-reactivity(data-src=`${endpoints.post.projects}joinable/` target-src=`${value}`) + hubl-reactivity(data-src=`${endpoints.post.projects}` target-src=`${value}`) solid-display( class='table-body' data-src=`${endpoints.projects || endpoints.get.projects}joinable/` fields='name, members, captain, joinButton' + loader-id='loader-admin-projects' class-name='w280 cell border cell-with-name' class-members='w280 cell border cell-with-id-card' @@ -130,5 +138,11 @@ order-by="name" ) + div#loader-admin-projects.loader.loader-top + div + div + div + div + #admin-project-create(hidden) include page-admin-projects-create.pug \ No newline at end of file diff --git a/src/views/admin/page-admin-users-create.pug b/src/views/admin/page-admin-users-create.pug index f52dc81..03b4661 100644 --- a/src/views/admin/page-admin-users-create.pug +++ b/src/views/admin/page-admin-users-create.pug @@ -3,10 +3,17 @@ div.content-box__info.flex h1.centered Ajouter un utilisateur à la plateforme + div#loader-users-create.loader.loader-top + div + div + div + div + solid-form.form.button-register( data-src=`${endpoints.users || endpoints.post.users}` fields='line-1(first_name, last_name), line-2(username, email), line-3(password)' + loader-id='loader-users-create' class-first_name='form-label is-light is-half-width input-text-like' class-last_name='form-label is-light is-half-width input-text-like' diff --git a/src/views/admin/page-admin-users-edit.pug b/src/views/admin/page-admin-users-edit.pug index d372cb3..13a9e9a 100644 --- a/src/views/admin/page-admin-users-edit.pug +++ b/src/views/admin/page-admin-users-edit.pug @@ -3,24 +3,31 @@ div.content-box__info.flex h1.centered span Modifier un utilisateur + + div#loader-users-edit.loader.loader-top + div + div + div + div + solid-display( bind-resources='' fields='name' + loader-id='loader-users-edit' ) solid-form.form.button-register( bind-resources='' - fields='line-1(first_name, last_name), line-2(username, email)' + fields='line-1(first_name, last_name), line-2(email)' + loader-id='loader-users-edit' class-first_name='form-label is-light is-half-width input-text-like' class-last_name='form-label is-light is-half-width input-text-like' - class-username='form-label is-light is-half-width input-text-like' - class-email='form-label is-light is-half-width input-text-like' + class-email='form-label is-light is-full-width input-text-like' label-first_name='Prénom *' label-last_name='Nom *' - label-username='Nom d\'utilisateur *' label-email='E-mail *' next='admin-user-list' diff --git a/src/views/admin/page-admin-users.pug b/src/views/admin/page-admin-users.pug index 84cd0e7..5494220 100644 --- a/src/views/admin/page-admin-users.pug +++ b/src/views/admin/page-admin-users.pug @@ -38,6 +38,7 @@ class='table-body' data-src=`${endpoints.users || endpoints.get.users}` fields='cell-1(user-thumb(account.picture, sup(name), sub(username))), actions' + loader-id='loader-admin-users' class-account.picture='avatar user-thumb__picture' class-name='user-thumb__name' @@ -53,6 +54,11 @@ order-by='username' ) + div#loader-admin-users.loader.loader-top + div + div + div + div #admin-users-create.content-box__height(hidden) include page-admin-users-create.pug diff --git a/src/views/circle/page-circle-edit.pug b/src/views/circle/page-circle-edit.pug index 979ec1c..41e4903 100644 --- a/src/views/circle/page-circle-edit.pug +++ b/src/views/circle/page-circle-edit.pug @@ -44,20 +44,26 @@ div.content-box__info solid-link(class="backlink right", bind-resources, next='circle-profile') Retour solid-ac-checker(permission='acl:Write', bind-resources) - h1 Modifie ton canal + h1 Modifie ton cercle + div#loader-circle-edit.loader.loader-top + div + div + div + div + solid-form.form.button-register( bind-resources fields='status, line-1(name, owner), description' range-owner=`${endpoints.users || endpoints.get.users}` - label-status='Statut du canal' + label-status='Statut du cercle' widget-status='hubl-status' - label-name='Nom du canal' + label-name='Nom du cercle' label-owner='Administrateur ou administratrice' - label-description='Sous-titre du canal *' + label-description='Sous-titre du cercle *' class-name='form-label is-light is-half-width input-text-like' class-owner='form-label is-light is-half-width member-select color' @@ -99,6 +105,7 @@ div.content-box__info class='table-body' bind-resources fields='members' + loader-id='loader-circle-edit' multiple-members='' widget-members='hubl-team-template-edit' diff --git a/src/views/circle/page-circle-left.pug b/src/views/circle/page-circle-left.pug index 0a6b700..5ecf22c 100644 --- a/src/views/circle/page-circle-left.pug +++ b/src/views/circle/page-circle-left.pug @@ -1,5 +1,5 @@ #circle-left(hidden) div.content-box__info.flex(style="padding: 15px") - p Tu as quitté ce canal. + p Tu as quitté ce cercle. p Pour le rejoindre à nouveau, rends-toi dans le panneau administration ou contacte un administrateur. diff --git a/src/views/circle/page-circle-notifications.pug b/src/views/circle/page-circle-notifications.pug new file mode 100644 index 0000000..239c674 --- /dev/null +++ b/src/views/circle/page-circle-notifications.pug @@ -0,0 +1,10 @@ +solid-notifications-template(data-rdf-type='hd:circle') + template + .solid-notification__avatar + | ${await author['account.foaf:depiction'] ? `` : ``} + .solid-notification__content + .solid-notification__title ${await author.name} + span.solid-notification__title__side dans + span.solid-notification__title__icon ${(await object.status) == 'Public' ? '#' : ''} + | ${await object.name} + p.solid-notification__summary ${summary} diff --git a/src/views/circle/page-circle-profile.pug b/src/views/circle/page-circle-profile.pug index df4f59e..3a699ed 100644 --- a/src/views/circle/page-circle-profile.pug +++ b/src/views/circle/page-circle-profile.pug @@ -7,10 +7,17 @@ solid-router(default-route='circle-profile', hidden) .content-box__info.flex + div#loader-circle-profile.loader + div + div + div + div + .flex.space-between.with-padding.mobile-vertical-align solid-display.mobile-margin__bottom( bind-resources fields='creationDateSet(title, creationDate)' + loader-id='loader-circle-profile' class-title='word-spacing-right' @@ -19,7 +26,10 @@ solid-router(default-route='circle-profile', hidden) widget-creationDate='solid-display-date' ) solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members') - 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-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-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 div.flex.desktop-button__end @@ -27,16 +37,18 @@ solid-router(default-route='circle-profile', hidden) solid-delete( class='button mobile-full-width text-bold text-uppercase button-primary bordered with-icon icon-trash' bind-resources - data-label='Supprimer le canal' + data-label='Supprimer le cercle' ) solid-widget(name='hubl-circle-leave-button') template - solid-delete( - 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-label='Quitter le canal' - ) + solid-ac-checker(no-permission='acl:Delete', data-src="${src}", nested-field="circle") + solid-delete( + 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-label='Quitter le cercle' + next='circle-left' + ) solid-widget(name='hubl-circle-join-button') template @@ -45,14 +57,11 @@ solid-router(default-route='circle-profile', hidden) data-src='' nested-field='members' - fields='user.@id' - label-user.@id='' - value-user.@id='' - widget-user.@id='solid-form-hidden' + fields='user.username' + value-user.username='hubl-workaround-493' + widget-user.username='solid-form-hidden' - hubl-inherit-bind-user2input="input[name='user.@id']" - - submit-button='Rejoindre le canal' + submit-button='Rejoindre le cercle' ) solid-display( @@ -74,12 +83,11 @@ solid-router(default-route='circle-profile', hidden) solid-display.block( bind-resources fields='members' + loader-id='loader-circle-profile' multiple-members='' widget-members='hubl-circle-team-template' ) - - #circle-edit.content-box__height(hidden) include page-circle-edit.pug diff --git a/src/views/project/page-project-edit.pug b/src/views/project/page-project-edit.pug index cce893a..82a6c1a 100644 --- a/src/views/project/page-project-edit.pug +++ b/src/views/project/page-project-edit.pug @@ -4,57 +4,48 @@ div.content-box__info solid-link(class='backlink right', bind-resources, next='project-profile') Retour - h1 Modifie ton projet + solid-ac-checker(permission='acl:Write', bind-resources) + h1 Modifie ton projet - solid-form.form.button-register( - bind-resources - - fields='status, line-1(customer.name, name), description' + div#loader-project-edit.loader.loader-top + div + div + div + div - label-status='Statut du canal*' - widget-status='hubl-status' - class-status='form-label is-light is-full-width member-select color' + solid-form.form.button-register( + bind-resources + + fields='line-1(customer.name, name)' - label-name='Nom du projet*' - class-name='form-label is-light is-half-width input-text-like' - label-customer.name='Nom du client*' - class-customer.name='form-label is-light is-half-width input-text-like' + label-name='Nom du projet*' + class-name='form-label is-light is-half-width input-text-like' - label-description='Description du projet' - class-description='form-label is-light is-full-width input-text-like' - widget-description='solid-form-textarea' + label-customer.name='Nom du client*' + class-customer.name='form-label is-light is-half-width input-text-like' - partial="" + partial="" - submit-button='Enregistrer' - next='project-information' - ) - - h2 Photo du projet - - solid-form.form-picture( - bind-resources - fields='customer.logo' - widget-customer.logo="hubl-user-avatar" - submit-button='Edit' - next='project-picture' - ) + submit-button='Enregistrer' + next='project-information' + ) h2 Liste des membres : - solid-form.block.select-add( - bind-resources - nested-field='members' - fields='user' - range-user=`${endpoints.users || endpoints.get.users}` + solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members') + solid-form.block.select-add( + bind-resources + nested-field='members' + fields='user' + range-user=`${endpoints.users || endpoints.get.users}` - class-user='team form-label is-light' - label-user='' - widget-user='solid-form-auto-completion' + class-user='team form-label is-light' + label-user='' + widget-user='solid-form-auto-completion' - submit-button='Ajouter un membre' - ) + submit-button='Ajouter un membre' + ) .table-wrapper .table @@ -67,6 +58,7 @@ div.content-box__info class='table-body' bind-resources fields='members' + loader-id='loader-project-edit' multiple-members='' widget-members='hubl-team-template-edit' diff --git a/src/views/project/page-project-left.pug b/src/views/project/page-project-left.pug index 0283db4..baac307 100644 --- a/src/views/project/page-project-left.pug +++ b/src/views/project/page-project-left.pug @@ -2,4 +2,4 @@ div.content-box__info.flex(style="padding: 15px") p Tu as quitté ce projet. - p Ceci est un groupe privé. Pour le rejoindre, rends-toi dans le panneau administration et demande une invitation. + p Ceci est un projet privé. Pour le rejoindre, rends-toi dans le panneau administration et demande une invitation. diff --git a/src/views/project/page-project-picture.pug b/src/views/project/page-project-picture.pug index 9257a73..7bea1d9 100644 --- a/src/views/project/page-project-picture.pug +++ b/src/views/project/page-project-picture.pug @@ -4,7 +4,7 @@ div.content-box__info h1 Modifier l'image du projet - solid-picture( + solid-picture.project-edit-picture( bind-resources upload-src=`${endpoints.uploads || endpoints.post.uploads}` upload-id="solid-project-edit-picture" diff --git a/src/views/project/page-project-profile.pug b/src/views/project/page-project-profile.pug index c3167df..a81fd3e 100644 --- a/src/views/project/page-project-profile.pug +++ b/src/views/project/page-project-profile.pug @@ -4,15 +4,21 @@ solid-router(default-route='project-profile', hidden) #project-profile(hidden) include ../../templates/hubl-captain.pug - include ../../templates/hubl-circle-team.pug include ../../templates/hubl-project-team.pug .content-box__info.flex + div#loader-project-profile.loader + div + div + div + div + .flex.space-between.with-padding.mobile-vertical-align solid-display.mobile-margin__bottom( bind-resources fields='creationDateSet(title, creationDate)' + loader-id='loader-project-profile' class-title='word-spacing-right' @@ -21,23 +27,43 @@ solid-router(default-route='project-profile', hidden) widget-creationDate='solid-display-date' ) solid-ac-checker(permission='acl:Append', bind-resources, nested-field='members') - 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-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-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-display( - class='flex desktop-button__end' - bind-resources - nested-field='members' - fields='relation' + div.flex.desktop-button__end + solid-ac-checker(permission='acl:Delete', bind-resources) + solid-delete( + class='button mobile-full-width text-bold text-uppercase button-primary bordered with-icon icon-trash' + bind-resources + data-label='Supprimer le projet' + ) - action-relation='relation' - widget-relation='hubl-project-leave-button' + solid-widget(name='hubl-project-leave-button') + template + solid-delete( + 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-label='Quitter le projet' + next='project-left' + ) - search-fields='user' - search-widget-user='solid-form-hidden' - search-value-user="" + solid-ac-checker(no-permission='acl:Delete', bind-resources) + solid-display( + bind-resources + nested-field='members' + fields='relation' - hubl-inherit-user-id="search-value-user" - ) + action-relation='relation' + widget-relation='hubl-project-leave-button' + + search-fields='user' + search-widget-user='solid-form-hidden' + search-value-user="" + + hubl-inherit-user-id="search-value-user" + ) .flex.space-between solid-display( @@ -48,13 +74,8 @@ solid-router(default-route='project-profile', hidden) class-label-captain='h2-like' widget-captain='hubl-captain' ) - solid-display( - class='customer-logo' - bind-resources - fields='customer.logo' - - widget-customer.logo='solid-display-img' - ) + + br h2 Equipe : @@ -66,14 +87,5 @@ solid-router(default-route='project-profile', hidden) widget-members='hubl-project-team' ) - - solid-widget(name='hubl-project-leave-button') - template - solid-delete( - class='button desktop-btn-margin__left text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' - data-src="${src}" - data-label='Quitter le groupe' - ) - #project-edit.content-box__height(hidden) include page-project-edit.pug diff --git a/src/views/user/page-user-notifications.pug b/src/views/user/page-user-notifications.pug new file mode 100644 index 0000000..ee785d9 --- /dev/null +++ b/src/views/user/page-user-notifications.pug @@ -0,0 +1,8 @@ +solid-notifications-template(data-rdf-type='foaf:user') + template + .solid-notification__avatar + | ${await author['account.foaf:depiction'] ? `` : ``} + .solid-notification__content + .solid-notification__title ${await author.name} + span.solid-notification__title__side en privé + p.solid-notification__summary ${summary} \ No newline at end of file