From 31bd34df98626c7deb549d784b59b8edbdf77a6d Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Pasquier <contact@jbpasquier.eu>
Date: Mon, 10 Feb 2020 13:59:23 +0100
Subject: [PATCH 1/5] sorted src, activate condition for public directory and
 job offers, dev parameter for local lib folder

---
 config.sample.federated.json                  |  1 +
 config.sample.json                            |  1 +
 src/dependencies.pug                          | 47 ++++++++-----
 src/header.pug                                | 11 ++-
 src/index.pug                                 | 21 ++----
 src/menu-left.pug                             | 70 ++++++++++---------
 src/page-admin.pug                            | 16 +++--
 src/page-circle.pug                           |  4 +-
 ...mbers-directory.pug => page-directory.pug} |  1 -
 src/page-job-offers.pug                       | 35 +++++++---
 src/page-project.pug                          |  4 +-
 src/page-user-panel.pug                       |  9 ---
 src/styles/base/menu-left.scss                | 12 ++--
 src/styles/layout/events/_index.scss          |  2 +-
 src/styles/layout/events/events.scss          |  4 --
 .../admin}/page-admin-circles-create.pug      |  0
 src/{ => views/admin}/page-admin-circles.pug  |  5 +-
 .../admin}/page-admin-projects-create.pug     |  0
 src/{ => views/admin}/page-admin-projects.pug |  4 +-
 src/{ => views/admin}/page-admin-users.pug    |  0
 src/{ => views/circle}/page-circle-chat.pug   |  0
 src/{ => views/circle}/page-circle-edit.pug   |  2 +-
 src/{ => views/circle}/page-circle-left.pug   |  0
 .../circle}/page-circle-profile.pug           |  2 +-
 .../job-offer}/page-job-offer-create.pug      |  0
 .../job-offer}/page-job-offer-edit.pug        |  0
 src/{ => views/project}/page-project-chat.pug |  0
 src/{ => views/project}/page-project-edit.pug |  2 +-
 src/{ => views/project}/page-project-left.pug |  0
 .../project}/page-project-profile.pug         | 10 +--
 30 files changed, 143 insertions(+), 120 deletions(-)
 rename src/{page-members-directory.pug => page-directory.pug} (99%)
 delete mode 100644 src/page-user-panel.pug
 rename src/{ => views/admin}/page-admin-circles-create.pug (100%)
 rename src/{ => views/admin}/page-admin-circles.pug (97%)
 rename src/{ => views/admin}/page-admin-projects-create.pug (100%)
 rename src/{ => views/admin}/page-admin-projects.pug (96%)
 rename src/{ => views/admin}/page-admin-users.pug (100%)
 rename src/{ => views/circle}/page-circle-chat.pug (100%)
 rename src/{ => views/circle}/page-circle-edit.pug (98%)
 rename src/{ => views/circle}/page-circle-left.pug (100%)
 rename src/{ => views/circle}/page-circle-profile.pug (98%)
 rename src/{ => views/job-offer}/page-job-offer-create.pug (100%)
 rename src/{ => views/job-offer}/page-job-offer-edit.pug (100%)
 rename src/{ => views/project}/page-project-chat.pug (100%)
 rename src/{ => views/project}/page-project-edit.pug (97%)
 rename src/{ => views/project}/page-project-left.pug (100%)
 rename src/{ => views/project}/page-project-profile.pug (91%)

diff --git a/config.sample.federated.json b/config.sample.federated.json
index a17abca7..7c8bd6f1 100644
--- a/config.sample.federated.json
+++ b/config.sample.federated.json
@@ -6,6 +6,7 @@
   "clientLogoHeight": "32px",
   "clientCSS": "/path/to/custom.css",
   "authorityName": "djangoldp-server-name",
