- [x] Adaptation de page-manger.js

- [x] Conception et dev routeur
This commit is contained in:
xdrm-brackets 2016-02-01 23:09:35 +01:00
parent af38781d78
commit d80f0d30eb
38 changed files with 1939 additions and 0 deletions

1
.gitignore vendored Normal file → Executable file
View File

@ -1,2 +1,3 @@
.sass-cache/
*.css.map
.htaccess

0
LICENSE Normal file → Executable file
View File

0
README.md Normal file → Executable file
View File

2
css/container.css Executable file
View File

@ -0,0 +1,2 @@
/*# sourceMappingURL=container.css.map */

0
css/container.scss Executable file
View File

0
css/fonts.css Executable file
View File

2
css/global.css Executable file
View File

@ -0,0 +1,2 @@
/*# sourceMappingURL=global.css.map */

0
css/global.scss Executable file
View File

2
css/header.css Executable file
View File

@ -0,0 +1,2 @@
/*# sourceMappingURL=header.css.map */

0
css/header.scss Executable file
View File

2
css/layout.css Executable file
View File

@ -0,0 +1,2 @@
#WRAPPER{display:block;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#edf0f5;font-family:'Ubuntu'}#WRAPPER>#HEADER{display:block;position:absolute;top:0;left:0;width:100%;height:calc( 4em - 1px );border-bottom:1px solid #2277f7;background-color:#5395f9;z-index:10}#WRAPPER>#HEADER>.icon{display:block;position:absolute;top:0;left:0;width:4em;height:4em;background-color:#2277f7;background-image:url("../src/static/icon.svg");background-position:center center;background-repeat:no-repeat;background-size:50% 50%;cursor:pointer;transition:all .3s}#WRAPPER>#HEADER>.icon:hover{background-color:#0967f6}#WRAPPER>#MENU-SIDE{display:block;position:absolute;top:4em;left:0;width:4em;height:100%;box-shadow:2px 1px 3px #ddd;background-color:#fff;transition:all .3s;z-index:9}#WRAPPER>#MENU-SIDE>span[data-link]{display:block;position:relative;width:calc( 4em - 2*.7em - 2*.55em - 2*.01em );height:calc( 4em - 2*.7em - 2*.55em - 2*.01em );margin:2em .7em;padding:.55em;border:.01em solid transparent;border-radius:2px;color:#a2a2a2;line-height:calc( 4em - 2*.7em - 2*.55em - 2*.01em );transition:color .3s, border .3s;cursor:pointer}#WRAPPER>#MENU-SIDE>span[data-link] svg,#WRAPPER>#MENU-SIDE>span[data-link] svg *{width:1.5em;height:1.5em;stroke:none !important;fill:#444 !important;transition:fill .3s}#WRAPPER>#MENU-SIDE>span[data-link][data-desc]:after{content:attr(data-desc);display:block;position:absolute;top:calc( .7em - 2*.3em );left:calc( 4.6em - 2*.3em );padding:.3em;border-radius:3px;background-color:#2a2a2a;color:#e2e2e2;transition:transform .1s;transform-origin:0 0;transform:scaleX(0)}#WRAPPER>#MENU-SIDE>span[data-link]:hover{border-color:#e6e6e6;box-shadow:inset 0 0 .5em #eee}#WRAPPER>#MENU-SIDE>span[data-link]:hover:after{transform:scaleX(1);color:#fff}#WRAPPER>#MENU-SIDE>span[data-link]:hover svg,#WRAPPER>#MENU-SIDE>span[data-link]:hover svg *{fill:#5395f9 !important}#WRAPPER>#MENU-SIDE>span[data-link].active{border-color:#e6e6e6}#WRAPPER>#MENU-SIDE>span[data-link].active svg,#WRAPPER>#MENU-SIDE>span[data-link].active svg *{fill:#5395f9 !important}#WRAPPER>#MENU-SIDE>span[data-link]:hover{color:#565656}#WRAPPER>#CONTAINER{display:block;position:absolute;top:4em;left:4em;width:calc( 100% - 4em - 2*1em );height:calc( 100% - 4em - 2*1em );padding:1em;overflow-x:none;overflow-y:auto}
/*# sourceMappingURL=layout.css.map */

184
css/layout.scss Executable file
View File

@ -0,0 +1,184 @@
$theme-color: #f97a53;
$theme-color: #5395f9;
#WRAPPER{
display: block;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #edf0f5;
font-family: 'Ubuntu';
/* [1] Header de la page
==========================================*/
& > #HEADER{
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: calc( 4em - 1px );
border-bottom: 1px solid darken($theme-color, 10);
background-color: $theme-color;
z-index: 10;
// Icone du site
& > .icon{
display: block;
position: absolute;
top: 0;
left: 0;
width: 4em;
height: 4em;
background-color: darken($theme-color, 10);
background-image: url('../src/static/icon.svg');
background-position: center center;
background-repeat: no-repeat;
background-size: 50% 50%;
cursor: pointer;
transition: all .3s;
// @hover
&:hover{
background-color: darken($theme-color, 15);
}
}
}
/* [2] Side-Menu de la page
==========================================*/
// Gestion du menu
& > #MENU-SIDE{
display: block;
position: absolute;
top: 4em;
left: 0;
width: 4em;
height: 100%;
box-shadow: 2px 1px 3px #ddd;
background-color: #fff;
transition: all .3s;
z-index: 9;
& > span[data-link]{
display: block;
position: relative;
width: calc( 4em - 2*.7em - 2*.55em - 2*.01em );
height: calc( 4em - 2*.7em - 2*.55em - 2*.01em );
// padding: 1em;
margin: 2em .7em;
padding: .55em;
border: .01em solid transparent;
border-radius: 2px;
color: #a2a2a2;
line-height: calc( 4em - 2*.7em - 2*.55em - 2*.01em );
transition: color .3s, border .3s;
cursor: pointer;
svg, svg *{
width: 1.5em;
height: 1.5em;
stroke: none !important;
fill: #444 !important;
transition: fill .3s;
}
&[data-desc]:after{
content: attr(data-desc);
display: block;
position: absolute;
top: calc( .7em - 2*.3em );
left: calc( 4.6em - 2*.3em );
padding: .3em;
border-radius: 3px;
background-color: #2a2a2a;
color: #e2e2e2;
transition: transform .1s;
transform-origin: 0 0;
transform: scaleX(0);
}
&:hover{
border-color: #e6e6e6;
box-shadow: inset 0 0 .5em #eee;
&:after{
transform: scaleX(1);
color: #fff;
}
svg, svg *{
fill: $theme-color !important;
}
}
&.active{
border-color: #e6e6e6;
svg, svg *{
fill: $theme-color !important;
}
}
}
}
// Gestion du menu hover
& > #MENU-SIDE > span[data-link]:hover{
color: darken(#a2a2a2, 30);
}
/* [3] Container de la page
==========================================*/
& > #CONTAINER{
display: block;
position: absolute;
top: 4em;
left: 4em;
width: calc( 100% - 4em - 2*1em );
height: calc( 100% - 4em - 2*1em );
padding: 1em;
overflow-x: none;
overflow-y: auto;
}
}

2
css/menu.css Executable file
View File

@ -0,0 +1,2 @@
/*# sourceMappingURL=menu.css.map */

0
css/menu.scss Executable file
View File

2
css/reset.css Executable file
View File

@ -0,0 +1,2 @@
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}
/*# sourceMappingURL=reset.css.map */

433
css/reset.scss Executable file
View File

