Merge branch 'master' into release/hubl-618

This commit is contained in:
Jean-Baptiste Pasquier 2020-10-19 14:01:19 +02:00
commit 1c3502d82e
98 changed files with 3435 additions and 878 deletions

View File

@ -44,6 +44,7 @@ test:e2e:
before_script:
# install missing dependencies
- npm install -g sirv-cli
- npm install cypress-localstorage-commands
# making sure the process is orphan
- sirv dist --port 3000 > /dev/null 2>&1 &
script:
@ -99,6 +100,7 @@ test3:
script:
- echo "$APP_CONFIG_TEST3" > config.json
- echo "$SSH_DEPLOY_KEY" | tr -d '\r' > gitlab.key && chmod 600 gitlab.key
- sed -i -E 's/component-chat@([0-9]+).([0-9]+)/component-chat@beta/g' src/dependencies.pug
- npm run build
- scp -i gitlab.key -o StrictHostKeyChecking=no -r dist/* test3@astral.startinblox.com:~/front/
only:
@ -219,7 +221,7 @@ smarttoulouse:
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/
@ -552,3 +554,75 @@ apidays:
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
lepool:
stage: deployment
environment:
name: lepool
url: https://lepool.hubl.world
before_script:
- npm ci --cache .npm --prefer-offline --only=production
script:
- echo "$APP_CONFIG_LEPOOL" > 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/* lepool@astral.startinblox.com:~/front/
only:
- master
when: manual
tags:
- deploy
cpe:
stage: deployment
environment:
name: cpe
url: https://cpe.hubl.world
before_script:
- npm ci --cache .npm --prefer-offline --only=production
script:
- echo "$APP_CONFIG_CPE" > 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/* cpe@astral.startinblox.com:~/front/
only:
- master
when: manual
tags:
- deploy
lescanumeriques:
stage: deployment
environment:
name: lescanumeriques
url: https://fichemetier.fr.hubl.world
before_script:
- npm ci --cache .npm --prefer-offline --only=production
script:
- echo "$APP_CONFIG_LESCANUMERIQUES" > 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/* lescanumeriques@astral.startinblox.com:~/front/
only:
- master
when: manual
tags:
- deploy

View File

@ -18,6 +18,7 @@ To install Hubl, you'll need:
Before diving in you have to check your Hubl Server supports the following LDP packages:
* djangoldp_account
* djangoldp_community
* djangoldp_notification
* djangoldp_profile
* djangoldp_skill
@ -91,6 +92,16 @@ Where:
* `authority` is the OpenID Provider. Usually, if you use `djangoldp-account` it's the same as your djangoldp server.
* `endpoints.users` is the API endpoints for Users on your djangoldp server.
### Communities
Communities are mandatory to have an Hubl. If you're upgrading an existion Hubl, you can assign all your local users to a community this way:
```bash
./manage.py create_community --name="My community"
```
Don't forget to set some users as admin from the Django Admin if you want to allow them to create new users from app.
### Optional personalisation
On `config.json`:
@ -159,22 +170,6 @@ On `config.json`:
A [sample fixture](https://git.startinblox.com/djangoldp-packages/djangoldp-dashboard/blob/master/djangoldp_dashboard/fixtures/sample.json) can be loaded with `./manage.py loaddata path/to/djangoldp_dashboard/fixtures/sample.json`.
### Events
Events allow to create and manage instance-level evenement. To activate them, you need:
On Server: `djangoldp_event`, `djangoldp_upload` packages
On `config.json`:
```json
"endpoints": {
"events": "http://server.url/events/",
"typeevents": "http://server.url/typeevents/",
"uploads": "http://server.url/upload/"
}
```
### Project
Project are a private group chat including Customer and Business Provider management. To activate them, you need:
@ -225,6 +220,57 @@ On `config.json`:
}
```
### Events
The events module includes a listing of upcoming events and the capability to create new ones.
This module will also work inside the circles.
To activate it, you need:
On Server: `djangoldp_event`, `djangoldp_upload` packages
On `config.json`:
```json
"endpoints": {
"events":"http://server.url/events/",
"typeevents":"http://server.url/typeevents/",
"uploads": "http://server.url/upload/"
}
```
### Resources
The resources module includes a listing of indexed resources and the capability to index new ones.
This module will also work inside the circles.
To activate it, you need:
On Server: `djangoldp_resource`, `djangoldp_upload`, `djangoldp_conversation` packages
On `config.json`:
```json
"endpoints": {
"resources":"http://server.url/resources/",
"resourceskeywords":"http://server.url/keywords/",
"resourcestypes":"http://server.url/types/",
"uploads": "http://server.url/upload/"
}
```
### Polls
The polls module allows user to create polls related (or not) to circles. To activate it, you need:
On Server: `djangoldp_polls`, `djangoldp_upload`, `djangoldp_conversation` packages
On `config.json`:
```json
"endpoints": {
"polls":"http://server.url/polls/"
}
```
## Use with docker
### Multi services

View File

@ -144,6 +144,12 @@
--color-directory-form-select-icon: var(--color-complementary) !important;
}
/* Text color for the beta label */
#header>div.header-left>span.beta-tag {
color: var(--color-complementary);
}
/* Button to edit a channel or a project (in project-profile) */
#project solid-link[next="project-edit"],
#circle solid-link[next="circle-edit"] {

View File

@ -1,7 +1,8 @@
{
"baseUrl": "http://127.0.0.1:3000",
"defaultCommandTimeout": 60000,
"defaultCommandTimeout": 1000,
"chromeWebSecurity": false,
"viewportWidth": 1920,
"viewportHeight": 1080
"viewportHeight": 1080,
"video": false
}

54
cypress/README.md Normal file
View File

@ -0,0 +1,54 @@
## Users:
```
- signin
- signup
- create
- listing
- edit
// TO-FIX: Uncomment workaround (blocked by: nested routing bug)
```
## Job Offers:
```
- create
- edit
- listing
// TO-FIX: Search by title and description (blocked by: no search fields available)
- post
// TO-DO: Entire flow (blocked by: no published / unpublished flag)
```
## Channels:
```
- create
- edit
- leave
- retire
- delete
- join
// TO-DO: Join other user created project (blocked by: can't create new user to create a channel)
- invite
// TO-DO
```
## Projects:
```
- create
- edit
- leave
- retire
- delete
// TO-DO: Delete a project (blocked by: no option to delete a project)
- join
// TO-DO: Join other user created project (blocked by: can't create new user to create a project)
- invite
// TO-DO
```
## Breakdown:
```
DONE: 15
TO-FIX: 2
BLOCKED: 4
NOT DONE: 2
```

View File

@ -0,0 +1,4 @@
{
"username": "admin",
"password": "admin"
}

View File

@ -0,0 +1,116 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Create Channel Browser Testing', () => {
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('Channel Creation process #1', () => {
let channelName = 'Test Channel ',
description = 'Test Description ';
it('should visit the channel creation screen', () => {
cy.visit('/admin/admin-circle-create');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-circle-create');
});
});
it('should enter correct channel data', () => {
cy.randomNum().then(num => {
channelName += num;
description += num;
cy.get('#admin-circle-create input[name="name"]').clear().type(channelName);
cy.get('#admin-circle-create input[name="name"]').should('have.value', channelName);
cy.get('#admin-circle-create input[name="description"]').clear().type(description);
cy.get('#admin-circle-create input[name="description"]').should('have.value', description);
});
});
it('should click on create channel button', () => {
cy.get('#admin-circle-create input[type="submit"]').click();
});
it('should land on channels list screen', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin');
});
});
it('should land newly created channel on channels list screen', () => {
cy.contains('solid-display-value[name="circle.name"]', channelName).should("exist");
cy.fixture('admin.json').then(admin => {
cy.contains('solid-display-value[name="username"]', admin.username).should("exist");
});
});
});
describe('Channel Creation process #2', () => {
let channelName = 'Test Channel ',
description = 'Test Description ';
it('should visit the channel creation screen', () => {
cy.visit('/admin/admin-circle-create');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-circle-create');
});
});
it('should enter correct channel data', () => {
cy.randomNum().then(num => {
channelName += num;
description += num;
cy.get('#admin-circle-create input[name="name"]').clear().type(channelName);
cy.get('#admin-circle-create input[name="name"]').should('have.value', channelName);
cy.get('#admin-circle-create input[name="description"]').clear().type(description);
cy.get('#admin-circle-create input[name="description"]').should('have.value', description);
});
});
it('should click on create channel button', () => {
cy.get('#admin-circle-create input[type="submit"]').click();
});
it('should land on channels list screen', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin');
});
});
it('should land newly created channel on channels list screen', () => {
cy.contains('solid-display-value[name="circle.name"]', channelName).should("exist");
cy.fixture('admin.json').then(admin => {
cy.contains('solid-display-value[name="username"]', admin.username).should("exist");
});
});
});
describe('Channel Creation process #3', () => {
let channelName = 'Test Channel ',
description = 'Test Description ';
it('should visit the channel creation screen', () => {
cy.visit('/admin/admin-circle-create');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-circle-create');
});
});
it('should enter correct channel data', () => {
cy.randomNum().then(num => {
channelName += num;
description += num;
cy.get('#admin-circle-create input[name="name"]').clear().type(channelName);
cy.get('#admin-circle-create input[name="name"]').should('have.value', channelName);
cy.get('#admin-circle-create input[name="description"]').clear().type(description);
cy.get('#admin-circle-create input[name="description"]').should('have.value', description);
});
});
it('should click on create channel button', () => {
cy.get('#admin-circle-create input[type="submit"]').click();
});
it('should land on channels list screen', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin');
});
});
it('should land newly created channel on channels list screen', () => {
cy.contains('solid-display-value[name="circle.name"]', channelName).should("exist");
cy.fixture('admin.json').then(admin => {
cy.contains('solid-display-value[name="username"]', admin.username).should("exist");
});
});
});
});

View File

@ -0,0 +1,52 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Create Job Offer Browser Testing', () => {
let jobDate = '',
jobTitle = 'Test Job Offer ',
description = 'Test Description ';
before(() => {
cy.nextYear(1).then(year => {
jobDate = year + '-12-31';
});
cy.randomNum().then(num => {
jobTitle += num;
description += num;
});
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('Job Offer Creation process', () => {
it('should visit the job offer creation screen', () => {
cy.visit('/job-offers/job-offers-create');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/job-offers/job-offers-create');
});
});
it('should enter correct job offer data', () => {
cy.get('#job-offers-create input[name="closingDate"]').clear().type(jobDate);
cy.get('#job-offers-create input[name="closingDate"]').should('have.value', jobDate);
cy.get('#job-offers-create input[name="title"]').clear().type(jobTitle);
cy.get('#job-offers-create input[name="title"]').should('have.value', jobTitle);
cy.get('#job-offers-create textarea[name="description"]').clear().type(description);
cy.get('#job-offers-create textarea[name="description"]').should('have.value', description);
});
it('should click on create job offer button', () => {
cy.get('#job-offers-create input[type="submit"]').click();
});
it('should land on job offers list screen', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/job-offers');
});
});
it('should land newly created job offer on job offers list screen', () => {
cy.contains('solid-display-value[name="title"]', jobTitle).should("exist");
cy.contains('solid-display-value[name="description"]', description).should("exist");
});
});
});

View File

@ -0,0 +1,90 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Create Project Browser Testing', () => {
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('Project Creation process #1', () => {
let projectName = 'Test Project ',
customerName = 'Test Customer ',
description = 'Test Description ';
it('should visit the project creation screen', () => {
cy.visit('/admin/admin-projects/admin-project-create');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-projects/admin-project-create');
});
});
it('should enter correct project data', () => {
cy.randomNum().then(num => {
projectName += num;
customerName += num;
description += num;
cy.get('#admin-project-create input[name="customer.name"]').clear().type(customerName);
cy.get('#admin-project-create input[name="customer.name"]').should('have.value', customerName);
cy.get('#admin-project-create input[name="name"]').clear().type(projectName);
cy.get('#admin-project-create input[name="name"]').should('have.value', projectName);
cy.get('#admin-project-create textarea[name="description"]').clear().type(description);
cy.get('#admin-project-create textarea[name="description"]').should('have.value', description);
});
});
it('should click on create project button', () => {
cy.get('#admin-project-create input[type="submit"]').click();
});
it('should land on projects list screen', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-projects');
});
});
it('should land newly created project on projects list screen', () => {
cy.contains('solid-display-value[name="project.name"]', projectName).should("exist");
cy.fixture('admin.json').then(admin => {
cy.contains('solid-display-value[name="username"]', admin.username).should("exist");
});
});
});
describe('Project Creation process #2', () => {
let projectName = 'Test Project ',
customerName = 'Test Customer ',
description = 'Test Description ';
it('should visit the project creation screen', () => {
cy.visit('/admin/admin-projects/admin-project-create');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-projects/admin-project-create');
});
});
it('should enter correct project data', () => {
cy.randomNum().then(num => {
projectName += num;
customerName += num;
description += num;
cy.get('#admin-project-create input[name="customer.name"]').clear().type(customerName);
cy.get('#admin-project-create input[name="customer.name"]').should('have.value', customerName);
cy.get('#admin-project-create input[name="name"]').clear().type(projectName);
cy.get('#admin-project-create input[name="name"]').should('have.value', projectName);
cy.get('#admin-project-create textarea[name="description"]').clear().type(description);
cy.get('#admin-project-create textarea[name="description"]').should('have.value', description);
});
});
it('should click on create project button', () => {
cy.get('#admin-project-create input[type="submit"]').click();
});
it('should land on projects list screen', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-projects');
});
});
it('should land newly created project on projects list screen', () => {
cy.contains('solid-display-value[name="project.name"]', projectName).should("exist");
cy.fixture('admin.json').then(admin => {
cy.contains('solid-display-value[name="username"]', admin.username).should("exist");
});
});
});
});

View File

@ -0,0 +1,56 @@
/// <reference types="Cypress" />
/* globals cy, expect */
// Unable to create an user without a community. Unable to create community from app
// context('Create User Browser Testing', () => {
// let firstName = 'First ',
// lastName = 'Last ',
// username = 'testuser_creation_',
// email = '';
// before(() => {
// cy.randomNum().then(num => {
// firstName += num;
// lastName += num;
// username += num;
// email = username + '@testemail.com';
// });
// cy.clearLocalStorageSnapshot();
// cy.clearLocalStorage({ domain: null });
// cy.clearCookies({ domain: null });
// });
// beforeEach(() => cy.restoreLocalStorage());
// afterEach(() => cy.saveLocalStorage());
// it('should visit user login screen', () => cy.userLogin());
// it('should login', () => cy.login());
// describe('User Creation process', () => {
// it('should visit the user creation screen', () => {
// cy.visit('/admin/admin-users/admin-users-create');
// cy.location().should((loc) => {
// expect(loc.pathname).to.eq('/admin/admin-users/admin-users-create');
// });
// });
// it('should enter correct user data', () => {
// cy.get('#admin-users-create input[name="first_name"]').clear().type(firstName);
// cy.get('#admin-users-create input[name="first_name"]').should('have.value', firstName);
// cy.get('#admin-users-create input[name="last_name"]').clear().type(lastName);
// cy.get('#admin-users-create input[name="last_name"]').should('have.value', lastName);
// cy.get('#admin-users-create input[name="username"]').clear().type(username);
// cy.get('#admin-users-create input[name="username"]').should('have.value', username);
// cy.get('#admin-users-create input[name="email"]').clear().type(email);
// cy.get('#admin-users-create input[name="email"]').should('have.value', email);
// });
// it('should click on create user button', () => {
// cy.get('#admin-users-create input[type="submit"]').click();
// });
// it('should land on users list screen', () => {
// cy.location().should((loc) => {
// expect(loc.pathname).to.eq('/admin/admin-users');
// });
// });
// it('should land newly created user on users list screen', () => {
// cy.contains('solid-display-value[name="name"]', firstName + ' ' + lastName).should("exist");
// cy.contains('solid-display-value[name="username"]', username).should("exist");
// });
// });
// });

View File

@ -0,0 +1,63 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Delete Channel Browser Testing', () => {
let menuQuery = [
'solid-display.circle-tab',
'solid-display:last-child',
'solid-display[order-by="name"]'
],
menuCountQuery = [
'solid-display.circle-tab',
'solid-display',
'solid-display[order-by="name"]'
];
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screend', () => cy.userLogin());
it('should login', () => cy.login());
describe('Channel Retirement process', () => {
let channelsLength;
it('should visit the channels list screen', () => {
cy.visit('/admin');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin');
});
});
it('should visit the last channel edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.visit('/circle/@' + id + '/circle-information');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/circle/@' + id + '/circle-information');
});
}));
});
it('should count the number of joined channels', () => {
cy.get(menuCountQuery.join(' ')).its('length').then(length => channelsLength = length);
});
it('should click button to retire the channel', () => {
cy.get('#circle-profile solid-delete[data-label="Supprimer le canal"] button').click();
});
it('should stay on channel edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/circle/@' + id + '/circle-information');
});
}));
});
it('should check if chennel was retired', () => {
cy.get(menuCountQuery.join(' ')).its('length').should(length => {
expect(length).to.eq(channelsLength - 1);
});
});
});
});

View File

@ -0,0 +1,65 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Edit Channel Browser Testing', () => {
let channelName = 'Edited Test Channel ',
description = 'Edited Test Description ',
menuQuery = [
'solid-display.circle-tab',
'solid-display:last-child',
'solid-display[order-by="name"]'
];
before(() => {
cy.randomNum().then(num => {
channelName += num;
description += num;
});
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('Channel Edition process', () => {
it('should visit the channel list screen', () => {
cy.visit('/admin');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin');
});
});
it('should visit the last channel edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.visit('/circle/@' + id + '/circle-information/circle-edit');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/circle/@' + id + '/circle-information/circle-edit');
});
}));
});
it('should enter new channel data', () => {
cy.get('#circle-edit input[name="name"]').clear().type(channelName);
cy.get('#circle-edit input[name="name"]').should('have.value', channelName);
cy.get('#circle-edit input[name="description"]').clear().type(description);
cy.get('#circle-edit input[name="description"]').should('have.value', description);
});
it('should click button to save the channel', () => {
cy.get('#circle-edit input[value="Enregistrer"]').click();
});
it('should land on channel information screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/circle/@' + id + '/circle-information');
});
}));
});
it('should show edited channel data on channel information screen', () => {
cy.contains('solid-display-value[name="name"]', channelName).should("exist");
cy.contains('solid-display-value[name="description"]', description).should("exist");
});
});
});

View File

