reset
This commit is contained in:
parent
a0c1cab2ba
commit
874a8c636f
15
.gitignore
vendored
15
.gitignore
vendored
@ -1,15 +0,0 @@
|
|||||||
# Folders
|
|
||||||
.git
|
|
||||||
node_modules
|
|
||||||
bower_components
|
|
||||||
dist/css/*
|
|
||||||
!dist/css/.gitkeep
|
|
||||||
dist/html/*
|
|
||||||
!dist/html/.gitkeep
|
|
||||||
|
|
||||||
|
|
||||||
# Files
|
|
||||||
index.html
|
|
||||||
config.pug
|
|
||||||
issues.md
|
|
||||||
oidc-client-preprod-config.json
|
|
12
.gitmodules
vendored
12
.gitmodules
vendored
@ -1,12 +0,0 @@
|
|||||||
[submodule "dist/lib/webcomponentsjs"]
|
|
||||||
path = dist/lib/webcomponentsjs
|
|
||||||
url = https://github.com/webcomponents/webcomponentsjs
|
|
||||||
[submodule "dist/lib/sib-core"]
|
|
||||||
path = dist/lib/sib-core
|
|
||||||
url = git@git.happy-dev.fr:startinblox/sib-core.git
|
|
||||||
[submodule "dist/lib/sib-router"]
|
|
||||||
path = dist/lib/sib-router
|
|
||||||
url = git@git.happy-dev.fr:startinblox/sib-router.git
|
|
||||||
[submodule "dist/lib/sib-chat"]
|
|
||||||
path = dist/lib/sib-chat
|
|
||||||
url = git@git.happy-dev.fr:startinblox/sib-chat.git
|
|
@ -1,8 +0,0 @@
|
|||||||
<IfModule mod_rewrite.c>
|
|
||||||
RewriteEngine On
|
|
||||||
RewriteBase /
|
|
||||||
RewriteRule \. - [L]
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
RewriteRule . /index.html [L]
|
|
||||||
</IfModule>
|
|
49
Makefile
49
Makefile
@ -1,49 +0,0 @@
|
|||||||
default: build
|
|
||||||
|
|
||||||
config.pug:
|
|
||||||
@cp -n config-sample.pug config.pug
|
|
||||||
|
|
||||||
node_modules:
|
|
||||||
npm install
|
|
||||||
|
|
||||||
install: node_modules
|
|
||||||
git submodule update --init --recursive
|
|
||||||
|
|
||||||
update:
|
|
||||||
cd dist/lib/sib-chat; \
|
|
||||||
git pull origin master
|
|
||||||
cd dist/lib/sib-core; \
|
|
||||||
git pull origin master
|
|
||||||
cd dist/lib/sib-router; \
|
|
||||||
git pull origin master
|
|
||||||
|
|
||||||
dist/css/hd-app.css: $(wildcard src/scss/*.scss)
|
|
||||||
npx node-sass src/scss/main.scss dist/css/hd-app.css --source-map true || touch dist/css/hd-app.css
|
|
||||||
|
|
||||||
index.html: config.pug index.pug $(wildcard src/pug/*.pug)
|
|
||||||
npx pug --pretty index.pug || touch index.html
|
|
||||||
|
|
||||||
build: index.html dist/css/hd-app.css
|
|
||||||
|
|
||||||
prod:
|
|
||||||
npx pug index.pug
|
|
||||||
npx node-sass src/scss/main.scss dist/css/hd-app.css --output-style compressed
|
|
||||||
|
|
||||||
watch:
|
|
||||||
@echo 'watching for change'
|
|
||||||
@echo 'press ctrl+C to stop'
|
|
||||||
@while true; do \
|
|
||||||
$(MAKE) build --silent; \
|
|
||||||
sleep 0.5; \
|
|
||||||
done
|
|
||||||
|
|
||||||
serve: dist/css/hd-app.css
|
|
||||||
php -S 127.0.0.1:8080 router.php
|
|
||||||
|
|
||||||
dev-mt: watch serve
|
|
||||||
|
|
||||||
dev:
|
|
||||||
@$(MAKE) dev-mt -j --no-print-directory
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: default install build build-prod watch serve
|
|
24
README.md
24
README.md
@ -1,24 +0,0 @@
|
|||||||
# HD app
|
|
||||||
HD app is the magic tool that allows the Happy Dev network to thrive in a decentralized way.
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
clone then:
|
|
||||||
|
|
||||||
* `make install`
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
Compile html & css:
|
|
||||||
|
|
||||||
* `make build`
|
|
||||||
|
|
||||||
or compile html & css on change:
|
|
||||||
|
|
||||||
* `make watch`
|
|
||||||
|
|
||||||
## Run server
|
|
||||||
|
|
||||||
require PHP
|
|
||||||
|
|
||||||
* `make serve`
|
|
@ -1,4 +0,0 @@
|
|||||||
- var dn = process.env.DN || 'http://127.0.0.1:8080'
|
|
||||||
- var sdn = process.env.SDN || 'http://127.0.0.1:8000'
|
|
||||||
- var cdn = process.env.CDN || 'http://127.0.0.1:8080'
|
|
||||||
- var v = Date.now()
|
|
0
dist/css/.gitkeep
vendored
0
dist/css/.gitkeep
vendored
1
dist/lib/sib-chat
vendored
1
dist/lib/sib-chat
vendored
@ -1 +0,0 @@
|
|||||||
Subproject commit 24192a89c1bc19f7faa06546ba1b798ad717e04b
|
|
1
dist/lib/sib-core
vendored
1
dist/lib/sib-core
vendored
@ -1 +0,0 @@
|
|||||||
Subproject commit e493387102088c9d7c4cd03ce5d4edbc3a26cdcc
|
|
8
dist/lib/sib-oidc-client-config.json
vendored
8
dist/lib/sib-oidc-client-config.json
vendored
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"authority": "http://localhost:8000/openid/",
|
|
||||||
"client_id": "598550",
|
|
||||||
"redirect_uri": "http://oidc-client.local/user-manager-sample.html",
|
|
||||||
"response_type": "id_token token",
|
|
||||||
"scope": "openid profile email",
|
|
||||||
"loadUserInfo": true
|
|
||||||
}
|
|
61
dist/lib/sib-oidc-client.js
vendored
61
dist/lib/sib-oidc-client.js
vendored
@ -1,61 +0,0 @@
|
|||||||
if (typeof Oidc == "undefined") {
|
|
||||||
throw new Error("You are missing the `oidc-client-js` lib");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Var declarations
|
|
||||||
var sib = {};
|
|
||||||
sib.oidc = {};
|
|
||||||
|
|
||||||
|
|
||||||
// Setup User Manager
|
|
||||||
sib.oidc._setup = function(settings) {
|
|
||||||
if (typeof sib.oidc._manager == "undefined") {
|
|
||||||
sib.oidc._manager = new Oidc.UserManager(settings);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Retrieve User from sessionStorage, or fetch it
|
|
||||||
sib.oidc._getUser = function() {
|
|
||||||
sib.oidc._manager.getUser()
|
|
||||||
.then(function(user) {
|
|
||||||
if (user == null) {
|
|
||||||
sib.oidc._manager.signinRedirectCallback()
|
|
||||||
.then()
|
|
||||||
.catch(function(error) {
|
|
||||||
sib.oidc._manager.signinRedirect({state: "dummy data"})
|
|
||||||
.then()
|
|
||||||
.catch(function(error) {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sib.oidc.user = user;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(function(error) {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Connect to OIDC provider
|
|
||||||
sib.oidc._connect = function(settings) {
|
|
||||||
sib.oidc._setup(settings);
|
|
||||||
sib.oidc._getUser();
|
|
||||||
|
|
||||||
|
|
||||||
// When user loaded...
|
|
||||||
sib.oidc._manager.events.addUserLoaded(function(user) {
|
|
||||||
sib.oidc._getUser();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Entry point
|
|
||||||
fetch("./oidc-client-config.json")
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(settings => sib.oidc._connect(settings));
|
|
||||||
|
|
1
dist/lib/sib-router
vendored
1
dist/lib/sib-router
vendored
@ -1 +0,0 @@
|
|||||||
Subproject commit 04ea601abf2fe9d65603867450cb39106f5d06e8
|
|
1
dist/lib/webcomponentsjs
vendored
1
dist/lib/webcomponentsjs
vendored
@ -1 +0,0 @@
|
|||||||
Subproject commit bdd5203993f19ca08568638afd96f8f9c3959ea1
|
|
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"authority": "https://test-paris.happy-dev.fr/openid/",
|
|
||||||
"client_id": "125356",
|
|
||||||
"redirect_uri": "http://127.0.0.1:8080",
|
|
||||||
"response_type": "id_token token",
|
|
||||||
"scope": "openid profile email",
|
|
||||||
"automaticSilentRenew": true,
|
|
||||||
"silent_redirect_uri": "http://127.0.0.1:8080",
|
|
||||||
"loadUserInfo": true
|
|
||||||
}
|
|
2030
package-lock.json
generated
2030
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
18
package.json
18
package.json
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "hd-app",
|
|
||||||
"version": "0.1.0",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.10.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"node-sass": "^4.9.3",
|
|
||||||
"pug-cli": "^1.0.0-alpha6"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"bootstrap": "^4.0.0",
|
|
||||||
"cropper": "^4.0.0",
|
|
||||||
"font-awesome": "^4.7.0",
|
|
||||||
"jquery": "^3.3.1",
|
|
||||||
"normalize.css": "^8.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
18
preprod.sh
18
preprod.sh
@ -1,18 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
export DN="https://staging-app.happy-dev.fr"
|
|
||||||
export SDN="https://test-paris.happy-dev.fr"
|
|
||||||
export CDN="https://staging-app.happy-dev.fr/dist/lib"
|
|
||||||
|
|
||||||
make -B build
|
|
||||||
|
|
||||||
# ssh staging-app@ssh-staging-app.happy-dev.fr "rm -R staging-app.happy-dev.fr"
|
|
||||||
ssh staging-app@ssh-staging-app.happy-dev.fr "mkdir -p staging-app.happy-dev.fr/src/fonts; cd staging-app.happy-dev.fr; mkdir -p dist/css;"
|
|
||||||
|
|
||||||
echo sync...
|
|
||||||
rsync -u index.html staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/
|
|
||||||
rsync -u .htaccess staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/
|
|
||||||
rsync -u oidc-client-preprod-config.json staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/oidc-client-config.json
|
|
||||||
rsync -r dist/* staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/dist/
|
|
||||||
rsync -r src/fonts/* staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/src/fonts/
|
|
||||||
rsync -r src/js/* staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/src/js/
|
|
||||||
echo ...done
|
|
10
prod.sh
10
prod.sh
@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
export DN="https://app.happy-dev.fr"
|
|
||||||
export SDN="https://hd-ldp.happy-dev.fr"
|
|
||||||
make prod
|
|
||||||
ssh hd-app@ssh-hd-app.alwaysdata.net "rm -R hd-app; mkdir hd-app; cd hd-app; mkdir -p src/fonts; mkdir -p dist/css;"
|
|
||||||
scp index.html hd-app@ssh-hd-app.alwaysdata.net:~/hd-app/
|
|
||||||
scp .htaccess hd-app@ssh-hd-app.alwaysdata.net:~/hd-app/
|
|
||||||
scp -r dist/css/ hd-app@ssh-hd-app.alwaysdata.net:~/hd-app/dist/
|
|
||||||
scp -r src/fonts/ hd-app@ssh-hd-app.alwaysdata.net:~/hd-app/src/
|
|
||||||
scp -r src/js/ hd-app@ssh-hd-app.alwaysdata.net:~/hd-app/src/
|
|
11
router.php
11
router.php
@ -1,11 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if (PHP_SAPI == 'cli-server') {
|
|
||||||
$url = parse_url($_SERVER['REQUEST_URI']);
|
|
||||||
$path = $url['path'];
|
|
||||||
if(strpos($path, '.') !== false) return false;
|
|
||||||
$file = __DIR__ . $path;
|
|
||||||
if (is_file($file)) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
include "index.html";
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 108 KiB |
Binary file not shown.
Binary file not shown.
@ -1,61 +0,0 @@
|
|||||||
document.addEventListener("DOMContentLoaded", function(event) {
|
|
||||||
// Constants declaration
|
|
||||||
const navBar = document.querySelector("#navbar");
|
|
||||||
const searchBar = document.querySelector("#search-bar");
|
|
||||||
const searchView = document.querySelector("#search-view");
|
|
||||||
const searchInput = searchBar.querySelector("#search-input");
|
|
||||||
const btnToggle = document.querySelector(".btn-toggle");
|
|
||||||
|
|
||||||
|
|
||||||
// Shortcuts
|
|
||||||
window.addEventListener("keydown", function(e) {
|
|
||||||
// CTRL + K triggers the search feature
|
|
||||||
if ((e.keyCode == 75 || e.keyCode == 80) && (e.ctrlKey === true || e.metaKey === true)) {
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
openSearchBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Escape key
|
|
||||||
else if (e.keyCode == 27 && navBar.classList.contains("search-mode")) {
|
|
||||||
closeSearchBar();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
searchBar.querySelector("#close-search-icon").addEventListener("click", emptySearchBar);
|
|
||||||
|
|
||||||
function openSearchBar(e) {
|
|
||||||
navBar.classList.add("search-mode");
|
|
||||||
searchBar.querySelector("#search-input").focus();
|
|
||||||
searchView.classList.add("search-mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeSearchBar(e) {
|
|
||||||
navBar.classList.remove("search-mode");
|
|
||||||
searchView.classList.remove("search-mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function emptySearchBar(e) {
|
|
||||||
searchInput.value = '';
|
|
||||||
openSearchBar();
|
|
||||||
searchInput.focus;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Synchronizes the search input with the <ldp-form>s
|
|
||||||
searchInput.addEventListener("keyup", (e) => {
|
|
||||||
searchView.querySelectorAll("ldp-form input[type=text]").forEach((el) => {
|
|
||||||
el.value = searchInput.value;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
btnToggle.addEventListener('click', e => {
|
|
||||||
navBar.classList.toggle('open');
|
|
||||||
e.stopPropagation();
|
|
||||||
});
|
|
||||||
|
|
||||||
window.addEventListener('click', e=>{
|
|
||||||
navBar.classList.remove('open');
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,6 +0,0 @@
|
|||||||
#calendar(style='display: none')
|
|
||||||
h1.page-title Agenda
|
|
||||||
ldp-calendar(
|
|
||||||
data-src='http://lucky.alwaysdata.net/api/events/',
|
|
||||||
style='display: block; height: 300px; width: 500px;'
|
|
||||||
)
|
|
@ -1 +0,0 @@
|
|||||||
#channel-chat.chat-view(style='display: none', bind-resources='')
|
|
@ -1,7 +0,0 @@
|
|||||||
#channel-create(style='display: none')
|
|
||||||
sib-form(
|
|
||||||
data-src=`${sdn}/channels/`,
|
|
||||||
range-owner=`${sdn}/members/`,
|
|
||||||
widget-members='sib-form-multiple-dropdown',
|
|
||||||
range-members=`${sdn}/members/`
|
|
||||||
)
|
|
@ -1,7 +0,0 @@
|
|||||||
#channel-edit(style='display: none')
|
|
||||||
sib-form(
|
|
||||||
range-owner=`${sdn}/members/`,
|
|
||||||
widget-members='sib-form-multiple-dropdown',
|
|
||||||
range-members=`${sdn}/members/`,
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
@ -1,36 +0,0 @@
|
|||||||
script.
|
|
||||||
document.addEventListener("WebComponentsReady", function(event) {
|
|
||||||
class HDAppMember extends SIBWidget {
|
|
||||||
get template() {
|
|
||||||
return `
|
|
||||||
<div name="${this.name}">
|
|
||||||
<img src="${this.value.avatar}"/>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
store.get(this.value).then( (value) => {
|
|
||||||
this._value = value;
|
|
||||||
this.innerHTML = this.template;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
customElements.define("hdapp-member", HDAppMember);
|
|
||||||
});
|
|
||||||
|
|
||||||
#channel-profile(style='display: none')
|
|
||||||
sib-display(
|
|
||||||
data-fields='name, description, owner',
|
|
||||||
widget-owner='hdapp-member',
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
||||||
h2.section.skills Participants
|
|
||||||
sib-display(
|
|
||||||
id-suffix='members',
|
|
||||||
data-fields='avatar, user',
|
|
||||||
widget-avatar='sib-display-img',
|
|
||||||
widget-user='hdapp-userinfo',
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
|||||||
#channel(style='display: none')
|
|
||||||
sib-router#channel-router(default-route='channel-profile')
|
|
||||||
sib-route(name='channel-chat')
|
|
||||||
button Chat
|
|
||||||
sib-route(name='channel-profile')
|
|
||||||
button Info
|
|
||||||
sib-route(name='channel-edit')
|
|
||||||
button Éditer
|
|
||||||
sib-route(name='channel-create')
|
|
||||||
button Nouveau
|
|
||||||
#network-views-container
|
|
||||||
include channel-chat.pug
|
|
||||||
include channel-profile.pug
|
|
||||||
include channel-edit.pug
|
|
||||||
include channel-create.pug
|
|
@ -1,7 +0,0 @@
|
|||||||
#channels(style='display: none')
|
|
||||||
sib-display#channels-list(
|
|
||||||
data-src=`${sdn}/channels/`,
|
|
||||||
data-fields='name, description',
|
|
||||||
search-fields='name, description',
|
|
||||||
next='channel'
|
|
||||||
)
|
|
@ -1,5 +0,0 @@
|
|||||||
#client-create(style='display: none')
|
|
||||||
sib-form(
|
|
||||||
data-src=`${sdn}/clients/`,
|
|
||||||
data-fields='name, address, logo'
|
|
||||||
)
|
|
@ -1,24 +0,0 @@
|
|||||||
#dashboard(style='display: none')
|
|
||||||
//- form
|
|
||||||
.form-group
|
|
||||||
input#search-input.form-control.form-control-sm(
|
|
||||||
placeholder='Recherche',
|
|
||||||
aria-describedby='search-help',
|
|
||||||
autofocus='',
|
|
||||||
type='text'
|
|
||||||
)
|
|
||||||
small#search-help.form-text.text-muted * parmi les membres, les projets et les groupes de discussion
|
|
||||||
|
|
||||||
.list-condensed
|
|
||||||
ldp-display#to-user-profile(
|
|
||||||
data-src=`${sdn}/members/1/`,
|
|
||||||
set-name='firstname, name-separator, lastname',
|
|
||||||
value-name-separator=' ',
|
|
||||||
data-fields='avatar, name',
|
|
||||||
widget-avatar='ldp-display-img'
|
|
||||||
)
|
|
||||||
script.
|
|
||||||
document.querySelector("#to-user-profile").addEventListener("click", () => {
|
|
||||||
document.getElementById("navbar-router").navigate("member");
|
|
||||||
document.getElementById("member-page-router").navigate("member-detail");
|
|
||||||
});
|
|
@ -1,17 +0,0 @@
|
|||||||
// Stylesheets
|
|
||||||
//- link(rel='stylesheet', href=`${dn}/node_modules/bootstrap/dist/css/bootstrap.min.css`)
|
|
||||||
//- link(rel='stylesheet', href=`${dn}/node_modules/cropper/dist/cropper.min.css`)
|
|
||||||
link(rel='stylesheet', href=`${dn}/node_modules/font-awesome/css/font-awesome.min.css`)
|
|
||||||
link(rel='stylesheet', href=`${dn}/node_modules/normalize.css/normalize.css?v=${v}`)
|
|
||||||
link(rel='stylesheet', href=`${dn}/dist/css/hd-app.css?v=${v}`)
|
|
||||||
// Javascript
|
|
||||||
script(src=`${dn}/node_modules/jquery/dist/jquery.min.js`)
|
|
||||||
//- script(src=`${dn}/node_modules/bootstrap/dist/js/bootstrap.min.js`)
|
|
||||||
script(src=`${dn}/node_modules/cropper/dist/cropper.min.js`)
|
|
||||||
script(src=`${dn}/dist/lib/webcomponentsjs/webcomponents-loader.js`)
|
|
||||||
script(src=`${dn}/src/js/hd-app.js?v=${v}`)
|
|
||||||
//- script(src=`${dn}/dist/lib/sib-chat/3rdparty/sib-oidc-client.js?v=${v}`)
|
|
||||||
// Web components
|
|
||||||
link(rel='import', href=`${dn}/dist/lib/sib-core/sib-display.html?v=${v}`)
|
|
||||||
link(rel='import', href=`${dn}/dist/lib/sib-router/sib-router.html?v=${v}`)
|
|
||||||
//- link(rel='import', href=`${dn}/dist/lib/sib-chat/sib-chat.html`)
|
|
@ -1,34 +0,0 @@
|
|||||||
// Stylesheets
|
|
||||||
//-link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css', integrity='sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4', crossorigin='anonymous')
|
|
||||||
link(href='https://cdn.bootcss.com/cropper/4.0.0/cropper.min.css', rel='stylesheet')
|
|
||||||
link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css')
|
|
||||||
link(rel='stylesheet', href=`${dn}/dist/css/hd-app.css?v=${v}`)
|
|
||||||
|
|
||||||
// Javascript
|
|
||||||
script(
|
|
||||||
src='https://code.jquery.com/jquery-3.3.1.slim.min.js',
|
|
||||||
integrity='sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo',
|
|
||||||
crossorigin='anonymous')
|
|
||||||
script(
|
|
||||||
src='https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js',
|
|
||||||
integrity='sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ',
|
|
||||||
crossorigin='anonymous')
|
|
||||||
script(
|
|
||||||
src='https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js',
|
|
||||||
integrity='sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm',
|
|
||||||
crossorigin='anonymous')
|
|
||||||
script(
|
|
||||||
src='https://cdn.bootcss.com/cropper/4.0.0/cropper.min.js')
|
|
||||||
script(
|
|
||||||
src='https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.2.0/webcomponents-loader.js',
|
|
||||||
integrity='sha256-fUVqCtpScUF69qkFkeuHmcShr2N2UleRQJhRG4etHds=',
|
|
||||||
crossorigin='anonymous')
|
|
||||||
script(
|
|
||||||
src=`${dn}/src/js/hd-app.js?v=${v}`)
|
|
||||||
script(
|
|
||||||
src=`${cdn}/sib-chat/3rdparty/sib-oidc-client.js?v=${v}`)
|
|
||||||
|
|
||||||
// Web components
|
|
||||||
link(rel='import', href=`${cdn}/sib-core/sib-display.html?v=${v}`)
|
|
||||||
link(rel='import', href=`${cdn}/sib-router/sib-router.html?v=${v}`)
|
|
||||||
link(rel='import', href=`${cdn}/sib-chat/sib-chat.html`)
|
|
@ -1,2 +0,0 @@
|
|||||||
#drive(style='display: none')
|
|
||||||
h1.page-title Drive
|
|
@ -1,8 +0,0 @@
|
|||||||
header#header
|
|
||||||
div#logo
|
|
||||||
| Happy Dev
|
|
||||||
|
|
||||||
#search-bar
|
|
||||||
input#search-input(placeholder='ctrl + k', type='search')
|
|
||||||
i#search-icon.fa.fa-search(aria-hidden='true')
|
|
||||||
i#close-search-icon.fa.fa-times(aria-hidden='true')
|
|
@ -1,51 +0,0 @@
|
|||||||
doctype html
|
|
||||||
html(lang='fr')
|
|
||||||
head
|
|
||||||
meta(charset='UTF-8')
|
|
||||||
meta(name='viewport', content='width=device-width, initial-scale=1.0')
|
|
||||||
meta(http-equiv='X-UA-Compatible', content='ie=edge')
|
|
||||||
title Happy Dev App
|
|
||||||
//- Prod/Dev setup
|
|
||||||
if (['https://app.happy-dev.fr', 'https://staging-app.happy-dev.fr'].includes(dn))
|
|
||||||
include dependencies-prod.pug
|
|
||||||
else
|
|
||||||
include dependencies-dev.pug
|
|
||||||
body
|
|
||||||
include header.pug
|
|
||||||
div#subContainer
|
|
||||||
include menu.pug
|
|
||||||
main#mainContainer
|
|
||||||
//- include dashboard.pug
|
|
||||||
include members.pug
|
|
||||||
include member.pug
|
|
||||||
include job-offers.pug
|
|
||||||
//- include projects.pug
|
|
||||||
include project.pug
|
|
||||||
//- include client-creation.pug
|
|
||||||
//- include channels.pug
|
|
||||||
include channel.pug
|
|
||||||
//- include search.pug
|
|
||||||
sib-chat#chat-singleton(data-authentication='login', data-auto-login='true', data-bosh-service-url='https://jabber.happy-dev.fr/http-bind/', data-debug='false', data-locales-url='en', bind-resources='')
|
|
||||||
script.
|
|
||||||
// Move the chat singleton to the right view on "page load"
|
|
||||||
window.onload = function() {
|
|
||||||
if (window.location.pathname.indexOf("-chat") !== -1) {
|
|
||||||
var chatSingleton = document.querySelector("#chat-singleton");
|
|
||||||
var pathnameParts = window.location.pathname.split("/");
|
|
||||||
var viewName = pathnameParts[pathnameParts.length - 1];
|
|
||||||
var view = document.getElementById(viewName);
|
|
||||||
console.log({chatSingleton,pathnameParts,viewName,view});
|
|
||||||
|
|
||||||
view.appendChild(chatSingleton);
|
|
||||||
chatSingleton.dataset.src = view.dataset.src;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move the chat singleton to the right view on "navigate"
|
|
||||||
window.addEventListener('navigate', event => {
|
|
||||||
var chatSingleton = document.querySelector("#chat-singleton");
|
|
||||||
var view = document.getElementById(event.detail.route);
|
|
||||||
|
|
||||||
view.querySelector(".chat-view").appendChild(chatSingleton);
|
|
||||||
chatSingleton.dataset.src = view.dataset.src;
|
|
||||||
});
|
|
@ -1,40 +0,0 @@
|
|||||||
script.
|
|
||||||
document.addEventListener('WebComponentsReady', function(event) {
|
|
||||||
class HDAppAuthor extends SIBDisplayLookupList {
|
|
||||||
get parentElement() {
|
|
||||||
return 'div';
|
|
||||||
}
|
|
||||||
getTemplate(value, index) {
|
|
||||||
var firstname, lastname;
|
|
||||||
if (typeof value == 'object')
|
|
||||||
if (Object.keys(value).length > 1) {
|
|
||||||
firstname = value.user.first_name;
|
|
||||||
lastname = value.user.last_name;
|
|
||||||
} else {
|
|
||||||
store.get(value).then(resource => {
|
|
||||||
this.value.push(resource);
|
|
||||||
this.render();
|
|
||||||
});
|
|
||||||
if (Array.isArray(this.value))
|
|
||||||
this.value.splice(this.value.indexOf(value), 1);
|
|
||||||
else this.value = [];
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
return `${firstname} ${lastname}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
customElements.define('hdapp-author', HDAppAuthor);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
#job-offers(style='display: none')
|
|
||||||
div
|
|
||||||
h1 Job offers
|
|
||||||
sib-display#offers-list(
|
|
||||||
data-src=`${sdn}/job-offers/`,
|
|
||||||
data-fields='author, title, description, skills',
|
|
||||||
set-searchset='title, description',
|
|
||||||
widget-skills='sib-display-lookuplist',
|
|
||||||
widget-author='hdapp-author',
|
|
||||||
search-fields='searchset'
|
|
||||||
)
|
|
@ -1 +0,0 @@
|
|||||||
#member-chat.chat-view(style='display: none', bind-resources='')
|
|
@ -1,97 +0,0 @@
|
|||||||
// script.
|
|
||||||
class LDPFormImgUpload extends SIBWidget {
|
|
||||||
get template() {
|
|
||||||
return `<label for="${this.name}"><img id="${this.name}-preview" src="${this.value}"/></label>
|
|
||||||
<input id="${this.name}" type="file" name="${this.name}" value="${this.value}" />`;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
store.get(this.value).then( (value) => {
|
|
||||||
this._value = value;
|
|
||||||
this.innerHTML = this.template;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
customElements.define("ldp-form-img-upload", LDPFormImgUpload);
|
|
||||||
widget-avatar="ldp-form-img-upload"
|
|
||||||
|
|
||||||
#member-edit(style='display: none')
|
|
||||||
label.d-none(for='avatar-input')
|
|
||||||
img#avatar-preview(src='', style='width: 100%;')
|
|
||||||
input#avatar-input.d-none(accept='image/*', name='avatar', value='', type='file')
|
|
||||||
sib-form.edit-form(
|
|
||||||
data-fields='user, avatar, bio, cell, jabberID, number, pseudo, skills, website',
|
|
||||||
widget-user='hdapp-usereditinfo',
|
|
||||||
range-cell=`${sdn}/cells/`, widget-skills='sib-form-multiple-dropdown',
|
|
||||||
range-skills=`${sdn}/skills/`,
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
||||||
#crop-modal
|
|
||||||
.crop-wrapper
|
|
||||||
img#crop-preview(src='')
|
|
||||||
.control-bar
|
|
||||||
button#cancel-img-cropping.btn.btn-link Annuler
|
|
||||||
i#rotate-img.fa.fa-undo(aria-hidden='true')
|
|
||||||
button#crop-img.btn.btn-link Valider
|
|
||||||
|
|
||||||
|
|
||||||
script.
|
|
||||||
// Constant declaration
|
|
||||||
const avatarPreview = document.querySelector("#avatar-preview");
|
|
||||||
const avatarInput = document.querySelector("#avatar-input");
|
|
||||||
const cropModal = document.querySelector("#crop-modal");
|
|
||||||
const cropPreview = cropModal.querySelector("#crop-preview");
|
|
||||||
const $cropPreview = $(cropPreview);
|
|
||||||
|
|
||||||
// Triggers cropping on image upload
|
|
||||||
avatarInput.addEventListener("change", function(e) {
|
|
||||||
var img = avatarInput.files[0];
|
|
||||||
var reader = new FileReader();
|
|
||||||
|
|
||||||
reader.onloadend = function () {
|
|
||||||
cropPreview.src = reader.result;
|
|
||||||
cropModal.classList.add("cropping-mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (img) {
|
|
||||||
reader.readAsDataURL(img);//reads the data as a URL
|
|
||||||
}
|
|
||||||
});
|
|
||||||
cropPreview.addEventListener("load", () => {
|
|
||||||
$cropPreview.cropper({
|
|
||||||
aspectRatio: 1/1,
|
|
||||||
viewMode: 3,
|
|
||||||
zoomable: false,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// Rotate image
|
|
||||||
cropModal.querySelector("#rotate-img").addEventListener("click", () => {
|
|
||||||
$cropPreview.cropper("rotate", -90);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// Cancel cropping
|
|
||||||
cropModal.querySelector("#cancel-img-cropping").addEventListener("click", () => {
|
|
||||||
closeCropping();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Shortcut
|
|
||||||
document.querySelector("body").addEventListener("keydown", function(e) {
|
|
||||||
// Escape key
|
|
||||||
if (e.keyCode == 27 && cropModal.classList.contains("cropping-mode")) {
|
|
||||||
closeCropping();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
function closeCropping() {
|
|
||||||
cropModal.classList.remove("cropping-mode");
|
|
||||||
avatarInput.value = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Validating cropping
|
|
||||||
cropModal.querySelector("#crop-img").addEventListener("click", () => {
|
|
||||||
avatarPreview.src = $cropPreview.cropper("getCroppedCanvas").toDataURL()
|
|
||||||
closeCropping();
|
|
||||||
});
|
|
@ -1,13 +0,0 @@
|
|||||||
#member-profile(style='display: none')
|
|
||||||
sib-display#member-info(
|
|
||||||
data-fields='header, cell, number, roles, website, skills',
|
|
||||||
set-header='avatar, user, pseudonym, bio'
|
|
||||||
set-pseudonym='before-pseudo, pseudo'
|
|
||||||
widget-avatar='sib-display-img',
|
|
||||||
widget-user='hdapp-userinfo',
|
|
||||||
widget-cell='hdapp-usercell',
|
|
||||||
widget-number='sib-display-tel',
|
|
||||||
widget-roles='sib-display-lookuplist',
|
|
||||||
widget-skills='sib-display-lookuplist',
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
@ -1,12 +0,0 @@
|
|||||||
#member(style='display: none')
|
|
||||||
sib-router#member-router(default-route='member-profile')
|
|
||||||
sib-route(name='member-chat')
|
|
||||||
div Chat
|
|
||||||
sib-route(name='member-profile')
|
|
||||||
div Voir
|
|
||||||
sib-route(name='member-edit')
|
|
||||||
div Éditer
|
|
||||||
#member-views-container
|
|
||||||
include member-chat.pug
|
|
||||||
include member-profile.pug
|
|
||||||
include member-edit.pug
|
|
@ -1,73 +0,0 @@
|
|||||||
script.
|
|
||||||
document.addEventListener("WebComponentsReady", function(event) {
|
|
||||||
class HDAppUserInfo extends SIBDisplayLookupList {
|
|
||||||
get parentElement() {return "div"}
|
|
||||||
getTemplate(value, index) {
|
|
||||||
var firstname, lastname, email;
|
|
||||||
|
|
||||||
if(typeof value == "object")
|
|
||||||
if(Object.keys(value).length > 1) {
|
|
||||||
firstname = value.first_name;
|
|
||||||
lastname = value.last_name;
|
|
||||||
email = value.email;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
store.get(value).then(resource => {
|
|
||||||
this.value.push(resource);
|
|
||||||
this.render();
|
|
||||||
});
|
|
||||||
if(Array.isArray(this.value))this.value.splice(this.value.indexOf(value), 1);
|
|
||||||
else this.value = [];
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
return `<div id="${firstname}-${lastname}">${firstname} ${lastname}</div>`;
|
|
||||||
// + `<div id="${email}">${email}</div>`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
customElements.define('hdapp-userinfo', HDAppUserInfo);
|
|
||||||
|
|
||||||
class HDAppCell extends SIBDisplayLookupList {
|
|
||||||
get parentElement() {return "div"}
|
|
||||||
getTemplate(value, index) {
|
|
||||||
var city, country;
|
|
||||||
|
|
||||||
if(typeof value == "object")
|
|
||||||
if(Object.keys(value).length > 1) {
|
|
||||||
city = value.city;
|
|
||||||
country = value.country;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
store.get(value).then(resource => {
|
|
||||||
this.value.push(resource);
|
|
||||||
this.render();
|
|
||||||
});
|
|
||||||
if(Array.isArray(this.value))this.value.splice(this.value.indexOf(value), 1);
|
|
||||||
else this.value = [];
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
return `<span id="${city}-${country}">${city} ${country}</span>`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
customElements.define("hdapp-usercell", HDAppCell);
|
|
||||||
});
|
|
||||||
|
|
||||||
#members.view(style='display: none')
|
|
||||||
div
|
|
||||||
h1 Members
|
|
||||||
sib-display#profiles-list(
|
|
||||||
data-src=`${sdn}/members/`,
|
|
||||||
data-fields='header, cell, skills',
|
|
||||||
set-header='avatar, user, pseudonym, bio'
|
|
||||||
set-pseudonym='before-pseudo, pseudo'
|
|
||||||
value-before-pseudo='@',
|
|
||||||
widget-avatar='sib-display-img',
|
|
||||||
widget-user='hdapp-userinfo',
|
|
||||||
widget-cell='hdapp-usercell',
|
|
||||||
widget-skills='sib-display-lookuplist',
|
|
||||||
set-searchset='user.first_name, user.last_name',
|
|
||||||
search-fields='searchset',
|
|
||||||
next='member'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
.btn-toggle
|
|
||||||
i.fa.fa-bars
|
|
||||||
div
|
|
||||||
nav#navbar
|
|
||||||
sib-router#navbar-router(default-route='members')
|
|
||||||
div(hidden)
|
|
||||||
sib-route(name='member', id-prefix=`${sdn}/members/`)
|
|
||||||
sib-route(name='project', id-prefix=`${sdn}/projects/`)
|
|
||||||
sib-route(name='channel', id-prefix=`${sdn}/channels/`)
|
|
||||||
div#menu-items
|
|
||||||
sib-route(name='members')
|
|
||||||
div
|
|
||||||
i.fa.fa-users
|
|
||||||
| Membres
|
|
||||||
sib-route(name='job-offers')
|
|
||||||
div
|
|
||||||
i.fa.fa-handshake-o
|
|
||||||
| Job offers
|
|
||||||
div
|
|
||||||
div
|
|
||||||
i.fa.fa-tasks
|
|
||||||
| Projets
|
|
||||||
sib-display(
|
|
||||||
data-src=`${sdn}/projects/`,
|
|
||||||
data-fields='name',
|
|
||||||
next='project'
|
|
||||||
)
|
|
||||||
div
|
|
||||||
div
|
|
||||||
i.fa.fa-tasks
|
|
||||||
| Channels
|
|
||||||
sib-display(
|
|
||||||
data-src=`${sdn}/channels/`,
|
|
||||||
data-fields='name',
|
|
||||||
next='channel'
|
|
||||||
)
|
|
||||||
//- sib-route(name='client-create')
|
|
||||||
i.fa.fa-plus(aria-hidden='true')
|
|
||||||
| New client
|
|
@ -1 +0,0 @@
|
|||||||
#project-chat.chat-view(style='display: none', bind-resources='')
|
|
@ -1,7 +0,0 @@
|
|||||||
#project-create(style='display: none')
|
|
||||||
sib-form(
|
|
||||||
data-src=`${sdn}/projects/`,
|
|
||||||
range-client=`${sdn}/clients/`,
|
|
||||||
widget-team='sib-form-multiple-dropdown',
|
|
||||||
range-team=`${sdn}/members/`
|
|
||||||
)
|
|
@ -1,7 +0,0 @@
|
|||||||
#project-edit(style='display: none')
|
|
||||||
sib-form(
|
|
||||||
range-client=`${sdn}/clients/`,
|
|
||||||
widget-team='sib-form-multiple-dropdown',
|
|
||||||
range-team=`${sdn}/members/`,
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
@ -1,16 +0,0 @@
|
|||||||
#project-profile(style='display: none')
|
|
||||||
sib-display(
|
|
||||||
data-fields='title, description, client',
|
|
||||||
set-title='number, name'
|
|
||||||
widget-client='hdapp-client',
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
||||||
h3 Team
|
|
||||||
sib-display.members-list-condensed(
|
|
||||||
id-suffix='team',
|
|
||||||
data-fields='avatar, user',
|
|
||||||
widget-avatar='sib-display-img',
|
|
||||||
widget-user='hdapp-userinfo',
|
|
||||||
next='member',
|
|
||||||
bind-resources=''
|
|
||||||
)
|
|
@ -1,15 +0,0 @@
|
|||||||
#project(style='display: none')
|
|
||||||
sib-router#project-router(default-route='project-profile')
|
|
||||||
sib-route(name='project-chat')
|
|
||||||
div Chat
|
|
||||||
sib-route(name='project-profile')
|
|
||||||
div Voir
|
|
||||||
sib-route(name='project-edit')
|
|
||||||
div Éditer
|
|
||||||
sib-route(name='project-create')
|
|
||||||
div Nouveau
|
|
||||||
#project-views-container
|
|
||||||
include project-chat.pug
|
|
||||||
include project-profile.pug
|
|
||||||
include project-edit.pug
|
|
||||||
include project-create.pug
|
|
@ -1,27 +0,0 @@
|
|||||||
script.
|
|
||||||
document.addEventListener("WebComponentsReady", function(event) {
|
|
||||||
class HDAppClient extends SIBWidget {
|
|
||||||
get template() {
|
|
||||||
|
|
||||||
return `<img name="${this.name}" src="${this.value.logo}"/>`;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
store.get(this.value).then( (value) => {
|
|
||||||
this._value = value;
|
|
||||||
this.innerHTML = this.template;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
customElements.define("hdapp-client", HDAppClient);
|
|
||||||
});
|
|
||||||
|
|
||||||
#projects(style='display: none')
|
|
||||||
h1 Projects
|
|
||||||
sib-display(
|
|
||||||
data-src=`${sdn}/projects/`,
|
|
||||||
data-fields='number, client, name',
|
|
||||||
widget-client='hdapp-client',
|
|
||||||
search-fields='number, name',
|
|
||||||
next='project'
|
|
||||||
)
|
|
@ -1,26 +0,0 @@
|
|||||||
#search-view
|
|
||||||
.content.container-fluid
|
|
||||||
ldp-display#search-results-members.list-condensed(
|
|
||||||
data-src=`${sdn}/members/`,
|
|
||||||
set-name='firstname, name-separator, lastname',
|
|
||||||
value-name-separator=' ',
|
|
||||||
data-fields='avatar, name',
|
|
||||||
widget-avatar='ldp-display-img',
|
|
||||||
search-fields='firstname, lastname',
|
|
||||||
next='member'
|
|
||||||
)
|
|
||||||
ldp-display#search-results-projects.list-condensed(
|
|
||||||
data-src=`${sdn}/projects/`,
|
|
||||||
set-title='number, after-num-separator, name',
|
|
||||||
value-after-num-separator=' - ',
|
|
||||||
data-fields='client, title',
|
|
||||||
widget-client='ldp-display-client',
|
|
||||||
search-fields='number, name',
|
|
||||||
next='project'
|
|
||||||
)
|
|
||||||
ldp-display#search-results-channels(
|
|
||||||
data-src=`${sdn}/channels/`,
|
|
||||||
data-fields='name',
|
|
||||||
search-fields='name',
|
|
||||||
next='channel'
|
|
||||||
)
|
|
@ -1,62 +0,0 @@
|
|||||||
#channel {
|
|
||||||
#channel-detail {
|
|
||||||
#channel-info {
|
|
||||||
display: block;
|
|
||||||
padding-top: 10px;
|
|
||||||
|
|
||||||
div[name="name"] {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ldp-display-member {
|
|
||||||
img {
|
|
||||||
width: 50px;
|
|
||||||
border-radius: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
padding-left: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#chat-members {
|
|
||||||
ldp-display {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
img {
|
|
||||||
width: 50px;
|
|
||||||
border-radius: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div[name="name"] {
|
|
||||||
display: flex;
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
div[name="admin"],
|
|
||||||
.section {
|
|
||||||
@extend %detail-section;
|
|
||||||
margin-top: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: $sm-with) {
|
|
||||||
#channel {
|
|
||||||
#channel-detail {
|
|
||||||
#channel-info {
|
|
||||||
ldp-display-client {
|
|
||||||
display: block;
|
|
||||||
float: right;
|
|
||||||
width: 300px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
#channels {
|
|
||||||
#channels-list {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
ldp-display {
|
|
||||||
@extend %td;
|
|
||||||
cursor: pointer;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
height: 65px;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: $hd-color-faded;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
ldp-display-div[name="name"] {
|
|
||||||
width: 130px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
|||||||
sib-chat {
|
|
||||||
//position: absolute;
|
|
||||||
border: 5px dotted red;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
margin: auto;
|
|
||||||
display: none;
|
|
||||||
min-height: 300px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chat-view {
|
|
||||||
sib-chat {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
.list-condensed {
|
|
||||||
ldp-display {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
img {
|
|
||||||
width: 50px;
|
|
||||||
border-radius: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
& > div[name="name"],
|
|
||||||
& > div[name="title"] {
|
|
||||||
display: flex;
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
#dashboard {
|
|
||||||
#to-user-profile {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
#crop-modal {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 1111;
|
|
||||||
top: $menu-height;
|
|
||||||
bottom: 0px;
|
|
||||||
left: 0px;
|
|
||||||
right: 0px;
|
|
||||||
background-color: black;
|
|
||||||
display: none;
|
|
||||||
|
|
||||||
&.cropping-mode {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.crop-wrapper {
|
|
||||||
img {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-bar {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
color: white;
|
|
||||||
font-size: 30px;
|
|
||||||
|
|
||||||
button {
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: white;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
i {
|
|
||||||
padding-top: 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
|||||||
@font-face {
|
|
||||||
font-family: 'bebas';
|
|
||||||
src: url('../../src/fonts/bebas/bebas.eot'); /* IE9 Compat Modes */
|
|
||||||
src: url('../../src/fonts/bebas/bebas.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
|
||||||
url('../../src/fonts/bebas/bebas.woff') format('woff'), /* Pretty Modern Browsers */
|
|
||||||
url('../../src/fonts/bebas/bebas.ttf') format('truetype'), /* Safari, Android, iOS */
|
|
||||||
url('../../src/fonts/bebas/bebas.svg#svgFontName') format('svg'); /* Legacy iOS */
|
|
||||||
}
|
|
@ -1,102 +0,0 @@
|
|||||||
ldp-display {
|
|
||||||
ldp-form {
|
|
||||||
display: block;
|
|
||||||
background-color: #F3F3F3;
|
|
||||||
padding: 15px;
|
|
||||||
box-sizing: content-box;
|
|
||||||
|
|
||||||
form {
|
|
||||||
@extend %self-clear;
|
|
||||||
|
|
||||||
ldp-form-text {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
position: absolute;
|
|
||||||
top: 3px;
|
|
||||||
bottom: 0px;
|
|
||||||
left: 10px;
|
|
||||||
margin: auto;
|
|
||||||
font-family: FontAwesome;
|
|
||||||
content: "\f002";
|
|
||||||
color: gray;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
text-transform: capitalize;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="text"] {
|
|
||||||
@extend %form-control;
|
|
||||||
@extend %form-control-sm;
|
|
||||||
|
|
||||||
padding-left: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="submit"],
|
|
||||||
input[type="reset"] {
|
|
||||||
@extend %btn;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="submit"] {
|
|
||||||
@extend %btn-primary;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="reset"] {
|
|
||||||
@extend %btn-link;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ldp-form.edit-form {
|
|
||||||
ldp-form-text {
|
|
||||||
@extend %form-group;
|
|
||||||
|
|
||||||
label {
|
|
||||||
text-transform: capitalize;
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
@extend %form-control;
|
|
||||||
@extend %form-control-sm;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="submit"] {
|
|
||||||
@extend %btn;
|
|
||||||
@extend %btn-primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sib-form {
|
|
||||||
sib-form-text {
|
|
||||||
|
|
||||||
label {
|
|
||||||
text-transform: capitalize;
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
margin-right: .5em;
|
|
||||||
padding: .375em .75em;
|
|
||||||
font-size: 1rem;
|
|
||||||
line-height: 1.5;
|
|
||||||
color: #495057;
|
|
||||||
background-color: #fff;
|
|
||||||
border: 1px solid #ced4da;
|
|
||||||
border-radius: .25rem;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="submit"], input[type="reset"] {
|
|
||||||
@extend %btn;
|
|
||||||
@extend %btn-primary;
|
|
||||||
margin-right: .5em;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
#header{
|
|
||||||
background-color: $col-alt-bg;
|
|
||||||
color: $col-alt-fg;
|
|
||||||
display: flex;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logo{
|
|
||||||
flex: 1 1 0px;
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
#offers-list {
|
|
||||||
> div {
|
|
||||||
> sib-display {
|
|
||||||
display: block;
|
|
||||||
margin: 1em 0;
|
|
||||||
box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.2);
|
|
||||||
background-color: #efefef;
|
|
||||||
padding: 0.5em 1em;
|
|
||||||
&:nth-child(odd) {
|
|
||||||
background-color: #e0e0e0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,123 +0,0 @@
|
|||||||
%detail-section {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#member-chat {
|
|
||||||
#conversejs {
|
|
||||||
margin: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#profiles-list,
|
|
||||||
#member-info {
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
&,
|
|
||||||
img {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div[name='name'] {
|
|
||||||
@extend %detail-section;
|
|
||||||
padding-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div[name='name'],
|
|
||||||
div[name='location'] {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#member-detail {
|
|
||||||
#member-info {
|
|
||||||
sib-display-mailto,
|
|
||||||
sib-display-tel {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
a[name='email'],
|
|
||||||
a[name='number'] {
|
|
||||||
&::before {
|
|
||||||
font-family: FontAwesome;
|
|
||||||
padding-right: 4px;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
a[name='email'] {
|
|
||||||
&::before {
|
|
||||||
content: '\f0e0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
a[name='number'] {
|
|
||||||
&::before {
|
|
||||||
content: '\f10b';
|
|
||||||
font-size: 22px;
|
|
||||||
padding-left: 3px;
|
|
||||||
padding-right: 7px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.section {
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
@extend %detail-section;
|
|
||||||
margin-top: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#member-skills {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
|
|
||||||
sib-display {
|
|
||||||
display: block;
|
|
||||||
background-color: $hd-color;
|
|
||||||
color: white;
|
|
||||||
border-radius: 100px;
|
|
||||||
padding: 3px 10px;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: $sm-with) {
|
|
||||||
#member-detail {
|
|
||||||
#member-info {
|
|
||||||
sib-display-img {
|
|
||||||
display: block;
|
|
||||||
float: right;
|
|
||||||
width: 300px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#member-info {
|
|
||||||
@extend %member;
|
|
||||||
}
|
|
||||||
|
|
||||||
.members-list-condensed{
|
|
||||||
display: block;
|
|
||||||
img{
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
border-radius: 100%;
|
|
||||||
object-fit: cover;
|
|
||||||
object-position: top;
|
|
||||||
}
|
|
||||||
label{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
>div>sib-display>div{
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
ul{
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,127 +0,0 @@
|
|||||||
%member {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
||||||
grid-gap: 1em;
|
|
||||||
label {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
> sib-display {
|
|
||||||
display: block;
|
|
||||||
position: relative;
|
|
||||||
box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.2);
|
|
||||||
padding: 0.5em;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&::before,
|
|
||||||
&::after {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
transform: scale3d(0, 0, 1);
|
|
||||||
transition: transform 0.3s ease-out 0s;
|
|
||||||
background: #eac1;
|
|
||||||
content: '';
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
transform-origin: left top;
|
|
||||||
}
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
transform-origin: right bottom;
|
|
||||||
|
|
||||||
background: #ace1;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
&::before,
|
|
||||||
&::after {
|
|
||||||
transform: scale3d(1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#profiles-list {
|
|
||||||
display: block;
|
|
||||||
sib-form {
|
|
||||||
display: block;
|
|
||||||
margin: 3em 0;
|
|
||||||
input[type='reset'] {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
div[name='header'] {
|
|
||||||
border-top: 2em solid $col-alt-bg;
|
|
||||||
border-bottom: 1px solid $col-alt-bg;
|
|
||||||
padding-bottom: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
> div {
|
|
||||||
@extend %member;
|
|
||||||
}
|
|
||||||
sib-display-img {
|
|
||||||
display: block;
|
|
||||||
position: relative;
|
|
||||||
width: 80%;
|
|
||||||
height: 0;
|
|
||||||
padding-bottom: 80%;
|
|
||||||
margin: 10%;
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 100%;
|
|
||||||
object-fit: cover;
|
|
||||||
object-position: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hdapp-userinfo {
|
|
||||||
display: block;
|
|
||||||
color: $pal-black;
|
|
||||||
font-size: 1.1em;
|
|
||||||
margin: 0.5em;
|
|
||||||
ul,
|
|
||||||
li {
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
div[name='pseudonym'] {
|
|
||||||
font-size: 0.8em;
|
|
||||||
div {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sib-display-lookuplist[name='skills'] {
|
|
||||||
ul,
|
|
||||||
li {
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
margin: 0 -0.25em;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
padding: 0.5em 1em;
|
|
||||||
border: 1px solid;
|
|
||||||
border-radius: 0.25em;
|
|
||||||
margin: 0.25em;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,127 +0,0 @@
|
|||||||
// #navbar{}
|
|
||||||
// #navbar-router{}
|
|
||||||
|
|
||||||
.btn-toggle {
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
background-color: $col-alt-bg;
|
|
||||||
color: $col-alt-fg;
|
|
||||||
font-size: 1.5em;
|
|
||||||
padding: 0.5em;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#navbar {
|
|
||||||
background-color: $col-dark-bg;
|
|
||||||
color: $col-dark-fg;
|
|
||||||
max-width: 16rem;
|
|
||||||
position: sticky;
|
|
||||||
top: 0;
|
|
||||||
height: 100%;
|
|
||||||
max-height: 100vh;
|
|
||||||
&.open {
|
|
||||||
transform: translateX(0);
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
//Shadow
|
|
||||||
$shadow-width: 4px;
|
|
||||||
$shadow-opacity: 0.35;
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
right: -$shadow-width;
|
|
||||||
width: $shadow-width;
|
|
||||||
background-image: linear-gradient(
|
|
||||||
to right,
|
|
||||||
rgba(0, 0, 0, $shadow-opacity),
|
|
||||||
transparent
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 32rem) {
|
|
||||||
.btn-toggle {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
#navbar {
|
|
||||||
transform: translateX(-100%);
|
|
||||||
transition: transform 0.5s ease;
|
|
||||||
position: absolute;
|
|
||||||
top: auto;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
#header {
|
|
||||||
padding-left: 3rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu-items {
|
|
||||||
> * {
|
|
||||||
display: block;
|
|
||||||
border-bottom: 1px solid rgba(white, 0.5);
|
|
||||||
sib-route {
|
|
||||||
display: block;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
&[active] {
|
|
||||||
background-color: $col-highlight-bg;
|
|
||||||
color: $col-highlight-fg;
|
|
||||||
}
|
|
||||||
> div {
|
|
||||||
width: max-content;
|
|
||||||
padding: 2em;
|
|
||||||
}
|
|
||||||
&[id-prefix] {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
> sib-display {
|
|
||||||
display: block;
|
|
||||||
font-size: 0.9em;
|
|
||||||
color: #aaa;
|
|
||||||
> div {
|
|
||||||
margin-bottom: 1.5em;
|
|
||||||
> sib-display {
|
|
||||||
cursor: pointer;
|
|
||||||
display: block;
|
|
||||||
padding: 0.5em 2em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* sub menu (right menu) */
|
|
||||||
|
|
||||||
#mainContainer > div {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
align-items: flex-start;
|
|
||||||
> sib-router {
|
|
||||||
display: block;
|
|
||||||
background-color: #ccc;
|
|
||||||
sib-route {
|
|
||||||
display: block;
|
|
||||||
> div {
|
|
||||||
position: relative;
|
|
||||||
padding: 1em 2em;
|
|
||||||
border-bottom: 1px solid #888;
|
|
||||||
}
|
|
||||||
&[active] {
|
|
||||||
font-weight: bold;
|
|
||||||
> div:before {
|
|
||||||
content: '<';
|
|
||||||
position: absolute;
|
|
||||||
transform: translateX(-150%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
> div {
|
|
||||||
margin: 0.5em;
|
|
||||||
flex: 1 1 0px;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,103 +0,0 @@
|
|||||||
%title{
|
|
||||||
color: $pal-black;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bootstrap classes
|
|
||||||
%btn {
|
|
||||||
display: inline-block;
|
|
||||||
font-weight: 400;
|
|
||||||
text-align: center;
|
|
||||||
white-space: nowrap;
|
|
||||||
vertical-align: middle;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
padding: .375rem .75rem;
|
|
||||||
font-size: 1rem;
|
|
||||||
line-height: 1.5;
|
|
||||||
border-radius: 100em;
|
|
||||||
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
|
|
||||||
|
|
||||||
&:not(:disabled):not(.disabled) {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
%btn-primary {
|
|
||||||
color: $col-highlight-fg;
|
|
||||||
background-color: $col-highlight-bg;
|
|
||||||
border-color: $col-highlight-bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
%btn-link {
|
|
||||||
font-weight: 400;
|
|
||||||
color: $col-highlight-bg;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
%form-group {
|
|
||||||
display: block;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
%form-control {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
padding: .375rem .75rem;
|
|
||||||
font-size: 1rem;
|
|
||||||
line-height: 1.5;
|
|
||||||
color: #495057;
|
|
||||||
background-color: #fff;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border: 1px solid #ced4da;
|
|
||||||
border-radius: .25rem;
|
|
||||||
transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
%form-control-sm {
|
|
||||||
padding: .25rem .5rem;
|
|
||||||
font-size: .875rem;
|
|
||||||
line-height: 1.5;
|
|
||||||
border-radius: .2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
%td {
|
|
||||||
padding: .65rem;
|
|
||||||
vertical-align: top;
|
|
||||||
border-top: 1px solid #dee2e6;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom mixins
|
|
||||||
%self-clear {
|
|
||||||
&::after {
|
|
||||||
content: "";
|
|
||||||
clear: both;
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin list-reset($deep:0) {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
display: block;
|
|
||||||
list-style: none;
|
|
||||||
@if ($deep == 0) {
|
|
||||||
> li {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
display: block;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
} @else {
|
|
||||||
ul,
|
|
||||||
ol,
|
|
||||||
li {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
display: block;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
#project-profile {
|
|
||||||
[name='title'] {
|
|
||||||
font-size: 1.5em;
|
|
||||||
padding: .5em 0;
|
|
||||||
margin-bottom: .5em;
|
|
||||||
border-bottom: 1px solid grey;
|
|
||||||
color: $pal-black;
|
|
||||||
sib-display-div,
|
|
||||||
div {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
sib-display-div[name='number'] {
|
|
||||||
padding-right: 0.5em;
|
|
||||||
&:before {
|
|
||||||
content: '#';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
#projects {
|
|
||||||
#projects-list {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
ldp-display {
|
|
||||||
@extend %td;
|
|
||||||
cursor: pointer;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
height: 65px;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: $hd-color-faded;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
ldp-display-div[name="number"] {
|
|
||||||
width: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ldp-display-client[name="client"] {
|
|
||||||
display: block;
|
|
||||||
width: 70px;
|
|
||||||
|
|
||||||
img {
|
|
||||||
width: 50px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ldp-display-div[name="name"] {
|
|
||||||
width: 150px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
|
|
||||||
#search-bar{
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
#search-icon{
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#search-icon,
|
|
||||||
#close-search-icon{
|
|
||||||
position: absolute;
|
|
||||||
right: .4em;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
margin: auto;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
#search-input {
|
|
||||||
-webkit-appearance: textfield;
|
|
||||||
border-radius: 10em;
|
|
||||||
padding: .2em .5em;
|
|
||||||
border: 1px solid $col-main-fg;
|
|
||||||
& ~ #close-search-icon{
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
&:focus{
|
|
||||||
& ~ #close-search-icon{
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
& ~ #search-icon{
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
* {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
font-family: Trebuchet MS, Lucida Grande, Lucida Sans Unicode, Lucida Sans,
|
|
||||||
Tahoma, sans-serif;
|
|
||||||
font-size: 16px;
|
|
||||||
|
|
||||||
background-color: $col-main-bg;
|
|
||||||
color: $col-main-fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#subContainer {
|
|
||||||
display: flex;
|
|
||||||
min-height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainContainer {
|
|
||||||
flex: 1 1 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2,h3,h4,h5,h6{
|
|
||||||
color: $pal-black;
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
// palette
|
|
||||||
$pal-white: #e8e8e8;
|
|
||||||
$pal-black: #222;
|
|
||||||
$pal-light-grey: #ddd;
|
|
||||||
$pal-dark-grey: #4a4a4a;
|
|
||||||
$pal-yellow: #fdc815;
|
|
||||||
|
|
||||||
// color
|
|
||||||
$col-main-fg: $pal-dark-grey;
|
|
||||||
$col-main-bg: $pal-white;
|
|
||||||
|
|
||||||
$col-alt-fg: $pal-dark-grey;
|
|
||||||
$col-alt-bg: $pal-light-grey;
|
|
||||||
|
|
||||||
$col-dark-fg: $pal-white;
|
|
||||||
$col-dark-bg: $pal-dark-grey;
|
|
||||||
|
|
||||||
$col-highlight-fg: $pal-black;
|
|
||||||
$col-highlight-bg: $pal-yellow;
|
|
||||||
|
|
||||||
// other color
|
|
||||||
$hd-color: rgb(253, 200, 21);
|
|
||||||
$hd-color-faded: rgba(253, 200, 21, 0.8);
|
|
||||||
$twitter-color: grey;
|
|
||||||
|
|
||||||
$menu-height: 43px;
|
|
||||||
$menu-font-size: 16px;
|
|
||||||
$vertical-menu-width: 50px;
|
|
||||||
$sm-with: 576px;
|
|
||||||
$md-with: 768px;
|
|
@ -1,23 +0,0 @@
|
|||||||
// Generic
|
|
||||||
@import "variables";
|
|
||||||
@import "fonts";
|
|
||||||
@import "mixins";
|
|
||||||
@import "classes";
|
|
||||||
@import "styles";
|
|
||||||
@import "forms";
|
|
||||||
|
|
||||||
// Specific
|
|
||||||
@import "header";
|
|
||||||
@import "menu";
|
|
||||||
|
|
||||||
@import "dashboard";
|
|
||||||
@import "members";
|
|
||||||
@import "member";
|
|
||||||
@import "job-offers";
|
|
||||||
@import "edit-profile";
|
|
||||||
@import "projects";
|
|
||||||
@import "project";
|
|
||||||
@import "channels";
|
|
||||||
@import "channel";
|
|
||||||
@import "search";
|
|
||||||
@import "chat";
|
|
@ -1,10 +0,0 @@
|
|||||||
from django.contrib import admin
|
|
||||||
from .models import Member, Skill, Project, Client, Cell, Channel, Role
|
|
||||||
|
|
||||||
admin.site.register(Member)
|
|
||||||
admin.site.register(Skill)
|
|
||||||
admin.site.register(Project)
|
|
||||||
admin.site.register(Client)
|
|
||||||
admin.site.register(Cell)
|
|
||||||
admin.site.register(Channel)
|
|
||||||
admin.site.register(Role)
|
|
@ -1,83 +0,0 @@
|
|||||||
from django.db import models
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.db.models.signals import post_save
|
|
||||||
from django.dispatch import receiver
|
|
||||||
|
|
||||||
|
|
||||||
class Member(models.Model):
|
|
||||||
avatar = models.URLField(blank=True)
|
|
||||||
available = models.NullBooleanField(blank=True)
|
|
||||||
bio = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
cell = models.ForeignKey("Cell", on_delete=models.DO_NOTHING, blank=True, null=True)
|
|
||||||
jabberID = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
jabberRoom = models.NullBooleanField(blank=True)
|
|
||||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
|
||||||
number = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
projects = models.ManyToManyField("Project", blank=True)
|
|
||||||
pseudo = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
roles = models.ManyToManyField("Role", blank=True)
|
|
||||||
skills = models.ManyToManyField("Skill", blank=True)
|
|
||||||
website = models.URLField(blank=True)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return 'Profil de {} '.format(self.user.get_full_name())
|
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
|
||||||
def create_user_profile(sender, instance, created, **kwargs):
|
|
||||||
if created:
|
|
||||||
Member.objects.create(user=instance)
|
|
||||||
else:
|
|
||||||
instance.member.save()
|
|
||||||
|
|
||||||
|
|
||||||
class Skill(models.Model):
|
|
||||||
name = models.CharField(max_length=255, default='')
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class Role(models.Model):
|
|
||||||
name = models.CharField(max_length=255, default='')
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class Project(models.Model):
|
|
||||||
name = models.CharField(max_length=255, default='')
|
|
||||||
number = models.PositiveIntegerField(default='0', blank=True)
|
|
||||||
client = models.ForeignKey("Client", on_delete=models.DO_NOTHING)
|
|
||||||
team = models.ManyToManyField("Member", blank=True)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class Client(models.Model):
|
|
||||||
name = models.CharField(max_length=255, default='')
|
|
||||||
address = models.CharField(max_length=255, default='')
|
|
||||||
logo = models.URLField()
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class Cell(models.Model):
|
|
||||||
name = models.CharField(max_length=255, default='')
|
|
||||||
city = models.CharField(max_length=255, default='')
|
|
||||||
country = models.CharField(max_length=255, default='')
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class Channel(models.Model):
|
|
||||||
name = models.CharField(max_length=255, default='')
|
|
||||||
description = models.CharField(max_length=255, default='')
|
|
||||||
members = models.ManyToManyField("Member", blank=True)
|
|
||||||
owner = models.ForeignKey("Member", related_name="owned_chatrooms", on_delete=models.DO_NOTHING)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
"""hdappserver URL Configuration
|
|
||||||
|
|
||||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
|
||||||
https://docs.djangoproject.com/en/1.11/topics/http/urls/
|
|
||||||
Examples:
|
|
||||||
Function views
|
|
||||||
1. Add an import: from my_app import views
|
|
||||||
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
|
|
||||||
Class-based views
|
|
||||||
1. Add an import: from other_app.views import Home
|
|
||||||
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
|
|
||||||
Including another URLconf
|
|
||||||
1. Import the include() function: from django.conf.urls import url, include
|
|
||||||
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
|
|
||||||
"""
|
|
||||||
from django.conf.urls import url, include
|
|
||||||
from django.contrib import admin
|
|
||||||
from django.views.generic import TemplateView
|
|
||||||
from djangoldp.views import LDPViewSet
|
|
||||||
from django.conf import settings
|
|
||||||
from .models import Member, Skill, Project, Client, Cell, Channel, Role
|
|
||||||
from .views import userinfocustom
|
|
||||||
|
|
||||||
urlpatterns = [
|
|
||||||
url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),
|
|
||||||
url(r'^accounts/', include('django.contrib.auth.urls')),
|
|
||||||
url(r'^admin/', admin.site.urls),
|
|
||||||
url(r'^channels/', LDPViewSet.urls(model=Channel, nested_field="members")),
|
|
||||||
url(r'^cells/', LDPViewSet.urls(model=Cell)),
|
|
||||||
url(r'^clients/', LDPViewSet.urls(model=Client)),
|
|
||||||
url(r'^members/', LDPViewSet.urls(model=Member, nested_field="skills")),
|
|
||||||
url(r'^projects/', LDPViewSet.urls(model=Project, nested_field="team")),
|
|
||||||
url(r'^skills/', LDPViewSet.urls(model=Skill)),
|
|
||||||
url(r'^openid/userinfo', userinfocustom),
|
|
||||||
url(r'^openid/', include('oidc_provider.urls', namespace='oidc_provider')),
|
|
||||||
url(r'^role/', LDPViewSet.urls(model=Role)),
|
|
||||||
url(r'^users/', LDPViewSet.urls(model=settings.AUTH_USER_MODEL)),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user