refactoring
This commit is contained in:
parent
874a8c636f
commit
324a5aa347
12
.babelrc
Normal file
12
.babelrc
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"presets": [
|
||||
[
|
||||
"@babel/preset-env",
|
||||
{
|
||||
"targets": {
|
||||
"browsers": ["last 2 versions", "ie >= 9"]
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/node_modules
|
||||
/www/index.html
|
||||
/www/styles/
|
||||
/www/scripts/
|
||||
/www/lib
|
||||
!/www/lib/sib-core
|
||||
!/www/lib/sib-router
|
||||
!/www/lib/sib-chat
|
9
.gitmodules
vendored
Normal file
9
.gitmodules
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
[submodule "www/lib/sib-core"]
|
||||
path = www/lib/sib-core
|
||||
url = git@git.happy-dev.fr:startinblox/sib-core.git
|
||||
[submodule "www/lib/sib-router"]
|
||||
path = www/lib/sib-router
|
||||
url = git@git.happy-dev.fr:startinblox/sib-router.git
|
||||
[submodule "www/lib/sib-chat"]
|
||||
path = www/lib/sib-chat
|
||||
url = git@git.happy-dev.fr:startinblox/sib-chat.git
|
56
Makefile
Normal file
56
Makefile
Normal file
@ -0,0 +1,56 @@
|
||||
SCRIPT_SRC := $(wildcard src/scripts/*.js)
|
||||
|
||||
SCRIPT_DEST := $(SCRIPT_SRC:src/%=www/%)
|
||||
|
||||
default: build
|
||||
|
||||
clean:
|
||||
git clean -fXd
|
||||
|
||||
|
||||
install: node_modules copy_lib submodules
|
||||
|
||||
submodules:
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
build: www/index.html www/styles/index.css $(SCRIPT_DEST)
|
||||
|
||||
watch:
|
||||
@echo 'watching for change'
|
||||
@echo 'press Ctrl+C to stop'
|
||||
@while true; do \
|
||||
$(MAKE) --silent build; \
|
||||
sleep 0.5; \
|
||||
done
|
||||
|
||||
serve:
|
||||
node server
|
||||
|
||||
# npm
|
||||
node_modules:
|
||||
npm install
|
||||
|
||||
# vendor lib
|
||||
copy_lib:
|
||||
@node copy_lib.js
|
||||
|
||||
# pug
|
||||
www/index.html: src/index.pug $(wildcard src/*.pug src/*/*.pug)
|
||||
@echo pug: $< ➜ $@
|
||||
@node_modules/.bin/pug --pretty $< --out $(dir $@) || touch $@
|
||||
|
||||
# sass
|
||||
www/styles/index.css: src/styles/index.scss $(wildcard src/*.scss src/*/*.scss)
|
||||
@echo sass: $< ➜ $@
|
||||
@node_modules/.bin/node-sass $< $@ --source-map true || touch $@
|
||||
|
||||
# babel
|
||||
www/%.js: src/%.js
|
||||
@echo babel: $< ➜ $@
|
||||
@mkdir -p $(dir $@)
|
||||
@node_modules/.bin/babel $< --out-file $@ --source-maps || touch $@
|
||||
|
||||
.PHONY: default install submodules copy_lib build watch serve clean
|
||||
|
||||
|
20
copy_lib.js
Normal file
20
copy_lib.js
Normal file
@ -0,0 +1,20 @@
|
||||
const { basename, join, resolve } = require('path');
|
||||
const { readFileSync, lstatSync } = require('fs');
|
||||
const { exec } = require('child_process');
|
||||
|
||||
const distDir = 'www/lib';
|
||||
|
||||
const filelist = readFileSync('lib_list.txt', 'utf-8').split(/\r?\n/);
|
||||
|
||||
exec(`mkdir -p ${distDir}`, () => {
|
||||
filelist.forEach(path => {
|
||||
path = resolve(path);
|
||||
const filename = basename(path);
|
||||
const dest = lstatSync(path).isDirectory()
|
||||
? distDir
|
||||
: join(distDir, filename);
|
||||
const cmd = `rsync -ru ${path} ${dest}`;
|
||||
console.log(cmd);
|
||||
exec(cmd);
|
||||
});
|
||||
});
|
3
lib_list.txt
Normal file
3
lib_list.txt
Normal file
@ -0,0 +1,3 @@
|
||||
node_modules/normalize.css/normalize.css
|
||||
node_modules/@webcomponents/webcomponentsjs
|
||||
node_modules/@webcomponents/html-imports/src/html-imports.js
|
20
package.json
Normal file
20
package.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "hd-app",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.1.0",
|
||||
"@babel/preset-env": "^7.1.0",
|
||||
"@babel/cli": "^7.1.0",
|
||||
"node-sass": "^4.9.3",
|
||||
"pug-cli": "^1.0.0-alpha6",
|
||||
"browser-sync": "^2.24.7",
|
||||
"express": "^4.16.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@webcomponents/html-imports": "^1.2.0",
|
||||
"@webcomponents/webcomponentsjs": "^1.2.7",
|
||||
"normalize.css": "^8.0.0",
|
||||
"simple-line-icons": "^2.4.1"
|
||||
}
|
||||
}
|
22
server.js
Normal file
22
server.js
Normal file
@ -0,0 +1,22 @@
|
||||
const port = 9000;
|
||||
const distPath = 'www';
|
||||
// express server
|
||||
const { join } = require('path');
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
app
|
||||
.use(express.static(distPath))
|
||||
.use('/src', express.static(join(__dirname, 'src')))
|
||||
.get(/^[^.]*$/, (req, rep) =>
|
||||
rep.sendFile(join(__dirname, distPath, '/index.html')),
|
||||
)
|
||||
.listen(port);
|
||||
// browser sync
|
||||
const bs = require('browser-sync').create();
|
||||
bs.init({
|
||||
files: [distPath + '/**/*'],
|
||||
proxy: `http://localhost:${port}`,
|
||||
open: false,
|
||||
notify: false,
|
||||
//tunnel: true,
|
||||
});
|
27
src/dependencies.pug
Normal file
27
src/dependencies.pug
Normal file
@ -0,0 +1,27 @@
|
||||
// Scripts
|
||||
script(src="lib/webcomponentsjs/webcomponents-loader.js")
|
||||
//- script(src="lib/html-imports.js")
|
||||
|
||||
//- script(src="https://unpkg.com/@webcomponents/webcomponentsjs@1.2.7/webcomponents-loader.js")
|
||||
|
||||
script(src="scripts/index.js")
|
||||
|
||||
// Stylesheets
|
||||
link(rel='stylesheet', href='lib/normalize.css')
|
||||
link(rel='stylesheet', href="styles/index.css")
|
||||
link(
|
||||
rel='stylesheet'
|
||||
href='https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i&subset=latin-ext'
|
||||
)
|
||||
|
||||
// Web components
|
||||
|
||||
//- local
|
||||
link(rel='import', href='lib/sib-core/sib-display.html')
|
||||
link(rel='import', href='lib/sib-router/sib-router.html')
|
||||
//-link(rel='import', href='lib/sib-chat/sib-chat.html')
|
||||
|
||||
//- cdn
|
||||
link(rel='import', href="https://cdn.happy-dev.fr/sib-core/sib-display.html")
|
||||
link(rel='import', href="https://cdn.happy-dev.fr/sib-router/sib-router.html")
|
||||
//- link(rel='import', href="https://cdn.happy-dev.fr/sib-chat/sib-chat.html")
|
36
src/index.pug
Normal file
36
src/index.pug
Normal file
@ -0,0 +1,36 @@
|
||||
include variables.pug
|
||||
<!DOCTYPE html>
|
||||
html(lang="en")
|
||||
head
|
||||
meta(charset="UTF-8")
|
||||
title HD App
|
||||
meta(name="viewport", content="width=device-width, initial-scale=1.0")
|
||||
meta(http-equiv="X-UA-Compatible", content="ie=edge")
|
||||
include dependencies.pug
|
||||
body
|
||||
header#header
|
||||
#logo
|
||||
img(src="img/logo.png" width=166/2 height=48/2)
|
||||
#subContainer
|
||||
include menu.pug
|
||||
main#mainContainer
|
||||
//- #dashboard(hidden)
|
||||
include pages/dashboard.pug
|
||||
#members(hidden)
|
||||
include pages/members.pug
|
||||
#member(hidden)
|
||||
div include pages/member.pug
|
||||
#job-offers(hidden)
|
||||
include pages/job-offers.pug
|
||||
#projects(hidden)
|
||||
include pages/projects.pug
|
||||
#project(hidden)
|
||||
include pages/project.pug
|
||||
//- #client-creation(hidden)
|
||||
include pages/client-creation.pug
|
||||
#channels(hidden)
|
||||
include pages/channels.pug
|
||||
#channel(hidden)
|
||||
include pages/channel.pug
|
||||
//- #search(hidden)
|
||||
include pages/search.pug
|
27
src/menu.pug
Normal file
27
src/menu.pug
Normal file
@ -0,0 +1,27 @@
|
||||
.btn-toggle
|
||||
div
|
||||
nav#navbar
|
||||
sib-router#navbar-router(default-route='members')
|
||||
div(hidden)
|
||||
div#menu-items
|
||||
sib-route(name='members')
|
||||
div.icon-people Membres
|
||||
sib-route(hidden, name='member', id-prefix=`${sdn}/members/`)
|
||||
sib-route(name='job-offers')
|
||||
div.icon-briefcase Job offers
|
||||
div
|
||||
div.icon-folder-alt Projets
|
||||
sib-display(
|
||||
data-src=`${sdn}/projects/`,
|
||||
data-fields='name',
|
||||
next='project'
|
||||
)
|
||||
sib-route(hidden, name='project', id-prefix=`${sdn}/projects/`)
|
||||
div
|
||||
div.icon-bubbles Channels
|
||||
sib-display(
|
||||
data-src=`${sdn}/channels/`,
|
||||
data-fields='name',
|
||||
next='channel'
|
||||
)
|
||||
sib-route(hidden, name='channel', id-prefix=`${sdn}/channels/`)
|
2
src/pages/channel-chat.pug
Normal file
2
src/pages/channel-chat.pug
Normal file
@ -0,0 +1,2 @@
|
||||
#channel-chat.chat-view(style='display: none', bind-resources='')
|
||||
sib-chat(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='')
|
7
src/pages/channel-create.pug
Normal file
7
src/pages/channel-create.pug
Normal file
@ -0,0 +1,7 @@
|
||||
#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/`
|
||||
)
|
7
src/pages/channel-edit.pug
Normal file
7
src/pages/channel-edit.pug
Normal file
@ -0,0 +1,7 @@
|
||||
#channel-edit(style='display: none')
|
||||
sib-form(
|
||||
range-owner=`${sdn}/members/`,
|
||||
widget-members='sib-form-multiple-dropdown',
|
||||
range-members=`${sdn}/members/`,
|
||||
bind-resources=''
|
||||
)
|
38
src/pages/channel-profile.pug
Normal file
38
src/pages/channel-profile.pug
Normal file
@ -0,0 +1,38 @@
|
||||
script.
|
||||
document.addEventListener('WebComponentsReady', function(event) {
|
||||
document.addEventListener("HTMLImportsLoaded", 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=''
|
||||
)
|
||||
|
15
src/pages/channel.pug
Normal file
15
src/pages/channel.pug
Normal file
@ -0,0 +1,15 @@
|
||||
#channel(style='display: none')
|
||||
sib-router#channel-router(default-route='channel-profile')
|
||||
sib-route(name='channel-chat')
|
||||
div Chat
|
||||
sib-route(name='channel-profile')
|
||||
div Info
|
||||
sib-route(name='channel-edit')
|
||||
div Éditer
|
||||
sib-route(name='channel-create')
|
||||
div Nouveau
|
||||
#network-views-container
|
||||
include channel-chat.pug
|
||||
include channel-profile.pug
|
||||
include channel-edit.pug
|
||||
include channel-create.pug
|
7
src/pages/channels.pug
Normal file
7
src/pages/channels.pug
Normal file
@ -0,0 +1,7 @@
|
||||
#channels(style='display: none')
|
||||
sib-display#channels-list(
|
||||
data-src=`${sdn}/channels/`,
|
||||
data-fields='name, description',
|
||||
search-fields='name, description',
|
||||
next='channel'
|
||||
)
|
40
src/pages/job-offers.pug
Normal file
40
src/pages/job-offers.pug
Normal file
@ -0,0 +1,40 @@
|
||||
script.
|
||||
document.addEventListener('WebComponentsReady', function(event) {
|
||||
document.addEventListener('HTMLImportsLoaded', 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);
|
||||
});
|
||||
});
|
||||
|
||||
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'
|
||||
)
|
2
src/pages/member-chat.pug
Normal file
2
src/pages/member-chat.pug
Normal file
@ -0,0 +1,2 @@
|
||||
#member-chat.chat-view(style='display: none', bind-resources='')
|
||||
sib-chat(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='')
|
97
src/pages/member-edit.pug
Normal file
97
src/pages/member-edit.pug
Normal file
@ -0,0 +1,97 @@
|
||||
// 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();
|
||||
});
|
13
src/pages/member-profile.pug
Normal file
13
src/pages/member-profile.pug
Normal file
@ -0,0 +1,13 @@
|
||||
#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=''
|
||||
)
|
12
src/pages/member.pug
Normal file
12
src/pages/member.pug
Normal file
@ -0,0 +1,12 @@
|
||||
#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
src/pages/members.pug
Normal file
1
src/pages/members.pug
Normal file
@ -0,0 +1 @@
|
||||
div member
|
2
src/pages/project-chat.pug
Normal file
2
src/pages/project-chat.pug
Normal file
@ -0,0 +1,2 @@
|
||||
#project-chat.chat-view(style='display: none', bind-resources='')
|
||||
sib-chat(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='')
|
7
src/pages/project-create.pug
Normal file
7
src/pages/project-create.pug
Normal file
@ -0,0 +1,7 @@
|
||||
#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/`
|
||||
)
|
7
src/pages/project-edit.pug
Normal file
7
src/pages/project-edit.pug
Normal file
@ -0,0 +1,7 @@
|
||||
#project-edit(style='display: none')
|
||||
sib-form(
|
||||
range-client=`${sdn}/clients/`,
|
||||
widget-team='sib-form-multiple-dropdown',
|
||||
range-team=`${sdn}/members/`,
|
||||
bind-resources=''
|
||||
)
|
16
src/pages/project-profile.pug
Normal file
16
src/pages/project-profile.pug
Normal file
@ -0,0 +1,16 @@
|
||||
#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=''
|
||||
)
|
15
src/pages/project.pug
Normal file
15
src/pages/project.pug
Normal file
@ -0,0 +1,15 @@
|
||||
#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
|
29
src/pages/projects.pug
Normal file
29
src/pages/projects.pug
Normal file
@ -0,0 +1,29 @@
|
||||
script.
|
||||
document.addEventListener('WebComponentsReady', function(event) {
|
||||
document.addEventListener("HTMLImportsLoaded", 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'
|
||||
)
|
61
src/scripts/hd-app.js
Normal file
61
src/scripts/hd-app.js
Normal file
@ -0,0 +1,61 @@
|
||||
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');
|
||||
});
|
||||
});
|
15
src/scripts/index.js
Normal file
15
src/scripts/index.js
Normal file
@ -0,0 +1,15 @@
|
||||
document.addEventListener('DOMContentLoaded', function(event) {
|
||||
// Constants declaration
|
||||
const navBar = document.querySelector('#navbar');
|
||||
const btnToggle = document.querySelector('.btn-toggle');
|
||||
if (!navBar || !btnToggle) return;
|
||||
|
||||
btnToggle.addEventListener('click', e => {
|
||||
navBar.classList.toggle('open');
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
window.addEventListener('click', e => {
|
||||
navBar.classList.remove('open');
|
||||
});
|
||||
});
|
0
src/styles/functions.scss
Normal file
0
src/styles/functions.scss
Normal file
264
src/styles/icons.scss
Normal file
264
src/styles/icons.scss
Normal file
@ -0,0 +1,264 @@
|
||||
@font-face {
|
||||
font-family: 'simple-line-icons';
|
||||
src: url('../fonts/simple-line-icons.eot?23594131');
|
||||
src: url('../fonts/simple-line-icons.eot?23594131#iefix')
|
||||
format('embedded-opentype'),
|
||||
url('../fonts/simple-line-icons.woff2?23594131') format('woff2'),
|
||||
url('../fonts/simple-line-icons.woff?23594131') format('woff'),
|
||||
url('../fonts/simple-line-icons.ttf?23594131') format('truetype'),
|
||||
url('../fonts/simple-line-icons.svg?23594131#simple-line-icons')
|
||||
format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
|
||||
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
|
||||
/*
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@font-face {
|
||||
font-family: 'simple-line-icons';
|
||||
src: url('../font/simple-line-icons.svg?23594131#simple-line-icons') format('svg');
|
||||
}
|
||||
}
|
||||
*/
|
||||
%icon,
|
||||
[class^='icon-']:before,
|
||||
[class*=' icon-']:before {
|
||||
font-family: 'simple-line-icons';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
speak: none;
|
||||
|
||||
display: inline-block;
|
||||
text-decoration: inherit;
|
||||
width: 1em;
|
||||
margin-right: 0.2em;
|
||||
text-align: center;
|
||||
/* opacity: .8; */
|
||||
|
||||
/* For safety - reset parent styles, that can break glyph codes*/
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
|
||||
/* fix buttons height, for twitter bootstrap */
|
||||
line-height: 1em;
|
||||
|
||||
/* Animation center compensation - margins should be symmetric */
|
||||
/* remove if not needed */
|
||||
margin-left: 0.2em;
|
||||
|
||||
/* you can be more comfortable with increased icons size */
|
||||
/* font-size: 120%; */
|
||||
|
||||
/* Font smoothing. That was taken from TWBS */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/* Uncomment for 3D effect */
|
||||
// text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3);
|
||||
}
|
||||
|
||||
$icons: (
|
||||
user-female: '\e000',
|
||||
people: '\e001',
|
||||
user-follow: '\e002',
|
||||
user-following: '\e003',
|
||||
user-unfollow: '\e004',
|
||||
user: '\e005',
|
||||
trophy: '\e006',
|
||||
speedometer: '\e007',
|
||||
social-youtube: '\e008',
|
||||
social-twitter: '\e009',
|
||||
social-tumblr: '\e00a',
|
||||
social-facebook: '\e00b',
|
||||
social-dropbox: '\e00c',
|
||||
social-dribbble: '\e00d',
|
||||
shield: '\e00e',
|
||||
screen-tablet: '\e00f',
|
||||
screen-smartphone: '\e010',
|
||||
screen-desktop: '\e011',
|
||||
plane: '\e012',
|
||||
notebook: '\e013',
|
||||
mustache: '\e014',
|
||||
mouse: '\e015',
|
||||
magnet: '\e016',
|
||||
magic-wand: '\e017',
|
||||
hourglass: '\e018',
|
||||
graduation: '\e019',
|
||||
ghost: '\e01a',
|
||||
game-controller: '\e01b',
|
||||
fire: '\e01c',
|
||||
eyeglass: '\e01d',
|
||||
envelope-open: '\e01e',
|
||||
envolope-letter: '\e01f',
|
||||
energy: '\e020',
|
||||
emotsmile: '\e021',
|
||||
disc: '\e022',
|
||||
cursor-move: '\e023',
|
||||
crop: '\e024',
|
||||
credit-card: '\e025',
|
||||
chemistry: '\e026',
|
||||
bell: '\e027',
|
||||
badge: '\e028',
|
||||
anchor: '\e029',
|
||||
wallet: '\e02a',
|
||||
vector: '\e02b',
|
||||
speech: '\e02c',
|
||||
puzzle: '\e02d',
|
||||
printer: '\e02e',
|
||||
present: '\e02f',
|
||||
playlist: '\e030',
|
||||
pin: '\e031',
|
||||
picture: '\e032',
|
||||
map: '\e033',
|
||||
layers: '\e034',
|
||||
handbag: '\e035',
|
||||
globe-alt: '\e036',
|
||||
globe: '\e037',
|
||||
frame: '\e038',
|
||||
folder-alt: '\e039',
|
||||
film: '\e03a',
|
||||
feed: '\e03b',
|
||||
earphones-alt: '\e03c',
|
||||
earphones: '\e03d',
|
||||
drop: '\e03e',
|
||||
drawar: '\e03f',
|
||||
docs: '\e040',
|
||||
directions: '\e041',
|
||||
direction: '\e042',
|
||||
diamond: '\e043',
|
||||
cup: '\e044',
|
||||
compass: '\e045',
|
||||
call-out: '\e046',
|
||||
call-in: '\e047',
|
||||
call-end: '\e048',
|
||||
calculator: '\e049',
|
||||
bubbles: '\e04a',
|
||||
briefcase: '\e04b',
|
||||
book-open: '\e04c',
|
||||
basket-loaded: '\e04d',
|
||||
basket: '\e04e',
|
||||
bag: '\e04f',
|
||||
action-undo: '\e050',
|
||||
action-redo: '\e051',
|
||||
wrench: '\e052',
|
||||
umbrella: '\e053',
|
||||
trash: '\e054',
|
||||
tag: '\e055',
|
||||
support: '\e056',
|
||||
size-fullscreen: '\e057',
|
||||
size-actual: '\e058',
|
||||
shuffle: '\e059',
|
||||
share-alt: '\e05a',
|
||||
share: '\e05b',
|
||||
rocket: '\e05c',
|
||||
question: '\e05d',
|
||||
pie-chart: '\e05e',
|
||||
pencil: '\e05f',
|
||||
note: '\e060',
|
||||
music-tone-alt: '\e061',
|
||||
music-tone: '\e062',
|
||||
microphone: '\e063',
|
||||
loop: '\e064',
|
||||
logout: '\e065',
|
||||
login: '\e066',
|
||||
list: '\e067',
|
||||
like: '\e068',
|
||||
home: '\e069',
|
||||
grid: '\e06a',
|
||||
graph: '\e06b',
|
||||
equalizer: '\e06c',
|
||||
dislike: '\e06d',
|
||||
cursor: '\e06e',
|
||||
control-start: '\e06f',
|
||||
control-rewind: '\e070',
|
||||
control-play: '\e071',
|
||||
control-pause: '\e072',
|
||||
control-forward: '\e073',
|
||||
control-end: '\e074',
|
||||
calender: '\e075',
|
||||
bulb: '\e076',
|
||||
chart: '\e077',
|
||||
arrow-up-circle: '\e078',
|
||||
arrow-right-circle: '\e079',
|
||||
arrow-left-circle: '\e07a',
|
||||
arrow-down-circle: '\e07b',
|
||||
ban: '\e07c',
|
||||
bubble: '\e07d',
|
||||
camrecorder: '\e07e',
|
||||
camera: '\e07f',
|
||||
check: '\e080',
|
||||
clock: '\e081',
|
||||
close: '\e082',
|
||||
cloud-download: '\e083',
|
||||
cloud-upload: '\e084',
|
||||
doc: '\e085',
|
||||
envolope: '\e086',
|
||||
eye: '\e087',
|
||||
flag: '\e088',
|
||||
folder: '\e089',
|
||||
heart: '\e08a',
|
||||
info: '\e08b',
|
||||
key: '\e08c',
|
||||
link: '\e08d',
|
||||
lock: '\e08e',
|
||||
lock-open: '\e08f',
|
||||
magnifier: '\e090',
|
||||
magnifier-add: '\e091',
|
||||
magnifier-remove: '\e092',
|
||||
paper-clip: '\e093',
|
||||
paper-plane: '\e094',
|
||||
plus: '\e095',
|
||||
location-pin: '\e096',
|
||||
power: '\e097',
|
||||
refresh: '\e098',
|
||||
reload: '\e099',
|
||||
settings: '\e09a',
|
||||
star: '\e09b',
|
||||
symble-female: '\e09c',
|
||||
symbol-male: '\e09d',
|
||||
target: '\e09e',
|
||||
volume-1: '\e09f',
|
||||
volume-2: '\e0a0',
|
||||
volume-off: '\e0a1',
|
||||
phone: '\e600',
|
||||
menu: '\e601',
|
||||
options-vertical: '\e602',
|
||||
options: '\e603',
|
||||
arrow-down: '\e604',
|
||||
arrow-left: '\e605',
|
||||
arrow-right: '\e606',
|
||||
arrow-up: '\e607',
|
||||
paypal: '\e608',
|
||||
social-instagram: '\e609',
|
||||
social-linkedin: '\e60a',
|
||||
social-pintarest: '\e60b',
|
||||
social-github: '\e60c',
|
||||
social-google: '\e60d',
|
||||
social-reddit: '\e60e',
|
||||
social-skype: '\e60f',
|
||||
social-behance: '\e610',
|
||||
social-foursqare: '\e611',
|
||||
social-soundcloud: '\e612',
|
||||
social-spotify: '\e613',
|
||||
social-stumbleupon: '\e614',
|
||||
minus: '\e615',
|
||||
organization: '\e616',
|
||||
exclamation: '\e617',
|
||||
social-vkontakte: '\e618',
|
||||
event: '\e619',
|
||||
social-steam: '\e620',
|
||||
);
|
||||
|
||||
|
||||
@each $name, $code in $icons {
|
||||
.icon-#{$name} {
|
||||
&:before {
|
||||
content: $code;
|
||||
}
|
||||
}
|
||||
}
|
||||
@mixin icon($code) {
|
||||
@extend %icon;
|
||||
@extend .icon-#{$code};
|
||||
}
|
10
src/styles/index.scss
Normal file
10
src/styles/index.scss
Normal file
@ -0,0 +1,10 @@
|
||||
@charset "UTF-8";
|
||||
@import
|
||||
'icons',
|
||||
'variables',
|
||||
'functions',
|
||||
'mixins',
|
||||
'main';
|
||||
|
||||
@import 'menu'
|
||||
|
41
src/styles/main.scss
Normal file
41
src/styles/main.scss
Normal file
@ -0,0 +1,41 @@
|
||||
@import 'variables';
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: Open Sans, sans-serif;
|
||||
font-size: 13px;
|
||||
background-color: $color-grey-light;
|
||||
}
|
||||
|
||||
#header {
|
||||
background-color: $color-white;
|
||||
position: relative;
|
||||
@include border-shadow(bottom);
|
||||
border: solid $color-white;
|
||||
border-width: 1px 0;
|
||||
}
|
||||
|
||||
#logo {
|
||||
margin: 1.4em;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#subContainer {
|
||||
display: flex;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
#mainContainer {
|
||||
flex: 1 1 0px;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h5,h6{
|
||||
color: $color-black;
|
||||
}
|
133
src/styles/menu.scss
Normal file
133
src/styles/menu.scss
Normal file
@ -0,0 +1,133 @@
|
||||
// #navbar{}
|
||||
// #navbar-router{}
|
||||
|
||||
.btn-toggle {
|
||||
@include icon('menu');
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: $color-white;
|
||||
color: $color-black;
|
||||
font-size: 2em;
|
||||
padding: 0.72em;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#navbar {
|
||||
background-color: $color-white;
|
||||
color: $color-grey;
|
||||
max-width: 16rem;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
max-height: 100vh;
|
||||
&.open {
|
||||
transform: translateX(0);
|
||||
}
|
||||
@include border-shadow(right);
|
||||
}
|
||||
|
||||
@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: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
#menu-items {
|
||||
> * {
|
||||
display: block;
|
||||
border-top: 1px solid $color-grey;
|
||||
&:last-child {
|
||||
border-bottom: 1px solid $color-grey;
|
||||
}
|
||||
sib-route {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
cursor: pointer;
|
||||
&[active] {
|
||||
color: $color-black;
|
||||
> div:before {
|
||||
background-color: $color-yellow-light;
|
||||
transform: perspective(1000px) translateZ(1px) scale(0.8);
|
||||
}
|
||||
}
|
||||
> div {
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
&:before {
|
||||
display: block;
|
||||
margin: -0.5em auto 0;
|
||||
font-size: 2em;
|
||||
border-radius: 100%;
|
||||
padding: 0.7em;
|
||||
transform: perspective(1000px) translateZ(1px) scale(1);
|
||||
will-change: transform;
|
||||
transition:
|
||||
all .3s ease,
|
||||
transform .3s cubic-bezier(0.175, 0.885, 0.32, 1.4);
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
149
src/styles/mixins.scss
Normal file
149
src/styles/mixins.scss
Normal file
@ -0,0 +1,149 @@
|
||||
@charset "UTF-8";
|
||||
@mixin debug {
|
||||
$hsla: hsla(random(360), 100%, 50%, 0.3);
|
||||
background-color: $hsla;
|
||||
}
|
||||
@mixin log($v) {
|
||||
font-family: '__log__:#{$v}';
|
||||
}
|
||||
|
||||
@mixin offset($corner: 1, $x: 0, $y: 0) {
|
||||
// corner:
|
||||
// 1-----2
|
||||
// | |
|
||||
// | |
|
||||
// 3-----4
|
||||
position: absolute;
|
||||
@if ($corner == 1) {
|
||||
top: $y;
|
||||
left: $x;
|
||||
}
|
||||
@if ($corner == 2) {
|
||||
top: $y;
|
||||
right: $x;
|
||||
}
|
||||
@if ($corner == 3) {
|
||||
bottom: $y;
|
||||
left: $x;
|
||||
}
|
||||
@if ($corner == 4) {
|
||||
bottom: $y;
|
||||
right: $x;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin position($top: 0, $right: null, $bottom: null, $left: null) {
|
||||
// --1--
|
||||
// | |
|
||||
// 4 2
|
||||
// | |
|
||||
// --3--
|
||||
@if ($right == null) {
|
||||
$right: $top;
|
||||
}
|
||||
|
||||
@if ($bottom == null) {
|
||||
$bottom: $top;
|
||||
}
|
||||
|
||||
@if ($left == null) {
|
||||
$left: $right;
|
||||
}
|
||||
|
||||
position: absolute;
|
||||
top: $top;
|
||||
left: $left;
|
||||
right: $right;
|
||||
bottom: $bottom;
|
||||
}
|
||||
|
||||
@mixin pos($pos: 5, $position: absolute) {
|
||||
// ╔═──┐ ╔═══╗ ┌──═╗
|
||||
// │ 1 │ │ 2 │ │ 3 │
|
||||
// └───┘ └───┘ └───┘
|
||||
// ╔═──┐ ╔═══╗ ┌──═╗
|
||||
// ║ 4 │ ║ 5 ║ │ 6 ║
|
||||
// ╚═──┘ ╚═══╝ └──═╝
|
||||
// ┌───┐ ┌───┐ ┌───┐
|
||||
// │ 7 │ │ 8 │ │ 9 │
|
||||
// ╚═──┘ ╚═══╝ └──═╝
|
||||
|
||||
$mod: ($pos - 1) % 3;
|
||||
|
||||
position: $position;
|
||||
@if ($pos <= 6) {
|
||||
top: 0;
|
||||
}
|
||||
@if ($mod <= 1) {
|
||||
left: 0;
|
||||
}
|
||||
@if ($mod >= 1) {
|
||||
right: 0;
|
||||
}
|
||||
@if ($pos >= 4) {
|
||||
bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin border-shadow($border: top, $size: 4px, $opacity: 0.05, $color: black) {
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: if(($border == bottom), auto, 0);
|
||||
left: if(($border == right), auto, 0);
|
||||
right: if(($border == left), auto, 0);
|
||||
bottom: if(($border == top), auto, 0);
|
||||
background-image: linear-gradient(to #{$border}, $color, transparent);
|
||||
#{$border}: -$size;
|
||||
opacity: $opacity;
|
||||
@if($border == top or $border == bottom) {
|
||||
height: $size;
|
||||
}@else{
|
||||
width: $size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin align($horizontal: center, $vertical: middle) {
|
||||
text-align: $horizontal;
|
||||
white-space: nowrap;
|
||||
&:after,
|
||||
> * {
|
||||
display: inline-block;
|
||||
vertical-align: $vertical;
|
||||
}
|
||||
&:after {
|
||||
content: '';
|
||||
height: 100%;
|
||||
width: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
> * {
|
||||
//text-align:left;
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
}
|
17
src/styles/variables.scss
Normal file
17
src/styles/variables.scss
Normal file
@ -0,0 +1,17 @@
|
||||
$color-white: #fff;
|
||||
$color-black: #36383B;
|
||||
$color-grey: #898F95;
|
||||
$color-grey-light: #F0F3F6;
|
||||
|
||||
$color-yellow: #FFB700;
|
||||
$color-yellow-light: #FFD759;
|
||||
|
||||
%button{
|
||||
border-radius: 100em
|
||||
}
|
||||
|
||||
%button-yellow{
|
||||
@extend %button;
|
||||
background-color: $color-yellow;
|
||||
color: $color-white;
|
||||
}
|
2
src/variables.pug
Normal file
2
src/variables.pug
Normal file
@ -0,0 +1,2 @@
|
||||
- var sdn = process.env.SDN || 'http://127.0.0.1:8000'
|
||||
- var cdn = process.env.CDN || 'https://cdn.happy-dev.fr'
|
Loading…
Reference in New Issue
Block a user