@ -0,0 +1,66 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Edit Job Offer Browser Testing', () => {
let jobDate = '',
jobTitle = 'Edited Test Job Offer ',
description = 'Edited Test Description ',
menuQuery = [
'solid-display.job-board__list',
'solid-display:last-child'
];
before(() => {
cy.nextYear(2).then(year => {
jobDate = year + '-12-31';
});
cy.randomNum().then(num => {
jobTitle += num;
description += num;
});
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('Job Offer Edition process', () => {
it('should visit the job offers list screen', () => {
cy.visit('/job-offers');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/job-offers');
});
});
it('should visit the last job offer edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.visit('/job-offers/job-offers-edit/@' + id);
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/job-offers/job-offers-edit/@' + id);
});
}));
});
it('should enter new job offer data', () => {
cy.get('#job-offers-edit input[name="closingDate"]').clear().type(jobDate);
cy.get('#job-offers-edit input[name="closingDate"]').should('have.value', jobDate);
cy.get('#job-offers-edit input[name="title"]').clear().type(jobTitle);
cy.get('#job-offers-edit input[name="title"]').should('have.value', jobTitle);
cy.get('#job-offers-edit textarea[name="description"]').clear().type(description);
cy.get('#job-offers-edit textarea[name="description"]').should('have.value', description);
});
it('should click button to save the job offer', () => {
cy.get('#job-offers-edit input[type="submit"]').click();
});
it('should land on job offers list screen', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/job-offers');
});
});
it('should show edited job offer data on job offer information screen', () => {
cy.contains('solid-display-value[name="title"]', jobTitle).should("exist");
cy.contains('solid-display-value[name="description"]', description).should("exist");
});
});
});

View File

@ -0,0 +1,69 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Edit Project Browser Testing', () => {
let projectName = 'Edited Test Project ',
customerName = 'Edited Test Customer ',
description = 'Edited Test Description ',
menuQuery = [
'solid-display.project-tab',
'solid-display:last-child',
'solid-display[order-by="customer.name"]'
];
before(() => {
cy.randomNum().then(num => {
projectName += num;
customerName += num;
description += num;
});
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('Project Edition process', () => {
it('should visit the project list screen', () => {
cy.visit('/admin/admin-projects');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-projects');
});
});
it('should visit the last project edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.visit('/project/@' + id + '/project-information/project-edit');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/project/@' + id + '/project-information/project-edit');
});
}));
});
it('should enter new project data', () => {
cy.get('#project-edit input[name="customer.name"]').clear().type(customerName);
cy.get('#project-edit input[name="customer.name"]').should('have.value', customerName);
cy.get('#project-edit input[name="name"]').clear().type(projectName);
cy.get('#project-edit input[name="name"]').should('have.value', projectName);
cy.get('#project-edit textarea[name="description"]').clear().type(description);
cy.get('#project-edit textarea[name="description"]').should('have.value', description);
});
it('should click button to save the project', () => {
cy.get('#project-edit input[value="Enregistrer"]').click();
});
it('should land on project information screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/project/@' + id + '/project-information');
});
}));
});
it('should show edited project data on project information screen', () => {
cy.contains('solid-display-value[name="customer.name"]', customerName).should("exist");
cy.contains('solid-display-value[name="name"]', projectName).should("exist");
});
});
});

View File

@ -0,0 +1,73 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Edit User Browser Testing', () => {
let userFirstName = 'Edited User First Name ',
userLastName = 'Edited User Last Name ',
jobDescription = 'Edited Job Description ',
city = 'Edited City ',
phone = '+1234',
website = 'https://test.site/';
before(() => {
cy.randomNum().then(num => {
userFirstName += num;
userLastName += num;
jobDescription += num;
city += num;
phone += num;
website += num;
});
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('User Edition process', () => {
it('should visit the user edit screen', () => {
cy.visit('/profile/solid-profile-edit-profile');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/profile/solid-profile-edit-profile');
});
});
/// Workaround - Routing bug - user won't land on edit profile screen
it('should navigate to user edit screen', () => {
cy.get('#solid-profile-my-profile solid-link[next="solid-profile-edit-profile"]').click();
});
/// End workaround
it('should enter new user data', () => {
cy.get('#solid-profile-edit-profile input[name="first_name"]').clear().type(userFirstName);
cy.get('#solid-profile-edit-profile input[name="first_name"]').should('have.value', userFirstName);
cy.get('#solid-profile-edit-profile input[name="last_name"]').clear().type(userLastName);
cy.get('#solid-profile-edit-profile input[name="last_name"]').should('have.value', userLastName);
cy.get('#solid-profile-edit-profile textarea[name="profile.job"]').clear().type(jobDescription);
cy.get('#solid-profile-edit-profile textarea[name="profile.job"]').should('have.value', jobDescription);
cy.get('#solid-profile-edit-profile input[name="profile.city"]').clear().type(city);
cy.get('#solid-profile-edit-profile input[name="profile.city"]').should('have.value', city);
cy.get('#solid-profile-edit-profile input[name="profile.phone"]').clear().type(phone);
cy.get('#solid-profile-edit-profile input[name="profile.phone"]').should('have.value', phone);
cy.get('#solid-profile-edit-profile input[name="profile.website"]').clear().type(website);
cy.get('#solid-profile-edit-profile input[name="profile.website"]').should('have.value', website);
});
it('should click button to save the user', () => {
cy.get('#solid-profile-edit-profile input[value="ENREGISTRER"]').click();
});
it('should land on user information screen', () => {
cy.location().should(location => {
/// Workaround - Routing bug - route pathname won't be /profile as it should
expect(location.pathname).to.eq('/');
// expect(location.pathname).to.eq('/profile');
/// End workaround
});
});
it('should show edited user data on user information screen', () => {
cy.contains('solid-display-value[name="name"]', userFirstName + ' ' + userLastName).should("exist");
cy.contains('solid-display-value[name="profile.job"]', jobDescription).should("exist");
cy.contains('solid-display-value[name="profile.city"]', city).should("exist");
cy.contains('directory-link-tel a', phone).should("exist");
cy.contains('directory-website a', website).should("exist");
});
});
});

View File

@ -0,0 +1,42 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Leave Channel Browser Testing', () => {
let tableQuery = [
'solid-display.table-body',
'solid-display:last-child',
'hubl-admin-circle-leave-button',
'solid-delete'
],
tableListQuery = [
'solid-display[nested-field="circles"]',
'div >',
'solid-display'
];
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screend', () => cy.userLogin());
it('should login', () => cy.login());
describe('Channel Leaving process', () => {
it('should visit the channels list screen', () => {
cy.visit('/admin');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin');
});
});
it('should click the last channel leave button', () => {
cy.get(tableListQuery.join(' ')).its('length').as('channelsLength');
cy.get(tableQuery.join(' ')).click();
});
it('should check if chennel was left', () => {
cy.get(tableListQuery.join(' ')).its('length').should(length => {
expect(length).to.eq(this.channelsLength - 1);
});
});
});
});

View File

@ -0,0 +1,42 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Leave Project Browser Testing', () => {
let tableQuery = [
'solid-display.table-body',
'solid-display:last-child',
'hubl-admin-project-leave-button',
'solid-delete'
],
tableListQuery = [
'solid-display[nested-field="projects"]',
'div >',
'solid-display'
];
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screend', () => cy.userLogin());
it('should login', () => cy.login());
describe('Project Leaving process', () => {
it('should visit the projects list screen', () => {
cy.visit('/admin/admin-projects');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-projects');
});
});
it('should click the last project leave button', () => {
cy.get(tableListQuery.join(' ')).its('length').as('projectsLength');
cy.get(tableQuery.join(' ')).click();
});
it('should check if project was left', () => {
cy.get(tableListQuery.join(' ')).its('length').should(length => {
expect(length).to.eq(this.projectsLength - 1);
});
});
});
});

View File

@ -0,0 +1,84 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('List Job Offers Browser Testing', () => {
let listQuery = 'solid-display.job-board__list',
filtersQuery = [
listQuery,
'solid-form',
'input'
],
listingCountQuery = [
listQuery,
'solid-display'
],
firstListingQuery = [
listQuery,
'solid-display:first-child',
'solid-display-value'
];
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('Job Offer Listing process', () => {
let listingTitle,
listingDesccription,
listingCount;
it('should visit the job offers listing screen', () => {
cy.visit('/job-offers');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/job-offers');
});
});
it('should get the listing count', () => {
cy.get(listingCountQuery.join(' ')).its('length').then(length => listingCount = length);
});
it('should get the first job offer listing data', () => {
cy.get(firstListingQuery.join(' ') + '[name="title"]').invoke('text').then(text => listingTitle = text);
cy.get(firstListingQuery.join(' ') + '[name="description"]').invoke('text').then(text => listingDesccription = text);
});
// TO-DO: Search by title and description
/*it('should filter the listing by first name', () => {
cy.get(filtersQuery.join(' ') + '[name="title"]').clear().type(listingTitle);
cy.get(filtersQuery.join(' ') + '[name="title"]').should('have.value', listingTitle);
});
it('should get filtered listing count', () => {
cy.get(listingCountQuery.join(' ')).its('length').then(length => {
expect(length).to.eq(1);
});
});
it('should clear the first name filter', () => {
cy.get(filtersQuery.join(' ') + '[name="title"]').clear();
cy.get(filtersQuery.join(' ') + '[name="title"]').should('have.value', '');
});
it('should get previous listing count', () => {
cy.get(listingCountQuery.join(' ')).its('length').then(length => {
expect(length).to.eq(listingCount);
});
});
it('should filter the listing by first name', () => {
cy.get(filtersQuery.join(' ') + '[name="description"]').clear().type(listingDesccription);
cy.get(filtersQuery.join(' ') + '[name="description"]').should('have.value', listingDesccription);
});
it('should get filtered listing count', () => {
cy.get(listingCountQuery.join(' ')).its('length').then(length => {
expect(length).to.eq(1);
});
});
it('should clear the first name filter', () => {
cy.get(filtersQuery.join(' ') + '[name="description"]').clear();
cy.get(filtersQuery.join(' ') + '[name="description"]').should('have.value', '');
});
it('should get previous listing count', () => {
cy.get(listingCountQuery.join(' ')).its('length').then(length => {
expect(length).to.eq(listingCount);
});
});*/
});
});

View File

@ -0,0 +1,124 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('List Users Browser Testing', () => {
let listQuery = 'solid-display#members-list__content',
filtersQuery = [
listQuery,
'solid-form',
'input'
],
listingCountQuery = [
listQuery,
'div:first-child',
'span'
],
firstListingQuery = [
listQuery,
'solid-display:first-child',
'solid-display-value'
];
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screen', () => cy.userLogin());
it('should login', () => cy.login());
describe('User Listing process', () => {
let listingFirstName,
listingLastName,
listingJob,
listingCity,
listingCount;
it('should visit the users listing screen', () => {
cy.visit('/members');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/members');
});
});
it('should get the listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => listingCount = text);
});
it('should get the first user listing data', () => {
cy.get(firstListingQuery.join(' ') + '[name="first_name"]').invoke('text').then(text => listingFirstName = text);
cy.get(firstListingQuery.join(' ') + '[name="last_name"]').invoke('text').then(text => listingLastName = text);
cy.get(firstListingQuery.join(' ') + '[name="profile.job"]').invoke('text').then(text => listingJob = text);
cy.get(firstListingQuery.join(' ') + '[name="profile.city"]').invoke('text').then(text => listingCity = text);
});
it('should filter the listing by first name', () => {
cy.get(filtersQuery.join(' ') + '[name="name"]').clear().type(listingFirstName);
cy.get(filtersQuery.join(' ') + '[name="name"]').should('have.value', listingFirstName);
});
it('should get filtered listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq('1 membres');
});
});
it('should clear the first name filter', () => {
cy.get(filtersQuery.join(' ') + '[name="name"]').clear();
cy.get(filtersQuery.join(' ') + '[name="name"]').should('have.value', '');
});
it('should get previous listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq(listingCount);
});
});
it('should filter the listing by last name', () => {
cy.get(filtersQuery.join(' ') + '[name="name"]').clear().type(listingLastName);
cy.get(filtersQuery.join(' ') + '[name="name"]').should('have.value', listingLastName);
});
it('should get filtered listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq('1 membres');
});
});
it('should clear the last name filter', () => {
cy.get(filtersQuery.join(' ') + '[name="name"]').clear();
cy.get(filtersQuery.join(' ') + '[name="name"]').should('have.value', '');
});
it('should get previous listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq(listingCount);
});
});
it('should filter the listing by job description', () => {
cy.get(filtersQuery.join(' ') + '[name="member-job"]').clear().type(listingJob);
cy.get(filtersQuery.join(' ') + '[name="member-job"]').should('have.value', listingJob);
});
it('should get filtered listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq('1 membres');
});
});
it('should clear the job description filter', () => {
cy.get(filtersQuery.join(' ') + '[name="member-job"]').clear();
cy.get(filtersQuery.join(' ') + '[name="member-job"]').should('have.value', '');
});
it('should get previous listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq(listingCount);
});
});
it('should filter the listing by city', () => {
cy.get(filtersQuery.join(' ') + '[name="member-city"]').clear().type(listingCity);
cy.get(filtersQuery.join(' ') + '[name="member-city"]').should('have.value', listingCity);
});
it('should get filtered listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq('1 membres');
});
});
it('should clear the city filter', () => {
cy.get(filtersQuery.join(' ') + '[name="member-city"]').clear();
cy.get(filtersQuery.join(' ') + '[name="member-city"]').should('have.value', '');
});
it('should get previous listing count', () => {
cy.get(listingCountQuery.join(' ')).invoke('text').then(text => {
expect(text).to.eq(listingCount);
});
});
});
});

View File

@ -0,0 +1,63 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Retire Channel Browser Testing', () => {
let menuQuery = [
'solid-display.circle-tab',
'solid-display:last-child',
'solid-display[order-by="name"]'
],
menuCountQuery = [
'solid-display.circle-tab',
'solid-display',
'solid-display[order-by="name"]'
];
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screend', () => cy.userLogin());
it('should login', () => cy.login());
describe('Channel Retirement process', () => {
let channelsLength;
it('should visit the channels list screen', () => {
cy.visit('/admin');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin');
});
});
it('should visit the last channel edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.visit('/circle/@' + id + '/circle-information/circle-edit');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/circle/@' + id + '/circle-information/circle-edit');
});
}));
});
it('should count the number of joined channels', () => {
cy.get(menuCountQuery.join(' ')).its('length').then(length => channelsLength = length);
});
it('should click button to retire the channel', () => {
cy.get('solid-multiple[name="members"] solid-delete[data-label="Retirer"] button').click();
});
it('should stay on channel edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/circle/@' + id + '/circle-information/circle-edit');
});
}));
});
it('should check if chennel was retired', () => {
cy.get(menuCountQuery.join(' ')).its('length').should(length => {
expect(length).to.eq(channelsLength - 1);
});
});
});
});

View File

@ -0,0 +1,63 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Retire Project Browser Testing', () => {
let menuQuery = [
'solid-display.project-tab',
'solid-display:last-child',
'solid-display[order-by="customer.name"]'
],
menuCountQuery = [
'solid-display.project-tab',
'solid-display',
'solid-display[order-by="customer.name"]'
];
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
beforeEach(() => cy.restoreLocalStorage());
afterEach(() => cy.saveLocalStorage());
it('should visit user login screend', () => cy.userLogin());
it('should login', () => cy.login());
describe('Project Retirement process', () => {
let projectsLength;
it('should visit the projects list screen', () => {
cy.visit('/admin/admin-projects');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/admin/admin-projects');
});
});
it('should visit the last project edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.visit('/project/@' + id + '/project-information/project-edit');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/project/@' + id + '/project-information/project-edit');
});
}));
});
it('should count the number of joined projects', () => {
cy.get(menuCountQuery.join(' ')).its('length').then(length => projectsLength = length);
});
it('should click button to retire the project', () => {
cy.get('solid-multiple[name="members"] solid-delete[data-label="Retirer"] button').click();
});
it('should stay on project edit screen', () => {
cy.get(menuQuery.join(' '))
.invoke('attr', 'data-src')
.then(url => cy.encodeUrl(url).then(id => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/project/@' + id + '/project-information/project-edit');
});
}));
});
it('should check if project was retired', () => {
cy.get(menuCountQuery.join(' ')).its('length').should(length => {
expect(length).to.eq(projectsLength - 1);
});
});
});
});

View File