@ -0,0 +1,433 @@
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS and IE text size adjust after device orientation change,
* without disabling user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability of focused elements when they are also in an
* active/hover state.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address inconsistent styling of `abbr[title]`.
* 1. Correct styling in Firefox 39 and Opera 12.
* 2. Correct missing styling in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Address inconsistent styling of b and strong.
* 1. Correct duplicate application of `bolder` in Safari 6.0.2.
* 2. Correct style set to `bold` in Edge 12+, Safari 6.2+, and Chrome 18+.
*/
b,
strong {
font-weight: inherit; /* 1 */
}
b,
strong {
font-weight: bolder; /* 2 */
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background-color: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address inconsistent styling of `hr`.
* 1. Correct `box-sizing` set to `border-box` in Firefox.
* 2. Correct `overflow` set to `hidden` in IE 8/9/10/11 and Edge 12.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* 1. Correct inheritance and scaling of font-size for preformatted text.
* 2. Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct font properties not being inherited.
* 2. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
font: inherit; /* 1 */
margin: 0; /* 2 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* Address `appearance` set to `searchfield` in Safari and Chrome.
*/
input[type="search"] {
-webkit-appearance: textfield;
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}

35
index.php Normal file
View File

@ -0,0 +1,35 @@
<?php define('__ROOT__', dirname(__FILE__) );
require_once 'manager/autoloader.php';
/* [0] On initialise le routeur
===================================================*/
$R = new router\Router( $_GET['url'] );
// var_dump($R);
/* [1] On cree les regles de routage
===================================================*/
$R->get('/?', function(){ header('Location: dashboard'); });
$R->get('dashboard/:submenu/?', function($sm){ $subMenu = $sm; include __ROOT__.'/view.php'; });
$R->get('machines/:submenu/?', function($sm){ $subMenu = $sm; include __ROOT__.'/view.php'; });
$R->get('users/:submenu/?', function($sm){ $subMenu = $sm; include __ROOT__.'/view.php'; });
$R->get('sync/:submenu/?', function($sm){ $subMenu = $sm; include __ROOT__.'/view.php'; });
$R->get('settings/:submenu/?', function($sm){ $subMenu = $sm; include __ROOT__.'/view.php'; });
$R->get('dashboard/?', function(){ $subMenu = 'index'; include __ROOT__.'/view.php'; });
$R->get('machines/?', function(){ $subMenu = 'index'; include __ROOT__.'/view.php'; });
$R->get('users/?', function(){ $subMenu = 'index'; include __ROOT__.'/view.php'; });
$R->get('sync/?', function(){ $subMenu = 'index'; include __ROOT__.'/view.php'; });
$R->get('settings/?', function(){ $subMenu = 'index'; include __ROOT__.'/view.php'; });
$R->post('.*', function(){
echo 'Acces POST';
});
/* [2] On lance le routeur
===================================================*/
$R->run();
?>

27
js/action-script.js Executable file
View File

@ -0,0 +1,27 @@
DOM = {
WRAPPER: $('WRAPPER'),
HEADER: $('HEADER'),
MENUSIDE: $('MENU-SIDE'),
CONTAINER: $('CONTAINER')
};
/* [0] Instanciation
===========================================*/
var pageManager = new pageManagerClass();
pageManager.setPage(null, 'view', DOM.CONTAINER, ['dashboard', 'machines', 'users', 'sync', 'settings'] );
/* [1] Gestion de la navigation
===========================================*/
DOM.MENUSIDE.addEventListener('click', function(e){
var target = e.target;
// On remonte dans les parents au bon niveau
while( target != document.body && !getData(target, 'link') )
target = target.parentNode;
// Si on a trouve l'element, on l'utilise pour la page
if( getData(target, 'link') )
pageManager.setPage(target.dataset.link);
}, false);

256
js/lib/page-manager.js Normal file
View File

@ -0,0 +1,256 @@
/***************************************/
/* */
/* GESTIONNAIRE D'OPTIMISATION DES */
/* RESSOURCES ET DE */
/* NAVIGATION EN AJAX */
/* */
/* Développé par {xdrm} */
/* */
/* GITHUB github.com/xdrm-brackets/ */
/* */
/***************************************/
function pageManagerClass(){};
var ptrPageManagerClass; // pointeur global pour l'utilisation de fonctions de fonctions
pageManagerClass.prototype = {
depJS: null, // la dépendance javascript
depCSS: null, // la dépendance css
xhr: [], // tableau d'objets pour les requêtes ajax
page: null, // l'indice de la page courante dans pagelist
vars: [], // les variables suivant le nom de la page dans l'URL
path: '', // le chemin du dossier contenant les pages (.php)
pagelist: null, // la liste des pages pouvant être chargées
container: null, // élément DOM qui contiendra le contenu des pages à charger
/* =======================================================================
Cette fonction effectue une requête Ajax (compatible à partir de IE5)
PARAMETRES:
- pLink<string> le lien à charger
- pHandler<function> une fonction qui s'éxécutera avec la réponse de la requête passée en paramètre (voir exemples dessous pour pHandler)
- pMethod<string> type de méthode, vaut 'POST' ou 'GET' et vaut 'POST' par défaut ou s'il n'est pas renseigné
- pForm<FormData> formulaire de type FormData() contenant les données à envoyer (uniquement en POST), si pForm vaut GET les données doivent être passées dans l'URL
========================================================================== */
ajax: function(pLink, pHandler, pMethod, pForm){
// on efface les requêtes qui sont terminées et on push une nouvelle
for( var i = 0 ; i < this.xhr.length ; i++ ){
// if( this.xhr[i].readyState == 4 ) // si terminée
this.xhr = this.xhr.slice(0,i-1).concat(this.xhr.slice(i,this.xhr.length-1)); // suppression entrée
}
var index;
if(window.XMLHttpRequest) // IE7+, Firefox, Chrome, Opera, Safari
index = this.xhr.push( new XMLHttpRequest() ) -1;
else // IE5, IE6
index = this.xhr.push( new ActiveXObject('Microsoft.XMLHttpRequest') ) -1;
var ptrPageManagerClass = this;
this.xhr[index].onreadystatechange = function(){
if( ptrPageManagerClass.xhr[index].readyState == 4 ) // si la requête est terminée
if( [0,200].indexOf(ptrPageManagerClass.xhr[index].status) > -1 ) // si fichier existe et reçu
pHandler(ptrPageManagerClass.xhr[index].responseText);
else // si code d'erreur retourne null
pHandler();
}
// gestion de la méthode
var method = ( typeof pMethod == 'string' && /^POST|GET$/i.test(pMethod) ) ? pMethod.toUpperCase() : 'POST';
// gestion du formulaire si la méthode est POST
var form = ( method == 'POST' && typeof pForm == 'object' && pForm instanceof FormData ) ? pForm : null;
this.xhr[index].open( method, pLink, true );
this.xhr[index].send( form );
},
/***************************************************** [APPLICATION] Ajax() ******************************************************/
// EXEMPLES DE FONCTIONS POUR pHandler //
// 1. var a = function(param){ alert(param); } // les deux notations 1 et 2 sont équivalents
// 2. function a(param){ alert(param); } // les deux notations 1 et 2 sont équivalents
// ajax( 'index.php', a ); // utilisation d'une fonction définie
// ajax( 'index.php', alert ); // utilisation d'une fonction prédéfinie
// ajax( 'index.php', alert, 'GET' ); // utilisation de méthode
// var fd = new FormData(); // création d'un formulaire
// fd.append('var', 100); // ajout de la variable VAR qui vaut 100
// ajax( 'index.php', alert, null, fd ); // saut de paramètre avec null + envoi formulaire
// ajax( 'index.php?var=10', alert, 'GET' ); // envoi formulaire en GET (dans l'url)
// ajax( 'index.php?var=10', alert, 'POST', fd ); // envoi formulaire en GET (dans l'url) + en POST via le formulaire FD
/* =======================================================================
Cette fonction effectue une décomposition de l'URL sur le shéma spécifié dessous
Renvoie pour http://www.exemple.com/dirA/dirB/#/NOMPAGE/VARPAGE
- null si la page n'est pas référencée dans le tableau PAGELIST
- null si le lien ne contient pas /#/NOMPAGE à la fin
- null si NOMPAGE ne contient pas uniquement : lettres, chiffres, underscore
- null si VARPAGE ne contient pas uniquement : lettres, chiffres, underscore
- un objet contenant {page: valeur, var: valeur}
========================================================================== */
explodeURL: function(url_data){
url_data = (arguments.length >= 1) ? url_data : document.URL;
// si pageList est correct et que l'URL correspond à un schéma de page => continue [sinon] return null
if( this.pagelist != null && /^(?:.+)\/([a-z0-9_]+)\/?(?:\/((?:.+\/)+)\/?)?$/i.test(url_data) ){
// si la page récupérée dans l'url est dans la liste => renvoi de l'objet [sinon] null
var vars = RegExp.$2.split('/');
while( vars[vars.length-1] == '' ) // on supprime les dernières entrées vides
vars.pop();
return ( this.pagelist.indexOf(RegExp.$1) > -1 ) ? {page: RegExp.$1, var: vars} : null;
}else
return null;
},
/* =======================================================================
Cette fonction ajoute des dépendances (un js et un css) situés dans le répertoire des pages.
pageDir/
_JS/
page1.js
page2.js
_CSS/
page1.css
page2.css
========================================================================== */
loadDependencies: function(){
// si depCSS est un élément du DOM c'est à dire qu'il contient le fichier de la page précédente et qu'il est enfant de <head>, on le détruit
if( typeof this.depCSS == 'object' && this.depCSS instanceof Element && this.depCSS.parentNode == document.head )
document.head.removeChild( this.depCSS );
// si depJS est un élément du DOM c'est à dire qu'il contient le fichier de la page précédente, on le détruit
if( typeof this.depJS == 'object' && this.depJS instanceof Element && this.depJS.parentNode == document.head )
document.head.removeChild( this.depJS );
ptrPageManagerClass = this;
// si le fichier css existe
this.ajax(this.path+'/'+'_CSS'+'/'+this.page+'.css', function(e){
if( e != null ){ // on charge la dépendance CSS si le fichier existe
ptrPageManagerClass.depCSS = document.createElement('link');
ptrPageManagerClass.depCSS.rel = 'stylesheet';
ptrPageManagerClass.depCSS.type = 'text/css';
ptrPageManagerClass.depCSS.href = ptrPageManagerClass.path+'/_CSS/'+ptrPageManagerClass.page+'.css';
document.head.appendChild(ptrPageManagerClass.depCSS);
}else
console.log('[loadDependencies_Error] - ('+ptrPageManagerClass.path+'/_CSS/'+ptrPageManagerClass.page+'.css)');
});
// si le fichier js existe
this.ajax(this.path+'/'+'_JS'+'/'+this.page+'.js', function(e){
if( e != null ){ // on charge la dépendance JS si le fichier existe
ptrPageManagerClass.depJS = document.createElement('script');
ptrPageManagerClass.depJS.type = 'text/javascript';
ptrPageManagerClass.depJS.src = ptrPageManagerClass.path+'/_JS/'+ptrPageManagerClass.page+'.js';
document.head.appendChild(ptrPageManagerClass.depJS);
}else
console.log('[loadDependencies_Error] - ('+ptrPageManagerClass.path+'/_JS/'+ptrPageManagerClass.page+'.js)');
});
},
/* =======================================================================
Met à jour l'URL de la page en fonction de la page chargée et des
variables associées (ne recharge aucune ressource)
======================================================================= */
updateURL: function(){
if( this.vars.length > 0 ) // si il y a des variables
window.history.pushState(this.page, this.page, '/'+this.page+'/'+this.vars.join('/')+'/');
else // s'il n'y en a pas
window.history.pushState(this.page, this.page, '/'+this.page+'/');
// on peut récupérer le nom de la page (quand on fait retour en arrière de l'historique)
// dans la variable : window.history.state
},
/* =======================================================================
Cette fonction est celle qui gère les 2 autres et celle que l'utilisateur utilisera
PARAMETRES:
- pName<string> le nom de la page à charger (lettres, chiffres, underscore) (*)
- pPath<string> chemin (relatif ou absolu) du dossier contenant les pages de même nom de fichier que le nom (extension .php)
- pContainer<Element> l'élément du DOM qui contiendra la page chargée (**)
- pPageList<Array<string>> tableau contenant la liste des pages sous forme de chaînes de caractères (**) (***)
* Le chemin du dossier sans le '/' final si c'est le dossier actuel le chemin est une chaîne vide
Si le dossier est 'page' et que l'on cherche la page 'accUe1l', la requête sera vers 'page/accUe1l.php'
le nom de la page est sensible à la casse
** 1. pPageList et pContainer doivent être mis en paramètres uniquement à la première utilisation
et la première utilisation doit se faire au chargement de la page car elle permetra
de mettre l'URL à jour et/ou charger la page de l'URL
*** la première page du tableau est la page par défaut (qui est chargée si l'URL ne contient
pas la page ou si la page de l'URL ne correspond à aucune page de la liste)
========================================================================== */
setPage: function(pName, pPath, pContainer, pPageList){
// liste de pages si c'est un tableau
var pageList = ( typeof pPageList == 'object' && pPageList instanceof Array ) ? pPageList : null; // si this.pagelist n'est pas overwrite il vaut null
if( pageList != null ){ // si c'est un tableau
for( var i = 0 ; i < pageList.length ; i++ ){ // on parcourt tout les éléments pour vérifier que chaque élément ne contient que : lettres, chiffres, underscore [non]> pageList = null
pageList = ( typeof pageList[i] == 'string' && /^[a-z0-9_]+$/i.test(pageList[i]) ) ? pageList : null;
if( pageList == null ) break; // si le tableau est null stoppe la boucle
}
}
/* on attribue la variable temporaire pageList à l'attribut de l'objet si la variable pageList temporaire n'est pas nulle */
this.pagelist = ( pageList != null ) ? pageList : this.pagelist;
// affecte à l'attribut page la page par défaut (premier élément de pagelist)
this.page = this.pagelist[0];
// affecte pPath à l'attribut path s'il est renseigné
this.path = ( typeof pPath == 'string' ) ? pPath : this.path;
/* on attribue le paramètre pContainer à l'attribut si il est spécifié */
this.container = ( typeof pContainer == 'object' && pContainer instanceof Element ) ? pContainer : this.container;
// si this.pagelist && this.container ne sont pas null &&
if( this.pagelist != null && this.container != null ){
// si le pName est renseigné et qu'il est dans pagelist
if( typeof pName == 'string' && this.pagelist.indexOf(pName) > -1 ){
// affecte pName à l'attribut page
this.page = pName;
// charge le contenu de la page dans le container
var ptrPageManagerClass = this;
// formulaire POST
var fd = new FormData();
for( var i = 0 ; i < this.vars.length ; i++ )
fd.append(this.vars[i], null);
this.ajax(this.path+'/'+this.page+'.php', function(e){
ptrPageManagerClass.container.innerHTML = e;
ptrPageManagerClass.loadDependencies();
}, 'POST', fd);
// change l'URL en conséquences(stateObj, titre, url)
this.updateURL();
}else{ // si la page n'est pas spécifiée ou qu'elle n'est pas dans la liste des pages
var urlGet = this.explodeURL();
// si on a récupéré le numéro de la page dans l'URL et qu'elle fait partie de la liste des pages
if( urlGet != null ){
this.page = urlGet.page;
// charge le contenu de la page dans le container
var ptrThis = this;
// formulaire POST
var fd = new FormData();
this.vars.length = 0;
for( var i = 0 ; i < urlGet.var.length ; i++ ){ // replacing object variables with explodeURL variables
this.vars[i] = urlGet.var[i];
fd.append(this.vars[i], null);
}
this.ajax(this.path+'/'+this.page+'.php', function(e){
ptrThis.container.innerHTML = e;
ptrThis.loadDependencies();
}, 'POST', fd);
// change l'URL en conséquences(stateObj, titre, url)
this.updateURL();
}else // si l'url ne contient rien, on charge la page par défaut
this.setPage(this.pagelist[0]);
}
}else
console.log('pagelist et container manquant');
}
}

19
js/lib/reset.js Normal file
View File

@ -0,0 +1,19 @@
function $(idOrClass){
var byId = document.querySelectorAll('#'+idOrClass);
var byClass = document.querySelectorAll('.'+idOrClass);
if( byId.length > 0 ) return byId[0];
else return byClass;
}
function getData(element, attribute){
// On verifie qu'il s'agit bien d'un element du DOM
if( !(element instanceof Element) )
return false;
// On verifie qu'un data-* attribute existe
if( typeof element.dataset == 'undefined' )
return false;
return ( element.dataset.hasOwnProperty(attribute) ) ? element.dataset[attribute] : false;
}

21
manager/autoloader.php Normal file
View File

@ -0,0 +1,21 @@
<?php
function autoLoader($className){
$path = '';
/* [1] On utilise le namespace pour localiser
===============================================*/
// On remplace les '\' par des '/'
$path = str_replace('\\', '/', $className) . '.php';
$path = __ROOT__.'/'.$path;
// Si le fichier existe, on l'inclut
if( file_exists($path) )
require_once $path;
}
// On definit l'autoloader
spl_autoload_register('autoLoader', false, true);
?>

64
router/Route.php Normal file
View File

@ -0,0 +1,64 @@
<?php
/**************************************/
/* Classe de gestion de route (match) */
/**************************************/
namespace router;
class Route{
// ATTRIBUTS
private $pattern;
private $callback;
private $matches = array();
/* Initialise la route
*
* @pattern<String> Pattern correspondant a la route
* @callback<Function> Fonction de callback de la route
*
* @return this<Route> Retour de l'instance courante
*
*/
public function __construct($pattern, $callback){
// On enregistre la fonction de callback
$this->callback = $callback;
// On formatte le pattern en regexp
$this->pattern = preg_replace('#:(\w+)#i', '([^/]+)', $pattern);
$this->pattern = '#^'.$this->pattern.'$#';
return $this;
}
/* Verifie si l'URL correspond a la route
*
* @url<String> URL pour laquelle on veut verifier
*
* @return match<Boolean> TRUE si match sinon FAUX
*
*/
public function match($url){
// Si ne match pas -> FALSE
if( !preg_match($this->pattern, $url, $matches) )
return false;
// On supprime le premier match global
array_shift($matches);
$this->matches = $matches;
return true;
}
/* Amorcage de la fonction de callback
*
*/
public function call(){
return call_user_func_array($this->callback, $this->matches);
}
}
?>

91
router/Router.php Normal file
View File

@ -0,0 +1,91 @@
<?php
/*************************************************/
/* Classe de gestion des routes (URL/ressources) */
/*************************************************/
namespace router;
class Router{
// ATTRIBUTS
private $url;
private $routes;
/* Initialise le routeur
*
* @url<String> l'URL de la page courante
*
* @return this<Router> Retour de l'instance courante
*
*/
public function __construct($url){
$this->url = $url;
// On initialise les routes
$this->routes = array(
'GET' => array(),
'POST' => array()
);
return $this;
}
/* Ajoute une route GET
*
* @pattern<String> le format de l'URL associe
* @callback<Function> function a appeler si l'URL correspond
*
* @return this<Router> Retour de l'instance courante
*
*/
public function get($pattern, $callback){
array_push(
$this->routes['GET'],
new Route($pattern, $callback)
);
return $this;
}
/* Ajoute une route POST
*
* @pattern<String> le format de l'URL associe
* @callback<Function> function a appeler si l'URL correspond
*
* @return this<Router> Retour de l'instance courante
*
*/
public function post($pattern, $callback){
array_push(
$this->routes['POST'],
new Route($pattern, $callback)
);
return $this;
}
/* Demarre le routeur
*
* @return this Retour de l'instance courante
*
*/
public function run(){
$httpMethod = $_SERVER['REQUEST_METHOD'];
// Si aucune route pour la methode courante -> false
if( count($this->routes[$httpMethod]) <= 0 )
return false;
// Pour chaque route
foreach($this->routes[$httpMethod] as $route){
// Si la route match
if( $route->match($this->url) )
return $route->call(); // On l'amorce
}
// Retourne false si erreur
return false;
}
}
?>

52
src/index.php Executable file
View File

@ -0,0 +1,52 @@
<?php define('__ROOT__', dirname(__FILE__) );
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
// FORMAT: extension & root & image & declinaison
$info = array(); // Contiendra les donnees GET
$path = array(); // Contiendra le chemin
$extensions = array('svg'); // extensions gerees
$extensionHeader = array('image/svg+xml'); // header associees aux extensions
$index = 0;
/* [1] On recupere les cles GET
======================================*/
foreach($_GET as $k=>$v)
array_push($info, $k);
/* [2] Verification des donnees recues
======================================*/
$infoChecker = count($info) >= 3;
$infoChecker = $infoChecker && ($index=array_search($info[0], $extensions)) !== false;
// Gestion de la declinaison si existe
$subView = ( count($info)>=4 && $info[3] != 'noheader' ) ? $info[3].'/' : '';
/* (1) Erreur */
if( !$infoChecker ) exit(1);
/* (2) Cas de $info[0] */
switch($info[1]){
case 'static':
$path = __ROOT__.'/static/'.$subView.$info[2].'.'.$info[0];
// On verifie si le fichier existe
if( file_exists($path) ){
if( !isset($_GET['noheader']) )
header('Content-type:'.$extensionHeader[$index]);
include $path;
}
break;
}
?>

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 32 32"
height="32px"
id="Layer_1"
version="1.1"
viewBox="0 0 32 32"
width="32px"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
sodipodi:docname="menu-dashboard.svg"><metadata
id="metadata3942"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3940" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview3938"
showgrid="false"
inkscape:zoom="7.375"
inkscape:cx="-10.305085"
inkscape:cy="16"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><g
id="g3930"
style="fill:#000000;fill-opacity:1"><path
d="M16,30c-3.74,0-7.255-1.456-9.899-4.101C1.779,21.578,0.752,15.025,3.547,9.595C3.8,9.104,4.402,8.911,4.894,9.163 s0.685,0.855,0.432,1.347C2.93,15.164,3.81,20.78,7.515,24.485C9.781,26.752,12.794,28,16,28c3.205,0,6.219-1.248,8.485-3.515 S28,19.205,28,16c0-3.206-1.248-6.219-3.515-8.485S19.206,4,16,4c-3.206,0-6.219,1.249-8.485,3.515 c-0.391,0.391-1.023,0.391-1.414,0s-0.391-1.023,0-1.414C8.745,3.457,12.26,2,16,2c3.74,0,7.256,1.457,9.899,4.101 C28.544,8.745,30,12.26,30,16c0,3.739-1.456,7.255-4.101,9.899C23.256,28.544,19.74,30,16,30z"
id="path3932"
style="fill:#000000;fill-opacity:1" /></g><g
id="g3934"
style="fill:#000000;fill-opacity:1"><path
d="M16,20c-1.068,0-2.073-0.416-2.829-1.172c-1.56-1.56-1.56-4.097,0-5.656c1.257-1.257,7.272-3.639,8.465-4.104 c0.371-0.144,0.79-0.056,1.07,0.225s0.369,0.7,0.225,1.07c-0.465,1.193-2.847,7.209-4.104,8.465C18.073,19.584,17.068,20,16,20z M20.188,11.813c-2.453,1.028-5.064,2.235-5.602,2.773c-0.78,0.78-0.78,2.048,0,2.828c0.756,0.756,2.073,0.756,2.829,0 C17.952,16.875,19.16,14.266,20.188,11.813z"
id="path3936"
style="fill:#000000;fill-opacity:1" /></g></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 32 32"
height="32px"
id="Layer_1"
version="1.1"
viewBox="0 0 32 32"
width="32px"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
sodipodi:docname="menu-machines.svg"><metadata
id="metadata3048"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3046" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview3044"
showgrid="false"
inkscape:zoom="7.375"
inkscape:cx="-36.61017"
inkscape:cy="16"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><g
id="truck_1_"
style="fill:#000000;fill-opacity:1"><path
d="M24.832,11.445C24.646,11.167,24.334,11,24,11h-1c-0.553,0-1,0.447-1,1v6c0,0.553,0.447,1,1,1h4 c0.553,0,1-0.447,1-1v-1.5c0-0.197-0.059-0.391-0.168-0.555L24.832,11.445z M27,18h-4v-6h1l3,4.5V18z"
id="path3040"
style="fill:#000000;fill-opacity:1"
fill="#333332" /><path
d="M31.496,15.336l-4-6C26.938,8.499,26.004,8,25,8h-4V6c0-1.654-1.346-3-3-3H3C1.346,3,0,4.346,0,6v11 c0,1.654,1.346,3,3,3h0v3c0,1.654,1.346,3,3,3h1.142c0.447,1.721,2,3,3.859,3c1.857,0,3.41-1.279,3.857-3h5.282 c0.447,1.721,2,3,3.859,3c1.857,0,3.41-1.279,3.857-3H29c1.654,0,3-1.346,3-3v-6C32,16.406,31.826,15.83,31.496,15.336z M3,18 c-0.552,0-1-0.447-1-1V6c0-0.553,0.448-1,1-1h15c0.553,0,1,0.447,1,1v2v2v7c0,0.553-0.447,1-1,1H3z M11.001,27 c-1.105,0-2-0.896-2-2s0.895-2,2-2c1.104,0,2,0.896,2,2S12.104,27,11.001,27z M24,27c-1.105,0-2-0.896-2-2s0.895-2,2-2 c1.104,0,2,0.896,2,2S25.104,27,24,27z M30,23c0,0.553-0.447,1-1,1h-1.143c-0.447-1.721-2-3-3.857-3c-1.859,0-3.412,1.279-3.859,3 h-5.282c-0.447-1.721-2-3-3.857-3c-1.859,0-3.412,1.279-3.859,3H6c-0.552,0-1-0.447-1-1v-3h13c1.654,0,3-1.346,3-3v-7h4 c0.334,0,0.646,0.167,0.832,0.445l4,6C29.941,16.609,30,16.803,30,17V23z"
id="path3042"
style="fill:#000000;fill-opacity:1"
fill="#333332" /></g></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 128 128"
height="128px"
id="Layer_1"
version="1.1"
viewBox="0 0 128 128"
width="128px"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
sodipodi:docname="menu-settings.svg"><metadata
id="metadata3091"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3089" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview3087"
showgrid="false"
inkscape:zoom="1.84375"
inkscape:cx="-146.44068"
inkscape:cy="64"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
d="M 61.636503,66.295309 H 10.458208 c -1.2360991,0 -2.2393097,-1.00321 -2.2393097,-2.239309 0,-1.236099 1.0032106,-2.239309 2.2393097,-2.239309 h 51.178295 c 1.236099,0 2.239309,1.00321 2.239309,2.239309 0,1.236099 -1.00321,2.239309 -2.239309,2.239309 z"
id="path3069"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="M 117.63379,66.295309 H 90.479927 c -1.236099,0 -2.239309,-1.00321 -2.239309,-2.239309 0,-1.236099 1.00321,-2.239309 2.239309,-2.239309 h 27.153863 c 1.2361,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.00209,2.239309 -2.23931,2.239309 z"
id="path3071"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="M 46.643207,100.50412 H 10.458208 c -1.2360991,0 -2.2393097,-1.003212 -2.2393097,-2.239311 0,-1.236099 1.0032106,-2.239309 2.2393097,-2.239309 h 36.184999 c 1.236099,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.003211,2.239311 -2.23931,2.239311 z"
id="path3073"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="M 117.63379,100.50412 H 76.057655 c -1.236098,0 -2.239309,-1.003212 -2.239309,-2.239311 0,-1.236099 1.003211,-2.239309 2.239309,-2.239309 h 41.576135 c 1.2361,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.00209,2.239311 -2.23931,2.239311 z"
id="path3075"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="M 31.539066,32.08538 H 10.458208 c -1.2360991,0 -2.2393097,-1.00321 -2.2393097,-2.239309 0,-1.236099 1.0032106,-2.239309 2.2393097,-2.239309 h 21.080858 c 1.236099,0 2.239309,1.00321 2.239309,2.239309 0,1.236099 -1.00321,2.239309 -2.239309,2.239309 z"
id="path3077"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="M 117.63379,32.08538 H 60.384729 c -1.236099,0 -2.239309,-1.00321 -2.239309,-2.239309 0,-1.236099 1.00321,-2.239309 2.239309,-2.239309 h 57.249061 c 1.2361,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.00209,2.239309 -2.23931,2.239309 z"
id="path3079"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="m 40.0518,40.596995 c -5.928571,0 -10.753163,-4.824592 -10.753163,-10.753163 0,-5.928572 4.824592,-10.752044 10.753163,-10.752044 5.928572,0 10.753164,4.823472 10.753164,10.752044 0,5.929691 -4.824592,10.753163 -10.753164,10.753163 z m 0,-17.026588 c -3.459733,0 -6.274544,2.814811 -6.274544,6.273425 0,3.459733 2.814811,6.274545 6.274544,6.274545 3.459733,0 6.274545,-2.814812 6.274545,-6.274545 0,-3.458614 -2.814812,-6.273425 -6.274545,-6.273425 z"
id="path3081"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="m 55.155942,109.02021 c -5.928572,0 -10.753164,-4.82459 -10.753164,-10.754281 0,-5.928572 4.824592,-10.753164 10.753164,-10.753164 5.930811,0 10.754283,4.824592 10.754283,10.753164 0.0011,5.929691 -4.823472,10.754281 -10.754283,10.754281 z m 0,-17.028826 c -3.459733,0 -6.274545,2.814812 -6.274545,6.274545 0,3.461971 2.814812,6.275661 6.274545,6.275661 3.460852,0 6.275664,-2.81481 6.275664,-6.275661 0.0011,-3.459733 -2.814812,-6.274545 -6.275664,-6.274545 z"
id="path3083"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /><path
d="m 70.153716,74.810283 c -5.93193,0 -10.756522,-4.825712 -10.756522,-10.754283 0,-5.928571 4.825711,-10.753163 10.756522,-10.753163 5.927452,0 10.750924,4.823472 10.750924,10.753163 0,5.929691 -4.823472,10.754283 -10.750924,10.754283 z m 0,-17.028828 c -3.461972,0 -6.277904,2.814812 -6.277904,6.274545 0,3.460853 2.817052,6.275664 6.277904,6.275664 3.458614,0 6.272306,-2.815931 6.272306,-6.275664 0,-3.459733 -2.813692,-6.274545 -6.272306,-6.274545 z"
id="path3085"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1" /></svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

68
src/static/active/menu-sync.svg Executable file
View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="32px"
version="1.1"
viewBox="0 0 32 32"
width="32px"
id="svg3043"
inkscape:version="0.48.4 r9939"
sodipodi:docname="menu-sync.svg">
<metadata
id="metadata3054">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview3052"
showgrid="false"
inkscape:zoom="7.375"
inkscape:cx="-36.61017"
inkscape:cy="16"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg3043" />
<defs
id="defs3047" />
<g
fill="none"
fill-rule="evenodd"
id="Icons new Arranged Names Color"
stroke="none"
stroke-width="1"
style="fill:#000000;fill-opacity:1">
<g
fill="#006FD1"
id="52 Cloud Sync"
style="fill:#000000;fill-opacity:1">
<path
d="M16,26 C18.4189531,26 20.4367034,24.2822474 20.8999819,22 L22.9291112,22 C22.4438852,25.392291 19.5264743,28 16,28 C13.5555272,28 11.4037064,26.7470086 10.1517571,24.8482429 L9,26 L9,25 L9,23 L9,22 L9.07088885,22 L11.1000181,22 L13,22 L11.6081371,23.3918629 C12.456236,24.945806 14.1050078,26 16,26 Z M20.8999819,20 L20,20 L19,20 L20.3918749,18.6081591 C19.5438006,17.0542175 17.8950132,16 16,16 C13.5810469,16 11.5632966,17.7177526 11.1000181,20 L9.07088885,20 C9.55611479,16.607709 12.4735257,14 16,14 C18.4444875,14 20.5963196,15.2530065 21.8482706,17.151799 L23,16.0000977 L23,20 L22.9291112,20 Z M0,19 C0,16.7828376 1.20753986,14.8416411 3.00211353,13.8029948 C3.10690617,8.92340284 7.0952729,5 12,5 C15.2334976,5 18.0687214,6.70521161 19.6554699,9.26543329 C20.2402065,9.09270496 20.859277,9 21.5,9 C24.2845531,9 26.6601501,10.7509485 27.5858427,13.2118973 C30.129704,13.9074543 32,16.2353674 32,19 C32,22.3069658 29.3136299,25 25.9998243,25 L24.0644804,25 C24.3768209,24.3714946 24.617851,23.701298 24.7769836,23 L26.0031611,23 C28.2105543,23 30,21.2046438 30,19 C30,16.790861 28.2058797,15 26.0031611,15 L25.9725356,15 C25.7238035,12.7500155 23.8162709,11 21.5,11 C20.4427534,11 19.4706636,11.3645993 18.7026063,11.974922 C17.8340685,9.0963276 15.1618462,7 12,7 C8.13400656,7 5,10.1340066 5,14 C5,14.3757911 5.0296122,14.7446659 5.08663046,15.1044183 C3.31778819,15.5175755 2,17.1080834 2,19 C2,21.209139 3.79412025,23 5.99683887,23 L7,23 L7,25 L6.00017566,25 C2.68697795,25 0,22.3137085 0,19 Z M0,19"
id="Rectangle 1 copy 4"
style="fill:#000000;fill-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 24 24"
id="Layer_1"
version="1.0"
viewBox="0 0 24 24"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
width="100%"
height="100%"
sodipodi:docname="menu-users.svg"><metadata
id="metadata4530"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs4528" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview4526"
showgrid="false"
inkscape:zoom="13.906433"
inkscape:cx="-4.497109"
inkscape:cy="11.721495"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:none;stroke:#000000;stroke-width:0.83518391999999986;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 11.999999,1.5788564 c -2.7814338,0 -5.0482614,2.2668276 -5.0482614,5.0482619 0,2.7814341 2.2668276,5.0482627 5.0482614,5.0482627 2.781435,0 5.048263,-2.2668286 5.048263,-5.0482627 0,-2.7814343 -2.266828,-5.0482619 -5.048263,-5.0482619 z"
id="circle4522"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssss" /><path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 12,15.1875 c 3.987532,0 6.540859,1.282386 8.125,2.5625 1.523571,1.231168 2.081835,2.379808 2.125,2.46875 l 0,2.03125 -20.5,0 0,-2.03125 C 1.7931647,20.129808 2.3514295,18.981168 3.875,17.75 5.4591406,16.469886 8.0124676,15.1875 12,15.1875 z"
id="path4524"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccccss" /></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

73
src/static/icon.svg Executable file
View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="49.96875"
height="49.96875"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="icon.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-15.307827"
inkscape:cy="29.355928"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1056"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:snap-page="true" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-128.46875,-685.34375)">
<text
xml:space="preserve"
style="font-size:25.91360283px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sawasdee;-inkscape-font-specification:Sawasdee"
x="130.12709"
y="718.25531"
id="text2987"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2989"
x="130.12709"
y="718.25531"
style="font-size:25.91360283px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;font-family:Sawasdee;-inkscape-font-specification:Sawasdee Bold">{ x }</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

51
src/static/menu-dashboard.svg Executable file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 32 32"
height="32px"
id="Layer_1"
version="1.1"
viewBox="0 0 32 32"
width="32px"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
sodipodi:docname="1454300750_circle_dashboard_fuel_gauge_meter_icon.svg"><metadata
id="metadata3942"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3940" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="765"
inkscape:window-height="480"
id="namedview3938"
showgrid="false"
inkscape:zoom="7.375"
inkscape:cx="16"
inkscape:cy="16"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="0"
inkscape:current-layer="Layer_1" /><g
id="g3930"
style="fill:#a2a2a2;fill-opacity:1"><path
d="M16,30c-3.74,0-7.255-1.456-9.899-4.101C1.779,21.578,0.752,15.025,3.547,9.595C3.8,9.104,4.402,8.911,4.894,9.163 s0.685,0.855,0.432,1.347C2.93,15.164,3.81,20.78,7.515,24.485C9.781,26.752,12.794,28,16,28c3.205,0,6.219-1.248,8.485-3.515 S28,19.205,28,16c0-3.206-1.248-6.219-3.515-8.485S19.206,4,16,4c-3.206,0-6.219,1.249-8.485,3.515 c-0.391,0.391-1.023,0.391-1.414,0s-0.391-1.023,0-1.414C8.745,3.457,12.26,2,16,2c3.74,0,7.256,1.457,9.899,4.101 C28.544,8.745,30,12.26,30,16c0,3.739-1.456,7.255-4.101,9.899C23.256,28.544,19.74,30,16,30z"
id="path3932"
style="fill:#a2a2a2;fill-opacity:1" /></g><g
id="g3934"
style="fill:#a2a2a2;fill-opacity:1"><path
d="M16,20c-1.068,0-2.073-0.416-2.829-1.172c-1.56-1.56-1.56-4.097,0-5.656c1.257-1.257,7.272-3.639,8.465-4.104 c0.371-0.144,0.79-0.056,1.07,0.225s0.369,0.7,0.225,1.07c-0.465,1.193-2.847,7.209-4.104,8.465C18.073,19.584,17.068,20,16,20z M20.188,11.813c-2.453,1.028-5.064,2.235-5.602,2.773c-0.78,0.78-0.78,2.048,0,2.828c0.756,0.756,2.073,0.756,2.829,0 C17.952,16.875,19.16,14.266,20.188,11.813z"
id="path3936"
style="fill:#a2a2a2;fill-opacity:1" /></g></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

51
src/static/menu-machines.svg Executable file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 32 32"
height="32px"
id="Layer_1"
version="1.1"
viewBox="0 0 32 32"
width="32px"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
sodipodi:docname="1454300768_truck.svg"><metadata
id="metadata3048"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3046" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview3044"
showgrid="false"
inkscape:zoom="7.375"
inkscape:cx="-10.305085"
inkscape:cy="16"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><g
id="truck_1_"
style="fill:#a2a2a2;fill-opacity:1"><path
d="M24.832,11.445C24.646,11.167,24.334,11,24,11h-1c-0.553,0-1,0.447-1,1v6c0,0.553,0.447,1,1,1h4 c0.553,0,1-0.447,1-1v-1.5c0-0.197-0.059-0.391-0.168-0.555L24.832,11.445z M27,18h-4v-6h1l3,4.5V18z"
fill="#333332"
id="path3040"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="M31.496,15.336l-4-6C26.938,8.499,26.004,8,25,8h-4V6c0-1.654-1.346-3-3-3H3C1.346,3,0,4.346,0,6v11 c0,1.654,1.346,3,3,3h0v3c0,1.654,1.346,3,3,3h1.142c0.447,1.721,2,3,3.859,3c1.857,0,3.41-1.279,3.857-3h5.282 c0.447,1.721,2,3,3.859,3c1.857,0,3.41-1.279,3.857-3H29c1.654,0,3-1.346,3-3v-6C32,16.406,31.826,15.83,31.496,15.336z M3,18 c-0.552,0-1-0.447-1-1V6c0-0.553,0.448-1,1-1h15c0.553,0,1,0.447,1,1v2v2v7c0,0.553-0.447,1-1,1H3z M11.001,27 c-1.105,0-2-0.896-2-2s0.895-2,2-2c1.104,0,2,0.896,2,2S12.104,27,11.001,27z M24,27c-1.105,0-2-0.896-2-2s0.895-2,2-2 c1.104,0,2,0.896,2,2S25.104,27,24,27z M30,23c0,0.553-0.447,1-1,1h-1.143c-0.447-1.721-2-3-3.857-3c-1.859,0-3.412,1.279-3.859,3 h-5.282c-0.447-1.721-2-3-3.857-3c-1.859,0-3.412,1.279-3.859,3H6c-0.552,0-1-0.447-1-1v-3h13c1.654,0,3-1.346,3-3v-7h4 c0.334,0,0.646,0.167,0.832,0.445l4,6C29.941,16.609,30,16.803,30,17V23z"
fill="#333332"
id="path3042"
style="fill:#a2a2a2;fill-opacity:1" /></g></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

77
src/static/menu-settings.svg Executable file
View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 128 128"
height="128px"
id="Layer_1"
version="1.1"
viewBox="0 0 128 128"
width="128px"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
sodipodi:docname="1454301416_settings.svg"><metadata
id="metadata3091"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3089" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview3087"
showgrid="false"
inkscape:zoom="1.84375"
inkscape:cx="-41.220339"
inkscape:cy="64"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
d="M 61.636503,66.295309 H 10.458208 c -1.2360991,0 -2.2393097,-1.00321 -2.2393097,-2.239309 0,-1.236099 1.0032106,-2.239309 2.2393097,-2.239309 h 51.178295 c 1.236099,0 2.239309,1.00321 2.239309,2.239309 0,1.236099 -1.00321,2.239309 -2.239309,2.239309 z"
id="path3069"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="M 117.63379,66.295309 H 90.479927 c -1.236099,0 -2.239309,-1.00321 -2.239309,-2.239309 0,-1.236099 1.00321,-2.239309 2.239309,-2.239309 h 27.153863 c 1.2361,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.00209,2.239309 -2.23931,2.239309 z"
id="path3071"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="M 46.643207,100.50412 H 10.458208 c -1.2360991,0 -2.2393097,-1.003212 -2.2393097,-2.239311 0,-1.236099 1.0032106,-2.239309 2.2393097,-2.239309 h 36.184999 c 1.236099,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.003211,2.239311 -2.23931,2.239311 z"
id="path3073"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="M 117.63379,100.50412 H 76.057655 c -1.236098,0 -2.239309,-1.003212 -2.239309,-2.239311 0,-1.236099 1.003211,-2.239309 2.239309,-2.239309 h 41.576135 c 1.2361,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.00209,2.239311 -2.23931,2.239311 z"
id="path3075"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="M 31.539066,32.08538 H 10.458208 c -1.2360991,0 -2.2393097,-1.00321 -2.2393097,-2.239309 0,-1.236099 1.0032106,-2.239309 2.2393097,-2.239309 h 21.080858 c 1.236099,0 2.239309,1.00321 2.239309,2.239309 0,1.236099 -1.00321,2.239309 -2.239309,2.239309 z"
id="path3077"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="M 117.63379,32.08538 H 60.384729 c -1.236099,0 -2.239309,-1.00321 -2.239309,-2.239309 0,-1.236099 1.00321,-2.239309 2.239309,-2.239309 h 57.249061 c 1.2361,0 2.23931,1.00321 2.23931,2.239309 0,1.236099 -1.00209,2.239309 -2.23931,2.239309 z"
id="path3079"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="m 40.0518,40.596995 c -5.928571,0 -10.753163,-4.824592 -10.753163,-10.753163 0,-5.928572 4.824592,-10.752044 10.753163,-10.752044 5.928572,0 10.753164,4.823472 10.753164,10.752044 0,5.929691 -4.824592,10.753163 -10.753164,10.753163 z m 0,-17.026588 c -3.459733,0 -6.274544,2.814811 -6.274544,6.273425 0,3.459733 2.814811,6.274545 6.274544,6.274545 3.459733,0 6.274545,-2.814812 6.274545,-6.274545 0,-3.458614 -2.814812,-6.273425 -6.274545,-6.273425 z"
id="path3081"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="m 55.155942,109.02021 c -5.928572,0 -10.753164,-4.82459 -10.753164,-10.754281 0,-5.928572 4.824592,-10.753164 10.753164,-10.753164 5.930811,0 10.754283,4.824592 10.754283,10.753164 0.0011,5.929691 -4.823472,10.754281 -10.754283,10.754281 z m 0,-17.028826 c -3.459733,0 -6.274545,2.814812 -6.274545,6.274545 0,3.461971 2.814812,6.275661 6.274545,6.275661 3.460852,0 6.275664,-2.81481 6.275664,-6.275661 0.0011,-3.459733 -2.814812,-6.274545 -6.275664,-6.274545 z"
id="path3083"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /><path
d="m 70.153716,74.810283 c -5.93193,0 -10.756522,-4.825712 -10.756522,-10.754283 0,-5.928571 4.825711,-10.753163 10.756522,-10.753163 5.927452,0 10.750924,4.823472 10.750924,10.753163 0,5.929691 -4.823472,10.754283 -10.750924,10.754283 z m 0,-17.028828 c -3.461972,0 -6.277904,2.814812 -6.277904,6.274545 0,3.460853 2.817052,6.275664 6.277904,6.275664 3.458614,0 6.272306,-2.815931 6.272306,-6.275664 0,-3.459733 -2.813692,-6.274545 -6.272306,-6.274545 z"
id="path3085"
inkscape:connector-curvature="0"
style="fill:#a2a2a2;fill-opacity:1" /></svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

68
src/static/menu-sync.svg Executable file
View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="32px"
version="1.1"
viewBox="0 0 32 32"
width="32px"
id="svg3043"
inkscape:version="0.48.4 r9939"
sodipodi:docname="1454301395_52_Cloud_Sync.svg">
<metadata
id="metadata3054">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview3052"
showgrid="false"
inkscape:zoom="7.375"
inkscape:cx="-10.305085"
inkscape:cy="16"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg3043" />
<defs
id="defs3047" />
<g
fill="none"
fill-rule="evenodd"
id="Icons new Arranged Names Color"
stroke="none"
stroke-width="1"
style="fill:#a2a2a2;fill-opacity:1">
<g
fill="#006FD1"
id="52 Cloud Sync"
style="fill:#a2a2a2;fill-opacity:1">
<path
d="M16,26 C18.4189531,26 20.4367034,24.2822474 20.8999819,22 L22.9291112,22 C22.4438852,25.392291 19.5264743,28 16,28 C13.5555272,28 11.4037064,26.7470086 10.1517571,24.8482429 L9,26 L9,25 L9,23 L9,22 L9.07088885,22 L11.1000181,22 L13,22 L11.6081371,23.3918629 C12.456236,24.945806 14.1050078,26 16,26 Z M20.8999819,20 L20,20 L19,20 L20.3918749,18.6081591 C19.5438006,17.0542175 17.8950132,16 16,16 C13.5810469,16 11.5632966,17.7177526 11.1000181,20 L9.07088885,20 C9.55611479,16.607709 12.4735257,14 16,14 C18.4444875,14 20.5963196,15.2530065 21.8482706,17.151799 L23,16.0000977 L23,20 L22.9291112,20 Z M0,19 C0,16.7828376 1.20753986,14.8416411 3.00211353,13.8029948 C3.10690617,8.92340284 7.0952729,5 12,5 C15.2334976,5 18.0687214,6.70521161 19.6554699,9.26543329 C20.2402065,9.09270496 20.859277,9 21.5,9 C24.2845531,9 26.6601501,10.7509485 27.5858427,13.2118973 C30.129704,13.9074543 32,16.2353674 32,19 C32,22.3069658 29.3136299,25 25.9998243,25 L24.0644804,25 C24.3768209,24.3714946 24.617851,23.701298 24.7769836,23 L26.0031611,23 C28.2105543,23 30,21.2046438 30,19 C30,16.790861 28.2058797,15 26.0031611,15 L25.9725356,15 C25.7238035,12.7500155 23.8162709,11 21.5,11 C20.4427534,11 19.4706636,11.3645993 18.7026063,11.974922 C17.8340685,9.0963276 15.1618462,7 12,7 C8.13400656,7 5,10.1340066 5,14 C5,14.3757911 5.0296122,14.7446659 5.08663046,15.1044183 C3.31778819,15.5175755 2,17.1080834 2,19 C2,21.209139 3.79412025,23 5.99683887,23 L7,23 L7,25 L6.00017566,25 C2.68697795,25 0,22.3137085 0,19 Z M0,19"
id="Rectangle 1 copy 4"
style="fill:#a2a2a2;fill-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

51
src/static/menu-users.svg Executable file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 24 24"
id="Layer_1"
version="1.0"
viewBox="0 0 24 24"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
width="100%"
height="100%"
sodipodi:docname="menu-users.svg"><metadata
id="metadata4530"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs4528" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview4526"
showgrid="false"
inkscape:zoom="13.906433"
inkscape:cx="-4.497109"
inkscape:cy="11.721495"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:none;stroke:#a2a2a2;stroke-width:0.83518392;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 11.999999,1.5788564 c -2.7814338,0 -5.0482614,2.2668276 -5.0482614,5.0482619 0,2.7814341 2.2668276,5.0482627 5.0482614,5.0482627 2.781435,0 5.048263,-2.2668286 5.048263,-5.0482627 0,-2.7814343 -2.266828,-5.0482619 -5.048263,-5.0482619 z"
id="circle4522"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssss" /><path
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:none;stroke:#a2a2a2;stroke-width:1;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="m 12,15.1875 c 3.987532,0 6.540859,1.282386 8.125,2.5625 1.523571,1.231168 2.081835,2.379808 2.125,2.46875 l 0,2.03125 -20.5,0 0,-2.03125 C 1.7931647,20.129808 2.3514295,18.981168 3.875,17.75 5.4591406,16.469886 8.0124676,15.1875 12,15.1875 z"
id="path4524"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccccss" /></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -21,5 +21,7 @@
########
# FAIT #
########
- [x] Adaptation de page-manger.js
- [x] Conception et dev routeur
- [x] Initialiser le github.com/git
- [x] Structure HTML de base

63
view.php Executable file
View File

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html>
<head>
<title>Gestion du parc</title>
<!-- Informations de la page -->
<meta name='Content-Type' content='text/html; charset=utf-8'>
<meta charset='utf-8'>
<meta name='author' content='Adrien MARQUÈS alias {xdrm};'>
<meta name='desctiption' content="Système de gestion des véhicules pour STEF.">
<!-- Dépendences CSS -->
<link type='text/css' rel='stylesheet' href='/css/reset.css' /> <!-- Reset du css natif des browsers -->
<link type='text/css' rel='stylesheet' href='/css/font.css' /> <!-- Positionnement global des pages -->
<link type='text/css' rel='stylesheet' href='/css/layout.css' /> <!-- Positionnement global des pages -->
<link type='text/css' rel='stylesheet' href='/css/header.css' /> <!-- Gestion du header -->
<link type='text/css' rel='stylesheet' href='/css/container.css'/> <!-- Gestion du container -->
<link type='text/css' rel='stylesheet' href='/css/menu.css' /> <!-- Gestion du menu -->
<link type='text/css' rel='stylesheet' href='/css/global.css' /> <!-- Style global -->
<!-- Dépendences Javascript -->
<script type='text/javascript' src='/js/lib/reset.js' ></script> <!-- Corrections Javascript natif (ajouts) -->
<script type='text/javascript' src='/js/lib/API.js' ></script> <!-- Gestion des dialogues client/serveur -->
<script type='text/javascript' src='/js/lib/page-manager.js' ></script> <!-- Gestion réseau/chargement/liens/URL -->
<script type='text/javascript' src='/js/lib/shortcut-manager.js' ></script> <!-- Gestion des raccourcis clavier -->
</head>
<body>
<!-- CORPS DE LA PAGE -->
<div id='WRAPPER'>
<!-- HEADER DE LA PAGE -->
<div id='HEADER'>
<div class='icon'></div>
</div>
<!-- MENU DE LA PAGE -->
<nav id='MENU-SIDE'>
<span data-link='dashboard' data-desc='Dashboard' ><?php include __ROOT__.'/src/static/menu-dashboard.svg'; ?></span>
<span data-link='machines' data-desc='Véhicules' ><?php include __ROOT__.'/src/static/menu-machines.svg'; ?></span>
<span data-link='users' data-desc='Utilisateurs' ><?php include __ROOT__.'/src/static/menu-users.svg'; ?></span>
<span data-link='sync' data-desc='Synchronisation'><?php include __ROOT__.'/src/static/menu-sync.svg'; ?></span>
<span data-link='settings' data-desc='Paramètres' ><?php include __ROOT__.'/src/static/menu-settings.svg'; ?></span>
</nav>
<!-- CONTENEUR DE LA PAGE -->
<div id='CONTAINER'></div>
</div>
<!-- Dépendences Javascript après chargement des éléments -->
<script type='text/javascript' src='/js/action-script.js'></script>
</body>
</html>

10
view/dashboard.php Normal file
View File

@ -0,0 +1,10 @@
<!-- [1] Gestion du sous-menu de gauche -->
<nav class='inside-menu'>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</nav>