+  "publicDirectory": false,
   "endpoints": {
     "get": {
       "circles": "http://localhost:8000/circles/",
diff --git a/config.sample.json b/config.sample.json
index 0197c371..9649336e 100644
--- a/config.sample.json
+++ b/config.sample.json
@@ -6,6 +6,7 @@
   "clientLogoHeight": "32px",
   "clientCSS": "/path/to/custom.css",
   "authorityName": "djangoldp-server-name",
+  "publicDirectory": false,
   "endpoints": {
     "circles": "http://localhost:8000/circles/",
     "projects": "http://localhost:8000/projects/",
diff --git a/src/dependencies.pug b/src/dependencies.pug
index 95d17f8e..a70d24b3 100644
--- a/src/dependencies.pug
+++ b/src/dependencies.pug
@@ -1,24 +1,33 @@
-script(type="module" src="https://unpkg.com/@startinblox/oidc@0.8")
 script(src="/scripts/index.js")
 
-//- local
-//- script(type="module" src="/lib/sib-router/src/index.js")
-//- script(type="module" src="/lib/sib-chat/sib-chat.js")
-//- script(type="module" src="/lib/sib-notifications/sib-notifications.js")
-//- script(type="module" src="/lib/sib-event/sib-event.js")
-//- script(type="module" src="/lib/sib-conversation/sib-conversation.js")
-//- script(type="module" src="/lib/sib-directory/sib-directory.js")
-//- script(type="module" src="/lib/sib-job-board/sib-job-board.js")
-
-//- CDN
-script(type="module" src="https://unpkg.com/@startinblox/core@0.9")
-script(type="module" src="https://unpkg.com/@startinblox/router@0.7")
-script(type="module" src="https://unpkg.com/@startinblox/component-chat@0.4")
-script(type="module" src="https://unpkg.com/@startinblox/component-notifications@0.3")
-script(type="module" src="https://unpkg.com/@startinblox/component-event@0.1")
-//- script(type="module" src="https://unpkg.com/@startinblox/component-conversation@0.3")
-//- script(type="module" src="https://unpkg.com/@startinblox/component-directory@0.3")
-//- script(type="module" src="https://unpkg.com/@startinblox/component-job-board@0.3")
+//- Scripts - use add `"libLocal" = true` on config.json to use your local `lib` folder
+if libLocal
+    script(type="module" src="/lib/sib-oidc/index.js")
+    script(type="module" src="/lib/sib-router/src/index.js")
+    script(type="module" src="/lib/sib-notifications/index.js")
+    if endpoints.users || (endpoints.get && endpoints.get.users)
+        script(type="module" src="/lib/sib-chat/sib-chat.js")
+    if endpoints.events || (endpoints.get && endpoints.get.events)
+        script(type="module" src="/lib/sib-event/sib-event.js")
+    if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
+        script(type="module" src="/lib/sib-job-board/sib-job-board.js")
+        script(type="module" src="/lib/sib-conversation/sib-conversation.js")
+    if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
+        script(type="module" src="/lib/sib-directory/sib-directory.js")
+else
+    script(type="module" src="https://unpkg.com/@startinblox/oidc@0.8")
+    script(type="module" src="https://unpkg.com/@startinblox/core@0.9")
+    script(type="module" src="https://unpkg.com/@startinblox/router@0.7")
+    script(type="module" src="https://unpkg.com/@startinblox/component-notifications@0.3")
+    if endpoints.users || (endpoints.get && endpoints.get.users)
+        script(type="module" src="https://unpkg.com/@startinblox/component-chat@0.4")
+    if endpoints.events || (endpoints.get && endpoints.get.events)
+        script(type="module" src="https://unpkg.com/@startinblox/component-event@0.1")
+    if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
+        script(type="module" src="https://unpkg.com/@startinblox/component-job-board@0.3")
+        script(type="module" src="https://unpkg.com/@startinblox/component-conversation@0.3")
+    if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
+        script(type="module" src="https://unpkg.com/@startinblox/component-directory@0.3")
 
 //- Stylesheets
 link(rel='stylesheet', href='/styles/index.css')
diff --git a/src/header.pug b/src/header.pug
index a198a387..2ad85fa1 100644
--- a/src/header.pug
+++ b/src/header.pug
@@ -22,7 +22,16 @@ details#user-controls.notLoggedIn
       bind-user
     )
   #user-controls__panel
-    include page-user-panel.pug
+    nav(role="user's functionalities menu")
+      ul
+        if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
+          li
+            sib-link(next='my-profile') My profile
+        //-li
+          sib-link(next='user-settings') Settings
+        li
+          sib-link(next='admin') Admin
+      button(role='log out' onclick="document.querySelector('sib-auth').logout();") Log out
 
 button(role='log in' onclick="document.querySelector('sib-auth').login();") Login
 
diff --git a/src/index.pug b/src/index.pug
index 26454a24..2df531e6 100644
--- a/src/index.pug
+++ b/src/index.pug
@@ -17,19 +17,13 @@ html(lang="en")
       include menu-left.pug
       div#viewport
 
-        //- #members(hidden).no-sidebar
-        //-   include page-members-directory.pug
+        if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
+          #members(hidden).no-sidebar
+            include page-directory.pug
 
-        //- #job-offers(hidden).no-sidebar
-        //-   include page-job-offers.pug
-
-        //- #job-offer-create(hidden).no-sidebar
-        //-   sib-link(class="backlink", next="job-offers") Back
-        //-   include page-job-offer-create.pug
-
-        //- #job-offer-edit(hidden).no-sidebar
-        //-   sib-link(class="backlink", next="job-offers") Back
-        //-   include page-job-offer-edit.pug
+        if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
+          #job-offers(hidden).no-sidebar
+            include page-job-offers.pug
 
         if endpoints.projects || (endpoints.get && endpoints.get.projects)
           #project(hidden).with-sidebar
@@ -49,6 +43,3 @@ html(lang="en")
 
         #admin(hidden).with-sidebar
           include page-admin.pug
-        
-        //- #my-profile(hidden).no-sidebar
-        //-   include page-user-profile.pug
diff --git a/src/menu-left.pug b/src/menu-left.pug
index 4b1ac410..02e0e59f 100644
--- a/src/menu-left.pug
+++ b/src/menu-left.pug
@@ -7,18 +7,40 @@ sib-widget(name='hd-create')
     p.create You are not part of any ${value} yet. To create a new one, you can go to the 
       sib-link(next='admin') administration panel
 
+sib-widget(name='menu-fix-url-circle')
+  template
+    sib-display(
+      data-src='${value}'
+      fields='name, badge'
+      value-badge='${value}'
+      widget-badge='hd-counter'
+      widget-name='sib-display-div'
+    )
+
+sib-widget(name='menu-fix-url-project')
+  template
+    sib-display(
+      data-src='${value}'
+      fields='project(customer.name, name), badge'
+      class-name='project-name'
+      class-customer.name='project-customer'
+      value-badge='${value}'
+      widget-badge='hd-counter'
+      widget-name='sib-display-div'
+    )
+
 nav#main__menu.jsLeftMenu
   sib-router#navbar-router(default-route='members')
-    //- sib-route.menu(name='members')
-    //-   div.menu-label Members
-    //-   div.menu-icon.icon-people
-    //- div.divider
-    //- sib-route.menu(name='job-offers', rdf-type='hd:joboffer')
-    //-   div.menu-label Job offers
-    //-   div.menu-icon.icon-briefcase
-    //- sib-route(name='job-offer-create', hidden)
-    //- sib-route(name='job-offer-edit', use-id, hidden)
-    //- div.divider
+    if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
+      sib-route.menu(name='members')
+        div.menu-label Members
+        div.menu-icon.icon-people
+      div.divider
+    if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
+      sib-route.menu(name='job-offers', rdf-type='hd:joboffer')
+        div.menu-label Job offers
+        div.menu-icon.icon-briefcase
+      div.divider
     if endpoints.events || (endpoints.get && endpoints.get.events)
       sib-route.menu(name='events')
         div.menu-label Events
@@ -35,20 +57,13 @@ nav#main__menu.jsLeftMenu
         sib-route(name='project', rdf-type='hd:project', use-id='', hidden)
         div.sub-menu.menu-notification
           sib-display.project-tab(
-            data-src=`${endpoints.projects || (endpoints.get && endpoints.get.projects)}`
-            fields='project(customer.name, name), badge'
-            class-customer.name='project-customer'
-            class-name='project-name'
+            bind-user
+            nested-field='projects'
+            fields='project'
             empty-widget='hd-create'
             empty-value='project'
-            search-fields='team'
-            search-widget-team='sib-form-hidden'
-            search-value-team='-'
-            hd-inherit-user-id='search-value-team'
-            hd-inherit-widgets
-            widget-badge='hd-counter'
-            action-badge='badge'
-            order-by='customer.name'
+            widget-project='menu-fix-url-project'
+            order-by='project.customer.name'
             next='project'
           )
       div.divider
@@ -62,22 +77,13 @@ nav#main__menu.jsLeftMenu
           div.menu-icon.icon-folder-alt
         sib-route(name='circle', rdf-type='hd:circle', use-id='', hidden)
         div.sub-menu.menu-notification
-          sib-widget(name='menu-circle-fix-url')
-            template
-              sib-display(
-                data-src='${value}'
-                fields='name, badge'
-                value-badge='${value}'
-                widget-badge='hd-counter'
-                widget-name='sib-display-div'
-              )
           sib-display(
             bind-user
             nested-field='circles'
             fields='circle'
             empty-widget='hd-create'
             empty-value='circle'
-            widget-circle='menu-circle-fix-url'
+            widget-circle='menu-fix-url-circle'
             order-by='circle.name'
             next='circle'
           )
diff --git a/src/page-admin.pug b/src/page-admin.pug
index c396fd4d..4876a37d 100644
--- a/src/page-admin.pug
+++ b/src/page-admin.pug
@@ -1,20 +1,22 @@
 .views-container.sidebar-is-closed
   if endpoints.circles || (endpoints.get && endpoints.get.circles)
     #admin-circles(hidden)
-      include page-admin-circles.pug
+      include views/admin/page-admin-circles.pug
   if endpoints.projects || (endpoints.get && endpoints.get.projects)
     #admin-projects(hidden)
-      include page-admin-projects.pug
-  //- #admin-users(hidden)
-    include page-admin-users.pug
+      include views/admin/page-admin-projects.pug
+  if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
+    #admin-users(hidden)
+      include views/admin/page-admin-users.pug
 nav.jsRightMenu(role='navigation')
   sib-router(default-route='admin-circles')
     ul
       li.jsOffsiteToggle
         a Fold menu
-      //- sib-route(name='admin-users')
-        li
-          a Users
+      if publicDirectory && (endpoints.users || (endpoints.get && endpoints.get.users))
+        sib-route(name='admin-users')
+          li
+            a Users
       if endpoints.circles || (endpoints.get && endpoints.get.circles)
         sib-route(name='admin-circles')
           li
diff --git a/src/page-circle.pug b/src/page-circle.pug
index e938ee36..9f840936 100644
--- a/src/page-circle.pug
+++ b/src/page-circle.pug
@@ -13,9 +13,9 @@
     div.content-box__info
       sib-ac-checker(permission='acl:Read', bind-resources)
         #circle-chat(hidden)
-          include page-circle-chat.pug
+          include views/circle/page-circle-chat.pug
         #circle-information(hidden)
-          include page-circle-profile.pug
+          include views/circle/page-circle-profile.pug
 
 nav.jsRightMenu(role='navigation')
   sib-router(default-route='circle-chat')
diff --git a/src/page-members-directory.pug b/src/page-directory.pug
similarity index 99%
rename from src/page-members-directory.pug
rename to src/page-directory.pug
index 7b835cf4..e8f8c3c4 100644
--- a/src/page-members-directory.pug
+++ b/src/page-directory.pug
@@ -3,4 +3,3 @@ sib-directory(
   range-groups=`${endpoints.groups || endpoints.get.groups}`,
   range-skills=`${endpoints.skills || endpoints.get.skills}`
 )
-
diff --git a/src/page-job-offers.pug b/src/page-job-offers.pug
index 1772d1fb..b7cb1868 100644
--- a/src/page-job-offers.pug
+++ b/src/page-job-offers.pug
@@ -1,10 +1,25 @@
-.job-offers__container
-  sib-job-board(
-    data-src=`${endpoints.joboffers || endpoints.get.joboffers}`,
-    range-skills=`${endpoints.skills || endpoints.get.skills}`
-  )
-
-  div.job-offers__newoffer
-    sib-link(next="job-offer-create").plus-button
-      div.icon-plus
-      div Post a new offer
+.content-box.full-width
+  #job-offer-board
+    .job-offers__container
+    sib-job-board(
+      data-src=`${endpoints.joboffers || endpoints.get.joboffers}`,
+      range-skills=`${endpoints.skills || endpoints.get.skills}`
+    )
+
+    div.job-offers__newoffer
+      sib-link(next="job-offer-create").plus-button
+        div.icon-plus
+        div Post a new offer
+
+  #job-offer-create(hidden)
+    sib-link(class="backlink", next="job-offers") Back
+    include views/job-offer/page-job-offer-create.pug
+
+  #job-offer-edit(hidden)
+    sib-link(class="backlink", next="job-offers") Back
+    include views/job-offer/page-job-offer-edit.pug
+
+sib-router(default-route='job-offer-board')
+  sib-route(name='job-offer-board')
+  sib-route(name='job-offer-create')
+  sib-route(name='job-offer-edit')
\ No newline at end of file
diff --git a/src/page-project.pug b/src/page-project.pug
index ae2e06ca..ffb9269e 100644
--- a/src/page-project.pug
+++ b/src/page-project.pug
@@ -19,9 +19,9 @@
     div.content-box__info
       sib-ac-checker(permission='acl:Read', bind-resources)
         #project-chat(hidden)
-          include page-project-chat.pug
+          include views/project/page-project-chat.pug
         #project-information(hidden)
-          include page-project-profile.pug
+          include views/project/page-project-profile.pug
 
 dialog(id='project-contributions-help').modal
   sib-link(next='project-profile')
diff --git a/src/page-user-panel.pug b/src/page-user-panel.pug
deleted file mode 100644
index 6e6c3103..00000000
--- a/src/page-user-panel.pug
+++ /dev/null
@@ -1,9 +0,0 @@
-nav(role="user's functionalities menu")
-  ul
-    //- li
-    //-   sib-link(next='my-profile') My profile
-    //-li
-      sib-link(next='user-settings') Settings
-    li
-      sib-link(next='admin') Admin
-  button(role='log out' onclick="document.querySelector('sib-auth').logout();") Log out
diff --git a/src/styles/base/menu-left.scss b/src/styles/base/menu-left.scss
index 8ffd616d..0ff6c1e4 100644
--- a/src/styles/base/menu-left.scss
+++ b/src/styles/base/menu-left.scss
@@ -145,7 +145,8 @@
           >div {
             color: $color-244-10-70;
             cursor: pointer;
-            >menu-circle-fix-url>sib-display>div {
+            >menu-fix-url-circle>sib-display>div,
+            >menu-fix-url-project>sib-display>div {
               padding: 1rem 1rem 1rem 3.2rem;
             }
           }
@@ -156,7 +157,8 @@
         }
 
         &>sib-display[active]>div,
-        &>sib-display>div>menu-circle-fix-url>sib-display[active]>div {
+        &>sib-display>div>menu-fix-url-circle>sib-display[active]>div,
+        &>sib-display>div>menu-fix-url-project>sib-display[active]>div {
           background-color: $color-46-100-67;
           color: $color-233-18-29;
           font-weight: bold;
@@ -164,11 +166,13 @@
       }
 
       &.menu-notification {
-        > sib-display > div > sib-display > div > menu-circle-fix-url {
+        > sib-display > div > sib-display > div > menu-fix-url-circle,
+        > sib-display > div > sib-display > div > menu-fix-url-project {
           flex: 1;
         }
         > sib-display > div > sib-display > div,
-        > sib-display > div > sib-display > div > menu-circle-fix-url  > sib-display > div {
+        > sib-display > div > sib-display > div > menu-fix-url-circle  > sib-display > div,
+        > sib-display > div > sib-display > div > menu-fix-url-project  > sib-display > div {
             display: flex;
             sib-display-div {
               flex: 3;
diff --git a/src/styles/layout/events/_index.scss b/src/styles/layout/events/_index.scss
index a28b32f1..be4ff7d7 100644
--- a/src/styles/layout/events/_index.scss
+++ b/src/styles/layout/events/_index.scss
@@ -1 +1 @@
-@import 'events';
\ No newline at end of file
+@import 'events.scss';
\ No newline at end of file
diff --git a/src/styles/layout/events/events.scss b/src/styles/layout/events/events.scss
index 73a75c3a..3b38a7e0 100644
--- a/src/styles/layout/events/events.scss
+++ b/src/styles/layout/events/events.scss
@@ -1,7 +1,3 @@
-$color-203-87-19: hsl(203, 87.8%, 19.2%);
-$color-357-67-45: hsl(357,67.5%,45.9%);
-$color-212-4-50: hsl(212.7,4.3%,50%);
-$color-0-0-22: hsl(0,0%,22.7%);
 #events {
     width: 100%;
     font-family: "Facit";
diff --git a/src/page-admin-circles-create.pug b/src/views/admin/page-admin-circles-create.pug
similarity index 100%
rename from src/page-admin-circles-create.pug
rename to src/views/admin/page-admin-circles-create.pug
diff --git a/src/page-admin-circles.pug b/src/views/admin/page-admin-circles.pug
similarity index 97%
rename from src/page-admin-circles.pug
rename to src/views/admin/page-admin-circles.pug
index 110dc4b9..cab40120 100644
--- a/src/page-admin-circles.pug
+++ b/src/views/admin/page-admin-circles.pug
@@ -9,12 +9,11 @@
 
 
   #circle-left(hidden)
-    include page-circle-left.pug
+    include ../circle/page-circle-left.pug
 
 
   #admin-circle-list(hidden)
-
-    include templates/hd-user-avatar.pug
+    include ../../templates/hd-user-avatar.pug
 
     sib-widget(name='circle-owner')
       template
diff --git a/src/page-admin-projects-create.pug b/src/views/admin/page-admin-projects-create.pug
similarity index 100%
rename from src/page-admin-projects-create.pug
rename to src/views/admin/page-admin-projects-create.pug
diff --git a/src/page-admin-projects.pug b/src/views/admin/page-admin-projects.pug
similarity index 96%
rename from src/page-admin-projects.pug
rename to src/views/admin/page-admin-projects.pug
index 53ecedef..abec8575 100644
--- a/src/page-admin-projects.pug
+++ b/src/views/admin/page-admin-projects.pug
@@ -8,10 +8,10 @@
     h1.title-left.without-margin Administration
 
   #project-left(hidden)
-    include page-project-left.pug
+    include ../project/page-project-left.pug
 
   #admin-project-list(hidden)
-    include templates/hd-user-avatar.pug
+    include ../../templates/hd-user-avatar.pug
 
     div.content-box__info
       div.admin-header
diff --git a/src/page-admin-users.pug b/src/views/admin/page-admin-users.pug
similarity index 100%
rename from src/page-admin-users.pug
rename to src/views/admin/page-admin-users.pug
diff --git a/src/page-circle-chat.pug b/src/views/circle/page-circle-chat.pug
similarity index 100%
rename from src/page-circle-chat.pug
rename to src/views/circle/page-circle-chat.pug
diff --git a/src/page-circle-edit.pug b/src/views/circle/page-circle-edit.pug
similarity index 98%
rename from src/page-circle-edit.pug
rename to src/views/circle/page-circle-edit.pug
index 266781be..f1ab588a 100644
--- a/src/page-circle-edit.pug
+++ b/src/views/circle/page-circle-edit.pug
@@ -1,6 +1,6 @@
 div.content-box__info
 
-  include templates/hd-user-avatar.pug
+  include ../../templates/hd-user-avatar.pug
 
   sib-widget(name='hd-user-groups')
     template ${await value.name}
diff --git a/src/page-circle-left.pug b/src/views/circle/page-circle-left.pug
similarity index 100%
rename from src/page-circle-left.pug
rename to src/views/circle/page-circle-left.pug
diff --git a/src/page-circle-profile.pug b/src/views/circle/page-circle-profile.pug
similarity index 98%
rename from src/page-circle-profile.pug
rename to src/views/circle/page-circle-profile.pug
index cd4e3022..1c102b2a 100644
--- a/src/page-circle-profile.pug
+++ b/src/views/circle/page-circle-profile.pug
@@ -3,7 +3,7 @@ sib-router(default-route='circle-profile', hidden)
   sib-route(name='circle-edit')
 
 #circle-profile(hidden)
-  include templates/hd-circle-team.pug
+  include ../../templates/hd-circle-team.pug
   .content-box__info
 
     .space-between
diff --git a/src/page-job-offer-create.pug b/src/views/job-offer/page-job-offer-create.pug
similarity index 100%
rename from src/page-job-offer-create.pug
rename to src/views/job-offer/page-job-offer-create.pug
diff --git a/src/page-job-offer-edit.pug b/src/views/job-offer/page-job-offer-edit.pug
similarity index 100%
rename from src/page-job-offer-edit.pug
rename to src/views/job-offer/page-job-offer-edit.pug
diff --git a/src/page-project-chat.pug b/src/views/project/page-project-chat.pug
similarity index 100%
rename from src/page-project-chat.pug
rename to src/views/project/page-project-chat.pug
diff --git a/src/page-project-edit.pug b/src/views/project/page-project-edit.pug
similarity index 97%
rename from src/page-project-edit.pug
rename to src/views/project/page-project-edit.pug
index 63f9938f..61e5aa2e 100644
--- a/src/page-project-edit.pug
+++ b/src/views/project/page-project-edit.pug
@@ -1,6 +1,6 @@
 div.content-box__info
 
-  include templates/hd-user-avatar.pug
+  include ../../templates/hd-user-avatar.pug
 
   sib-widget(name='hd-fieldset-title')
     template
diff --git a/src/page-project-left.pug b/src/views/project/page-project-left.pug
similarity index 100%
rename from src/page-project-left.pug
rename to src/views/project/page-project-left.pug
diff --git a/src/page-project-profile.pug b/src/views/project/page-project-profile.pug
similarity index 91%
rename from src/page-project-profile.pug
rename to src/views/project/page-project-profile.pug
index aefb717d..0f7c7653 100644
--- a/src/page-project-profile.pug
+++ b/src/views/project/page-project-profile.pug
@@ -3,11 +3,11 @@ sib-router(default-route='project-profile', hidden)
   sib-route(name='project-edit')
 
 #project-profile(hidden)
-  include templates/hd-business-provider.pug
-  include templates/hd-captain.pug
-  include templates/hd-circle-team.pug
-  include templates/hd-customer.pug
-  include templates/hd-project-team.pug
+  include ../../templates/hd-business-provider.pug
+  include ../../templates/hd-captain.pug
+  include ../../templates/hd-circle-team.pug
+  include ../../templates/hd-customer.pug
+  include ../../templates/hd-project-team.pug
 
   .content-box__info
 
-- 
GitLab


From e1bce61124be2ca5e056c57df74f64bce601662e Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Pasquier <contact@jbpasquier.eu>
Date: Mon, 10 Feb 2020 17:58:03 +0100
Subject: [PATCH 2/5] perf: improve circle admin

---
 src/scripts/index.js                   |  9 ++--
 src/views/admin/page-admin-circles.pug | 67 ++++++++++++--------------
 2 files changed, 34 insertions(+), 42 deletions(-)

diff --git a/src/scripts/index.js b/src/scripts/index.js
index 4b7e6fe1..e9eedba7 100644
--- a/src/scripts/index.js
+++ b/src/scripts/index.js
@@ -36,11 +36,9 @@ function recursiveAdaptWidgets(prefix, element, user) {
     }
 
     //- In case your sib-display use a multiple, you have to target sub-sib-display auto-generated
-    if (element.getAttribute(prefix + "-widgets-multiple") !== null) {
-      element.querySelectorAll("div > sib-display").forEach(el => {
-        el.setAttribute(prefix + "-widgets", "");
-      });
-    }
+    element.querySelectorAll("sib-display, sib-form, div > sib-display, div > sib-form").forEach(el => {
+      el.setAttribute(prefix + "-widgets", "");
+    });
   }
 
   //- This function is hooked every time a sib-something with prefix+"-widgets" is populated
@@ -125,6 +123,7 @@ async function refreshResource(event) {
   if(resourceId.includes('circle') && user != null) {
     let userId = user['@id'];
     refreshSibDisplays(userId + "circles/");
+    refreshSibDisplays(resourceId.split('/').slice(0,4).join('/')+'/joinable/');
   }
 
   //clear cache on this resource
diff --git a/src/views/admin/page-admin-circles.pug b/src/views/admin/page-admin-circles.pug
index cab40120..b84078e4 100644
--- a/src/views/admin/page-admin-circles.pug
+++ b/src/views/admin/page-admin-circles.pug
@@ -51,57 +51,50 @@
               data-label='Leave circle'
             )
 
-        sib-widget(name='admin-circle-join-button')
-          template
-            button.button.text-bold.text-uppercase.reversed.button-blue.bordered.with-icon.icon-arrow-right-circle.test
-              sib-form(
-                data-src=''
-                nested-field='members'
+        sib-display(
+          class='table-body'
 
-                fields='user.@id'
-                label-user.@id=''
-                value-user.@id=''
-                widget-user.@id='sib-form-hidden'
+          bind-user
+          nested-field='circles'
+          fields='circle.name, circle.owner, leaveButton'
 
-                hd-inherit-bind-user2input="input[name='user.@id']"
-                hd-inherit-widgets
+          class-circle.name='w33 cell border cell-with-name'
+          class-circle.owner='w33 cell border cell-with-id-card'
+          class-leaveButton='w33 cell border cell-with-buttons'
 
-                submit-button='Join Circle'
-              )
+          action-leaveButton="joinButton"
+          widget-leaveButton="admin-circle-leave-button"
+          widget-circle.owner='circle-owner'
+        )
 
-        sib-widget(name="admin-circle-buttons")
+        sib-widget(name='admin-circle-join-button')
           template
-            sib-display(
-              data-src='${src}'
-              nested-field='members'
-              fields='relation'
-              action-relation='relation'
-              widget-relation='admin-circle-leave-button'
-              search-fields='user'
-              search-widget-user='sib-form-hidden'
-              search-value-user="-"
-              empty-widget='admin-circle-join-button'
-              hd-inherit-bind-resources='admin-circle-join-button'
-              hd-inherit-user-id="search-value-user"
-              hd-inherit-widgets
+            sib-form.button.text-bold.text-uppercase.reversed.button-blue.bordered.with-icon.icon-arrow-right-circle.test(
+              data-src='${value}'
+
+              fields='user.@id'
+              label-user.@id=''
+              value-user.@id='self'
+              widget-user.@id='sib-form-hidden'
+
+              hd-inherit-bind-user2input="input[name='user.@id']"
+
+              submit-button='Join Circle'
             )
 
         sib-display(
           class='table-body'
 
-          data-src=`${endpoints.circles || endpoints.get.circles}`
-          fields='name, owner, buttons'
+          data-src=`${endpoints.circles || endpoints.get.circles}joinable/`
+          fields='name, owner, members'
 
           class-name='w33 cell border cell-with-name'
           class-owner='w33 cell border cell-with-id-card'
-          class-buttons='w33 cell border cell-with-buttons'
-
-          widget-buttons="admin-circle-buttons"
-          action-buttons="buttons"
-          hd-inherit-widgets
-          hd-inherit-widgets-multiple
-
           widget-owner='circle-owner'
+
+          class-members='w33 cell border cell-with-buttons'
+          widget-members="admin-circle-join-button"
+          hd-inherit-bind-user2input="input[name='user.@id']"
         )
 
 
-- 
GitLab


From 8042b179c6585b399641f90c7723d81d639d88e0 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Pasquier <contact@jbpasquier.eu>
Date: Wed, 19 Feb 2020 16:27:22 +0100
Subject: [PATCH 3/5] fix: recursiveAdaptWidgets

---
 src/scripts/index.js                       | 83 +++++++++++-----------
 src/views/admin/page-admin-circles.pug     |  1 -
 src/views/admin/page-admin-projects.pug    |  3 -
 src/views/circle/page-circle-profile.pug   |  2 -
 src/views/project/page-project-profile.pug |  1 -
 5 files changed, 41 insertions(+), 49 deletions(-)

diff --git a/src/scripts/index.js b/src/scripts/index.js
index e9eedba7..ecbafe8f 100644
--- a/src/scripts/index.js
+++ b/src/scripts/index.js
@@ -1,50 +1,47 @@
-function recursiveAdaptWidgets(prefix, element, user) {
-  //- This function is a workaround for the currently unworking populate
-  //- Feel free to see examples on page-circles-
-
-  element.querySelectorAll("[" + prefix + "-user-id]").forEach(el => {
-    el.setAttribute(el.getAttribute(prefix + "-user-id"), user["@id"]);
-  });
-
-  if (element != document) {
-    //- Allow to bind-user on selected attribute
-    if (element.getAttribute(prefix + "-user-id")) {
-      element.setAttribute(
-        element.getAttribute(prefix + "-user-id"),
-        user["@id"]
-      );
-    }
+function applyAdapt(prefix, sibDisplay, user) {
+  
+  //- Allow to bind-user on selected attribute
+  if (sibDisplay.getAttribute(prefix + "-user-id")) {
+    sibDisplay.setAttribute(
+      sibDisplay.getAttribute(prefix + "-user-id"),
+      user["@id"]
+    );
+  }
 
-    //- Allow to set data-src to a children sib-form
-    if (element.getAttribute(prefix + "-bind-resources")) {
-      let form = element.querySelector(
-        element.getAttribute(prefix + "-bind-resources") + " sib-form"
+  //- Allow to set data-src to a children sib-form
+  if (sibDisplay.getAttribute(prefix + "-bind-resources")) {
+    let form = sibDisplay.querySelector(
+      sibDisplay.getAttribute(prefix + "-bind-resources") + " sib-form"
+    );
+    if (form) {
+      form.setAttribute(
+        "data-src",
+        sibDisplay.component.resourceId.replace("members/", "")
       );
-      if (form) {
-        form.setAttribute(
-          "data-src",
-          element.component.resourceId.replace("members/", "")
-        );
-      }
     }
+  }
 
-    //- Allow to put user on a targetted search field
-    if (element.getAttribute(prefix + "-bind-user2input")) {
-      element.querySelector(
-        element.getAttribute(prefix + "-bind-user2input")
-      ).value = user["@id"];
-    }
+  //- Allow to put user on a targetted search field
+  if (sibDisplay.getAttribute(prefix + "-bind-user2input")) {
+    sibDisplay.querySelector(
+      sibDisplay.getAttribute(prefix + "-bind-user2input")
+    ).value = user["@id"];
+  }
+}
 
-    //- In case your sib-display use a multiple, you have to target sub-sib-display auto-generated
-    element.querySelectorAll("sib-display, sib-form, div > sib-display, div > sib-form").forEach(el => {
-      el.setAttribute(prefix + "-widgets", "");
+function recursiveAdaptWidgets(prefix, element, user) {
+  
+  element.addEventListener("populate", () => {
+    
+    //- This function is a workaround for the currently unworking populate
+    //- Feel free to see examples on page-circles-
+    element.querySelectorAll("[" + prefix + "-user-id]").forEach(el => {
+      el.setAttribute(el.getAttribute(prefix + "-user-id"), user["@id"]);
     });
-  }
+    applyAdapt(prefix, element, user);
 
-  //- This function is hooked every time a sib-something with prefix+"-widgets" is populated
-  element.querySelectorAll("[" + prefix + "-widgets]").forEach(elementChild => {
-    elementChild.addEventListener("populate", () => {
-      recursiveAdaptWidgets(prefix, elementChild, user);
+    document.querySelectorAll('sib-display, sib-form').forEach(sibDisplay => {
+      applyAdapt(prefix, sibDisplay, user);
     });
   });
 }
@@ -219,8 +216,10 @@ document.addEventListener("DOMContentLoaded", function(event) {
         document
           .querySelector('button[role="log in"]')
           .setAttribute("style", "display:none !important");
-        // Set current user id on set-user-id of sib-display
-        recursiveAdaptWidgets("hd-inherit", document, user);
+        document.querySelectorAll('sib-display, sib-form').forEach(element => {
+          // Set current user id on set-user-id of sib-display
+          recursiveAdaptWidgets("hd-inherit", element, user);
+        });
         for (leaveBtn of document.querySelectorAll(
           "admin-circle-leave > sib-ac-checker:not([hidden])"
         )) {
diff --git a/src/views/admin/page-admin-circles.pug b/src/views/admin/page-admin-circles.pug
index b84078e4..fd9c3356 100644
--- a/src/views/admin/page-admin-circles.pug
+++ b/src/views/admin/page-admin-circles.pug
@@ -94,7 +94,6 @@
 
           class-members='w33 cell border cell-with-buttons'
           widget-members="admin-circle-join-button"
-          hd-inherit-bind-user2input="input[name='user.@id']"
         )
 
 
diff --git a/src/views/admin/page-admin-projects.pug b/src/views/admin/page-admin-projects.pug
index abec8575..d93aa332 100644
--- a/src/views/admin/page-admin-projects.pug
+++ b/src/views/admin/page-admin-projects.pug
@@ -68,7 +68,6 @@
               search-widget-user='sib-form-hidden'
               search-value-user="-"
               hd-inherit-user-id="search-value-user"
-              hd-inherit-widgets
             )
 
         sib-display(
@@ -84,8 +83,6 @@
 
           widget-buttons="admin-project-buttons"
           action-buttons="buttons"
-          hd-inherit-widgets
-          hd-inherit-widgets-multiple
 
           widget-captain='project-captain'
           widget-members='project-admins'
diff --git a/src/views/circle/page-circle-profile.pug b/src/views/circle/page-circle-profile.pug
index 1c102b2a..70c49026 100644
--- a/src/views/circle/page-circle-profile.pug
+++ b/src/views/circle/page-circle-profile.pug
@@ -60,7 +60,6 @@ sib-router(default-route='circle-profile', hidden)
               widget-user.@id='sib-form-hidden'
 
               hd-inherit-bind-user2input="input[name='user.@id']"
-              hd-inherit-widgets
 
               submit-button='Join Circle'
             )
@@ -77,7 +76,6 @@ sib-router(default-route='circle-profile', hidden)
         empty-widget='circle-join-button'
         hd-inherit-bind-resources='circle-join-button'
         hd-inherit-user-id="search-value-user"
-        hd-inherit-widgets
       )
 
 
diff --git a/src/views/project/page-project-profile.pug b/src/views/project/page-project-profile.pug
index 0f7c7653..62ac1d66 100644
--- a/src/views/project/page-project-profile.pug
+++ b/src/views/project/page-project-profile.pug
@@ -94,7 +94,6 @@ sib-router(default-route='project-profile', hidden)
       search-value-user=""
 
       hd-inherit-user-id="search-value-user"
-      hd-inherit-widgets
     )
 
 
-- 
GitLab


From 3e14cb91a4c72ca2baeb768d3ce3a03a4ae375dc Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Pasquier <contact@jbpasquier.eu>
Date: Wed, 19 Feb 2020 17:03:47 +0100
Subject: [PATCH 4/5] update: redirect to login and hide page on logged out

---
 src/header.pug              | 6 +++---
 src/index.pug               | 5 +++--
 src/scripts/index.js        | 4 +++-
 src/styles/base/header.scss | 4 ----
 src/styles/base/main.scss   | 4 ++++
 5 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/header.pug b/src/header.pug
index 2ad85fa1..ef567557 100644
--- a/src/header.pug
+++ b/src/header.pug
@@ -7,7 +7,7 @@
 //-   i#search-icon.icon-magnifier(aria-hidden='true')
 //-   i#close-search-icon.icon-close(aria-hidden='true')
 
-sib-notifications(
+sib-notifications.notLoggedIn(
   nested-field="inbox"
   bind-user
 )
@@ -33,11 +33,11 @@ details#user-controls.notLoggedIn
           sib-link(next='admin') Admin
       button(role='log out' onclick="document.querySelector('sib-auth').logout();") Log out
 
-button(role='log in' onclick="document.querySelector('sib-auth').login();") Login
+button.loggedIn(role='log in' onclick="document.querySelector('sib-auth').login();") Login
 
 button.notLoggedIn.mobile-menu-icon.icon-menu#toggleMainMenu
 
-sib-auth
+sib-auth(style='display:none!important')
   sib-auth-provider(
     data-authority=`${authority}`
     data-id=`${authorityName || "authority"}`
diff --git a/src/index.pug b/src/index.pug
index 2df531e6..0eae9a5e 100644
--- a/src/index.pug
+++ b/src/index.pug
@@ -13,7 +13,8 @@ html(lang="en")
   body
     header#header(role='banner')
       include header.pug
-    main
+
+    main.notLoggedIn
       include menu-left.pug
       div#viewport
 
@@ -42,4 +43,4 @@ html(lang="en")
             include page-events.pug
 
         #admin(hidden).with-sidebar
-          include page-admin.pug
+          include page-admin.pug
\ No newline at end of file
diff --git a/src/scripts/index.js b/src/scripts/index.js
index ecbafe8f..8a868838 100644
--- a/src/scripts/index.js
+++ b/src/scripts/index.js
@@ -214,7 +214,7 @@ document.addEventListener("DOMContentLoaded", function(event) {
           .forEach(el => (el.style.visibility = "visible"));
         // Hide login button if already logged
         document
-          .querySelector('button[role="log in"]')
+          .querySelector('.loggedIn')
           .setAttribute("style", "display:none !important");
         document.querySelectorAll('sib-display, sib-form').forEach(element => {
           // Set current user id on set-user-id of sib-display
@@ -228,6 +228,8 @@ document.addEventListener("DOMContentLoaded", function(event) {
             "display:none !important"
           ); // Hide Join button
         }
+      } else {
+        document.querySelector('sib-auth').login();
       }
     })
     .catch(error => console.log(error));
diff --git a/src/styles/base/header.scss b/src/styles/base/header.scss
index 850e1daa..b3302662 100644
--- a/src/styles/base/header.scss
+++ b/src/styles/base/header.scss
@@ -56,10 +56,6 @@
     }
   }
 
-  .notLoggedIn {
-    visibility: hidden;
-  }
-
   sib-notifications {
 
     @include breakpoint(sm) {
diff --git a/src/styles/base/main.scss b/src/styles/base/main.scss
index 4aae4ef5..5de18046 100644
--- a/src/styles/base/main.scss
+++ b/src/styles/base/main.scss
@@ -35,6 +35,10 @@ $breakpoints: (phone: 480px,
     backface-visibility: hidden;
     /*will-change: overflow;*/
   }
+
+  .notLoggedIn {
+    visibility: hidden;
+  }
 }
 
 /* Add scrollbar to the left and right menu, and to the content */
-- 
GitLab


From 68961182ffeddc5bd4272ddcfe7332db592ed113 Mon Sep 17 00:00:00 2001
From: gaelle morin <gmorin.dev@gmail.com>
Date: Mon, 24 Feb 2020 15:10:02 +0100
Subject: [PATCH 5/5] CSS fixup

---
 src/styles/base/main.scss                              |  2 +-
 src/styles/base/menu-left.scss                         | 10 +++++-----
 src/styles/layout/project-profile/project-profile.scss |  8 ++++++++
 src/templates/hd-customer.pug                          |  4 ++--
 src/views/admin/page-admin-circles.pug                 |  2 +-
 src/views/circle/page-circle-profile.pug               |  2 +-
 6 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/styles/base/main.scss b/src/styles/base/main.scss
index 5de18046..32b1174e 100644
--- a/src/styles/base/main.scss
+++ b/src/styles/base/main.scss
@@ -475,7 +475,7 @@ a,
       }
     }
 
-    &.test {
+    &.flex {
       display: flex;
     }
 
diff --git a/src/styles/base/menu-left.scss b/src/styles/base/menu-left.scss
index 0ff6c1e4..c1a38a87 100644
--- a/src/styles/base/menu-left.scss
+++ b/src/styles/base/menu-left.scss
@@ -29,7 +29,7 @@
       display: flex;
       flex-direction: row-reverse;
       font-weight: bold;
-      padding: 1.6rem;
+      padding: 1.2rem;
   
       &[active] {
         background-color: $color-46-100-67;
@@ -97,10 +97,9 @@
       .project-tab>div>sib-display>div:nth-child(1) {
 
         sib-set-default[name='project'] {
-          padding: 1rem 1rem 1rem 3.2rem;
 
           .project-customer,
-          .project-name {
+          .project-name>div {
             display: block;
             overflow: hidden;
             text-overflow: ellipsis;
@@ -113,6 +112,7 @@
           }
 
           .project-name {
+            display: block;
             padding-left: 14px;
             width: calc(150px - 10px);
             /* 10px = padding of the sib-set-default = better alignment */
@@ -126,7 +126,7 @@
       /* End of specific styles of "Projects" tab */
 
       >sib-display.nosub>div>sib-display>div {
-        padding: 1rem 1rem 1rem 3.2rem;
+        padding: 1rem 1rem 1rem 3rem;
       }
 
       sib-display>div {
@@ -147,7 +147,7 @@
             cursor: pointer;
             >menu-fix-url-circle>sib-display>div,
             >menu-fix-url-project>sib-display>div {
-              padding: 1rem 1rem 1rem 3.2rem;
+              padding: 1rem 1rem 1rem 3rem;
             }
           }
 
diff --git a/src/styles/layout/project-profile/project-profile.scss b/src/styles/layout/project-profile/project-profile.scss
index ab8f6cb1..f2126457 100644
--- a/src/styles/layout/project-profile/project-profile.scss
+++ b/src/styles/layout/project-profile/project-profile.scss
@@ -163,6 +163,14 @@
 
       span {
         font-weight: bold;
+
+        &.link-color {
+          color: $color-244-73-62;
+        }
+
+        &.norm-weight {
+          font-weight: normal;
+        }
       }
     }
   }
diff --git a/src/templates/hd-customer.pug b/src/templates/hd-customer.pug
index 51563c2f..813aa81a 100644
--- a/src/templates/hd-customer.pug
+++ b/src/templates/hd-customer.pug
@@ -12,6 +12,6 @@ sib-widget(name='hd-customer')
         ul
           li #[span(class='mdi-account-outline') ${await value.firstName} ${await value.lastName ? await value.lastName : ""}]${await value.role ? `, ${await value.role}` : ""}
           li
-            span(class='mdi-email-outline')
+            span(class='link-color norm-weight mdi-email-outline')
               a(href='mailto:${await value.email}') ${await value.email}
-          span ${await value.phone ? `<li><span class='mdi-cellphone-iphone'>${await value.phone}</span></li>` : ``}
+          span ${await value.phone ? `<li><span class='norm-weight mdi-cellphone-iphone'>${await value.phone}</span></li>` : ``}
diff --git a/src/views/admin/page-admin-circles.pug b/src/views/admin/page-admin-circles.pug
index fd9c3356..c4428bdc 100644
--- a/src/views/admin/page-admin-circles.pug
+++ b/src/views/admin/page-admin-circles.pug
@@ -69,7 +69,7 @@
 
         sib-widget(name='admin-circle-join-button')
           template
-            sib-form.button.text-bold.text-uppercase.reversed.button-blue.bordered.with-icon.icon-arrow-right-circle.test(
+            sib-form.button.text-bold.text-uppercase.reversed.button-blue.bordered.with-icon.icon-arrow-right-circle.flex(
               data-src='${value}'
 
               fields='user.@id'
diff --git a/src/views/circle/page-circle-profile.pug b/src/views/circle/page-circle-profile.pug
index 70c49026..61725902 100644
--- a/src/views/circle/page-circle-profile.pug
+++ b/src/views/circle/page-circle-profile.pug
@@ -49,7 +49,7 @@ sib-router(default-route='circle-profile', hidden)
 
       sib-widget(name='circle-join-button')
         template
-          button.button.btn-margin-left.text-bold.text-uppercase.reversed.button-dark.bordered.with-icon.icon-arrow-right-circle.test
+          button.button.btn-margin-left.text-bold.text-uppercase.reversed.button-dark.bordered.with-icon.icon-arrow-right-circle.flex
             sib-form(
               data-src=''
               nested-field='members'
-- 
GitLab