@ -1,43 +1,37 @@
/// <reference types="Cypress" />
/* globals cy, expect */
context('Browser testing', () => {
before(() => {
cy.clearLocalStorage({ domain: null});
cy.clearCookies({ domain: null });
before(() => {
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null});
cy.clearCookies({ domain: null });
});
it('should visit user login screen', () => cy.userLogin());
describe('Login process', () => {
it('should write "admin" on username field and "password" on password field', () => {
cy.get('#id_username').type('admin');
cy.get('#id_username').should('have.value', 'admin');
cy.get('#id_password').type('password');
cy.get('#id_password').should('have.value', 'password');
});
it('visit the homepage', () => {
cy.visit('/');
it('should click on login button', () => {
cy.get(':nth-child(1) > .flex-column > [type="submit"]').click();
});
it('should await for an user login', () => {
it('should provide an error, username and password mismatch.', () => {
cy.get('.error').should('contain.text', 'Ton nom d\'utilisateur et ton mot de passe ne correspondent pas. Réessaye.');
});
it('should write "admin" on password field then press the login button', () => {
cy.get('#id_password').type('admin');
cy.get('#id_password').should('have.value', 'admin');
cy.get(':nth-child(1) > .flex-column > [type="submit"]').click();
});
it('should ask for user permission to access their datas.', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/auth/login/');
expect(loc.pathname).to.eq('/authorize');
});
cy.get('.accept-button').click();
});
describe('Login process', () => {
it('should write "admin" on username field and "password" on password field', () => {
cy.get('#id_username').type('admin');
cy.get('#id_username').should('have.value', 'admin');
cy.get('#id_password').type('password');
cy.get('#id_password').should('have.value', 'password');
});
it('should click on login button', () => {
cy.get(':nth-child(1) > .flex-column > [type="submit"]').click();
});
it('should provide an error, username and password mismatch.', () => {
cy.get('.error').should('contain.text', 'Ton nom d\'utilisateur et ton mot de passe ne correspondent pas. Réessaye.')
});
it('should write "admin" on password field then press the login button', () => {
cy.get('#id_password').type('admin');
cy.get('#id_password').should('have.value', 'admin');
cy.get(':nth-child(1) > .flex-column > [type="submit"]').click();
});
it('should ask for user permission to access their datas.', () => {
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/authorize')
});
cy.get('.accept-button').click();
});
// it('should redirect the user to the app.', () => {
// cy.get('.accept-button').click();
// cy.location().should((loc) => {
@ -103,6 +97,5 @@ context('Browser testing', () => {
// expect(loc.pathname).to.eq('/auth/login/');
// });
// });
});
});
});

View File

@ -0,0 +1,61 @@
/// <reference types="Cypress" />
/* globals cy */
context('Signup Browser Testing', () => {
let username = 'testuser_creation_',
email = '',
password = 'testpwd';
before(() => {
cy.randomNum().then(num => {
username += num;
email = username + '@testemail.com';
});
cy.clearLocalStorageSnapshot();
cy.clearLocalStorage({ domain: null });
cy.clearCookies({ domain: null });
});
it('should visit user login screen', () => cy.userLogin());
describe('Signup process', () => {
it('should click on signup page link', () => {
cy.get('.sib-link.sib-register-link').click();
});
it('should write incorrect user data', () => {
cy.get('#id_username').type('!"#$%&');
cy.get('#id_username').should('have.value', '!"#$%&');
cy.get('#id_email').type(email.split('.')[0]);
cy.get('#id_email').should('have.value', email.split('.')[0]);
cy.get('#id_password1').type(password + 'wrong1');
cy.get('#id_password1').should('have.value', password + 'wrong1');
cy.get('#id_password2').type(password + 'wrong2');
cy.get('#id_password2').should('have.value', password + 'wrong2');
});
it('should click on signup button', () => {
cy.get('.sib-registration-btn').click();
});
it('should provide errors about incorrect user data', () => {
cy.get('tbody tr:nth-child(1) ul.errorlist li')
.should('contain.text', 'Enter a valid username. This value may contain only letters, numbers, and ./+/-/_ characters.');
cy.get('tbody tr:nth-child(2) ul.errorlist li')
.should('contain.text', 'Enter a valid email address.');
cy.get('tbody tr:nth-child(4) ul.errorlist li')
.should('contain.text', 'The two password fields didn\'t match.');
});
it('should write correct user data', () => {
cy.get('#id_username').clear().type(username);
cy.get('#id_username').should('have.value', username);
cy.get('#id_email').clear().type(email);
cy.get('#id_email').should('have.value', email);
cy.get('#id_password1').clear().type(password);
cy.get('#id_password1').should('have.value', password);
cy.get('#id_password2').clear().type(password);
cy.get('#id_password2').should('have.value', password);
});
it('should click on signup button', () => {
cy.get('.sib-registration-btn').click();
});
it('should show email confirmation dialog', () => {
cy.contains('h1.text-center', 'Un e-mail d\'activation a été envoyé.').should("exist");
cy.contains('p.text-center', 'Vérifie ta boite mail et clique sur le lien pour activer ton compte.').should("exist");
});
});
});

View File

@ -23,3 +23,50 @@
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
/* globals Cypress, cy, expect */
import 'cypress-localstorage-commands';
Cypress.Commands.add('login', () => {
cy.fixture('admin.json').then(admin => {
cy.get('#id_username').type(admin.username);
cy.get('#id_username').should('have.value', admin.username);
cy.get('#id_password').type(admin.password);
cy.get('#id_password').should('have.value', admin.password);
cy.get('.connection-btn').click();
cy.location('pathname').should('include', '/authorize');
cy.get('.accept-button').click();
cy.location().should(location => {
expect(location.pathname).to.eq('/');
});
});
});
Cypress.Commands.add('userLogin', () => {
cy.visit('/');
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/auth/login/');
});
});
Cypress.Commands.add('encodeUrl', url => {
const encodeIdReplacement = [
['~', '~~'],
['.', '~!'],
[':', '~@'],
['/', '~_'],
];
encodeIdReplacement.forEach(([char, repl]) => {
url = url.split(char).join(repl);
});
return url;
});
Cypress.Commands.add('randomNum', () => {
return Math.floor(1000 + Math.random() * 9000);
});
Cypress.Commands.add('nextYear', increment => {
return new Date().getFullYear() + ( increment || 1 );
});

View File

@ -13,8 +13,10 @@
// https://on.cypress.io/configuration
// ***********************************************************
/* globals Cypress */
// Import commands.js using ES2015 syntax:
import './commands'
import './commands';
//require('cypress-terminal-report').installSupport();
@ -27,4 +29,9 @@ Cypress.on('uncaught:exception', (err, runnable) => {
return false;
});
Cypress.on('fail', () => Cypress.runner.abort())
Cypress.on('fail', (error) => {
console.log(error);
if ( typeof Cypress.runner.abort == 'function' ) {
Cypress.runner.abort();
}
});

197
package-lock.json generated
View File

@ -587,20 +587,17 @@
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
"optional": true
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
},
"arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"optional": true
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
},
"arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"optional": true
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
},
"array-find-index": {
"version": "1.0.2",
@ -610,8 +607,7 @@
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"optional": true
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
"asap": {
"version": "2.0.6",
@ -634,8 +630,7 @@
"assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"optional": true
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
},
"async": {
"version": "3.2.0",
@ -662,8 +657,7 @@
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"optional": true
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"aws-sign2": {
"version": "0.7.0",
@ -716,7 +710,6 @@
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"optional": true,
"requires": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
@ -731,7 +724,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"optional": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@ -740,7 +732,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -749,7 +740,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -758,7 +748,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"optional": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@ -817,7 +806,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"optional": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@ -835,7 +823,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -863,7 +850,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"optional": true,
"requires": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
@ -964,7 +950,6 @@
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"optional": true,
"requires": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
@ -976,7 +961,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"optional": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@ -1080,7 +1064,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
"optional": true,
"requires": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
@ -1128,8 +1111,7 @@
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"optional": true
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
},
"compressible": {
"version": "2.0.18",
@ -1218,8 +1200,7 @@
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"optional": true
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
"copyfiles": {
"version": "2.2.0",
@ -1468,6 +1449,12 @@
}
}
},
"cypress-localstorage-commands": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/cypress-localstorage-commands/-/cypress-localstorage-commands-1.2.1.tgz",
"integrity": "sha512-wWGElZS5fHAQDonZM8xtOA1tM+bTBUdwEMm6XrshLMKjq8Nxw4+Ysbl9/Yc+gZyv66EQe4hPNDLWANnp/zPkcA==",
"dev": true
},
"cypress-terminal-report": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-1.2.1.tgz",
@ -1560,8 +1547,7 @@
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"optional": true
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
"define-properties": {
"version": "1.1.3",
@ -1575,7 +1561,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"optional": true,
"requires": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@ -1585,7 +1570,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -1594,7 +1578,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -1603,7 +1586,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"optional": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@ -1797,7 +1779,6 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"optional": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@ -1812,7 +1793,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"optional": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@ -1821,7 +1801,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -1837,7 +1816,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"optional": true,
"requires": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@ -1847,7 +1825,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"optional": true,
"requires": {
"is-plain-object": "^2.0.4"
}
@ -1858,7 +1835,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"optional": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@ -1874,7 +1850,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"optional": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@ -1883,7 +1858,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -1892,7 +1866,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -1901,7 +1874,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -1910,7 +1882,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"optional": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@ -1992,7 +1963,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"optional": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@ -2004,7 +1974,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -2037,8 +2006,7 @@
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"optional": true
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
},
"forever-agent": {
"version": "0.6.1",
@ -2059,7 +2027,6 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
"optional": true,
"requires": {
"map-cache": "^0.2.2"
}
@ -2116,8 +2083,7 @@
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"optional": true
"bundled": true
},
"aproba": {
"version": "1.2.0",
@ -2154,8 +2120,7 @@
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"concat-map": {
"version": "0.0.1",
@ -2164,8 +2129,7 @@
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
@ -2268,8 +2232,7 @@
},
"inherits": {
"version": "2.0.4",
"bundled": true,
"optional": true
"bundled": true
},
"ini": {
"version": "1.3.5",
@ -2279,7 +2242,6 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@ -2292,20 +2254,17 @@
"minimatch": {
"version": "3.0.4",
"bundled": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"optional": true
"bundled": true
},
"minipass": {
"version": "2.9.0",
"bundled": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@ -2322,7 +2281,6 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@ -2403,8 +2361,7 @@
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"object-assign": {
"version": "4.1.1",
@ -2414,7 +2371,6 @@
"once": {
"version": "1.4.0",
"bundled": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@ -2490,8 +2446,7 @@
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"optional": true
"bundled": true
},
"safer-buffer": {
"version": "2.1.2",
@ -2521,7 +2476,6 @@
"string-width": {
"version": "1.0.2",
"bundled": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@ -2539,7 +2493,6 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@ -2578,13 +2531,11 @@
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"optional": true
"bundled": true
},
"yallist": {
"version": "3.1.1",
"bundled": true,
"optional": true
"bundled": true
}
}
},
@ -2654,8 +2605,7 @@
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
"optional": true
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
},
"getos": {
"version": "3.1.4",
@ -2786,7 +2736,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"optional": true,
"requires": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
@ -2797,7 +2746,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
"optional": true,
"requires": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
@ -2807,7 +2755,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -2894,7 +2841,6 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@ -2903,7 +2849,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -2947,7 +2892,6 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@ -2956,7 +2900,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -2972,7 +2915,6 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"optional": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
@ -2982,8 +2924,7 @@
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"optional": true
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
}
}
},
@ -3006,14 +2947,12 @@
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"optional": true
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"optional": true
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-finite": {
"version": "1.1.0",
@ -3051,7 +2990,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@ -3060,7 +2998,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -3089,7 +3026,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"optional": true,
"requires": {
"isobject": "^3.0.1"
}
@ -3134,8 +3070,7 @@
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"optional": true
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
},
"isarray": {
"version": "1.0.0",
@ -3150,8 +3085,7 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"optional": true
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
"isstream": {
"version": "0.1.2",
@ -3250,8 +3184,7 @@
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"optional": true
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
},
"lazy-ass": {
"version": "1.6.0",
@ -3581,8 +3514,7 @@
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"optional": true
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
"map-obj": {
"version": "1.0.1",
@ -3593,7 +3525,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
"optional": true,
"requires": {
"object-visit": "^1.0.0"
}
@ -3637,7 +3568,6 @@
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"optional": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@ -3695,7 +3625,6 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"optional": true,
"requires": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
@ -3705,7 +3634,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"optional": true,
"requires": {
"is-plain-object": "^2.0.4"
}
@ -3740,7 +3668,6 @@
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"optional": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@ -4028,7 +3955,6 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
"optional": true,
"requires": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
@ -4039,7 +3965,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"optional": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@ -4048,7 +3973,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -4069,7 +3993,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"optional": true,
"requires": {
"isobject": "^3.0.0"
}
@ -4089,7 +4012,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
"optional": true,
"requires": {
"isobject": "^3.0.1"
}
@ -4203,8 +4125,7 @@
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"optional": true
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
},
"path-dirname": {
"version": "1.0.2",
@ -4288,8 +4209,7 @@
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
"optional": true
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
},
"pretty-bytes": {
"version": "5.3.0",
@ -4587,7 +4507,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"optional": true,
"requires": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
@ -4602,8 +4521,7 @@
"repeat-element": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
"optional": true
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
},
"repeat-string": {
"version": "1.6.1",
@ -4675,8 +4593,7 @@
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
"optional": true
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
},
"restore-cursor": {
"version": "1.0.1",
@ -4691,8 +4608,7 @@
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"optional": true
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
},
"right-align": {
"version": "0.1.3",
@ -4728,7 +4644,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"optional": true,
"requires": {
"ret": "~0.1.10"
}
@ -4825,7 +4740,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"optional": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
@ -4837,7 +4751,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -4887,7 +4800,6 @@
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"optional": true,
"requires": {
"base": "^0.11.1",
"debug": "^2.2.0",
@ -4903,7 +4815,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"optional": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@ -4912,7 +4823,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"optional": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -4923,7 +4833,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"optional": true,
"requires": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
@ -4934,7 +4843,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"optional": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@ -4943,7 +4851,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -4952,7 +4859,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"optional": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -4961,7 +4867,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"optional": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@ -4974,7 +4879,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"optional": true,
"requires": {
"kind-of": "^3.2.0"
},
@ -4983,7 +4887,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -4999,7 +4902,6 @@
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
"integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
"optional": true,
"requires": {
"atob": "^2.1.1",
"decode-uri-component": "^0.2.0",
@ -5011,8 +4913,7 @@
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"optional": true
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
},
"spdx-correct": {
"version": "3.1.0",
@ -5046,7 +4947,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"optional": true,
"requires": {
"extend-shallow": "^3.0.0"
}
@ -5071,7 +4971,6 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
"optional": true,
"requires": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
@ -5081,7 +4980,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"optional": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@ -5233,7 +5131,6 @@
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
"optional": true,
"requires": {
"kind-of": "^3.0.2"
},
@ -5242,7 +5139,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"optional": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -5253,7 +5149,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
"optional": true,
"requires": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
@ -5265,7 +5160,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"optional": true,
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@ -5371,7 +5265,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"optional": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
@ -5394,7 +5287,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
"optional": true,
"requires": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
@ -5404,7 +5296,6 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
"optional": true,
"requires": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
@ -5415,7 +5306,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
"optional": true,
"requires": {
"isarray": "1.0.0"
}
@ -5425,8 +5315,7 @@
"has-values": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
"optional": true
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
}
}
},
@ -5453,8 +5342,7 @@
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
"optional": true
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
},
"url": {
"version": "0.11.0",
@ -5477,8 +5365,7 @@
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"optional": true
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
},
"util-deprecate": {
"version": "1.0.2",

View File

@ -70,6 +70,7 @@
},
"devDependencies": {
"cypress": "^4.5.0",
"cypress-localstorage-commands": "^1.2.1",
"cypress-terminal-report": "^1.2.1"
}
}

View File

@ -1,6 +1,6 @@
import { store } from 'https://unpkg.com/@startinblox/core@0.10';
import { Sib } from "https://unpkg.com/@startinblox/core@0.10/dist/libs/Sib.js";
import { StoreMixin } from "https://unpkg.com/@startinblox/core@0.10/dist/mixins/storeMixin.js";
import { store } from 'https://unpkg.com/@startinblox/core@0.12';
import { Sib } from "https://unpkg.com/@startinblox/core@0.12/dist/libs/Sib.js";
import { StoreMixin } from "https://unpkg.com/@startinblox/core@0.12/dist/mixins/storeMixin.js";
export const HublReactivity = {
name: 'hubl-reactivity',

View File

@ -1,11 +1,11 @@
import { widgetFactory } from 'https://unpkg.com/@startinblox/core@0.10/dist/widgets/widget-factory.js';
import { widgetFactory } from 'https://unpkg.com/@startinblox/core@0.12/dist/widgets/widget-factory.js';
const HublSearchUsers = widgetFactory(
'hubl-search-users',
`<input
data-holder
autocomplete="off"
placeholder="\${label}"
placeholder="\${label} (^ + K)"
type="text"
name="\${name}"
value="\${escapedValue}"

View File

@ -1,5 +1,5 @@
import { widgetFactory } from 'https://unpkg.com/@startinblox/core@0.10/dist/widgets/widget-factory.js';
import { importCSS } from 'https://unpkg.com/@startinblox/core@0.10/dist/libs/helpers.js';
import { widgetFactory } from 'https://unpkg.com/@startinblox/core@0.12/dist/widgets/widget-factory.js';
import { importCSS } from 'https://unpkg.com/@startinblox/core@0.12/dist/libs/helpers.js';
import SlimSelect from 'https://dev.jspm.io/slim-select@1.23';
const HublStatus = widgetFactory(

8
src/components/sentry.js Normal file
View File

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

View File

@ -1,39 +1,51 @@
script(src="https://browser.sentry-cdn.com/5.25.0/bundle.tracing.min.js" defer)
script(type="module" src="/components/sentry.js" defer)
script(type="module" src="/components/hubl-search-users.js" defer)
script(type="module" src="/components/hubl-status.js" defer)
script(type="module" src="/components/hubl-reactivity.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/core@0.10" defer)
script(type="module" src="https://unpkg.com/@startinblox/core@0.12" defer)
//- script(type="module" src="/lib/sib-core/dist/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/oidc@0.9" defer)
//- script(type="module" src="/lib/sib-oidc/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/oidc@0.10" defer)
//- script(type="module" src="/lib/sib-auth/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/router@0.8" defer)
//- script(type="module" src="/lib/solid-router/src/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/router@0.9" defer)
//- script(type="module" src="/lib/sib-router/src/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/component-notifications@0.6.2" defer)
//- script(type="module" src="/lib/sib-notifications/index.js" defer)
script(type="module" src="https://unpkg.com/@startinblox/component-notifications@0.7" defer)
//- script(type="module" src="/lib/sib-notifications/index.js" defer)
if endpoints.events || (endpoints.get && endpoints.get.events)
script(type="module" src="https://unpkg.com/@startinblox/component-event@0.1" defer)
//- script(type="module" src="/lib/sib-event/sib-event.js" defer)
if (endpoints.events || (endpoints.get && endpoints.get.events)) && (endpoints.typeevents || (endpoints.get && endpoints.get.typeevents))
script(type="module" src="https://unpkg.com/@startinblox/component-event@1.2" defer)
//- script(type="module" src="/lib/sib-event-component/sib-event.js" defer)
if (endpoints.resources || (endpoints.get && endpoints.get.resources)) && (endpoints.resourceskeywords || (endpoints.get && endpoints.get.resourceskeywords)) && (endpoints.resourcestypes || (endpoints.get && endpoints.get.resourcestypes))
script(type="module" src="https://unpkg.com/@startinblox/component-resource@1.0" defer)
//- script(type="module" src="/lib/sib-resource/sib-resource.js" defer)
if endpoints.joboffers || (endpoints.get && endpoints.get.joboffers)
script(type="module" src="https://unpkg.com/@startinblox/component-job-board@0.5" defer)
script(type="module" src="https://unpkg.com/@startinblox/component-job-board@0.8" defer)
//- script(type="module" src="/lib/solid-job-board/dist/index.js" defer)
if (endpoints.uploads || (endpoints.get && endpoints.get.uploads)) && (endpoints.skills || (endpoints.get && endpoints.get.skills)) && (endpoints.users || (endpoints.get && endpoints.get.users))
script(type="module" src="https://unpkg.com/@startinblox/component-directory@0.5" defer)
script(type="module" src="https://unpkg.com/@startinblox/component-directory@0.10" defer)
//- script(type="module" src="/lib/solid-directory/dist/index.js" defer)
if endpoints.dashboards || (endpoints.get && endpoints.get.dashboards)
script(type="module" src="https://unpkg.com/@startinblox/component-dashboard@0.2" defer)
script(type="module" src="https://unpkg.com/@startinblox/component-dashboard@0.5" defer)
//- script(type="module" src="/lib/solid-dashboard/dist/index.js" defer)
if endpoints.users || (endpoints.get && endpoints.get.users)
script(type="module" src="https://unpkg.com/@startinblox/component-chat@0.8" defer)
script(type="module" src="https://unpkg.com/@startinblox/component-chat@1.1" defer)
//- script(type="module" src="/lib/solid-xmpp-chat/dist/index.js" defer)
if endpoints.polls || (endpoints.get && endpoints.get.polls)
script(type="module" src="https://unpkg.com/@startinblox/component-poll@1.0" defer)
//- script(type="module" src="/lib/sib-polls-component/index.js" defer)
script(src="https://cdn.jsdelivr.net/npm/sweetalert2@10")
script(src="/scripts/index.js" defer)
//- Stylesheets

View File

@ -1,6 +1,9 @@
.logo
solid-link(next='dashboard')
img(src=`${clientLogo || '/images/logo.png'}` style=`max-height:${clientLogoHeight || '32px'}`)
.header-left
.logo
solid-link(next='dashboard')
img(src=`${clientLogo || '/images/logo.png'}` style=`max-height:${clientLogoHeight || '32px'}`)
span.beta-tag Beta
solid-notifications.notLoggedIn(
nested-field="inbox"
@ -8,8 +11,8 @@ solid-notifications.notLoggedIn(
)
//- Templates for notifications from circles and from other users
include views/circle/page-circle-notifications.pug
include views/user/page-user-notifications.pug
include views/notifications/message-circle.pug
include views/notifications/message-private.pug
include templates/hubl-user-avatar.pug

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="34px" height="34px" viewBox="0 0 34 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>003-appointment</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Circle---Survey-Vote" transform="translate(-1388.000000, -440.000000)" fill="#3C3F57">
<g id="Menu-droite" transform="translate(1370.000000, 72.000000)">
<g id="003-appointment" transform="translate(18.000000, 368.000000)">
<path d="M30.6796875,2.921875 L27.5143008,2.921875 L27.5143008,1.9921875 C27.5143008,0.893695312 26.6206055,0 25.5221133,0 C24.4236211,0 23.5299258,0.893695312 23.5299258,1.9921875 L23.5299258,2.921875 L12.3736758,2.921875 L12.3736758,1.9921875 C12.3736758,0.893695312 11.4799805,0 10.3814883,0 C9.28299609,0 8.38930078,0.893695312 8.38930078,1.9921875 L8.38930078,2.94644531 C8.33285547,2.93083984 8.2736875,2.921875 8.21226172,2.921875 L5.56637109,2.921875 C3.73555078,2.921875 2.24605859,4.41136719 2.24605859,6.2421875 L2.24605859,17.5533633 C2.24605859,17.920125 2.54342578,18.2174258 2.91012109,18.2174258 C3.27681641,18.2174258 3.57418359,17.920125 3.57418359,17.5533633 L3.57418359,9.76171875 L27.5143008,9.76171875 C27.8809961,9.76171875 28.1783633,9.46441797 28.1783633,9.09765625 C28.1783633,8.73089453 27.8809961,8.43359375 27.5143008,8.43359375 L3.57418359,8.43359375 L3.57418359,6.2421875 C3.57418359,5.14369531 4.46787891,4.25 5.56637109,4.25 L8.21226172,4.25 C8.2736875,4.25 8.33285547,4.24096875 8.38930078,4.22542969 L8.38930078,5.08007812 C8.38930078,6.17857031 9.28299609,7.07226562 10.3814883,7.07226562 C11.4799805,7.07226562 12.3736758,6.17857031 12.3736758,5.08007812 L12.3736758,4.25 L23.5299258,4.25 L23.5299258,5.08007812 C23.5299258,6.17857031 24.4236211,7.07226562 25.5221133,7.07226562 C26.6206055,7.07226562 27.5143008,6.17857031 27.5143008,5.08007812 L27.5143008,4.25 L30.6796875,4.25 C31.7781797,4.25 32.671875,5.14369531 32.671875,6.2421875 L32.671875,31.4761641 C32.671875,32.1354453 32.1355117,32.671875 31.4761641,32.671875 C30.8168164,32.671875 30.2804531,32.1354453 30.2804531,31.4761641 L30.2804531,29.7583008 C30.2804531,29.3915391 29.9830859,29.0942383 29.6163906,29.0942383 L21.8919492,29.0942383 C21.5252539,29.0942383 21.2278867,29.3915391 21.2278867,29.7583008 C21.2278867,30.1250625 21.5252539,30.4223633 21.8919492,30.4223633 L28.9523281,30.4223633 L28.9523281,31.4761641 C28.9523281,31.9085352 29.0617656,32.3157383 29.2541445,32.671875 L2.5234375,32.671875 C1.86435547,32.671875 1.328125,32.1356445 1.328125,31.4765625 L1.328125,30.4223633 L16.1915039,30.4223633 C16.5581992,30.4223633 16.8555664,30.1250625 16.8555664,29.7583008 C16.8555664,29.3915391 16.5581992,29.0942383 16.1915039,29.0942383 L9.55645703,29.0942383 C10.7168398,28.0948906 11.4536836,26.6166875 11.4536836,24.96875 C11.4536836,21.9661914 9.01092969,19.5234375 6.00837109,19.5234375 C3.0058125,19.5234375 0.563058594,21.9661914 0.563058594,24.96875 C0.563058594,26.6166875 1.29990234,28.0948906 2.46028516,29.0942383 L0.6640625,29.0942383 C0.297367187,29.0942383 0,29.3915391 0,29.7583008 L0,31.4765625 C0,32.8679727 1.13202734,34 2.5234375,34 L31.4761641,34 C32.8677734,34 34,32.8678398 34,31.4761641 L34,6.2421875 C34,4.41136719 32.5105078,2.921875 30.6796875,2.921875 Z M11.0455508,5.08007812 C11.0455508,5.44624219 10.7476523,5.74414062 10.3814883,5.74414062 C10.0153242,5.74414062 9.71742578,5.44624219 9.71742578,5.08007812 L9.71742578,1.9921875 C9.71742578,1.62602344 10.0153242,1.328125 10.3814883,1.328125 C10.7476523,1.328125 11.0455508,1.62602344 11.0455508,1.9921875 L11.0455508,5.08007812 Z M26.1861758,5.08007812 C26.1861758,5.44624219 25.8882773,5.74414062 25.5221133,5.74414062 C25.1559492,5.74414062 24.8580508,5.44624219 24.8580508,5.08007812 L24.8580508,1.9921875 C24.8580508,1.62602344 25.1559492,1.328125 25.5221133,1.328125 C25.8882773,1.328125 26.1861758,1.62602344 26.1861758,1.9921875 L26.1861758,5.08007812 Z M1.89118359,24.96875 C1.89118359,22.6985195 3.73814062,20.8515625 6.00837109,20.8515625 C8.27860156,20.8515625 10.1255586,22.6985195 10.1255586,24.96875 C10.1255586,27.2389805 8.27860156,29.0859375 6.00837109,29.0859375 C3.73814062,29.0859375 1.89118359,27.2389805 1.89118359,24.96875 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M31.200865,8.74905 C31.04285,8.59095 30.82355,8.5 30.6,8.5 C30.376365,8.5 30.15715,8.59095 29.99905,8.74905 C29.84095,8.90715 29.75,9.12645 29.75,9.35 C29.75,9.57355 29.840865,9.79285 29.99905,9.95095 C30.157235,10.10905 30.376365,10.2 30.6,10.2 C30.82355,10.2 31.04285,10.10905 31.200865,9.95095 C31.358965,9.79285 31.45,9.57355 31.45,9.35 C31.45,9.12645 31.35905,8.90715 31.200865,8.74905 Z" id="Path"></path>
<path d="M20.150865,29.1483242 C19.99285,28.9901451 19.77355,28.9 19.55,28.9 C19.32645,28.9 19.10715,28.9901451 18.94905,29.1483242 C18.79095,29.3073537 18.7,29.525913 18.7,29.7495748 C18.7,29.974087 18.790865,30.1926463 18.94905,30.3516758 C19.10715,30.5098549 19.32645,30.6 19.55,30.6 C19.77355,30.6 19.99285,30.5098549 20.150865,30.3516758 C20.308965,30.1926463 20.4,29.9732366 20.4,29.7495748 C20.4,29.525913 20.30905,29.3073537 20.150865,29.1483242 Z" id="Path"></path>
<path d="M15.3,20.4 C13.8939434,20.4 12.75,21.5439434 12.75,22.95 C12.75,24.3560566 13.8939434,25.5 15.3,25.5 C16.7060566,25.5 17.85,24.3560566 17.85,22.95 C17.85,21.5439434 16.7060566,20.4 15.3,20.4 Z M15.3,24.1578947 C14.6339803,24.1578947 14.0921053,23.6160197 14.0921053,22.95 C14.0921053,22.2839803 14.6339803,21.7421053 15.3,21.7421053 C15.9660197,21.7421053 16.5078947,22.2839803 16.5078947,22.95 C16.5078947,23.6160197 15.9660197,24.1578947 15.3,24.1578947 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M21.25,20.4 C19.8439434,20.4 18.7,21.5439434 18.7,22.95 C18.7,24.3560566 19.8439434,25.5 21.25,25.5 C22.6560566,25.5 23.8,24.3560566 23.8,22.95 C23.8,21.5439434 22.6560566,20.4 21.25,20.4 Z M21.25,24.1578947 C20.5839803,24.1578947 20.0421053,23.6160197 20.0421053,22.95 C20.0421053,22.2839803 20.5839803,21.7421053 21.25,21.7421053 C21.9160197,21.7421053 22.4578947,22.2839803 22.4578947,22.95 C22.4578947,23.6160197 21.9160197,24.1578947 21.25,24.1578947 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M27.2,20.4 C25.7939434,20.4 24.65,21.5439434 24.65,22.95 C24.65,24.3560566 25.7939434,25.5 27.2,25.5 C28.6060566,25.5 29.75,24.3560566 29.75,22.95 C29.75,21.5439434 28.6060566,20.4 27.2,20.4 Z M27.2,24.1578947 C26.5339803,24.1578947 25.9921053,23.6160197 25.9921053,22.95 C25.9921053,22.2839803 26.5339803,21.7421053 27.2,21.7421053 C27.8660197,21.7421053 28.4078947,22.2839803 28.4078947,22.95 C28.4078947,23.6160197 27.8660197,24.1578947 27.2,24.1578947 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M8.5,13.6 C7.09394342,13.6 5.95,14.7439434 5.95,16.15 C5.95,17.5560566 7.09394342,18.7 8.5,18.7 C9.90605658,18.7 11.05,17.5560566 11.05,16.15 C11.05,14.7439434 9.90605658,13.6 8.5,13.6 Z M8.5,17.3578947 C7.83398026,17.3578947 7.29210526,16.8160197 7.29210526,16.15 C7.29210526,15.4839803 7.83398026,14.9421053 8.5,14.9421053 C9.16601974,14.9421053 9.70789474,15.4839803 9.70789474,16.15 C9.70789474,16.8160197 9.16601974,17.3578947 8.5,17.3578947 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M21.25,13.6 C19.8439434,13.6 18.7,14.7439434 18.7,16.15 C18.7,17.5560566 19.8439434,18.7 21.25,18.7 C22.6560566,18.7 23.8,17.5560566 23.8,16.15 C23.8,14.7439434 22.6560566,13.6 21.25,13.6 Z M21.25,17.3578947 C20.5839803,17.3578947 20.0421053,16.8160197 20.0421053,16.15 C20.0421053,15.4839803 20.5839803,14.9421053 21.25,14.9421053 C21.9160197,14.9421053 22.4578947,15.4839803 22.4578947,16.15 C22.4578947,16.8160197 21.9160197,17.3578947 21.25,17.3578947 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M27.2,13.6 C25.7939434,13.6 24.65,14.7439434 24.65,16.15 C24.65,17.5560566 25.7939434,18.7 27.2,18.7 C28.6060566,18.7 29.75,17.5560566 29.75,16.15 C29.75,14.7439434 28.6060566,13.6 27.2,13.6 Z M27.2,17.3578947 C26.5339803,17.3578947 25.9921053,16.8160197 25.9921053,16.15 C25.9921053,15.4839803 26.5339803,14.9421053 27.2,14.9421053 C27.8660197,14.9421053 28.4078947,15.4839803 28.4078947,16.15 C28.4078947,16.8160197 27.8660197,17.3578947 27.2,17.3578947 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M15.3,13.6 C13.8939434,13.6 12.75,14.7439434 12.75,16.15 C12.75,17.5560566 13.8939434,18.7 15.3,18.7 C16.7060566,18.7 17.85,17.5560566 17.85,16.15 C17.85,14.7439434 16.7060566,13.6 15.3,13.6 Z M15.3,17.3578947 C14.6339803,17.3578947 14.0921053,16.8160197 14.0921053,16.15 C14.0921053,15.4839803 14.6339803,14.9421053 15.3,14.9421053 C15.9660197,14.9421053 16.5078947,15.4839803 16.5078947,16.15 C16.5078947,16.8160197 15.9660197,17.3578947 15.3,17.3578947 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M8.30810749,23.1587132 C8.05218529,22.8804289 7.63744195,22.8804289 7.38145423,23.1587132 L5.24772092,25.4795545 L4.51854577,24.686462 C4.26262357,24.4081777 3.84788023,24.4081777 3.59189251,24.686462 C3.33603583,24.9647463 3.33603583,25.4159874 3.59189251,25.6943429 L4.78442705,26.991269 C4.90734309,27.1248882 5.07396115,27.2 5.24772092,27.2 C5.42148069,27.2 5.58809876,27.1248882 5.71101479,26.991269 L8.30810749,24.1665229 C8.56396417,23.8882386 8.56396417,23.4369975 8.30810749,23.1587132 Z" id="Path"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.4 KiB

17
src/images/file.svg Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="25px" height="34px" viewBox="0 0 25 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>003-file</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Circle---Survey-Vote" transform="translate(-1392.000000, -301.000000)" fill="#3C3F57">
<g id="Menu-droite" transform="translate(1370.000000, 72.000000)">
<g id="003-file" transform="translate(22.000000, 229.000000)">
<path d="M24.998364,6.68645454 C24.99615,6.48798177 24.9186595,6.29350943 24.7714276,6.14755839 L18.7958697,0.226540272 C18.7956092,0.22628218 18.7954138,0.226217657 18.7951534,0.226024088 C18.6540425,0.0863317813 18.4590791,0 18.2438639,0 L1.64344938,0 C0.737201458,0 0,0.730400422 0,1.62836709 L0,31.4073472 C0,32.3052493 0.73713634,33.0357143 1.64338426,33.0357143 L23.3566077,33.0357143 C24.2627905,33.0357143 25,32.3053139 25,31.4073472 L25,6.69445539 C25,6.69161638 24.9986245,6.68922902 24.998364,6.68645454 Z M19.0244991,2.64099114 L22.3347102,5.9209536 L19.1066781,5.9209536 C19.0614211,5.9209536 19.0244991,5.88436905 19.0244991,5.83952557 L19.0244991,2.64099114 Z M23.4388518,31.4074117 C23.4388518,31.4522552 23.4019299,31.4887752 23.3566729,31.4887752 L1.64344938,31.4887752 C1.59819233,31.4887752 1.56133551,31.4522552 1.56133551,31.4074117 L1.56133551,1.62836709 C1.56133551,1.5835236 1.59819233,1.54700358 1.64344938,1.54700358 L17.4632287,1.54700358 L17.4632287,5.83952557 C17.4632287,6.73742771 18.2004953,7.4680217 19.1067432,7.4680217 L23.4388518,7.4680217 L23.4388518,31.4074117 L23.4388518,31.4074117 Z" id="Shape" fill-rule="nonzero"></path>
<path d="M19.7652516,10.7142857 L6.12766983,10.7142857 C5.70217028,10.7142857 5.35714286,11.1140158 5.35714286,11.6071429 C5.35714286,12.1001954 5.70217028,12.5 6.12766983,12.5 L19.7651873,12.5 C20.1906869,12.5 20.5357143,12.1001954 20.5357143,11.6071429 C20.5357143,11.1140158 20.1906869,10.7142857 19.7652516,10.7142857 Z" id="Path"></path>
<path d="M19.7652516,15.1785714 L6.12766983,15.1785714 C5.70217028,15.1785714 5.35714286,15.578376 5.35714286,16.0714286 C5.35714286,16.5644811 5.70217028,16.9642857 6.12766983,16.9642857 L19.7651873,16.9642857 C20.1906869,16.9642857 20.5357143,16.5644811 20.5357143,16.0714286 C20.5357143,15.578376 20.1906869,15.1785714 19.7652516,15.1785714 Z" id="Path"></path>
<path d="M19.7652516,19.6428571 L6.12766983,19.6428571 C5.70217028,19.6428571 5.35714286,20.0426617 5.35714286,20.5357143 C5.35714286,21.0288413 5.70217028,21.4285714 6.12766983,21.4285714 L19.7651873,21.4285714 C20.1906869,21.4285714 20.5357143,21.0288413 20.5357143,20.5357143 C20.5357143,20.0427362 20.1906869,19.6428571 19.7652516,19.6428571 Z" id="Path"></path>
<path d="M12.6522053,25 L6.09779471,25 C5.68879277,25 5.35714286,25.3998046 5.35714286,25.8928571 C5.35714286,26.3859842 5.68879277,26.7857143 6.09779471,26.7857143 L12.6522053,26.7857143 C13.0612072,26.7857143 13.3928571,26.3859842 13.3928571,25.8928571 C13.3928571,25.3997301 13.0612072,25 12.6522053,25 Z" id="Path"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
src/images/send.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

22
src/images/vote.svg Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="36px" height="36px" viewBox="0 0 36 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>vote</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Circle---Survey-Vote" transform="translate(-1389.000000, -369.000000)" fill="#3A3A3A" fill-rule="nonzero">
<g id="Menu-droite" transform="translate(1370.000000, 72.000000)">
<g id="vote" transform="translate(19.000000, 297.000000)">
<path d="M30.7812857,27.8250222 C30.7814286,27.82495 30.7815714,27.8248056 30.7817143,27.8247333 L26.0436429,23.2025111 C25.9105,23.0725833 25.7326429,23 25.5477143,23 L10.4523571,23 C10.2673571,23 10.0895714,23.0725833 9.95642857,23.2025111 L5.21835714,27.8247333 C5.21842857,27.8248778 5.21857143,27.82495 5.21871429,27.8250944 C5.08407143,27.9564667 5,28.1404167 5,28.3444444 L5,35.2777778 C5,35.6765889 5.31985714,36 5.71428571,36 L30.2857143,36 C30.6801429,36 31,35.6765889 31,35.2777778 L31,28.3444444 C31,28.1403444 30.9159286,27.9563944 30.7812857,27.8250222 Z M10.7407857,24.4444444 L25.2592143,24.4444444 L28.5166429,27.6222222 L7.48335714,27.6222222 L10.7407857,24.4444444 Z M29.5714286,34.5555556 L6.42857143,34.5555556 L6.42857143,29.0666667 L29.5714286,29.0666667 L29.5714286,34.5555556 Z" id="XMLID_1190_"></path>
<path d="M23.2857143,26 L15.7142857,26 C15.3198571,26 15,26.2239 15,26.5 C15,26.7761 15.3198571,27 15.7142857,27 L23.2857143,27 C23.6801429,27 24,26.7761 24,26.5 C24,26.2239 23.6801429,26 23.2857143,26 Z" id="XMLID_1195_"></path>
<path d="M18.8435333,4.24970152 L17.4998687,5.9411564 L17.1565345,5.50886918 C16.892056,5.17584854 16.4632269,5.17584854 16.1984097,5.50886918 C15.9338634,5.84188982 15.9338634,6.38188641 16.1984097,6.71490704 L17.0208402,7.7502132 C17.1478631,7.91011428 17.3202076,8 17.4998687,8 C17.6795298,8 17.8518067,7.91011428 17.9788973,7.7502132 L19.8015903,5.45573938 C20.0661366,5.12271874 20.0661366,4.58272216 19.8015903,4.24970152 C19.5370441,3.91676616 19.108215,3.91676616 18.8435333,4.24970152 Z" id="XMLID_1196_"></path>
<path d="M13.6756757,13 L22.3243243,13 C22.6974324,13 23,12.6766611 23,12.2777778 L23,9.38888889 C23,8.99000556 22.6974324,8.66666667 22.3243243,8.66666667 C21.9512162,8.66666667 21.6486486,8.99000556 21.6486486,9.38888889 L21.6486486,11.5555556 L14.3513514,11.5555556 L14.3513514,1.44444444 L21.6486486,1.44444444 L21.6486486,3.61111111 C21.6486486,4.00999444 21.9512162,4.33333333 22.3243243,4.33333333 C22.6974324,4.33333333 23,4.00999444 23,3.61111111 L23,0.722222222 C23,0.323338889 22.6974324,0 22.3243243,0 L13.6756757,0 C13.3025676,0 13,0.323338889 13,0.722222222 L13,12.2777778 C13,12.6766611 13.3025676,13 13.6756757,13 Z" id="XMLID_1197_"></path>
<path d="M28.0320899,14.7792188 L28.2419683,15.5623343 L27.4589009,15.7721471 C27.1287029,15.8605903 26.9327504,16.2000043 27.0212571,16.5301964 C27.0953427,16.8067284 27.3453895,16.9890613 27.618708,16.9890613 C27.6716882,16.9890613 27.7256587,16.9821913 27.7792579,16.9678324 L28.5623871,16.7580196 L28.7722036,17.5411351 C28.8462893,17.8176671 29.0963361,18 29.3696546,18 C29.4226348,18 29.4766053,17.99313 29.5302044,17.9787712 C29.8604024,17.8902661 30.0563549,17.550914 29.9678483,17.2207219 L29.7580317,16.4376683 L30.5410991,16.2278555 C30.8712971,16.1394123 31.0672496,15.7999983 30.9787429,15.4698062 C30.8902363,15.139676 30.5506306,14.9436031 30.2207421,15.0321701 L29.4376748,15.2419829 L29.2277964,14.4588675 C29.1392897,14.1287373 28.7999316,13.9327882 28.4697956,14.0212314 C28.1395357,14.1096746 27.9435832,14.4490267 28.0320899,14.7792188 Z" id="XMLID_1199_"></path>
<path d="M35.9757411,13.1338077 C35.9268679,12.9496301 35.8077085,12.7926262 35.6443001,12.6973024 L27.7582949,8.09645619 C27.4179614,7.89790092 26.9828695,8.01572572 26.7865233,8.35956709 L21.0953277,18.3206867 C21.0009962,18.4858139 20.9753858,18.6819969 21.0242589,18.8661745 C21.0731321,19.050424 21.1922915,19.207356 21.3556999,19.3026798 L29.2417051,23.903526 C29.3537505,23.9688724 29.47604,24 29.5966934,24 C29.842553,24 30.0817255,23.8710325 30.2134767,23.6404151 L35.9046723,13.6792955 C35.9990038,13.5142402 36.0246142,13.3179853 35.9757411,13.1338077 Z M29.3370326,22.2990528 L22.6832424,18.4170888 L27.6630386,9.7010732 L34.3168287,13.5830372 L29.3370326,22.2990528 Z" id="XMLID_1203_"></path>
<path d="M7.29011411,17 C7.43999492,17 7.58875593,16.9679326 7.72080608,16.9055596 C7.91866598,16.8121059 8.06303393,16.6581822 8.12212486,16.4776178 L8.97041577,13.8873437 C9.09359368,13.5114146 8.82087952,13.1249139 8.36133119,13.024201 C7.9014383,12.9234176 7.42957217,13.1466211 7.30639427,13.5225502 L6.68102953,15.4320078 L6.08452114,15.3012713 C5.62531736,15.2004174 5.15276213,15.4236914 5.02958423,15.7996205 C4.90640632,16.1756201 5.17912048,16.5620504 5.63866881,16.6628337 L7.06718795,16.9760375 C7.14049172,16.992036 7.21543212,17 7.29011411,17 Z" id="XMLID_1204_"></path>
<path d="M6.40330662,23 C6.52395996,23 6.64632067,22.9688723 6.75829494,22.9035258 L14.6443001,18.3026704 C14.8077085,18.2073464 14.9269391,18.0503423 14.9757411,17.8661643 C15.0246142,17.6819863 14.9990038,17.4858029 14.9046723,17.3206753 L9.2134767,7.35953586 C9.01705932,7.0156938 8.58196742,6.89794066 8.24170506,7.09642444 L0.355699932,11.6972798 C0.192291479,11.7926038 0.0730609322,11.949608 0.0242589303,12.133786 C-0.0246142116,12.317964 0.000996168453,12.5142192 0.0953277349,12.6792749 L5.7865233,22.6404144 C5.91827447,22.8710323 6.15737583,23 6.40330662,23 Z M8.33696145,8.70097276 L13.3167576,17.4170058 L6.66296741,21.2989775 L1.6831713,12.5829445 L8.33696145,8.70097276 Z" id="XMLID_1207_"></path>
<path d="M12.5,26 C12.3685,26 12.2395,26.05345 12.1465,26.1465 C12.0535,26.23955 12,26.3685 12,26.5 C12,26.632 12.05345,26.7605 12.1465,26.85345 C12.2395,26.94695 12.3685,27 12.5,27 C12.6315,27 12.7605,26.94695 12.85345,26.85345 C12.94645,26.7605 13,26.63195 13,26.5 C13,26.3685 12.9465,26.2395 12.85345,26.1465 C12.7605,26.0535 12.6315,26 12.5,26 Z" id="XMLID_1213_"></path>
<path d="M22.5,6 C22.3685,6 22.2395,6.053 22.1465,6.146 C22.0535,6.2395 22,6.368 22,6.5 C22,6.6315 22.05345,6.7605 22.1465,6.8535 C22.23955,6.9465 22.3685,7 22.5,7 C22.6315,7 22.7605,6.9465 22.85345,6.8535 C22.94645,6.7605 23,6.6315 23,6.5 C23,6.368 22.9465,6.2395 22.85345,6.146 C22.7605,6.053 22.6315,6 22.5,6 Z" id="XMLID_1215_"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -71,15 +71,22 @@ html(lang="en")
hubl-reactivity(bind-user nested-field="circles" target-src=`${endpoints.circles || endpoints.get.circles}`)
hubl-reactivity(bind-user nested-field="circles" target-src=`${endpoints.circles || endpoints.get.circles}joinable/`)
include page-circle.pug
if endpoints.users || (endpoints.get && endpoints.get.users)
#messages(hidden).with-sidebar
include page-messages.pug
if endpoints.polls || (endpoints.get && endpoints.get.polls)
#polls(hidden).with-sidebar
include page-polls.pug
if endpoints.events || (endpoints.get && endpoints.get.events)
#events(hidden)
include page-events.pug
if endpoints.resources || (endpoints.get && endpoints.get.resources)
#resources(hidden)
include page-resources.pug
#admin(hidden).with-sidebar
include page-admin.pug

View File

@ -21,31 +21,33 @@ solid-widget(name='hubl-create')
solid-widget(name='hubl-menu-fix-url-circle')
template
solid-display(
data-src='${value}'
fields='status, name, jabberID, badge'
value-badge='${value}'
widget-status='hubl-menu-publicprivate'
widget-badge='hubl-counter'
widget-jabberID='hubl-menu-jabberid'
widget-name='solid-display-div'
order-by="name"
)
solid-link(data-src="${value}" next="circle")
solid-display(
data-src='${value}'
fields='status, name, jabberID, badge'
value-badge='${value}'
widget-status='hubl-menu-publicprivate'
widget-badge='hubl-counter'
widget-jabberID='hubl-menu-jabberid'
widget-name='solid-display-div'
order-by="name"
)
solid-widget(name='hubl-menu-fix-url-project')
template
solid-display(
data-src='${value}'
fields='status, project(customer.name, name, jabberID), badge'
class-name='project-name'
class-customer.name='project-customer'
value-badge='${value}'
widget-status='hubl-menu-publicprivate'
widget-jabberID='hubl-menu-jabberid'
widget-badge='hubl-counter'
widget-name='solid-display-div'
order-by="customer.name"
)
solid-link(data-src="${value}" next="project")
solid-display(
data-src='${value}'
fields='status, project(customer.name, name, jabberID), badge'
class-name='project-name'
class-customer.name='project-customer'
value-badge='${value}'
widget-status='hubl-menu-publicprivate'
widget-jabberID='hubl-menu-jabberid'
widget-badge='hubl-counter'
widget-name='solid-display-div'
order-by="customer.name"
)
solid-router#navbar-router(default-route='dashboard')
@ -64,51 +66,75 @@ solid-router#navbar-router(default-route='dashboard')
div.menu-label Offres de mission
div.menu-icon.icon-briefcase
div.divider
if endpoints.resources || (endpoints.get && endpoints.get.resources)
solid-route.menu(name='resources')
div.menu-label Ressources
div.menu-icon.icon-docs
div.divider
if endpoints.polls || (endpoints.get && endpoints.get.polls)
solid-route.menu(name='polls')
div.menu-label Gouvernance
div.menu-icon.icon-bubbles
div.divider
if endpoints.events || (endpoints.get && endpoints.get.events)
solid-route.menu(name='events')
div.menu-label Evènements
div.menu-icon.icon-calendar
div.divider
if endpoints.projects || (endpoints.get && endpoints.get.projects)
div
solid-link(next='admin-project-list')
div.menu-wrapper
solid-link
//- (next='admin-project-list')
div.menu
div.menu-chevron
div.menu-icon.icon-arrow-right-circle
div.menu-icon.icon-arrow-up
//- div.menu-icon.icon-arrow-right-circle
div.menu-label Projets
div.menu-icon.icon-folder-alt
solid-route(name='project', rdf-type='hd:project', use-id='', hidden)
div.sub-menu.menu-notification
div#loader-projects.loader.loader-menu
div
div
div
div
solid-display.project-tab(
bind-user
nested-field='projects'
fields='project'
loader-id='loader-projects'
empty-widget='hubl-create'
empty-value='projet'
widget-project='hubl-menu-fix-url-project'
order-by='project.customer.name'
next='project'
order-by="project.customer.name"
)
div.divider
if endpoints.circles || (endpoints.get && endpoints.get.circles)
div
solid-link(next='admin-circle-list')
div.menu-wrapper
solid-link
//- (next='admin-circle-list')
div.menu
div.menu-chevron
div.menu-icon.icon-arrow-right-circle
div.menu-label Canaux
div.menu-icon.icon-arrow-up
//- div.menu-icon.icon-arrow-right-circle
div.menu-label Cercles
div.menu-icon.icon-folder-alt
solid-route(name='circle', rdf-type='hd:circle', use-id='', hidden)
div.sub-menu.menu-notification
div#loader-circles.loader.loader-menu
div
div
div
div
solid-display.circle-tab(
bind-user
nested-field='circles'
fields='circle'
loader-id='loader-circles'
empty-widget='hubl-create'
empty-value='canal'
empty-value='cercle'
widget-circle='hubl-menu-fix-url-circle'
order-by='circle.name'
next='circle'
order-by="circle.name"
)
div.divider
if endpoints.users || (endpoints.get && endpoints.get.users)
@ -120,9 +146,15 @@ solid-router#navbar-router(default-route='dashboard')
div.menu-icon.icon-envelope-letter
solid-route(name='messages', rdf-type='foaf:user', use-id='', hidden)
div.sub-menu.menu-notification
div#loader-messages.loader.loader-menu
div
div
div
div
solid-display.nosub.message-tab(
data-src=`${endpoints.users || (endpoints.get && endpoints.get.users)}`
fields='name, chatProfile.jabberID, badge'
loader-id='loader-messages'
search-fields="name"
search-label-name="Rechercher..."
search-widget-name="hubl-search-users"

View File

@ -6,21 +6,21 @@
#admin-projects(hidden)
include views/admin/page-admin-projects.pug
if (endpoints.users || (endpoints.get && endpoints.get.users))
#admin-users(hidden)
include views/admin/page-admin-users.pug
#admin-communities(hidden)
include views/admin/page-admin-communities.pug
nav.jsRightMenu(role='navigation')
solid-router(default-route='admin-circles')
ul
li.jsOffsiteToggle
a Replier le menu
if (endpoints.users || (endpoints.get && endpoints.get.users))
solid-route.active-color(name='admin-users')
solid-route(name='admin-communities')
li
a Utilisateurs
a Communautés
if endpoints.circles || (endpoints.get && endpoints.get.circles)
solid-route(name='admin-circles')
li
a Canaux
a Cercles
if endpoints.projects || (endpoints.get && endpoints.get.projects)
solid-route(name='admin-projects')
li

View File

@ -16,6 +16,12 @@
include views/circle/page-circle-chat.pug
#circle-information.content-box__height(hidden)
include views/circle/page-circle-profile.pug
#circle-events(hidden)
include views/circle/page-circle-events.pug
#circle-resources(hidden)
include views/circle/page-circle-resources.pug
#circle-polls(hidden)
include views/circle/page-circle-polls.pug
nav.jsRightMenu(role='navigation')
solid-router(default-route='circle-chat')
@ -28,3 +34,16 @@ nav.jsRightMenu(role='navigation')
solid-route(name='circle-information')
li
a Information
if (endpoints.resources || (endpoints.get && endpoints.get.resources)) && (endpoints.resourceskeywords || (endpoints.get && endpoints.get.resourceskeywords)) && (endpoints.resourcestypes || (endpoints.get && endpoints.get.resourcestypes))
solid-route(name='circle-resources' use-id)
li
a Resources
if (endpoints.events || (endpoints.get && endpoints.get.events)) && (endpoints.typeevents || (endpoints.get && endpoints.get.typeevents))
solid-route(name='circle-events' use-id)
li
a Events
if endpoints.polls || (endpoints.get && endpoints.get.polls)
solid-route(name='circle-polls' use-id)
li
a Polls

View File

@ -1,5 +1,7 @@
.views-container
sib-event(data-src=`${endpoints.events || (endpoints.get && endpoints.get.events)}`
solid-event(data-src=`${endpoints.events || (endpoints.get && endpoints.get.events)}`
range-event-type=`${endpoints.typeevents || (endpoints.get && endpoints.get.typeevents)}`
range-event-circle=`${endpoints.circles || (endpoints.get && endpoints.get.circles)}`
upload-dir=`${endpoints.uploads || (endpoints.get && endpoints.get.uploads)}`
id-prefix='default'
)

View File

@ -17,7 +17,7 @@
solid-xmpp-chat(
data-authentication='login',
data-auto-login='true',
data-bosh-service-url=`${xmpp}`,
data-websocket-url=`${xmppWebsocket || 'wss://jabber.happy-dev.fr/xmpp-websocket'}`,
data-i18n='en',
bind-resources
)

6
src/page-polls.pug Normal file
View File

@ -0,0 +1,6 @@
.views-container
solid-poll(
data-src=`${endpoints.polls || (endpoints.get && endpoints.get.polls)}`
range-base-polls=`${endpoints.pollRangeBase || (endpoints.get && endpoints.get.pollRangeBase)}`
upload-dir=`${endpoints.uploads || (endpoints.get && endpoints.get.uploads)}`
)

8
src/page-resources.pug Normal file
View File

@ -0,0 +1,8 @@
.views-container
solid-resource(data-src=`${endpoints.resources || (endpoints.get && endpoints.get.resources)}`
range-resource-type=`${endpoints.resourcestypes || (endpoints.get && endpoints.get.resourcestypes)}`
range-resource-keyword=`${endpoints.resourceskeywords || (endpoints.get && endpoints.get.resourceskeywords)}`
range-resource-circle=`${endpoints.circles || (endpoints.get && endpoints.get.circles)}`
upload-dir=`${endpoints.uploads || (endpoints.get && endpoints.get.uploads)}`
id-prefix='default'
)

View File

@ -1,71 +0,0 @@
include templates/hubl-groups.pug
.content-box.with-form.user-profile__container
.section.user-bio
solid-display.avatar-display(
bind-user=''
fields='account.picture'
label-account.picture=''
widget-account.picture='solid-display-img'
)
solid-display.name-diplay(
bind-user=''
fields='user-name-groups(name, groups), username'
class-name='name'
label-groups=''
multiple-groups=''
widget-groups='hubl-groups-name'
class-username='username'
)
solid-form.info-form(
bind-user=''
fields='profile.bio, inline-1(profile.city, email), inline-2(profile.phone, profile.website), inline-3(profile.available), account.picture, instruction'
class-profile.bio='form-label is-light'
label-profile.bio='short description'
class-profile.city='form-label is-light'
label-profile.city='your cell'
class-email='form-label is-light'
class-profile.phone='form-label is-light'
label-profile.phone='phone'
class-profile.website='form-label is-light'
label-profile.website='your website'
class-profile.available='form-label is-light'
label-profile.available='your availability'
class-account.picture='form-label is-light'
label-account.picture='your picture'
widget-instruction='hubl-instruction'
)
.section.user-skills
solid-form(
bind-user=''
range-skills=`${endpoints.skills || endpoints.get.skills}`
fields='skills'
class-skills='form-label is-dark'
label-skills='Your main skills (4 max.):'
multiple-skills='solid-multiple-select'
widget-skills='solid-form-auto-completion'
)
solid-widget(name='hubl-instruction')
template
span Show us your most beautiful smile
p Pictures help us to know ourselves and also to recognize ourselves, so don't be afraid to show your pretty face and avoid strange avatars.

View File

@ -0,0 +1,10 @@
document.addEventListener("keydown", function (e) {
/*
CTRL + K : Focus on the user search
Keycode 75
*/
if(e.ctrlKey && e.which == 75) {
document.querySelector('hubl-search-users > input').focus();
e.preventDefault();
}
});

View File

@ -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");
});
});
});

View File

@ -0,0 +1,19 @@
document.addEventListener("DOMContentLoaded", () => {
const Toast = Swal.mixin({
toast: true,
position: 'top',
showConfirmButton: false,
timer: 3000,
timerProgressBar: true,
didOpen: (toast) => {
toast.addEventListener('mouseenter', Swal.stopTimer)
toast.addEventListener('mouseleave', Swal.resumeTimer)
}
})
document.addEventListener("save", () => {
Toast.fire({
icon: 'success',
title: 'Succès!'
})
});
});

View File

@ -1,7 +1,7 @@
document.addEventListener("DOMContentLoaded", function () {
window.addEventListener('newMessage', event => {
let jid = event.detail.jid;
Array.from(document.querySelectorAll('[data-jabberID="'+jid+'"]')).forEach(el => {
Array.from(document.querySelectorAll('[data-jabberID="' + jid + '"]')).forEach(el => {
el.parentElement.parentElement.classList.add('unread');
});
});
@ -9,7 +9,12 @@ document.addEventListener("DOMContentLoaded", function () {
window.addEventListener('read', (event) => {
if (event.detail && event.detail.resource && event.detail.resource['@id']) {
const badge = document.querySelector(`solid-badge[data-src="${event.detail.resource['@id']}"]`);
if (badge) badge.parentElement.parentElement.classList.remove('unread');
if (badge) {
badge.parentElement.parentElement.classList.remove('unread');
const project = badge.parentElement.parentElement.querySelector('.unread');
if (project) project.classList.remove('unread');
}
}
});
});

View File

@ -11,7 +11,6 @@
font-family: 'Facit';
src: url('../fonts/FacitRegular.eot');
src: url('../fonts/FacitRegular.eot') format('embedded-opentype'),
url('../fonts/FacitRegular.woff2') format('woff2'),
url('../fonts/FacitRegular.woff') format('woff'),
url('../fonts/FacitRegular.ttf') format('truetype'),
url('../fonts/FacitRegular.svg#FacitRegular') format('svg');
@ -21,7 +20,6 @@
font-family: 'Facit';
src: url('../fonts/FacitBold.eot');
src: url('../fonts/FacitBold.eot') format('embedded-opentype'),
url('../fonts/FacitBold.woff2') format('woff2'),
url('../fonts/FacitBold.woff') format('woff'),
url('../fonts/FacitBold.ttf') format('truetype'),
url('../fonts/FacitBold.svg#FacitBold') format('svg');

View File

@ -102,6 +102,8 @@
--color-select-list: var(--color-secondary);
--color-select-add-button: var(--color-button-secondary);
--color-select-add-button-background: var(--color-button-white);
--color-add-button-background: var(--color-button-secondary);
--color-add-button: var(--color-white);
--color-label-light: var(--color-grey-6);

View File

@ -1,6 +1,4 @@
#about{
$main-color: rgb(236, 94, 92);
$second-color: white;
h2,h3{
text-transform: uppercase;
}
@ -37,10 +35,10 @@
}
.main-cta{
background: $second-color none repeat scroll 0% 0%;
border: 1px solid $main-color;
background: var(--color-white) none repeat scroll 0% 0%;
border: 1px solid var(--color-primary);
border-radius: 55px;
color: $main-color;
color: var(--color-primary);
cursor: pointer;
font-weight: bold;
text-transform: uppercase;
@ -51,8 +49,8 @@
}
.main-cta:hover{
background: $main-color none repeat scroll 0% 0%;
border : 1px solid $second-color;
color: $second-color;
background: var(--color-primary) none repeat scroll 0% 0%;
border : 1px solid var(--color-primary);
color: var(--color-white);
}
}

View File

@ -1,3 +1,9 @@
solid-form {
[data-id="error"] {
display: none !important; // Hide the default core message, english only with a weird message
}
}
.form form {
display: block;
height: fit-content;
@ -7,6 +13,7 @@
@include breakpoint(lg) {
display: flex;
flex-direction: column;
margin-bottom: 0;
transition: all .3s ease;
}
}
@ -31,7 +38,7 @@
left: 0;
margin: 0;
margin-left: auto;
margin-top: 109px;
margin-top: 32px;
position: relative;
width: auto;
}
@ -40,16 +47,14 @@
.form-label {
/*flex: 1 1 auto;*/
label {
display: flex;
flex-direction: column; /* To align label and input vertically */
font-weight: 600;
margin-bottom: 0.8rem;
margin-top: 1.8rem;
text-transform: uppercase;
}
display: flex;
flex-direction: column; /* To align label and input vertically */
font-weight: 600;
margin-bottom: 0.8rem;
margin-top: 1.8rem;
text-transform: uppercase;
&.is-light label {
&.is-light {
color: var(--color-label-light);
}
}
@ -129,11 +134,14 @@ textarea {
/* WIDGETS SIB (let in .content-box to override default styles) */
solid-form-auto-completion,
solid-form-dropdown-autocompletion,
solid-form-dropdown-autocompletion-label,
solid-form-multipleselect-autocompletion-label,
hubl-status {
.ss-main {
font-weight: normal;
margin-top: 0.8rem;
text-transform: none;
@ -143,7 +151,6 @@ hubl-status {
border-radius: 0px;
color: var(--color-input-text);
font-weight: normal;
margin-top: 0.8rem;
min-height: 4.6rem;
padding-left: 1.2rem;
@ -178,6 +185,7 @@ hubl-status {
display: flex;
flex-direction: row;
margin-bottom: 2.6rem;
margin-top: 1.8rem;
}
label {
@ -198,6 +206,7 @@ hubl-status {
width: 100%;
@include breakpoint(lg) {
height: 32px;
margin: auto 0 auto 2.2rem;
width: auto;
}
@ -287,13 +296,13 @@ solid-form-file {
}
}
/*solid-multiple-select {
/*solid-form-multipleselect {
&.select-skills .ss-values .ss-disabled::before {
content: "Select skills";
}
solid-form-auto-completion > label {
solid-form-dropdown-autocompletion-label > label {
display: flex;
flex-direction: column;
@ -377,7 +386,8 @@ hubl-member-form {
margin-bottom: 1rem;
}
solid-form-auto-completion {
solid-form-dropdown-autocompletion-label,
solid-form-multipleselect-autocompletion-label {
float: left;
}

View File

@ -26,6 +26,34 @@
}
}
.header-left {
flex-grow: 1;
position: relative;
.logo {
display: inline-block;
}
.beta-tag {
display: none;
@include breakpoint(lg) {
display: inline-block;
font-size: 1.4rem;
font-weight: 600;
line-height: 19px;
letter-spacing: 0.19px;
padding: 3px 13px 3px 15px;
border-radius: 3px;
background: var(--color-primary);
color: var(--color-white);
position: absolute;
top: -9px;
left: 267px;
}
}
}
>*:not(:first-child) {
margin-left: 2rem;
@ -34,15 +62,15 @@
}
}
.logo {
flex: 1 0 0;
align-items: stretch;
}
/* To remove the place taken by this element */
/* Fix: to remove the place taken by these elements */
solid-widget[name='hubl-user-avatar'] {
display: contents;
}
solid-notifications-template[data-rdf-type='hd:circle'],
solid-notifications-template[data-rdf-type='foaf:user'] {
position: absolute;
}
}
/* General styling for both notification and user's panel */

View File

@ -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;
@ -463,6 +568,10 @@ h5 {
text-align: center;
}
.block {
display: block;
}
.flex {
display: flex;
}
@ -595,6 +704,12 @@ a,
border-radius: 50%;
font-size: 1.8rem;
padding: 1rem;
height: 42px;
width: 42px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto;
}
&.button-link {
@ -637,6 +752,29 @@ a,
}
}
&.button-disabled{
cursor: not-allowed;
background-color: var(--color-white);
*,
& {
color: var(--color-grey-3);
}
&.bordered {
border: 1px solid var(--color-grey-3);
}
&:hover {
background-color: var(--color-white);
*,
& {
color: var(--color-grey-3);
}
}
}
&.button-secondary {
background-color: var(--color-white);
@ -701,6 +839,29 @@ a,
}
}
&.button-disabled{
cursor: not-allowed;
background-color: var(--color-grey-3);
*,
& {
color: var(--color-white);
}
&.bordered {
border: 1px solid var(--color-white);
}
&:hover {
background-color: var(--color-grey-3);
*,
& {
color: var(--color-white);
}
}
}
&.button-secondary {
background-color: var(--color-secondary);

View File

@ -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);
}
}
}
}
@ -98,7 +106,7 @@
solid-set-default[name='project'] {
flex: 3;
.project-customer,
.project-name {
box-sizing: border-box;
@ -150,7 +158,7 @@
.message-tab>div>solid-display>div>solid-display-div>div {
box-sizing: border-box;
width: calc(80vw - 96px); /*96px = padding of the element + width and margin of counter */
@include breakpoint(lg) {
width: 150px;
}
@ -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,11 +235,11 @@
}
>div {
color: var(--color-grey-6);
color: var(--color-white);
cursor: pointer;
>hubl-menu-fix-url-circle>solid-display>div,
>hubl-menu-fix-url-project>solid-display>div {
>hubl-menu-fix-url-circle>solid-link>solid-display>div,
>hubl-menu-fix-url-project>solid-link>solid-display>div {
padding: 1rem 1rem 1rem 3rem;
}
}
@ -242,8 +250,8 @@
}
&>solid-display[active]>div,
&>solid-display>div>hubl-menu-fix-url-circle>solid-display[active]>div,
&>solid-display>div>hubl-menu-fix-url-project>solid-display[active]>div {
&>solid-display>div>hubl-menu-fix-url-circle>solid-link>solid-display[active]>div,
&>solid-display>div>hubl-menu-fix-url-project>solid-link>solid-display[active]>div {
background-color: var(--color-menu-highlight-primary);
color: var(--color-menu-text-active);
font-weight: bold;
@ -258,8 +266,8 @@
}
>solid-display>div>solid-display>div,
>solid-display>div>solid-display>div>hubl-menu-fix-url-circle>solid-display>div,
>solid-display>div>solid-display>div>hubl-menu-fix-url-project>solid-display>div {
>solid-display>div>solid-display>div>hubl-menu-fix-url-circle>solid-link>solid-display>div,
>solid-display>div>solid-display>div>hubl-menu-fix-url-project>solid-link>solid-display>div {
display: flex;
justify-content: space-between;
}

View File

@ -46,13 +46,14 @@
&>* {
border-bottom: 1px solid var(--color-table-border);
display: table-cell;
text-align: center;
vertical-align: middle;
}
}
}
&>solid-multiple {
display: contents;
/*&>solid-multiple {
display: contents;*/
&>div {
display: contents;
@ -68,7 +69,7 @@
}
}
}
}
/*}*/
}
}
}
@ -117,6 +118,14 @@
width: 280px;
}
.w450 {
width: 450px;
}
.w370 {
width: 370px;
}
.w230 {
width: 230px;
}
@ -152,6 +161,10 @@
.desktop-btn-margin__left;
}
}
&.is-spaced {
padding: 0.8rem 2.2rem;
}
}
.cell-with-name {
@ -163,23 +176,11 @@
/* Styles of elements inside cells */
.user-thumb>div,
[name='user-thumb'] {
vertical-align: middle;
text-align: left;
@extend %user-thumb__grid;
padding: 0 2.2rem;
>.user-thumb__picture {
@extend .user-thumb__picture;
}
>[name='sup'] {
@extend %user-thumb__grid-sup;
}
>[name='sub'] {
@extend %user-thumb__grid-inf;
.table {
.user-thumb.is-spaced,
[name='user-thumb'] {
padding: 0.8rem 2.2rem;
}
}

View File

@ -35,9 +35,26 @@
color: var(--color-user-thumb-name);
font-weight: 600;
margin-right: 1rem;
text-align: left;
}
.user-thumb__send {
position: relative;
bottom: 7px;
left: -5px;
solid-link {
@include icon('speech');
&::before {
display: inline-block;
color: var(--color-primary);
}
}
}
.user-thumb__admin:not(:empty) {
display: block !important;
@extend %tag-admin;
}
@ -49,8 +66,33 @@
content: '@';
}
}
solid-multiple[name="user.communities"] {
* {
display: contents;
}
solid-display-value {
&:after {
content: ",";
margin-right: 5px;
}
display: inline-block!important;
}
>solid-display>div>solid-display:last-child>div>solid-display-value:after {
display: none;
}
>solid-display {
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: calc(50% - 22px - 0.5rem);
line-height: 22px;
}
.user-thumb__city:not(:empty) {
@include mdi('atom');
align-items: center;
display: flex;
@ -75,10 +117,16 @@
margin-right: 0.50rem;
}
}
.user-thumb[name="classGroup"] {
display: block;
margin-top: 15px;
}
/* Apply the grids to all user-thumbs */
.user-thumb>div,
.user-thumb>[name='classGrid'],
[name='user-thumb'] {
@extend %user-thumb__grid;
>[name='sup'] {
@ -89,9 +137,3 @@
@extend %user-thumb__grid-inf;
}
}
/* Add extra spaces to user-thumbs that are inside a table */
.user-thumb.is-spaced>div,
[name='user-thumb'] {
padding: 0.8rem 2.2rem;
}

View File

@ -3,4 +3,5 @@
@import 'filters';
@import 'sidebar';
@import 'skills';
@import 'tags';
@import 'tags';
@import 'project-edit-picture';

View File

@ -37,9 +37,9 @@
}
}
solid-conversation.conversation {
sib-conversation.conversation {
.solid-conversation {
.sib-conversation {
font-family: Open Sans;
[name='conversation-wrapper'] {
@ -74,7 +74,7 @@
solid-ac-checker {
border-top: 1px solid $color-210-17-91;
solid-form-textarea {
solid-form-textarea-label {
>label div {
color: $color-210-5-56;

View File

@ -176,7 +176,7 @@ $icons: (
control-pause: '\e072',
control-forward: '\e073',
control-end: '\e074',
calender: '\e075',
calendar: '\e075',
bulb: '\e076',
chart: '\e077',
arrow-up-circle: '\e078',

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -8,6 +8,10 @@
&.with-padding {
padding: 1.3rem;
@include breakpoint(lg) {
padding: 2.5rem;
}
}
}
@ -82,7 +86,8 @@
>solid-route {
&[name*='circle'],
&[name*='project'] {
&[name*='project'],
&[name*='communities'] {
>li::before {
font-size: 4rem;
@ -116,16 +121,8 @@
@include ci('file');
}
&[name='admin-users']>li::before {
background-color: var(--color-secondary);
content: '';
display: inline-block;
height: 40px;
mask: url('/images/add-user.svg') 1% 1% / 1px 1px no-repeat;
mask-size: cover;
-webkit-mask: url('/images/add-user.svg') 1% 1% / 1px 1px no-repeat;
-webkit-mask-size: cover;
width: 40px;
&[name='admin-communities']>li {
@include ci('networking');
}
&[name='admin-circles']>li {

View File

@ -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';
@ -20,6 +21,8 @@
@import 'layout/members/index';
@import 'layout/job-offers/index';
@import 'layout/user/index';
@import 'layout/events/index';
@import 'layout/events/index';
@import 'layout/resources/index';
@import 'layout/dashboard/index';
}
@import 'layout/polls/index';
}

View File

@ -1,67 +1,84 @@
#events {
solid-event section {
max-width: 1400px;
margin: auto;
}
#events,
#circle-events {
width: 100%;
font-family: "Facit";
font-weight: 400;
color: $color-0-0-22;
sib-event {
color: var(--color-main-text);
solid-event {
solid-display div {
max-width: 1110px;
solid-display {
margin: 0 0 20px 40px;
}
}
.red-button,
.event-type {
background-color: $color-357-67-45;
background-color: var(--color-add-button-background);
}
.black-button {
background-color: $color-0-0-22;
background-color: var(--highlight-font-color);
margin-left: 10%;
}
.event-type,
.event-place-name {
font-weight: 700;
}
#listevents [name="name"],
solid-display-link-event .mdi::before {
color: $color-357-67-45;
#listevents,
#circle-listevents {
[name="name"],
event-display-link-event .mdi::before {
color: var(--color-primary);
}
}
.event-place-name,
.nextevent-startdate,
solid-display-link-event {
color: $color-0-0-22;
event-display-link-event {
color: var(--highlight-font-color);
}
.sib-event {
.solid-event {
font-family: "Facit";
font-weight: 400;
.page-title {
font-family: "RefrigeratorDelxW01Bold";
font-size: 3.2rem;
line-height: 3.8rem;
color: $color-203-87-19;
font-size: 3.2rem;
line-height: 3.8rem;
color: var(--color-primary);
}
}
#listevents {
.newtype .button{
#default-listevents,
#circles-listevents {
.newtype .button {
font-size: 1.2rem;
width: max-content;
height: max-content;
padding: 5px 20px;
color: $color-203-87-19;
color: var(--color-primary);
}
solid-form solid-form-dropdown{
label div {
height: 2.5rem;
}
&::before {
font-family: "RefrigeratorDelxW01Bold";
font-size: 2.4rem;
line-height: 29px;
color: $color-203-87-19;
top: -40px;
content: "Research an event";
.headline h2 {
float: left;
margin-top: 35px;
color: var(--color-primary);
text-transform: none;
font-family: "RefrigeratorDelxW01Bold";
font-size: 2.4rem;
}
solid-form {
solid-form-dropdown-label {
label {
height: 2.5rem;
}
}
}
[name="name"] {
font-family: "RefrigeratorDelxW01Bold";
font-size: 2.2rem;
font-size: 1.8rem;
line-height: 2.6rem;
letter-spacing: 0.32px;
color: $color-203-87-19;
color: var(--color-primary);
padding: 5px;
max-width: 250px;
margin: 5px auto;
@ -72,34 +89,97 @@
width: max-content;
height: max-content;
}
solid-display-location-events {
event-display-location-events {
padding: 5px;
}
}
#eventdetail {
.eventdetail {
solid-display div {
display: block;
}
.mdi::before {
margin: 0 5px 0 20px;
}
[name="infotext"] {
text-align: left;
}
[name="name"] {
font-family: "RefrigeratorDelxW01Bold";
font-size: 3.2rem;
line-height: 3.8rem;
color: $color-203-87-19;
color: var(--color-primary);
display: block;
}
solid-display div .event-type {
color: var(--color-primary);
.event-type {
width: max-content;
padding: 5px 20px;
padding: 5px 20px;
font-size: 1.1rem;
line-height: 1.3rem;
height: 13px;
margin: 10px 20px;
}
[name="longDescription"] p {
font-size: 1.6rem;
line-height: 2.6rem;
}
solid-display-link-event a {
event-display-link-event a {
font-size: 1.6rem;
}
}
#newevent input[type="submit"],
#newtype input[type="submit"],
.newevent label div,
.newevent solid-form-file-label div label {
line-height: 2.2rem;
text-transform: uppercase;
color: var(--form-title);
font-size: 13px;
font-weight: 600;
font-family: Open sans;
}
.newevent select,
.newevent textarea,
.newevent input,
.newtype input {
background-color: var(--form-inputs-background);
}
.newevent input[type="submit"],
.newtype input[type="submit"],
button {
width: max-content;
padding: 5px 20px;
padding: 5px 20px;
background-color: #3C3F57;
}
.newevent input[type="file"] {
background-color: transparent;
}
}
@media (max-width: 991px) {
#listevents {
margin-top: 65px;
}
}
}
#events {
background-color: #f0f3f6;
}
#circle-events solid-event .events solid-form solid-form-dropdown-label select {
background-color: #f0f3f6;
}
.with-sidebar nav>solid-router>ul [name="circle-events"] {
li::before {
content: '';
height: 40px;
width: 40px;
mask: url('/images/appointment.svg') center no-repeat;
mask-size: contain;
-webkit-mask: url('/images/appointment.svg') center no-repeat;
-webkit-mask-size: contain;
background-color: var(--color-right-menu-text);
}
&[active] li::before {
background-color: var(--color-right-menu-active-text);
}
}

View File

@ -180,7 +180,7 @@ solid-job-board {
}
}
.solid-conversation,
.sib-conversation,
.conversation > div {
display: flex;
flex-direction: column-reverse;

View File

@ -0,0 +1 @@
@import 'polls.scss';

View File

@ -0,0 +1,550 @@
solid-poll > div {
max-width: 1400px;
margin: auto;
}
#polls,
#circle-polls {
h2 {
text-transform: inherit;
}
/*style of poll listing*/
#default-pollListing, #circles-pollListing {
margin: auto;
.headline {
h2 {
font-family: "RefrigeratorDelxW01Bold";
font-size: 2.4rem;
color: var(--color-primary);
float: left;
margin-top: 5px;
}
solid-link {
display:flex;
justify-content: end;
margin-top: 30px;
margin-right: 70px;
z-index: 1;
position: relative;
.add-poll {
background-color: var(--color-add-button-background);
color: var(--color-add-button);
box-shadow: 0px 0px 4px 1px #CACACA;
text-transform: uppercase;
font-weight: 700;
line-height: 20px;
&::before {
font-family: "material-design-icons";
content: "\F419";
width: 1em;
display: inline-block;
margin: 0 5px 0 10px;
font-size: 2rem;
vertical-align: middle;
font-weight: 400;
}
}
}
}
.all-polls {
solid-form {
display: block;
border-bottom: solid 1px #cacaca;
height: 90px;
margin: 30px 25px 25px;
max-width: 85%;
solid-form-dropdown-label label {
font-size: 1.4rem;
font-family: "Facit";
}
solid-form-placeholder-text {
margin-left: 15px;
input {
border-radius: 4px;
}
}
}
> div {
display: flex;
flex-wrap: wrap;
justify-content: left;
height: 100%;
max-width: 1100px;
margin: auto;
> solid-display {
width: 320px;
height: 550px;
margin: 0 0 20px 40px;
>div:first-of-type {
background-color: #fff;
height: 100%;
-webkit-box-shadow: 0px 0px 4px 1px #CACACA;
box-shadow: 0px 0px 4px 1px #CACACA;
*[name="body"] {
/*size of tags of poll card*/
poll-display-votetags {
>div {
width: 64px;
height: 24px;
p {
font-size: 11px;
}
}
}
}
img {
width: 320px;
height: 230px;
object-fit: cover;
}
[name="title"] {
font-family: "RefrigeratorDelxW01Bold";
color: var(--color-primary);
font-size: 1.8rem;
font-weight: 600;
text-transform: uppercase;
height: 30px;
width: 100%;
display: inline-block;
}
[name="hostingOrganisation"],
[name="endDate"] {
color: var(--highlight-font-color);
font-family: Facit;
font-size: 14px;
letter-spacing: 0;
line-height: 22px;
}
[name="hostingOrganisation"] {
&::before {
content: '\e037';
font-family: 'simple-line-icons';
color: var(--color-secondary);
height: 22px;
width: 24px;
font-size: 16px;
letter-spacing: 0;
line-height: 22px;
display: inline-block;
text-align: center;
}
}
[name="dateLine"] {
display: flex;
flex-direction: row;
margin-top: 10px;
div [name="dateImage"]::before {
display: inline-block;
font: normal normal normal 24px/1 "Material Design Icons";
content: "\F6AF";
color: var(--color-secondary);
height: 22px;
width: 24px;
font-size: 20px;
line-height: 22px;
text-align: center;
}
}
[name="shortDescription"] {
color: var(--color-main-text);
font-family: Facit;
font-size: 14px;
letter-spacing: 0;
line-height: 22px;
text-align: center;
max-height: 100%;
}
}
}
}
}
}
/*personnalise css on poll page*/
#default-pollPage, #circles-pollPage {
width: 90%;
max-width: 1110px;
margin: auto;
h1,
h2 {
font-family: "RefrigeratorDelxW01Bold";;
}
h1 {
font-size: 3.2rem;
line-height: 3.8rem;
margin: 20px auto;
}
h2 {
font-size: 26px;
line-height: 31px;
}
.vote-debate-content .active-tab,
.vote-debate-content .border-content {
background-color: white;
}
solid-display.topline {
>div:first-of-type {
*[name="right"] {
poll-display-votetags {
>div {
width: 64px;
height: 24px;
p {
font-size: 11px;
}
}
}
}
}
}
[name="hostingOrganisation"],
[name="dateLine"] {
color: var(--highlight-font-color);
font-family: Facit;
font-size: 16px;
font-weight: bold;
}
[name="dateLine"] solid-set-default {
display: flex;
margin-top: 7px;
solid-display-value, solid-display-date-value {
margin-left: 7px;
}
}
[name="hostingOrganisation"] {
margin-left: 0;
[name="hostingOrganisation"]::before {
content: '\e037';
font-family: "simple-line-icons";
font-weight: 400;
color: var(--color-secondary);
margin-right: 10px;
font-size: 16px;
}
}
div [name="dateImage"]::before {
font-family: "Material Design Icons";
font-weight: 400;
content: "\F6AF";
color: var(--color-secondary);
font-size: 20px;
}
[name="shortDescription"],
[name="longDescription"] {
margin: 20px 0;
color: var(--color-main-text);
font-family: Facit;
}
[name="shortDescription"] {
margin: 20px 0;
font-size: 18px;
line-height: 28px;
}
[name="longDescription"] {
font-size: 16px;
line-height: 26px;
}
.vote-section,
.share-vote {
font-family: Facit;
padding: 15px 25px;
}
.vote-tab-content h3::before {
font-family: "Material Design Icons";
font-weight: 400;
font-size: 20px;
margin-right: 10px;
color: var(--highlight-font-color);
}
.vote-section > h3::before {
content:"\F004";
}
#totalVotesDisplay::before,
.share-vote h3::before {
content: "\F00E";
}
.vote-section > h3 {
margin-top: 15px;
}
#poll-votes-values solid-display > div > solid-set-default,
[name="chosenOption"] label {
margin-top: 10px;
}
#poll-votes-values solid-display > div [name="progressBar"] {
margin-top: 5px;
}
div[name="progressBar"] > div,
div[name="progressBar"] div .progressBarValue {
margin: 0;
}
.poll-votes-form input[type="submit"] {
height: 38px;
border-radius: 19px;
box-shadow: 0 0 7px 0 rgba(0,0,0,0.15);
}
.poll-votes-form input[type="submit"]:disabled {
opacity: 0.3;
}
.unavailablePoll {
font-style: italic;
}
.progressBarValue {
height: 25px;
line-height: 25px;
padding-left: 5px;
}
.send-share,
.back-to-list {
background-color: var(--highlight-font-color);
padding: 5px 25px;
font-size: 1.4rem;
&::before {
font-family: "Material Design Icons";
font-weight: 400;
font-size: 20px;
vertical-align: middle;
color: white;
}
}
.send-share {
a {
font-size: 1.4rem;
line-height: 23px;
margin-left: 5px;
}
&::before {
content: "\F48A";
}
}
.vote-debate-content .border-content.padded {
padding: 0;
.debate-tab-content sib-conversation {
width: 100%;
.sib-conversation {
.conversation-item {
position: relative;
[name="conversation-subhead"] {
position: absolute;
top: 4px;
left: 200px;
font-size: 1.3rem;
color: #aaa;
}
[name="conversation-author"] {
font-size: 1.3rem;
}
}
.conversation-form {
border-top: 1px solid #ddd !important;
textarea {
background-color: transparent;
border: none;
font-size: 1.4rem;
}
}
input[type="submit"] {
text-indent: -999px;
width: 30px;
background: url(../images/send.png) no-repeat center;
background-size: auto;
background-size: contain;
border: none;
position: absolute;
right: 15px;
top: calc(50% - 11px);
}
}
}
}
.poll-footer {
padding: 20px 0 40px;
.back-to-list {
margin-left: 10%;
&::before {
content: "\F04D";
}
}
.share-poll {
visibility: hidden;
}
}
}
}
#polls, #default-polls, #circles-polls {
.views-container {
background-color: #f0f3f6;;
}
#circles-add-survey, #default-add-survey {
background-color: white;
padding: 50px 0;
margin: -20px auto;
h2 {
font-family: "RefrigeratorDelxW01Bold";
font-size: 3.2rem;
line-height: 3.8rem;
color: var(--title-font-color);
margin-bottom: 0;
}
p {
margin-top: 10px;
color: var(--color-main-text);
font-family: Facit;
font-size: 16px;
}
form {
padding: 25px 0;
width: 1000px;
max-width: 90%;
display: block;
input {
height: 3rem;
}
textarea {
height: 110px;
}
solid-form-label-text,
solid-form-textarea,
solid-form-label-textarea,
solid-form-textarea-label {
display: block;
margin: 15px 0;
padding: 0;
}
label > div, solid-form-file-image > div label, solid-form-dropdown-autocompletion[name="tags"] > label::before {
margin-bottom: 5px;
margin-top: 20px;
color: var(--form-title);
font-size: 13px;
font-weight: 600;
text-transform: uppercase;
}
solid-form-file-image > div {
margin-bottom: 15px;
button {
width: 20px;
}
input {
align-self: center;
}
label {
margin-bottom: 15px;
}
img {
margin-right: 10px;
max-width: 250px;
}
}
solid-form-label-text[name="title"] {
margin-bottom: 5px;
}
.form-tips {
font-family: Facit;
}
.h3-like {
font-family: "RefrigeratorDelxW01Bold";
}
solid-multiple-form[name="pollOptions"] {
div {
margin-bottom: 10px;
div {
display: flex;
width: 100%;
justify-content: space-between;
poll-custom-choice {
width: calc(100% - 45px);
solid-form-label-text[name="name"] {
margin-bottom: 0;
}
}
button {
border: 1px solid var(--color-primary);
background-color: transparent;
border-radius: 15px;
font-size: 24px;
color: var(--color-primary);
padding: 0;
height: 30px;
width: 30px;
align-self: flex-end;
margin-bottom: 5px;
}
}
}
> button {
height: 28px;
line-height: 14px;
text-transform: uppercase;
font-family: Facit;
padding: 0 30px;
font-weight: bold;
font-size: 13px;
margin: 10px 0;
color: var(--color-primary);
&::before {
content: "\F419";
font-family: Material Design Icons;
margin-right: 7px;
font-size: 2rem;
vertical-align: middle;
text-decoration: none;
}
}
}
.ss-main {
margin-top: 10px;
.ss-multi-selected .ss-values .ss-value {
border-radius: 14px;
background-color: var(--color-secondary);
padding: 5px 10px;
font-size: 11px;
}
}
input[type="submit"] {
font-size: 1.4rem;
margin: 25px 0;
float: right;
width: max-content;
padding: 5px 20px;
display: block;
text-transform: uppercase;
}
}
.poll-footer {
.back-to-list {
background-color: var(--highlight-font-color);
padding: 5px 25px;
font-size: 1.4rem;
margin-left: 10%;
border-radius: 15px;
color: white;
&::before {
font-family: "Material Design Icons";
font-weight: 400;
font-size: 20px;
vertical-align: middle;
color: white;
content: "\F04D";
}
}
}
}
}
#circle-polls #circles-pollListing .all-polls solid-form solid-form-placeholder-text input {
background-color: #f0f3f6;
}
.with-sidebar nav>solid-router>ul [name="circle-polls"] {
li::before {
content: '';
height: 40px;
width: 40px;
mask: url('/images/vote.svg') center no-repeat;
mask-size: contain;
-webkit-mask: url('/images/vote.svg') center no-repeat;
-webkit-mask-size: contain;
background-color: var(--color-right-menu-text);
}
&[active] li::before {
background-color: var(--color-right-menu-active-text);
}
}

View File

@ -0,0 +1 @@
@import 'resources.scss';

View File

@ -0,0 +1,156 @@
#resources,
#circle-resources {
width: 100%;
font-family: "Facit";
font-weight: 400;
color: var(--content-font-color);
solid-resource {
solid-display div {
max-width: 1110px;
solid-display {
margin: 0 0 20px 40px;
}
}
.solid-resource {
font-family: "Facit";
.page-title {
font-family: "RefrigeratorDelxW01Bold";
font-size: 3.2rem;
line-height: 3.8rem;
color: var(--color-primary);
}
.red-button {
background-color: var(--color-add-button-background);
}
.black-button {
background-color: var(--highlight-font-color);
margin-left: 10%;
}
.lnk-newresource {
margin-top: 30px;
margin-right: 70px;
z-index: 1;
position: relative;
}
.listresources .lnk-newkeyword {
top: 155px;
left: 220px;
.button.thin-button.mdi {
padding: 5px 20px;
}
}
.listresources {
.headline h2 {
float: left;
margin-top: 5px;
color: var(--color-primary);
text-transform: none;
font-family: "RefrigeratorDelxW01Bold";
font-size: 2.4rem;
}
solid-form {
select {
width: 150px;
}
}
}
.listresources {
.lnk-newkeyword .button {
font-size: 1.2rem;
width: max-content;
height: max-content;
padding: 10px 30px;
color: var(--color-primary);
}
solid-display solid-display {
[name="name"] {
font-family: "RefrigeratorDelxW01Bold";
color: var(--color-primary);
}
[name="link"] a, [name="document"] a {
width: 75%;
margin-bottom: 10px;
padding-left: 35px;
position: relative;
&::before {
position: absolute;
left: 0;
}
}
}
}
.resourcedetail {
background-color: transparent;
[name="name"] {
font-family: "RefrigeratorDelxW01Bold";
font-size: 3.2rem;
line-height: 3.8rem;
color: var(--color-primary);
}
[name="infotext"] {
justify-content: flex-start;
}
.sib-conversation {
background-color: white;
textarea {
background-color: transparent;
}
}
}
.newresource label div,
.newresource solid-form-file div label {
line-height: 2.2rem;
text-transform: uppercase;
color: var(--form-title);
font-size: 13px;
font-weight: 600;
font-family: Open sans;
}
.newresource select,
.newresource textarea,
.newresource input,
.newresource solid-multiple-select .ss-main .ss-multi-selected {
background-color: var(--form-inputs-background);
}
.newresource input[type="submit"] {
background-color: var(--form-submit-button);
}
.newresource input[type="file"] {
background-color: transparent;
}
.resource-tag {
font-family: Facilt;
font-weight: 600;
}
}
}
@media (max-width: 991px) {
.solid-resource {
margin-top: 65px;
}
}
}
#resources {
background-color: #f0f3f6;
}
#circle-resources .resources solid-form solid-form-dropdown select {
background-color: #f0f3f6;
}
.with-sidebar nav>solid-router>ul [name="circle-resources"] {
li::before {
content: '';
height: 40px;
width: 40px;
mask: url('/images/file.svg') center no-repeat;
mask-size: contain;
-webkit-mask: url('/images/file.svg') center no-repeat;
-webkit-mask-size: contain;
background-color: var(--color-right-menu-text);
}
&[active] li::before {
background-color: var(--color-right-menu-active-text);
}
}

View File

@ -1,20 +0,0 @@
include hubl-user-avatar.pug
solid-widget(name='hubl-circle-team-template')
template
solid-display.user-thumb.is-spaced(
data-src='${await value.user}'
fields='account.picture, sup(name, isadmin), sub(profile.city)'
value-isadmin='${await value.is_admin}'
class-account.picture='avatar user-thumb__picture'
class-name='user-thumb__name'
class-isadmin='user-thumb__admin'
class-profile.city='user-thumb__city'
widget-account.picture='hubl-user-avatar'
widget-isadmin='hubl-circle-user-admin'
)
solid-widget(name='hubl-circle-user-admin')
template ${(await value) != "false" ? "Administrateur" : ""}

View File

@ -1,22 +0,0 @@
include hubl-user-avatar.pug
solid-widget(name='hubl-project-team')
template
solid-display.user-thumb.is-spaced(
data-src='${await value}'
fields='user.account.picture, sup(user.name, isadmin), sub(user.profile.city, name)'
value-isadmin='${await value.is_admin}'
class-user.account.picture='avatar user-thumb__picture'
class-user.name='user-thumb__name'
class-isadmin='user-thumb__admin'
class-user.profile.city='user-thumb__city'
class-name='user-thumb__lead'
widget-user.account.picture='hubl-user-avatar'
widget-isadmin='hubl-project-user-admin'
)
solid-widget(name='hubl-project-user-admin')
template ${(await value) == "false" ? "" : "Administrateur"}

View File

@ -1,24 +1,34 @@
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'
required-status
required-name
required-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'
)

View File

@ -15,7 +15,7 @@
solid-widget(name='hubl-circle-owner')
template
solid-display.user-thumb.is-spaced(
solid-display.user-thumb.block.is-spaced(
data-src='${await value}'
fields='account.picture, sup(name), sub(username)'
@ -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
@ -66,10 +66,11 @@
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'
class-leaveButton='w280 border cell-with-buttons'
class-leaveButton='w280 border cell-with-buttons is-spaced'
action-leaveButton="joinButton"
widget-leaveButton="hubl-admin-circle-leave-button"
@ -101,17 +102,23 @@
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'
widget-owner='hubl-circle-owner'
class-members='w280 border cell-with-buttons'
class-members='w280 border cell-with-buttons is-spaced'
widget-members="hubl-admin-circle-join-button"
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

View File

@ -0,0 +1,53 @@
.content-box.flex.full-width.with-form
solid-router(default-route='admin-communities-list', hidden)
solid-route(name='admin-communities-list')
solid-route(name='admin-users-create', use-id)
div.content-box__header.flex.space-between
h1.without-margin Administration
button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle MENU
solid-widget(name='hubl-action-community')
template
solid-ac-checker(data-src="${value}", nested-field="members", permission='acl:Append')
solid-link(
class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus'
data-src="${value}"
next="admin-users-create"
) Inviter un nouvel utilisateur
solid-ac-checker(data-src="${value}", nested-field="members", no-permission='acl:Append')
div.button.text-bold.text-uppercase.button-disabled Membre, aucune permission
#admin-communities-list.content-box__height(hidden)
div.content-box__info.flex
div.admin-header.flex
h3 Communautés
.table-wrapper
.table
div.table-header.grey-color
div.w450 Nom
div.w370 Action
solid-display(
class='table-body'
bind-user
nested-field='communities'
fields='community.name, community'
loader-id='loader-admin-community'
class-community.name='w450 border cell-with-name'
class-community='w370 border cell-with-buttons is-spaced'
widget-community='hubl-action-community'
order-asc='community.name'
)
div#loader-admin-community.loader.loader-top
div
div
div
div
#admin-users-create.content-box__height(hidden)
include page-admin-users-create.pug

View File

@ -1,31 +1,28 @@
div.content-box__info.flex
solid-link(class="backlink right" next='admin-project-list') Retour
solid-widget(name="hubl-admin-project-add-user")
template
solid-form(
data-holder
fields='user, project'
range-user=`${endpoints.users || endpoints.get.users}`
value-project='${src}'
widget-project='solid-form-hidden'
naked
)
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)'
required-status
required-customer.name
required-name
required-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'
@ -36,15 +33,11 @@ div.content-box__info.flex
label-captain='Capitaine du projet*'
range-captain=`${endpoints.users || endpoints.get.users}`
class-captain='form-label is-light is-half-width'
widget-captain='solid-form-auto-completion'
widget-captain='solid-form-dropdown-autocompletion-label'
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'
)

View File

@ -46,7 +46,7 @@
solid-widget(name='hubl-project-captain')
template
solid-display.user-thumb.is-spaced(
solid-display.user-thumb.block.is-spaced(
data-src='${await value}'
fields='account.picture, sup(name), sub(username)'
@ -82,11 +82,12 @@
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'
class-project.captain='w280 cell border cell-with-id-card'
class-leaveButton='w230 cell border cell-with-buttons'
class-leaveButton='w230 cell border cell-with-buttons is-spaced'
action-leaveButton="joinButton"
widget-leaveButton="hubl-admin-project-leave-button"
@ -121,11 +122,12 @@
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'
class-captain='w280 cell border cell-with-id-card'
class-joinButton='w230 cell border cell-with-buttons'
class-joinButton='w230 cell border cell-with-buttons is-spaced'
action-joinButton="joinButton" # Workaround: I need members two times
widget-joinButton="hubl-admin-project-join-button"
@ -136,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

View File

@ -1,27 +1,63 @@
div.content-box__info.flex
solid-link(class='backlink right', next='admin-users-list') Retour
solid-link(class='backlink right', next='admin-communities-list') Retour
h1.centered Ajouter un utilisateur à la plateforme
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)'
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'
label-first_name='Prénom *'
label-last_name='Nom *'
label-username='Nom d\'utilisateur *'
label-email='E-mail *'
value-password=''
widget-password='solid-form-hidden'
next='admin-users-list'
submit-button='Enregistrer'
solid-display.h1-like.centered(
bind-resources
fields='text, name'
value-text="Inviter un utilisateur à "
loader-id='loader-users-title'
)
div#loader-users-title.loader.loader
div
div
div
div
div#loader-users-create.loader.loader-top
div
div
div
div
solid-widget(name='hubl-username-field')
template
label Nom d'utilisateur*
input(type="text" title='Caractères alphanumérique uniquement' pattern="[a-zA-Z0-9]+" label="Nom d'utilisateur *" name="username" required value="\${value}" data-holder)
solid-widget(name='hubl-email-field')
template
label E-mail *
input(type="email" label="E-mail *" name="email" required value="\${value}" data-holder)
solid-form.form.button-register#selected-community(
bind-resources
nested-field='members'
fields='line-1(user.first_name, user.last_name), line-2(user.username, user.email), user.password'
required-user.first_name
required-user.last_name
required-user.username
required-user.email
loader-id='loader-users-create'
class-user.first_name='form-label is-light is-half-width input-text-like'
class-user.last_name='form-label is-light is-half-width input-text-like'
class-user.username='form-label is-light is-half-width input-text-like'
class-user.email='form-label is-light is-half-width input-text-like'
label-user.first_name='Prénom *'
label-user.last_name='Nom *'
label-user.username='Nom d\'utilisateur *'
label-user.email='E-mail *'
value-user.password=''
widget-user.password='solid-form-hidden'
widget-user.username='hubl-username-field'
widget-user.email='hubl-email-field'
next='admin-communities-list'
submit-button='Inviter'
)

View File

@ -1,27 +0,0 @@
div.content-box__info.flex
solid-link(class='backlink right', next='admin-users-list') Retour
h1.centered
span Modifier un utilisateur
solid-display(
bind-resources=''
fields='name'
)
solid-form.form.button-register(
bind-resources=''
fields='line-1(first_name, last_name), line-2(email)'
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-email='form-label is-light is-full-width input-text-like'
label-first_name='Prénom *'
label-last_name='Nom *'
label-email='E-mail *'
next='admin-user-list'
submit-button='Enregistrer'
)

View File

@ -1,61 +0,0 @@
.content-box.flex.full-width.with-form
solid-router(default-route='admin-users-list', hidden)
solid-route(name='admin-users-list')
solid-route(name='admin-users-create')
solid-route(name='admin-users-edit')
div.content-box__header.flex.space-between
h1.without-margin Administration
button.mobile-sidebar-button.jsMobileSidebarOpenButton.icon-arrow-left-circle MENU
solid-widget(name='hubl-solid-action-custom')
template
solid-ac-checker(data-src="${src}", permission='acl:Write')
solid-link(
class='button rounded reversed button-primary bordered icon-pencil'
data-src="${src}"
next="${value}"
)
#admin-users-list.content-box__height(hidden)
div.content-box__info.flex
div.admin-header.flex
h3 Utilisateurs
solid-ac-checker(data-src=`${endpoints.users || endpoints.post.users}`, permission='acl:Append')
solid-link(
class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus'
next='admin-users-create'
) Ajouter un utilisateur
.table-wrapper
.table
div.table-header.grey-color
div.w280 Nom
div.w70
solid-display(
class='table-body'
data-src=`${endpoints.users || endpoints.get.users}`
fields='cell-1(user-thumb(account.picture, sup(name), sub(username))), actions'
class-account.picture='avatar user-thumb__picture'
class-name='user-thumb__name'
class-username='user-thumb__username'
class-profile.city='user-thumb__city'
widget-account.picture='hubl-user-avatar'
label-actions='Edit'
action-actions='admin-users-edit'
class-actions='w70 border cell-with-buttons'
widget-actions='hubl-solid-action-custom'
order-by='username'
)
#admin-users-create.content-box__height(hidden)
include page-admin-users-create.pug
#admin-users-edit.content-box__height(hidden)
include page-admin-users-edit.pug

View File

@ -2,7 +2,7 @@
solid-xmpp-chat(
data-authentication='login',
data-auto-login='true',
data-bosh-service-url=`${xmpp}`,
data-websocket-url=`${xmppWebsocket || 'wss://jabber.happy-dev.fr/xmpp-websocket'}`,
data-i18n='en',
bind-resources
)

View File

@ -2,69 +2,49 @@ div.content-box__info
include ../../templates/hubl-user-avatar.pug
solid-widget(name='hubl-user-groups')
template ${await value.name}
solid-widget(name='hubl-team-template-edit')
solid-widget(name="circle-edit-members-delete")
template
solid-display.user-thumb.is-spaced(
class='w280 cell border cell-with-id-card user-thumb'
data-src='${await value.user}'
fields='account.picture, sup(name, groups), sub(profile.city)'
class-account.picture='user-thumb__picture avatar'
class-name='user-thumb__name'
class-groups='user-thumb__groups'
class-profile.city='user-thumb__city'
widget-account.picture='hubl-user-avatar'
multiple-groups=''
widget-groups='hubl-user-groups'
)
solid-ac-checker(
class='w162 cell border'
permission="acl:Delete"
data-src="${value['@id']}"
)
solid-ac-checker(permission="acl:Delete" data-src="${src}")
solid-delete(
class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${value['@id']}"
data-src="${src}"
data-label='Retirer'
)
//- Only to show the table grid
solid-ac-checker(
class='w162 cell border'
no-permission="acl:Delete"
data-src="${value['@id']}"
)
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'
required-status
required-name
required-owner
required-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-owner='Administrateur ou administratrice'
label-description='Sous-titre du canal *'
label-name='Nom du cercle *'
label-owner='Administrateur ou administratrice *'
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'
class-description='form-label is-light is-full-width input-text-like'
class-status='form-label is-light is-full-width member-select color'
widget-owner='solid-form-auto-completion'
widget-owner='solid-form-dropdown-autocompletion-label'
partial=''
@ -81,9 +61,8 @@ div.content-box__info
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'
widget-user='solid-form-dropdown-autocompletion'
submit-button='Ajouter un membre'
)
@ -94,13 +73,29 @@ div.content-box__info
div.w280 Nom
div.w162 Accès
//-class='table-body'
solid-display(
class='table-body'
bind-resources
fields='members'
nested-field='members'
fields='classGroup(classGrid(user.account.picture, sup(user.name, user.groups), sub(user.communities))), self'
loader-id='loader-circle-edit'
multiple-members=''
widget-members='hubl-team-template-edit'
class-classGroup='w280 cell border cell-with-id-card user-thumb is-spaced'
class-user.account.picture='user-thumb__picture avatar'
class-user.name='user-thumb__name'
class-user.groups='user-thumb__groups'
multiple-user.communities
multiple-user.communities-fields="community.name"
widget-user.account.picture='hubl-user-avatar'
multiple-user.groups
multiple-user.groups-fields='name'
action-self='self'
widget-self='circle-edit-members-delete'
)
//- Only to show the table grid
div.w162.cell.border

View File

@ -0,0 +1,10 @@
#circle-listevents
solid-event(
class='w700'
bind-resources
nested-field="events"
range-event-type=`${endpoints.typeevents || (endpoints.get && endpoints.get.typeevents)}`
range-event-circle=`${endpoints.circles || (endpoints.get && endpoints.get.circles)}`
upload-dir=`${endpoints.uploads || (endpoints.get && endpoints.get.uploads)}`
id-prefix='circles'
)

View File

@ -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 <solid-link next="admin-circle-list">administration</solid-link> ou contacte un administrateur.

View File

@ -0,0 +1,9 @@
#circle-polls
solid-poll(
class='w700'
id-prefix='circles'
bind-resources
nested-field="polls"
range-base-polls=`${endpoints.pollRangeBase || (endpoints.get && endpoints.get.pollRangeBase)}`
upload-dir=`${endpoints.uploads || (endpoints.get && endpoints.get.uploads)}`
)

View File

@ -3,23 +3,36 @@ solid-router(default-route='circle-profile', hidden)
solid-route(name='circle-edit')
#circle-profile(hidden)
include ../../templates/hubl-circle-team.pug
solid-widget(name='hubl-circle-team-contact')
template
solid-link(data-src='\${value}', next='messages')
.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'
value-title='Date de création : '
widget-creationDate='solid-display-date'
widget-creationDate='solid-display-value-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 +40,19 @@ 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'
next='admin-circles'
)
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 +61,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(
@ -71,15 +84,30 @@ solid-router(default-route='circle-profile', hidden)
h2 Membres :
solid-widget(name='hubl-circle-user-admin')
template ${value ? "Administrateur" : ""}
solid-display.block(
bind-resources
fields='members'
nested-field='members'
loader-id='loader-circle-profile'
fields='classGroup(user.account.picture, sup(user.name, user, is_admin), sub(user.communities))'
multiple-members=''
widget-members='hubl-circle-team-template'
widget-user='hubl-circle-team-contact'
class-classGroup='user-thumb is-spaced'
class-user.account.picture='avatar user-thumb__picture'
class-user.name='user-thumb__name'
class-user='user-thumb__send'
class-is_admin='user-thumb__admin'
multiple-user.communities
multiple-user.communities-fields="community.name"
widget-classGroup='solid-set-div'
widget-user.account.picture='hubl-user-avatar'
widget-is_admin='hubl-circle-user-admin'
)
#circle-edit.content-box__height(hidden)
include page-circle-edit.pug

View File

@ -0,0 +1,11 @@
#circle-listresources
solid-resource(
class='w700'
bind-resources
nested-field="resources"
range-resource-type=`${endpoints.resourcestypes || (endpoints.get && endpoints.get.resourcestypes)}`
range-resource-keyword=`${endpoints.resourceskeywords || (endpoints.get && endpoints.get.resourceskeywords)}`
range-resource-circle=`${endpoints.circles || (endpoints.get && endpoints.get.circles)}`
upload-dir=`${endpoints.uploads || (endpoints.get && endpoints.get.uploads)}`
id-prefix='circles'
)

View File

@ -1,27 +0,0 @@
.content-box.with-padding.with-form
h1 Post a new job offer
solid-form(
data-src=`${endpoints.joboffers || endpoints.post.joboffers}`
range-skills=`${endpoints.skills || endpoints.get.skills}`
fields='title, description, skills, closingDate'
class-title='field form-label is-light is-expanded'
label-title='Title*'
class-description='field form-label is-light is-expanded'
label-description='Description*'
widget-description='solid-form-textarea'
class-skills='form-label is-dark select-skills'
label-skills='The required skills for this mission:*'
multiple-skills='solid-multiple-select'
widget-skills='solid-form-auto-completion'
class-closingDate='form-label is-dark'
label-closingDate='Publication end date:*'
widget-closingDate='solid-form-date'
next='job-offers'
)

View File

@ -1,27 +0,0 @@
.content-box.with-padding.with-form
h1 Edit your job offer
solid-form(
bind-resources
range-skills=`${endpoints.skills || endpoints.get.skills}`
fields='title, description, skills, closingDate'
class-title='field form-label is-light is-expanded'
label-title='Title*'
class-description='field form-label is-light is-expanded'
label-description='Description*'
widget-description='solid-form-textarea'
class-skills='form-label is-dark select-skills'
label-skills='The required skills for this mission:*'
multiple-skills='solid-multiple-select'
widget-skills='solid-form-auto-completion'
class-closingDate='form-label is-dark'
label-closingDate='Publication end date:*'
widget-closingDate='solid-form-date'
next='job-offers'
)

View File

@ -2,7 +2,7 @@
solid-xmpp-chat(
data-authentication='login',
data-auto-login='true',
data-bosh-service-url=`${xmpp}`,
data-websocket-url=`${xmppWebsocket || 'wss://jabber.happy-dev.fr/xmpp-websocket'}`,
data-i18n='en',
bind-resources
)

View File

@ -1,60 +1,62 @@
div.content-box__info
include ../../templates/hubl-user-avatar.pug
solid-widget(name="project-edit-members-delete")
template
solid-ac-checker(permission="acl:Delete" data-src="${src}")
solid-delete(
class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close'
data-src="${src}"
data-label='Retirer'
)
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)'
required-customer.name
required-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'
label-user=''
widget-user='solid-form-dropdown-autocompletion'
submit-button='Ajouter un membre'
)
submit-button='Ajouter un membre'
)
.table-wrapper
.table
@ -66,8 +68,22 @@ div.content-box__info
solid-display(
class='table-body'
bind-resources
fields='members'
nested-field='members'
fields='classGroup(classGrid(user.account.picture, sup(user.name, user.groups), sub(user.communities))), self'
loader-id='loader-project-edit'
multiple-members=''
widget-members='hubl-team-template-edit'
class-classGroup='w280 cell border cell-with-id-card user-thumb is-spaced'
class-user.account.picture='user-thumb__picture avatar'
class-user.name='user-thumb__name'
class-user.groups='user-thumb__groups'
multiple-user.communities
multiple-user.communities-fields="community.name"
widget-user.account.picture='hubl-user-avatar'
multiple-user.groups
multiple-user.groups-fields='name'
action-self='self'
widget-self='project-edit-members-delete'
)

View File

@ -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 <solid-link next="admin-project-list">administration</solid-link> et demande une invitation.
p Ceci est un projet privé. Pour le rejoindre, rends-toi dans le panneau <solid-link next="admin-project-list">administration</solid-link> et demande une invitation.

View File

@ -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"

View File

@ -4,40 +4,70 @@ 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
solid-widget(name='hubl-project-team-contact')
template
solid-link(data-src='\${value}', next='messages')
.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'
value-title='Date de création : '
widget-creationDate='solid-display-date'
widget-creationDate='solid-display-value-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'
next='admin-projects'
)
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,32 +78,34 @@ 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 :
solid-widget(name='hubl-project-user-admin')
template ${value ? "Administrateur" : ""}
solid-display.block(
bind-resources
fields='members'
nested-field='members'
fields='classGroup(user.account.picture, sup(user.name, user, is_admin), sub(user.communities, name))'
multiple-members
widget-members='hubl-project-team'
widget-user='hubl-project-team-contact'
class-classGroup='user-thumb is-spaced'
class-user.account.picture='avatar user-thumb__picture'
class-user.name='user-thumb__name'
class-user='user-thumb__send'
class-is_admin='user-thumb__admin'
multiple-user.communities
multiple-user.communities-fields="community.name"
class-name='user-thumb__lead'
widget-classGroup='solid-set-div'
widget-user.account.picture='hubl-user-avatar'
widget-is_admin='hubl-project-user-admin'
)
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